1 /*******************************************************************************
\r
2 * Copyright (c) 2007, 2010 Association for Decentralized Information Management
\r
3 * in Industry THTH ry.
\r
4 * All rights reserved. This program and the accompanying materials
\r
5 * are made available under the terms of the Eclipse Public License v1.0
\r
6 * which accompanies this distribution, and is available at
\r
7 * http://www.eclipse.org/legal/epl-v10.html
\r
10 * VTT Technical Research Centre of Finland - initial API and implementation
\r
11 *******************************************************************************/
\r
12 package org.simantics.browsing.ui.common.modifiers;
\r
14 import java.util.ArrayList;
\r
15 import java.util.List;
\r
17 import org.simantics.browsing.ui.content.Labeler.EnumerationModifier;
\r
20 * A trivial EnumerationModifier base implementation
\r
22 * @author Tuukka Lehtonen
\r
24 public abstract class AbstractEnumerationModifier<T> implements EnumerationModifier {
\r
26 private final Enumeration<T> enumeration;
\r
27 private final EnumeratedValue<T> value;
\r
28 private final List<String> values;
\r
30 public AbstractEnumerationModifier(Enumeration<T> enumeration, EnumeratedValue<T> value) {
\r
31 assert enumeration != null;
\r
32 assert enumeration.size() > 0;
\r
34 this.enumeration = enumeration;
\r
37 this.values = new ArrayList<String>(enumeration.size());
\r
38 for (EnumeratedValue<T> v : enumeration.values())
\r
39 values.add(v.getName());
\r
43 public final List<String> getValues() {
\r
48 public final String getValue() {
\r
50 return value.getName();
\r
51 return enumeration.values().get(0).getName();
\r
55 public final String isValid(String label) {
\r
56 if (!values.contains(label))
\r
57 return "Value '" + label + "' is not among the enumerated values " + values;
\r
62 public final void modify(String label) {
\r
63 int index = values.indexOf(label);
\r
65 throw new IllegalArgumentException("Cannot modify enumeration with value '" + label + "', not among the enumerated values " + values);
\r
66 modifyWithValue(value, enumeration.values().get(index));
\r
69 protected void modifyWithValue(EnumeratedValue<T> oldEnumValue, EnumeratedValue<T> enumValue) {
\r
70 T oldObject = oldEnumValue != null ? oldEnumValue.getObject() : null;
\r
71 T newObject = enumValue != null ? enumValue.getObject() : null;
\r
72 modifyWithObject(oldObject, newObject);
\r
76 * At least implement this if you don't override
\r
77 * {@link #modifyWithValue(EnumeratedValue, EnumeratedValue)}.
\r
79 * @param oldEnumObject
\r
82 protected void modifyWithObject(T oldEnumObject, T enumObject) {
\r