Merge branch 'release/5.19.0'
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / uses / UsesContentProvider.java
index 7eae64139183cb6d064f16ffa68a653647732810..ac47d9c717d2bc3f6f5793c142d852bbef9fec73 100644 (file)
@@ -1,3 +1,11 @@
+/**\r
+ * Copyright (C) 2011 EDIT\r
+ * European Distributed Institute of Taxonomy\r
+ * http://www.e-taxonomy.eu\r
+ *\r
+ * The contents of this file are subject to the Mozilla Public License Version 1.1\r
+ * See LICENSE.TXT at the top of this package for the full license terms.\r
+ */\r
 package eu.etaxonomy.taxeditor.editor.view.uses;\r
 \r
 import java.util.ArrayList;\r
@@ -5,190 +13,61 @@ import java.util.HashSet;
 import java.util.List;\r
 import java.util.Map;\r
 import java.util.Set;\r
-import java.util.UUID;\r
 \r
-import org.eclipse.jface.viewers.ITreeContentProvider;\r
-import org.eclipse.jface.viewers.Viewer;\r
-\r
-import eu.etaxonomy.cdm.api.service.IDescriptionService;\r
 import eu.etaxonomy.cdm.model.common.Marker;\r
 import eu.etaxonomy.cdm.model.common.MarkerType;\r
 import eu.etaxonomy.cdm.model.description.DescriptionBase;\r
-import eu.etaxonomy.cdm.model.description.Feature;\r
-import eu.etaxonomy.cdm.model.description.FeatureTree;\r
-import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
+import eu.etaxonomy.cdm.model.description.IDescribable;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.cdm.persistence.dao.common.IDefinedTermDao;\r
-import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;\r
-import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;\r
+import eu.etaxonomy.taxeditor.editor.view.descriptive.DescriptiveContentProvider;\r
 import eu.etaxonomy.taxeditor.model.FeatureNodeContainerTree;\r
-import eu.etaxonomy.taxeditor.preference.PreferencesUtil;\r
 import eu.etaxonomy.taxeditor.store.CdmStore;\r
