Merge branch 'release/4.10.0'
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / name / container / AbstractGroupedContainer.java
index e438a48c315e7afc3c22094c32e62a19fc2f191b..843ab21d606a31d5d5f127942fa76104a1e0b466 100755 (executable)
@@ -13,6 +13,7 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
+import org.apache.commons.lang.StringUtils;
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.text.IDocument;
@@ -47,6 +48,7 @@ import org.eclipse.ui.forms.widgets.TableWrapLayout;
 
 import eu.etaxonomy.cdm.common.CdmUtils;
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
+import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.name.INonViralName;
 import eu.etaxonomy.cdm.model.name.NameRelationship;
 import eu.etaxonomy.cdm.model.name.TaxonName;
@@ -90,7 +92,6 @@ import eu.etaxonomy.taxeditor.preference.Resources;
  * @author p.ciardelli
  * @author n.hoffmann
  * @created 02.06.2008
- * @version 1.0
  */
 abstract public class AbstractGroupedContainer<T extends TaxonBase> implements
                IFormPart, IContainerConstants, IElementHasDetails {
@@ -314,7 +315,7 @@ abstract public class AbstractGroupedContainer<T extends TaxonBase> implements
         */
        public void showAnnotations() {
 
-               if (getName().hasProblem()) {
+               if (getName() != null && getName().hasProblem()) {
                        showParsingProblems();
                }
 
@@ -340,7 +341,12 @@ abstract public class AbstractGroupedContainer<T extends TaxonBase> implements
        private void showParsingProblems() {
                String text = getNameViewer().getTextWidget().getText();
 
-               List<ParserProblem> parsingProblems = getName().getParsingProblems();
+               TaxonName name = getName();
+               if (name == null){
+                       return;
+               }
+
+               List<ParserProblem> parsingProblems = name.getParsingProblems();
 
                for (ParserProblem problem : parsingProblems) {
                        getNameViewer().addAnnotation(new EditorAnnotation(problem),
@@ -351,7 +357,7 @@ abstract public class AbstractGroupedContainer<T extends TaxonBase> implements
        private Position getParsingProblemPosition() {
                String text = getNameViewer().getTextWidget().getText();
 
-               if (getName().hasProblem() && text.length() > 0) {
+               if (getName() != null && getName().hasProblem() && text.length() > 0) {
                        int start = getName().getProblemStarts();
                        int length = getName().getProblemEnds() - start;
 
@@ -450,8 +456,6 @@ abstract public class AbstractGroupedContainer<T extends TaxonBase> implements
         * @return
         */
        private boolean isFreetextEditingAllowed() {
-               INonViralName name = (INonViralName) HibernateProxyHelper
-                               .deproxy(getName());
                boolean enableFreetext = true;
 
                enableFreetext |= isNameUsedMultipleTimes();
@@ -468,27 +472,33 @@ abstract public class AbstractGroupedContainer<T extends TaxonBase> implements
         */
        private boolean isNameUsedMultipleTimes() {
 
-               Set<TaxonBase> taxonBases = getName().getTaxonBases();
-               Iterator<TaxonBase> tbItr = taxonBases.iterator();
-               int nonOrphanedTaxonBaseCount = taxonBases.size();
-
-               while(tbItr.hasNext()) {
-                       TaxonBase tb = tbItr.next();
-                       if(tb.isOrphaned()) {
-                               nonOrphanedTaxonBaseCount--;
+               TaxonName name = getName();
+               if (name != null){
+                       Set<TaxonBase> taxonBases = name.getTaxonBases();
+                       Iterator<TaxonBase> tbItr = taxonBases.iterator();
+                       int nonOrphanedTaxonBaseCount = taxonBases.size();
+       
+                       while(tbItr.hasNext()) {
+                               TaxonBase<?> tb = tbItr.next();
+                               if(tb.isOrphaned()) {
+                                       nonOrphanedTaxonBaseCount--;
+                               }
+                       }
+                       if(nonOrphanedTaxonBaseCount > 1) {
+                               return true;
                        }
-               }
-               if(nonOrphanedTaxonBaseCount > 1) {
-                       return true;
                }
                return false;
        }
 
        private boolean isNameParsable() {
                TaxonName name = getName();
+               if (name == null){
+                       return false;
+               }
 
                boolean isParsable = true;
-               isParsable &= CdmUtils.isEmpty(name.getAppendedPhrase()); // taxonFieldsEmpty();
+               isParsable &= StringUtils.isBlank(name.getAppendedPhrase()); // taxonFieldsEmpty();
 
                isParsable &= !name.isProtectedAuthorshipCache();
                isParsable &= !name.isProtectedNameCache();
@@ -526,8 +536,7 @@ abstract public class AbstractGroupedContainer<T extends TaxonBase> implements
         * @return a {@link eu.etaxonomy.cdm.model.name.TaxonNameBase} object.
         */
        public TaxonName getName() {
-               return HibernateProxyHelper.deproxy(getTaxonBase()
-                               .getName());
+               return CdmBase.deproxy(getTaxonBase().getName());
        }
 
        /**