Home | History | Annotate | Download | only in editor
      1 /*******************************************************************************
      2  * Copyright (c) 2011 Google, Inc.
      3  * All rights reserved. This program and the accompanying materials
      4  * are made available under the terms of the Eclipse Public License v1.0
      5  * which accompanies this distribution, and is available at
      6  * http://www.eclipse.org/legal/epl-v10.html
      7  *
      8  * Contributors:
      9  *    Google, Inc. - initial API and implementation
     10  *******************************************************************************/
     11 package org.eclipse.wb.internal.core.model.property.editor;
     12 
     13 import org.eclipse.wb.core.controls.CCombo3;
     14 import org.eclipse.wb.internal.core.model.property.Property;
     15 import org.eclipse.wb.internal.core.utils.check.Assert;
     16 
     17 import java.util.List;
     18 import java.util.Map;
     19 
     20 /**
     21  * The {@link PropertyEditor} for selecting single expression from given set.
     22  *
     23  * @author sablin_aa
     24  * @coverage core.model.property.editor
     25  */
     26 public abstract class AbstractListPropertyEditor extends AbstractComboPropertyEditor
     27     implements
     28       IValueSourcePropertyEditor {
     29   ////////////////////////////////////////////////////////////////////////////
     30   //
     31   // TextDisplayPropertyEditor
     32   //
     33   ////////////////////////////////////////////////////////////////////////////
     34   @Override
     35   public String getText(Property property) throws Exception {
     36     // return title for value
     37     Object value = property.getValue();
     38     if (value != Property.UNKNOWN_VALUE) {
     39       int index = getValueIndex(value);
     40       if (index >= 0) {
     41         return getTitle(index);
     42       } else {
     43         if (value instanceof String) {
     44           return (String) value;
     45         }
     46       }
     47     }
     48     // unknown value
     49     return null;
     50   }
     51 
     52   ////////////////////////////////////////////////////////////////////////////
     53   //
     54   // IValueSourcePropertyEditor
     55   //
     56   ////////////////////////////////////////////////////////////////////////////
     57   @Override
     58 public String getValueSource(Object value) throws Exception {
     59     // return expression for value
     60     if (value != Property.UNKNOWN_VALUE) {
     61       int index = getValueIndex(value);
     62       if (index >= 0) {
     63         return getExpression(index);
     64       }
     65     }
     66     // unknown value
     67     return null;
     68   }
     69 
     70 //  ////////////////////////////////////////////////////////////////////////////
     71 //  //
     72 //  // IClipboardSourceProvider
     73 //  //
     74 //  ////////////////////////////////////////////////////////////////////////////
     75 //  @Override
     76 //public String getClipboardSource(GenericProperty property) throws Exception {
     77 //    Object value = property.getValue();
     78 //    return getValueSource(value);
     79 //  }
     80 
     81   ////////////////////////////////////////////////////////////////////////////
     82   //
     83   // Combo
     84   //
     85   ////////////////////////////////////////////////////////////////////////////
     86   @Override
     87   protected void addItems(Property property, CCombo3 combo) throws Exception {
     88     for (int i = 0; i < getCount(); i++) {
     89       combo.add(getTitle(i));
     90     }
     91   }
     92 
     93   @Override
     94   protected void selectItem(Property property, CCombo3 combo) throws Exception {
     95     combo.setText(getText(property));
     96   }
     97 
     98   @Override
     99   protected void toPropertyEx(Property property, CCombo3 combo, int index) throws Exception {
    100 //    if (property instanceof GenericProperty) {
    101 //      GenericProperty genericProperty = (GenericProperty) property;
    102 //      String expression = getExpression(index);
    103 //      Object evaluatedExpression = evaluateExpression(genericProperty, expression);
    104 //      // apply expression
    105 //      genericProperty.setExpression(expression, evaluatedExpression);
    106 //    } else {
    107       toPropertyEx_simpleProperty(property, combo, index);
    108 //    }
    109   }
    110 
    111 //  private static Object evaluateExpression(final GenericProperty genericProperty,
    112 //      final String expression) {
    113 //    return ExecutionUtils.runObjectIgnore(new RunnableObjectEx<Object>() {
    114 //      public Object runObject() throws Exception {
    115 //        JavaInfo javaInfo = genericProperty.getJavaInfo();
    116 //        ClassLoader classLoader = JavaInfoUtils.getClassLoader(javaInfo);
    117 //        return ScriptUtils.evaluate(classLoader, expression);
    118 //      }
    119 //    }, Property.UNKNOWN_VALUE);
    120 //      System.out.println("HACK 1234");
    121 //      return Property.UNKNOWN_VALUE;
    122 //  }
    123 
    124   /**
    125    * Sets value of simple {@link Property}, not {@link GenericProperty}.
    126    */
    127   protected void toPropertyEx_simpleProperty(Property property, CCombo3 combo, int index)
    128       throws Exception {
    129   }
    130 
    131   ////////////////////////////////////////////////////////////////////////////
    132   //
    133   // Access to list items
    134   //
    135   ////////////////////////////////////////////////////////////////////////////
    136   abstract protected int getCount();
    137 
    138   abstract protected int getValueIndex(Object value);
    139 
    140   abstract protected String getTitle(int index);
    141 
    142   abstract protected String getExpression(int index) throws Exception;
    143 
    144   ////////////////////////////////////////////////////////////////////////////
    145   //
    146   // Utils
    147   //
    148   ////////////////////////////////////////////////////////////////////////////
    149   /**
    150    * Extract string array from parameters.
    151    */
    152   protected static String[] getParameterAsArray(Map<String, Object> parameters, String name) {
    153     return getParameterAsArray(parameters, name, false);
    154   }
    155 
    156   @SuppressWarnings("unchecked")
    157   protected static String[] getParameterAsArray(Map<String, Object> parameters,
    158       String name,
    159       boolean noAssert) {
    160     String[] values = null;
    161     if (parameters.containsKey(name)) {
    162       List<String> list = (List<String>) parameters.get(name);
    163       values = list.toArray(new String[list.size()]);
    164     } else {
    165       if (noAssert) {
    166         values = null;
    167       } else {
    168         Assert.fail(String.format("No parameter %s in %s.", name, parameters));
    169       }
    170     }
    171     return values;
    172   }
    173 }