Project

General

Profile

« Previous | Next » 

Revision 202edbff

Added by Andreas Müller about 3 years ago

ref #9405 , ref #4944 refactor the cache protection indication handling in TaxEditor details view elements

View differences:

eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/model/ColorResources.java
52 52
	    registerColor(registry, Resources.COLOR_CONTROL_BACKGROUND, 220, 220, 220);
53 53
	    registerColor(registry, Resources.COLOR_CONTROL_SELECTED, 210, 210, 210);
54 54
	    registerColor(registry, Resources.COLOR_CONTROL_SELECTED_FOCUS, 232,242,254);
55
		registerColor(registry, Resources.COLOR_COMPOSITE_IRRELEVANT, 241,139,18);
56
		registerColor(registry, Resources.SEARCH_VIEW_FOREGROUND, 192, 192, 192);
55

  
56
	    //colors1 and 2 are computed as next neutral color from the combined color
57
	    //light colors are computed as second last color tints
58
	    //see https://htmlcolorcodes.com/color-picker/
59
		registerColor(registry, Resources.COLOR_COMPOSITE_IRRELEVANT1, 241,146,18);
60
		registerColor(registry, Resources.COLOR_COMPOSITE_IRRELEVANT1_LIGHT, 251, 228, 196);
61
        registerColor(registry, Resources.COLOR_COMPOSITE_IRRELEVANT2, 241, 202, 18);
62
        registerColor(registry, Resources.COLOR_COMPOSITE_IRRELEVANT2_LIGHT, 251, 242, 196);
63
        registerColor(registry, Resources.COLOR_COMPOSITE_IRRELEVANT1_2, 241, 90, 18);
64
        registerColor(registry, Resources.COLOR_COMPOSITE_IRRELEVANT1_2_LIGHT, 251, 214, 196);
65

  
66
        registerColor(registry, Resources.SEARCH_VIEW_FOREGROUND, 192, 192, 192);
57 67
		registerColor(registry, Resources.SEARCH_VIEW_FOCUS, 0, 0, 0);
58 68
		registerColor(registry, Resources.BLACK, 0, 0, 0);
59 69
		registerColor(registry, Resources.COLOR_LIST_BACKGROUND, 150,150,150);
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/Resources.java
59 59
	/** Constant <code>COLOR_COMPOSITE_BACKGROUND="eu.etaxonomy.taxeditor.preferences.colo"{trunked}</code> */
60 60
	public static final String COLOR_COMPOSITE_BACKGROUND = "eu.etaxonomy.taxeditor.preferences.colorDefinition.colorCompositeBackground";
61 61
	/** Constant <code>COLOR_COMPOSITE_IRRELEVANT="eu.etaxonomy.taxeditor.preferences.colo"{trunked}</code> */
62
	public static final String COLOR_COMPOSITE_IRRELEVANT = "eu.etaxonomy.taxeditor.preferences.colorDefinition.colorCompositeIrrelevant";
62
	public static final String COLOR_COMPOSITE_IRRELEVANT1 = "eu.etaxonomy.taxeditor.preferences.colorDefinition.colorCompositeIrrelevant1";
63
    public static final String COLOR_COMPOSITE_IRRELEVANT1_LIGHT = "eu.etaxonomy.taxeditor.preferences.colorDefinition.colorCompositeIrrelevant1_light";
64
	public static final String COLOR_COMPOSITE_IRRELEVANT2 = "eu.etaxonomy.taxeditor.preferences.colorDefinition.colorCompositeIrrelevant2";
65
    public static final String COLOR_COMPOSITE_IRRELEVANT2_LIGHT = "eu.etaxonomy.taxeditor.preferences.colorDefinition.colorCompositeIrrelevant2_light";
66
    public static final String COLOR_COMPOSITE_IRRELEVANT1_2 = "eu.etaxonomy.taxeditor.preferences.colorDefinition.colorCompositeIrrelevant1_2";
67
    public static final String COLOR_COMPOSITE_IRRELEVANT1_2_LIGHT = "eu.etaxonomy.taxeditor.preferences.colorDefinition.colorCompositeIrrelevant1_2_light";
63 68

  
64 69
	/** Constant <code>SEARCH_VIEW_FOREGROUND="eu.etaxonomy.taxeditor.preferences.colo"{trunked}</code> */
65 70
	public static final String SEARCH_VIEW_FOREGROUND = "eu.etaxonomy.taxeditor.preferences.colorDefinition.searchView.foreground";
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/combo/AbstractComboElement.java
27 27
import org.eclipse.ui.forms.widgets.TableWrapData;
28 28

  
29 29
import eu.etaxonomy.cdm.common.CdmUtils;
30
import eu.etaxonomy.taxeditor.model.AbstractUtility;
31 30
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
32
import eu.etaxonomy.taxeditor.preference.Resources;
33
import eu.etaxonomy.taxeditor.ui.element.AbstractCdmFormElement;
31
import eu.etaxonomy.taxeditor.ui.element.AbstractRelevanceFormElement;
34 32
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
35 33
import eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent;
36 34
import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
......
43 41
 * @date Aug 11, 2016
44 42
 */
45 43
public abstract class AbstractComboElement<T>
46
		extends AbstractCdmFormElement
44
		extends AbstractRelevanceFormElement
47 45
		implements SelectionListener, IEnableableFormElement,
48 46
			ISelectable, DisposeListener {
49 47

  
......
88 86
    }
89 87

  
90 88
    @Override
