Project

General

Profile

« Previous | Next » 

Revision 3de91ced

Added by Cherian Mathew over 9 years ago

Fix for ticket #4519

CdmDataSourceRepository : added a new method to create default h2 data source
eu.etaxonomy.taxeditor.cdmlib : updated build paths to output test classes in test-classes dir and moved resources package to avoid conflict
ApplicationWorkbenchWindowAdvisor : added call to the new method (above) to create a default H2 db

View differences:

eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/datasource/CdmDataSourceRepository.java
45 45
	private static final String CURRENT_DATASOURCE = "currentDataSource";
46 46
	private static final String CURRENT_DATASOURCE_POSTFIX = "currentDataSourcePostFix";
47 47
	private static final String DEFAULT_DATASOURCE_STATE_FILENAME = "datasource.xml";
48
	
48

  
49 49
	private static final String DEFAULT_DATASOURCE_NAME = "cdm";
50 50
	private static final String DEFAULT_DATASOURCE_POSTFIX = CdmPersistentDataSource.DATASOURCE_BEAN_POSTFIX;
51
	
51

  
52 52
	private static ICdmSource currentCdmSource;
53 53
	private static IMemento memento;
54
	
54

  
55 55
	private static String lastUsedCdmSourceName;
56 56
	private static String lastUsedCdmSourcePostFix;
57
	
58
	
59
	
57

  
58

  
59

  
60 60
	/**
61 61
	 * <p>Getter for the field <code>lastUsedDataSourceName</code>.</p>
62 62
	 *
......
64 64
	 */
65 65
	public static void updateLastUsedDataSource(){
66 66
		if(lastUsedCdmSourceName == null){
67
			memento = readMemento();		
67
			memento = readMemento();
68 68
			lastUsedCdmSourceName = memento != null ? memento.getString(CURRENT_DATASOURCE) : DEFAULT_DATASOURCE_NAME;
69 69
			lastUsedCdmSourcePostFix = memento != null ? memento.getString(CURRENT_DATASOURCE_POSTFIX) : DEFAULT_DATASOURCE_POSTFIX;
70
			
70

  
71 71
		}
72
		
72

  
73 73
	}
74 74

  
75 75
	/**
......
83 83
		return true;
84 84
	}
85 85

  
86
	
86

  
87 87
	/**
88 88
	 * <p>getAll</p>
89 89
	 *
......
91 91
	 */
