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
.api
.conversation
.ConversationHolder
;
17 import eu
.etaxonomy
.cdm
.api
.service
.ITermService
;
18 import eu
.etaxonomy
.cdm
.api
.service
.IVocabularyService
;
19 import eu
.etaxonomy
.cdm
.common
.URI
;
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
.OrderedTermVocabulary
;
25 import eu
.etaxonomy
.cdm
.model
.term
.TermType
;
26 import eu
.etaxonomy
.cdm
.model
.term
.TermVocabulary
;
29 * A store to handle all terms and vocabulary required for
30 * the UseObjects view and components.
31 * Whenever one of the terms is requested, all required terms are generated
32 * in the database as we consider the requests as an indicator that
33 * someone wants to use the terms.
37 * @created mar 13, 2012
39 public class UseObjectStore
{
41 private static boolean isInitialized
;
43 private static MarkerType useMarkerType
;
44 private static Feature useSummaryFeature
;
45 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 //TODO remove ConversationHolder as we do not use it anymore since remoting
85 ConversationHolder conversation
= null; //CdmStore.createConversation();
87 //retrieve terms and vocabularies from db
88 useRecordFeature
= (Feature
) CdmStore
.getService(ITermService
.class).find(UsageTermCollection
.uuidUseRecordFeature
);
89 useSummaryFeature
= (Feature
) CdmStore
.getService(ITermService
.class).find(UsageTermCollection
.uuidUseSummaryFeature
);
93 //create use marker type if not exists
94 createUseMarkerType(conversation
);
96 //create state vocabulary if not exists
97 createStateVocabulary(monitor
, conversation
);
99 //create state vocabulary if not exists
100 createCountryVocabulary(monitor
, conversation
);
102 //create plant part vocabulary
103 createPlantVocabulary(monitor
, conversation
);
105 //create human group vocabulary
106 createHumanGroupVocabulary(monitor
, conversation
);
108 if(useRecordFeature
== null || useSummaryFeature
== null) {
109 TermVocabulary
<Feature
> featureVocabulary
= CdmStore
.getService(IVocabularyService
.class).find((UsageTermCollection
.uuidFeatureVocabulary
));
110 // FeatureTree palmWebFeatureTree = CdmStore.getService(ITermTreeService.class).find(UsageTermCollection.uuidPalmWebFeatureTree);
112 if (useRecordFeature
== null ) {
113 useRecordFeature
= Feature
.NewInstance(UsageTermCollection
.useRecordFeatureLabel
, UsageTermCollection
.useRecordFeatureLabel
, null);
114 useRecordFeature
.setUuid(UsageTermCollection
.uuidUseRecordFeature
);
115 useRecordFeature
.setSupportsCategoricalData(true);
116 featureVocabulary
.addTerm(useRecordFeature
);
118 // if (palmWebFeatureTree != null){
119 // FeatureNode useRecFeatureNode = FeatureNode.NewInstance(featureUseRecord);
120 // palmWebFeatureTree.getRoot().addChild(useRecFeatureNode);
122 // StoreUtil.warn(getClass(), "No current feature tree available to add useRecord feature");
125 if (useSummaryFeature
== null) {
126 useSummaryFeature
= Feature
.NewInstance(UsageTermCollection
.useSummaryFeatureLabel
, UsageTermCollection
.useSummaryFeatureLabel
, null);
127 useSummaryFeature
.setUuid(UsageTermCollection
.uuidUseSummaryFeature
);
128 useSummaryFeature
.setSupportsTextData(true);
129 featureVocabulary
.addTerm(useSummaryFeature
);
130 // if (palmWebFeatureTree != null){
131 // FeatureNode useSumFeatureNode = FeatureNode.NewInstance(featureUseSummary);
132 // palmWebFeatureTree.getRoot().addChild(useSumFeatureNode);
134 // StoreUtil.warn(getClass(), "No current feature tree available to add use summary feature");
138 CdmStore
.getService(IVocabularyService
.class).saveOrUpdate(featureVocabulary
);
139 // if (palmWebFeatureTree != null){
140 // CdmStore.getService(ITermTreeService.class).saveOrUpdate(palmWebFeatureTree);
143 // conversation.commit(true);
146 // conversation.close();
149 private static void createHumanGroupVocabulary(IProgressMonitor monitor
,ConversationHolder conversation
) {
150 TermVocabulary
<DefinedTerm
> humanGroupVocabulary
= CdmStore
.getService(IVocabularyService
.class).find(UsageTermCollection
.uuidHumanGroupVocabulary
);
151 if (humanGroupVocabulary
== null){
152 monitor
.subTask("create human group vocabulary");
153 URI termSourceUri
= null;
155 termSourceUri
= new URI("eu.etaxonomy.cdm.model.description.DefinedTerm");
156 } catch (URISyntaxException e
) {
160 humanGroupVocabulary
= TermVocabulary
.NewInstance(TermType
.Modifier
, DefinedTerm
.class, UsageTermCollection
.humanGroupLabel
, UsageTermCollection
.humanGroupLabel
, null, termSourceUri
);
161 humanGroupVocabulary
.setUuid(UsageTermCollection
.uuidHumanGroupVocabulary
);
163 DefinedTerm newDummyModifier
= DefinedTerm
.NewInstance(TermType
.Modifier
, UsageTermCollection
.notAvailableLabel
, UsageTermCollection
.notAvailableLabel
, null);
164 newDummyModifier
.setUuid(UsageTermCollection
.uuidHumanGroupDummy
);
166 DefinedTerm newSubDummyModifier
= DefinedTerm
.NewInstance(TermType
.Modifier
, UsageTermCollection
.notAvailableLabel
, UsageTermCollection
.notAvailableLabel
, null);
167 newSubDummyModifier
.setUuid(UsageTermCollection
.uuidEthnicGroupDummy
);
168 newDummyModifier
.addIncludes(newSubDummyModifier
);
169 humanGroupVocabulary
.addTerm(newDummyModifier
);
171 CdmStore
.getService(IVocabularyService
.class).saveOrUpdate(humanGroupVocabulary
);
172 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
, DefinedTerm
.class, 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);
198 private static void createCountryVocabulary(IProgressMonitor monitor
, ConversationHolder conversation
) {
199 TermVocabulary
<DefinedTerm
> countryVocabulary
= CdmStore
.getService(IVocabularyService
.class).find(UsageTermCollection
.uuidCountryVocabulary
);
200 if (countryVocabulary
== null){
201 monitor
.subTask("create country vocabulary");
202 URI termSourceUri
= null;
204 termSourceUri
= new URI("eu.etaxonomy.cdm.model.description.DefinedTerm");
205 } catch (URISyntaxException e
) {
208 countryVocabulary
= TermVocabulary
.NewInstance(TermType
.Modifier
, DefinedTerm
.class, UsageTermCollection
.countryLabel
, UsageTermCollection
.countryLabel
, null, termSourceUri
);
209 countryVocabulary
.setUuid(UsageTermCollection
.uuidCountryVocabulary
);
211 DefinedTerm newDummyModifier
= DefinedTerm
.NewInstance(TermType
.Modifier
, UsageTermCollection
.notAvailableLabel
, UsageTermCollection
.notAvailableLabel
, null);
212 newDummyModifier
.setUuid(UsageTermCollection
.uuidCountryDummy
);
213 countryVocabulary
.addTerm(newDummyModifier
);
215 CdmStore
.getService(IVocabularyService
.class).saveOrUpdate(countryVocabulary
);
216 conversation
.commit(true);
220 private static void createStateVocabulary(IProgressMonitor monitor
, ConversationHolder conversation
) {
221 TermVocabulary
<State
> stateVocabulary
= CdmStore
.getService(IVocabularyService
.class).find(UsageTermCollection
.uuidUseCategoryVocabulary
);
222 if (stateVocabulary
== null){
223 monitor
.subTask("create state vocabulary");
224 URI termSourceUri
= null;
226 termSourceUri
= new URI("eu.etaxonomy.cdm.model.description.State");
227 } catch (URISyntaxException e
) {
231 stateVocabulary
= OrderedTermVocabulary
.NewOrderedInstance(TermType
.State
, State
.class, UsageTermCollection
.useCategoryVocabularyLabel
, UsageTermCollection
.useCategoryVocabularyLabel
, null, termSourceUri
);
232 stateVocabulary
.setUuid(UsageTermCollection
.uuidUseCategoryVocabulary
);
234 State newDummyState
= State
.NewInstance(UsageTermCollection
.notAvailableLabel
, UsageTermCollection
.notAvailableLabel
, null);
235 newDummyState
.setUuid(UsageTermCollection
.uuidUseCategoryDummy
);
236 State newDummySubCat
= State
.NewInstance(UsageTermCollection
.notAvailableLabel
, UsageTermCollection
.notAvailableLabel
, null);
237 newDummySubCat
.setUuid(UsageTermCollection
.uuidUseSubCategoryDummy
);
238 newDummyState
.addIncludes(newDummySubCat
);
240 stateVocabulary
.addTerm(newDummyState
);
242 CdmStore
.getService(IVocabularyService
.class).saveOrUpdate(stateVocabulary
);
243 conversation
.commit(true);
247 private static void createUseMarkerType(ConversationHolder conversation
) {
248 useMarkerType
= (MarkerType
) CdmStore
.getService(ITermService
.class).find(UsageTermCollection
.uuidUseMarkerType
);
249 if (useMarkerType
== null){
250 useMarkerType
= MarkerType
.NewInstance(UsageTermCollection
.useMakerLabel
, UsageTermCollection
.useMakerLabel
, null);
251 useMarkerType
.setUuid( UsageTermCollection
.uuidUseMarkerType
);
252 TermVocabulary
<MarkerType
> markerTypeVocabulary
= CdmStore
.getService(IVocabularyService
.class).find((UsageTermCollection
.uuidMarkersVocabulary
));
253 markerTypeVocabulary
.addTerm(useMarkerType
);
254 CdmStore
.getService(IVocabularyService
.class).saveOrUpdate(markerTypeVocabulary
);
255 conversation
.commit(true);