91
    public void setIrrelevant(boolean irrelevant) {
92
        String colorId = irrelevant ? Resources.COLOR_COMPOSITE_IRRELEVANT
93
                : Resources.COLOR_COMPOSITE_BACKGROUND;
94

  
95
        Color color = AbstractUtility.getColor(colorId);
89
    public void updateCacheRelevance() {
90
        Color color = cacheRelevance().getColor();
96 91
        combo.setBackground(color);
97 92
    }
98 93

  
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/AbstractRelevanceFormElement.java
1
/**
2
* Copyright (C) 2021 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9
package eu.etaxonomy.taxeditor.ui.element;
10

  
11
import org.eclipse.swt.widgets.Composite;
12

  
13
/**
14
 * @author a.mueller
15
 * @since 19.01.2021
16
 */
17
public abstract class AbstractRelevanceFormElement
18
        extends AbstractCdmFormElement
19
        implements ICacheRelevantFormElement {
20

  
21
    protected CacheRelevanceHelper cacheRelevanceHelper = new CacheRelevanceHelper();
22

  
23
    protected AbstractRelevanceFormElement(CdmFormFactory formFactory, Composite layoutComposite) {
24
        super(formFactory, layoutComposite);
25
    }
26

  
27
    public AbstractRelevanceFormElement(CdmFormFactory formFactory, ICdmFormElement formElement) {
28
        super(formFactory, formElement);
29
    }
30

  
31
    @Override
32
    public void addDependsOnCache(ToggleableTextElement toggleElement) {
33
        cacheRelevanceHelper.addDependsOnCache(toggleElement);
34
    }
35

  
36
    @Override
37
    public CacheRelevance cacheRelevance() {
38
        return cacheRelevanceHelper.cacheRelevance();
39
    }
40
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/CacheRelevance.java
1
/**
2
* Copyright (C) 2021 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9
package eu.etaxonomy.taxeditor.ui.element;
10

  
11
import org.eclipse.swt.graphics.Color;
12

  
13
import eu.etaxonomy.taxeditor.model.AbstractUtility;
14
import eu.etaxonomy.taxeditor.preference.Resources;
15

  
16
/**
17
 * @author a.mueller
18
 * @since 20.01.2021
19
 */
20
public enum CacheRelevance{
21
    CACHE1(Resources.COLOR_COMPOSITE_IRRELEVANT1, null),
22
    CACHE2(Resources.COLOR_COMPOSITE_IRRELEVANT2, null),
23

  
24
    CACHE1_2(Resources.COLOR_COMPOSITE_IRRELEVANT1_2, null),
25
    CACHE1_LIGHT(Resources.COLOR_COMPOSITE_IRRELEVANT1_LIGHT, CACHE1),
26
    CACHE2_LIGHT(Resources.COLOR_COMPOSITE_IRRELEVANT2_LIGHT, CACHE2),
27
    CACHE1_2_LIGHT(Resources.COLOR_COMPOSITE_IRRELEVANT1_2_LIGHT, CACHE1_2),
28
    NONE(Resources.COLOR_COMPOSITE_BACKGROUND, null),
29
    ;
30

  
31
    private final Color color;
32
    private CacheRelevance light;
33

  
34

  
35
    private CacheRelevance(String colorStr, CacheRelevance main){
36
        this.color = AbstractUtility.getColor(colorStr);
37
        light = this;
38
        if (main != null){
39
            main.light = this;
40
        }
41
    }
42

  
43
    public Color getColor() {
44
        return color;
45
    }
46
    public Color getColorLight() {
47
        return color;
48
    }
49

  
50
    public Color getColor(String alternativeColorForNone) {
51
        if (this == NONE){
52
            return AbstractUtility.getColor(alternativeColorForNone);
53
        }else{
54
            return color;
55
        }
56
    }
57

  
58
    public CacheRelevance addCacheRelevance(CacheRelevance that){
59
        if (this == CACHE1 && that == CACHE2 || this == CACHE2 && that == CACHE1){
60
            return CACHE1_2;
61
        } else if (this == CACHE1_LIGHT && that == CACHE2_LIGHT || this == CACHE2_LIGHT && that == CACHE1_LIGHT){
62
            return CACHE1_2_LIGHT;
63
        }else {
64
            return CacheRelevance.values()[Math.min(this.ordinal(), that.ordinal())];
65
        }
66
    }
67

  
68
    public CacheRelevance getLight(){
69
        return light;
70
    }
71

  
72
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/CacheRelevanceHelper.java
1
/**
2
* Copyright (C) 2021 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9
package eu.etaxonomy.taxeditor.ui.element;
10

  
11
import java.util.HashSet;
12
import java.util.Set;
13

  
14
/**
15
 * @author a.mueller
16
 * @date 22.01.2021
17
 */
18
public class CacheRelevanceHelper {
19

  
20
    protected Set<ToggleableTextElement> cacheDependencies = new HashSet<>();
21

  
22
    public CacheRelevance cacheRelevance() {
23
        CacheRelevance result = CacheRelevance.NONE;
24
        for (ToggleableTextElement cache : this.cacheDependencies){
25
            if (cache.getState()){
26
                result = result.addCacheRelevance(cache.getRelevance());
27
            }
28
            //add recursion for light dependencies
29
            result = result.addCacheRelevance(cache.cacheRelevance().getLight());
30
        }
31
        return result;
32
    }
33

  
34
    public void addDependsOnCache(ToggleableTextElement toggleElement) {
35
        cacheDependencies.add(toggleElement);
36
    }
37

  
38
    /**
39
     * For hierarchical caching
40
     */
41
    public ToggleableTextElement[] getDependenciesArray() {
42
        return this.cacheDependencies.toArray(new ToggleableTextElement[0]);
43
    }
44

  
45
    public static void addDependsOnCacheForSubElements(AbstractFormSection<?> section,
46
            ToggleableTextElement toggleElement) {
47
        section.getElements().stream()
48
            .filter(x -> x instanceof ICacheRelevantFormElement)
49
            .forEach(
50
                x->((ICacheRelevantFormElement)x).addDependsOnCache(toggleElement));
51
    }
52

  
53
    public static void updateCacheRelevanceForSubelements(AbstractFormSection<?> section) {
54
        updateCacheRelevanceForSubelements(section.getElements());
55
    }
56

  
57
    public static void updateCacheRelevanceForSubelements(Set<ICdmFormElement> elements) {
58
//        System.out.print("setIrrelevant: " + this.getClass().getName());
59
//        System.out.println("");
60
        elements.stream()
61
            .filter(x -> x instanceof ICacheRelevantFormElement)
62
            .forEach(
63
                    x->((ICacheRelevantFormElement)x).updateCacheRelevance());
64

  
65
    }
66

  
67

  
68
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/CdmFormFactory.java
1348 1348
    }
1349 1349

  
1350 1350
    /**
1351
     * createToggleableTextField
1351
     * createToggleableTextField with relevance
1352 1352
     */
1353 1353
    public ToggleableTextElement createToggleableTextField(ICdmFormElement parentElement, String labelString,
1354
            String initialText, boolean initialState, int style) {
1354
            String initialText, boolean initialState, CacheRelevance relevance, int style) {
1355 1355
        ToggleableTextElement element = new ToggleableTextElement(this, parentElement, labelString, initialText,
1356
                initialState, style | orientation);
1356
                initialState, relevance, style | orientation);
1357 1357

  
1358 1358
        adapt(element);
1359 1359
        parentElement.addElement(element);
1360 1360
        return element;
1361 1361
    }
1362 1362

  
1363
    /**
1364
     * like {@link #createToggleableTextField(ICdmFormElement, String, String, boolean, CacheRelevance, int)}
1365
     * but with predefined cache relevance == 1
1366
     */
1367
    public ToggleableTextElement createToggleableTextField(ICdmFormElement parentElement, String labelString,
1368
            String initialText, boolean initialState, int style) {
1369
        return createToggleableTextField(parentElement, labelString, initialText, initialState, CacheRelevance.CACHE1, style);
1370
    }
1371

  
1372

  
1363 1373
    /**
1364 1374
     * createTimePeriodElement
1365 1375
     */
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/CheckboxElement.java
16 16
import org.eclipse.swt.widgets.Label;
17 17
import org.eclipse.ui.forms.widgets.TableWrapData;
18 18

  
19
import eu.etaxonomy.taxeditor.preference.Resources;
20

  
21 19
/**
22 20
 * <p>CheckboxElement class.</p>
23 21
 *
24 22
 * @author n.hoffmann
25 23
 * @created Nov 5, 2009
26 24
 */
27
public class CheckboxElement extends AbstractCdmFormElement implements SelectionListener, IEnableableFormElement, ISelectable {
25
public class CheckboxElement
26
        extends AbstractRelevanceFormElement
27
        implements SelectionListener, IEnableableFormElement, ISelectable {
28 28

  
29 29
	private final Button checkbox;
30 30

  
......
101 101
	}
102 102

  
103 103
	@Override
104
    public void setIrrelevant(boolean irrelevant) {
105
		String colorId = irrelevant ? Resources.COLOR_COMPOSITE_IRRELEVANT : Resources.COLOR_COMPOSITE_BACKGROUND;
106

  
107
		Color color = getColor(colorId);
108
		setBackground(color);
104
    public void updateCacheRelevance() {
105
	    Color color = cacheRelevance().getColor();
106
		setCheckboxBackgroundOnly(color);
109 107
	}
110 108

  
109
    public void setCheckboxBackgroundOnly(Color color) {
110
        if (checkbox.isDisposed()){
111
            return;
112
        }
113
        checkbox.setBackground(color);
114
    }
115

  
111 116
	@Override
112 117
	public void setBackground(Color color) {
113
	    if (checkbox.isDisposed()){
114
	        return;
115
	    }
116
	    checkbox.setBackground(color);
117
		if (label != null) {
118
	    setCheckboxBackgroundOnly(color);
119
        if (label != null) {
118 120
            label.setBackground(color);
119 121
        }
120 122
	}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/DateDetailSection.java
19 19
import eu.etaxonomy.taxeditor.l10n.Messages;
20 20

  
21 21
public class DateDetailSection<T extends TimePeriod>
22
		extends AbstractFormSection<T> {
22
		extends AbstractFormSection<T>
23
        implements ICacheRelevantFormElement{
24

  
23 25
	protected TextWithLabelElement text_freeText;
24 26
	protected PartialElement partialElement_start;
25 27
	protected PartialElement partialElement_end;
......
221 223
    public void setText_parseText(TextWithLabelElement text_parseText) {
222 224
        this.text_parseText = text_parseText;
223 225
    }
224
}
226

  
227
    @Override
228
    public void updateCacheRelevance() {
229
        CacheRelevanceHelper.updateCacheRelevanceForSubelements(this);
230
    }
231

  
232
    @Override
233
    public void addDependsOnCache(ToggleableTextElement toggleElement) {
234
        CacheRelevanceHelper.addDependsOnCacheForSubElements(this, toggleElement);
235
    }
236

  
237
    @Override
238
    public CacheRelevance cacheRelevance() {
239
        return null;
240
    }
241
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/ICacheRelevantFormElement.java
1
/**
2
* Copyright (C) 2007 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9
package eu.etaxonomy.taxeditor.ui.element;
10

  
11
/**
12
 * IRelevantFormElement interface.
13
 *
14
 * @author n.hoffmann
15
 * @created May 10, 2010
16
 */
17
public interface ICacheRelevantFormElement {
18

  
19
	/**
20
	 * Update the relevance state of the element.
21
	 * Usually the results in a color change.
22
	 * Containers may sent this to their subelements.
23
	 */
24
	public void updateCacheRelevance();
25

  
26
	/**
27
	 * Registers this element as being dependend on the
28
	 * given cache element (ToggleableTextElement).
29
	 * An element may depend on multiple cache elements.
30
	 */
31
	public void addDependsOnCache(ToggleableTextElement toggleElement);
32

  
33
	/**
34
	 * Computes the cache relevance for this element.
35
	 * The cache relevance depends on the registered cache elements
36
	 * and on their state.
37
	 */
38
	public CacheRelevance cacheRelevance();
39

  
40
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/IEnableableFormElement.java
14 14
 * @author n.hoffmann
15 15
 * @created Mar 10, 2010
16 16
 */
17
public interface IEnableableFormElement extends IRelevantFormElement {
17
public interface IEnableableFormElement {
18 18

  
19 19
	/**
20 20
	 * Sets composites of this element to the given enablement state.
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/IRelevantFormElement.java
1
/**
2
* Copyright (C) 2007 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9
package eu.etaxonomy.taxeditor.ui.element;
10

  
11
/**
12
 * IRelevantFormElement interface.
13
 *
14
 * @author n.hoffmann
15
 * @created May 10, 2010
16
 */
17
public interface IRelevantFormElement {
18

  
19
	/**
20
	 * setIrrelevant
21
	 */
22
	public void setIrrelevant(boolean irrelevant);
23
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/TextWithLabelElement.java
22 22
/**
23 23
 * @author n.hoffmann
24 24
 */
25
public class TextWithLabelElement extends AbstractCdmFormElement implements ModifyListener, IEnableableFormElement,
26
        ISelectable {
25
public class TextWithLabelElement
26
        extends AbstractRelevanceFormElement
27
        implements ModifyListener, IEnableableFormElement, ISelectable {
27 28

  
28 29
    protected Text text;
29 30
    private Label label;
......
200 201

  
201 202

  
202 203
    @Override
203
    public void setIrrelevant(boolean irrelevant) {
204
        String colorId = irrelevant ? Resources.COLOR_COMPOSITE_IRRELEVANT : Resources.COLOR_COMPOSITE_BACKGROUND;
205

  
206
        Color color = getColor(colorId);
204
    public void updateCacheRelevance() {
205
        Color color = cacheRelevance().getColor();
207 206
        text.setBackground(color);
208 207
    }
209 208

  
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/TimePeriodElementBase.java
15 15
import eu.etaxonomy.cdm.model.common.TimePeriod;
16 16

  
17 17
public abstract class TimePeriodElementBase<T extends TimePeriod>
18
		extends AbstractCdmFormElement
18
		extends AbstractRelevanceFormElement
19 19
		implements ISelectable {
20 20

  
21 21
    protected T timePeriod;
......
93 93
		label.setText(string);
94 94
	}
95 95

  
96
}
96
    @Override
97
    public void updateCacheRelevance() {
98
        if (section_dateDetails != null){
99
            section_dateDetails.updateCacheRelevance();
100
        }
101
    }
102

  
103
    @Override
104
    public void addDependsOnCache(ToggleableTextElement cacheElement) {
105
        if (section_dateDetails != null){
106
            section_dateDetails.addDependsOnCache(cacheElement);
107
        }
108
    }
109
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/ToggleableTextElement.java
36 36
 * @author n.hoffmann
37 37
 * @created Nov 18, 2009
38 38
 */
39
public class ToggleableTextElement extends AbstractCdmFormElement implements SelectionListener, ModifyListener, IEnableableFormElement, ISelectable {
39
public class ToggleableTextElement
40
        extends AbstractRelevanceFormElement
41
        implements SelectionListener, ModifyListener, IEnableableFormElement, ISelectable {
40 42

  
41 43
	private final Text text_cache;
42 44
	private final Button btnToggleProtectTitleCache;
......
44 46
	private final Set<SelectionListener> selectionListener = new HashSet<>();
45 47
	private final Label label;
46 48
	private final Composite container;
49
	private final CacheRelevance relevance;
47 50

  
48 51
	//TODO for RL
49 52
	public void setVisible(boolean b) {
......
54 57
	}
55 58

  
56 59
	protected ToggleableTextElement(CdmFormFactory formFactory, ICdmFormElement parentElement,
57
			String labelString, String initialText, boolean initialState, int style) {
60
			String labelString, String initialText, boolean initialState,
61
			CacheRelevance relevance, int style) {
58 62
		super(formFactory, parentElement);
59 63

  
60 64
		label = formFactory.createLabel(getLayoutComposite(), labelString, style);
......
86 90
		addControl(btnToggleProtectTitleCache);
87 91
		btnToggleProtectTitleCache.addSelectionListener(this);
88 92

  
93
		this.relevance = relevance;
89 94
		setState(initialState);
90 95
	}
91 96

  
......
135 140
	    return text_cache.isEnabled();
136 141
	}
137 142

  
143
    public CacheRelevance getRelevance() {
144
        return this.relevance;
145
    }
146

  
138 147
	public boolean getState(){
139 148
		return state;
140 149
	}
......
169 178
	}
170 179

  
171 180
	@Override
172
    public void setIrrelevant(boolean irrelevant) {
173
		String colorId = irrelevant ? Resources.COLOR_COMPOSITE_IRRELEVANT : Resources.COLOR_COMPOSITE_BACKGROUND;
174

  
175
		Color color = getColor(colorId);
181
    public void updateCacheRelevance() {
182
		Color color = cacheRelevance().getColor();
176 183
		text_cache.setBackground(color);
177 184
	}
178 185

  
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/mvc/combo/EnumTermComboController.java
27 27
import eu.etaxonomy.cdm.model.reference.ReferenceType;
28 28
import eu.etaxonomy.cdm.model.term.IEnumTerm;
29 29
import eu.etaxonomy.taxeditor.model.AbstractUtility;
30
import eu.etaxonomy.taxeditor.preference.Resources;
31
import eu.etaxonomy.taxeditor.store.StoreUtil;
32
import eu.etaxonomy.taxeditor.ui.element.AbstractCdmFormElement;
30
import eu.etaxonomy.taxeditor.ui.element.AbstractRelevanceFormElement;
33 31
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
34 32
import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
35 33
import eu.etaxonomy.taxeditor.ui.element.IEnableableFormElement;
......
40 38
 * @author pplitzner
41 39
 * @date 29.01.2014
42 40
 */
43
public class EnumTermComboController<T extends IEnumTerm<T>> 
44
		extends AbstractCdmFormElement 
41
public class EnumTermComboController<T extends IEnumTerm<T>>
42
		extends AbstractRelevanceFormElement
45 43
		implements SelectionListener, IEnableableFormElement, ISelectable, CdmCompositeController {
46 44

  
47 45
    private static CdmEnumDataHolder<?>[] cdmEnumDataHolders = {
......
209 207
    }
210 208

  
211 209
    @Override
212
    public void setIrrelevant(boolean irrelevant) {
213
        String colorId = irrelevant ? Resources.COLOR_COMPOSITE_IRRELEVANT
214
                : Resources.COLOR_COMPOSITE_BACKGROUND;
215

  
216
        Color color = AbstractUtility.getColor(colorId);
210
    public void updateCacheRelevance() {
211
        Color color = cacheRelevance().getColor();
217 212
        combo.setBackground(color);
218 213
    }
219 214

  
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/mvc/element/DateElement.java
27 27
import org.joda.time.DateTimeZone;
28 28

  
29 29
import eu.etaxonomy.taxeditor.model.ImageResources;
30
import eu.etaxonomy.taxeditor.ui.element.CacheRelevance;
31
import eu.etaxonomy.taxeditor.ui.element.CacheRelevanceHelper;
30 32
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
33
import eu.etaxonomy.taxeditor.ui.element.ICacheRelevantFormElement;
31 34
import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
35
import eu.etaxonomy.taxeditor.ui.element.ToggleableTextElement;
32 36
import eu.etaxonomy.taxeditor.ui.mvc.AbstractCdmComposite;
33 37

  
34 38
/**
35 39
 * @author pplitzner
36 40
 * @date 16.06.2014
37 41
 */
38
public class DateElement extends AbstractCdmComposite<DateElementController>  {
42
public class DateElement
43
        extends AbstractCdmComposite<DateElementController>
44
        implements ICacheRelevantFormElement {
45

  
46
    private static final String pattern = "yyyy-MM-dd HH:mm";
39 47

  
40 48
    private final FormToolkit toolkit = new FormToolkit(Display.getCurrent());
41 49
    private org.joda.time.DateTime initialDateTime;
42 50
    private final Text textDate;
43 51
    private final Button openDateDialog;
44 52

  
45
    private static final String pattern = "yyyy-MM-dd HH:mm";
46

  
53
    protected CacheRelevanceHelper cacheRelevanceHelper = new CacheRelevanceHelper();
47 54

  
48 55
    /**
49 56
     * Create the composite.
......
173 180
			this.textDate.setText(initialDateTime.toString(pattern));
174 181
	}
175 182

  
176
}
183
    @Override
184
    public void updateCacheRelevance() {
185
        textDate.setBackground(cacheRelevance().getColor());
186
    }
187

  
188
    @Override
189
    public void addDependsOnCache(ToggleableTextElement cacheElement) {
190
        cacheRelevanceHelper.addDependsOnCache(cacheElement);
191
    }
192

  
193
    @Override
194
    public CacheRelevance cacheRelevance() {
195
        return cacheRelevanceHelper.cacheRelevance();
196
    }
197
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/mvc/element/DateElementController.java
13 13
import org.eclipse.swt.widgets.Text;
14 14
import org.joda.time.DateTime;
15 15

  
16
import eu.etaxonomy.taxeditor.ui.element.AbstractCdmFormElement;
16
import eu.etaxonomy.taxeditor.ui.element.AbstractRelevanceFormElement;
17 17
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
18 18
import eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent;
19 19
import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
......
24 24
 * @author pplitzner
25 25
 * @date 16.06.2014
26 26
 */
27
public class DateElementController extends AbstractCdmFormElement implements IEnableableFormElement, CdmCompositeController, ModifyListener{
27
public class DateElementController
28
        extends AbstractRelevanceFormElement
29
        implements IEnableableFormElement, CdmCompositeController, ModifyListener {
28 30

  
29 31
    private final Text textDate;
30 32
    private DateTime dateTime;
......
70 72
       dateTime = date;
71 73
    }
72 74

  
73
    @Override
74
    public void setIrrelevant(boolean irrelevant) {
75
        // TODO Auto-generated method stub
76
    }
77

  
78 75
    @Override
79 76
    public void setEnabled(boolean enabled) {
80 77
        textDate.setEnabled(enabled);
......
84 81
    public boolean isEnabled() {
85 82
        return textDate.isEnabled();
86 83
    }
84

  
85
    @Override
86
    public void updateCacheRelevance() {
87
        System.out.println("updateCacheRelevance not yet implemented for " + this.getClass().getName());
88
    }
87 89
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/mvc/element/TextWithLabelElementController.java
19 19

  
20 20
import eu.etaxonomy.taxeditor.preference.Resources;
21 21
import eu.etaxonomy.taxeditor.store.StoreUtil;
22
import eu.etaxonomy.taxeditor.ui.element.AbstractCdmFormElement;
22
import eu.etaxonomy.taxeditor.ui.element.AbstractRelevanceFormElement;
23 23
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
24 24
import eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent;
25 25
import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
......
33 33
 * @author n.hoffmann
34 34
 */
35 35
public class TextWithLabelElementController
36
        extends AbstractCdmFormElement
36
        extends AbstractRelevanceFormElement
37 37
        implements ModifyListener, IEnableableFormElement, ISelectable, CdmCompositeController {
38 38

  
39 39
    protected Text text;
......
117 117
    }
118 118

  
119 119
    @Override
120
    public void setIrrelevant(boolean irrelevant) {
121
        String colorId = irrelevant ? Resources.COLOR_COMPOSITE_IRRELEVANT : Resources.COLOR_COMPOSITE_BACKGROUND;
122

  
123
        Color color = getColor(colorId);
120
    public void updateCacheRelevance() {
121
        Color color = cacheRelevance().getColor();
124 122
        text.setBackground(color);
125 123
    }
126 124

  
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/AbstractCdmDetailElement.java
33 33
import eu.etaxonomy.taxeditor.store.CdmStore;
34 34
import eu.etaxonomy.taxeditor.store.LoginManager;
35 35
import eu.etaxonomy.taxeditor.store.StoreUtil;
36
import eu.etaxonomy.taxeditor.ui.element.AbstractCdmFormElement;
36
import eu.etaxonomy.taxeditor.ui.element.AbstractRelevanceFormElement;
37
import eu.etaxonomy.taxeditor.ui.element.CacheRelevance;
38
import eu.etaxonomy.taxeditor.ui.element.CacheRelevanceHelper;
37 39
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
38 40
import eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent;
41
import eu.etaxonomy.taxeditor.ui.element.ICacheRelevantFormElement;
39 42
import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
40 43
import eu.etaxonomy.taxeditor.ui.element.IEnableableFormElement;
41 44
import eu.etaxonomy.taxeditor.ui.element.LabelElement;
42 45
import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
46
import eu.etaxonomy.taxeditor.ui.element.ToggleableTextElement;
43 47

  
44 48
/**
45 49
 * @author n.hoffmann
46 50
 * @created Feb 26, 2010
47 51
 */
48 52
public abstract class AbstractCdmDetailElement<T>
49
		extends AbstractCdmFormElement
53
		extends AbstractRelevanceFormElement
50 54
		implements ICdmDetailElement<T>, Observer{
51 55

  
52 56
	private T entity;
53 57

  
54
	private boolean irrelevant;
55

  
56 58
	protected boolean enabled = true;
57 59

  
58 60
	private LabelElement warnForReferencedObjects;
......
142 144
    }
143 145

  
144 146
    @Override
145
    public void setIrrelevant(boolean irrelevant) {
146
        this.irrelevant = irrelevant;
147
        setIrrelevant(irrelevant, null);
147
    public CacheRelevance cacheRelevance() {
148
        return cacheRelevanceHelper.cacheRelevance();
149
    }
150

  
151
    @Override
152
    public void addDependsOnCache(ToggleableTextElement toggleElement) {
153
        cacheRelevanceHelper.addDependsOnCache(toggleElement);
154
    }
155

  
156
    protected void registerCacheRelevance(ICacheRelevantFormElement element, ToggleableTextElement... toggleableCaches) {
157
        if (element != null && toggleableCaches != null) {
158
             for (ToggleableTextElement toggleableCache : toggleableCaches){
159
                 element.addDependsOnCache(toggleableCache);
160
             }
161
        }
162
//        updateCacheRelevance();
148 163
    }
149 164

  
150 165
	/**
151
	 * <p>
152
	 * Setter for the field <code>irrelevant</code>.
153
	 * </p>
154
	 *
155
	 * @param irrelevant
156
	 *            a boolean.
157
	 * @param except
158
	 *            a {@link java.util.Collection} object.
166
	 * Updates the cache relevance state of all internal elements of this
167
	 * AbstractCdmDetailElement.
159 168
	 */
160
	public void setIrrelevant(boolean irrelevant, Collection<Object> except) {
161
		// logger.warn("Setting " + this.getClass().getSimpleName() +
162
		// " to irrelevant state: " + irrelevant);
163
		for (ICdmFormElement element : getElements()) {
164
			if (element instanceof IEnableableFormElement) {
165
				IEnableableFormElement relevantElement = (IEnableableFormElement) element;
166
				if (except != null && except.contains(relevantElement)) {
167
					// do nothing
168
					// logger.warn("not setting elements irrelevance: " +
169
					// relevantElement.getClass().getSimpleName() + " in :" +
170
					// this.getClass().getSimpleName());
171
				} else {
172
					relevantElement.setIrrelevant(irrelevant);
173
				}
174
			}
175
		}
169
	@Override
170
    public void updateCacheRelevance(){
171
	    CacheRelevanceHelper.updateCacheRelevanceForSubelements(getElements());
176 172
	}
177 173

  
178 174
	/**
......
240 236
		MessagingUtils.error(event.getSource().getClass(), event.getException());
241 237
	}
242 238

  
243
	public boolean isIrrelevant() {
244
		return irrelevant;
245
	}
246

  
247 239
	@Override
248 240
    public ConversationHolder getConversationHolder() {
249 241
		if (getParentElement() instanceof IConversationEnabled) {
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/AbstractCdmDetailSection.java
54 54
 */
55 55
public abstract class AbstractCdmDetailSection<ENTITY>
56 56
			extends AbstractFormSection<ENTITY>
57
			implements IEnableableFormElement, IExpansionListener {
57
			implements IEnableableFormElement, IExpansionListener, ICacheRelevantFormElement {
58 58

  
59 59
	protected AbstractCdmDetailElement<ENTITY> detailElement;
60 60

  
......
213 213
	}
214 214

  
215 215
    @Override
216
    public void setIrrelevant(boolean irrelevant) {
216
    public void updateCacheRelevance() {
217 217
        if (detailElement != null) {
218
            detailElement.setIrrelevant(irrelevant);
218
            detailElement.updateCacheRelevance();
219 219
        }
220 220
    }
221 221

  
222
    @Override
223
    public void addDependsOnCache(ToggleableTextElement toggleElement) {
224
        if (detailElement != null) {
225
            detailElement.addDependsOnCache(toggleElement);
226
        }
227
    }
228

  
229
    @Override
230
    public CacheRelevance cacheRelevance() {
231
        return detailElement.cacheRelevance();
232
    }
233

  
222 234
    @Override
223 235
    public void expansionStateChanging(ExpansionEvent e) {
224 236
		// logger.warn("Expansion State Changing");
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/AbstractIdentifiableEntityDetailElement.java
8 8
*/
9 9
package eu.etaxonomy.taxeditor.ui.section;
10 10

  
11
import java.util.Arrays;
12 11
import java.util.EnumSet;
13 12

  
14 13
import eu.etaxonomy.cdm.model.common.CdmBase;
......
16 15
import eu.etaxonomy.cdm.model.permission.CRUD;
17 16
import eu.etaxonomy.taxeditor.store.CdmStore;
18 17
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
18
import eu.etaxonomy.taxeditor.ui.element.ICacheRelevantFormElement;
19 19
import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
20 20
import eu.etaxonomy.taxeditor.ui.element.ToggleableTextElement;
21 21

  
......
42 42
    }
43 43

  
44 44
    protected void handleToggleableCacheField() {
45
        boolean pushedState = toggleable_cache.getState();
46

  
47
        getEntity().setTitleCache(toggleable_cache.getText(), pushedState);
48
        setIrrelevant(pushedState, Arrays.asList(new Object[] { toggleable_cache }));
45
        getEntity().setTitleCache(toggleable_cache.getText(), toggleable_cache.getState());
46
        updateCacheRelevance();
49 47
        updateToggleableCacheField();
50 48
    }
51 49

  
......
60 58
            toggleable_cache.setEnabled(getEntity() != null && CdmStore.currentAuthentiationHasPermission((CdmBase) getEntity(), UPDATE));
61 59
        }
62 60
    }
61

  
62
    protected void registerCacheRelevance(ICacheRelevantFormElement element) {
63
        registerCacheRelevance(element, toggleable_cache);
64
    }
63 65
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/agent/PersonDetailElement.java
8 8
 */
9 9
package eu.etaxonomy.taxeditor.ui.section.agent;
10 10

  
11
import java.util.Arrays;
12
import java.util.Collection;
13

  
14 11
import org.eclipse.swt.SWT;
15 12

  
16 13
import eu.etaxonomy.cdm.model.agent.Person;
......
40 37
	private TimePeriodElement time_lifespan;
41 38
	private OrcidWithLabelElement text_orcid;
42 39
    private LsidWithExceptionLabelElement text_lsid;
43
	private Collection<Object> excludeFromIrrelevantToggleableObjects;
44 40

  
45 41
	public PersonDetailElement(CdmFormFactory cdmFormFactory,
46 42
			ICdmFormElement formElement, int style) {
......
70 66
		text_orcid = formFactory.createOrcidWithLabelElement(formElement, "ORCID", entity.getOrcid(), SWT.NULL);
71 67
		text_lsid = formFactory.createLsidWithExceptionLabelElement(formElement, "LSID", entity.getLsid(), SWT.NULL);
72 68
		getLayoutComposite().layout();
69

  
70
	    //cache relevance
71
        registerCacheRelevance(text_firstname);
72
        registerCacheRelevance(text_lastname);
73
        registerCacheRelevance(text_prefix);
74
        registerCacheRelevance(text_suffix);
75
        registerCacheRelevance(text_initials);
73 76
	}
74 77

  
75 78
	@Override
76 79
	protected void updateContent() {
77 80
		super.updateContent();
78

  
79
		excludeFromIrrelevantToggleableObjects = Arrays.asList(new Object[] {
80
				toggleable_cache, text_nomenclaturalTitle });
81

  
82 81
		toggleable_cache.setEnabled(getEntity().isProtectedTitleCache());
83
		setIrrelevant(toggleable_cache.getState(),
84
				excludeFromIrrelevantToggleableObjects);
82
		updateCacheRelevance();
85 83
	}
86 84

  
87 85
	@Override
......
124 122
        if (pushedState){
125 123
            getEntity().setTitleCache(toggleable_cache.getText(), pushedState);
126 124
        }
127
        setIrrelevant(pushedState, Arrays.asList(new Object[] { toggleable_cache, text_nomenclaturalTitle }));
125
        updateCacheRelevance();
128 126
        updateToggleableCacheField();
129 127
    }
130 128
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/agent/TeamDetailElement.java
8 8
 */
9 9
package eu.etaxonomy.taxeditor.ui.section.agent;
10 10

  
11
import java.util.Arrays;
12

  
13 11
import eu.etaxonomy.cdm.model.agent.Team;
14 12
import eu.etaxonomy.taxeditor.store.StoreUtil;
13
import eu.etaxonomy.taxeditor.ui.element.CacheRelevance;
15 14
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
16 15
import eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent;
17 16
import eu.etaxonomy.taxeditor.ui.element.CheckboxElement;
......
26 25
 * @author n.hoffmann
27 26
 * @created Apr 26, 2010
28 27
 */
29
public class TeamDetailElement extends AbstractIdentifiableEntityDetailElement<Team> {
28
public class TeamDetailElement
29
        extends AbstractIdentifiableEntityDetailElement<Team> {
30 30

  
31 31
	private ToggleableTextElement toggleable_nomenclaturalTitleCache;
32 32
	private CheckboxElement hasAdditionalMembers;
......
47 47
    protected void createControls(ICdmFormElement formElement, Team entity, int style) {
48 48

  
49 49
    	setWarnForReferencingObjects(formElement);
50
        toggleable_cache = formFactory.createToggleableTextField(formElement, "Title Cache", entity.getTitleCache(), entity.isProtectedTitleCache(), style);
51
        toggleable_nomenclaturalTitleCache = formFactory.createToggleableTextField(formElement, "Abbrev. Title", entity.getNomenclaturalTitle(), entity.isProtectedNomenclaturalTitleCache(), style);
50
        toggleable_cache = formFactory.createToggleableTextField(formElement, "Title Cache",
51
                entity.getTitleCache(), entity.isProtectedTitleCache(), style);
52
        toggleable_nomenclaturalTitleCache = formFactory.createToggleableTextField(formElement,
53
                "Abbrev. Title", entity.getNomenclaturalTitle(), entity.isProtectedNomenclaturalTitleCache(),
54
                CacheRelevance.CACHE2, style);
52 55
        hasAdditionalMembers = formFactory.createCheckbox(formElement, "Additional Members", entity.isHasMoreMembers(), style);
53 56
        section_teamMembers = formFactory.createTeamMemberSection(getConversationHolder(), formElement, StoreUtil.getSectionStyle(TeamMemberSection.class, entity.getClass().getCanonicalName(), true), isNomenclaturalTeam);
54 57
        section_teamMembers.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
58

  
59
        //cache relevance
60
        //TODO
61
//        registerCacheRelevance(toggleable_nomenclaturalTitleCache);
62
        registerCacheRelevance(hasAdditionalMembers, toggleable_cache, toggleable_nomenclaturalTitleCache);
63
        registerCacheRelevance(section_teamMembers, toggleable_cache, toggleable_nomenclaturalTitleCache);
55 64
    }
56 65

  
57 66
	@Override
......
64 73
		    toggleable_nomenclaturalTitleCache.setEnabled(getEntity()
65 74
				.isProtectedNomenclaturalTitleCache());
66 75
		}
67
		if (toggleable_nomenclaturalTitleCache != null && toggleable_cache != null){
68
    		setIrrelevant(
69
    				toggleable_cache.getState(),
70
    				Arrays.asList(new Object[] { toggleable_cache,
71
    						toggleable_nomenclaturalTitleCache , hasAdditionalMembers}));
72
		} else if (toggleable_cache != null){
73
		    setIrrelevant(
74
                    toggleable_cache.getState(),
75
                    Arrays.asList(new Object[] { toggleable_cache, hasAdditionalMembers}));
76
		}
77

  
78 76
		section_teamMembers.setEntity(getEntity());
77

  
78
		updateCacheRelevance();
79 79
	}
80 80

  
81 81
	@Override
......
85 85

  
86 86
		} else if (eventSource == toggleable_nomenclaturalTitleCache) {
87 87
			updateToggleable_nomanclaturalTitleCacheField();
88
			setIrrelevant(
89
					toggleable_nomenclaturalTitleCache.getState(),
90
					Arrays.asList(new Object[] { toggleable_nomenclaturalTitleCache, hasAdditionalMembers }));
88
			updateCacheRelevance();
91 89
		} else if (eventSource == section_teamMembers) {
92 90
			toggleable_cache.setText(getEntity().getTitleCache());
93 91
			toggleable_nomenclaturalTitleCache.setText(getEntity()
......
106 104
		 boolean pushedState = toggleable_nomenclaturalTitleCache.getState();
107 105

  
108 106
	        getEntity().setNomenclaturalTitle(toggleable_nomenclaturalTitleCache.getText(), pushedState);
109
	        setIrrelevant(pushedState, Arrays.asList(new Object[] { toggleable_cache }));
107
	        updateCacheRelevance();
110 108

  
111 109
        if (!getEntity().isProtectedNomenclaturalTitleCache()) {
112 110
            toggleable_nomenclaturalTitleCache.setText(getEntity().getNomenclaturalTitle());
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/agent/TeamMemberSection.java
12 12
import java.util.Comparator;
13 13
import java.util.List;
14 14

  
15
import org.eclipse.swt.graphics.Color;
16

  
15 17
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
16 18
import eu.etaxonomy.cdm.model.agent.Person;
17 19
import eu.etaxonomy.cdm.model.agent.Team;
18 20
import eu.etaxonomy.taxeditor.ui.element.CacheRelevance;
21
import eu.etaxonomy.taxeditor.ui.element.CacheRelevanceHelper;
19 22
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
20 23
import eu.etaxonomy.taxeditor.ui.element.ICacheRelevantFormElement;
21 24
import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
......
29 32
 * @created Apr 30, 2010
30 33
 */
31 34
public class TeamMemberSection
32
        extends AbstractUnboundEntityCollectionSection<Team, Person> {
35
        extends AbstractUnboundEntityCollectionSection<Team, Person>
36
        implements ICacheRelevantFormElement {
33 37

  
34 38
    private boolean isNomenclaturalTeam = false;
35 39

  
40
    private CacheRelevanceHelper cacheRelevanceHelper = new CacheRelevanceHelper();
41

  
36 42
	/**
37 43
	 * <p>Constructor for TeamMemberSection.</p>
38 44
	 *
......
118 124
    public boolean allowAddExisting() {
119 125
        return false;
120 126
    }
127

  
128
    @Override
129
    public void updateCacheRelevance() {
130
        Color color = cacheRelevance().getColor();
131
        setBackground(color);
132
    }
133

  
134
    @Override
135
    public void addDependsOnCache(ToggleableTextElement toggleElement) {
136
        cacheRelevanceHelper.addDependsOnCache(toggleElement);
137
    }
138

  
139
    @Override
140
    public CacheRelevance cacheRelevance() {
141
        return cacheRelevanceHelper.cacheRelevance();
142
    }
121 143
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/description/DescriptionDetailElement.java
8 8
*/
9 9
package eu.etaxonomy.taxeditor.ui.section.description;
10 10

  
11
import java.util.Arrays;
12 11
import java.util.stream.Collectors;
13 12

  
14 13
import org.eclipse.jface.util.PropertyChangeEvent;
......
26 25
 * @author n.hoffmann
27 26
 * @created Mar 5, 2010
28 27
 */
29
public class DescriptionDetailElement extends AbstractIdentifiableEntityDetailElement<DescriptionBase<?>> {
28
public class DescriptionDetailElement
29
        extends AbstractIdentifiableEntityDetailElement<DescriptionBase<?>> {
30 30

  
31 31
//	private EntitySelectionElement<FeatureTree> selection_featureTree;
32 32
    private TextWithLabelElement txtDescriptionTypes;
......
38 38

  
39 39
	@Override
40 40
	protected void createControls(ICdmFormElement formElement, DescriptionBase entity, int style) {
41
        toggleable_cache = formFactory.createToggleableTextField(this, "Label", entity.getTitleCache(), entity.isProtectedTitleCache(), style);
41
        toggleable_cache = formFactory.createToggleableTextField(this, "Label",
42
                entity.getTitleCache(), entity.isProtectedTitleCache(), style);
42 43
		// TODO I initially thought that we can handle the entity's descriptive system with a feature tree
43 44
		// Since descriptiveSystem is a Set of Features that are present or allowed for the current description,
44 45
		// it is similar to a FeatureTree (you can get this information from a feature tree) but not the same.
......
56 57
    protected void updateContent() {
57 58
        super.updateContent();
58 59
        toggleable_cache.setEnabled(getEntity().isProtectedTitleCache());
59
        setIrrelevant(toggleable_cache.getState(),
60
                Arrays.asList(new Object[] { txtDescriptionTypes, toggleable_cache}));
60
        updateCacheRelevance();
61 61
    }
62 62

  
63 63
    @Override
......
73 73
	public void handleEvent(Object eventSource) {
74 74
        if (eventSource == toggleable_cache) {
75 75
            getEntity().setTitleCache(toggleable_cache.getText(), toggleable_cache.getState());
76
            setIrrelevant(toggleable_cache.getState(), Arrays.asList(new Object[] { toggleable_cache }));
76
            updateCacheRelevance();
77 77
        }
78 78
	}
79 79
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/name/AuthorshipDetailElement.java
8 8
 */
9 9
package eu.etaxonomy.taxeditor.ui.section.name;
10 10

  
11
import java.util.Arrays;
12

  
13 11
import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
14 12
import eu.etaxonomy.cdm.model.name.INonViralName;
15 13
import eu.etaxonomy.cdm.model.name.IZoologicalName;
......
23 21
import eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent;
24 22
import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
25 23
import eu.etaxonomy.taxeditor.ui.element.NumberWithLabelElement;
24
import eu.etaxonomy.taxeditor.ui.element.ToggleableTextElement;
26 25
import eu.etaxonomy.taxeditor.ui.section.AbstractIdentifiableEntityDetailElement;
27 26
import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;
28 27

  
......
94 93
    		        EntitySelectionElement.DELETABLE | EntitySelectionElement.SELECTABLE | EntitySelectionElement.EDITABLE, style);
95 94

  
96 95
    		addElement(selectionExBasionymAuthor);
97
    		if (code != null){
98
    	        if (code.equals(NomenclaturalCode.ICZN)){
99
	                text_originalPublicationYear = formFactory.createFloatTextWithLabelElement(formElement, "Orig. Publication Year", ((IZoologicalName)entity).getOriginalPublicationYear(), style);
100
	            }
96
    		if (code != null && code.equals(NomenclaturalCode.ICZN)){
97
    		    text_originalPublicationYear = formFactory.createFloatTextWithLabelElement(formElement, "Orig. Publication Year", ((IZoologicalName)entity).getOriginalPublicationYear(), style);
101 98
    	    }
102 99
	    }
100

  
101
	    //put to Cache
102
	    registerCacheRelevance(selectionCombinationAuthor);
103
        registerCacheRelevance(selectionBasionymAuthor);
104
        registerCacheRelevance(selectionExCombinationAuthor);
105
        registerCacheRelevance(selectionExBasionymAuthor);
106
        registerCacheRelevance(text_publicationYear);
107
        registerCacheRelevance(text_originalPublicationYear);
108

  
109
        registerCacheRelevance(toggleable_cache, cacheRelevanceHelper.getDependenciesArray());
110

  
103 111
	}
104 112

  
113
    @Override
114
    public void addDependsOnCache(ToggleableTextElement toggleElement) {
115
        super.addDependsOnCache(toggleElement);
116
        //register my cache on higher cache (if not null yet)
117
        registerCacheRelevance(toggleable_cache, toggleElement);
118
    }
119

  
105 120
    @Override
106 121
	public void updateContent() {
107 122
		if (getEntity() == null) {
......
111 126
		super.updateContent();
112 127
		if (toggleable_cache != null){
113 128
    		toggleable_cache.setEnabled(getEntity().isProtectedAuthorshipCache());
114

  
115
    		if (this.isIrrelevant()) {
116
    			setIrrelevant(isIrrelevant());
117
    		} else {
118
    			setIrrelevant(toggleable_cache.getState(),
119
    					Arrays.asList(new Object[] { toggleable_cache }));
120
    		}
129
    		updateCacheRelevance();
121 130
		}
122 131
	}
123 132

  
......
126 135
		if (eventSource == toggleable_cache) {
127 136
			getEntity().setAuthorshipCache(toggleable_cache.getText(),
128 137
					toggleable_cache.getState());
129
			if (!isIrrelevant()){
130
				setIrrelevant(toggleable_cache.getState(),
131
						Arrays.asList(new Object[] { toggleable_cache }));
132
			}
138
			updateCacheRelevance();
133 139
		} else if (eventSource == selectionCombinationAuthor) {
134 140
			getEntity().setCombinationAuthorship(
135 141
					selectionCombinationAuthor.getSelection());
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/name/HybridDetailElement.java
54 54
		checkboxTrinomHybrid.setEnabled(enableTrinom);
55 55
		checkboxHybridFormula = formFactory.createCheckbox(formElement, "Hybrid formula", entity.isHybridFormula(), style);
56 56
		checkboxHybridFormula.setEnabled(false);//read-only
57

  
58
        registerCacheRelevance(checkboxMonomHybrid, cacheRelevanceHelper.getDependenciesArray());
59
        registerCacheRelevance(checkboxBinomHybrid, cacheRelevanceHelper.getDependenciesArray());
60
        registerCacheRelevance(checkboxTrinomHybrid, cacheRelevanceHelper.getDependenciesArray());
61
        registerCacheRelevance(checkboxHybridFormula, cacheRelevanceHelper.getDependenciesArray());
62

  
57 63
	}
58 64

  
59 65
	@Override
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/name/NameDetailElement.java
8 8
*/
9 9
package eu.etaxonomy.taxeditor.ui.section.name;
10 10

  
11
import java.util.Arrays;
12
import java.util.Collection;
13 11
import java.util.Comparator;
14 12

  
15 13
import org.apache.log4j.Logger;
......
32 30
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
33 31
import eu.etaxonomy.taxeditor.ui.element.CheckboxElement;
34 32
import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
35
import eu.etaxonomy.taxeditor.ui.element.IEnableableFormElement;
36 33
import eu.etaxonomy.taxeditor.ui.element.ISelectableElement;
37 34
import eu.etaxonomy.taxeditor.ui.element.SelectionArbitrator;
38 35
import eu.etaxonomy.taxeditor.ui.element.TextWithLabelElement;
......
44 41
 * @author n.hoffmann
45 42
 * @created Feb 26, 2010
46 43
 */
47
public class NameDetailElement extends AbstractIdentifiableEntityDetailElement<INonViralName> implements ISelectableElement, IEnableableFormElement{
44
public class NameDetailElement
45
        extends AbstractIdentifiableEntityDetailElement<INonViralName>
46
        implements ISelectableElement {
48 47

  
49 48
    private final Logger logger = Logger.getLogger(NameDetailElement.class);
50 49

  
......
125 124
	    for (ICdmFormElement element: this.getElements()){
126 125
	        element.setBackground(getPersistentBackground());
127 126
	    }
127

  
128
	    //cache relevance
129
        registerCacheRelevance(combo_rank);
130
        //TODO decide if relevant
131
        registerCacheRelevance(text_appendedPhrase);
132
        registerCacheRelevance(text_uninomial);
133
        registerCacheRelevance(text_infragenericEpithet);
134
        registerCacheRelevance(text_specificEpithet);
135
        registerCacheRelevance(text_infraspecificEpithet);
136
        registerCacheRelevance(text_cultivarName);
137
        registerCacheRelevance(text_subGenusAuthorship);
138
        registerCacheRelevance(text_breed);
139

  
140
        registerCacheRelevance(toggleable_cache, cacheRelevanceHelper.getDependenciesArray());
128 141
	}
129 142

  
130 143
    /**
......
151 164
		    toggleable_cache.setEnabled(getEntity().isProtectedNameCache());
152 165

  
153 166
    		if (config == null){
154
        		if(isIrrelevant()){
155
        			setIrrelevant(isIrrelevant());
156
        		}else{
157
        			setIrrelevant(toggleable_cache.getState(), Arrays.asList(new Object[]{toggleable_cache}));
158
        		}
167
    			updateCacheRelevance();
159 168
    		}
160 169
		}
161 170
	}
......
258 267
		if (eventSource == toggleable_cache) {
259 268
			getEntity().setNameCache(toggleable_cache.getText(),
260 269
					toggleable_cache.getState());
261
			//if (!isIrrelevant()) {
262
                setIrrelevant(toggleable_cache.getState(),
263
						Arrays.asList(new Object[] { toggleable_cache }));
264
            //}
270
                updateCacheRelevance();
265 271
		}
266 272
		else if(eventSource == combo_rank){
267 273
			getEntity().setRank(combo_rank.getSelection());
......
315 321

  
316 322
	@Override
317 323
	protected void handleToggleableCacheField() {
318
        boolean pushedState = toggleable_cache.getState();
319

  
320
        getEntity().setTitleCache(toggleable_cache.getText(), pushedState);
321
        setIrrelevant(pushedState, Arrays.asList(new Object[] { toggleable_cache, text_appendedPhrase, checkbox_anamorphic }));
324
        getEntity().setTitleCache(toggleable_cache.getText(), toggleable_cache.getState());
325
        updateCacheRelevance();
322 326
        updateToggleableCacheField();
323 327
    }
324

  
325
	@Override
326
	public void setIrrelevant(boolean irrelevant, Collection<Object> except){
327
	    if (toggleable_cache != null){
328
    	    if (toggleable_cache.getState() == irrelevant){
329
    	        super.setIrrelevant(irrelevant, except);
330
    	    }
331
    	    if (except == null || except.isEmpty()){
332
    	        toggleable_cache.setIrrelevant(irrelevant);
333
    	    }
334
	    }
335
	}
336 328
}
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/name/NonViralNameDetailElement.java
8 8
 */
9 9
package eu.etaxonomy.taxeditor.ui.section.name;
10 10

  
11
import java.util.Arrays;
12

  
13 11
import eu.etaxonomy.cdm.model.name.IBacterialName;
14 12
import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
15 13
import eu.etaxonomy.cdm.model.name.TaxonName;
......
93 91
    	   section_hybrid.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
94 92
    	   addControl(section_hybrid);
95 93
    	   addElement(section_hybrid);
96
    	 }
94
    	}
95

  
96
	    //cache relevance
97
	    registerCacheRelevance(section_name);
98
	    registerCacheRelevance(section_author);
99
	    registerCacheRelevance(combo_nomenclaturalCode);
100
	    registerCacheRelevance(section_hybrid);
97 101
    }
98 102

  
99 103
	@Override
......
102 106

  
103 107
		if(toggleable_cache != null){
104 108
		    toggleable_cache.setEnabled(getEntity().isProtectedTitleCache() || getEntity().isProtectedFullTitleCache());
105
		    setIrrelevant(toggleable_cache.getState(),
106
		            Arrays.asList(new Object[] { toggleable_cache, textLsid, text_nameApprobation }));
109
		    updateCacheRelevance();
107 110
		}
108 111
	}
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff