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)
1  2 
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

index b243adfdd15642037e7f8ff6c622882796f153d7,b243adfdd15642037e7f8ff6c622882796f153d7..5f7e9d6f6e165ad13fb6a0ca4eccaf4dc66d46f5
@@@ -45,14 -45,14 +45,23 @@@ public interface IMultiPageTaxonEditorP
        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,c348d5c343c3d9600b9256a4ffb4cb91c1923cd4..405820023da87c67cf9e94d527fd22f7ff862df6
@@@ -152,15 -152,15 +152,19 @@@ public class MultiPageTaxonEditor exten
                                                        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,951dbcae6df3b417bec14bf5ec71835cd20b3b9a..9700d00cee042f2312b099d4716f22563eac8765
@@@ -51,6 -51,6 +51,7 @@@ import eu.etaxonomy.cdm.model.common.Cd
  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 -72,6 +73,9 @@@ import eu.etaxonomy.taxeditor.model.IPa
  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 -273,6 +277,13 @@@ public class TaxonNameEditor extends Ed
                                        "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} */
                getSite().setSelectionProvider(simpleSelectionProvider);
        }
  
++
        /**
         * 
         */
  
                allGroups.add(getAcceptedGroup());
  
--              List<HomotypicalSynonymGroup> grps = getHeterotypicSynonymGroups();
++//            List<HomotypicalSynonymGroup> grps = getHeterotypicSynonymGroups(); // UNUSED => remove
                
                heterotypicSynonymGroups = getHeterotypicSynonymGroups();
                
                }
                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);
                }
        
        @Override
        public void setEnabled(boolean enabled) {
++              //FIXME this method seems incomplete
                for(AbstractGroupedContainer groupedContainer : getGroupedContainers()){
                        groupedContainer.setEnabled(getManagedForm().setInput(selection));
                }
index 23d6ec0460fab915650a0f49d870444d92686600,23d6ec0460fab915650a0f49d870444d92686600..5fbed53059c8fd4d0dacf2bd8d805cad3f200091
@@@ -634,7 -634,7 +634,7 @@@ abstract public class AbstractGroupedCo
                focusListener = new FocusAdapter() {
                        @Override
                        public void focusGained(FocusEvent e) {
--                              if(disabled){
++                              if(!enabled){
                                        return;
                                }
                                for (AbstractGroupedContainer container : getEditor()
  
        private boolean enabled;
  
--      private boolean disabled;
--
        /**
         * nonEditableInfo is a label displayed underneath a GroupedComposite's
         * input field. For instance, NameComposites display things like name
        }
        
        public void setDisabled(boolean disabled) {
--              this.disabled = disabled;
--              setEnabled(disabled);
++              this.enabled = !disabled;
++              setEnabled(enabled);
        }
        
        public void setEnabled(boolean enabled) {
                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,d0a823f4d0c5398b5958c2b0ee2704c04653b1ce..7774c2c1eebeff4086c797b983bc926214b95948
@@@ -96,28 -84,6 +96,28 @@@ public class TaxonNodeLabelProvider ext
         */
        /** {@inheritDoc} */
        public StyledString getStyledText(Object element) {
 -              return new StyledString(getText(element));
 +              // determine style base on  user grants
 +              Styler styler = null;
 +              if(!CdmStore.currentAuthentiationHasPermission((CdmBase)element, RequiredPermissions.TAXONNODE_EDIT)){
 +                      styler = getNotGrantedStyler();
-               } 
++              }
 +              return new StyledString(getText(element), styler);
 +              
 +      }
 +      
 +      /**
 +       * @return
 +       */
 +      private Styler getNotGrantedStyler() {
 +              if (notGrantedStyler  == null) {
 +                      notGrantedStyler = new Styler() {
 +                              @Override
 +                              public void applyStyles(TextStyle textStyle) {
 +                                      textStyle.underline = false;
 +                                      textStyle.foreground = StoreUtil.getColor(Resources.COLOR_TEXT_DISABLED);
 +                              }
 +                      };
 +              }
 +              return notGrantedStyler;
        }
  }
index c9cc810b911be2924812c8e4ec0639c0df5da371,c9cc810b911be2924812c8e4ec0639c0df5da371..70457a9f33f39441b666ba77944cc91e70d64937
              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,11f0948fad91aea12bf830d08363e58007a1045f..658abe1e94c5a0c91e4b3b6750d32100296d565a
@@@ -81,5 -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,0000000000000000000000000000000000000000..a49390b74b812909f9e4fd911de8636fb1ae4f7f
mode 100644,000000..100644
--- /dev/null
@@@ -1,23 -1,0 +1,27 @@@
 +/**
 + * 
 + */
 +package eu.etaxonomy.taxeditor.security;
 +
 +import java.util.EnumSet;
 +
 +import eu.etaxonomy.cdm.persistence.hibernate.permission.CRUD;
 +import eu.etaxonomy.cdm.persistence.hibernate.permission.Operation;
 +
 +/**
 + * Provides the required permissions a user would need in order to view or edit a 
 + * specific cdm type.
 + * 
 + * @author andreas kohlbecker
 + *
 + */
 +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;
++      
 +
 +}