/* * RHQ Management Platform * Copyright (C) 2005-2013 Red Hat, Inc. * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ package org.rhq.coregui.client.inventory.resource.factory; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.types.Alignment; import com.smartgwt.client.types.TitleOrientation; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.form.DynamicForm; import com.smartgwt.client.widgets.form.fields.FormItem; import com.smartgwt.client.widgets.form.fields.SelectItem; import com.smartgwt.client.widgets.form.fields.TextItem; import com.smartgwt.client.widgets.form.fields.events.ChangedEvent; import com.smartgwt.client.widgets.form.fields.events.ChangedHandler; import org.rhq.core.domain.configuration.Configuration; import org.rhq.core.domain.configuration.definition.ConfigurationTemplate; import org.rhq.core.domain.content.Architecture; import org.rhq.coregui.client.CoreGUI; import org.rhq.coregui.client.components.form.SortedSelectItem; import org.rhq.coregui.client.components.wizard.AbstractWizardStep; import org.rhq.coregui.client.gwt.GWTServiceLookup; /** * @author Jay Shaughnessy * @author Greg Hinkle */ public class ResourceFactoryInfoStep extends AbstractWizardStep { private DynamicForm form; private AbstractResourceFactoryWizard wizard; private Map<String, ConfigurationTemplate> templates; private String namePrompt; private String versionPrompt; private String architecturePrompt; private String templatePrompt; private SelectItem selectArchItem; private LinkedHashMap<String, Integer> selectArchValues; public ResourceFactoryInfoStep(AbstractResourceFactoryWizard wizard, String namePrompt, String templatePrompt, Map<String, ConfigurationTemplate> templates) { this(wizard, namePrompt, null, null, templatePrompt, templates); } public ResourceFactoryInfoStep(AbstractResourceFactoryWizard wizard, String namePrompt, String versionPrompt, String architecturePrompt, String templatePrompt, Map<String, ConfigurationTemplate> templates) { this.wizard = wizard; this.namePrompt = namePrompt; this.versionPrompt = versionPrompt; this.architecturePrompt = architecturePrompt; this.templatePrompt = templatePrompt; this.templates = templates; } public Canvas getCanvas() { if (form == null) { form = new DynamicForm(); form.setNumCols(1); List<FormItem> formItems = new ArrayList<FormItem>(2); if (null != namePrompt) { TextItem nameItem = new TextItem("resourceName", namePrompt); nameItem.setRequired(true); nameItem.setTitleOrientation(TitleOrientation.TOP); nameItem.setAlign(Alignment.LEFT); nameItem.setWidth(300); nameItem.addChangedHandler(new ChangedHandler() { public void onChanged(ChangedEvent event) { Object value = event.getValue(); if (value == null) { value = ""; } wizard.setNewResourceName(value.toString()); } }); formItems.add(nameItem); } if (null != versionPrompt) { TextItem versionItem = new TextItem("version", versionPrompt); versionItem.setRequired(true); versionItem.setTitleOrientation(TitleOrientation.TOP); versionItem.setAlign(Alignment.LEFT); versionItem.setWidth(300); versionItem.setValue("0"); wizard.setNewResourceVersion("0"); versionItem.addChangedHandler(new ChangedHandler() { public void onChanged(ChangedEvent event) { Object value = event.getValue(); if (value == null) { value = ""; } wizard.setNewResourceVersion(value.toString()); } }); formItems.add(versionItem); } if (null != architecturePrompt) { selectArchItem = new SelectItem("selectArch", architecturePrompt); selectArchItem.setRequired(true); selectArchItem.disable(); selectArchItem.setTitleOrientation(TitleOrientation.TOP); selectArchItem.setAlign(Alignment.LEFT); selectArchItem.setWidth(300); setSelectArchItemValues(); selectArchItem.addChangedHandler(new ChangedHandler() { public void onChanged(ChangedEvent event) { Object value = event.getValue(); if (value != null) { wizard.setNewResourceArchitectureId((Integer) value); } } }); formItems.add(selectArchItem); } if (null != templatePrompt) { SelectItem templateSelect = new SortedSelectItem("template", templatePrompt); templateSelect.setTitleOrientation(TitleOrientation.TOP); templateSelect.setAlign(Alignment.LEFT); templateSelect.setWidth(300); if (templates != null && templates.size() > 1) { templateSelect.setValueMap(templates.keySet().toArray(new String[templates.size()])); templateSelect.setValue("default"); wizard.setNewResourceStartingConfiguration(templates.get("default").createConfiguration()); templateSelect.addChangedHandler(new ChangedHandler() { public void onChanged(ChangedEvent event) { Object value = event.getValue(); if (value == null) { value = ""; } wizard.setNewResourceStartingConfiguration(templates.get(value).createConfiguration()); } }); } else { templateSelect.setVisible(false); } formItems.add(templateSelect); } form.setItems(formItems.toArray(new FormItem[formItems.size()])); } return form; } public boolean nextPage() { return form.validate(); } public String getName() { return MSG.widget_resourceFactoryWizard_infoStepName(); } public String getResourceName() { return form.getValueAsString("resourceName"); } public String getVersion() { return form.getValueAsString("version"); } public Integer getArchitectureId() { return (Integer) form.getValue("selectArch"); } public Configuration getStartingConfiguration() { String template = form.getValueAsString("template"); if (template == null) { template = "default"; } return templates.get(template).createConfiguration(); } private void setSelectArchItemValues() { // get all known architectures GWTServiceLookup.getContentService().getArchitectures(new AsyncCallback<List<Architecture>>() { public void onFailure(Throwable caught) { CoreGUI.getErrorHandler().handleError(MSG.widget_resourceFactoryWizard_infoStep_loadFail(), caught); } public void onSuccess(List<Architecture> result) { selectArchValues = new LinkedHashMap<String, Integer>(); for (Architecture arch : result) { selectArchValues.put(arch.getName(), arch.getId()); } selectArchItem.setValueMap(selectArchValues); selectArchItem.setValue("noarch"); wizard.setNewResourceArchitectureId(selectArchValues.get("noarch")); selectArchItem.enable(); selectArchItem.redraw(); } }); } }