* 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 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<T> extends AbstractCdmFormElement implements ICdmDetailElement<T>, Observer {
+public abstract class AbstractCdmDetailElement<T>
+ extends AbstractRelevanceFormElement
+ implements ICdmDetailElement<T>, Observer{
private T entity;
- private boolean irrelevant;
+ protected boolean enabled = true;
- private boolean enabled;
-
private LabelElement warnForReferencedObjects;
- private EnumSet<CRUD> requiredCrud = null;
+ protected EnumSet<CRUD> requiredCrud = null;
public AbstractCdmDetailElement(CdmFormFactory formFactory,
ICdmFormElement formElement) {
/**
* 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 {
*/
protected void updateContent() {
removeElements();
- createControls(this, entity, SWT.WRAP);
- reflowParentScrolledForm(true);
-
+ createControls(this, entity, SWT.NONE);
updateControlStates();
}
/**
* 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;
return enabled;
}
- /**
- * <p>
- * Setter for the field <code>irrelevant</code>.
- * </p>
- *
- * @param irrelevant
- * a boolean.
- * @param except
- * a {@link java.util.Collection} object.
- */
- 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);
- }
- }
- }
- }
-
- /** {@inheritDoc} */
- @Override
+ @Override
public void setEnabled(boolean enabled) {
- setEnabled(enabled, null);
- }
+ setEnabled(enabled, null);
+ }
+
+ @Override
+ public CacheRelevance cacheRelevance() {
+ return cacheRelevanceHelper.cacheRelevance();
+ }
- /** {@inheritDoc} */
+ @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) {
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()) {
isRelevant &= this instanceof AbstractIdentifiableEntityDetailElement;
if (isRelevant) {
- ((AbstractIdentifiableEntityDetailElement) this)
- .updateToggleableCacheField();
- updateParentSection();
+ ((AbstractIdentifiableEntityDetailElement<?>)this).updateToggleableCacheField();
}
}
private void updateParentSection() {
if (getParentElement() instanceof AbstractCdmDetailSection) {
- ((AbstractCdmDetailSection) getParentElement()).updateTitle();
+ ((AbstractCdmDetailSection<?>) getParentElement()).updateTitle();
}
- reflowParentScrolledForm(true);
+ //NOTE: This slows down the rendering of the details view
+// StoreUtil.reflowParentScrolledForm(getLayoutComposite(), true);
}
/**
* 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);
MessagingUtils.error(event.getSource().getClass(), event.getException());
}
- public boolean isIrrelevant() {
- return irrelevant;
- }
-
@Override
public ConversationHolder getConversationHolder() {
if (getParentElement() instanceof IConversationEnabled) {
"Parent element should be IConversationEnabled");
}
- /** {@inheritDoc} */
@Override
public void update(CdmDataChangeMap changeEvents) {
}
}
}
-
protected void updateControlStates(){
Collection<Object> except = new ArrayList<Object>();
for(ICdmFormElement formElement:getElements()){
except.add(formElement);
}
}
- setEnabled(getEntity() != null && CdmStore.currentAuthentiationHasPermission(StoreUtil.getCdmEntity(getEntity()), requiredCrud), except);
+ if (getEntity() != null && getEntity() instanceof CdmBase){
+ enabled = CdmStore.currentAuthentiationHasPermission(StoreUtil.getCdmEntity(getEntity()), requiredCrud);
+ }else{
+ enabled = true;
+ }
+ setEnabled(enabled, except);
}
public LabelElement getWarnForReferencedObjects() {
public void setWarnForReferencedObjects(LabelElement warnForReferencedObjects) {
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);
-
- if (referencingObjectsCount > 1){
- setWarnForReferencedObjects(formFactory.createLabel(formElement, CdmUtils.Nz("The reference is referenced by " + referencingObjectsCount+ " objects, if you change it, it is changed for all these objects")));
+ long referencingObjectsCount = CdmStore.getCommonService().getReferencingObjectsCount(cdmBase);
+
+ 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