ref #9984: add areaLabel to common name label - continue
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / model / DescriptionHelper.java
index dedb73f6fbd456bd4120e0e26a23ea68f40331bb..5d57510df83a326e5b26be91397a7d6bd0e9d242 100644 (file)
@@ -6,36 +6,20 @@
 * The contents of this file are subject to the Mozilla Public License Version 1.1
 * See LICENSE.TXT at the top of this package for the full license terms.
 */
-
 package eu.etaxonomy.taxeditor.model;
 
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
 import java.util.Arrays;
 import java.util.List;
-import java.util.Set;
 
-import org.apache.commons.lang.StringUtils;
-import org.hibernate.LazyInitializationException;
+import org.apache.commons.lang3.StringUtils;
 
-import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
-import eu.etaxonomy.cdm.common.CdmUtils;
-import eu.etaxonomy.cdm.format.description.DefaultCategoricalDescriptionBuilder;
-import eu.etaxonomy.cdm.format.description.DefaultQuantitativeDescriptionBuilder;
-import eu.etaxonomy.cdm.format.description.DescriptionBuilder;
+import eu.etaxonomy.cdm.format.DescriptionElementFormatter;
+import eu.etaxonomy.cdm.format.common.ExtendedTimePeriodFormatter;
+import eu.etaxonomy.cdm.format.description.CategoricalDataFormatter;
 import eu.etaxonomy.cdm.format.description.QuantitativeDataFormatter;
-import eu.etaxonomy.cdm.model.agent.AgentBase;
-import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.common.ExtendedTimePeriod;
-import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
 import eu.etaxonomy.cdm.model.common.Language;
 import eu.etaxonomy.cdm.model.common.LanguageString;
-import eu.etaxonomy.cdm.model.common.LanguageStringBase;
-import eu.etaxonomy.cdm.model.common.Marker;
-import eu.etaxonomy.cdm.model.common.MarkerType;
-import eu.etaxonomy.cdm.model.common.RelationshipBase;
-import eu.etaxonomy.cdm.model.common.RelationshipTermBase;
-import eu.etaxonomy.cdm.model.common.TimePeriod;
 import eu.etaxonomy.cdm.model.description.CategoricalData;
 import eu.etaxonomy.cdm.model.description.CommonTaxonName;
 import eu.etaxonomy.cdm.model.description.DescriptionBase;
@@ -44,48 +28,27 @@ import eu.etaxonomy.cdm.model.description.DescriptionElementSource;
 import eu.etaxonomy.cdm.model.description.Distribution;
 import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.cdm.model.description.IndividualsAssociation;
-import eu.etaxonomy.cdm.model.description.KeyStatement;
 import eu.etaxonomy.cdm.model.description.PresenceAbsenceTerm;
 import eu.etaxonomy.cdm.model.description.QuantitativeData;
-import eu.etaxonomy.cdm.model.description.SpecimenDescription;
-import eu.etaxonomy.cdm.model.description.TaxonDescription;
 import eu.etaxonomy.cdm.model.description.TaxonInteraction;
-import eu.etaxonomy.cdm.model.description.TaxonNameDescription;
 import eu.etaxonomy.cdm.model.description.TemporalData;
 import eu.etaxonomy.cdm.model.description.TextData;
 import eu.etaxonomy.cdm.model.location.NamedArea;
 import eu.etaxonomy.cdm.model.media.Media;
