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
;
11 import java
.net
.URISyntaxException
;
13 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
14 import org
.eclipse
.core
.runtime
.NullProgressMonitor
;
16 import eu
.etaxonomy
.cdm
.common
.URI
;
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
.MarkerType
;
21 import eu
.etaxonomy
.cdm
.model
.description
.Feature
;
22 import eu
.etaxonomy
.cdm
.model
.description
.State
;
23 import eu
.etaxonomy
.cdm
.model
.term
.DefinedTerm
;
24 import eu
.etaxonomy
.cdm
.model
.term
.TermType
;
25 import eu
.etaxonomy
.cdm
.model
.term
.TermVocabulary
;
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
;
46 public static void reset() {
47 isInitialized
= false;
49 useSummaryFeature
= null;
50 useRecordFeature
= null;
53 public static MarkerType
getUseMarkerType() {
58 public static Feature
getUseSummaryFeature() {
60 return useSummaryFeature
;
63 public static Feature
getUseRecordFeature() {
65 return useRecordFeature
;
69 private static void initialize(){
70 setupNecessaryItems(null);
74 private static void setupNecessaryItems( IProgressMonitor monitor
) {
79 //TODO can we use a better one?
80 monitor
= new NullProgressMonitor();
83 ConversationHolder conversation
= CdmStore
.createConversation();
85 //retrieve terms and vocabularies from db
86 useRecordFeature
= (Feature
) CdmStore
.getService(ITermService
.class).find(UsageTermCollection
.uuidUseRecordFeature
);
87 useSummaryFeature
= (Feature
) CdmStore
.getService(ITermService
.class).find(UsageTermCollection
.uuidUseSummaryFeature
);
91 //create use marker type if not exists
92 createUseMarkerType(conversation
);
94 //create state vocabulary if not exists
95 createStateVocabulary(monitor
, conversation
);
97 //create state vocabulary if not exists
98 createCountryVocabulary(monitor
, conversation
);
100 //create plant part vocabulary
101 createPlantVocabulary(monitor
, conversation
);
103 //create human group vocabulary
104 createHumanGroupVocabulary(monitor
, conversation
);
106 if(useRecordFeature
== null || useSummaryFeature
== null) {
107 TermVocabulary
<Feature
> featureVocabulary
= CdmStore
.getService(IVocabularyService
.class).find((UsageTermCollection
.uuidFeatureVocabulary
));
108 // FeatureTree palmWebFeatureTree = CdmStore.getService(ITermTreeService.class).find(UsageTermCollection.uuidPalmWebFeatureTree);
110 if (useRecordFeature
== null ) {
111 useRecordFeature
= Feature
.NewInstance(UsageTermCollection
.useRecordFeatureLabel
, UsageTermCollection
.useRecordFeatureLabel
, null);
112 useRecordFeature
.setUuid(UsageTermCollection
.uuidUseRecordFeature
);
113 useRecordFeature
.setSupportsCategoricalData(true);
114 featureVocabulary
.addTerm(useRecordFeature
);
116 // if (palmWebFeatureTree != null){
117 // FeatureNode useRecFeatureNode = FeatureNode.NewInstance(featureUseRecord);
118 // palmWebFeatureTree.getRoot().addChild(useRecFeatureNode);
120 // StoreUtil.warn(getClass(), "No current feature tree available to add useRecord feature");
123 if (useSummaryFeature
== null) {
124 useSummaryFeature
= Feature
.NewInstance(UsageTermCollection
.useSummaryFeatureLabel
, UsageTermCollection
.useSummaryFeatureLabel
, null);
125 useSummaryFeature
.setUuid(UsageTermCollection
.uuidUseSummaryFeature
);
126 useSummaryFeature
.setSupportsTextData(true);
127 featureVocabulary
.addTerm(useSummaryFeature
);
128 // if (palmWebFeatureTree != null){
129 // FeatureNode useSumFeatureNode = FeatureNode.NewInstance(featureUseSummary);
130 // palmWebFeatureTree.getRoot().addChild(useSumFeatureNode);
132 // StoreUtil.warn(getClass(), "No current feature tree available to add use summary feature");
136 CdmStore
.getService(IVocabularyService
.class).saveOrUpdate(featureVocabulary
);
137 // if (palmWebFeatureTree != null){
138 // CdmStore.getService(ITermTreeService.class).saveOrUpdate(palmWebFeatureTree);
140 conversation
.commit(true);
143 conversation
.close();
146 private static void createHumanGroupVocabulary(IProgressMonitor monitor
,ConversationHolder conversation
) {
147 TermVocabulary
<DefinedTerm
> humanGroupVocabulary
= CdmStore
.getService(IVocabularyService
.class).find(UsageTermCollection
.uuidHumanGroupVocabulary
);
148 if (humanGroupVocabulary
== null){
149 monitor
.subTask("create human group vocabulary");
150 URI termSourceUri
= null;
152 termSourceUri
= new URI("eu.etaxonomy.cdm.model.description.DefinedTerm");
153 } catch (URISyntaxException e
) {
157 humanGroupVocabulary
= TermVocabulary
.NewInstance(TermType
.Modifier
, UsageTermCollection
.humanGroupLabel
, UsageTermCollection
.humanGroupLabel
, null, termSourceUri
);
158 humanGroupVocabulary
.setUuid(UsageTermCollection
.uuidHumanGroupVocabulary
);
160 DefinedTerm newDummyModifier
= DefinedTerm
.NewInstance(TermType
.Modifier
, UsageTermCollection
.notAvailableLabel
, UsageTermCollection
.notAvailableLabel
, null);
161 newDummyModifier
.setUuid(UsageTermCollection
.uuidHumanGroupDummy
);
163 DefinedTerm newSubDummyModifier
= DefinedTerm
.NewInstance(TermType
.Modifier
, UsageTermCollection
.notAvailableLabel
, UsageTermCollection
.notAvailableLabel
, null);
164 newSubDummyModifier
.setUuid(UsageTermCollection
.uuidEthnicGroupDummy
);
165 newDummyModifier
.addIncludes(newSubDummyModifier
);
166 humanGroupVocabulary
.addTerm(newDummyModifier
);
168 CdmStore
.getService(IVocabularyService
.class).saveOrUpdate(humanGroupVocabulary
);
169 conversation
.commit(true);
173 private static void createPlantVocabulary(IProgressMonitor monitor
, ConversationHolder conversation
) {
174 TermVocabulary
<DefinedTerm
> plantPartVocabulary
= CdmStore
.getService(IVocabularyService
.class).find(UsageTermCollection
.uuidPlantPartVocabulary
);
175 if (plantPartVocabulary
== null){
176 monitor
.subTask("create plant part vocabulary");
177 URI termSourceUri
= null;
179 termSourceUri
= new URI("eu.etaxonomy.cdm.model.description.DefinedTerm");
180 } catch (URISyntaxException e
) {
183 plantPartVocabulary
= TermVocabulary
.NewInstance(TermType
.Modifier
, UsageTermCollection
.plantPartLabel
, UsageTermCollection
.plantPartLabel
, null, termSourceUri
);
184 plantPartVocabulary
.setUuid(UsageTermCollection
.uuidPlantPartVocabulary
);
186 DefinedTerm newDummyModifier
= DefinedTerm
.NewInstance(TermType
.Modifier
, UsageTermCollection
.notAvailableLabel
, UsageTermCollection
.notAvailableLabel
, null);
187 newDummyModifier
.setUuid(UsageTermCollection
.uuidPlantPartDummy
);
188 plantPartVocabulary
.addTerm(newDummyModifier
);
190 CdmStore
.getService(IVocabularyService
.class).saveOrUpdate(plantPartVocabulary
);
191 conversation
.commit(true);
195 private static void createCountryVocabulary(IProgressMonitor monitor
, ConversationHolder conversation
) {
196 TermVocabulary
<DefinedTerm
> countryVocabulary
= CdmStore
.getService(IVocabularyService
.class).find(UsageTermCollection
.uuidCountryVocabulary
);
197 if (countryVocabulary
== null){
198 monitor
.subTask("create country vocabulary");
199 URI termSourceUri
= null;
201 termSourceUri
= new URI("eu.etaxonomy.cdm.model.description.DefinedTerm");
202 } catch (URISyntaxException e
) {
205 countryVocabulary
= TermVocabulary
.NewInstance(TermType
.Modifier
, UsageTermCollection
.countryLabel
, UsageTermCollection
.countryLabel
, null, termSourceUri
);
206 countryVocabulary
.setUuid(UsageTermCollection
.uuidCountryVocabulary
);
208 DefinedTerm newDummyModifier
= DefinedTerm
.NewInstance(TermType
.Modifier
, UsageTermCollection
.notAvailableLabel
, UsageTermCollection
.notAvailableLabel
, null);
209 newDummyModifier
.setUuid(UsageTermCollection
.uuidCountryDummy
);
210 countryVocabulary
.addTerm(newDummyModifier
);
212 CdmStore
.getService(IVocabularyService
.class).saveOrUpdate(countryVocabulary
);
213 conversation
.commit(true);
217 private static void createStateVocabulary(IProgressMonitor monitor
, ConversationHolder conversation
) {
218 TermVocabulary
<State
> stateVocabulary
= CdmStore
.getService(IVocabularyService
.class).find(UsageTermCollection
.uuidUseCategoryVocabulary
);
219 if (stateVocabulary
== null){
220 monitor
.subTask("create state vocabulary");
221 URI termSourceUri
= null;
223 termSourceUri
= new URI("eu.etaxonomy.cdm.model.description.State");
224 } catch (URISyntaxException e
) {
228 stateVocabulary
= TermVocabulary
.NewInstance(TermType
.State
, UsageTermCollection
.useCategoryVocabularyLabel
, UsageTermCollection
.useCategoryVocabularyLabel
, null, termSourceUri
);
229 stateVocabulary
.setUuid(UsageTermCollection
.uuidUseCategoryVocabulary
);
231 State newDummyState
= State
.NewInstance(UsageTermCollection
.notAvailableLabel
, UsageTermCollection
.notAvailableLabel
, null);
232 newDummyState
.setUuid(UsageTermCollection
.uuidUseCategoryDummy
);
233 State newDummySubCat
= State
.NewInstance(UsageTermCollection
.notAvailableLabel
, UsageTermCollection
.notAvailableLabel
, null);
234 newDummySubCat
.setUuid(UsageTermCollection
.uuidUseSubCategoryDummy
);
235 newDummyState
.addIncludes(newDummySubCat
);
237 stateVocabulary
.addTerm(newDummyState
);
239 CdmStore
.getService(IVocabularyService
.class).saveOrUpdate(stateVocabulary
);
240 conversation
.commit(true);
244 private static void createUseMarkerType(ConversationHolder conversation
) {
245 useMarkerType
= (MarkerType
) CdmStore
.getService(ITermService
.class).find(UsageTermCollection
.uuidUseMarkerType
);
246 if (useMarkerType
== null){
247 useMarkerType
= MarkerType
.NewInstance(UsageTermCollection
.useMakerLabel
, UsageTermCollection
.useMakerLabel
, null);
248 useMarkerType
.setUuid( UsageTermCollection
.uuidUseMarkerType
);
249 TermVocabulary
<MarkerType
> markerTypeVocabulary
= CdmStore
.getService(IVocabularyService
.class).find((UsageTermCollection
.uuidMarkersVocabulary
));
250 markerTypeVocabulary
.addTerm(useMarkerType
);
251 CdmStore
.getService(IVocabularyService
.class).saveOrUpdate(markerTypeVocabulary
);
252 conversation
.commit(true);