/* * Copyright (c) 2012 Data Harmonisation Panel * * All rights reserved. This program and the accompanying materials are made * available under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of the License, * or (at your option) any later version. * * You should have received a copy of the GNU Lesser General Public License * along with this distribution. If not, see <http://www.gnu.org/licenses/>. * * Contributors: * HUMBOLDT EU Integrated Project #030962 * Data Harmonisation Panel <http://www.dhpanel.eu> */ package eu.esdihumboldt.hale.ui.function.generic.pages; import java.util.List; import java.util.Set; import org.eclipse.jface.resource.ImageDescriptor; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap.Builder; import com.google.common.collect.ListMultimap; import com.google.common.collect.Multimaps; import eu.esdihumboldt.hale.common.align.extension.function.FunctionDefinition; import eu.esdihumboldt.hale.common.align.extension.function.FunctionParameterDefinition; import eu.esdihumboldt.hale.common.align.model.ParameterValue; import eu.esdihumboldt.hale.ui.HaleWizardPage; import eu.esdihumboldt.hale.ui.function.generic.AbstractGenericFunctionWizard; /** * Base class for parameter pages. * * @author Simon Templer */ public abstract class AbstractParameterPage extends HaleWizardPage<AbstractGenericFunctionWizard<?, ?>> implements ParameterPage { private ListMultimap<String, ParameterValue> initialValues; private ImmutableMap<String, FunctionParameterDefinition> parametersToHandle; /** * @see HaleWizardPage#HaleWizardPage(String) */ public AbstractParameterPage(String pageName) { super(pageName); } /** * @see HaleWizardPage#HaleWizardPage(String, String, ImageDescriptor) */ public AbstractParameterPage(String pageName, String title, ImageDescriptor titleImage) { super(pageName, title, titleImage); } /** * Create a parameter page for the given function. * * @param function the function * @param description the page description, if <code>null</code> the * function description will be used */ public AbstractParameterPage(FunctionDefinition<?> function, String description) { super(function.getId(), function.getDisplayName(), null); if (description == null) { setDescription(function.getDescription()); } else { setDescription(description); } } /** * @see ParameterPage#setParameter(Set, ListMultimap) */ @Override public void setParameter(Set<FunctionParameterDefinition> params, ListMultimap<String, ParameterValue> initialValues) { Builder<String, FunctionParameterDefinition> builder = ImmutableMap.builder(); for (FunctionParameterDefinition param : params) { builder.put(param.getName(), param); } this.parametersToHandle = builder.build(); if (initialValues == null) { this.initialValues = ArrayListMultimap.create(); } else { this.initialValues = Multimaps.unmodifiableListMultimap(initialValues); } } /** * Get the map of initial values for parameters. * * @return parameter names mapped to their initial values (unmodifiable) */ protected ListMultimap<String, ParameterValue> getInitialValues() { return initialValues; } /** * Get the parameters to handle by this parameter page. * * @return the set of function parameters to handle (unmodifiable) */ protected ImmutableMap<String, FunctionParameterDefinition> getParametersToHandle() { return parametersToHandle; } /** * Get a single initial value for the given parameter. * * @param parameterName the parameter name * @param def the default value to return if the value is not present * @return the first parameter value or the provided default value */ protected ParameterValue getOptionalInitialValue(String parameterName, ParameterValue def) { List<ParameterValue> values = getInitialValues().get(parameterName); if (values != null && !values.isEmpty()) { return values.get(0); } return def; } }