2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
10 package eu
.etaxonomy
.cdm
.database
.types
;
12 import org
.apache
.log4j
.Logger
;
13 import org
.springframework
.jdbc
.datasource
.DriverManagerDataSource
;
15 import eu
.etaxonomy
.cdm
.database
.ICdmDataSource
;
22 abstract class DatabaseTypeBase
implements IDatabaseType
{
23 @SuppressWarnings("unused")
24 private static final Logger logger
= Logger
.getLogger(DatabaseTypeBase
.class);
27 private String typeName
;
28 //String for DriverClass
29 private String classString
;
31 private String urlString
;
33 private int defaultPort
;
35 private String hibernateDialect
;
37 private String initMethod
= null;
39 private String destroyMethod
= null;
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
;
52 * @see eu.etaxonomy.cdm.database.IDatabaseType#getName()
54 public String
getName(){
58 * @see eu.etaxonomy.cdm.database.IDatabaseType#getClassString()
60 public String
getClassString(){
65 * @see eu.etaxonomy.cdm.database.IDatabaseType#getUrlString()
67 public String
getUrlString(){
72 * @see eu.etaxonomy.cdm.database.IDatabaseType#getDefaultPort()
74 public int getDefaultPort(){
79 * @see eu.etaxonomy.cdm.database.IDatabaseType#getHibernateDialect()
81 public String
getHibernateDialect(){
82 return "org.hibernate.dialect." + hibernateDialect
;
86 * @see eu.etaxonomy.cdm.database.IDatabaseType#getConnectionString(java.lang.String, java.lang.String)
88 public String
getConnectionString(ICdmDataSource cdmDataSource
){
89 int port
= cdmDataSource
.getPort();
93 return getConnectionString(cdmDataSource
, port
);
96 abstract protected String
getConnectionString(ICdmDataSource cdmDataSource
, int port
);
99 * @see eu.etaxonomy.cdm.database.types.IDatabaseType#getDriverManagerDataSourceClass()
101 public Class
<?
extends DriverManagerDataSource
> getDriverManagerDataSourceClass() {
102 return DriverManagerDataSource
.class;
106 * @see eu.etaxonomy.cdm.database.types.IDatabaseType#getInitMethod()
108 public String
getInitMethod() {
113 * @see eu.etaxonomy.cdm.database.types.IDatabaseType#getDestroyMethod()
115 public String
getDestroyMethod() {
116 return destroyMethod
;
120 * @see eu.etaxonomy.cdm.database.types.IDatabaseType#getServerNameByConnectionString(java.lang.String)
122 public String
getServerNameByConnectionString(String connectionString
){
123 return getServerNameByConnectionString(connectionString
, urlString
, "/");
126 protected String
getServerNameByConnectionString(String connectionString
, String strUrl
, String dbSeparator
){
128 if (connectionString
== null){
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
);
139 logger
.warn("No database defined or override for getServerNameByConnectionString() needed for this database type");
140 result
= connectionString
;
146 * @see eu.etaxonomy.cdm.database.types.IDatabaseType#getPortByConnectionString(java.lang.String)
148 public int getPortByConnectionString(String connectionString
){
149 String dbSeparator
= "/";
150 return getPortByConnectionString(connectionString
, urlString
, dbSeparator
);
153 protected int getPortByConnectionString(String connectionString
, String strUrl
, String dbSeparator
){
154 if (connectionString
== null){
158 connectionString
= connectionString
.substring(strUrl
.length());
159 int posPort
= connectionString
.indexOf(":");
160 int posDb
= connectionString
.indexOf(dbSeparator
, posPort
+1);
162 result
= defaultPort
;
165 connectionString
= connectionString
.substring(posPort
+ 1, posDb
);
167 result
= Integer
.valueOf(connectionString
);
168 } catch (NumberFormatException e
) {
169 logger
.warn("Port is not an Integer in connection string: " + connectionString
);
173 logger
.warn("No database defined or override for getPortByConnectionString() needed for this database type");
181 protected String
getDatabasePartOfConnectionString(String connectionString
, String dbSeparator
){
183 if (connectionString
== null){
186 connectionString
= connectionString
.substring(urlString
.length()); //delete prefix
187 int posDb
= connectionString
.indexOf(dbSeparator
);
189 result
= connectionString
.substring(posDb
+ dbSeparator
.length() );
191 logger
.warn("No database defined or override for getServerNameByConnectionString() needed for this database type");
192 result
= connectionString
;
198 * @see eu.etaxonomy.cdm.database.types.IDatabaseType#getDatabaseNameByConnectionString(java.lang.String)
200 public abstract String
getDatabaseNameByConnectionString(String connectionString
);