X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/blobdiff_plain/d776839bd91a9c34523268d7d53f1cb65b61ae03..92e4b107a7509eb50c62d5fd48e9140796df6aba:/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/AbstractCdmDetailElement.java 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 ff6292ab6..950452bd3 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 @@ -1,57 +1,68 @@ // $Id$ /** * Copyright (C) 2007 EDIT - * European Distributed Institute of Taxonomy + * European Distributed Institute of Taxonomy * http://www.e-taxonomy.eu - * + * * The contents of this file are subject to the Mozilla Public License Version 1.1 * See LICENSE.TXT at the top of this package for the full license terms. */ package eu.etaxonomy.taxeditor.ui.section; +import java.util.ArrayList; import java.util.Collection; +import java.util.EnumSet; +import java.util.Observable; +import java.util.Observer; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.swt.SWT; +import org.eclipse.swt.events.DisposeEvent; +import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.forms.widgets.ScrolledForm; import eu.etaxonomy.cdm.api.conversation.ConversationHolder; import eu.etaxonomy.cdm.api.conversation.IConversationEnabled; 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.MessagingUtils; +import eu.etaxonomy.taxeditor.store.CdmStore; +import eu.etaxonomy.taxeditor.store.LoginManager; import eu.etaxonomy.taxeditor.store.StoreUtil; import eu.etaxonomy.taxeditor.ui.element.AbstractCdmFormElement; import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory; import eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent; import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement; import eu.etaxonomy.taxeditor.ui.element.IEnableableFormElement; -import eu.etaxonomy.taxeditor.ui.element.IEntityElement; -import eu.etaxonomy.taxeditor.ui.element.ISelectable; /** *

* Abstract AbstractCdmDetailElement class. *

