/* * 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.LinkedHashMap; import java.util.List; import java.util.Set; import com.smartgwt.client.types.Alignment; import com.smartgwt.client.types.Overflow; import com.smartgwt.client.types.TitleOrientation; import com.smartgwt.client.util.SC; 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.RadioGroupItem; 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.drift.DriftDefinitionComparator; import org.rhq.core.domain.drift.DriftDefinitionComparator.CompareMode; 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; import org.rhq.coregui.client.util.enhanced.EnhancedVLayout; /** * @author Jay Shaughnessy */ public class DriftPinTemplateWizardInfoStep extends AbstractWizardStep { static private final String CREATE_TEMPLATE = "create"; static private final String SELECT_TEMPLATE = "select"; private EnhancedVLayout canvas; private DynamicForm radioForm; private AbstractDriftPinTemplateWizard wizard; private DynamicForm selectTemplateForm; SelectItem selectTemplateItem = new SortedSelectItem("Template", MSG.view_drift_wizard_addDef_templatePrompt()); public DriftPinTemplateWizardInfoStep(AbstractDriftPinTemplateWizard wizard) { this.wizard = wizard; } public Canvas getCanvas() { if (null == canvas) { canvas = new EnhancedVLayout(); canvas.setWidth100(); radioForm = new DynamicForm(); radioForm.setNumCols(1); // These settings (as opposed to setWidth100()) allow for contextual help to be better placed radioForm.setAutoWidth(); radioForm.setOverflow(Overflow.VISIBLE); List<FormItem> formItems = new ArrayList<FormItem>(); // Make the radio item title a separate item in the form in order to add contextual help // to the right of the title text. We could also add it to the radio item but then it floats to // the right of the last radio button option (I'll leave that commented below if for some reason // we want to switch to that approach. StaticTextItem radioTitleItem = new StaticTextItem("RadioTitle"); radioTitleItem.setShowTitle(false); radioTitleItem.setTitleOrientation(TitleOrientation.TOP); radioTitleItem.setAlign(Alignment.LEFT); // The css style "formTitle" is what should work here, but for some reason I wasn't getting the // proper color. So instead I grabbed the color from the smartgwt css and declared it explicitly. //radioTitleItem.setCellStyle("formTitle"); radioTitleItem.setValue("<span style=\"font-weight: bold; color: #003168\">" + MSG.view_drift_wizard_pinTemplate_infoStepRadioTitle() + " :</span>"); FormUtility.addContextualHelp(radioTitleItem, MSG.view_drift_wizard_pinTemplate_infoStepRadioHelp()); formItems.add(radioTitleItem); LinkedHashMap<String, String> radioGroupValues = new LinkedHashMap<String, String>(); radioGroupValues.put(CREATE_TEMPLATE, MSG.view_drift_wizard_pinTemplate_infoStepNewTemplate()); radioGroupValues.put(SELECT_TEMPLATE, MSG.view_drift_wizard_pinTemplate_infoStepExistingTemplate()); RadioGroupItem radioGroupItem; radioGroupItem = new RadioGroupItem("RadioOptions"); // The title is mocked as a separate item above radioGroupItem.setShowTitle(false); //uncomment if we decide to show the title for some reason //radioGroupItem.setTitleOrientation(TitleOrientation.TOP); radioGroupItem.setWrap(false); radioGroupItem.setRequired(true); radioGroupItem.setAlign(Alignment.LEFT); radioGroupItem.setValueMap(radioGroupValues); radioGroupItem.setValue(CREATE_TEMPLATE); wizard.setCreateTemplate(true); radioGroupItem.addChangedHandler(new ChangedHandler() { public void onChanged(ChangedEvent event) { if (SELECT_TEMPLATE.equals(event.getValue()) && null == selectTemplateItem.getValue()) { SC.say(MSG.view_drift_wizard_pinTemplate_infoStepSelectBlocked()); event.getItem().setValue(CREATE_TEMPLATE); return; } wizard.setCreateTemplate(CREATE_TEMPLATE.equals(event.getValue())); if (wizard.isCreateTemplate()) { selectTemplateForm.hide(); wizard.getView().getNextButton().setTitle(MSG.common_button_next()); } else { selectTemplateForm.show(); wizard.getView().getNextButton().setTitle(MSG.common_button_finish()); } radioForm.markForRedraw(); } }); formItems.add(radioGroupItem); formItems.add(new SpacerItem()); radioForm.setItems(formItems.toArray(new FormItem[formItems.size()])); canvas.addMember(radioForm); selectTemplateForm = new DynamicForm(); selectTemplateForm.setNumCols(1); selectTemplateForm.setIsGroup(true); selectTemplateForm.setGroupTitle(MSG.view_drift_wizard_pinTemplate_infoStepSelectTitle()); selectTemplateForm.setPadding(10); selectTemplateForm.hide(); formItems.clear(); StaticTextItem selectTemplateDescriptionItem = new StaticTextItem("Description", MSG.common_title_description()); selectTemplateDescriptionItem.setTitleOrientation(TitleOrientation.TOP); selectTemplateDescriptionItem.setAlign(Alignment.LEFT); selectTemplateDescriptionItem.setWidth(300); formItems.add(selectTemplateDescriptionItem); SpacerItem spacerItem = new SpacerItem(); spacerItem.setHeight(10); formItems.add(spacerItem); selectTemplateItem.setTitleOrientation(TitleOrientation.TOP); selectTemplateItem.setAlign(Alignment.LEFT); selectTemplateItem.setWidth(300); selectTemplateItem.setRequired(true); FormUtility.addContextualHelp(selectTemplateItem, MSG.view_drift_wizard_pinTemplate_infoStepHelp()); Set<DriftDefinitionTemplate> templates = wizard.getResourceType().getDriftDefinitionTemplates(); if (null == templates || templates.isEmpty()) { // 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"); } // Only use templates that have the same base dir and filters as the definition from which // this snapshot is coming. Otherwise the file set does not map. final HashMap<String, DriftDefinitionTemplate> templatesMap = new HashMap<String, DriftDefinitionTemplate>( templates.size()); DriftDefinitionComparator ddc = new DriftDefinitionComparator(CompareMode.ONLY_DIRECTORY_SPECIFICATIONS); for (DriftDefinitionTemplate template : templates) { if (0 == ddc.compare(template.getTemplateDefinition(), wizard.getSnapshotDriftDef())) { templatesMap.put(template.getName(), template); } } Set<String> templatesMapKeySet = templatesMap.keySet(); String[] templatesMapKeySetArray = templatesMapKeySet.toArray(new String[templatesMap.size()]); selectTemplateItem.setValueMap(templatesMapKeySetArray); selectTemplateItem.addChangedHandler(new ChangedHandler() { public void onChanged(ChangedEvent event) { if (null == event || "".equals(event.getValue())) { return; } setSelectedTemplate((String) event.getValue(), templatesMap); } }); formItems.add(selectTemplateItem); selectTemplateForm.setItems(formItems.toArray(new FormItem[formItems.size()])); canvas.addMember(selectTemplateForm); // set value to first in list (assuming there are any values) if (templatesMapKeySetArray.length > 0) { selectTemplateItem.setValue(templatesMapKeySetArray[0]); setSelectedTemplate(templatesMapKeySetArray[0], templatesMap); } } return canvas; } private void setSelectedTemplate(String key, final HashMap<String, DriftDefinitionTemplate> templatesMap) { DriftDefinitionTemplate selectedTemplate = templatesMap.get(key); wizard.setSelectedTemplate(selectedTemplate); String description = selectedTemplate.getDescription(); description = (null == description) ? MSG.common_val_none() : description; selectTemplateForm.getItem("Description").setValue(description); } public boolean nextPage() { if (!radioForm.validate()) { return false; } return true; } public String getName() { return MSG.view_drift_wizard_pinTemplate_infoStepName(); } }