From db88d819b1adcef274966fb5ee6230899e786d36 Mon Sep 17 00:00:00 2001 From: Andreas Kohlbecker Date: Wed, 26 Feb 2014 16:25:40 +0000 Subject: [PATCH] protecting editing capabilities of names references and authors - #4055 (action enablement adapts to the users granted authorities) --- .../ui/element/AbstractFormSection.java | 6 ++- .../ui/section/AbstractCdmDetailElement.java | 8 +++ .../AbstractEntityCollectionSection.java | 53 +++++++++++++++++-- ...stractIdentifiableEntityDetailElement.java | 39 +++++++++++++- 4 files changed, 101 insertions(+), 5 deletions(-) diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/AbstractFormSection.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/AbstractFormSection.java index 9679087c3..fd2b43189 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/AbstractFormSection.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/AbstractFormSection.java @@ -102,6 +102,7 @@ public abstract class AbstractFormSection extends Section implements ISe client.setLayout(layout); this.setClient(client); + } /** @@ -531,7 +532,8 @@ public abstract class AbstractFormSection extends Section implements ISe * * @return a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory} object. */ - public CdmFormFactory getFormFactory() { + @Override + public CdmFormFactory getFormFactory() { return formFactory; } @@ -579,8 +581,10 @@ public abstract class AbstractFormSection extends Section implements ISe } /** {@inheritDoc} */ + @Override public void update(CdmDataChangeMap changeEvents) { + } diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/AbstractCdmDetailElement.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/AbstractCdmDetailElement.java index 56017a022..96631a3e2 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/AbstractCdmDetailElement.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/AbstractCdmDetailElement.java @@ -11,6 +11,7 @@ package eu.etaxonomy.taxeditor.ui.section; import java.util.Collection; +import java.util.EnumSet; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.swt.SWT; @@ -18,10 +19,13 @@ import org.eclipse.swt.widgets.Composite; import eu.etaxonomy.cdm.api.conversation.ConversationHolder; import eu.etaxonomy.cdm.api.conversation.IConversationEnabled; +import eu.etaxonomy.cdm.model.common.CdmBase; import eu.etaxonomy.cdm.model.name.TaxonNameBase; import eu.etaxonomy.cdm.model.taxon.TaxonBase; import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap; +import eu.etaxonomy.cdm.persistence.hibernate.permission.CRUD; import eu.etaxonomy.taxeditor.model.AbstractUtility; +import eu.etaxonomy.taxeditor.store.CdmStore; import eu.etaxonomy.taxeditor.ui.element.AbstractCdmFormElement; import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory; import eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent; @@ -39,6 +43,8 @@ import eu.etaxonomy.taxeditor.ui.element.IEnableableFormElement; */ public abstract class AbstractCdmDetailElement extends AbstractCdmFormElement implements ICdmDetailElement { + private static final EnumSet UPDATE = EnumSet.of(CRUD.UPDATE); + private T entity; private boolean irrelevant; @@ -100,6 +106,8 @@ public abstract class AbstractCdmDetailElement extends AbstractCdmFormElement removeElements(); createControls(this, entity, SWT.WRAP); getLayoutComposite().layout(); + + setEnabled(CdmStore.currentAuthentiationHasPermission((CdmBase) getEntity(), UPDATE)); } /* diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/AbstractEntityCollectionSection.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/AbstractEntityCollectionSection.java index f017e45b1..c3a11387a 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/AbstractEntityCollectionSection.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/AbstractEntityCollectionSection.java @@ -4,12 +4,17 @@ package eu.etaxonomy.taxeditor.ui.section; import java.util.Collection; +import java.util.EnumSet; +import java.util.Observable; +import java.util.Observer; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.ToolBarManager; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.SWT; +import org.eclipse.swt.events.DisposeEvent; +import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; @@ -24,11 +29,15 @@ import org.eclipse.ui.forms.widgets.ExpandableComposite; import eu.etaxonomy.cdm.api.conversation.ConversationHolder; import eu.etaxonomy.cdm.common.CdmUtils; +import eu.etaxonomy.cdm.model.common.CdmBase; +import eu.etaxonomy.cdm.persistence.hibernate.permission.CRUD; import eu.etaxonomy.taxeditor.model.AbstractUtility; import eu.etaxonomy.taxeditor.model.ImageResources; import eu.etaxonomy.taxeditor.preference.IPreferenceKeys; import eu.etaxonomy.taxeditor.preference.PreferencesUtil; import eu.etaxonomy.taxeditor.preference.Resources; +import eu.etaxonomy.taxeditor.store.CdmStore; +import eu.etaxonomy.taxeditor.store.LoginManager; import eu.etaxonomy.taxeditor.ui.element.AbstractFormSection; import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory; import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement; @@ -44,9 +53,14 @@ import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement; * @version $Id: $ */ -public abstract class AbstractEntityCollectionSection extends AbstractFormSection implements IExpansionListener{ +public abstract class AbstractEntityCollectionSection extends AbstractFormSection implements IExpansionListener, Observer { - protected Composite container; + /** + * + */ + private static final EnumSet UPDATE = EnumSet.of(CRUD.UPDATE); + + protected Composite container; private Label label_empty; @@ -67,9 +81,17 @@ public abstract class AbstractEntityCollectionSection extends A super(formFactory, parentElement, ExpandableComposite.CLIENT_INDENT | style); this.title = title; this.setText(getTitleString()); - showToolbar(); + updateToolbar(); addExpansionListener(this); + + CdmStore.getLoginManager().addObserver(this); + addDisposeListener(new DisposeListener() { + @Override + public void widgetDisposed(DisposeEvent e) { + CdmStore.getLoginManager().deleteObserver(AbstractEntityCollectionSection.this); + } + }); } protected Control createToolbar() { @@ -105,10 +127,16 @@ public abstract class AbstractEntityCollectionSection extends A return toolBarManager.createControl(this); } + /** + * using this method is discouraged, use updateToolBar() instead + */ public void showToolbar(){ setTextClient(createToolbar()); } + /** + * using this method is discouraged, use updateToolBar() instead + */ public void removeToolbar(){ setTextClient(null); } @@ -125,6 +153,7 @@ public abstract class AbstractEntityCollectionSection extends A internalUpdateSection(false); } setSectionTitle(); + updateToolbar(); layout(); } @@ -289,6 +318,24 @@ public abstract class AbstractEntityCollectionSection extends A internalUpdateSection(true); } + /* (non-Javadoc) + * @see java.util.Observer#update(java.util.Observable, java.lang.Object) + */ + @Override + public void update(Observable o, Object arg){ + if(o instanceof LoginManager){ + updateToolbar(); + } + } + + private void updateToolbar() { + if(getEntity() != null && CdmStore.currentAuthentiationHasPermission((CdmBase) getEntity(), UPDATE)){ + showToolbar(); + } else { + removeToolbar(); + } + } + /** * Get the specific collection of this entity * diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/AbstractIdentifiableEntityDetailElement.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/AbstractIdentifiableEntityDetailElement.java index 838fd1c77..1f6abee77 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/AbstractIdentifiableEntityDetailElement.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/AbstractIdentifiableEntityDetailElement.java @@ -4,8 +4,15 @@ package eu.etaxonomy.taxeditor.ui.section; import java.util.Arrays; +import java.util.EnumSet; +import java.util.Observable; +import java.util.Observer; +import eu.etaxonomy.cdm.model.common.CdmBase; import eu.etaxonomy.cdm.model.common.IIdentifiableEntity; +import eu.etaxonomy.cdm.persistence.hibernate.permission.CRUD; +import eu.etaxonomy.taxeditor.store.CdmStore; +import eu.etaxonomy.taxeditor.store.LoginManager; import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory; import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement; import eu.etaxonomy.taxeditor.ui.element.ToggleableTextElement; @@ -15,12 +22,18 @@ import eu.etaxonomy.taxeditor.ui.element.ToggleableTextElement; * */ public abstract class AbstractIdentifiableEntityDetailElement extends - AbstractCdmDetailElement { + AbstractCdmDetailElement implements Observer { + /** + * + */ + private static final EnumSet UPDATE = EnumSet.of(CRUD.UPDATE); protected ToggleableTextElement toggleable_cache; public AbstractIdentifiableEntityDetailElement(CdmFormFactory formFactory, ICdmFormElement formElement) { super(formFactory, formElement); + updateToggleableCacheState(); + } public void updateToggleableCacheField() { @@ -36,4 +49,28 @@ public abstract class AbstractIdentifiableEntityDetailElement