fix NPE bug and termloading bug for Usage Records #4247
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / uses / UsesLabelProvider.java
index 85601542a46112d7b855eaf83f4e0edc12d5bca1..795faa16ed88d4a0e92940f5b95068099e069dca 100644 (file)
@@ -1,41 +1,44 @@
+/**\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.Arrays;\r
 import java.util.List;\r
-import java.util.Map;\r
-\r
-import javax.swing.text.html.HTMLDocument.HTMLReader.IsindexAction;\r
 \r
 import org.eclipse.jface.viewers.ColumnLabelProvider;\r
 import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;\r
 import org.eclipse.jface.viewers.StyledString;\r
 \r
-import eu.etaxonomy.cdm.api.service.DefaultCategoricalDescriptionBuilder;\r
-import eu.etaxonomy.cdm.api.service.DescriptionBuilder;\r
+import eu.etaxonomy.cdm.model.common.DefinedTerm;\r
 import eu.etaxonomy.cdm.model.common.Language;\r
 import eu.etaxonomy.cdm.model.common.LanguageString;\r
 import eu.etaxonomy.cdm.model.description.CategoricalData;\r
 import eu.etaxonomy.cdm.model.description.DescriptionBase;\r
-import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
-import eu.etaxonomy.cdm.model.description.Modifier;\r
-import eu.etaxonomy.cdm.model.description.State;\r
 import eu.etaxonomy.cdm.model.description.StateData;\r
 import eu.etaxonomy.cdm.model.description.TextData;\r
+import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;\r
 import eu.etaxonomy.taxeditor.store.CdmStore;\r
+import eu.etaxonomy.taxeditor.store.UsageTermCollection;\r
 \r
+/**\r
+ * UsesLabelProvider Class\r
+ * @author a.theys     \r
+ * @created mar 13, 2012\r
+ * @version 1.0\r
+ */\r
 public class UsesLabelProvider extends ColumnLabelProvider implements\r
                IStyledLabelProvider {\r
        \r
-       private static DescriptionBuilder<CategoricalData> categoricalDescriptionBuilder = new DefaultCategoricalDescriptionBuilder();\r
+       /** {@inheritDoc} */\r
        public String getText(Object element) {\r
                String text = "";\r
-               /*\r
-                * return DescriptionHelper.getLabel(element);\r
-                * \r
-                * for (Marker marker : element.getMarkers()) { if\r
-                * (marker.getMarkerType().getTitleCache().equals("use")) { return\r
-                * "Use: " + text; } }\r
-                */\r
+\r
                if (element instanceof DescriptionBase) {\r
                        text = ((DescriptionBase) element).getTitleCache();\r
                        if (text == null || text.length() == 0) {\r
@@ -46,88 +49,141 @@ public class UsesLabelProvider extends ColumnLabelProvider implements
                        }\r
                }\r
                else if (element instanceof CategoricalData) {\r
-                       //String text = "";\r
-                       //TextData textData = categoricalDescriptionBuilder.build((CategoricalData) element, getLanguageList());\r
-                       if (!((CategoricalData) element).getStates().isEmpty()) {\r
-                               for (StateData statedata : ((CategoricalData) element).getStates()) {\r
-                                       if(statedata.getState() != null && statedata.getModifyingText().get(CdmStore.getDefaultLanguage()) !=null && statedata.getModifyingText().get(CdmStore.getDefaultLanguage()).getText().equals("Use Category")) {\r
-                                               text = text + statedata.getState().getTitleCache() + "; ";\r
+                       if (!((CategoricalData) element).getStateData().isEmpty()) {\r
+                               boolean isUseCategoryAbsent = true;\r
+                               for (StateData statedata : ((CategoricalData) element).getStateData()) {\r
+                                       if(statedata.getState() != null && statedata.getModifyingText().get(CdmStore.getDefaultLanguage()) !=null && statedata.getModifyingText().get(CdmStore.getDefaultLanguage()).getText().equals(UsageTermCollection.useCategoryVocabularyLabel)) {\r
+                                               text = text + statedata.getState().getTitleCache() + ";";\r
+                                               isUseCategoryAbsent = false;\r
                                        }\r
                                }\r
-                               for (StateData statedata : ((CategoricalData) element).getStates()) {\r
-                                       if(statedata.getState() != null && statedata.getModifyingText().get(CdmStore.getDefaultLanguage()) !=null && statedata.getModifyingText().get(CdmStore.getDefaultLanguage()).getText().equals("Use SubCategory")) {\r
-                                               text = text + statedata.getState().getTitleCache() + "; ";\r
+                               if(isUseCategoryAbsent) {\r
+                                       text = text + UsageTermCollection.notAvailableLabel + ";";\r
+                               }\r
+                               \r
+                               boolean isUseSubCategoryAbsent = true;\r
+                               for (StateData statedata : ((CategoricalData) element).getStateData()) {\r
+                                       if(statedata.getState() != null && statedata.getModifyingText().get(CdmStore.getDefaultLanguage()) !=null && statedata.getModifyingText().get(CdmStore.getDefaultLanguage()).getText().equals(UsageTermCollection.useSubCategoryVocabularyLabel)) {\r
+                                               text = text + statedata.getState().getTitleCache() + ";";\r
+                                               isUseSubCategoryAbsent = false;\r
                                        }\r
                                }\r
+                               if(isUseSubCategoryAbsent) {\r
+                                       text = text + UsageTermCollection.notAvailableLabel + ";";\r
+                               }\r
+                       }\r
+                       else {\r
+                               text = text + UsageTermCollection.notAvailableLabel + ";" + UsageTermCollection.notAvailableLabel + ";";\r
                        }\r
                        if (!((CategoricalData) element).getModifiers().isEmpty()) {\r
-                               for (Modifier modifier: ((CategoricalData) element).getModifiers()){\r
+                               for (DefinedTerm modifier: ((CategoricalData) element).getModifiers()){\r
                                        modifier.getPartOf();\r
                                        modifier.getVocabulary();\r
                                }\r
-                               for (Modifier modifier: ((CategoricalData) element).getModifiers()){\r
-                                       if(GetVocabularyType(modifier, "Country")) {\r
-                                               text = text +  modifier.getTitleCache()+ "; ";\r
+                               \r
+                               boolean isPlantPartAbsent = true;\r
+                               for (DefinedTerm modifier: ((CategoricalData) element).getModifiers()){\r
+                                       if(GetVocabularyType(modifier, UsageTermCollection.plantPartLabel)) {\r
+                                               text = text +  modifier.getTitleCache()+ ";";\r
+                                               isPlantPartAbsent = false;\r
                                        }\r
                                        \r
                                }\r
-                               for (Modifier modifier: ((CategoricalData) element).getModifiers()){\r
-                                       if(GetVocabularyType(modifier, "Plant Part")) {\r
-                                               text = text +  modifier.getTitleCache()+ "; ";\r
+                               if (isPlantPartAbsent) {\r
+                                       text = text + UsageTermCollection.notAvailableLabel + ";";\r
+                               }\r
+                               \r
+                               boolean isHumanGroupAbsent = true;\r
+                               for (DefinedTerm modifier: ((CategoricalData) element).getModifiers()){\r
+                                       if(GetVocabularyType(modifier, UsageTermCollection.humanGroupLabel)) {\r
+                                               text = text +  modifier.getTitleCache()+ ";";\r
+                                               isHumanGroupAbsent = false;\r
                                        }\r
-                                       \r
                                }\r
-                               for (Modifier modifier: ((CategoricalData) element).getModifiers()){\r
-                                       if(GetVocabularyType(modifier, "Human Group")) {\r
-                                               text = text +  modifier.getTitleCache()+ "; ";\r
+                               if (isHumanGroupAbsent) {\r
+                                       text = text + UsageTermCollection.notAvailableLabel + ";";\r
+                               }\r
+                               \r
+                               boolean isEthnicGroupAbsent = true;\r
+                               for (DefinedTerm modifier: ((CategoricalData) element).getModifiers()){\r
+                                       if(GetVocabularyType(modifier, UsageTermCollection.ethnicGroupLabel)) {\r
+                                               text = text +  modifier.getTitleCache()+ ";";\r
+                                               isEthnicGroupAbsent = false;\r
                                        }\r
-                                       \r
                                }\r
-                               for (Modifier modifier: ((CategoricalData) element).getModifiers()){\r
-                                       if(GetVocabularyType(modifier, "Ethnic Group")) {\r
-                                               text = text +  modifier.getTitleCache()+ "; ";\r
+                               if (isEthnicGroupAbsent) {\r
+                                       text = text + UsageTermCollection.notAvailableLabel + ";";\r
+                               }\r
+                               \r
+                               boolean isCountryAbsent = true;\r
+                               for (DefinedTerm modifier: ((CategoricalData) element).getModifiers()){\r
+                                       if(GetVocabularyType(modifier, UsageTermCollection.countryLabel)) {\r
+                                               text = text +  modifier.getTitleCache()+ ";";\r
+                                               isCountryAbsent = false;\r
                                        }\r
-                                       \r
+                               }\r
+                               if (isCountryAbsent) {\r
+                                       text = text + UsageTermCollection.notAvailableLabel + ";";\r
                                }\r
                        }\r
+                       else {\r
+                               text = text + UsageTermCollection.notAvailableLabel + ";" + UsageTermCollection.notAvailableLabel + ";" + UsageTermCollection.notAvailableLabel + ";" + UsageTermCollection.notAvailableLabel + ";";\r
+                       }\r
                \r
                        if (text == null || text.length() == 0) {\r
                                text = "No data provided";\r
                        }\r
                        else {\r
-                               ((CategoricalData)element).putModifyingText(CdmStore.getDefaultLanguage(), text);\r
+                               String[] textElements = text.split(";");\r
+                               String dataportalString = textElements[0] + ";" + textElements[1] + ";" + textElements[5] + ";" + textElements[2] + ";" + textElements[3] + ";" + textElements[4] + ";" ;  \r
+                               \r
+                               ((CategoricalData)element).putModifyingText(CdmStore.getDefaultLanguage(), dataportalString);\r
                        }\r
                        return text;\r
                }\r
-\r
-               else{\r
-                       text = "Use Record";\r
+               \r
+               else if (element instanceof TextData) {\r
+                       List<Language> languages = Arrays.asList(new Language[]{CdmStore.getDefaultLanguage()});\r
+                       LanguageString languageString = ((TextData) element).getPreferredLanguageString(languages);\r
+                       text = languageString != null ? languageString.getText() : null;\r
+                       if (text == null || text.length() == 0) {\r
+                               text = "No data provided";\r
+                       }\r
+               }\r
+               \r
+               else if (element instanceof FeatureNodeContainer){\r
+                       text = ((FeatureNodeContainer)element).getFeature().getTitleCache();\r
                }\r
 \r
                return  text;\r
        }\r
 \r
-       \r
-       private boolean GetVocabularyType(Modifier term, String vocabularyExpected) {\r
+       /** Function dertmining which vocabulary is the term part of \r
+        *  \r
+        * @param term\r
+        * @param vocabularyExpected\r
+        * @return\r
+        */\r
+       private boolean GetVocabularyType(DefinedTerm term, String vocabularyExpected) {\r
                if ((term.getPartOf() != null)  && (term.getPartOf().getTitleCache().equals(vocabularyExpected))) {\r
                        return true;\r
                }\r
                else if ((term.getVocabulary() != null) && (term.getPartOf() == null) && (term.getVocabulary().getTitleCache().equals(vocabularyExpected))) {\r
                        return true;\r
                }\r
-               else if ((vocabularyExpected.equals("Ethnic Group"))  && (term.getVocabulary() != null) && ((term.getPartOf() != null))) {\r
+               else if ((vocabularyExpected.equals(UsageTermCollection.ethnicGroupLabel))  && ((term.getPartOf() != null))) {\r
                        return true;\r
                }\r
        return false;\r
        }\r
+       \r
+       /** {@inheritDoc} */\r
        @Override\r
        public StyledString getStyledText(Object element) {\r
                return new StyledString(this.getText(element),\r
                                StyledString.QUALIFIER_STYLER);\r
        }\r
        \r
-       private static List<Language> getLanguageList(){\r
-               return Arrays.asList(new Language[]{CdmStore.getDefaultLanguage()});\r
-       }\r
+       \r
 \r
 }\r