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