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
.editor
;
12 import java
.net
.URISyntaxException
;
14 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
15 import org
.eclipse
.ui
.IMemento
;
17 import eu
.etaxonomy
.cdm
.api
.conversation
.ConversationHolder
;
18 import eu
.etaxonomy
.cdm
.api
.service
.IFeatureTreeService
;
19 import eu
.etaxonomy
.cdm
.api
.service
.ITermService
;
20 import eu
.etaxonomy
.cdm
.api
.service
.IVocabularyService
;
21 import eu
.etaxonomy
.cdm
.model
.common
.DefinedTerm
;
22 import eu
.etaxonomy
.cdm
.model
.common
.MarkerType
;
23 import eu
.etaxonomy
.cdm
.model
.common
.TermType
;
24 import eu
.etaxonomy
.cdm
.model
.common
.TermVocabulary
;
25 import eu
.etaxonomy
.cdm
.model
.description
.Feature
;
26 import eu
.etaxonomy
.cdm
.model
.description
.FeatureNode
;
27 import eu
.etaxonomy
.cdm
.model
.description
.FeatureTree
;
28 import eu
.etaxonomy
.cdm
.model
.description
.State
;
29 import eu
.etaxonomy
.taxeditor
.model
.ContextListenerAdapter
;
30 import eu
.etaxonomy
.taxeditor
.model
.MessagingUtils
;
31 import eu
.etaxonomy
.taxeditor
.store
.CdmStore
;
34 * The context listener will call this class when the uses view is being loaded.
35 * It checks if the uses view's necessary terms are present in the database.
36 * It will persist the terms that aren't present, using the CDMLib's services classes.
38 * @created mar 13, 2012
40 public class UseObjectManager
extends ContextListenerAdapter
{
42 public UseObjectManager() {
43 CdmStore
.getContextManager().addContextListener(this);
48 public void contextRefresh(IProgressMonitor monitor
) {
49 monitor
.subTask("Refreshing the Uses View");
50 MessagingUtils
.warn(getClass(), "Refreshing Uses View warn");
51 setupNecessaryItems(monitor
);
56 public void contextStart(IMemento memento
, IProgressMonitor monitor
) {
57 monitor
.subTask("Starting the Uses View");
58 MessagingUtils
.warn(getClass(), "Starting Uses View warn");
59 setupNecessaryItems(monitor
);
62 private void setupNecessaryItems(IProgressMonitor monitor
) {
64 //retrieve terms and vocabularies from db
65 Feature featureUseRecord
= (Feature
) CdmStore
.getService(ITermService
.class).find(UsageTermCollection
.uuidUseRecordFeature
);
66 Feature featureUseSummary
= (Feature
) CdmStore
.getService(ITermService
.class).find(UsageTermCollection
.uuidUseSummaryFeature
);
68 ConversationHolder conversation
= CdmStore
.createConversation();
71 //create use marker type if not exists
72 createUseMarkerType(conversation
);
74 //create state vocabulary if not exists
75 createStateVocabulary(monitor
, conversation
);
77 //create state vocabulary if not exists
78 createCountryVocabulary(monitor
, conversation
);
80 //create plant part vocabulary
81 createPlantVocabulary(monitor
, conversation
);
83 //create human group vocabulary
84 createHumanGroupVocabulary(monitor
, conversation
);
86 if(featureUseRecord
== null || featureUseSummary
== null) {
87 TermVocabulary
<Feature
> featureVocabulary
= CdmStore
.getService(IVocabularyService
.class).find((UsageTermCollection
.uuidFeatureVocabulary
));
88 // FeatureTree palmWebFeatureTree = CdmStore.getService(IFeatureTreeService.class).find(UsageTermCollection.uuidPalmWebFeatureTree);
90 if (featureUseRecord
== null ) {
91 featureUseRecord
= Feature
.NewInstance(UsageTermCollection
.useRecordFeatureLabel
, UsageTermCollection
.useRecordFeatureLabel
, null);
92 featureUseRecord
.setUuid(UsageTermCollection
.uuidUseRecordFeature
);
93 featureUseRecord
.setSupportsCategoricalData(true);
94 featureVocabulary
.addTerm(featureUseRecord
);
96 // if (palmWebFeatureTree != null){
97 // FeatureNode useRecFeatureNode = FeatureNode.NewInstance(featureUseRecord);
98 // palmWebFeatureTree.getRoot().addChild(useRecFeatureNode);
100 // StoreUtil.warn(getClass(), "No current feature tree available to add useRecord feature");
103 if (featureUseSummary
== null) {
104 featureUseSummary
= Feature
.NewInstance(UsageTermCollection
.useSummaryFeatureLabel
, UsageTermCollection
.useSummaryFeatureLabel
, null);
105 featureUseSummary
.setUuid(UsageTermCollection
.uuidUseSummaryFeature
);
106 featureUseSummary
.setSupportsTextData(true);
107 featureVocabulary
.addTerm(featureUseSummary
);
108 // if (palmWebFeatureTree != null){
109 // FeatureNode useSumFeatureNode = FeatureNode.NewInstance(featureUseSummary);
110 // palmWebFeatureTree.getRoot().addChild(useSumFeatureNode);
112 // StoreUtil.warn(getClass(), "No current feature tree available to add use summary feature");
116 CdmStore
.getService(IVocabularyService
.class).saveOrUpdate(featureVocabulary
);
117 // if (palmWebFeatureTree != null){
118 // CdmStore.getService(IFeatureTreeService.class).saveOrUpdate(palmWebFeatureTree);
120 conversation
.commit(true);
123 conversation
.close();
127 private void createHumanGroupVocabulary(IProgressMonitor monitor
,ConversationHolder conversation
) {
128 TermVocabulary
<DefinedTerm
> humanGroupVocabulary
= CdmStore
.getService(IVocabularyService
.class).find(UsageTermCollection
.uuidHumanGroupVocabulary
);
129 if (humanGroupVocabulary
== null){
130 monitor
.subTask("create human group vocabulary");
131 URI termSourceUri
= null;
133 termSourceUri
= new URI("eu.etaxonomy.cdm.model.description.DefinedTerm");
134 } catch (URISyntaxException e
) {
138 humanGroupVocabulary
= TermVocabulary
.NewInstance(TermType
.Modifier
, UsageTermCollection
.humanGroupLabel
, UsageTermCollection
.humanGroupLabel
, null, termSourceUri
);
139 humanGroupVocabulary
.setUuid(UsageTermCollection
.uuidHumanGroupVocabulary
);
141 DefinedTerm newDummyModifier
= DefinedTerm
.NewInstance(TermType
.Modifier
, UsageTermCollection
.notAvailableLabel
, UsageTermCollection
.notAvailableLabel
, null);
142 newDummyModifier
.setUuid(UsageTermCollection
.uuidHumanGroupDummy
);
144 DefinedTerm newSubDummyModifier
= DefinedTerm
.NewInstance(TermType
.Modifier
, UsageTermCollection
.notAvailableLabel
, UsageTermCollection
.notAvailableLabel
, null);
145 newSubDummyModifier
.setUuid(UsageTermCollection
.uuidEthnicGroupDummy
);
146 newDummyModifier
.addIncludes(newSubDummyModifier
);
147 humanGroupVocabulary
.addTerm(newDummyModifier
);
149 CdmStore
.getService(IVocabularyService
.class).saveOrUpdate(humanGroupVocabulary
);
150 conversation
.commit(true);
155 private void createPlantVocabulary(IProgressMonitor monitor
, ConversationHolder conversation
) {
156 TermVocabulary
<DefinedTerm
> plantPartVocabulary
= CdmStore
.getService(IVocabularyService
.class).find(UsageTermCollection
.uuidPlantPartVocabulary
);
157 if (plantPartVocabulary
== null){
158 monitor
.subTask("create plant part vocabulary");
159 URI termSourceUri
= null;
161 termSourceUri
= new URI("eu.etaxonomy.cdm.model.description.DefinedTerm");
162 } catch (URISyntaxException e
) {
165 plantPartVocabulary
= TermVocabulary
.NewInstance(TermType
.Modifier
, UsageTermCollection
.plantPartLabel
, UsageTermCollection
.plantPartLabel
, null, termSourceUri
);
166 plantPartVocabulary
.setUuid(UsageTermCollection
.uuidPlantPartVocabulary
);
168 DefinedTerm newDummyModifier
= DefinedTerm
.NewInstance(TermType
.Modifier
, UsageTermCollection
.notAvailableLabel
, UsageTermCollection
.notAvailableLabel
, null);
169 newDummyModifier
.setUuid(UsageTermCollection
.uuidPlantPartDummy
);
170 plantPartVocabulary
.addTerm(newDummyModifier
);
172 CdmStore
.getService(IVocabularyService
.class).saveOrUpdate(plantPartVocabulary
);
173 conversation
.commit(true);
178 private void createCountryVocabulary(IProgressMonitor monitor
, ConversationHolder conversation
) {
179 TermVocabulary
<DefinedTerm
> countryVocabulary
= CdmStore
.getService(IVocabularyService
.class).find(UsageTermCollection
.uuidCountryVocabulary
);
180 if (countryVocabulary
== null){
181 monitor
.subTask("create country vocabulary");
182 URI termSourceUri
= null;
184 termSourceUri
= new URI("eu.etaxonomy.cdm.model.description.DefinedTerm");
185 } catch (URISyntaxException e
) {
188 countryVocabulary
= TermVocabulary
.NewInstance(TermType
.Modifier
, UsageTermCollection
.countryLabel
, UsageTermCollection
.countryLabel
, null, termSourceUri
);
189 countryVocabulary
.setUuid(UsageTermCollection
.uuidCountryVocabulary
);
191 DefinedTerm newDummyModifier
= DefinedTerm
.NewInstance(TermType
.Modifier
, UsageTermCollection
.notAvailableLabel
, UsageTermCollection
.notAvailableLabel
, null);
192 newDummyModifier
.setUuid(UsageTermCollection
.uuidCountryDummy
);
193 countryVocabulary
.addTerm(newDummyModifier
);
195 CdmStore
.getService(IVocabularyService
.class).saveOrUpdate(countryVocabulary
);
196 conversation
.commit(true);
201 private void createStateVocabulary(IProgressMonitor monitor
, ConversationHolder conversation
) {
202 TermVocabulary
<State
> stateVocabulary
= CdmStore
.getService(IVocabularyService
.class).find(UsageTermCollection
.uuidUseCategoryVocabulary
);
203 if (stateVocabulary
== null){
204 monitor
.subTask("create state vocabulary");
205 URI termSourceUri
= null;
207 termSourceUri
= new URI("eu.etaxonomy.cdm.model.description.State");
208 } catch (URISyntaxException e
) {
212 stateVocabulary
= TermVocabulary
.NewInstance(TermType
.State
, UsageTermCollection
.useCategoryVocabularyLabel
, UsageTermCollection
.useCategoryVocabularyLabel
, null, termSourceUri
);
213 stateVocabulary
.setUuid(UsageTermCollection
.uuidUseCategoryVocabulary
);
215 State newDummyState
= State
.NewInstance(UsageTermCollection
.notAvailableLabel
, UsageTermCollection
.notAvailableLabel
, null);
216 newDummyState
.setUuid(UsageTermCollection
.uuidUseCategoryDummy
);
217 State newDummySubCat
= State
.NewInstance(UsageTermCollection
.notAvailableLabel
, UsageTermCollection
.notAvailableLabel
, null);
218 newDummySubCat
.setUuid(UsageTermCollection
.uuidUseSubCategoryDummy
);
219 newDummyState
.addIncludes(newDummySubCat
);
221 stateVocabulary
.addTerm(newDummyState
);
223 CdmStore
.getService(IVocabularyService
.class).saveOrUpdate(stateVocabulary
);
224 conversation
.commit(true);
229 private void createUseMarkerType(ConversationHolder conversation
) {
230 MarkerType useMarkertype
= (MarkerType
) CdmStore
.getService(ITermService
.class).find(UsageTermCollection
.uuidUseMarkerType
);
231 if (useMarkertype
== null){
232 useMarkertype
= MarkerType
.NewInstance(UsageTermCollection
.useMakerLabel
, UsageTermCollection
.useMakerLabel
, null);
233 useMarkertype
.setUuid( UsageTermCollection
.uuidUseMarkerType
);
234 TermVocabulary
<MarkerType
> markerTypeVocabulary
= CdmStore
.getService(IVocabularyService
.class).find((UsageTermCollection
.uuidMarkersVocabulary
));
235 markerTypeVocabulary
.addTerm(useMarkertype
);
236 CdmStore
.getService(IVocabularyService
.class).saveOrUpdate(markerTypeVocabulary
);
237 conversation
.commit(true);