2 * Copyright (C) 2011 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.
9 package eu
.etaxonomy
.taxeditor
.store
;
12 import java
.net
.URISyntaxException
;
14 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
15 import org
.eclipse
.core
.runtime
.NullProgressMonitor
;
17 import eu
.etaxonomy
.cdm
.api
.conversation
.ConversationHolder
;
18 import eu
.etaxonomy
.cdm
.api
.service
.ITermService
;
19 import eu
.etaxonomy
.cdm
.api
.service
.IVocabularyService
;
20 import eu
.etaxonomy
.cdm
.model
.common
.DefinedTerm
;
21 import eu
.etaxonomy
.cdm
.model
.common
.MarkerType
;
22 import eu
.etaxonomy
.cdm
.model
.common
.TermType
;
23 import eu
.etaxonomy
.cdm
.model
.common
.TermVocabulary
;
24 import eu
.etaxonomy
.cdm
.model
.description
.Feature
;
25 import eu
.etaxonomy
.cdm
.model
.description
.State
;
28 * A store to handle all terms and vocabulary required for
29 * the UseObjects view and components.
30 * Whenever one of the terms is requested, all required terms are generated
31 * in the database as we consider the requests as an indicator that
32 * someone wants to use the terms.
36 * @created mar 13, 2012
38 public class UseObjectStore
{
40 private static boolean isInitialized
;
42 private static MarkerType useMarkerType
;
43 private static Feature useSummaryFeature
;
44 private static Feature useRecordFeature
;
47 public static void reset() {
48 isInitialized
= false;
50 useSummaryFeature
= null;
51 useRecordFeature
= null;
54 public static MarkerType
getUseMarkerType() {
59 public static Feature
getUseSummaryFeature() {
61 return useSummaryFeature
;
64 public static Feature
getUseRecordFeature() {
66 return useRecordFeature
;
70 private static void initialize(){
71 setupNecessaryItems(null);
75 private static void setupNecessaryItems( IProgressMonitor monitor
) {
80 //TODO can we use a better one?
81 monitor
= new NullProgressMonitor();
84 ConversationHolder conversation
= CdmStore
.createConversation();
86 //retrieve terms and vocabularies from db
87 useRecordFeature
= (Feature
) CdmStore
.getService(ITermService
.class).find(UsageTermCollection
.uuidUseRecordFeature
);
88 useSummaryFeature
= (Feature
) CdmStore
.getService(ITermService
.class).find(UsageTermCollection
.uuidUseSummaryFeature
);
92 //create use marker type if not exists
93 createUseMarkerType(conversation
);
95 //create state vocabulary if not exists
96 createStateVocabulary(monitor
, conversation
);
98 //create state vocabulary if not exists
99 createCountryVocabulary(monitor
, conversation
);
101 //create plant part vocabulary
102 createPlantVocabulary(monitor
, conversation
);
104 //create human group vocabulary
105 createHumanGroupVocabulary(monitor
, conversation
);
107 if(useRecordFeature
== null || useSummaryFeature
== null) {
108 TermVocabulary
<Feature
> featureVocabulary
= CdmStore
.getService(IVocabularyService
.class).find((UsageTermCollection
.uuidFeatureVocabulary
));
109 // FeatureTree palmWebFeatureTree = CdmStore.getService(IFeatureTreeService.class).find(UsageTermCollection.uuidPalmWebFeatureTree);
111 if (useRecordFeature
== null ) {
112 useRecordFeature
= Feature
.NewInstance(UsageTermCollection
.useRecordFeatureLabel
, UsageTermCollection
.useRecordFeatureLabel
, null);
113 useRecordFeature
.setUuid(UsageTermCollection
.uuidUseRecordFeature
);
114 useRecordFeature
.setSupportsCategoricalData(true);
115 featureVocabulary
.addTerm(useRecordFeature
);
117 // if (palmWebFeatureTree != null){
118 // FeatureNode useRecFeatureNode = FeatureNode.NewInstance(featureUseRecord);
119 // palmWebFeatureTree.getRoot().addChild(useRecFeatureNode);
121 // StoreUtil.warn(getClass(), "No current feature tree available to add useRecord feature");
124 if (useSummaryFeature
== null) {
125 useSummaryFeature
= Feature
.NewInstance(UsageTermCollection
.useSummaryFeatureLabel
, UsageTermCollection
.useSummaryFeatureLabel
, null);
126 useSummaryFeature
.setUuid(UsageTermCollection
.uuidUseSummaryFeature
);
127 useSummaryFeature
.setSupportsTextData(true);
128 featureVocabulary
.addTerm(useSummaryFeature
);
129 // if (palmWebFeatureTree != null){
130 // FeatureNode useSumFeatureNode = FeatureNode.NewInstance(featureUseSummary);
131 // palmWebFeatureTree.getRoot().addChild(useSumFeatureNode);
133 // StoreUtil.warn(getClass(), "No current feature tree available to add use summary feature");
137 CdmStore
.getService(IVocabularyService
.class).saveOrUpdate(featureVocabulary
);
138 // if (palmWebFeatureTree != null){
139 // CdmStore.getService(IFeatureTreeService.class).saveOrUpdate(palmWebFeatureTree);
141 conversation
.commit(true);
144 conversation
.close();
148 private static void createHumanGroupVocabulary(IProgressMonitor monitor
,ConversationHolder conversation
) {
149 TermVocabulary
<DefinedTerm
> humanGroupVocabulary
= CdmStore
.getService(IVocabularyService
.class).find(UsageTermCollection
.uuidHumanGroupVocabulary
);
150 if (humanGroupVocabulary
== null){
151 monitor
.subTask("create human group vocabulary");
152 URI termSourceUri
= null;
154 termSourceUri
= new URI("eu.etaxonomy.cdm.model.description.DefinedTerm");
155 } catch (URISyntaxException e
) {
159 humanGroupVocabulary
= TermVocabulary
.NewInstance(TermType
.Modifier
, UsageTermCollection
.humanGroupLabel
, UsageTermCollection
.humanGroupLabel
, null, termSourceUri
);
160 humanGroupVocabulary
.setUuid(UsageTermCollection
.uuidHumanGroupVocabulary
);
162 DefinedTerm newDummyModifier
= DefinedTerm
.NewInstance(TermType
.Modifier
, UsageTermCollection
.notAvailableLabel
, UsageTermCollection
.notAvailableLabel
, null);
163 newDummyModifier
.setUuid(UsageTermCollection
.uuidHumanGroupDummy
);
165 DefinedTerm newSubDummyModifier
= DefinedTerm
.NewInstance(TermType
.Modifier
, UsageTermCollection
.notAvailableLabel
, UsageTermCollection
.notAvailableLabel
, null);
166 newSubDummyModifier
.setUuid(UsageTermCollection
.uuidEthnicGroupDummy
);
167 newDummyModifier
.addIncludes(newSubDummyModifier
);
168 humanGroupVocabulary
.addTerm(newDummyModifier
);
170 CdmStore
.getService(IVocabularyService
.class).saveOrUpdate(humanGroupVocabulary
);
171 conversation
.commit(true);
176 private static void createPlantVocabulary(IProgressMonitor monitor
, ConversationHolder conversation
) {
177 TermVocabulary
<DefinedTerm
> plantPartVocabulary
= CdmStore
.getService(IVocabularyService
.class).find(UsageTermCollection
.uuidPlantPartVocabulary
);
178 if (plantPartVocabulary
== null){
179 monitor
.subTask("create plant part vocabulary");
180 URI termSourceUri
= null;
182 termSourceUri
= new URI("eu.etaxonomy.cdm.model.description.DefinedTerm");
183 } catch (URISyntaxException e
) {
186 plantPartVocabulary
= TermVocabulary
.NewInstance(TermType
.Modifier
, UsageTermCollection
.plantPartLabel
, UsageTermCollection
.plantPartLabel
, null, termSourceUri
);
187 plantPartVocabulary
.setUuid(UsageTermCollection
.uuidPlantPartVocabulary
);
189 DefinedTerm newDummyModifier
= DefinedTerm
.NewInstance(TermType
.Modifier
, UsageTermCollection
.notAvailableLabel
, UsageTermCollection
.notAvailableLabel
, null);
190 newDummyModifier
.setUuid(UsageTermCollection
.uuidPlantPartDummy
);
191 plantPartVocabulary
.addTerm(newDummyModifier
);
193 CdmStore
.getService(IVocabularyService
.class).saveOrUpdate(plantPartVocabulary
);
194 conversation
.commit(true);
199 private static void createCountryVocabulary(IProgressMonitor monitor
, ConversationHolder conversation
) {
200 TermVocabulary
<DefinedTerm
> countryVocabulary
= CdmStore
.getService(IVocabularyService
.class).find(UsageTermCollection
.uuidCountryVocabulary
);
201 if (countryVocabulary
== null){
202 monitor
.subTask("create country vocabulary");
203 URI termSourceUri
= null;
205 termSourceUri
= new URI("eu.etaxonomy.cdm.model.description.DefinedTerm");
206 } catch (URISyntaxException e
) {
209 countryVocabulary
= TermVocabulary
.NewInstance(TermType
.Modifier
, UsageTermCollection
.countryLabel
, UsageTermCollection
.countryLabel
, null, termSourceUri
);
210 countryVocabulary
.setUuid(UsageTermCollection
.uuidCountryVocabulary
);
212 DefinedTerm newDummyModifier
= DefinedTerm
.NewInstance(TermType
.Modifier
, UsageTermCollection
.notAvailableLabel
, UsageTermCollection
.notAvailableLabel
, null);
213 newDummyModifier
.setUuid(UsageTermCollection
.uuidCountryDummy
);
214 countryVocabulary
.addTerm(newDummyModifier
);
216 CdmStore
.getService(IVocabularyService
.class).saveOrUpdate(countryVocabulary
);
217 conversation
.commit(true);
222 private static void createStateVocabulary(IProgressMonitor monitor
, ConversationHolder conversation
) {
223 TermVocabulary
<State
> stateVocabulary
= CdmStore
.getService(IVocabularyService
.class).find(UsageTermCollection
.uuidUseCategoryVocabulary
);
224 if (stateVocabulary
== null){
225 monitor
.subTask("create state vocabulary");
226 URI termSourceUri
= null;
228 termSourceUri
= new URI("eu.etaxonomy.cdm.model.description.State");
229 } catch (URISyntaxException e
) {
233 stateVocabulary
= TermVocabulary
.NewInstance(TermType
.State
, UsageTermCollection
.useCategoryVocabularyLabel
, UsageTermCollection
.useCategoryVocabularyLabel
, null, termSourceUri
);
234 stateVocabulary
.setUuid(UsageTermCollection
.uuidUseCategoryVocabulary
);
236 State newDummyState
= State
.NewInstance(UsageTermCollection
.notAvailableLabel
, UsageTermCollection
.notAvailableLabel
, null);
237 newDummyState
.setUuid(UsageTermCollection
.uuidUseCategoryDummy
);
238 State newDummySubCat
= State
.NewInstance(UsageTermCollection
.notAvailableLabel
, UsageTermCollection
.notAvailableLabel
, null);
239 newDummySubCat
.setUuid(UsageTermCollection
.uuidUseSubCategoryDummy
);
240 newDummyState
.addIncludes(newDummySubCat
);
242 stateVocabulary
.addTerm(newDummyState
);
244 CdmStore
.getService(IVocabularyService
.class).saveOrUpdate(stateVocabulary
);
245 conversation
.commit(true);
250 private static void createUseMarkerType(ConversationHolder conversation
) {
251 useMarkerType
= (MarkerType
) CdmStore
.getService(ITermService
.class).find(UsageTermCollection
.uuidUseMarkerType
);
252 if (useMarkerType
== null){
253 useMarkerType
= MarkerType
.NewInstance(UsageTermCollection
.useMakerLabel
, UsageTermCollection
.useMakerLabel
, null);
254 useMarkerType
.setUuid( UsageTermCollection
.uuidUseMarkerType
);
255 TermVocabulary
<MarkerType
> markerTypeVocabulary
= CdmStore
.getService(IVocabularyService
.class).find((UsageTermCollection
.uuidMarkersVocabulary
));
256 markerTypeVocabulary
.addTerm(useMarkerType
);
257 CdmStore
.getService(IVocabularyService
.class).saveOrUpdate(markerTypeVocabulary
);
258 conversation
.commit(true);