From: Andreas Kohlbecker Date: Wed, 12 Sep 2012 11:33:52 +0000 (+0000) Subject: first bits for #3097 (disable editors if a user has insufficient grants for a taxon... X-Git-Tag: 3.6.0~1022^2~12 X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/commitdiff_plain/005c39abb934d50c07cd405b9c942b54629f33a1 first bits for #3097 (disable editors if a user has insufficient grants for a taxon or taxon node) - TaxonEditor disabled, views still to do --- 005c39abb934d50c07cd405b9c942b54629f33a1 diff --cc eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/IMultiPageTaxonEditorPage.java index b243adfdd,b243adfdd..5f7e9d6f6 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/IMultiPageTaxonEditorPage.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/IMultiPageTaxonEditorPage.java @@@ -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 enabled. * * @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(); ++ } diff --cc eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/MultiPageTaxonEditor.java index c348d5c34,c348d5c34..405820023 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/MultiPageTaxonEditor.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/MultiPageTaxonEditor.java @@@ -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(); diff --cc eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditor.java index 951dbcae6,951dbcae6..9700d00ce --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditor.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditor.java @@@ -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; /** *

@@@ -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} */ @@@ -494,6 -494,6 +505,7 @@@ getSite().setSelectionProvider(simpleSelectionProvider); } ++ /** * */ @@@ -592,7 -592,7 +604,7 @@@ allGroups.add(getAcceptedGroup()); -- List grps = getHeterotypicSynonymGroups(); ++// List grps = getHeterotypicSynonymGroups(); // UNUSED => remove heterotypicSynonymGroups = getHeterotypicSynonymGroups(); @@@ -871,21 -871,21 +883,33 @@@ } 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 -894,6 +918,7 @@@ @Override public void setEnabled(boolean enabled) { ++ //FIXME this method seems incomplete for(AbstractGroupedContainer groupedContainer : getGroupedContainers()){ groupedContainer.setEnabled(getManagedForm().setInput(selection)); } diff --cc eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/AbstractGroupedContainer.java index 23d6ec046,23d6ec046..5fbed5305 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/AbstractGroupedContainer.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/AbstractGroupedContainer.java @@@ -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() @@@ -1011,8 -1011,8 +1011,6 @@@ 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 -1244,8 +1242,8 @@@ } public void setDisabled(boolean disabled) { -- this.disabled = disabled; -- setEnabled(disabled); ++ this.enabled = !disabled; ++ setEnabled(enabled); } public void setEnabled(boolean enabled) { @@@ -1253,10 -1253,10 +1251,11 @@@ 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; } } diff --cc eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonNodeLabelProvider.java index ca2a8eb05,d0a823f4d..7774c2c1e --- a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonNodeLabelProvider.java +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonNodeLabelProvider.java @@@ -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; } } diff --cc eu.etaxonomy.taxeditor.store/plugin.xml index c9cc810b9,c9cc810b9..70457a9f3 --- a/eu.etaxonomy.taxeditor.store/plugin.xml +++ b/eu.etaxonomy.taxeditor.store/plugin.xml @@@ -919,6 -919,6 +919,12 @@@ label="Disabled Name Editor Field" value="105,114,124"> ++ ++ diff --cc eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/Resources.java index 11f0948fa,11f0948fa..658abe1e9 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/Resources.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/Resources.java @@@ -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"; ++ } diff --cc eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/security/RequiredPermissions.java index c09f1033f,000000000..a49390b74 mode 100644,000000..100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/security/RequiredPermissions.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/security/RequiredPermissions.java @@@ -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 TAXONNODE_EDIT = Operation.UPDATE; + ++ public static final EnumSet TAXON_EDIT = Operation.UPDATE; ++ ++ public static final EnumSet DESCRIPTION_EDIT = Operation.UPDATE; ++ + +}