*/
package eu.etaxonomy.taxeditor.ui.section;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.EnumSet;
import java.util.Observable;
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;
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<T>
- extends AbstractCdmFormElement
+ extends AbstractRelevanceFormElement
implements ICdmDetailElement<T>, Observer{
private T entity;
- private boolean irrelevant;
-
protected boolean enabled = true;
private LabelElement warnForReferencedObjects;
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));
}
/**
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;
/**
* 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<Object> except) {
this.enabled = enabled;
}
@Override
- public void setIrrelevant(boolean irrelevant) {
- this.irrelevant = irrelevant;
- setIrrelevant(irrelevant, null);
+ 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();
}
/**
- * <p>
- * Setter for the field <code>irrelevant</code>.
- * </p>
- *
- * @param irrelevant
- * a boolean.
- * @param except
- * a {@link java.util.Collection} object.
+ * Updates the cache relevance state of all internal elements of this
+ * AbstractCdmDetailElement.
*/
- public void setIrrelevant(boolean irrelevant, Collection<Object> 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);
- }
- }
- }
+ @Override
+ public void updateCacheRelevance(){
+ CacheRelevanceHelper.updateCacheRelevanceForSubelements(getElements());
}
/**
MessagingUtils.error(event.getSource().getClass(), event.getException());
}
- public boolean isIrrelevant() {
- return irrelevant;
- }
-
@Override
public ConversationHolder getConversationHolder() {
if (getParentElement() instanceof IConversationEnabled) {
}
protected void updateControlStates(){
- Collection<Object> except = new ArrayList<Object>();
- for(ICdmFormElement formElement:getElements()){
- if(formElement instanceof IEnableableFormElement && !((IEnableableFormElement) formElement).isEnabled()){
- except.add(formElement);
- }
- }
if (getEntity() != null && getEntity() instanceof CdmBase){
- enabled = CdmStore.currentAuthentiationHasPermission(StoreUtil.getCdmEntity(getEntity()), requiredCrud);
+ enabled = enabled && CdmStore.currentAuthentiationHasPermission(StoreUtil.getCdmEntity(getEntity()), requiredCrud);
}else{
enabled = true;
}
- setEnabled(enabled, except);
+ setEnabled(enabled);
}
public LabelElement getWarnForReferencedObjects() {
getWarnForReferencedObjects().setLayout(LayoutConstants.FILL(2, 3));
getWarnForReferencedObjects().setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
formFactory.createLabel(formElement, "");
-
}
}
}
getWarnForReferencedObjects().setVisible(isVisible);
}
}
-
-}
+}
\ No newline at end of file