data sources update and tests
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / database / types / H2DatabaseType.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 java.io.File;
13
14 import org.apache.log4j.Logger;
15 import org.springframework.jdbc.datasource.DriverManagerDataSource;
16
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;
21
22
23 /**
24 * @author a.mueller
25 *
26 */
27 public class H2DatabaseType extends DatabaseTypeBase {
28 private static final Logger logger = Logger.getLogger(H2DatabaseType.class);
29
30 //typeName
31 private String typeName = "H2 Database";
32
33 //class
34 private String classString = "org.h2.Driver";
35
36 //url
37 private String urlString = "jdbc:h2:";
38
39 //path
40 @SuppressWarnings("unused")
41 private String path = getDefaultPath();
42
43 //port
44 private int defaultPort = 9092;
45
46 //hibernate dialect
47 private String hibernateDialect = "H2CorrectedDialect";
48
49 //init method
50 private String initMethod = "init";
51
52 //destroy method
53 private String destroyMethod = "destroy";
54
55 //connection String
56 public String getConnectionString(ICdmDataSource ds, int port){
57 H2Mode mode = ds.getMode();
58 String path = ds.getFilePath();
59 if (path == null){
60 path = getDefaultPath();
61 }
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();
68 }else{
69 logger.warn("Unrecognized mode for Database H2");
70 return null;
71 }
72 }
73
74
75
76
77 /* (non-Javadoc)
78 * @see eu.etaxonomy.cdm.database.types.DatabaseTypeBase#getServerNameByConnectionString(java.lang.String)
79 */
80 @Override
81 public String getServerNameByConnectionString(String connectionString) {
82 String result;
83 if (connectionString.startsWith("file:")){
84 result = null;
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:")){
90 result = null;
91 }else{
92 logger.warn("Unknown conncection string format");
93 result = null;
94 }
95 return result;
96 }
97
98
99
100
101 /* (non-Javadoc)
102 * @see eu.etaxonomy.cdm.database.types.DatabaseTypeBase#getDatabaseNameByConnectionString(java.lang.String)
103 */
104 @Override
105 public String getDatabaseNameByConnectionString(String connectionString) {
106 int pos = -1;
107 String result;
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:")){
115 return null;
116 }else{
117 logger.warn("Unknown conncection string format");
118 return null;
119 }
120 return result;
121 }
122
123 /* (non-Javadoc)
124 * @see eu.etaxonomy.cdm.database.types.DatabaseTypeBase#getPortByConnectionString(java.lang.String)
125 */
126 @Override
127 public int getPortByConnectionString(String connectionString) {
128 int result;
129 if (connectionString.startsWith("file:")){
130 result = -1;
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:")){
136 result = -1;
137 }else{
138 logger.warn("Unknown conncection string format");
139 result = -1;
140 }
141 return result;
142 }
143
144
145 public H2DatabaseType() {
146 init (typeName, classString, urlString, defaultPort, hibernateDialect );
147 }
148
149 @Override
150 public Class<? extends DriverManagerDataSource> getDriverManagerDataSourceClass() {
151 return LocalH2.class;
152 }
153
154 /* (non-Javadoc)
155 * @see eu.etaxonomy.cdm.database.types.IDatabaseType#getInitMethod()
156 */
157 @Override
158 public String getInitMethod() {
159 return initMethod;
160 }
161
162 /* (non-Javadoc)
163 * @see eu.etaxonomy.cdm.database.types.IDatabaseType#getDestroyMethod()
164 */
165 @Override
166 public String getDestroyMethod() {
167 return destroyMethod;
168 }
169
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;
175 }
176
177
178 }