/* * 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.EnumSet; import com.google.gwt.user.client.rpc.AsyncCallback; import org.rhq.core.domain.criteria.DriftDefinitionCriteria; import org.rhq.core.domain.drift.DriftDefinition; import org.rhq.core.domain.drift.DriftDefinitionTemplate; import org.rhq.core.domain.resource.Resource; import org.rhq.core.domain.resource.ResourceType; import org.rhq.core.domain.util.PageList; import org.rhq.core.domain.util.ResourceTypeUtility; import org.rhq.coregui.client.CoreGUI; import org.rhq.coregui.client.LinkManager; import org.rhq.coregui.client.components.wizard.WizardStep; import org.rhq.coregui.client.gwt.GWTServiceLookup; import org.rhq.coregui.client.inventory.resource.type.ResourceTypeRepository; import org.rhq.coregui.client.util.message.Message; /** * @author Jay Shaughnessy */ public class DriftPinTemplateWizard extends AbstractDriftPinTemplateWizard { public DriftPinTemplateWizard(ResourceType resourceType, DriftDefinition driftDef, int snapshotVersion) { super(resourceType, driftDef, snapshotVersion); final ArrayList<WizardStep> steps = new ArrayList<WizardStep>(); steps.add(new DriftPinTemplateWizardInfoStep(DriftPinTemplateWizard.this)); steps.add(new DriftPinTemplateWizardConfigStep(DriftPinTemplateWizard.this)); setSteps(steps); } @Override public String getWindowTitle() { return MSG.view_drift_wizard_pinTemplate_windowTitle(); } @Override public String getTitle() { return MSG.view_drift_wizard_pinTemplate_title(String.valueOf(getSnapshotVersion()), getSnapshotDriftDef() .getName(), ResourceTypeUtility.displayName(getResourceType())); } @Override public String getSubtitle() { return null; } @Override public void execute() { if (isCreateTemplate()) { GWTServiceLookup.getDriftService().createTemplate(getResourceType().getId(), getNewDriftDefinition(), new AsyncCallback<DriftDefinitionTemplate>() { public void onSuccess(DriftDefinitionTemplate result) { pinTemplate(result); } public void onFailure(Throwable caught) { CoreGUI.getErrorHandler().handleError( MSG.view_drift_wizard_addDef_failure(getSelectedTemplate().getName()), caught); getView().closeDialog(); } }); } else { pinTemplate(getSelectedTemplate()); } } private void pinTemplate(final DriftDefinitionTemplate template) { GWTServiceLookup.getDriftService().pinTemplate(template.getId(), getSnapshotDriftDef().getId(), getSnapshotVersion(), new AsyncCallback<Void>() { public void onSuccess(Void result) { CoreGUI.getMessageCenter().notify( new Message(MSG.view_drift_wizard_pinTemplate_success(template.getName()), Message.Severity.Info)); getView().closeDialog(); CoreGUI.goToView(LinkManager.getDriftDefinitionsLink(getSnapshotDriftDef().getResource().getId()), true); } public void onFailure(Throwable caught) { CoreGUI.getErrorHandler().handleError( MSG.view_drift_wizard_pinTemplate_failure(template.getName()), caught); getView().closeDialog(); } }); } public static void showWizard(final int snapshpotDriftDefId, final int snapshotVersion) { // get the relevant DriftDefinition DriftDefinitionCriteria ddc = new DriftDefinitionCriteria(); ddc.addFilterId(snapshpotDriftDefId); ddc.fetchResource(true); ddc.fetchConfiguration(true); GWTServiceLookup.getDriftService().findDriftDefinitionsByCriteria(ddc, new AsyncCallback<PageList<DriftDefinition>>() { public void onFailure(Throwable caught) { CoreGUI.getErrorHandler().handleError( MSG.view_drift_wizard_pinTemplate_failure("Invalid Snapshot"), caught); } @Override public void onSuccess(PageList<DriftDefinition> result) { if (result.isEmpty()) { CoreGUI.getErrorHandler().handleError( MSG.view_drift_wizard_pinTemplate_failure("Invalid Snapshot")); } // get the relevant ResourceType, including the type's potential drift templates to pin final DriftDefinition driftDef = result.get(0); final Resource resource = driftDef.getResource(); ResourceTypeRepository.Cache.getInstance().getResourceTypes(resource.getResourceType().getId(), EnumSet.of(ResourceTypeRepository.MetadataType.driftDefinitionTemplates), new ResourceTypeRepository.TypeLoadedCallback() { public void onTypesLoaded(ResourceType type) { DriftPinTemplateWizard wizard = new DriftPinTemplateWizard(type, driftDef, snapshotVersion); wizard.startWizard(); } }); } }); } @Override public void cancel() { super.cancel(); } }