001 /*
002 * The MIT License
003 *
004 * Copyright (c) 2012, Ninja Squad
005 *
006 * Permission is hereby granted, free of charge, to any person obtaining a copy
007 * of this software and associated documentation files (the "Software"), to deal
008 * in the Software without restriction, including without limitation the rights
009 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
010 * copies of the Software, and to permit persons to whom the Software is
011 * furnished to do so, subject to the following conditions:
012 *
013 * The above copyright notice and this permission notice shall be included in
014 * all copies or substantial portions of the Software.
015 *
016 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
017 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
018 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
019 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
020 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
021 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
022 * THE SOFTWARE.
023 */
024
025 package com.ninja_squad.dbsetup.destination;
026
027 import com.ninja_squad.dbsetup.util.Preconditions;
028
029 import javax.annotation.Nonnull;
030 import javax.annotation.concurrent.Immutable;
031 import java.sql.Connection;
032 import java.sql.DriverManager;
033 import java.sql.SQLException;
034
035 /**
036 * A destination which uses the {@link DriverManager} to get a connection
037 * @author JB Nizet
038 */
039 @Immutable
040 public final class DriverManagerDestination implements Destination {
041
042 private final String url;
043 private final String user;
044 private final String password;
045
046 /**
047 * Constructor
048 * @param url the URL of the database
049 * @param user the user used to get a connection
050 * @param password the password used to get a connection
051 */
052 public DriverManagerDestination(@Nonnull String url, String user, String password) {
053 Preconditions.checkNotNull(url, "url may not be null");
054 this.url = url;
055 this.user = user;
056 this.password = password;
057 }
058
059 /**
060 * Factory method creating a new DriverManagerDestination. This allows a more readable style than using the
061 * constructor:
062 *
063 * <pre>
064 * DbSetup dbSetup = new DbSetup(DriverManagerDestination.with(url, user, password), operation);
065 * </pre>
066 *
067 * or, if this method is statically imported:
068 *
069 * <pre>
070 * DbSetup dbSetup = new DbSetup(with(url, user, password), operation);
071 * </pre>
072 *
073 * instead of
074 *
075 * <pre>
076 * DbSetup dbSetup = new DbSetup(new DriverManagerDestination(url, user, password), operation);
077 * </pre>
078 *
079 * @param url the URL of the database
080 * @param user the user used to get a connection
081 * @param password the password used to get a connection
082 */
083 public static DriverManagerDestination with(@Nonnull String url, String user, String password) {
084 return new DriverManagerDestination(url, user, password);
085 }
086
087 @Override
088 public Connection getConnection() throws SQLException {
089 return DriverManager.getConnection(url, user, password);
090 }
091
092 @Override
093 public String toString() {
094 return "DriverManagerDestination [url="
095 + url
096 + ", user="
097 + user
098 + ", password="
099 + password
100 + "]";
101 }
102
103 @Override
104 public int hashCode() {
105 final int prime = 31;
106 int result = 1;
107 result = prime * result + url.hashCode();
108 result = prime * result + ((password == null) ? 0 : password.hashCode());
109 result = prime * result + ((user == null) ? 0 : user.hashCode());
110 return result;
111 }
112
113 @Override
114 public boolean equals(Object obj) {
115 if (this == obj) {
116 return true;
117 }
118 if (obj == null) {
119 return false;
120 }
121 if (getClass() != obj.getClass()) {
122 return false;
123 }
124 DriverManagerDestination other = (DriverManagerDestination) obj;
125 if (password == null) {
126 if (other.password != null) {
127 return false;
128 }
129 }
130 else if (!password.equals(other.password)) {
131 return false;
132 }
133 if (!url.equals(other.url)) {
134 return false;
135 }
136 if (user == null) {
137 if (other.user != null) {
138 return false;
139 }
140 }
141 else if (!user.equals(other.user)) {
142 return false;
143 }
144 return true;
145 }
146 }