first bits for #3097 (disable editors if a user has insufficient grants for a taxon...
authorAndreas Kohlbecker <a.kohlbecker@bgbm.org>
Wed, 12 Sep 2012 11:33:52 +0000 (11:33 +0000)
committerAndreas Kohlbecker <a.kohlbecker@bgbm.org>
Wed, 12 Sep 2012 11:33:52 +0000 (11:33 +0000)
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/IMultiPageTaxonEditorPage.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/MultiPageTaxonEditor.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditor.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/AbstractGroupedContainer.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonNodeLabelProvider.java
eu.etaxonomy.taxeditor.store/plugin.xml
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/Resources.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/security/RequiredPermissions.java
pom.xml

index b243adfdd15642037e7f8ff6c622882796f153d7..5f7e9d6f6e165ad13fb6a0ca4eccaf4dc66d46f5 100644 (file)
@@ -45,14 +45,23 @@ public interface IMultiPageTaxonEditorPage extends IEditorPart {
        public boolean isRedrawing();
 
        /**
+        * Sets the editor page into enabled or disabled state depending on the 
+        * value of the supplied parameter <code>enabled</code>.
         * 
         * @param enabled
         */
        public void setEnabled(boolean enabled);
 
        /**
-        * 
+        * Sets the editor page into disabled state and changes the 
+        * appearance accordingly. 
         */
        void setDisabled();
        
+       /**
+        * Sets the editor page into disabled state and changes the 
+        * appearance in order to indicate that an error has occurred.  
+        */
+       public void setOnError();
+       
 }
index c348d5c343c3d9600b9256a4ffb4cb91c1923cd4..405820023da87c67cf9e94d527fd22f7ff862df6 100644 (file)
@@ -152,15 +152,19 @@ public class MultiPageTaxonEditor extends FormEditor implements
                                                        getClass(),
                                                        "An error occurred while saving the editor. Please close and reopen the taxon again.",
                                                        e);
-                       disableEditor();
+                       disableEditor(true);
                } finally {
                        monitor.done();
                }
        }
 
-       private void disableEditor() {
+       private void disableEditor(boolean isOnError) {
                for (IMultiPageTaxonEditorPage editorPage : getPages()) {
-                       editorPage.setDisabled();
+                       if(isOnError){
+                               editorPage.setOnError();
+                       }else {
+                               editorPage.setDisabled();                               
+                       }
                }
                conversation.unregisterForDataStoreChanges(this);
                conversation.close();
index 951dbcae6df3b417bec14bf5ec71835cd20b3b9a..9700d00cee042f2312b099d4716f22563eac8765 100644 (file)
@@ -51,6 +51,7 @@ import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;
 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
 import eu.etaxonomy.taxeditor.editor.CdmDataTransfer;
 import eu.etaxonomy.taxeditor.editor.EditorUtil;
@@ -72,6 +73,9 @@ import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
 import eu.etaxonomy.taxeditor.model.TaxeditorPartService;
 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
 import eu.etaxonomy.taxeditor.preference.Resources;
+import eu.etaxonomy.taxeditor.security.RequiredPermissions;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.store.StoreUtil;
 
 /**
  * <p>
@@ -273,6 +277,13 @@ public class TaxonNameEditor extends EditorPart implements
                                        "There should always be a selected object.");
                }
                getSelectedContainer().setSelected();
+               
+               // check permissions
+               TaxonNode taxonNode = ((TaxonEditorInput)getEditorInput()).getTaxonNode();
+               boolean doEnable = CdmStore.currentAuthentiationHasPermission(taxonNode, RequiredPermissions.TAXONNODE_EDIT);
+               if(!doEnable){
+                       setDisabled();
+               }
        }
 
        /** {@inheritDoc} */
@@ -494,6 +505,7 @@ public class TaxonNameEditor extends EditorPart implements
                getSite().setSelectionProvider(simpleSelectionProvider);
        }
 
+
        /**
         * 
         */
@@ -592,7 +604,7 @@ public class TaxonNameEditor extends EditorPart implements
 
                allGroups.add(getAcceptedGroup());
 
-               List<HomotypicalSynonymGroup> grps = getHeterotypicSynonymGroups();
+//             List<HomotypicalSynonymGroup> grps = getHeterotypicSynonymGroups(); // UNUSED => remove
                
                heterotypicSynonymGroups = getHeterotypicSynonymGroups();
                
@@ -871,21 +883,33 @@ public class TaxonNameEditor extends EditorPart implements
                }
                return getAcceptedNameContainer();
        }
