X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/blobdiff_plain/14fde9f47bd18568ae86cd2d9cf857663b117249..bd05baf38855e3f5b5c988db8bbc527b8e3f9aea:/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 aea5c8816..6ed49262a 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,4 +1,3 @@ -// $Id$ /** * Copyright (C) 2007 EDIT * European Distributed Institute of Taxonomy @@ -10,6 +9,7 @@ package eu.etaxonomy.taxeditor.ui.section; +import java.util.ArrayList; import java.util.Collection; import java.util.EnumSet; import java.util.Observable; @@ -20,14 +20,17 @@ 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.swt.widgets.Display; 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.common.CdmUtils; +import eu.etaxonomy.cdm.model.common.CdmBase; +import eu.etaxonomy.cdm.model.name.TaxonName; 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.model.MessagingUtils; import eu.etaxonomy.taxeditor.store.CdmStore; import eu.etaxonomy.taxeditor.store.LoginManager; import eu.etaxonomy.taxeditor.store.StoreUtil; @@ -36,38 +39,26 @@ 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.LabelElement; +import eu.etaxonomy.taxeditor.ui.element.LayoutConstants; /** - *

- * Abstract AbstractCdmDetailElement class. - *

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

- * Constructor for AbstractCdmDetailElement. - *

- * - * @param formFactory - * a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory} - * object. - * @param formElement - * a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement} - * object. - * @param - * a T object. - */ public AbstractCdmDetailElement(CdmFormFactory formFactory, ICdmFormElement formElement) { super(formFactory, formElement); @@ -94,7 +85,7 @@ public abstract class AbstractCdmDetailElement extends AbstractCdmFormElement 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(StoreUtil.getCdmEntity(getEntity()).getId() == 0) { + if(getEntity() == null || StoreUtil.getCdmEntity(getEntity()).getId() == 0) { // new entity, not yet saved requiredCrud = EnumSet.of(CRUD.CREATE); } else { @@ -103,18 +94,6 @@ public abstract class AbstractCdmDetailElement extends AbstractCdmFormElement updateContent(); } - /* - * (non-Javadoc) - * - * @see eu.etaxonomy.taxeditor.forms.IEntityElement#getEntity() - */ - /** - *

- * Getter for the field entity. - *

- * - * @return a T object. - */ @Override public T getEntity() { return entity; @@ -125,20 +104,13 @@ public abstract class AbstractCdmDetailElement extends AbstractCdmFormElement */ protected void updateContent() { removeElements(); - createControls(this, entity, SWT.WRAP); - getLayoutComposite().layout(); + createControls(this, entity, SWT.NONE); + StoreUtil.reflowParentScrolledForm(getLayoutComposite(), true); updateControlStates(); } - /* - * (non-Javadoc) - * - * @see - * eu.etaxonomy.taxeditor.forms.ISelectableComposite#setSelected(boolean) - */ - /** {@inheritDoc} */ - @Override + @Override public void setSelected(boolean selected) { Composite section = getLayoutComposite().getParent(); section.setBackground(selected ? SELECTED : getPersistentBackground()); @@ -155,6 +127,7 @@ public abstract class AbstractCdmDetailElement extends AbstractCdmFormElement * 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; @@ -167,6 +140,11 @@ public abstract class AbstractCdmDetailElement extends AbstractCdmFormElement } } + @Override + public boolean isEnabled() { + return enabled; + } + /** *

* Setter for the field irrelevant. @@ -256,14 +234,13 @@ public abstract class AbstractCdmDetailElement extends AbstractCdmFormElement } protected void handleTitleCacheRelevantChange(PropertyChangeEvent event) { - boolean isRelevant = getEntity() instanceof TaxonNameBase + boolean isRelevant = getEntity() instanceof TaxonName || getEntity() instanceof TaxonBase; isRelevant &= this instanceof AbstractIdentifiableEntityDetailElement; if (isRelevant) { ((AbstractIdentifiableEntityDetailElement) this) .updateToggleableCacheField(); - updateParentSection(); } } @@ -271,6 +248,8 @@ public abstract class AbstractCdmDetailElement extends AbstractCdmFormElement if (getParentElement() instanceof AbstractCdmDetailSection) { ((AbstractCdmDetailSection) getParentElement()).updateTitle(); } + //NOTE: This slows down the rendering of the details view +// StoreUtil.reflowParentScrolledForm(getLayoutComposite(), true); } /** @@ -282,40 +261,15 @@ public abstract class AbstractCdmDetailElement extends AbstractCdmFormElement */ public abstract void handleEvent(Object eventSource); - /** - *

- * handleException - *

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

- * isIrrelevant - *

- * - * @return a boolean. - */ public boolean isIrrelevant() { return irrelevant; } - /** - *

- * getConversationHolder - *

- * - * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} - * object. - */ @Override public ConversationHolder getConversationHolder() { if (getParentElement() instanceof IConversationEnabled) { @@ -340,6 +294,44 @@ public abstract class AbstractCdmDetailElement extends AbstractCdmFormElement protected void updateControlStates(){ - setEnabled(getEntity() != null && CdmStore.currentAuthentiationHasPermission(StoreUtil.getCdmEntity(getEntity()), requiredCrud)); + 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); } + + public LabelElement getWarnForReferencedObjects() { + return warnForReferencedObjects; + } + + public void setWarnForReferencedObjects(LabelElement warnForReferencedObjects) { + this.warnForReferencedObjects = warnForReferencedObjects; + } + + public void setWarnForReferencingObjects(ICdmFormElement formElement){ + if (getEntity() instanceof CdmBase){ + CdmBase cdmBase = (CdmBase) getEntity(); + if (cdmBase.getId() != 0){ + long referencingObjectsCount = CdmStore.getCommonService().getReferencingObjectsCount(cdmBase); + + if (referencingObjectsCount > 1){ + setWarnForReferencedObjects(formFactory.createLabel(formElement, CdmUtils.Nz("The "+ cdmBase.getUserFriendlyTypeName()+" is referenced by " + referencingObjectsCount+ " objects, if you change it, it is changed for all these objects"))); + getWarnForReferencedObjects().setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_RED)); + getWarnForReferencedObjects().setLayout(LayoutConstants.FILL(2, 3)); + getWarnForReferencedObjects().setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_RED)); + + } + } + } + } + + public void setWarnForReferencingObjectsVisible(boolean isVisible){ + if (getWarnForReferencedObjects() != null){ + getWarnForReferencedObjects().setVisible(isVisible); + } + } + }