/******************************************************************************* * 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 org.eclipse.core.runtime.IAdaptable; import org.jboss.tools.common.meta.constraint.impl.XAttributeConstraintAList; import org.jboss.tools.common.meta.key.WizardKeys; import org.jboss.tools.common.model.ui.IValueChangeListener; import org.jboss.tools.common.model.ui.IValueProvider; import org.jboss.tools.common.model.ui.attribute.adapter.DefaultValueAdapter; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.widgets.Composite; import org.jboss.tools.common.model.ui.widgets.IWidgetSettings; public abstract class ValueEditor extends PropertyEditor { // {implements ICellEditorListener { public ValueEditor() {} public ValueEditor(IWidgetSettings settings) { super(settings); } protected abstract CellEditor createCellEditor(Composite parent); protected abstract ExtendedFieldEditor createFieldEditor(Composite parent); protected CellEditor cellEditor; protected ExtendedFieldEditor fieldEditor; // private IValueProvider valueProvider; // private IValueChangeListener valueChangeListener; public void dispose() { super.dispose(); if (cellEditor!=null) cellEditor.dispose(); cellEditor = null; if (fieldEditor!=null) fieldEditor.dispose(); fieldEditor = null; } public CellEditor getCellEditor(Composite parent) { if (cellEditor==null) { cellEditor = createCellEditor(parent); if (cellEditor!=null) { IValueProvider valueProvider = (IValueProvider)getAdapter(IValueProvider.class); // IValueChangeListener valueChangeListener = (IValueChangeListener)getAdapter(IValueChangeListener.class); Object value = valueProvider.getValue(); if(getInput() instanceof DefaultValueAdapter) { DefaultValueAdapter a = (DefaultValueAdapter)getInput(); if(a.getAttribute().getConstraint() instanceof XAttributeConstraintAList) { value = WizardKeys.getVisualListValue(a.getAttribute(), value.toString()); } } cellEditor.setValue(value); //cellEditor.addListener(this); } } return cellEditor; } public ExtendedFieldEditor getFieldEditor(Composite parent) { if (fieldEditor==null) { fieldEditor = createFieldEditor(parent); fieldEditor.setLabelText(getLabelText()); if (fieldEditor instanceof IPropertyFieldEditor) { ((IPropertyFieldEditor)fieldEditor).setPropertyEditor(this); } //bug fix 7894 parent.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { fieldEditor = null; } }); } return fieldEditor; } public Object getInput() { if (input == null) { setInput(new DefaultValueAdapter()); } return input; } // getValue() and setValue() for Slava public Object getValue() { return ((IValueProvider)((IAdaptable)getInput()).getAdapter(IValueProvider.class)).getValue(); } public void setValue(Object value){ PropertyChangeEvent event = new PropertyChangeEvent(this, IPropertyEditor.VALUE, getValue(), value); ((IValueChangeListener)((IAdaptable)getInput()).getAdapter(IValueChangeListener.class)).valueChange(event); } }