+       
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.editor.IMultiPageTaxonEditorPage#setOnError()
+        */
+       public void setOnError() {
+               Color disabledColor =  StoreUtil.getColor(Resources.COLOR_EDITOR_ERROR);
+               setDisabled(disabledColor);
+       }
 
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.editor.IMultiPageTaxonEditorPage#setDisabled()
+        */
        @Override
        public void setDisabled(){
+               Color disabledColor =  StoreUtil.getColor(Resources.COLOR_TEXT_DISABLED_BACKGROUND);
+               setDisabled(disabledColor);
+       }
+       
+       protected void setDisabled(Color disabledColor) {
+       
                for(AbstractGroupedContainer groupedContainer : getGroupedContainers()){
                        groupedContainer.setDisabled(true);
                }
                
-               // send an empty selection to the current provider
+               // send an empty selection to the current provider - TODO only on error ???
                getManagedForm().setInput(null);
                
-               // coloring the widgets
-               
-               // TODO move this to resources and make configurable via Preferences
-               Color disabledColor = Display.getDefault().getSystemColor(SWT.COLOR_RED);
-               
                for(AbstractGroupedContainer groupedContainer : getGroupedContainers()){
                        groupedContainer.setBackground(disabledColor);
                }
@@ -894,6 +918,7 @@ public class TaxonNameEditor extends EditorPart implements
        
        @Override
        public void setEnabled(boolean enabled) {
+               //FIXME this method seems incomplete
                for(AbstractGroupedContainer groupedContainer : getGroupedContainers()){
                        groupedContainer.setEnabled(getManagedForm().setInput(selection));
                }
index 23d6ec0460fab915650a0f49d870444d92686600..5fbed53059c8fd4d0dacf2bd8d805cad3f200091 100644 (file)
@@ -634,7 +634,7 @@ abstract public class AbstractGroupedContainer<T extends TaxonBase> implements
                focusListener = new FocusAdapter() {
                        @Override
                        public void focusGained(FocusEvent e) {
-                               if(disabled){
+                               if(!enabled){
                                        return;
                                }
                                for (AbstractGroupedContainer container : getEditor()
@@ -1011,8 +1011,6 @@ abstract public class AbstractGroupedContainer<T extends TaxonBase> implements
 
        private boolean enabled;
 
-       private boolean disabled;
-
        /**
         * nonEditableInfo is a label displayed underneath a GroupedComposite's
         * input field. For instance, NameComposites display things like name
@@ -1244,8 +1242,8 @@ abstract public class AbstractGroupedContainer<T extends TaxonBase> implements
        }
        
        public void setDisabled(boolean disabled) {
-               this.disabled = disabled;
-               setEnabled(disabled);
+               this.enabled = !disabled;
+               setEnabled(enabled);
        }
        
        public void setEnabled(boolean enabled) {
@@ -1253,10 +1251,11 @@ abstract public class AbstractGroupedContainer<T extends TaxonBase> implements
                Color color = enabled ? control.getForeground() : EditorUtil.getColor(Resources.COLOR_DISABLED_EDITOR);
                                
                getNameViewer().getTextWidget().setEditable(enabled);
+               getNameViewer().getTextWidget().setEnabled(enabled);
                getNameViewer().getTextWidget().setForeground(color);
        }
        
-       public boolean getEnabled(){
+       public boolean isEnabled(){
                return enabled;
        }
 }
index ca2a8eb0590ba0a655dd103f3b166a2408c7a378..7774c2c1eebeff4086c797b983bc926214b95948 100644 (file)
@@ -100,7 +100,7 @@ public class TaxonNodeLabelProvider extends ColumnLabelProvider
                Styler styler = null;
                if(!CdmStore.currentAuthentiationHasPermission((CdmBase)element, RequiredPermissions.TAXONNODE_EDIT)){
                        styler = getNotGrantedStyler();
-               } 
+               }
                return new StyledString(getText(element), styler);
                
        }
index c9cc810b911be2924812c8e4ec0639c0df5da371..70457a9f33f39441b666ba77944cc91e70d64937 100644 (file)
             label="Disabled Name Editor Field"
             value="105,114,124">
       </colorDefinition>
+      <colorDefinition
+            categoryId="eu.etaxonomy.taxeditor.preferences.themeElementCategory"
+            id="eu.etaxonomy.taxeditor.preferences.colorDefinition.editorError"
+            label="Editor On Error"
+            value="255,0,0">
+      </colorDefinition>
       </extension>
 <extension
       point="org.eclipse.core.expressions.propertyTesters">
index 11f0948fad91aea12bf830d08363e58007a1045f..658abe1e94c5a0c91e4b3b6750d32100296d565a 100644 (file)
@@ -81,5 +81,7 @@ public interface Resources {
        
        public static final String COLOR_DISABLED_EDITOR = "eu.etaxonomy.taxeditor.preferences.colorDefinition.disabledEditor";
        
+       public static final String COLOR_EDITOR_ERROR = "eu.etaxonomy.taxeditor.preferences.colorDefinition.editorError";
+       
        
 }
index c09f1033f06fc545931ae6fe96980209bd0bd958..a49390b74b812909f9e4fd911de8636fb1ae4f7f 100644 (file)
@@ -19,5 +19,9 @@ public class RequiredPermissions {
        
        public static final EnumSet<CRUD> TAXONNODE_EDIT = Operation.UPDATE;
        
+       public static final EnumSet<CRUD> TAXON_EDIT = Operation.UPDATE;
+       
+       public static final EnumSet<CRUD> DESCRIPTION_EDIT = Operation.UPDATE;
+       
 
 }
diff --git a/pom.xml b/pom.xml
index 0dd81a70e2d540368d96c1f58312b43d2fda869b..04ca36d5f9994408b11c5f715952298eb6dd2480 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
   </prerequisites>
   <groupId>eu.etaxonomy</groupId>
   <artifactId>taxeditor-parent</artifactId>
-  <version>3.0.12-SNAPSHOT</version>
+  <version>3.0.13-SNAPSHOT</version>
   <name>EDIT Taxonomic Editor</name>
   <description>The Taxonomic Editor for EDIT's platform for cybertaxonomy</description>
   <url>http://wp5.e-taxonomy.eu</url>
@@ -14,9 +14,9 @@
   <packaging>pom</packaging>
   <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    <cdmlib.version>3.0.12-SNAPSHOT</cdmlib.version><!-- TODO can we use project.version ????? -->
+    <cdmlib.version>3.0.13-SNAPSHOT</cdmlib.version><!-- TODO can we use project.version ????? -->
     <tycho.version>0.14.0</tycho.version>
-    <taxeditor.version>3.0.12-SNAPSHOT</taxeditor.version>
+    <taxeditor.version>3.0.13-SNAPSHOT</taxeditor.version>
   </properties>
   <modules>
     <module>eu.etaxonomy.taxeditor.cdmlib</module>
   <developers>
     <developer>
       <!-- your SVN account id please! -->
-      <id>n.hoffmann</id>
+      <id>a.kohlbecker</id>
       <name>
-                               Niels Hoffmann
+                       Andreas Kohlbecker
                        </name>
-      <email>n.hoffmann [at] bgbm.org</email>
+      <email>a.kohlbecker [at] bgbm.org</email>
+      <organization>
+                               Botanic Garden Botanical Museum Berlin
+                       </organization>
+      <organizationUrl>http://www.bgbm.org/BioDivInf/</organizationUrl>
+      <timezone>+1</timezone>
+      <roles>
+        <role>Java Developer</role>
+        <role>Architect</role>
+      </roles>
+      <url/>
+    </developer>
+       <developer>
+      <!-- your SVN account id please! -->
+      <id>a.mueller</id>
+      <name>
+                               Andreas Müller
+                       </name>
+      <email>a.mueller [at] bgbm.org</email>
       <organization>
                                Botanic Garden Botanical Museum Berlin
                        </organization>