X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/blobdiff_plain/f36d24517060321b9f99cb1a6936ae8c6774fbbf..a55062d356f6605f414d3a35972e45a6ea0b12bf:/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 436c9d845..8c30439a9 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 @@ -6,10 +6,8 @@ * 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; @@ -17,8 +15,6 @@ 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.swt.widgets.Display; @@ -27,37 +23,40 @@ import eu.etaxonomy.cdm.api.conversation.IConversationEnabled; 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.permission.CRUD; 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.AbstractRelevanceFormElement; +import eu.etaxonomy.taxeditor.ui.element.CacheRelevance; +import eu.etaxonomy.taxeditor.ui.element.CacheRelevanceHelper; import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory; import eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent; +import eu.etaxonomy.taxeditor.ui.element.ICacheRelevantFormElement; 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; +import eu.etaxonomy.taxeditor.ui.element.ToggleableTextElement; /** - * * @author n.hoffmann * @created Feb 26, 2010 */ -public abstract class AbstractCdmDetailElement extends AbstractCdmFormElement implements ICdmDetailElement, Observer, IEnableableFormElement{ +public abstract class AbstractCdmDetailElement + extends AbstractRelevanceFormElement + implements ICdmDetailElement, Observer{ private T entity; - private boolean irrelevant; - - private boolean enabled = true; + protected boolean enabled = true; private LabelElement warnForReferencedObjects; - private EnumSet requiredCrud = null; + protected EnumSet requiredCrud = null; public AbstractCdmDetailElement(CdmFormFactory formFactory, ICdmFormElement formElement) { @@ -66,26 +65,18 @@ public abstract class AbstractCdmDetailElement extends AbstractCdmFormElement formFactory.addPropertyChangeListener(this); CdmStore.getLoginManager().addObserver(this); - getLayoutComposite().getParent().addDisposeListener(new DisposeListener() { - - @Override - public void widgetDisposed(DisposeEvent e) { - CdmStore.getLoginManager().deleteObserver(AbstractCdmDetailElement.this); - } - }); + getLayoutComposite().getParent().addDisposeListener( + e -> CdmStore.getLoginManager().deleteObserver(AbstractCdmDetailElement.this)); } /** * Sets the entity and updates controls - * - * @param entity - * a T object. */ @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) { + if(getEntity() == null || (getEntity() instanceof CdmBase && StoreUtil.getCdmEntity(getEntity()).getId() == 0)) { // new entity, not yet saved requiredCrud = EnumSet.of(CRUD.CREATE); } else { @@ -94,6 +85,17 @@ public abstract class AbstractCdmDetailElement extends AbstractCdmFormElement updateContent(); } + public void setEntityWithoutUpdate(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 || (getEntity() instanceof CdmBase && StoreUtil.getCdmEntity(getEntity()).getId() == 0)) { + // new entity, not yet saved + requiredCrud = EnumSet.of(CRUD.CREATE); + } else { + requiredCrud = EnumSet.of(CRUD.UPDATE); + } + } + @Override public T getEntity() { return entity; @@ -104,9 +106,7 @@ public abstract class AbstractCdmDetailElement extends AbstractCdmFormElement */ protected void updateContent() { removeElements(); - createControls(this, entity, SWT.WRAP); - StoreUtil.reflowParentScrolledForm(getLayoutComposite(), true); - + createControls(this, entity, SWT.NONE); updateControlStates(); } @@ -118,13 +118,9 @@ public abstract class AbstractCdmDetailElement extends AbstractCdmFormElement /** * Sets all field to the given enablement state except the objects in - * collection except + * the collection except parameter. * * @see eu.etaxonomy.taxeditor.ui.element.IEnableableFormElement#setEnabled(boolean) - * @param enabled - * a boolean. - * @param except - * a {@link java.util.Collection} object. */ public void setEnabled(boolean enabled, Collection except) { this.enabled = enabled; @@ -145,62 +141,47 @@ public abstract class AbstractCdmDetailElement extends AbstractCdmFormElement return enabled; } - /** - *

- * Setter for the field irrelevant. - *

- * - * @param irrelevant - * a boolean. - * @param except - * a {@link java.util.Collection} object. - */ - public void setIrrelevant(boolean irrelevant, Collection except) { - // logger.warn("Setting " + this.getClass().getSimpleName() + - // " to irrelevant state: " + irrelevant); - for (ICdmFormElement element : getElements()) { - if (element instanceof IEnableableFormElement) { - IEnableableFormElement relevantElement = (IEnableableFormElement) element; - if (except != null && except.contains(relevantElement)) { - // do nothing - // logger.warn("not setting elements irrelevance: " + - // relevantElement.getClass().getSimpleName() + " in :" + - // this.getClass().getSimpleName()); - } else { - relevantElement.setIrrelevant(irrelevant); - } - } - } - } - - /** {@inheritDoc} */ - @Override + @Override public void setEnabled(boolean enabled) { - setEnabled(enabled, null); - } + setEnabled(enabled, null); + } - /** {@inheritDoc} */ + @Override + public CacheRelevance cacheRelevance() { + return cacheRelevanceHelper.cacheRelevance(); + } + + @Override + public void addDependsOnCache(ToggleableTextElement toggleElement) { + cacheRelevanceHelper.addDependsOnCache(toggleElement); + } + + protected void registerCacheRelevance(ICacheRelevantFormElement element, ToggleableTextElement... toggleableCaches) { + if (element != null && toggleableCaches != null) { + for (ToggleableTextElement toggleableCache : toggleableCaches){ + if (toggleableCache != null){ + element.addDependsOnCache(toggleableCache); + } + } + } +// updateCacheRelevance(); + } + + /** + * Updates the cache relevance state of all internal elements of this + * AbstractCdmDetailElement. + */ @Override - public void setIrrelevant(boolean irrelevant) { - this.irrelevant = irrelevant; - setIrrelevant(irrelevant, null); + public void updateCacheRelevance(){ + CacheRelevanceHelper.updateCacheRelevanceForSubelements(getElements()); } /** * Create all content elements - * - * @param formElement - * a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement} - * object. - * @param entity - * a T object. - * @param style - * a int. */ protected abstract void createControls(ICdmFormElement formElement, T entity, int style); - /** {@inheritDoc} */ @Override public void propertyChange(PropertyChangeEvent event) { if (event == null) { @@ -213,9 +194,7 @@ public abstract class AbstractCdmDetailElement extends AbstractCdmFormElement if (eventSource instanceof ICdmFormElement) { ICdmFormElement eventElement = (ICdmFormElement) eventSource; - ICdmFormElement eventElementContainer = eventElement - .getParentElement(); - + ICdmFormElement eventElementContainer = eventElement.getParentElement(); if (eventElementContainer == this) { if (event instanceof CdmPropertyChangeEvent) { if (((CdmPropertyChangeEvent) event).hasException()) { @@ -239,14 +218,13 @@ public abstract class AbstractCdmDetailElement extends AbstractCdmFormElement isRelevant &= this instanceof AbstractIdentifiableEntityDetailElement; if (isRelevant) { - ((AbstractIdentifiableEntityDetailElement) this) - .updateToggleableCacheField(); + ((AbstractIdentifiableEntityDetailElement)this).updateToggleableCacheField(); } } private void updateParentSection() { if (getParentElement() instanceof AbstractCdmDetailSection) { - ((AbstractCdmDetailSection) getParentElement()).updateTitle(); + ((AbstractCdmDetailSection) getParentElement()).updateTitle(); } //NOTE: This slows down the rendering of the details view // StoreUtil.reflowParentScrolledForm(getLayoutComposite(), true); @@ -255,9 +233,6 @@ public abstract class AbstractCdmDetailElement extends AbstractCdmFormElement /** * Gets called when the source of the event is a child widget of this * widget. - * - * @param eventSource - * a {@link java.lang.Object} object. */ public abstract void handleEvent(Object eventSource); @@ -266,10 +241,6 @@ public abstract class AbstractCdmDetailElement extends AbstractCdmFormElement MessagingUtils.error(event.getSource().getClass(), event.getException()); } - public boolean isIrrelevant() { - return irrelevant; - } - @Override public ConversationHolder getConversationHolder() { if (getParentElement() instanceof IConversationEnabled) { @@ -280,7 +251,6 @@ public abstract class AbstractCdmDetailElement extends AbstractCdmFormElement "Parent element should be IConversationEnabled"); } - /** {@inheritDoc} */ @Override public void update(CdmDataChangeMap changeEvents) { } @@ -292,15 +262,13 @@ public abstract class AbstractCdmDetailElement extends AbstractCdmFormElement } } - protected void updateControlStates(){ - Collection except = new ArrayList(); - for(ICdmFormElement formElement:getElements()){ - if(formElement instanceof IEnableableFormElement && !((IEnableableFormElement) formElement).isEnabled()){ - except.add(formElement); - } + if (getEntity() != null && getEntity() instanceof CdmBase){ + enabled = enabled && CdmStore.currentAuthentiationHasPermission(StoreUtil.getCdmEntity(getEntity()), requiredCrud); + }else{ + enabled = true; } - setEnabled(getEntity() != null && CdmStore.currentAuthentiationHasPermission(StoreUtil.getCdmEntity(getEntity()), requiredCrud), except); + setEnabled(enabled); } public LabelElement getWarnForReferencedObjects() { @@ -311,27 +279,30 @@ public abstract class AbstractCdmDetailElement extends AbstractCdmFormElement this.warnForReferencedObjects = warnForReferencedObjects; } - public void setWarnForReferencingObjects(ICdmFormElement formElement){ + public void setWarnForReferencingObjects(ICdmFormElement formElement, int defaultReferencingObjects){ if (getEntity() instanceof CdmBase){ CdmBase cdmBase = (CdmBase) getEntity(); if (cdmBase.getId() != 0){ - Integer referencingObjectsCount = CdmStore.getCommonService().getReferencingObjectsCount(cdmBase); + long referencingObjectsCount = CdmStore.getCommonService().getReferencingObjectsCount(cdmBase); - if (referencingObjectsCount > 1){ + if (referencingObjectsCount > defaultReferencingObjects){ 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)); - + formFactory.createLabel(formElement, ""); } } } } + public void setWarnForReferencingObjects(ICdmFormElement formElement){ + setWarnForReferencingObjects(formElement, 1); + } + public void setWarnForReferencingObjectsVisible(boolean isVisible){ if (getWarnForReferencedObjects() != null){ getWarnForReferencedObjects().setVisible(isVisible); } } - -} +} \ No newline at end of file