package org.jboss.tools.windup.ui.internal.launch; import java.util.Collections; import java.util.List; import java.util.Map; import org.eclipse.swt.widgets.Composite; import org.jboss.tools.windup.model.OptionFacades; import org.jboss.tools.windup.model.OptionFacades.OptionsFacadeManager; import org.jboss.tools.windup.ui.internal.launch.OptionUiFacades.OptionUiFacade; import org.jboss.tools.windup.windup.ConfigurationElement; import org.jboss.tools.windup.windup.Pair; import org.jboss.windup.bootstrap.help.OptionDescription; import com.google.common.collect.Lists; import com.google.common.collect.Maps; /** * Manages UI facades for option descriptions. */ public class OptionsWidgetManager { private Map<String, OptionUiFacade> optionTypeControls = Maps.newHashMap(); private OptionsFacadeManager optionsFacadeManager; private final Runnable optionChangedCallback; private ConfigurationElement configuration; public OptionsWidgetManager(OptionsFacadeManager optionsFacadeManager, Composite parent, ConfigurationElement configuration, Runnable optionChangedCallback) { this.optionChangedCallback = optionChangedCallback; this.optionsFacadeManager = optionsFacadeManager; this.configuration = configuration; build(parent); } private void build(Composite parent) { for (OptionDescription option : optionsFacadeManager.getOptionDescriptions()) { create(option, parent); } } private OptionUiFacade create(OptionDescription option, Composite parent) { if (!optionTypeControls.containsKey(option)) { OptionUiFacade control = createControl(option, parent); optionTypeControls.put(option.getName(), control); } return optionTypeControls.get(option); } private OptionUiFacade createControl(OptionDescription option, Composite parent) { OptionUiFacade optionTypeControl = OptionUiFacades.createOptionUiFacade( option, optionsFacadeManager, optionChangedCallback); optionTypeControl.createControls(parent); return optionTypeControl; } public OptionUiFacade getOptionUiFacade(String name) { return optionTypeControls.get(name); } public List<String> getOptions() { List<String> options = Lists.newArrayList(); for (OptionDescription option : optionsFacadeManager.getOptionDescriptions()) { boolean filter = false; // Filter existing single-valued options. for (Pair pair : configuration.getOptions()) { if (pair.getKey().equals(option.getName()) && OptionFacades.isSingleValued(option)) { filter = true; break; } } if (!filter) { options.add(option.getName()); } } Collections.sort(options); return options; } }