data sources update and tests
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / database / types / DatabaseTypeBase.java
1 /**
2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
8 */
9
10 package eu.etaxonomy.cdm.database.types;
11
12 import org.apache.log4j.Logger;
13 import org.springframework.jdbc.datasource.DriverManagerDataSource;
14
15 import eu.etaxonomy.cdm.database.ICdmDataSource;
16
17
18 /**
19 * @author a.mueller
20 *
21 */
22 abstract class DatabaseTypeBase implements IDatabaseType {
23 @SuppressWarnings("unused")
24 private static final Logger logger = Logger.getLogger(DatabaseTypeBase.class);
25
26 //typeName
27 private String typeName;
28 //String for DriverClass
29 private String classString;
30 //url
31 private String urlString;
32 //defaultPort
33 private int defaultPort;
34 //hibernate dialect
35 private String hibernateDialect;
36 //init method
37 private String initMethod = null;
38 //init method
39 private String destroyMethod = null;
40
41
42 //init
43 protected void init(String typeName, String classString, String urlString, int defaultPort, String hibernateDialect) {
44 this.typeName = typeName;
45 this.classString = classString;
46 this.urlString = urlString;
47 this.defaultPort = defaultPort;
48 this.hibernateDialect = hibernateDialect;
49 }
50
51 /* (non-Javadoc)
52 * @see eu.etaxonomy.cdm.database.IDatabaseType#getName()
53 */
54 public String getName(){
55 return typeName;
56 }
57 /* (non-Javadoc)
58 * @see eu.etaxonomy.cdm.database.IDatabaseType#getClassString()
59 */
60 public String getClassString(){
61 return classString;
62 }
63
64 /* (non-Javadoc)
65 * @see eu.etaxonomy.cdm.database.IDatabaseType#getUrlString()
66 */
67 public String getUrlString(){
68 return urlString;
69 }
70
71 /* (non-Javadoc)
72 * @see eu.etaxonomy.cdm.database.IDatabaseType#getDefaultPort()
73 */
74 public int getDefaultPort(){
75 return defaultPort;
76 }
77
78 /* (non-Javadoc)
79 * @see eu.etaxonomy.cdm.database.IDatabaseType#getHibernateDialect()
80 */
81 public String getHibernateDialect(){
82 return "org.hibernate.dialect." + hibernateDialect;
83 }
84
85 /* (non-Javadoc)
86 * @see eu.etaxonomy.cdm.database.IDatabaseType#getConnectionString(java.lang.String, java.lang.String)
87 */
88 public String getConnectionString(ICdmDataSource cdmDataSource){
89 int port = cdmDataSource.getPort();
90 if (port< 1){
91 port = defaultPort;
92 }
93 return getConnectionString(cdmDataSource, port);
94 }
95
96 abstract protected String getConnectionString(ICdmDataSource cdmDataSource, int port);
97
98 /* (non-Javadoc)
99 * @see eu.etaxonomy.cdm.database.types.IDatabaseType#getDriverManagerDataSourceClass()
100 */
101 public Class<? extends DriverManagerDataSource> getDriverManagerDataSourceClass() {
102 return DriverManagerDataSource.class;
103 }
104
105 /* (non-Javadoc)
106 * @see eu.etaxonomy.cdm.database.types.IDatabaseType#getInitMethod()
107 */
108 public String getInitMethod() {
109 return initMethod;
110 }
111
112 /* (non-Javadoc)
113 * @see eu.etaxonomy.cdm.database.types.IDatabaseType#getDestroyMethod()
114 */
115 public String getDestroyMethod() {
116 return destroyMethod;
117 }
118
119 /* (non-Javadoc)
120 * @see eu.etaxonomy.cdm.database.types.IDatabaseType#getServerNameByConnectionString(java.lang.String)
121 */
122 public String getServerNameByConnectionString(String connectionString){
123 return getServerNameByConnectionString(connectionString, urlString, "/");
124 }
125
126 protected String getServerNameByConnectionString(String connectionString, String strUrl, String dbSeparator){
127 String result;
128 if (connectionString == null){
129 return null;
130 }
131 connectionString = connectionString.substring(strUrl.length());
132 int posPort = connectionString.indexOf(":");
133 int posDb = connectionString.indexOf(dbSeparator);
134 if (posPort != -1 && posPort < posDb){
135 result = connectionString.substring(0, posPort);
136 }else if (posDb != -1){
137 result = connectionString.substring(0, posDb);
138 }else{
139 logger.warn("No database defined or override for getServerNameByConnectionString() needed for this database type");
140 result = connectionString;
141 }
142 return result;
143 }
144
145 /* (non-Javadoc)
146 * @see eu.etaxonomy.cdm.database.types.IDatabaseType#getPortByConnectionString(java.lang.String)
147 */
148 public int getPortByConnectionString(String connectionString){
149 String dbSeparator = "/";
150 return getPortByConnectionString(connectionString, urlString, dbSeparator);
151 }
152
153 protected int getPortByConnectionString(String connectionString, String strUrl, String dbSeparator){
154 if (connectionString == null){
155 return -1;
156 }
157 int result;
158 connectionString = connectionString.substring(strUrl.length());
159 int posPort = connectionString.indexOf(":");
160 int posDb = connectionString.indexOf(dbSeparator, posPort+1);
161 if (posPort == -1){
162 result = defaultPort;
163 }else{
164 if (posDb != -1){
165 connectionString = connectionString.substring(posPort + 1, posDb);
166 try {
167 result = Integer.valueOf(connectionString);
168 } catch (NumberFormatException e) {
169 logger.warn("Port is not an Integer in connection string: " + connectionString);
170 return -1;
171 }
172 }else{
173 logger.warn("No database defined or override for getPortByConnectionString() needed for this database type");
174 result = -1;
175 }
176 }
177 return result;
178 }
179
180
181 protected String getDatabasePartOfConnectionString(String connectionString, String dbSeparator){
182 String result;
183 if (connectionString == null){
184 return null;
185 }
186 connectionString = connectionString.substring(urlString.length()); //delete prefix
187 int posDb = connectionString.indexOf(dbSeparator);
188 if (posDb != -1){
189 result = connectionString.substring(posDb + dbSeparator.length() );
190 }else{
191 logger.warn("No database defined or override for getServerNameByConnectionString() needed for this database type");
192 result = connectionString;
193 }
194 return result;
195 }
196
197 /* (non-Javadoc)
198 * @see eu.etaxonomy.cdm.database.types.IDatabaseType#getDatabaseNameByConnectionString(java.lang.String)
199 */
200 public abstract String getDatabaseNameByConnectionString(String connectionString);
201
202
203 }