Merge branch 'develop' into termSearch
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / model / TaxonRelationshipTypeInverseContainer.java
index 6f24ba406e7da3b708b9d3d14b93859dad3b223c..23e5c66665b098d825c6072de785d0c79b2bb5f2 100644 (file)
@@ -3,9 +3,16 @@
  */
 package eu.etaxonomy.taxeditor.model;
 
  */
 package eu.etaxonomy.taxeditor.model;
 
+import org.apache.commons.lang.NotImplementedException;
+
+import eu.etaxonomy.cdm.model.common.DefinedTermBase;
 import eu.etaxonomy.cdm.model.common.Language;
 import eu.etaxonomy.cdm.model.common.Representation;
 import eu.etaxonomy.cdm.model.common.Language;
 import eu.etaxonomy.cdm.model.common.Representation;
+import eu.etaxonomy.cdm.model.common.TermVocabulary;
+import eu.etaxonomy.cdm.model.taxon.Taxon;
+import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
 import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
 import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
+import eu.etaxonomy.taxeditor.store.CdmStore;
 
 /**
  * @author n.hoffmann
 
 /**
  * @author n.hoffmann
@@ -13,11 +20,51 @@ import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
  * @version 1.0
  *
  */
  * @version 1.0
  *
  */
-public class TaxonRelationshipTypeInverseContainer {
+public class TaxonRelationshipTypeInverseContainer extends DefinedTermBase<DefinedTermBase> {
        
        
+       /**
+        * 
+        */
+       private static final long serialVersionUID = 7225140304186547675L;
        private boolean inverse;
        private TaxonRelationshipType type;
        
        private boolean inverse;
        private TaxonRelationshipType type;
        
+       
+       /**
+        * 
+        * @param sourceTaxon
+        * @param relationship
+        * @return
+        */
+       public static TaxonRelationshipTypeInverseContainer CreateFromSource(Taxon sourceTaxon, TaxonRelationship relationship){
+               return new TaxonRelationshipTypeInverseContainer(relationship.getType(), isRelationshipInverse(sourceTaxon, relationship));
+       }
+       
+       /**
+        * 
+        * @param sourceTaxon
+        * @param relationship
+        * @return
+        */
+       public static Taxon RelatedTaxon(Taxon sourceTaxon, TaxonRelationship relationship){
+               return isRelationshipInverse(sourceTaxon, relationship) ? relationship.getFromTaxon() : relationship.getToTaxon();
+       }
+       
+       /**
+        * 
+        * @param sourceTaxon
+        * @param relationship
+        * @return
+        */
+       private static boolean isRelationshipInverse(Taxon sourceTaxon, TaxonRelationship relationship){
+               return relationship.getFromTaxon().equals(sourceTaxon) ? false : true;
+       }
+       
+       /**
+        * 
+        * @param type
+        * @param inverse
+        */
        public TaxonRelationshipTypeInverseContainer(TaxonRelationshipType type, boolean inverse){
                this.inverse = inverse;
                this.setType(type);
        public TaxonRelationshipTypeInverseContainer(TaxonRelationshipType type, boolean inverse){
                this.inverse = inverse;
                this.setType(type);
@@ -27,11 +74,31 @@ public class TaxonRelationshipTypeInverseContainer {
                return inverse;
        }
 
                return inverse;
        }
 
+       /**
+        * returns the representation for the given language, when there is no representation for this language available, the english version is returned.
+        * @param language
+        * @return representation
+        * 
+        */
        public Representation getRepresentation(Language language){
        public Representation getRepresentation(Language language){
-               return inverse ? type.getInverseRepresentation(language) : type.getRepresentation(language);
+               Representation result;
+               result = inverse ? type.getInverseRepresentation(language) : type.getRepresentation(language);
+               if (result == null){
+                       result = inverse ? 
+                                       type.getInverseRepresentation(Language.getLanguageFromUuid(Language.uuidEnglish)) : 
+                                               type.getRepresentation(Language.getLanguageFromUuid(Language.uuidEnglish));
+               }
+               return result;
        }
        
        }
        
+       
+       /**
+        * returns the label of the TaxonRelationshipType for a given language, if the representation of the language is not available the english representation is returned.
+        * @param language
+        * @return label
+        */
        public String getLabel(Language language){
        public String getLabel(Language language){
+               
                return getRepresentation(language).getLabel();
        }
        
                return getRepresentation(language).getLabel();
        }
        
@@ -39,8 +106,8 @@ public class TaxonRelationshipTypeInverseContainer {
                return getRepresentation(language).getDescription();
        }
        
                return getRepresentation(language).getDescription();
        }
        
-       public String getAbbreviatedLabel(Language language){
-               return getRepresentation(language).getAbbreviatedLabel();
+       public String getAbbreviatedLabel(){
+               return getRepresentation(Language.getLanguageFromUuid(Language.uuidEnglish)).getAbbreviatedLabel();
        }
        
        public void setInverse(boolean inverse) {
        }
        
        public void setInverse(boolean inverse) {
@@ -55,6 +122,20 @@ public class TaxonRelationshipTypeInverseContainer {
                this.type = type;
        }
        
                this.type = type;
        }
        
-       
+       @Override
+       public String getTitleCache() {
+               return String.format("%s (%s)", getLabel(CdmStore.getDefaultLanguage()), getAbbreviatedLabel());
+       }
+
+       @Override
+       public void resetTerms() {
+               throw new NotImplementedException();
+       }
+
+       @Override
+       protected void setDefaultTerms(
+                       TermVocabulary<DefinedTermBase> termVocabulary) {
+               throw new NotImplementedException();
+       }
        
 }
        
 }