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 }