-import eu.etaxonomy.taxeditor.store.TermStore;\r
+import eu.etaxonomy.taxeditor.store.UsageTermCollection;\r
+\r
+/**\r
+ * The class provides the required content to the Uses View\r
+ * @author a.theys\r
+ * @created mar 13, 2012\r
+ */\r
+public class UsesContentProvider extends DescriptiveContentProvider {\r
 \r
-public class UsesContentProvider implements ITreeContentProvider {\r
+       Set<MarkerType> markerTypes = new HashSet<>();\r
 \r
-       private static final Object[] NO_CHILDREN = new Object[0];\r
-       private Map<TaxonDescription, FeatureNodeContainerTree> featureNodeContainerCache;\r
-       Set<MarkerType> markerTypes = new HashSet<MarkerType>();\r
-               \r
        /**\r
         * <p>Constructor for DescriptiveContentProvider.</p>\r
         *\r
         * @param featureNodeContainerCache a {@link java.util.Map} object.\r
         */\r
-       public UsesContentProvider(Map<TaxonDescription, FeatureNodeContainerTree> featureNodeContainerCache) {\r
-               //MarkerType markerType = (MarkerType)this.definedTermDao.findByUuid(UUID.fromString("b4b1b2ab-89a8-4ce6-8110-d60b8b1bc433")); //Marker "complete"\r
-               //this.markerTypes.addAll(CdmStore.getTermManager().getPreferredMarkerTypes());\r
+       public UsesContentProvider(Map<DescriptionBase<?>, FeatureNodeContainerTree> featureNodeContainerCache) {\r
+               super(featureNodeContainerCache);\r
                this.featureNodeContainerCache = featureNodeContainerCache;\r
        }\r
-       \r
-\r
-\r
-       /* (non-Javadoc)\r
-        * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)\r
-        */\r
-       /** {@inheritDoc} */\r
-       public Object[] getChildren(Object parentElement) {\r
-               if (parentElement instanceof TaxonEditorInput) {\r
-                       return getDescriptions((TaxonEditorInput) parentElement).toArray(); \r
-               }\r
-               else if (parentElement instanceof TaxonDescription) {\r
-                       if ( ! ((TaxonDescription) parentElement).isImageGallery()) {\r
-                               TaxonDescription description = (TaxonDescription) parentElement;\r
-                               \r
-                               FeatureNodeContainerTree containerTree = getContainerTreeForDesription(description);\r
-                               \r
-                               return containerTree.getRoot().getChildren().toArray();\r
-                       }\r
-               }\r
-               else if (parentElement instanceof FeatureNodeContainer){\r
-                       FeatureNodeContainer container = (FeatureNodeContainer) parentElement;\r
-                       if(container.isLeaf()){\r
-                               return container.getDescriptionElements().toArray();\r
-                       }else{\r
-                               return container.getChildren().toArray();\r
-                       }\r
-               }\r
-               \r
-               return NO_CHILDREN;\r
-       }\r
-       \r
-       private FeatureNodeContainerTree getContainerTreeForDesription(TaxonDescription description){\r
-               if(! featureNodeContainerCache.containsKey(description)){\r
-                       FeatureNodeContainerTree containerTree = new FeatureNodeContainerTree(description, getFeatureTree(description));\r
-                       featureNodeContainerCache.put(description, containerTree);\r
-               }\r
-               return featureNodeContainerCache.get(description);\r
-       }\r
-\r
-       /** {@inheritDoc} */\r
-       @Override\r
-       public boolean hasChildren(Object element) {\r
-               if (element instanceof TaxonDescription){\r
-                       TaxonDescription description = (TaxonDescription) element;\r
-                       FeatureNodeContainerTree containerTree = featureNodeContainerCache.get(description);\r
-                       if(containerTree != null && containerTree.getRoot() != null){\r
-                               return containerTree.getRoot().getChildren().size() != 0;\r
-                       }\r
-               } \r
-               return getChildren(element).length != 0;\r
-       }\r
-       \r
-       /**\r
-        * Retrieves the feature tree associated with the given description\r
-        * \r
-        * TODO as of now this is always the same thing because feature trees may not be associated \r
-        * to descriptions yet.\r
-        * \r
-        * @param description\r
-        * @return\r
-        */\r
-       private FeatureTree getFeatureTree(DescriptionBase description){\r
-               FeatureTree featureTree = null;\r
-               \r
-               // TODO change this to the feature tree associated with this taxon description\r
-               if (description.hasStructuredData()){                                   \r
-                       featureTree = PreferencesUtil.getDefaultFeatureTreeForStructuredDescription();\r
-               }else{\r
-                       featureTree = PreferencesUtil.getDefaultFeatureTreeForTextualDescription();\r
-               }\r
-               \r
-               // create a transient tree with all features if none was selected\r
-               if(featureTree == null){\r
-                       featureTree = FeatureTree.NewInstance(TermStore.getTerms(Feature.class));\r
-               }\r
-               \r
-               return featureTree;\r
-       }\r
 \r
        /**\r
         * Get all descriptions associated with the given TaxonEditorInput\r
-        * \r
+        *\r
         * @param parentElement\r
         * @return\r
         */\r
-       //CdmStore.getService(IDescriptionService.class).listTaxonDescriptions(input.getTaxonNode().getTaxon(), null, null, null, null, null, null)\r
-       private List<DescriptionBase> getDescriptions(TaxonEditorInput parentElement) {\r
-               //this.markerTypes.addAll(CdmStore.getTermManager().getPreferredMarkerTypes());\r
-               this.markerTypes.addAll(CdmStore.getTermManager().getPreferredTerms(MarkerType.class));\r
-               Taxon taxon = parentElement.getTaxon();\r
-               Set<MarkerType> typesToDisdplay = new HashSet<MarkerType>();\r
-               List<DescriptionBase> descriptions = new ArrayList<DescriptionBase>();\r
-               List<TaxonDescription> usesDescriptions = new ArrayList<TaxonDescription>();\r
-               \r
-               /*for (MarkerType markerType : markerTypes) {\r
-                       if (markerType.toString().equals("complete")) {\r
-                               typesToDisdplay.add(markerType);\r
-                       }\r
-               }*/\r
-               //usesDescriptions = CdmStore.getService(IDescriptionService.class).listTaxonDescriptions(taxon, null, null, typesToDisdplay, null, null, null);\r
-               //for(DescriptionBase description : CdmStore.getService(IDescriptionService.class).listTaxonDescriptions(taxon, null, null, typesToDisdplay, null, null, null)){\r
-               for(DescriptionBase description : taxon.getDescriptions()){\r
-                       if(! description.isImageGallery()){\r
-                               Set<Marker> descriptionMarkers = description.getMarkers();\r
-                               if(descriptionMarkers != null) {\r
-                                       for (Marker marker: descriptionMarkers) {\r
-                                               if(marker.getMarkerType().getTitleCache().equals("use")) {\r
-                                                       descriptions.add(description);\r
-                                               }\r
-                                       }\r
-                               }\r
-                       }\r
-               }                       \r
+       @Override\r
+       protected List<DescriptionBase<?>> getDescriptions(IDescribable<?> parentElement) {\r
+           List<DescriptionBase<?>> descriptions = new ArrayList<>();\r
+           if(parentElement instanceof Taxon){\r
+               Taxon taxon = (Taxon) parentElement;\r
+               this.markerTypes.addAll(CdmStore.getTermManager().getPreferredTerms(MarkerType.class));\r
+               for(DescriptionBase<?> description : taxon.getDescriptions()){\r
+                   if(! description.isImageGallery()){\r
+                       Set<Marker> descriptionMarkers = description.getMarkers();\r
+                       if(descriptionMarkers != null) {\r
+                           for (Marker marker: descriptionMarkers) {\r
+                               if(marker.getMarkerType() != null && marker.getMarkerType().getUuid().equals(UsageTermCollection.uuidUseMarkerType)) {\r
+                                   descriptions.add(description);\r
+                               }\r
+                           }\r
+                       }\r
+                   }\r
+               }\r
+           }\r
                return descriptions;\r
        }\r
-\r
-       /* (non-Javadoc)\r
-        * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)\r
-        */\r
-       /** {@inheritDoc} */\r
-       public Object getParent(Object element) {\r
-               return null;\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)\r
-        */\r
-       /** {@inheritDoc} */\r
-       public Object[] getElements(Object inputElement) {\r
-               return getChildren(inputElement);\r
-       }\r
-       \r
-       /* (non-Javadoc)\r
-        * @see org.eclipse.jface.viewers.IContentProvider#dispose()\r
-        */\r
-       /**\r
-        * <p>dispose</p>\r
-        */\r
-       public void dispose() {\r
-               featureNodeContainerCache.clear();\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)\r
-        */\r
-       /** {@inheritDoc} */\r
-       public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}    \r
-\r
-}\r
+}
\ No newline at end of file