+package eu.etaxonomy.taxeditor.security;
+
+import java.util.ArrayList;
+import java.util.EnumSet;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.management.relation.Role;
+
+import org.apache.commons.lang.StringUtils;
+import org.eclipse.core.expressions.PropertyTester;
+import org.eclipse.jface.viewers.IStructuredSelection;
+
+import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.cdm.persistence.hibernate.permission.CRUD;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+
+public class PermissionPropertyTester extends PropertyTester {
+
+ private static final String HAS_ROLES = "hasRoles";
+ private static final String HAS_PERMISSIONS = "hasPermissions";
+
+ private static final String CREATE = CRUD.CREATE.toString();
+ private static final String READ = CRUD.READ.toString();
+ private static final String UPDATE = CRUD.UPDATE.toString();
+ private static final String DELETE = CRUD.DELETE.toString();
+
+ @Override
+ public boolean test(Object receiver, String property, Object[] args,
+ Object expectedValue) {
+
+
+ if(property.equals(HAS_PERMISSIONS)){
+
+ return checkHasPermission(receiver, args);
+ }
+
+ if(property.equals(HAS_ROLES)){
+ return checkHasRoles(property, args);
+ }
+
+ return false;
+ }
+
+ private boolean checkHasRoles(String property, Object[] args) {
+ List<Role> roles = new ArrayList<Role>();
+ for(int i = 0; i < args.length; i++){
+ roles.add((Role)args[i]);
+ }
+// return CdmStore.currentAuthentiationHasOneOfRoles(roles.get(0)); // FIXME
+ return false;
+
+ }
+
+ private boolean checkHasPermission(Object receiver, Object[] args) {
+ EnumSet<CRUD> crudSet = crudSetFromArgs(args);
+
+
+ List<Object> selectedElements = ((IStructuredSelection) receiver).toList();
+ for(Object selectedElement : selectedElements){
+ if(selectedElement instanceof CdmBase && ! CdmStore.currentAuthentiationHasPermission((CdmBase) selectedElement, crudSet)){
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ private EnumSet<CRUD> crudSetFromArgs(Object[] args) {
+ EnumSet<CRUD> crudSet = EnumSet.noneOf(CRUD.class);
+ for(int i = 0; i < args.length; i++){
+ try {
+ crudSet.add(CRUD.valueOf(args[i].toString()));
+ } catch (Exception e){
+ System.err.println("could not add " + args[i]);
+ }
+ }
+ return crudSet;
+ }
+
+}