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
.taxeditor
.datasource
;
12 import java
.lang
.reflect
.InvocationTargetException
;
13 import java
.util
.ArrayList
;
14 import java
.util
.List
;
16 import org
.apache
.log4j
.Logger
;
17 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
18 import org
.eclipse
.jface
.dialogs
.ProgressMonitorDialog
;
19 import org
.eclipse
.jface
.operation
.IRunnableWithProgress
;
21 import eu
.etaxonomy
.cdm
.api
.application
.CdmApplicationController
;
22 import eu
.etaxonomy
.cdm
.database
.CdmDataSource
;
23 import eu
.etaxonomy
.cdm
.database
.CdmPersistentDataSource
;
24 import eu
.etaxonomy
.cdm
.database
.DatabaseTypeEnum
;
25 import eu
.etaxonomy
.cdm
.database
.DbSchemaValidation
;
26 import eu
.etaxonomy
.cdm
.database
.ICdmDataSource
;
27 import eu
.etaxonomy
.cdm
.model
.common
.init
.TermNotFoundException
;
28 import eu
.etaxonomy
.taxeditor
.controller
.EditorController
;
29 import eu
.etaxonomy
.taxeditor
.controller
.GlobalController
;
30 import eu
.etaxonomy
.taxeditor
.controller
.TreeController
;
31 import eu
.etaxonomy
.taxeditor
.model
.CdmSessionDataRepository
;
33 public class CdmDataSourceRepository
implements ICdmDataSourceRepository
{
34 private static final Logger logger
= Logger
35 .getLogger(CdmDataSourceRepository
.class);
37 private static ICdmDataSource currentDataSource
;
38 private static ICdmDataSourceRepository repository
;
39 private List
<ICdmDataSource
> dataSources
;
40 private CdmApplicationController cdmAppController
;
42 public static ICdmDataSourceRepository
getDefault() {
43 if (repository
== null) {
44 repository
= new CdmDataSourceRepository();
46 // Create datasource for local H2 database
47 ICdmDataSource h2DataSource
= CdmDataSource
.NewH2EmbeddedInstance(
49 repository
.add(h2DataSource
);
51 // Add stored datasources to repository
52 for (ICdmDataSource dataSource
: CdmPersistentDataSource
.getAllDataSources()) {
53 repository
.add(dataSource
);
56 // Get default datasource
57 ICdmDataSource defaultDataSource
= CdmPersistentDataSource
.NewDefaultInstance();
59 // If none specified, use local H2 database
60 if (defaultDataSource
== null) {
61 defaultDataSource
= h2DataSource
;
64 // Set repository's current datasource
65 repository
.setCurrentDataSource(defaultDataSource
);
67 // defaultDataSource = CdmPersistentDataSource.save("mysql_cichorieae", DatabaseTypeEnum.MySQL, "87.106.88.177", "cdm_edit_cichorieae", 80, "edit", "R3m0teAt80");
68 // CdmDataSource mySqlDataSource = CdmDataSource.NewMySqlInstance(
69 // "87.106.88.177", "cdm_edit_cichorieae", 80, "edit", "R3m0teAt80");
75 public boolean add(ICdmDataSource dataSource
) {
76 return getDataSources().add(dataSource
);
81 public boolean delete(CdmPersistentDataSource dataSource
) {
82 CdmPersistentDataSource
.delete(dataSource
);
83 return remove(dataSource
);
87 public boolean remove(ICdmDataSource dataSource
) {
88 return getDataSources().remove(dataSource
);
92 public List
<ICdmDataSource
> getAll() {
93 return getDataSources();
97 public ICdmDataSource
getCurrentDataSource() {
98 if (currentDataSource
== null) {
99 throw new IllegalStateException("Current data source not set.");
101 return currentDataSource
;
105 public boolean setCurrentDataSource(ICdmDataSource dataSource
) {
106 if (currentDataSource
!= null) {
107 if (!changeDataSource(dataSource
)) {
111 currentDataSource
= dataSource
;
116 public void setCdmApplicationController(
117 CdmApplicationController cdmAppController
) {
118 this.cdmAppController
= cdmAppController
;
121 private CdmApplicationController
getCdmAppController() {
122 if (cdmAppController
== null) {
123 throw new IllegalStateException("CdmApplicationController not set.");
125 return cdmAppController
;
128 private List
<ICdmDataSource
> getDataSources() {
129 if (dataSources
== null) {
130 dataSources
= new ArrayList
<ICdmDataSource
>();
135 private boolean changeDataSource(final ICdmDataSource dataSource
) {
137 // Close all open editors before showing progress monitor
138 if (!EditorController
.closeAll()) {
140 // User has canceled operation
145 IRunnableWithProgress op
= new IRunnableWithProgress() {
148 public void run(IProgressMonitor monitor
)
149 throws InvocationTargetException
, InterruptedException
{
151 // Start the progress bar with 25 steps
152 monitor
.beginTask("Changing to a new datasource ...", 25);
154 // Clear all session variables
155 CdmSessionDataRepository
.getDefault().clearNonTaxonData();
158 // Clear session taxa
159 CdmSessionDataRepository
.getDefault().clearTaxonData();
162 CdmTransactionController
.commitTransaction();
166 // getCdmAppController().changeDataSource(dataSource);
167 getCdmAppController().changeDataSource(dataSource
, DbSchemaValidation
.UPDATE
);
168 } catch (TermNotFoundException e
) {
169 // TODO Auto-generated catch block
174 CdmTransactionController
.startTransaction();
177 // Get session root taxa
178 // TODO get listener in tree content provider to take care of this
179 TreeController
.getTreeViewer().setInput(
180 CdmSessionDataRepository
.getDefault().getRootTaxa());
188 new ProgressMonitorDialog(GlobalController
.getShell()).run(false, true, op
);
189 } catch (InvocationTargetException e
) {
192 } catch (InterruptedException e
) {
200 public CdmPersistentDataSource
save(String dataSourceName
, DatabaseTypeEnum databaseType
,
201 String server
, String database
, int port
, String username
,
203 CdmPersistentDataSource dataSource
= CdmPersistentDataSource
.save(
204 dataSourceName
, databaseType
, server
, database
, port
, username
, password
);
210 public CdmPersistentDataSource
save(String dataSourceName
, DatabaseTypeEnum databaseType
,
211 String server
, String database
, String username
, String password
) {
212 CdmPersistentDataSource dataSource
= CdmPersistentDataSource
.save(
213 dataSourceName
, databaseType
, server
, database
, username
, password
);