/*******************************************************************************
* Copyright (c) 2012 Pivotal Software, 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:
* Pivotal Software, Inc. - initial API and implementation
*******************************************************************************/
package org.springsource.ide.eclipse.commons.frameworks.ui.internal.parameters.editors;
import java.util.ArrayList;
import java.util.List;
import org.springsource.ide.eclipse.commons.frameworks.core.internal.commands.ICommandParameter;
import org.springsource.ide.eclipse.commons.frameworks.core.internal.commands.ICommandParameterDescriptor;
/**
* @author Nieraj Singh
* @author Christian Dupuis
*/
public abstract class AbstractParameterEditor implements IParameterEditor,
IUIChangeListener {
private ICommandParameter parameter;
private List<IUIChangeListener> listeners;
private boolean requiresLabel;
public AbstractParameterEditor(ICommandParameter parameter, boolean requiresLabel) {
this.parameter = parameter;
this.requiresLabel = requiresLabel;
}
public boolean requiresParameterNameLabel() {
return requiresLabel;
}
public IUIChangeListener addUIChangeListener(IUIChangeListener listener) {
if (listener == null) {
return null;
}
if (listeners == null) {
listeners = new ArrayList<IUIChangeListener>();
}
if (listeners.contains(listener)) {
return null;
}
listeners.add(listener);
return listener;
}
public IUIChangeListener removeUIChangeListener(IUIChangeListener listener) {
if (listeners != null && listeners.remove(listener)) {
return listener;
}
return null;
}
public ICommandParameterDescriptor getParameterDescriptor() {
return parameter.getParameterDescriptor();
}
public ICommandParameter getParameter() {
return parameter;
}
protected void setParameterValueAndNotifyClear(Object value) {
setParameterValue(value, UIEvent.VALUE_SET | UIEvent.CLEAR_VALUE_EVENT);
}
protected void setParameterValue(Object value, int eventType) {
ICommandParameter parameter = getParameter();
if (parameter != null) {
parameter.setValue(value);
notifyListeners(value, eventType);
}
}
protected void notifyListeners(Object eventData, int type) {
UIEvent event = new UIEvent(eventData, this, type);
if (listeners != null) {
for (IUIChangeListener listener : listeners) {
listener.handleUIEvent(event);
}
}
}
public void handleUIEvent(UIEvent event) {
if ((event.getType() & UIEvent.CLEAR_VALUE_EVENT) == UIEvent.CLEAR_VALUE_EVENT) {
setParameterValue(null, UIEvent.VALUE_SET);
clearControls();
}
}
/**
* Subclasses must implement when a clear control event is received, to
* clear all values in any editor control where values are set
*/
abstract protected void clearControls();
}