1765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye/******************************************************************************* 2765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Copyright (c) 2011 Google, Inc. 3765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * All rights reserved. This program and the accompanying materials 4765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * are made available under the terms of the Eclipse Public License v1.0 5765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * which accompanies this distribution, and is available at 6765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * http://www.eclipse.org/legal/epl-v10.html 7765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * 8765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Contributors: 9765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Google, Inc. - initial API and implementation 10765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye *******************************************************************************/ 11765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyepackage org.eclipse.wb.internal.core.model.property.editor; 12765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 13765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.wb.core.controls.CCombo3; 14765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.wb.internal.core.model.property.Property; 15765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.wb.internal.core.utils.check.Assert; 16765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 17765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport java.util.List; 18765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport java.util.Map; 19765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 20765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye/** 21765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * The {@link PropertyEditor} for selecting single expression from given set. 22765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * 23765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * @author sablin_aa 24765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * @coverage core.model.property.editor 25765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 26765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyepublic abstract class AbstractListPropertyEditor extends AbstractComboPropertyEditor 27765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye implements 28765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye IValueSourcePropertyEditor { 29765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 30765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 31765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // TextDisplayPropertyEditor 32765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 33765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 34765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye @Override 35765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public String getText(Property property) throws Exception { 36765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // return title for value 37765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye Object value = property.getValue(); 38765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (value != Property.UNKNOWN_VALUE) { 39765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye int index = getValueIndex(value); 40765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (index >= 0) { 41765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return getTitle(index); 42765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } else { 43765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (value instanceof String) { 44765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return (String) value; 45765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 46765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 47765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 48765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // unknown value 49765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return null; 50765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 51765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 52765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 53765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 54765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // IValueSourcePropertyEditor 55765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 56765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 57765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye @Override 58765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyepublic String getValueSource(Object value) throws Exception { 59765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // return expression for value 60765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (value != Property.UNKNOWN_VALUE) { 61765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye int index = getValueIndex(value); 62765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (index >= 0) { 63765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return getExpression(index); 64765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 65765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 66765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // unknown value 67765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return null; 68765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 69765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 70765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye// //////////////////////////////////////////////////////////////////////////// 71765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye// // 72765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye// // IClipboardSourceProvider 73765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye// // 74765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye// //////////////////////////////////////////////////////////////////////////// 75765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye// @Override 76765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye//public String getClipboardSource(GenericProperty property) throws Exception { 77765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye// Object value = property.getValue(); 78765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye// return getValueSource(value); 79765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye// } 80765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 81765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 82765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 83765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // Combo 84765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 85765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 86765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye @Override 87765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye protected void addItems(Property property, CCombo3 combo) throws Exception { 88765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye for (int i = 0; i < getCount(); i++) { 89765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye combo.add(getTitle(i)); 90765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 91765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 92765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 93765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye @Override 94765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye protected void selectItem(Property property, CCombo3 combo) throws Exception { 95765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye combo.setText(getText(property)); 96765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 97765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 98765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye @Override 99765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye protected void toPropertyEx(Property property, CCombo3 combo, int index) throws Exception { 100765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye// if (property instanceof GenericProperty) { 101765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye// GenericProperty genericProperty = (GenericProperty) property; 102765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye// String expression = getExpression(index); 103765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye// Object evaluatedExpression = evaluateExpression(genericProperty, expression); 104765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye// // apply expression 105765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye// genericProperty.setExpression(expression, evaluatedExpression); 106765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye// } else { 107765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye toPropertyEx_simpleProperty(property, combo, index); 108765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye// } 109765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 110765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 111765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye// private static Object evaluateExpression(final GenericProperty genericProperty, 112765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye// final String expression) { 113765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye// return ExecutionUtils.runObjectIgnore(new RunnableObjectEx<Object>() { 114765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye// public Object runObject() throws Exception { 115765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye// JavaInfo javaInfo = genericProperty.getJavaInfo(); 116765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye// ClassLoader classLoader = JavaInfoUtils.getClassLoader(javaInfo); 117765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye// return ScriptUtils.evaluate(classLoader, expression); 118765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye// } 119765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye// }, Property.UNKNOWN_VALUE); 120765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye// System.out.println("HACK 1234"); 121765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye// return Property.UNKNOWN_VALUE; 122765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye// } 123765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 124765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 125765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Sets value of simple {@link Property}, not {@link GenericProperty}. 126765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 127765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye protected void toPropertyEx_simpleProperty(Property property, CCombo3 combo, int index) 128765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye throws Exception { 129765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 130765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 131765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 132765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 133765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // Access to list items 134765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 135765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 136765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye abstract protected int getCount(); 137765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 138765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye abstract protected int getValueIndex(Object value); 139765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 140765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye abstract protected String getTitle(int index); 141765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 142765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye abstract protected String getExpression(int index) throws Exception; 143765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 144765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 145765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 146765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // Utils 147765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 148765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 149765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 150765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Extract string array from parameters. 151765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 152765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye protected static String[] getParameterAsArray(Map<String, Object> parameters, String name) { 153765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return getParameterAsArray(parameters, name, false); 154765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 155765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 156765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye @SuppressWarnings("unchecked") 157765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye protected static String[] getParameterAsArray(Map<String, Object> parameters, 158765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye String name, 159765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye boolean noAssert) { 160765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye String[] values = null; 161765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (parameters.containsKey(name)) { 162765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye List<String> list = (List<String>) parameters.get(name); 163765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye values = list.toArray(new String[list.size()]); 164765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } else { 165765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (noAssert) { 166765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye values = null; 167765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } else { 168765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye Assert.fail(String.format("No parameter %s in %s.", name, parameters)); 169765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 170765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 171765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return values; 172765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 173765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye}