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
;
14 import org
.apache
.log4j
.Logger
;
15 import org
.springframework
.jdbc
.datasource
.DriverManagerDataSource
;
17 import eu
.etaxonomy
.cdm
.api
.application
.CdmApplicationUtils
;
18 import eu
.etaxonomy
.cdm
.database
.H2Mode
;
19 import eu
.etaxonomy
.cdm
.database
.ICdmDataSource
;
20 import eu
.etaxonomy
.cdm
.database
.LocalH2
;
27 public class H2DatabaseType
extends DatabaseTypeBase
{
28 private static final Logger logger
= Logger
.getLogger(H2DatabaseType
.class);
31 private String typeName
= "H2 Database";
34 private String classString
= "org.h2.Driver";
37 private String urlString
= "jdbc:h2:";
40 @SuppressWarnings("unused")
41 private String path
= getDefaultPath();
44 private int defaultPort
= 9092;
47 private String hibernateDialect
= "H2CorrectedDialect";
50 private String initMethod
= "init";
53 private String destroyMethod
= "destroy";
56 public String
getConnectionString(ICdmDataSource ds
, int port
){
57 H2Mode mode
= ds
.getMode();
58 String path
= ds
.getFilePath();
60 path
= getDefaultPath();
62 if (mode
.equals(H2Mode
.IN_MEMORY
)){
63 return urlString
+ "mem:";
64 }else if (mode
.equals(H2Mode
.EMBEDDED
)){
65 return urlString
+ "file:" + path
+ "/" + ds
.getDatabase();
66 }else if (mode
.equals(H2Mode
.TCP
)){
67 return urlString
+ "tcp://" + ds
.getServer() + ":" + port
+ "/" + path
+ "/" + ds
.getDatabase();
69 logger
.warn("Unrecognized mode for Database H2");
78 * @see eu.etaxonomy.cdm.database.types.DatabaseTypeBase#getServerNameByConnectionString(java.lang.String)
81 public String
getServerNameByConnectionString(String connectionString
) {
83 if (connectionString
.startsWith("file:")){
85 }else if (connectionString
.startsWith("tcp://")){
86 String prefix
= "tcp://";
87 String dbSeparator
= "/";
88 result
= getServerNameByConnectionString(connectionString
, prefix
, dbSeparator
);
89 }else if (connectionString
.startsWith("mem:")){
92 logger
.warn("Unknown conncection string format");
102 * @see eu.etaxonomy.cdm.database.types.DatabaseTypeBase#getDatabaseNameByConnectionString(java.lang.String)
105 public String
getDatabaseNameByConnectionString(String connectionString
) {
108 if (connectionString
.startsWith("file:")){
109 pos
= connectionString
.lastIndexOf("/");
110 result
= connectionString
.substring(pos
+ 1);
111 }else if (connectionString
.startsWith("tcp://")){
112 pos
= connectionString
.lastIndexOf("/");
113 result
= connectionString
.substring(pos
+ 1);
114 }else if (connectionString
.startsWith("mem:")){
117 logger
.warn("Unknown conncection string format");
124 * @see eu.etaxonomy.cdm.database.types.DatabaseTypeBase#getPortByConnectionString(java.lang.String)
127 public int getPortByConnectionString(String connectionString
) {
129 if (connectionString
.startsWith("file:")){
131 }else if (connectionString
.startsWith("tcp://")){
132 String prefix
= "tcp://";
133 String dbSeparator
= "/";
134 result
= getPortByConnectionString(connectionString
, prefix
, dbSeparator
);
135 }else if (connectionString
.startsWith("mem:")){
138 logger
.warn("Unknown conncection string format");
145 public H2DatabaseType() {
146 init (typeName
, classString
, urlString
, defaultPort
, hibernateDialect
);
150 public Class
<?
extends DriverManagerDataSource
> getDriverManagerDataSourceClass() {
151 return LocalH2
.class;
155 * @see eu.etaxonomy.cdm.database.types.IDatabaseType#getInitMethod()
158 public String
getInitMethod() {
163 * @see eu.etaxonomy.cdm.database.types.IDatabaseType#getDestroyMethod()
166 public String
getDestroyMethod() {
167 return destroyMethod
;
170 private static final String
getDefaultPath(){
171 //String path = System.getProperty("user.dir");
172 File path
= CdmApplicationUtils
.getWritableResourceDir();
173 String subPath
= File
.separator
+ "h2" + File
.separator
+ "LocalH2";
174 return path
+ subPath
;