/******************************************************************************* * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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: * Exadel, Inc. and Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.common.model.ui.attribute.editor; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; import org.eclipse.core.runtime.IAdaptable; import org.jboss.tools.common.model.ui.attribute.adapter.IModelPropertyEditorAdapter; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.ICellEditorListener; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Shell; import org.jboss.tools.common.model.ui.widgets.IWidgetSettings; public abstract class PropertyEditor implements IPropertyEditor, PropertyChangeListener { protected boolean lineEditor = false; protected String labelText; protected ICellEditorListener cellEditorListener; protected IPropertyChangeListener propertyChangeListener; protected IWidgetSettings settings; public PropertyEditor() {} public PropertyEditor(IWidgetSettings settings) { this.settings = settings; } // creatios for cell editor and field editor protected abstract CellEditor createCellEditor(Composite parent); protected abstract ExtendedFieldEditor createFieldEditor(Composite parent); public boolean isLineEditor() { return lineEditor; } public boolean isGreedyEditor() { return false; } public boolean callsExternal() { return false; } public Object callExternal(Shell shell) { return getValue(); } // getters for cell editor and field editor public CellEditor getCellEditor(Composite parent) { return createCellEditor(parent); } public ExtendedFieldEditor getFieldEditor(Composite parent) { ExtendedFieldEditor fieldEditor = createFieldEditor(parent); fieldEditor.setLabelText(getLabelText()); return fieldEditor; } // getter and setter for label string public void setLabelText(String labelText) { if (labelText!=null) { this.labelText = labelText; } } public String getLabelText() { return labelText; } // listeners private ArrayList<IPropertyEditorListener> listeners = new ArrayList<IPropertyEditorListener>(); public void addPropertyEditorListener(IPropertyEditorListener l) { listeners.add(l); } public void removePropertyEditorListener(IPropertyEditorListener l) { listeners.remove(l); } public void fireInputChanged() { ArrayList list = (ArrayList)listeners.clone(); for (int i=0;i<list.size();++i){ ((IPropertyEditorListener)list.get(i)).inputChangedEvent(new PropertyEditorEvent(this)); } list.clear(); list = null; } public void fireValueChanged() { ArrayList list = (ArrayList)listeners.clone(); for (int i=0;i<list.size();++i){ ((IPropertyEditorListener)list.get(i)).valueChangedEvent(new PropertyEditorEvent(this)); } list.clear(); list = null; } // value // getValue() and setValue() for Slava public abstract Object getValue(); public abstract void setValue(Object value); // input protected Object input; public Object getInput() { return input; } public void setInput(Object input) { this.input = input; fireInputChanged(); } // IAdaptable public Object getAdapter(Class adapter) { Object object; object = ((IAdaptable)getInput()).getAdapter(adapter); return object; } public String getAttributeName() { if (input instanceof IModelPropertyEditorAdapter) if(((IModelPropertyEditorAdapter)input).getAttribute() != null) return ((IModelPropertyEditorAdapter)input).getAttribute().getName(); return labelText; } public void propertyChange(PropertyChangeEvent evt) { setValue(evt.getNewValue()); } /** * @return */ public IWidgetSettings getSettings() { return settings; } /** * @param settings */ public void setSettings(IWidgetSettings settings) { this.settings = settings; } public String getChangeButtonName() { return null; } public void dispose() { cellEditorListener = null; propertyChangeListener = null; settings = null; } }