92 92
	public static List<ICdmSource> getAll() {
93 93
		List<ICdmSource> remoteSources = new ArrayList<ICdmSource>();
94
		
94

  
95 95
		for(ICdmDataSource dataSource : CdmPersistentDataSource.getAllDataSources()){
96 96
			try {
97 97
				remoteSources.add(CdmPersistentDataSource.NewInstance(dataSource.getName()));
......
99 99
				MessagingUtils.error(CdmDataSourceRepository.class, "Could not find dataSource", e);
100 100
			}
101 101
		}
102
		
102

  
103 103
		try {
104
			for(ICdmRemoteSource remoteSource : CdmPersistentRemoteSource.getAllRemoteSources()){			
104
			for(ICdmRemoteSource remoteSource : CdmPersistentRemoteSource.getAllRemoteSources()){
105 105
				remoteSources.add(remoteSource);
106 106
			}
107 107
		} catch (CdmRemoteSourceException e) {
108 108
			MessagingUtils.error(CdmDataSourceRepository.class, "Error retrieving remote sources", e);
109 109
		}
110
		
110

  
111 111
		// TODO sort by database name
112
		
112

  
113 113
		return remoteSources;
114 114
	}
115
	
115

  
116 116
	/**
117 117
	 * <p>getDataSource</p>
118 118
	 *
......
120 120
	 * @return a {@link eu.etaxonomy.cdm.database.ICdmDataSource} object.
121 121
	 */
122 122
	public static ICdmDataSource getDataSource(String name){
123
		
123

  
124 124
		for(ICdmDataSource dataSource : CdmPersistentDataSource.getAllDataSources()){
125 125
			try {
126 126
				if(dataSource.getName().equals(name)){
......
130 130
				MessagingUtils.error(CdmDataSourceRepository.class, "Could not find dataSource", e);
131 131
			}
132 132
		}
133
		
133

  
134 134
		return null;
135 135
	}
136
	
137
		
136

  
137

  
138 138
	/**
139 139
	 * <p>Getter for the field <code>currentDataSource</code>.</p>
140 140
	 *
141 141
	 * @return a {@link eu.etaxonomy.cdm.database.ICdmDataSource} object.
142
	 * @throws CdmRemoteSourceException 
142
	 * @throws CdmRemoteSourceException
143 143
	 */
144 144
	public static ICdmSource getCurrentCdmSource() throws CdmRemoteSourceException {
145
		
145

  
146 146
		if (currentCdmSource == null) {
147 147
			updateLastUsedDataSource();
148
			
148

  
149 149
			if(lastUsedCdmSourceName == null) {
150 150
				return null;
151 151
			}
......
155 155
					currentCdmSource = CdmPersistentDataSource.NewInstance(lastUsedCdmSourceName);
156 156
				} catch (DataSourceNotFoundException e) {
157 157
					// fallback creates a new default
158
					ICdmDataSource h2DataSource = CdmDataSource.NewH2EmbeddedInstance(
159
							DEFAULT_DATASOURCE_NAME, "sa", "", PreferencesUtil.getPreferredNomenclaturalCode());
160
					save(h2DataSource.getName(), h2DataSource);
161
					setCurrentCdmSource(h2DataSource);
158
					setCurrentCdmSource(createDefaultH2DataSource());
162 159
				}
163
			} else if (lastUsedCdmSourcePostFix.equals(CdmPersistentRemoteSource.REMOTESOURCE_BEAN_POSTFIX)) {				
160
			} else if (lastUsedCdmSourcePostFix.equals(CdmPersistentRemoteSource.REMOTESOURCE_BEAN_POSTFIX)) {
164 161
				currentCdmSource = CdmPersistentRemoteSource.NewInstance(lastUsedCdmSourceName);
165 162
			} else {
166 163
				throw new CdmRemoteSourceException("Unkown Cdm Source Type");
......
168 165
		}
169 166
		return currentCdmSource;
170 167
	}
171
	
168

  
169
	/**
170
	 * Creates a default H2 CDM Data Source
171
	 *
172
	 * @return the newly created data source
173
	 */
174
	public static ICdmDataSource createDefaultH2DataSource() {
175
	    ICdmDataSource h2DataSource = CdmDataSource.NewH2EmbeddedInstance(
176
                DEFAULT_DATASOURCE_NAME, "sa", "", PreferencesUtil.getPreferredNomenclaturalCode());
177
        save(h2DataSource.getName(), h2DataSource);
178
        return h2DataSource;
179
	}
180

  
172 181
	/**
173 182
	 * <p>Setter for the field <code>currentDataSource</code>.</p>
174 183
	 *
......
179 188
		currentCdmSource = cdmSource;
180 189
		NomenclaturalCode dataSourceNomenclaturalCode = cdmSource.getNomenclaturalCode();
181 190
		NomenclaturalCode applicationNomenclaturalCode = PreferencesUtil.getPreferredNomenclaturalCode();
182
		
191

  
183 192
		if( dataSourceNomenclaturalCode != null && ! dataSourceNomenclaturalCode.equals(applicationNomenclaturalCode)){
184 193
			PreferencesUtil.setPreferredNomenclaturalCode(dataSourceNomenclaturalCode);
185 194
			MessagingUtils.informationDialog("Nomenclatural Code Change", "The Datasource that was just " +
......
187 196
					"The nomenclatural code was changed in the application.");
188 197
		}
189 198
		return true;
190
	}	
191
		
199
	}
200

  
192 201
	/**
193 202
	 * <p>changeDataSource</p>
194 203
	 *
......
196 205
	 * @return a boolean.
197 206
	 */
198 207
	public static boolean changeDataSource(final ICdmSource cdmSource) {
199
		saveAsCurrentDatabaseToMemento(cdmSource);		
208
		saveAsCurrentDatabaseToMemento(cdmSource);
200 209
		CdmStore.connect(cdmSource);
201
		
210

  
202 211
		return true;
203 212
	}
204 213

  
......
208 217
	 * @param dataSource a {@link eu.etaxonomy.cdm.database.ICdmDataSource} object.
209 218
	 * @param strDataSourceName a {@link java.lang.String} object.
210 219
	 * @return a {@link eu.etaxonomy.cdm.database.CdmPersistentDataSource} object.
211
	 * @throws CdmRemoteSourceException 
220
	 * @throws CdmRemoteSourceException
212 221
	 */
213 222
	public static ICdmPersistentSource save(String strCdmSourceName, ICdmRemoteSource cdmSource) throws CdmRemoteSourceException {
214
		return CdmPersistentRemoteSource.save(strCdmSourceName, cdmSource);		
223
		return CdmPersistentRemoteSource.save(strCdmSourceName, cdmSource);
215 224
	}
216
	
225

  
217 226
	/**
218 227
	 * <p>save</p>
219 228
	 *
220 229
	 * @param dataSource a {@link eu.etaxonomy.cdm.database.ICdmDataSource} object.
221 230
	 * @param strDataSourceName a {@link java.lang.String} object.
222 231
	 * @return a {@link eu.etaxonomy.cdm.database.CdmPersistentDataSource} object.
223
	 * @throws CdmRemoteSourceException 
232
	 * @throws CdmRemoteSourceException
224 233
	 */
225
	public static ICdmPersistentSource save(String strCdmSourceName, ICdmDataSource cdmSource)  {		
226
		return CdmPersistentDataSource.save(strCdmSourceName, cdmSource);				
234
	public static ICdmPersistentSource save(String strCdmSourceName, ICdmDataSource cdmSource)  {
235
		return CdmPersistentDataSource.save(strCdmSourceName, cdmSource);
227 236
	}
228
	
237

  
229 238
	/**
230 239
	 * <p>update</p>
231 240
	 *
......
241 250
		}
242 251
		return null;
243 252
	}
244
	
253

  
245 254
	public static ICdmPersistentSource replace(String strCdmSourceName, ICdmDataSource cdmSource){
246 255
		try {
247 256
			return CdmPersistentDataSource.replace(strCdmSourceName, cdmSource);
......
250 259
		}
251 260
		return null;
252 261
	}
253
	
262

  
254 263
	/**
255 264
	 * <p>update</p>
256 265
	 *
......
260 269
	 */
261 270
	public static ICdmPersistentSource update(String strCdmSourceName, ICdmRemoteSource cdmSource){
262 271
		try {
263
			return CdmPersistentRemoteSource.update(strCdmSourceName, cdmSource);	
272
			return CdmPersistentRemoteSource.update(strCdmSourceName, cdmSource);
264 273
		} catch (Exception e) {
265 274
			MessagingUtils.error(CdmDataSourceRepository.class, "Error updating CDM Source", e);
266
			
275

  
267 276
		}
268 277
		return null;
269 278
	}
270
	
279

  
271 280
	/*********************************************************
272 281
	 * Memento Handling										 *
273 282
	 *********************************************************/
274
	
283

  
275 284
	private static void saveAsCurrentDatabaseToMemento(ICdmSource cdmSource){
276 285
		if(memento == null) {
277 286
			memento = readMemento();
278 287
		}
279 288
		memento.putString(CURRENT_DATASOURCE, cdmSource.getName());
280
		
289

  
281 290
		// Set postfix to distinguish between data and remote sources
282 291
		if(cdmSource instanceof CdmPersistentRemoteSource) {
283 292
			memento.putString(CURRENT_DATASOURCE_POSTFIX, CdmPersistentRemoteSource.REMOTESOURCE_BEAN_POSTFIX);
284 293
		} else {
285 294
			memento.putString(CURRENT_DATASOURCE_POSTFIX, CdmPersistentDataSource.DATASOURCE_BEAN_POSTFIX);
286 295
		}
287
		
288
		
296

  
297

  
289 298
		saveMementoToFile(memento);
290 299
	}
291
	
300

  
292 301
	/*
293 302
	 * Answer the workbench state file.
294 303
	 */
......
300 309
		path = path.append(DEFAULT_DATASOURCE_STATE_FILENAME);
301 310
		return path.toFile();
302 311
	}
303
	
312

  
304 313
	private static IMemento readMemento(){
305 314
		try {
306 315
			return MementoHelper.readMementoFromFile(getCdmSourceStateFile());
......
308 317
			return initializeMemento();
309 318
		}
310 319
	}
311
	
320

  
312 321

  
313 322
	private static IMemento initializeMemento() {
314
		
323

  
315 324
		XMLMemento memento = XMLMemento.createWriteRoot(TAG_DATASOURCE);
316 325
		memento.putString(CURRENT_DATASOURCE, DEFAULT_DATASOURCE_NAME);
317 326
		saveMementoToFile(memento);
318
		
327

  
319 328
		return readMemento();
320 329
	}
321 330

  
......
324 333
	 */
325 334
	private static IMemento saveMementoToFile(IMemento memento) {
326 335
		return MementoHelper.saveMementoToFile(memento, getCdmSourceStateFile());
327
	}	
336
	}
328 337
}

Also available in: Unified diff