-import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
-import eu.etaxonomy.cdm.model.name.HybridRelationship;
-import eu.etaxonomy.cdm.model.name.NameRelationship;
-import eu.etaxonomy.cdm.model.name.NameTypeDesignation;
-import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;
-import eu.etaxonomy.cdm.model.name.TaxonName;
-import eu.etaxonomy.cdm.model.name.TextualTypeDesignation;
-import eu.etaxonomy.cdm.model.name.TypeDesignationBase;
-import eu.etaxonomy.cdm.model.name.TypeDesignationStatusBase;
-import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;
-import eu.etaxonomy.cdm.model.occurrence.GatheringEvent;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
-import eu.etaxonomy.cdm.model.permission.Group;
-import eu.etaxonomy.cdm.model.permission.User;
-import eu.etaxonomy.cdm.model.reference.OriginalSourceBase;
-import eu.etaxonomy.cdm.model.taxon.Classification;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
-import eu.etaxonomy.cdm.model.taxon.TaxonBase;
-import eu.etaxonomy.cdm.model.taxon.TaxonNode;
-import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
-import eu.etaxonomy.cdm.model.term.Representation;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 
 /**
- * <p>DescriptionHelper class.</p>
+ * DescriptionHelper class.
  *
  * @author p.ciardelli
  * @author n.hoffmann
  */
 public class DescriptionHelper {
 
+    public static final String NO_LABEL_STRING = "[no label]";
+
        /**
         * Returns whatever the element's title cache equivalent is,
         * depending on its class.
@@ -94,70 +57,8 @@ public class DescriptionHelper {
         * @param language a {@link eu.etaxonomy.cdm.model.common.Language} object.
         * @return a {@link java.lang.String} object.
         */
-       public static String getCache(DescriptionElementBase element,
-                       Language language) {
-
-               String mainElementLabel= null;
-               DescriptionBase<?> descr = element.getInDescription();
-               descr = CdmBase.deproxy(descr, DescriptionBase.class);
-
-               if (descr != null){
-                       if (descr.isInstanceOf(TaxonDescription.class)){
-                               Taxon taxon = CdmBase.deproxy(descr, TaxonDescription.class).getTaxon();
-                               if (taxon != null){
-                                       mainElementLabel = taxon.getTitleCache();
-                               }
-                       }else if (descr.isInstanceOf(SpecimenDescription.class)){
-                               SpecimenOrObservationBase<?> specimen = CdmBase.deproxy(descr, SpecimenDescription.class).getDescribedSpecimenOrObservation();
-                               if (specimen != null){
-                                       mainElementLabel = specimen.getTitleCache();
-                               }
-                       }else if (descr.isInstanceOf(TaxonNameDescription.class)){
-                               TaxonName name = CdmBase.deproxy(descr, TaxonNameDescription.class).getTaxonName();
-                               if (name != null){
-                                       mainElementLabel = name.getTitleCache();
-                               }
-                       }
-               }
-
-
-               String cache = null;
-               if (element instanceof TextData) {
-                       //cache = ((TextData) element).getText(language);
-                   cache = "Text Data";
-               }
-               if (element instanceof CommonTaxonName) {
-                       cache = ((CommonTaxonName) element).getName();
-               }
-               if (element instanceof TaxonInteraction) {
-                       Taxon taxon2 = ((TaxonInteraction) element).getTaxon2();
-                       if(taxon2 != null && taxon2.getName() != null){
-                               cache = taxon2.getName().getTitleCache();
-                       }else{
-                               cache = "No taxon chosen";
-                       }
-
-               }
-               if (element instanceof Distribution) {
-                       Distribution distribution = (Distribution) element;
-
-                       NamedArea area = distribution.getArea();
-                       if(area != null){
-                               cache =  area.getLabel();
-
-                               PresenceAbsenceTerm status = distribution.getStatus();
-                               if (status == null){
-                                       cache += ", no status";
-                               }else {
-                                       cache += ", " + status.getLabel();
-                               }
-                       }
-               }
-               String result = cache == null ? "" : cache;
-               if (isNotBlank(mainElementLabel)){
-                       result = CdmUtils.concat(" ", result, "(" + mainElementLabel + ")");
-               }
-               return result;
+       public static String getCache(DescriptionElementBase element, Language language) {
+           return DescriptionElementFormatter.format(element, language);
        }
 
        /**
@@ -197,6 +98,14 @@ public class DescriptionHelper {
                }
        }
 
+//     public static String getObjectDescription(Object o){
+//         if (o instanceof CdmBase){
+//             return ReferencingObjectFormatter.format((CdmBase)o, CdmStore.getDefaultLanguage());
+//         }else{
+//             return o.toString();
+//         }
+//     }
+
        /**
         * Set whatever the element's title cache equivalent is,
         * depending on its class, using the default language.
@@ -209,320 +118,20 @@ public class DescriptionHelper {
                setCache(element, value, CdmStore.getDefaultLanguage());
        }
 
-       public static String getObjectDescription(Object element) {
-           String resultString = null;
-               if (element instanceof IdentifiableEntity) {
-                       try{
-                           resultString = ((IdentifiableEntity) element).getTitleCache();
-                       }catch(LazyInitializationException e){
-                               String result = "No Session to initialize title cache for IdentifiableEntity";
-                               MessagingUtils.error(DescriptionHelper.class, result, e);
-                               resultString = "TODO: " + result;
-                       }
-               }else if (element instanceof OriginalSourceBase) {
-                       try{
-                               OriginalSourceBase<?> originalSource = (OriginalSourceBase<?>) element;
-//                             ISourceable sourcedObject = originalSource.getSourcedObj();
-                               //due to #5743 the bidirectionality for sourced object had to be removed
-                               String sourceObjectTitle = "sourced object data not available (#5743)";
-//                             if(sourcedObject instanceof IIdentifiableEntity){
-//                                     sourceObjectTitle = ((IdentifiableEntity) sourcedObject).getTitleCache();
-//                             }else if(sourcedObject instanceof DescriptionElementBase){
-//                                     sourceObjectTitle = "Element for description: " + ((DescriptionElementBase) sourcedObject).getInDescription().getTitleCache();
-//                             }else{
-//                                     throw new IllegalStateException("Unknown ISourceable object for given OriginalSourceBase");
-//                             }
-
-                               resultString = CdmUtils.concat("; ", new String[]{originalSource.getIdNamespace(), originalSource.getIdInSource(), sourceObjectTitle});
-                       }catch(LazyInitializationException e){
-                               String result = "Error initializing title cache for ISourceable of an OriginalSourceBase";
-                               MessagingUtils.error(DescriptionHelper.class, result, e);
-                               resultString = "TODO: " + result;
-                       }
-               }else if (element instanceof LanguageStringBase) {
-                   resultString = ((LanguageStringBase) element).getText();
-               }else if (element instanceof DescriptionElementBase) {
-                   resultString = getCache((DescriptionElementBase) element);
-               }else if (element instanceof RelationshipBase<?, ?, ?>) {
-                   resultString = getCache((RelationshipBase<?, ?, ?>) element);
-               }else if (element instanceof TypeDesignationBase<?>) {
-                   resultString = getCache((TypeDesignationBase<?>) element);
-               }else if (element instanceof HomotypicalGroup) {
-                   resultString = getCache((HomotypicalGroup) element);
-               }else if (element instanceof TaxonNode) {
-                   resultString = getCache((TaxonNode) element);
-               }else if (element instanceof DeterminationEvent) {
-                   resultString = getCache((DeterminationEvent) element);
-               }else if (element instanceof GatheringEvent){
-                       resultString = getCache((GatheringEvent) element);
-               }else if (element instanceof Marker) {
-                       Marker marker = (Marker) element;
-                       MarkerType type = marker.getMarkerType();
-                       resultString = (type == null ? "- no marker type -" : marker.getMarkerType().getLabel()) + " (" + marker.getFlag() + ")";
-               }else if (element instanceof User) {
-                       User user = (User) element;
-                       resultString = user.getUsername();
-               }else if (element instanceof Group) {
-                       Group group = (Group) element;
-                       resultString = group.getName();
-               }else if (element instanceof KeyStatement) {
-            KeyStatement keyStatement = (KeyStatement) element;
-            resultString = getCache(keyStatement);
-        }else{
-                       // TODO write return texts for HomotypicalGroup, etc.
-            resultString = element.toString();
-               }
-
-               if (resultString == null){
-                   resultString = element.toString();
-               }
-               return resultString;
-       }
-
-       private static String getCache(GatheringEvent gatheringEvent){
-               String ALTITUDE_PREFIX = "alt. ";
-               final String METER = "m";
-
-               String result = "";
-
-               //collector
-               AgentBase<?> collector = CdmBase.deproxy(gatheringEvent.getCollector());
-               String collectorStr = collector == null? null : collector.getTitleCache();
-               result = CdmUtils.concat(", ", result, collectorStr);
-
-               //gathering period
-               TimePeriod gatheringPeriod = gatheringEvent.getTimeperiod();
-               result = CdmUtils.concat(", ", result, (gatheringPeriod == null? null : gatheringPeriod.toString()));
-
-               //country
-               String strCountry = null;
-               NamedArea country = gatheringEvent.getCountry();
-               Representation repCountry = country == null ? null : country.getRepresentation(Language.DEFAULT());
-               strCountry = repCountry == null ? null: repCountry.getLabel();
-               result = CdmUtils.concat(", ", result, strCountry);
-
-               //locality
-               LanguageString locality = gatheringEvent.getLocality();
-               if (locality != null) {
-                       result = CdmUtils.concat(", ", result, locality.getText());
-               }
-
-               //elevation
-               String elevationStr;
-               if (isNotBlank(gatheringEvent.getAbsoluteElevationText())){
-                       elevationStr = gatheringEvent.getAbsoluteElevationText();
-               }else{
-                       String text = gatheringEvent.getAbsoluteElevationText();
-                       Integer min = gatheringEvent.getAbsoluteElevation();
-                       Integer max = gatheringEvent.getAbsoluteElevationMax();
-                       elevationStr = DerivedUnitFacade.distanceString(min, max, text, METER);
-               }
-               if (isNotBlank(elevationStr)){
-                       result = CdmUtils.concat(", " , result, ALTITUDE_PREFIX);
-                       result += elevationStr;
-               }
-
-               //exact locality
-               if (gatheringEvent.getExactLocation() != null){
-                       String exactLocation = gatheringEvent.getExactLocation().toSexagesimalString(false, false);
-                       result = CdmUtils.concat(", ", result, exactLocation);
-               }
-
-               return result;
-       }
-
-       private static String getCache(DeterminationEvent detEvent) {
-               //taxon
-               String taxonStr = null;
-               TaxonName taxonName = detEvent.getTaxonName();
-               TaxonBase<?> taxon = detEvent.getTaxon();
-               if (taxonName != null){
-                       taxonStr = taxonName.getTitleCache();
-               }
-               if (isBlank(taxonStr) && taxon != null){
-                       taxonStr = taxon.getTitleCache();
-               }
-               if (isBlank(taxonStr)){
-                       taxonStr = "no or unlabled taxon";
-               }
-
-               //unit
-               SpecimenOrObservationBase<?> unit = detEvent.getIdentifiedUnit();
-               String unitStr;
-               if (unit != null){
-                       unitStr = unit.getTitleCache();
-                       if (isBlank(unitStr)){
-                               unitStr = "Unlabled unit";
-                       }
-               }else{
-                       unitStr = "no unit";
-               }
-
-               String result = CdmUtils.concat(" determined as ", unitStr, taxonStr);
-
-               return result;
-       }
-
-       private static String getCache(TaxonNode taxonNode) {
-               String result = "";
-               Classification classification = taxonNode.getClassification();
-               if (classification != null){
-                       String classificationStr = classification.getName() == null ? "" : classification.getName().getText();
-                       result = CdmUtils.concat("" , result, classificationStr);
-                       if (isBlank(result)){
-                               result = classification.toString();
-                       }
-               }
-               String parentStr;
-               TaxonNode parentNode = taxonNode.getParent();
-               if (parentNode == null){
-                       parentStr = "no parent";
-               }else{
-                       Taxon parentTaxon = parentNode.getTaxon();
-                       if (parentTaxon == null){
-                               parentStr = "no parent taxon";
-                       }else{
-                               TaxonName parentName = parentTaxon.getName();
-                               if (parentName == null){
-                                       parentStr = "child of " + parentTaxon.getTitleCache();
-                               }else{
-                                       parentStr = "child of " + parentName.getTitleCache();
-                               }
-                       }
-               }
-               result = CdmUtils.concat(": ", result, parentStr);
-
-               return result;
-       }
-
-       private static String getCache(TypeDesignationBase<?> designation) {
-               designation = CdmBase.deproxy(designation);
-               //from
-               String fromString = null;
-               Set<TaxonName> from = designation.getTypifiedNames();
-               if(from != null){
-                   for (TaxonName name : from){
-                       fromString = CdmUtils.concat(",", fromString, name.getTitleCache());
-                   }
-               }
-               //to
-               IdentifiableEntity<?> to = null;
-               String toStr = "";
-               if (designation.isInstanceOf(SpecimenTypeDesignation.class)){
-                       to = ((SpecimenTypeDesignation)designation).getTypeSpecimen();
-               }else if (designation.isInstanceOf(NameTypeDesignation.class)){
-                       to = ((NameTypeDesignation)designation).getTypeName();
-               }else if (designation.isInstanceOf(TextualTypeDesignation.class)){
-                   toStr = ((TextualTypeDesignation)designation).getPreferredText(CdmStore.getDefaultLanguage());
-               }else{
-                       throw new RuntimeException("Type Designation class not supported: " +  designation.getClass().getName());
-               }
-               toStr = to == null? toStr : to.getTitleCache();
-               //status
-               String typeLabel = null;
-               TypeDesignationStatusBase<?> status = designation.getTypeStatus();
-               if (status != null){
-                       Representation typeRepr = status.getPreferredRepresentation(CdmStore.getDefaultLanguage());
-                       if (typeRepr != null){
-                               typeLabel = typeRepr.getAbbreviatedLabel();
-                       }
-                       if (isBlank(typeLabel) && typeRepr != null){
-                               typeLabel = typeRepr.getLabel();
-                       }
-                       if (isBlank(typeLabel) ){
-                               typeLabel = status.getSymbol();
-                       }
-                       if (isBlank(typeLabel)){
-                               typeLabel = status.getTitleCache();
-                       }
-               }
-               if (isBlank(typeLabel)){
-                       typeLabel = "->";
-               }
-               //concat
-               String result = CdmUtils.concat(" ", new String[]{fromString, typeLabel, toStr});
-               return result;
-       }
-
-       private static String getCache(RelationshipBase<?, ?, ?> rel) {
-               rel = CdmBase.deproxy(rel);
-               RelationshipTermBase<?> type = rel.getType();
-               IdentifiableEntity<?> from;
-               IdentifiableEntity<?> to;
-               if (rel.isInstanceOf(NameRelationship.class)){
-                       from = ((NameRelationship)rel).getFromName();
-                       to = ((NameRelationship)rel).getToName();
-               }else if (rel.isInstanceOf(HybridRelationship.class)){
-                       from = ((HybridRelationship)rel).getParentName();
-                       to = ((HybridRelationship)rel).getHybridName();
-               }else if (rel.isInstanceOf(TaxonRelationship.class)){
-                       from = ((TaxonRelationship)rel).getFromTaxon();
-                       to = ((TaxonRelationship)rel).getToTaxon();
-               }else{
-                       try {
-                               Method fromMethod = rel.getClass().getMethod("getRelatedFrom");
-                               Method toMethod = rel.getClass().getMethod("getRelatedFrom");
-                               fromMethod.setAccessible(true);
-                               toMethod.setAccessible(true);
-                               from = (IdentifiableEntity<?>)fromMethod.invoke(rel);
-                               to = (IdentifiableEntity<?>)toMethod.invoke(rel);
-                       } catch (NoSuchMethodException | SecurityException | IllegalAccessException
-                               | IllegalArgumentException | InvocationTargetException e) {
-                               throw new RuntimeException(e);
-                       }
-               }
-               String typeLabel = null;
-               if (type != null){
-                       Representation typeRepr = type.getPreferredRepresentation(CdmStore.getDefaultLanguage());
-                       if (typeRepr != null){
-                               typeLabel = typeRepr.getAbbreviatedLabel();
-                       }
-                       if (isBlank(typeLabel) && typeRepr != null){
-                               typeLabel = typeRepr.getLabel();
-                       }
-                       if (isBlank(typeLabel) ){
-                               typeLabel = type.getSymbol();
-                       }
-                       if (isBlank(typeLabel)){
-                               typeLabel = type.getTitleCache();
-                       }
-               }
-               if (isBlank(typeLabel)){
-                       typeLabel = "->";
-               }
-               String result = CdmUtils.concat(" ", new String[]{from == null ? null : from.getTitleCache(),
-                               typeLabel, to == null? null : to.getTitleCache()});
-               return result;
-       }
-
-
-       private static String getCache(HomotypicalGroup hg) {
-               String result = "";
-               for (TaxonName tnb : hg.getTypifiedNames()){
-                       result = CdmUtils.concat(", ", result, tnb.getTitleCache());
-               }
-               if (isBlank(result)){
-                       result = "No typified names";
-               }
-               return result;
-       }
-
-       private static String getCache(KeyStatement ks) {
-        String result = "";
-
-        result = "KeyStatement";
-
-        return result;
-    }
-
-       public static String getObjectClassname(Object element) {
-               return element.getClass().getSimpleName();
-       }
+//     public static String getObjectClassname(Object element) {
+//             if (element instanceof CdmBase){
+//                 return ((CdmBase) element).getUserFriendlyTypeName();
+//             }else{
+//                 return element.getClass().getSimpleName();
+//             }
+//     }
 
        public static String getFeatureNodeContainerText(FeatureNodeContainer element) {
                String result = null;
                if(element.getFeatureNode() != null && element.getFeatureNode().getTerm() != null){
-                       result = element.getFeatureNode().getTerm().getLabel(CdmStore.getDefaultLanguage());
+                       
+                       result = element.getFeatureNode().getTerm().getPreferredRepresentation(CdmStore.getDefaultLanguage()).getLabel();
+                       
                } else{
                        return "No label set";
                }
@@ -534,26 +143,19 @@ public class DescriptionHelper {
 
        public static String getQuantitativeDataText(QuantitativeData element) {
            QuantitativeDataFormatter formatter = new QuantitativeDataFormatter(null, null);
-           String label = formatter.doFormat(element);
-
+           String label = formatter.format(element, getLanguageList());
                return label;
        }
 
        public static String getCategoricalDataText(CategoricalData element) {
-               TextData textData = categoricalDescriptionBuilder.build(element, getLanguageList());
-
-               return textData.getText(CdmStore.getDefaultLanguage());
+           CategoricalDataFormatter formatter = new CategoricalDataFormatter(null, null);
+               return formatter.format(element, getLanguageList());
        }
 
        private static List<Language> getLanguageList(){
                return Arrays.asList(new Language[]{CdmStore.getDefaultLanguage()});
        }
 
-       private static DescriptionBuilder<QuantitativeData> quantitativeDescriptionBuilder = new DefaultQuantitativeDescriptionBuilder();
-       private static DescriptionBuilder<CategoricalData> categoricalDescriptionBuilder = new DefaultCategoricalDescriptionBuilder();
-    public static final String NO_LABEL_STRING = "[no label]";
-
-
        public static String getDistributionText(Distribution element) {
 
                String text = "EMPTY";
@@ -568,7 +170,7 @@ public class DescriptionHelper {
                        PresenceAbsenceTerm status = distribution.getStatus();
 
                        if (status != null) {
-                               text += ", " + status.getLabel();
+                               text += ", " + status.getPreferredRepresentation(CdmStore.getDefaultLanguage()).getLabel();
                        }else{
                                text += ", NO STATUS";
                        }
@@ -593,7 +195,7 @@ public class DescriptionHelper {
                                        text += source.getCitation().getTitleCache();
                                }
                                if(source.getNameUsedInSource() != null){
-                                       text += " [ " + source.getNameUsedInSource().getTitleCache() + " ]";
+                                       text += " [" + source.getNameUsedInSource().getTitleCache() + "]";
                                }
                        }
                        if(isBlank(text)){
@@ -625,11 +227,30 @@ public class DescriptionHelper {
                        name = "No name provided";
                }
                Language language = commonName.getLanguage();
-               if (language == null) {
-                       name += " (No language provided)";
-               } else {
-                       name += " (" + language.getLabel(CdmStore.getDefaultLanguage()) + ")";
+               NamedArea area = commonName.getArea();
+               String areaLabel = null;
+               String languageLabel = null;
+               if (area != null){
+                       areaLabel = area.getPreferredRepresentation(CdmStore.getDefaultLanguage()).getLabel();                  
+               } 
+               if (language != null){                  
+                       languageLabel = language.getPreferredRepresentation(CdmStore.getDefaultLanguage()).getLabel();
+               }
+               if (areaLabel != null || languageLabel != null){
+                       name += " (" ;
+                       if (languageLabel != null){
+                               name += languageLabel;
+                       }
+                       if (areaLabel != null){
+                               if (languageLabel != null){
+                                       name += ", ";
+                               }
+                               name += areaLabel;
+                       }
+                       name +=  ")";
                }
+               
+               
                return name;
        }
 
@@ -699,15 +320,9 @@ public class DescriptionHelper {
        }
 
     private static String getTemporalDataText(TemporalData element) {
-        String result = "";
-
         ExtendedTimePeriod period = element.getPeriod();
-
-        if (period != null){
-            result = period.getTimePeriod();
-        }
-
-        return result;
+        ExtendedTimePeriodFormatter formatter = ExtendedTimePeriodFormatter.NewDefaultInstance();
+        return period == null ? NO_LABEL_STRING : formatter.format(period);
     }
 
     private static boolean isNotBlank(String str){
@@ -717,4 +332,4 @@ public class DescriptionHelper {
        private static boolean isBlank(String str){
                return StringUtils.isBlank(str);
        }
-}
+}
\ No newline at end of file