/******************************************************************************* * 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.core.internal.commands; import java.util.ArrayList; import java.util.List; /** * Basic implementation of a command parameter instance. It contains a reference * to the parameter descriptor. * @author Nieraj Singh */ public class CommandParameter implements ICommandParameter, IValueChangedNotifier { private Object value; private ICommandParameterDescriptor descriptor; private List<IParameterValueListener> listeners; public CommandParameter(ICommandParameterDescriptor descriptor) { this.descriptor = descriptor; init(); } protected void init() { if (descriptor != null) { Object defaultValue = descriptor.getDefaultValue(); if (defaultValue != null) { // Internal set value. Do not fire events for this value = defaultValue; } } } public ICommandParameterDescriptor getParameterDescriptor() { return descriptor; } public void setValue(Object value) { this.value = value; notifyValueChanged(value); } public Object getValue() { return value; } public boolean hasValue() { return value != null; } public IParameterValueListener addListener(IParameterValueListener listener) { if (listener == null) { return null; } if (listeners != null) { listeners = new ArrayList<IParameterValueListener>(); } if (listeners.contains(listener)) { return null; } listeners.add(listener); return listener; } public IParameterValueListener removeListener( IParameterValueListener listener) { if (listeners != null && listeners.remove(listener)) { return listener; } return null; } protected void notifyValueChanged(Object value) { if (listeners == null) { return; } ParameterValueEvent event = new ParameterValueEvent(value); for (IParameterValueListener listener : listeners) { listener.handleValueChanged(event); } } }