disabling edit button if user is allowed to UPDATE & making text elements selectable
authorAndreas Kohlbecker <a.kohlbecker@bgbm.org>
Wed, 26 Feb 2014 11:02:39 +0000 (11:02 +0000)
committerAndreas Kohlbecker <a.kohlbecker@bgbm.org>
Wed, 26 Feb 2014 11:02:39 +0000 (11:02 +0000)
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/EntitySelectionElement.java

index 261adacd6c94b77060f46cbd6ba5e71bbdb5b196..1792d441c0191c6247671e1fc89857d1444fa3e7 100644 (file)
@@ -3,6 +3,10 @@
  */
 package eu.etaxonomy.taxeditor.ui.selection;
 
+import java.util.EnumSet;
+import java.util.Observable;
+import java.util.Observer;
+
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jface.wizard.WizardDialog;
 import org.eclipse.swt.SWT;
@@ -14,17 +18,25 @@ import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.ISources;
 import org.springframework.security.core.GrantedAuthority;
 
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
 import eu.etaxonomy.cdm.common.CdmUtils;
+import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.common.Group;
 import eu.etaxonomy.cdm.model.common.ICdmBase;
 import eu.etaxonomy.cdm.model.common.IIdentifiableEntity;
 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
+import eu.etaxonomy.cdm.persistence.hibernate.permission.CRUD;
+import eu.etaxonomy.cdm.persistence.hibernate.permission.CdmAuthority;
+import eu.etaxonomy.cdm.persistence.hibernate.permission.CdmPermissionClass;
 import eu.etaxonomy.taxeditor.model.ImageResources;
 import eu.etaxonomy.taxeditor.preference.Resources;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.store.LoginManager;
 import eu.etaxonomy.taxeditor.store.StoreUtil;
 import eu.etaxonomy.taxeditor.ui.dialog.selection.SelectionDialogFactory;
 import eu.etaxonomy.taxeditor.ui.element.AbstractCdmFormElement;
@@ -50,8 +62,12 @@ import eu.etaxonomy.taxeditor.ui.section.grantedAuthority.GrantedAuthorityLabelT
  * @param <T>
  */
 public class EntitySelectionElement<T extends ICdmBase> extends
-               AbstractCdmFormElement implements  SelectionListener, IEnableableFormElement, ISelectableElement, IEntityElement<T>, ILabeledElement, IConversationEnabled {
+               AbstractCdmFormElement implements  SelectionListener, IEnableableFormElement, ISelectableElement, IEntityElement<T>, ILabeledElement, IConversationEnabled, Observer {
 
+       private static final EnumSet<CRUD> UPDATE = EnumSet.of(CRUD.UPDATE);
+       private static final EnumSet<CRUD> DELETE = EnumSet.of(CRUD.DELETE);
+       private static final EnumSet<CRUD> CREATE = EnumSet.of(CRUD.CREATE);
+       
        /**
         * Bitmask for configuring functionality of selection element
         */
@@ -64,7 +80,7 @@ public class EntitySelectionElement<T extends ICdmBase> extends
        protected T entity;
 
        protected Label label;
-       protected Label text;
+       protected Text text;
        protected Button button_selection;
 
        private SelectionArbitrator selectionArbitrator;
@@ -163,7 +179,8 @@ public class EntitySelectionElement<T extends ICdmBase> extends
 
                addControl(selectableComposite);
 
-               text = formFactory.createLabel(selectableComposite, null, SWT.WRAP);
+               text = formFactory.createText(selectableComposite, null, SWT.WRAP);
+               text.setEditable(false);
                addControl(text);
 
                text.setLayoutData(LayoutConstants.FILL_HORIZONTALLY());
@@ -226,7 +243,7 @@ public class EntitySelectionElement<T extends ICdmBase> extends
        public void setEnabled(boolean enabled) {
                button_selection.setEnabled(enabled);
                if (isEditable) {
-                       button_edit.setEnabled(enabled && entity != null);
+                       updateButtonStates();
                }
        }
 
@@ -268,7 +285,7 @@ public class EntitySelectionElement<T extends ICdmBase> extends
                title = title.replace("&", "&&");
                text.setText(title); // title can be null
                if (isEditable) {
-                       button_edit.setEnabled(entity != null);
+                       updateButtonStates();
                }
        }
 
@@ -445,4 +462,25 @@ public class EntitySelectionElement<T extends ICdmBase> extends
        @Override
        public void update(CdmDataChangeMap changeEvents) {
        }
+       
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.ui.element.AbstractCdmFormElement#removeElements()
+        */
+       @Override
+    public void removeElements(){
+               super.removeElements();
+               LoginManager loginManager = CdmStore.getLoginManager();
+               loginManager.addObserver(this);
+       }
+
+       @Override
+       public void update(Observable o, Object arg) {
+               if(o instanceof LoginManager){
+                       updateButtonStates();
+               }
+       }
+
+       private void updateButtonStates() {
+               button_edit.setEnabled(isEditable && button_selection.isEnabled() && getEntity() != null && CdmStore.currentAuthentiationHasPermission((CdmBase) getEntity(), UPDATE));         
+       }
 }