/* * RHQ Management Platform * Copyright (C) 2005-2010 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.inventory.resource.factory; import java.util.ArrayList; import java.util.Collections; import java.util.EnumSet; import java.util.Map; import com.google.gwt.user.client.rpc.AsyncCallback; import org.rhq.core.domain.configuration.Configuration; import org.rhq.core.domain.configuration.definition.ConfigurationDefinition; import org.rhq.core.domain.configuration.definition.ConfigurationTemplate; import org.rhq.core.domain.content.PackageType; import org.rhq.core.domain.resource.CannotConnectToAgentException; import org.rhq.core.domain.resource.Resource; import org.rhq.core.domain.resource.ResourceType; import org.rhq.core.domain.util.ResourceTypeUtility; import org.rhq.coregui.client.CoreGUI; 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 * @author Greg Hinkle */ public class ResourceFactoryCreateWizard extends AbstractResourceFactoryWizard { private PackageType newResourcePackageType; private Integer newResourcePackageVersionId; public ResourceFactoryCreateWizard(Resource parentResource, ResourceType childType, PackageType packageType) { super(parentResource, childType); this.newResourcePackageType = packageType; final ArrayList<WizardStep> steps = new ArrayList<WizardStep>(); switch (childType.getCreationDataType()) { case CONTENT: { String archPrompt = packageType.isSupportsArchitecture() ? MSG.widget_resourceFactoryWizard_archPrompt() : null; ConfigurationDefinition deployTimeConfigDef = packageType.getDeploymentConfigurationDefinition(); this.setNewResourceConfigurationDefinition(deployTimeConfigDef); Map<String, ConfigurationTemplate> templates = Collections.emptyMap(); if (deployTimeConfigDef != null) { templates = deployTimeConfigDef.getTemplates(); } steps.add(new ResourceFactoryInfoStep(ResourceFactoryCreateWizard.this, null, MSG .widget_resourceFactoryWizard_versionPrompt(), archPrompt, MSG .widget_resourceFactoryWizard_contentTemplatePrompt(), templates)); steps.add(new ResourceFactoryPackageStep(ResourceFactoryCreateWizard.this)); steps.add(new ResourceFactoryConfigurationStep(ResourceFactoryCreateWizard.this)); setSteps(steps); break; } case CONFIGURATION: { ConfigurationDefinition resourceConfigDef = getChildType().getResourceConfigurationDefinition(); this.setNewResourceConfigurationDefinition(resourceConfigDef); // Even if the type doesn't define multiple resource config templates, we still need to include the info // step, since it also prompts for the Resource name. Map<String, ConfigurationTemplate> templates = (resourceConfigDef != null) ? resourceConfigDef.getTemplates() : Collections.<String, ConfigurationTemplate>emptyMap(); steps.add(new ResourceFactoryInfoStep(ResourceFactoryCreateWizard.this, MSG .widget_resourceFactoryWizard_namePrompt(), MSG.widget_resourceFactoryWizard_configTemplatePrompt(), templates)); steps.add(new ResourceFactoryConfigurationStep(ResourceFactoryCreateWizard.this)); setSteps(steps); break; } } } public String getWindowTitle() { return MSG.widget_resourceFactoryWizard_createWizardWindowTitle(); } public String getTitle() { return MSG.widget_resourceFactoryWizard_createWizardTitle(ResourceTypeUtility.displayName(getChildType())); } public String getSubtitle() { return null; } public void execute() { int parentResourceId = getParentResource().getId(); int createTypeId = getChildType().getId(); switch (getChildType().getCreationDataType()) { case CONTENT: { Configuration deployTimeConfiguration = this.getNewResourceConfiguration(); Integer packageVersionId = this.getNewResourcePackageVersionId(); if (null == packageVersionId) { CoreGUI.getErrorHandler().handleError(MSG.widget_resourceFactoryWizard_execute1()); getView().closeDialog(); } GWTServiceLookup.getResourceService().createResource(parentResourceId, createTypeId, (String) null, deployTimeConfiguration, packageVersionId, this.getNewResourceCreateTimeout(), new AsyncCallback<Void>() { public void onFailure(Throwable caught) { if (caught instanceof CannotConnectToAgentException) { CoreGUI.getMessageCenter().notify(new Message(MSG.widget_resourceFactoryWizard_execute2(), Message.Severity.Warning)); } else { CoreGUI.getErrorHandler().handleError(MSG.widget_resourceFactoryWizard_execute3(), caught); } getView().closeDialog(); } public void onSuccess(Void result) { CoreGUI.getMessageCenter().notify( new Message(MSG.widget_resourceFactoryWizard_createSubmitType(ResourceTypeUtility .displayName(getChildType())), Message.Severity.Info)); getView().closeDialog(); } }); break; } case CONFIGURATION: { final String newResourceName = this.getNewResourceName(); Configuration resourceConfiguration = this.getNewResourceConfiguration(); GWTServiceLookup.getResourceService().createResource(parentResourceId, createTypeId, newResourceName, resourceConfiguration, this.getNewResourceCreateTimeout(), new AsyncCallback<Void>() { public void onFailure(Throwable caught) { CoreGUI.getErrorHandler().handleError(MSG.widget_resourceFactoryWizard_execute2(), caught); getView().closeDialog(); } public void onSuccess(Void result) { CoreGUI.getMessageCenter().notify( new Message(MSG.widget_resourceFactoryWizard_createSubmit(newResourceName), Message.Severity.Info)); getView().closeDialog(); } }); break; } } } public PackageType getNewResourcePackageType() { return newResourcePackageType; } public void setNewResourcePackageType(PackageType newResourcePackageType) { this.newResourcePackageType = newResourcePackageType; } public Integer getNewResourcePackageVersionId() { return newResourcePackageVersionId; } public void setNewResourcePackageVersionId(Integer newResourcePackageVersionId) { this.newResourcePackageVersionId = newResourcePackageVersionId; } public static void showCreateWizard(final Resource parentResource, ResourceType childType) { ResourceTypeRepository.Cache.getInstance().getResourceTypes(childType.getId(), EnumSet.of(ResourceTypeRepository.MetadataType.resourceConfigurationDefinition), new ResourceTypeRepository.TypeLoadedCallback() { public void onTypesLoaded(final ResourceType loadedChildType) { switch (loadedChildType.getCreationDataType()) { case CONTENT: { // get PackageType info before continuing GWTServiceLookup.getContentService().getResourceCreationPackageType(loadedChildType.getId(), new AsyncCallback<PackageType>() { public void onFailure(Throwable caught) { CoreGUI.getErrorHandler().handleError( MSG.widget_resourceFactoryWizard_failedToGetType(), caught); } public void onSuccess(PackageType result) { ResourceFactoryCreateWizard wizard = new ResourceFactoryCreateWizard( parentResource, loadedChildType, result); wizard.startWizard(); } }); break; } case CONFIGURATION: { ResourceFactoryCreateWizard wizard = new ResourceFactoryCreateWizard(parentResource, loadedChildType, null); wizard.startWizard(); break; } } } }); } @Override public void cancel() { super.cancel(); if (null != this.newResourcePackageVersionId) { GWTServiceLookup.getContentService().deletePackageVersion(this.newResourcePackageVersionId, new AsyncCallback<Void>() { public void onFailure(Throwable caught) { CoreGUI.getErrorHandler().handleError(MSG.widget_resourceFactoryWizard_failedToDeleteVersion(), caught); } public void onSuccess(Void ignore) { // succeed silently } }); } } }