- * + * * @author n.hoffmann * @created Feb 26, 2010 * @version 1.0 */ -public abstract class AbstractCdmDetailElement extends - AbstractCdmFormElement implements IEntityElement, - IEnableableFormElement, IConversationEnabled, ISelectable { +public abstract class AbstractCdmDetailElement extends AbstractCdmFormElement implements ICdmDetailElement, Observer { private T entity; private boolean irrelevant; + private boolean enabled; + + private EnumSet requiredCrud = null; + /** *

* Constructor for AbstractCdmDetailElement. *

- * + * * @param formFactory * a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory} * object. @@ -63,35 +74,48 @@ public abstract class AbstractCdmDetailElement extends */ public AbstractCdmDetailElement(CdmFormFactory formFactory, ICdmFormElement formElement) { - super(formFactory, (ICdmFormElement) formElement); + super(formFactory, formElement); // register as property change listener formFactory.addPropertyChangeListener(this); + CdmStore.getLoginManager().addObserver(this); + + getLayoutComposite().getParent().addDisposeListener(new DisposeListener() { + + @Override + public void widgetDisposed(DisposeEvent e) { + CdmStore.getLoginManager().deleteObserver(AbstractCdmDetailElement.this); + } + }); } /** * Sets the entity and updates controls - * + * * @param entity * a T object. */ - public void setEntity(T entity) { - this.entity = entity; - updateContent(); + @Override + public void setEntity(T entity) { + this.entity = entity; + // the id is always 0 if the entity was not yet saved, so it is new in this case + if(getEntity() == null || StoreUtil.getCdmEntity(getEntity()).getId() == 0) { + // new entity, not yet saved + requiredCrud = EnumSet.of(CRUD.CREATE); + } else { + requiredCrud = EnumSet.of(CRUD.UPDATE); + } + updateContent(); } - /* - * (non-Javadoc) - * - * @see eu.etaxonomy.taxeditor.forms.IEntityElement#getEntity() - */ /** *

* Getter for the field entity. *

- * + * * @return a T object. */ - public T getEntity() { + @Override + public T getEntity() { return entity; } @@ -101,17 +125,26 @@ public abstract class AbstractCdmDetailElement extends protected void updateContent() { removeElements(); createControls(this, entity, SWT.WRAP); - getLayoutComposite().layout(); + reflowParentScrolledForm(true); + + updateControlStates(); + } + + protected void reflowParentScrolledForm(boolean flushCashes){ + ScrolledForm scrolledForm = null; + Composite parent = getLayoutComposite().getParent(); + while(parent!=null && !(parent instanceof ScrolledForm)){ + parent = parent.getParent(); + } + scrolledForm = (ScrolledForm)parent; + if(scrolledForm!=null){ + scrolledForm.reflow(flushCashes); + } } - /* - * (non-Javadoc) - * - * @see - * eu.etaxonomy.taxeditor.forms.ISelectableComposite#setSelected(boolean) - */ /** {@inheritDoc} */ - public void setSelected(boolean selected) { + @Override + public void setSelected(boolean selected) { Composite section = getLayoutComposite().getParent(); section.setBackground(selected ? SELECTED : getPersistentBackground()); } @@ -119,7 +152,7 @@ public abstract class AbstractCdmDetailElement extends /** * Sets all field to the given enablement state except the objects in * collection except - * + * * @see eu.etaxonomy.taxeditor.ui.element.IEnableableFormElement#setEnabled(boolean) * @param enabled * a boolean. @@ -127,6 +160,7 @@ public abstract class AbstractCdmDetailElement extends * a {@link java.util.Collection} object. */ public void setEnabled(boolean enabled, Collection except) { + this.enabled = enabled; for (ICdmFormElement element : getElements()) { if (element instanceof IEnableableFormElement) { IEnableableFormElement enableableElement = (IEnableableFormElement) element; @@ -139,11 +173,16 @@ public abstract class AbstractCdmDetailElement extends } } + @Override + public boolean isEnabled() { + return enabled; + } + /** *

* Setter for the field irrelevant. *

- * + * * @param irrelevant * a boolean. * @param except @@ -168,19 +207,21 @@ public abstract class AbstractCdmDetailElement extends } /** {@inheritDoc} */ - public void setEnabled(boolean enabled) { + @Override + public void setEnabled(boolean enabled) { setEnabled(enabled, null); } /** {@inheritDoc} */ - public void setIrrelevant(boolean irrelevant) { + @Override + public void setIrrelevant(boolean irrelevant) { this.irrelevant = irrelevant; setIrrelevant(irrelevant, null); } /** * Create all content elements - * + * * @param formElement * a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement} * object. @@ -241,12 +282,13 @@ public abstract class AbstractCdmDetailElement extends if (getParentElement() instanceof AbstractCdmDetailSection) { ((AbstractCdmDetailSection) getParentElement()).updateTitle(); } + reflowParentScrolledForm(true); } /** * Gets called when the source of the event is a child widget of this * widget. - * + * * @param eventSource * a {@link java.lang.Object} object. */ @@ -256,7 +298,7 @@ public abstract class AbstractCdmDetailElement extends *

* handleException *

- * + * * @param event * a * {@link eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent} @@ -264,14 +306,14 @@ public abstract class AbstractCdmDetailElement extends */ public void handleException(CdmPropertyChangeEvent event) { // override this in subclasses if you want to deal with the error - StoreUtil.error(event.getSource().getClass(), event.getException()); + MessagingUtils.error(event.getSource().getClass(), event.getException()); } /** *

* isIrrelevant *

- * + * * @return a boolean. */ public boolean isIrrelevant() { @@ -282,11 +324,12 @@ public abstract class AbstractCdmDetailElement extends *

* getConversationHolder *

- * + * * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} * object. */ - public ConversationHolder getConversationHolder() { + @Override + public ConversationHolder getConversationHolder() { if (getParentElement() instanceof IConversationEnabled) { return ((IConversationEnabled) getParentElement()) .getConversationHolder(); @@ -296,6 +339,25 @@ public abstract class AbstractCdmDetailElement extends } /** {@inheritDoc} */ - public void update(CdmDataChangeMap changeEvents) { + @Override + public void update(CdmDataChangeMap changeEvents) { } + + @Override + public void update(Observable o, Object arg){ + if(o instanceof LoginManager){ + updateControlStates(); + } + } + + + protected void updateControlStates(){ + Collection except = new ArrayList(); + for(ICdmFormElement formElement:getElements()){ + if(formElement instanceof IEnableableFormElement && !((IEnableableFormElement) formElement).isEnabled()){ + except.add(formElement); + } + } + setEnabled(getEntity() != null && CdmStore.currentAuthentiationHasPermission(StoreUtil.getCdmEntity(getEntity()), requiredCrud), except); + } }