/* * 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.common.EntityContext; import org.rhq.core.domain.criteria.ResourceCriteria; 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.components.table.Table; 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 DriftAddDefinitionWizard extends AbstractDriftAddDefinitionWizard { private Table<?> table; protected DriftAddDefinitionWizard(EntityContext context, ResourceType type, Table<?> table) { super(context, type); this.table = table; final ArrayList<WizardStep> steps = new ArrayList<WizardStep>(); steps.add(new DriftAddDefinitionWizardInfoStep(DriftAddDefinitionWizard.this)); steps.add(new DriftAddDefinitionWizardConfigStep(DriftAddDefinitionWizard.this)); setSteps(steps); } @Override public String getWindowTitle() { switch (getEntityContext().getType()) { case SubsystemView: return MSG.view_drift_wizard_addTemplate_windowTitle(); default: return MSG.view_drift_wizard_addDef_windowTitle(); } } @Override public String getTitle() { switch (getEntityContext().getType()) { case SubsystemView: return MSG.view_drift_wizard_addTemplate_title(ResourceTypeUtility.displayName(getType())); default: return MSG.view_drift_wizard_addDef_title(ResourceTypeUtility.displayName(getType())); } } @Override public String getSubtitle() { return null; } @Override public void execute() { EntityContext context = getEntityContext(); switch (context.getType()) { case Resource: ResourceCriteria rc = new ResourceCriteria(); rc.addFilterId(context.getResourceId()); rc.fetchResourceType(true); GWTServiceLookup.getDriftService().updateDriftDefinition(context, getNewDriftDefinition(), new AsyncCallback<Void>() { public void onSuccess(Void result) { CoreGUI.getMessageCenter().notify( new Message(MSG.view_drift_wizard_addDef_success(getNewDriftDefinition().getName()), Message.Severity.Info)); getView().closeDialog(); DriftAddDefinitionWizard.this.table.refresh(); } public void onFailure(Throwable caught) { CoreGUI.getErrorHandler().handleError( MSG.view_drift_wizard_addDef_failure(getNewDriftDefinition().getName()), caught); getView().closeDialog(); } }); break; case ResourceTemplate: GWTServiceLookup.getDriftService().createTemplate(getType().getId(), getNewDriftDefinition(), new AsyncCallback<DriftDefinitionTemplate>() { public void onSuccess(DriftDefinitionTemplate result) { CoreGUI.getMessageCenter().notify( new Message(MSG.view_drift_wizard_addTemplate_success(getNewDriftDefinition().getName()), Message.Severity.Info)); getView().closeDialog(); DriftAddDefinitionWizard.this.table.refresh(); } public void onFailure(Throwable caught) { CoreGUI.getErrorHandler().handleError( MSG.view_drift_wizard_addTemplate_failure(getNewDriftDefinition().getName()), caught); getView().closeDialog(); } }); break; default: throw new IllegalArgumentException("Entity Context Type not supported [" + context + "]"); } } public static void showWizard(final EntityContext context, final Table<?> table) { assert context != null; switch (context.getType()) { case Resource: ResourceCriteria rc = new ResourceCriteria(); rc.addFilterId(context.getResourceId()); rc.fetchResourceType(true); GWTServiceLookup.getResourceService().findResourcesByCriteria(rc, new AsyncCallback<PageList<Resource>>() { public void onSuccess(PageList<Resource> result) { if (result.isEmpty()) { throw new IllegalArgumentException("Entity not found [" + context + "]"); } Resource resource = result.get(0); showWizard(context, resource.getResourceType().getId(), table); } public void onFailure(Throwable caught) { CoreGUI.getErrorHandler().handleError(MSG.view_inventory_resources_loadFailed(), caught); } }); break; case ResourceTemplate: showWizard(context, context.getResourceTypeId(), table); break; default: throw new IllegalArgumentException("Entity Context Type not supported [" + context + "]"); } } private static void showWizard(final EntityContext context, int resourceTypeId, final Table<?> table) { ResourceTypeRepository.Cache.getInstance().getResourceTypes(resourceTypeId, EnumSet.of(ResourceTypeRepository.MetadataType.driftDefinitionTemplates), new ResourceTypeRepository.TypeLoadedCallback() { public void onTypesLoaded(ResourceType type) { DriftAddDefinitionWizard wizard = new DriftAddDefinitionWizard(context, type, table); wizard.startWizard(); } }); } @Override public void cancel() { super.cancel(); } }