/******************************************************************************* * 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 com.google.common.base.Objects; import org.eclipse.wb.core.controls.CCombo3; import org.eclipse.wb.internal.core.model.property.Property; import java.beans.PropertyDescriptor; /** * {@link PropertyEditor} for "enumerationValues" attribute of {@link PropertyDescriptor}. *

* See http://javadude.com/articles/javabeanattributes.html for attributes. * * @author scheglov_ke * @coverage core.model.property.editor */ public class EnumerationValuesPropertyEditor extends AbstractComboPropertyEditor implements IValueSourcePropertyEditor { private final String[] m_names; private final Object[] m_values; private final String[] m_sources; //////////////////////////////////////////////////////////////////////////// // // Constructor // //////////////////////////////////////////////////////////////////////////// public EnumerationValuesPropertyEditor(Object attributeValue) { Object[] enumElements = (Object[]) attributeValue; int items = enumElements.length / 3; m_names = new String[items]; m_values = new Object[items]; m_sources = new String[items]; for (int i = 0; i < items; i++) { m_names[i] = (String) enumElements[3 * i + 0]; m_values[i] = enumElements[3 * i + 1]; m_sources[i] = (String) enumElements[3 * i + 2]; } } //////////////////////////////////////////////////////////////////////////// // // TextDisplayPropertyEditor // //////////////////////////////////////////////////////////////////////////// @Override public String getText(Property property) throws Exception { Object value = property.getValue(); // return name for value if (value != Property.UNKNOWN_VALUE) { for (int i = 0; i < m_values.length; i++) { if (Objects.equal(m_values[i], value)) { return m_names[i]; } } } // unknown value return null; } //////////////////////////////////////////////////////////////////////////// // // IValueSourcePropertyEditor // //////////////////////////////////////////////////////////////////////////// @Override public String getValueSource(Object value) throws Exception { if (value != Property.UNKNOWN_VALUE) { for (int i = 0; i < m_values.length; i++) { if (Objects.equal(m_values[i], value)) { return m_sources[i]; } } } // unknown value return null; } //////////////////////////////////////////////////////////////////////////// // // IClipboardSourceProvider // //////////////////////////////////////////////////////////////////////////// // 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 (String title : m_names) { combo.add(title); } } @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 { Object value = m_values[index]; // if (property instanceof GenericProperty) { // GenericProperty genericProperty = (GenericProperty) property; // String source = getValueSource(value); // genericProperty.setExpression(source, value); // } else { property.setValue(value); // } } }