Revision 5ed160dc
Added by Cherian Mathew almost 10 years ago
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/datasource/CdmDataSourceRepository.java | ||
---|---|---|
23 | 23 |
import org.eclipse.ui.XMLMemento; |
24 | 24 |
|
25 | 25 |
import eu.etaxonomy.cdm.config.CdmPersistentSourceUtils; |
26 |
import eu.etaxonomy.cdm.config.ICdmPersistentSource; |
|
27 |
import eu.etaxonomy.cdm.config.ICdmSource; |
|
26 | 28 |
import eu.etaxonomy.cdm.database.CdmDataSource; |
27 | 29 |
import eu.etaxonomy.cdm.database.CdmPersistentDataSource; |
28 | 30 |
import eu.etaxonomy.cdm.database.DataSourceNotFoundException; |
29 | 31 |
import eu.etaxonomy.cdm.database.ICdmDataSource; |
30 | 32 |
import eu.etaxonomy.cdm.model.name.NomenclaturalCode; |
33 |
import eu.etaxonomy.cdm.remote.CdmPersistentRemoteSource; |
|
34 |
import eu.etaxonomy.cdm.remote.CdmRemoteSourceException; |
|
35 |
import eu.etaxonomy.cdm.remote.ICdmRemoteSource; |
|
31 | 36 |
import eu.etaxonomy.taxeditor.model.MementoHelper; |
32 | 37 |
import eu.etaxonomy.taxeditor.preference.PreferencesUtil; |
33 | 38 |
import eu.etaxonomy.taxeditor.store.CdmStore; |
34 | 39 |
import eu.etaxonomy.taxeditor.store.StoreUtil; |
35 | 40 |
import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin; |
36 |
public class CdmDataSourceRepository{;
|
|
41 |
public class CdmDataSourceRepository{ |
|
37 | 42 |
|
38 | 43 |
/** Constant <code>TAG_DATASOURCE="tagDataSource"</code> */ |
39 | 44 |
public static final String TAG_DATASOURCE = "tagDataSource"; |
... | ... | |
41 | 46 |
private static final String DEFAULT_DATASOURCE_STATE_FILENAME = "datasource.xml"; |
42 | 47 |
private static final String DEFAULT_DATASOURCE_NAME = "cdm"; |
43 | 48 |
|
44 |
private static ICdmDataSource currentDataSource;
|
|
49 |
private static ICdmSource currentCdmSource;
|
|
45 | 50 |
private static IMemento memento; |
46 | 51 |
private static String lastUsedDataSourceName; |
47 | 52 |
|
... | ... | |
64 | 69 |
* @param dataSource a {@link eu.etaxonomy.cdm.database.CdmPersistentDataSource} object. |
65 | 70 |
* @return a boolean. |
66 | 71 |
*/ |
67 |
public static boolean delete(CdmPersistentDataSource dataSource) {
|
|
68 |
CdmPersistentSourceUtils.delete(dataSource);
|
|
72 |
public static boolean delete(ICdmPersistentSource cdmPersistentSource) {
|
|
73 |
CdmPersistentSourceUtils.delete(cdmPersistentSource);
|
|
69 | 74 |
return true; |
70 | 75 |
} |
71 | 76 |
|
... | ... | |
75 | 80 |
* |
76 | 81 |
* @return a {@link java.util.List} object. |
77 | 82 |
*/ |
78 |
public static List<ICdmDataSource> getAll() {
|
|
79 |
List<ICdmDataSource> dataSources = new ArrayList<ICdmDataSource>();
|
|
83 |
public static List<ICdmSource> getAll() { |
|
84 |
List<ICdmSource> remoteSources = new ArrayList<ICdmSource>();
|
|
80 | 85 |
|
81 | 86 |
for(ICdmDataSource dataSource : CdmPersistentDataSource.getAllDataSources()){ |
82 | 87 |
try { |
83 |
dataSources.add(CdmPersistentDataSource.NewInstance(dataSource.getName()));
|
|
88 |
remoteSources.add(CdmPersistentDataSource.NewInstance(dataSource.getName()));
|
|
84 | 89 |
} catch (DataSourceNotFoundException e) { |
85 | 90 |
StoreUtil.error(CdmDataSourceRepository.class, "Could not find dataSource", e); |
86 | 91 |
} |
87 | 92 |
} |
88 | 93 |
|
94 |
try { |
|
95 |
for(ICdmRemoteSource remoteSource : CdmPersistentRemoteSource.getAllRemoteSources()){ |
|
96 |
remoteSources.add(remoteSource); |
|
97 |
} |
|
98 |
} catch (CdmRemoteSourceException e) { |
|
99 |
StoreUtil.error(CdmDataSourceRepository.class, "Error retrieving remote sources", e); |
|
100 |
} |
|
101 |
|
|
89 | 102 |
// TODO sort by database name |
90 | 103 |
|
91 |
return dataSources;
|
|
104 |
return remoteSources;
|
|
92 | 105 |
} |
93 | 106 |
|
94 | 107 |
/** |
... | ... | |
111 | 124 |
|
112 | 125 |
return null; |
113 | 126 |
} |
127 |
|
|
114 | 128 |
|
115 | 129 |
/** |
116 | 130 |
* <p>Getter for the field <code>currentDataSource</code>.</p> |
117 | 131 |
* |
118 | 132 |
* @return a {@link eu.etaxonomy.cdm.database.ICdmDataSource} object. |
133 |
* @throws CdmRemoteSourceException |
|
119 | 134 |
*/ |
120 |
public static ICdmDataSource getCurrentDataSource() { |
|
121 |
if (currentDataSource == null) { |
|
122 |
try { |
|
123 |
currentDataSource = CdmPersistentDataSource.NewInstance(getLastUsedDataSourceName()); |
|
124 |
} catch (DataSourceNotFoundException e) { |
|
125 |
// fallback creates a new default |
|
126 |
ICdmDataSource h2DataSource = CdmDataSource.NewH2EmbeddedInstance( |
|
127 |
DEFAULT_DATASOURCE_NAME, "sa", "", PreferencesUtil.getPreferredNomenclaturalCode()); |
|
128 |
save(h2DataSource.getName(), h2DataSource); |
|
129 |
setCurrentDataSource(h2DataSource); |
|
135 |
public static ICdmSource getCurrentCdmSource() throws CdmRemoteSourceException { |
|
136 |
|
|
137 |
if (currentCdmSource == null) { |
|
138 |
String lastUsedCdmSourceName = getLastUsedDataSourceName(); |
|
139 |
if(lastUsedCdmSourceName.endsWith(CdmPersistentDataSource.DATASOURCE_BEAN_POSTFIX)) { |
|
140 |
try { |
|
141 |
currentCdmSource = CdmPersistentDataSource.NewInstance(lastUsedCdmSourceName); |
|
142 |
} catch (DataSourceNotFoundException e) { |
|
143 |
// fallback creates a new default |
|
144 |
ICdmDataSource h2DataSource = CdmDataSource.NewH2EmbeddedInstance( |
|
145 |
DEFAULT_DATASOURCE_NAME, "sa", "", PreferencesUtil.getPreferredNomenclaturalCode()); |
|
146 |
save(h2DataSource.getName(), h2DataSource); |
|
147 |
setCurrentCdmSource(h2DataSource); |
|
148 |
} |
|
149 |
} else if (lastUsedCdmSourceName.endsWith(CdmPersistentRemoteSource.REMOTESOURCE_BEAN_POSTFIX)) { |
|
150 |
currentCdmSource = CdmPersistentRemoteSource.NewInstance(lastUsedCdmSourceName); |
|
151 |
} else { |
|
152 |
throw new CdmRemoteSourceException("Unkown Cdm Source Type"); |
|
130 | 153 |
} |
131 | 154 |
} |
132 |
return currentDataSource;
|
|
155 |
return currentCdmSource;
|
|
133 | 156 |
} |
134 | 157 |
|
135 | 158 |
/** |
... | ... | |
138 | 161 |
* @param dataSource a {@link eu.etaxonomy.cdm.database.ICdmDataSource} object. |
139 | 162 |
* @return a boolean. |
140 | 163 |
*/ |
141 |
public static boolean setCurrentDataSource(ICdmDataSource dataSource) {
|
|
142 |
currentDataSource = dataSource;
|
|
143 |
NomenclaturalCode dataSourceNomenclaturalCode = dataSource.getNomenclaturalCode();
|
|
164 |
public static boolean setCurrentCdmSource(ICdmSource cdmSource) {
|
|
165 |
currentCdmSource = cdmSource;
|
|
166 |
NomenclaturalCode dataSourceNomenclaturalCode = cdmSource.getNomenclaturalCode();
|
|
144 | 167 |
NomenclaturalCode applicationNomenclaturalCode = PreferencesUtil.getPreferredNomenclaturalCode(); |
145 | 168 |
|
146 | 169 |
if( dataSourceNomenclaturalCode != null && ! dataSourceNomenclaturalCode.equals(applicationNomenclaturalCode)){ |
... | ... | |
158 | 181 |
* @param dataSource a {@link eu.etaxonomy.cdm.database.ICdmDataSource} object. |
159 | 182 |
* @return a boolean. |
160 | 183 |
*/ |
161 |
public static boolean changeDataSource(final ICdmDataSource dataSource) { |
|
162 |
saveAsCurrentDatabaseToMemento(dataSource); |
|
163 |
|
|
164 |
CdmStore.connect(dataSource); |
|
184 |
public static boolean changeDataSource(final ICdmSource cdmSource) { |
|
185 |
saveAsCurrentDatabaseToMemento(cdmSource); |
|
186 |
CdmStore.connect(cdmSource); |
|
165 | 187 |
|
166 | 188 |
return true; |
167 | 189 |
} |
... | ... | |
172 | 194 |
* @param dataSource a {@link eu.etaxonomy.cdm.database.ICdmDataSource} object. |
173 | 195 |
* @param strDataSourceName a {@link java.lang.String} object. |
174 | 196 |
* @return a {@link eu.etaxonomy.cdm.database.CdmPersistentDataSource} object. |
197 |
* @throws CdmRemoteSourceException |
|
198 |
*/ |
|
199 |
public static ICdmPersistentSource save(String strCdmSourceName, ICdmRemoteSource cdmSource) throws CdmRemoteSourceException { |
|
200 |
return CdmPersistentRemoteSource.save(strCdmSourceName, cdmSource); |
|
201 |
} |
|
202 |
|
|
203 |
/** |
|
204 |
* <p>save</p> |
|
205 |
* |
|
206 |
* @param dataSource a {@link eu.etaxonomy.cdm.database.ICdmDataSource} object. |
|
207 |
* @param strDataSourceName a {@link java.lang.String} object. |
|
208 |
* @return a {@link eu.etaxonomy.cdm.database.CdmPersistentDataSource} object. |
|
209 |
* @throws CdmRemoteSourceException |
|
175 | 210 |
*/ |
176 |
public static CdmPersistentDataSource save(String strDataSourceName, ICdmDataSource dataSource) { |
|
177 |
return CdmPersistentDataSource.save(strDataSourceName, dataSource); |
|
211 |
public static ICdmPersistentSource save(String strCdmSourceName, ICdmDataSource cdmSource) { |
|
212 |
return CdmPersistentDataSource.save(strCdmSourceName, cdmSource); |
|
213 |
} |
|
214 |
|
|
215 |
/** |
|
216 |
* <p>update</p> |
|
217 |
* |
|
218 |
* @param strDataSourceName a {@link java.lang.String} object. |
|
219 |
* @param dataSource a {@link eu.etaxonomy.cdm.database.ICdmDataSource} object. |
|
220 |
* @return a {@link eu.etaxonomy.cdm.database.CdmPersistentDataSource} object. |
|
221 |
*/ |
|
222 |
public static ICdmPersistentSource update(String strCdmSourceName, ICdmDataSource cdmSource){ |
|
223 |
try { |
|
224 |
return CdmPersistentDataSource.update(strCdmSourceName, cdmSource); |
|
225 |
} catch (Exception e) { |
|
226 |
StoreUtil.error(CdmDataSourceRepository.class, "Error updating CDM Source", e); |
|
227 |
} |
|
228 |
return null; |
|
229 |
} |
|
230 |
|
|
231 |
public static ICdmPersistentSource replace(String strCdmSourceName, ICdmDataSource cdmSource){ |
|
232 |
try { |
|
233 |
return CdmPersistentDataSource.replace(strCdmSourceName, cdmSource); |
|
234 |
} catch (Exception e) { |
|
235 |
StoreUtil.error(CdmDataSourceRepository.class, "Error updating CDM Source", e); |
|
236 |
} |
|
237 |
return null; |
|
178 | 238 |
} |
179 | 239 |
|
180 | 240 |
/** |
... | ... | |
184 | 244 |
* @param dataSource a {@link eu.etaxonomy.cdm.database.ICdmDataSource} object. |
185 | 245 |
* @return a {@link eu.etaxonomy.cdm.database.CdmPersistentDataSource} object. |
186 | 246 |
*/ |
187 |
public static CdmPersistentDataSource update(String strDataSourceName, ICdmDataSource dataSource){
|
|
247 |
public static ICdmPersistentSource update(String strCdmSourceName, ICdmRemoteSource cdmSource){
|
|
188 | 248 |
try { |
189 |
return CdmPersistentDataSource.update(strDataSourceName, dataSource);
|
|
249 |
return CdmPersistentRemoteSource.update(strCdmSourceName, cdmSource);
|
|
190 | 250 |
} catch (Exception e) { |
191 |
StoreUtil.error(CdmDataSourceRepository.class, "Error updating datasource", e); |
|
251 |
StoreUtil.error(CdmDataSourceRepository.class, "Error updating CDM Source", e); |
|
252 |
|
|
192 | 253 |
} |
193 | 254 |
return null; |
194 | 255 |
} |
... | ... | |
197 | 258 |
* Memento Handling * |
198 | 259 |
*********************************************************/ |
199 | 260 |
|
200 |
private static void saveAsCurrentDatabaseToMemento(ICdmDataSource dataSource){
|
|
261 |
private static void saveAsCurrentDatabaseToMemento(ICdmSource cdmSource){
|
|
201 | 262 |
if(memento == null) |
202 | 263 |
memento = readMemento(); |
203 |
memento.putString(CURRENT_DATASOURCE, dataSource.getName());
|
|
264 |
memento.putString(CURRENT_DATASOURCE, cdmSource.getName());
|
|
204 | 265 |
saveMementoToFile(memento); |
205 | 266 |
} |
206 | 267 |
|
207 | 268 |
/* |
208 | 269 |
* Answer the workbench state file. |
209 | 270 |
*/ |
210 |
private static File getDataSourceStateFile() {
|
|
271 |
private static File getCdmSourceStateFile() {
|
|
211 | 272 |
IPath path = TaxeditorStorePlugin.getDefault().getStateLocation(); |
212 | 273 |
if (path == null) { |
213 | 274 |
return null; |
... | ... | |
218 | 279 |
|
219 | 280 |
private static IMemento readMemento(){ |
220 | 281 |
try { |
221 |
return MementoHelper.readMementoFromFile(getDataSourceStateFile());
|
|
282 |
return MementoHelper.readMementoFromFile(getCdmSourceStateFile());
|
|
222 | 283 |
} catch (FileNotFoundException e) { |
223 | 284 |
return initializeMemento(); |
224 | 285 |
} |
... | ... | |
238 | 299 |
* Save the workbench UI in a persistence file. |
239 | 300 |
*/ |
240 | 301 |
private static IMemento saveMementoToFile(IMemento memento) { |
241 |
return MementoHelper.saveMementoToFile(memento, getDataSourceStateFile());
|
|
302 |
return MementoHelper.saveMementoToFile(memento, getCdmSourceStateFile());
|
|
242 | 303 |
} |
243 | 304 |
} |
Also available in: Unified diff
refactored wizard dialog and pages to allow for easy in place editing and cloning of datasources.
CdmDataSourceRepository : added methods for (I)PersistentRemoteSource