Revision 9bd84319
Added by Cherian Mathew about 10 years ago
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/datasource/CdmDataSourceRepository.java | ||
---|---|---|
22 | 22 |
import org.eclipse.ui.IMemento; |
23 | 23 |
import org.eclipse.ui.XMLMemento; |
24 | 24 |
|
25 |
import eu.etaxonomy.cdm.config.CdmPersistentSourceUtils; |
|
25 | 26 |
import eu.etaxonomy.cdm.database.CdmDataSource; |
26 | 27 |
import eu.etaxonomy.cdm.database.CdmPersistentDataSource; |
27 | 28 |
import eu.etaxonomy.cdm.database.DataSourceNotFoundException; |
... | ... | |
64 | 65 |
* @return a boolean. |
65 | 66 |
*/ |
66 | 67 |
public static boolean delete(CdmPersistentDataSource dataSource) { |
67 |
CdmPersistentDataSource.delete(dataSource);
|
|
68 |
CdmPersistentSourceUtils.delete(dataSource);
|
|
68 | 69 |
return true; |
69 | 70 |
} |
70 | 71 |
|
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/CdmStore.java | ||
---|---|---|
30 | 30 |
import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration; |
31 | 31 |
import eu.etaxonomy.cdm.api.conversation.ConversationHolder; |
32 | 32 |
import eu.etaxonomy.cdm.api.service.IService; |
33 |
import eu.etaxonomy.cdm.config.ICdmSource; |
|
33 | 34 |
import eu.etaxonomy.cdm.database.DbSchemaValidation; |
34 | 35 |
import eu.etaxonomy.cdm.database.ICdmDataSource; |
35 | 36 |
import eu.etaxonomy.cdm.ext.geo.IEditGeoService; |
... | ... | |
83 | 84 |
|
84 | 85 |
private Language language; |
85 | 86 |
|
86 |
private ICdmDataSource cdmDatasource;
|
|
87 |
private ICdmSource cdmSource;
|
|
87 | 88 |
|
88 | 89 |
private boolean isConnected; |
89 | 90 |
|
... | ... | |
130 | 131 |
* @param datasource |
131 | 132 |
* a {@link eu.etaxonomy.cdm.database.ICdmDataSource} object. |
132 | 133 |
*/ |
133 |
public static void connect(ICdmDataSource datasource) {
|
|
134 |
connect(datasource, DEFAULT_DB_SCHEMA_VALIDATION,
|
|
134 |
public static void connect(ICdmSource cdmSource) {
|
|
135 |
connect(cdmSource, DEFAULT_DB_SCHEMA_VALIDATION,
|
|
135 | 136 |
DEFAULT_APPLICATION_CONTEXT); |
136 | 137 |
} |
137 | 138 |
|
... | ... | |
142 | 143 |
* @param dbSchemaValidation |
143 | 144 |
* @param applicationContextBean |
144 | 145 |
*/ |
145 |
private static void connect(final ICdmDataSource datasource,
|
|
146 |
private static void connect(final ICdmSource cdmSource,
|
|
146 | 147 |
final DbSchemaValidation dbSchemaValidation, |
147 | 148 |
final Resource applicationContextBean) { |
148 |
StoreUtil.info("Connecting to datasource: " + datasource);
|
|
149 |
StoreUtil.info("Connecting to datasource: " + cdmSource);
|
|
149 | 150 |
|
150 |
job = new CdmStoreConnector(Display.getDefault(), datasource,
|
|
151 |
job = new CdmStoreConnector(Display.getDefault(), cdmSource,
|
|
151 | 152 |
dbSchemaValidation, applicationContextBean); |
152 | 153 |
job.setUser(true); |
153 | 154 |
job.setPriority(Job.BUILD); |
... | ... | |
185 | 186 |
|
186 | 187 |
private void close() { |
187 | 188 |
isConnected = false; |
188 |
cdmDatasource = null;
|
|
189 |
cdmSource = null;
|
|
189 | 190 |
} |
190 | 191 |
|
191 | 192 |
static void setInstance(ICdmApplicationConfiguration applicationController, |
192 |
ICdmDataSource dataSource) {
|
|
193 |
instance = new CdmStore(applicationController, dataSource);
|
|
193 |
ICdmSource cdmSource) {
|
|
194 |
instance = new CdmStore(applicationController, cdmSource);
|
|
194 | 195 |
} |
195 | 196 |
|
196 | 197 |
private CdmStore(ICdmApplicationConfiguration applicationController, |
197 |
ICdmDataSource dataSource) {
|
|
198 |
ICdmSource cdmSource) {
|
|
198 | 199 |
this.applicationConfiguration = applicationController; |
199 | 200 |
AbstractLazyInitializer.setConfiguration(applicationController); |
200 | 201 |
AbstractPersistentCollection.setConfiguration(applicationController); |
201 |
this.cdmDatasource = dataSource;
|
|
202 |
this.cdmSource = cdmSource;
|
|
202 | 203 |
isConnected = true; |
203 | 204 |
} |
204 | 205 |
|
... | ... | |
500 | 501 |
return instance != null && instance.isConnected; |
501 | 502 |
} |
502 | 503 |
|
504 |
public static ICdmSource getActiveCdmSource() { |
|
505 |
if (isActive()) { |
|
506 |
return instance.getCdmSource(); |
|
507 |
} |
|
508 |
return null; |
|
509 |
} |
|
510 |
|
|
503 | 511 |
/** |
504 | 512 |
* <p> |
505 | 513 |
* getDataSource |
506 | 514 |
* </p> |
507 | 515 |
* |
508 | 516 |
* @return a {@link eu.etaxonomy.cdm.database.ICdmDataSource} object. |
517 |
* @deprecated currently retained for backward compatibility - use {@link getActiveCdmSource()} instead |
|
509 | 518 |
*/ |
510 | 519 |
public static ICdmDataSource getDataSource() { |
511 | 520 |
if (isActive()) { |
512 |
return instance.getDatasource();
|
|
521 |
return (ICdmDataSource)instance.getCdmSource();
|
|
513 | 522 |
} |
514 | 523 |
return null; |
515 | 524 |
} |
... | ... | |
517 | 526 |
/** |
518 | 527 |
* @return |
519 | 528 |
*/ |
520 |
private ICdmDataSource getDatasource() {
|
|
521 |
return cdmDatasource;
|
|
529 |
private ICdmSource getCdmSource() {
|
|
530 |
return cdmSource;
|
|
522 | 531 |
} |
523 | 532 |
|
524 | 533 |
} |
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/CdmStoreConnector.java | ||
---|---|---|
21 | 21 |
import org.springframework.core.io.Resource; |
22 | 22 |
|
23 | 23 |
import eu.etaxonomy.cdm.api.application.CdmApplicationController; |
24 |
import eu.etaxonomy.cdm.api.application.CdmApplicationRemoteController; |
|
24 | 25 |
import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration; |
26 |
import eu.etaxonomy.cdm.config.ICdmSource; |
|
27 |
import eu.etaxonomy.cdm.remote.ICdmRemoteSource; |
|
28 |
import eu.etaxonomy.cdm.config.CdmSourceException; |
|
25 | 29 |
import eu.etaxonomy.cdm.database.DatabaseTypeEnum; |
26 | 30 |
import eu.etaxonomy.cdm.database.DbSchemaValidation; |
27 | 31 |
import eu.etaxonomy.cdm.database.ICdmDataSource; |
... | ... | |
38 | 42 |
*/ |
39 | 43 |
class CdmStoreConnector extends Job { |
40 | 44 |
private final Display display; |
41 |
private final ICdmDataSource dataSource;
|
|
45 |
private final ICdmSource cdmSource;
|
|
42 | 46 |
private DbSchemaValidation dbSchemaValidation; |
43 | 47 |
private final Resource applicationContextBean; |
44 | 48 |
|
... | ... | |
47 | 51 |
* @param dbSchemaValidation |
48 | 52 |
* @param applicationContextBean |
49 | 53 |
*/ |
50 |
public CdmStoreConnector(Display display, ICdmDataSource datasource,
|
|
54 |
public CdmStoreConnector(Display display, ICdmSource cdmSource,
|
|
51 | 55 |
DbSchemaValidation dbSchemaValidation, |
52 | 56 |
Resource applicationContextBean) { |
53 |
super("Connecting to datasource: " + datasource);
|
|
57 |
super("Connecting to datasource: " + cdmSource);
|
|
54 | 58 |
this.display = display; |
55 |
this.dataSource = datasource;
|
|
59 |
this.cdmSource = cdmSource;
|
|
56 | 60 |
this.dbSchemaValidation = dbSchemaValidation; |
57 | 61 |
this.applicationContextBean = applicationContextBean; |
58 | 62 |
} |
... | ... | |
78 | 82 |
} |
79 | 83 |
|
80 | 84 |
// we are done with our low level checking and will free resources now |
81 |
dataSource.closeOpenConnections();
|
|
85 |
cdmSource.closeOpenConnections();
|
|
82 | 86 |
|
83 | 87 |
if (!monitor.isCanceled()) { |
84 | 88 |
CdmStore.close(monitor); |
... | ... | |
92 | 96 |
// This is where we instantiate the application controller |
93 | 97 |
try { |
94 | 98 |
|
95 |
applicationController = |
|
96 |
CdmApplicationController.NewInstance(applicationContextBean, |
|
97 |
dataSource, |
|
98 |
dbSchemaValidation, |
|
99 |
false, |
|
100 |
subprogressMonitor); |
|
99 |
applicationController = getApplicationController(cdmSource,subprogressMonitor); |
|
101 | 100 |
|
102 | 101 |
} catch (Exception e) { |
103 | 102 |
if(! causeIsCancelationExceptionRecursive(e)){ |
104 |
return new Status(IStatus.ERROR, "Could not connect to CDM Store", "An error occurred while trying to connect to datasource: " + dataSource.getName(), e);
|
|
103 |
return new Status(IStatus.ERROR, "Could not connect to CDM Store", "An error occurred while trying to connect to datasource: " + cdmSource.getName(), e);
|
|
105 | 104 |
} |
106 | 105 |
} finally { |
107 | 106 |
monitor.done(); |
... | ... | |
111 | 110 |
|
112 | 111 |
|
113 | 112 |
if (!monitor.isCanceled()) { |
114 |
CdmStore.setInstance(applicationController, dataSource);
|
|
113 |
CdmStore.setInstance(applicationController, cdmSource);
|
|
115 | 114 |
|
116 | 115 |
display.asyncExec(new Runnable() { |
117 | 116 |
/* |
... | ... | |
147 | 146 |
|
148 | 147 |
} |
149 | 148 |
|
149 |
private ICdmApplicationConfiguration getApplicationController(ICdmSource cdmSource, CdmProgressMonitorAdapter subprogressMonitor) { |
|
150 |
if(cdmSource instanceof ICdmDataSource) { |
|
151 |
return CdmApplicationController.NewInstance(applicationContextBean, |
|
152 |
(ICdmDataSource)cdmSource, |
|
153 |
dbSchemaValidation, |
|
154 |
false, |
|
155 |
subprogressMonitor); |
|
156 |
} else if(cdmSource instanceof ICdmRemoteSource) { |
|
157 |
return CdmApplicationRemoteController.NewInstance(applicationContextBean, |
|
158 |
(ICdmRemoteSource)cdmSource, |
|
159 |
false, |
|
160 |
subprogressMonitor, |
|
161 |
null); |
|
162 |
} else { |
|
163 |
throw new UnsupportedOperationException("Cannot create application controller for " + cdmSource.getName()); |
|
164 |
} |
|
165 |
} |
|
150 | 166 |
private void authenticate() { |
151 | 167 |
LoginDialog loginDialog = new LoginDialog(StoreUtil.getShell()); |
152 | 168 |
loginDialog.open(); |
... | ... | |
160 | 176 |
* @return |
161 | 177 |
*/ |
162 | 178 |
private String getConnectionMessage() { |
163 |
String message = ""; |
|
164 |
if (dataSource.getDatabaseType().equals(DatabaseTypeEnum.H2)) { |
|
165 |
message = " local CDM Store "; |
|
166 |
} else { |
|
167 |
message = " CDM Community Store "; |
|
168 |
} |
|
169 |
message += "'" + dataSource.getName() + "'"; |
|
170 |
|
|
171 |
message = "Connecting to" + message + "."; |
|
172 |
|
|
173 |
return message; |
|
179 |
return cdmSource.getConnectionMessage(); |
|
174 | 180 |
} |
175 | 181 |
|
176 | 182 |
/** |
... | ... | |
182 | 188 |
String dbSchemaVersion; |
183 | 189 |
boolean result = false; |
184 | 190 |
try { |
185 |
dbSchemaVersion = (String) dataSource |
|
186 |
.getSingleValue(MetaDataPropertyName.DB_SCHEMA_VERSION |
|
187 |
.getSqlQuery()); |
|
191 |
dbSchemaVersion = cdmSource.getDbSchemaVersion(); |
|
188 | 192 |
// we assume that empty dbSchemaVersion means an empty database and |
189 | 193 |
// skip version checking |
190 | 194 |
result = dbSchemaVersion == null ? true : CdmMetaData |
191 | 195 |
.isDbSchemaVersionCompatible(dbSchemaVersion); |
192 | 196 |
monitor.worked(1); |
193 |
} catch (SQLException e) {
|
|
197 |
} catch (CdmSourceException e) {
|
|
194 | 198 |
// |
195 | 199 |
} |
196 | 200 |
|
... | ... | |
202 | 206 |
this, |
203 | 207 |
"The database schema for the chosen " |
204 | 208 |
+ "datasource '" |
205 |
+ dataSource
|
|
209 |
+ cdmSource
|
|
206 | 210 |
+ "' \n is not valid for this version of the taxonomic editor. \n" |
207 | 211 |
+ "Please update the chosen datasource or choose a new data source to connect to in the Datasource View.", |
208 | 212 |
null); |
... | ... | |
214 | 218 |
|
215 | 219 |
private void checkIsNonEmptyCdmDatabase(IProgressMonitor monitor) { |
216 | 220 |
monitor.subTask("Checking if datasource is a non empty CDM database."); |
217 |
|
|
221 |
boolean isDbEmpty = false; |
|
218 | 222 |
try { |
219 |
dataSource.getSingleValue(MetaDataPropertyName.DB_SCHEMA_VERSION |
|
220 |
.getSqlQuery()); |
|
221 |
} catch (SQLException e1) { |
|
223 |
isDbEmpty = cdmSource.isDbEmpty(); |
|
224 |
} catch (CdmSourceException e) { |
|
225 |
isDbEmpty = true; |
|
226 |
} |
|
227 |
if(isDbEmpty) { |
|
222 | 228 |
dbSchemaValidation = DbSchemaValidation.CREATE; |
223 | 229 |
} |
224 | 230 |
} |
... | ... | |
236 | 242 |
private void checkDatabaseReachable(IProgressMonitor monitor) { |
237 | 243 |
try { |
238 | 244 |
monitor.subTask("Checking if datasource is reachable."); |
239 |
dataSource.testConnection();
|
|
245 |
cdmSource.checkConnection();
|
|
240 | 246 |
monitor.worked(1); |
241 |
} catch (ClassNotFoundException e) {
|
|
247 |
} catch (CdmSourceException e) {
|
|
242 | 248 |
StoreUtil.errorDialog("Could not connect to chosen datasource", |
243 | 249 |
this, "Reason: " + e.getMessage(), e); |
244 | 250 |
monitor.setCanceled(true); |
245 |
} catch (SQLException e) { |
|
246 |
StoreUtil.errorDialog("Could not connect to chosen datasource", |
|
247 |
this, "Reason: " + e.getMessage(), e); |
|
248 |
monitor.setCanceled(true); |
|
249 |
} |
|
250 |
|
|
251 |
} |
|
251 | 252 |
} |
252 | 253 |
} |
Also available in: Unified diff
updating to align with refactored cdm source classes / interfaces