Merge branch 'release/5.11.0'
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / checklist / e4 / handler / OpenChecklistEditorHandlerE4.java
index b1da411115aab8213abcad261dbec4ff9b9d4c59..67bf6b71c64b40062bbdc48fc87e71f23eaf9c45 100644 (file)
@@ -1,5 +1,6 @@
 package eu.etaxonomy.taxeditor.editor.view.checklist.e4.handler;
 
+import java.util.List;
 import java.util.UUID;
 
 import javax.inject.Inject;
@@ -10,13 +11,17 @@ import org.eclipse.swt.widgets.Shell;
 
 import eu.etaxonomy.cdm.api.service.IClassificationService;
 import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
+import eu.etaxonomy.cdm.model.description.Distribution;
 import eu.etaxonomy.cdm.model.metadata.PreferencePredicate;
+import eu.etaxonomy.cdm.model.permission.Operation;
 import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;
 import eu.etaxonomy.taxeditor.editor.AppModelId;
 import eu.etaxonomy.taxeditor.editor.EditorUtil;
 import eu.etaxonomy.taxeditor.editor.l10n.Messages;
 import eu.etaxonomy.taxeditor.handler.defaultHandler.e4.DefaultOpenHandlerBaseE4;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
+import eu.etaxonomy.taxeditor.security.RequiredPermissions;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 
 public class OpenChecklistEditorHandlerE4 extends DefaultOpenHandlerBaseE4<ITaxonTreeNode> {
@@ -86,11 +91,36 @@ public class OpenChecklistEditorHandlerE4 extends DefaultOpenHandlerBaseE4<ITaxo
      */
     @Override
     protected boolean canExecute(ITaxonTreeNode entity) {
-        return entity!=null && PreferencesUtil.getBooleanValue(PreferencePredicate.DistributionEditorActivated.getKey());
+
+        Distribution instance = Distribution.NewInstance();
+        boolean hasDescriptionPermission = CdmStore.currentAuthentiationHasPermission(instance, Operation.ALL);
+        if (!hasDescriptionPermission){
+            return false;
+        }
+        return PreferencesUtil.getBooleanValue(PreferencePredicate.DistributionEditorActivated.getKey());
+        //check whether the user has subtree rights
+    //    CdmStore.getCurrentAuthentiation().getAuthorities()
+     //   boolean  hasPermission =  ((TaxonNode)entity).hasChildNodes() ? checkPermission(((TaxonNode)entity).getChildNodes(), false) || CdmStore.currentAuthentiationHasPermission(((TaxonNode) entity), RequiredPermissions.TAXONNODE_EDIT):CdmStore.currentAuthentiationHasPermission(((TaxonNode) entity), RequiredPermissions.TAXONNODE_EDIT);
+    //    return hasPermission &&  PreferencesUtil.getBooleanValue(PreferencePredicate.DistributionEditorActivated.getKey());
     }
 
     @Override
     protected String getPartId() {
         return AppModelId.PARTDESCRIPTOR_EU_ETAXONOMY_TAXEDITOR_EDITOR_VIEW_CHECKLIST_E4_DISTRIBUTIONEDITORPART;
     }
+
+    private boolean checkPermission(List<TaxonNode> nodes, boolean result){
+
+        for (TaxonNode node:nodes){
+            if (node.hasChildNodes() && !result){
+                result = result ||checkPermission(node.getChildNodes(), result);
+
+            }
+            result = result || CdmStore.currentAuthentiationHasPermission(node, RequiredPermissions.TAXONNODE_EDIT);
+            if (result){
+                return result;
+            }
+        }
+        return result;
+    }
 }