/* * RHQ Management Platform * Copyright (C) 2011 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ package org.rhq.coregui.client.drift.wizard; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; 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.SpacerItem; import com.smartgwt.client.widgets.form.fields.StaticTextItem; 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.drift.DriftConfigurationDefinition; import org.rhq.core.domain.drift.DriftDefinitionTemplate; import org.rhq.coregui.client.components.form.SortedSelectItem; import org.rhq.coregui.client.components.wizard.AbstractWizardStep; import org.rhq.coregui.client.util.FormUtility; /** * @author Jay Shaughnessy */ public class DriftAddDefinitionWizardInfoStep extends AbstractWizardStep { private DynamicForm form; private AbstractDriftAddDefinitionWizard wizard; private Map<String, ConfigurationTemplate> templates; public DriftAddDefinitionWizardInfoStep(AbstractDriftAddDefinitionWizard wizard) { this.wizard = wizard; } public Canvas getCanvas() { if (form == null) { form = new DynamicForm(); form.setNumCols(1); List<FormItem> formItems = new ArrayList<FormItem>(2); StaticTextItem descriptionItem = new StaticTextItem("Description", MSG.common_title_description()); descriptionItem.setTitleOrientation(TitleOrientation.TOP); descriptionItem.setAlign(Alignment.LEFT); descriptionItem.setWidth(300); formItems.add(descriptionItem); SpacerItem spacerItem = new SpacerItem("Spacer"); formItems.add(spacerItem); SelectItem templateSelectItem = new SortedSelectItem("Template", MSG.view_drift_wizard_addDef_templatePrompt()); templateSelectItem.setTitleOrientation(TitleOrientation.TOP); templateSelectItem.setAlign(Alignment.LEFT); templateSelectItem.setWidth(300); templateSelectItem.setRequired(true); switch (wizard.getEntityContext().getType()) { case SubsystemView: FormUtility.addContextualHelp(templateSelectItem, MSG.view_drift_wizard_addTemplate_infoStepHelp()); break; default: FormUtility.addContextualHelp(templateSelectItem, MSG.view_drift_wizard_addDef_infoStepHelp()); } Set<DriftDefinitionTemplate> templates = wizard.getType().getDriftDefinitionTemplates(); final HashMap<String, DriftDefinitionTemplate> templatesMap = new HashMap<String, DriftDefinitionTemplate>( templates.size()); if (!templates.isEmpty()) { for (DriftDefinitionTemplate template : templates) { templatesMap.put(template.getName(), template); } } else { // there should be at least one template for any resource type that supports drift monitoring throw new IllegalStateException( "At least one drift definition template should exist for the resource type"); } Set<String> templatesMapKeySet = templatesMap.keySet(); String[] templatesMapKeySetArray = templatesMapKeySet.toArray(new String[templatesMap.size()]); templateSelectItem.setValueMap(templatesMapKeySetArray); templateSelectItem.addChangedHandler(new ChangedHandler() { public void onChanged(ChangedEvent event) { if (null == event || "".equals(event.getValue())) { return; } setSelectedTemplate((String) event.getValue(), templatesMap); } }); formItems.add(templateSelectItem); form.setItems(formItems.toArray(new FormItem[formItems.size()])); // set value to first in list templateSelectItem.setValue(templatesMapKeySetArray[0]); setSelectedTemplate(templatesMapKeySetArray[0], templatesMap); } return form; } private void setSelectedTemplate(String key, final HashMap<String, DriftDefinitionTemplate> templatesMap) { DriftDefinitionTemplate selectedTemplate = templatesMap.get(key); wizard.setSelectedTemplate(selectedTemplate); Configuration startingConfig = selectedTemplate.createConfiguration(); // don't propogate the template name or desc to the def, force the user to enter a name, and optionally, a def startingConfig.remove(DriftConfigurationDefinition.PROP_NAME); startingConfig.remove(DriftConfigurationDefinition.PROP_DESCRIPTION); wizard.setNewStartingConfiguration(startingConfig); String description = selectedTemplate.getDescription(); description = (null == description) ? MSG.common_val_none() : description; form.getItem("Description").setValue(description); } public boolean nextPage() { return form.validate(); } public String getName() { switch (wizard.getEntityContext().getType()) { case SubsystemView: return MSG.view_drift_wizard_addTemplate_infoStepName(); default: return MSG.view_drift_wizard_addDef_infoStepName(); } } public Configuration getStartingConfiguration() { String template = form.getValueAsString("template"); return templates.get(template).createConfiguration(); } }