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 javax
.sql
.DataSource
;
14 import org
.apache
.log4j
.Logger
;
15 import org
.hibernate
.dialect
.Dialect
;
17 import eu
.etaxonomy
.cdm
.database
.ICdmDataSource
;
18 import eu
.etaxonomy
.cdm
.database
.NomenclaturalCodeAwareDataSource
;
25 abstract class DatabaseTypeBase
implements IDatabaseType
{
26 private static final Logger logger
= Logger
.getLogger(DatabaseTypeBase
.class);
29 private String typeName
;
30 //String for DriverClass
31 private String classString
;
33 private String urlString
;
35 private int defaultPort
;
37 private Dialect hibernateDialect
;
39 private String initMethod
= null;
41 private String destroyMethod
= null;
45 protected void init(String typeName
, String classString
, String urlString
, int defaultPort
, Dialect hibernateDialect
) {
46 this.typeName
= typeName
;
47 this.classString
= classString
;
48 this.urlString
= urlString
;
49 this.defaultPort
= defaultPort
;
50 this.hibernateDialect
= hibernateDialect
;
54 public String
getName(){
59 public String
getClassString(){
64 public String
getUrlString(){
69 public int getDefaultPort(){
74 public Dialect
getHibernateDialect(){
75 return hibernateDialect
;
79 public String
getHibernateDialectCanonicalName(){
80 return hibernateDialect
.getClass().getCanonicalName();
84 public String
getConnectionString(ICdmDataSource cdmDataSource
){
85 int port
= cdmDataSource
.getPort();
89 return getConnectionString(cdmDataSource
, port
);
92 abstract protected String
getConnectionString(ICdmDataSource cdmDataSource
, int port
);
95 public Class
<?
extends DataSource
> getDataSourceClass() {
96 return NomenclaturalCodeAwareDataSource
.class;
100 public String
getInitMethod() {
105 public String
getDestroyMethod() {
106 return destroyMethod
;
110 public String
getServerNameByConnectionString(String connectionString
){
111 return getServerNameByConnectionString(connectionString
, urlString
, "/");
114 protected String
getServerNameByConnectionString(String connectionString
, String strUrl
, String dbSeparator
){
116 if (connectionString
== null || !connectionString
.startsWith(urlString
)){
119 connectionString
= connectionString
.substring(strUrl
.length());
120 int posPort
= connectionString
.indexOf(":");
121 int posDb
= connectionString
.indexOf(dbSeparator
);
122 if (posPort
!= -1 && posPort
< posDb
){
123 result
= connectionString
.substring(0, posPort
);
124 }else if (posDb
!= -1){
125 result
= connectionString
.substring(0, posDb
);
127 logger
.warn("No database defined or override for getServerNameByConnectionString() needed for this database type");
128 result
= connectionString
;
134 public int getPortByConnectionString(String connectionString
){
135 String dbSeparator
= "/";
136 return getPortByConnectionString(connectionString
, urlString
, dbSeparator
);
139 protected int getPortByConnectionString(String connectionString
, String strUrl
, String dbSeparator
){
140 if (connectionString
== null || !connectionString
.startsWith(urlString
)){
144 connectionString
= connectionString
.substring(strUrl
.length());
145 int posPort
= connectionString
.indexOf(":");
146 int posDb
= connectionString
.indexOf(dbSeparator
, posPort
+1);
148 result
= defaultPort
;
151 connectionString
= connectionString
.substring(posPort
+ 1, posDb
);
153 result
= Integer
.valueOf(connectionString
);
154 } catch (NumberFormatException e
) {
155 logger
.warn("Port is not an Integer in connection string: " + connectionString
);
159 logger
.warn("No database defined or override for getPortByConnectionString() needed for this database type");
167 protected String
getDatabasePartOfConnectionString(String connectionString
, String dbSeparator
){
169 if (connectionString
== null || !connectionString
.startsWith(urlString
)){
173 connectionString
= connectionString
.substring(urlString
.length()); //delete prefix
174 int posDb
= connectionString
.indexOf(dbSeparator
);
176 result
= connectionString
.substring(posDb
+ dbSeparator
.length() );
178 logger
.warn("No database defined or override for getServerNameByConnectionString() needed for this database type");
179 result
= connectionString
;
185 public abstract String
getDatabaseNameByConnectionString(String connectionString
);