diff options
Diffstat (limited to 'propertysheet/src/org/eclipse/wb/internal/core/model/property/editor/AbstractListPropertyEditor.java')
-rw-r--r-- | propertysheet/src/org/eclipse/wb/internal/core/model/property/editor/AbstractListPropertyEditor.java | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/propertysheet/src/org/eclipse/wb/internal/core/model/property/editor/AbstractListPropertyEditor.java b/propertysheet/src/org/eclipse/wb/internal/core/model/property/editor/AbstractListPropertyEditor.java new file mode 100644 index 0000000..ba34103 --- /dev/null +++ b/propertysheet/src/org/eclipse/wb/internal/core/model/property/editor/AbstractListPropertyEditor.java @@ -0,0 +1,173 @@ +/******************************************************************************* + * Copyright (c) 2011 Google, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Google, Inc. - initial API and implementation + *******************************************************************************/ +package org.eclipse.wb.internal.core.model.property.editor; + +import org.eclipse.wb.core.controls.CCombo3; +import org.eclipse.wb.internal.core.model.property.Property; +import org.eclipse.wb.internal.core.utils.check.Assert; + +import java.util.List; +import java.util.Map; + +/** + * The {@link PropertyEditor} for selecting single expression from given set. + * + * @author sablin_aa + * @coverage core.model.property.editor + */ +public abstract class AbstractListPropertyEditor extends AbstractComboPropertyEditor + implements + IValueSourcePropertyEditor { + //////////////////////////////////////////////////////////////////////////// + // + // TextDisplayPropertyEditor + // + //////////////////////////////////////////////////////////////////////////// + @Override + public String getText(Property property) throws Exception { + // return title for value + Object value = property.getValue(); + if (value != Property.UNKNOWN_VALUE) { + int index = getValueIndex(value); + if (index >= 0) { + return getTitle(index); + } else { + if (value instanceof String) { + return (String) value; + } + } + } + // unknown value + return null; + } + + //////////////////////////////////////////////////////////////////////////// + // + // IValueSourcePropertyEditor + // + //////////////////////////////////////////////////////////////////////////// + @Override +public String getValueSource(Object value) throws Exception { + // return expression for value + if (value != Property.UNKNOWN_VALUE) { + int index = getValueIndex(value); + if (index >= 0) { + return getExpression(index); + } + } + // unknown value + return null; + } + +// //////////////////////////////////////////////////////////////////////////// +// // +// // IClipboardSourceProvider +// // +// //////////////////////////////////////////////////////////////////////////// +// @Override +//public String getClipboardSource(GenericProperty property) throws Exception { +// Object value = property.getValue(); +// return getValueSource(value); +// } + + //////////////////////////////////////////////////////////////////////////// + // + // Combo + // + //////////////////////////////////////////////////////////////////////////// + @Override + protected void addItems(Property property, CCombo3 combo) throws Exception { + for (int i = 0; i < getCount(); i++) { + combo.add(getTitle(i)); + } + } + + @Override + protected void selectItem(Property property, CCombo3 combo) throws Exception { + combo.setText(getText(property)); + } + + @Override + protected void toPropertyEx(Property property, CCombo3 combo, int index) throws Exception { +// if (property instanceof GenericProperty) { +// GenericProperty genericProperty = (GenericProperty) property; +// String expression = getExpression(index); +// Object evaluatedExpression = evaluateExpression(genericProperty, expression); +// // apply expression +// genericProperty.setExpression(expression, evaluatedExpression); +// } else { + toPropertyEx_simpleProperty(property, combo, index); +// } + } + +// private static Object evaluateExpression(final GenericProperty genericProperty, +// final String expression) { +// return ExecutionUtils.runObjectIgnore(new RunnableObjectEx<Object>() { +// public Object runObject() throws Exception { +// JavaInfo javaInfo = genericProperty.getJavaInfo(); +// ClassLoader classLoader = JavaInfoUtils.getClassLoader(javaInfo); +// return ScriptUtils.evaluate(classLoader, expression); +// } +// }, Property.UNKNOWN_VALUE); +// System.out.println("HACK 1234"); +// return Property.UNKNOWN_VALUE; +// } + + /** + * Sets value of simple {@link Property}, not {@link GenericProperty}. + */ + protected void toPropertyEx_simpleProperty(Property property, CCombo3 combo, int index) + throws Exception { + } + + //////////////////////////////////////////////////////////////////////////// + // + // Access to list items + // + //////////////////////////////////////////////////////////////////////////// + abstract protected int getCount(); + + abstract protected int getValueIndex(Object value); + + abstract protected String getTitle(int index); + + abstract protected String getExpression(int index) throws Exception; + + //////////////////////////////////////////////////////////////////////////// + // + // Utils + // + //////////////////////////////////////////////////////////////////////////// + /** + * Extract string array from parameters. + */ + protected static String[] getParameterAsArray(Map<String, Object> parameters, String name) { + return getParameterAsArray(parameters, name, false); + } + + @SuppressWarnings("unchecked") + protected static String[] getParameterAsArray(Map<String, Object> parameters, + String name, + boolean noAssert) { + String[] values = null; + if (parameters.containsKey(name)) { + List<String> list = (List<String>) parameters.get(name); + values = list.toArray(new String[list.size()]); + } else { + if (noAssert) { + values = null; + } else { + Assert.fail(String.format("No parameter %s in %s.", name, parameters)); + } + } + return values; + } +}
\ No newline at end of file |