/* * 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.bundle.deploy; import java.util.LinkedHashMap; import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.form.DynamicForm; import com.smartgwt.client.widgets.form.fields.RadioGroupItem; import com.smartgwt.client.widgets.form.fields.SelectItem; import com.smartgwt.client.widgets.form.fields.events.ChangedEvent; import com.smartgwt.client.widgets.form.fields.events.ChangedHandler; import org.rhq.core.domain.bundle.BundleDeployment; import org.rhq.core.domain.bundle.BundleVersion; import org.rhq.core.domain.configuration.definition.ConfigurationDefinition; import org.rhq.core.domain.criteria.BundleDeploymentCriteria; import org.rhq.core.domain.criteria.BundleVersionCriteria; import org.rhq.core.domain.util.PageList; import org.rhq.coregui.client.CoreGUI; import org.rhq.coregui.client.components.form.SortedSelectItem; import org.rhq.coregui.client.components.wizard.AbstractWizardStep; import org.rhq.coregui.client.gwt.GWTServiceLookup; /** * @author Jay Shaughnessy * */ public class SelectBundleVersionStep extends AbstractWizardStep { static private final String LATEST_VERSION = "latest"; static private final String LIVE_VERSION = "live"; static private final String SELECT_VERSION = "select"; private final BundleDeployWizard wizard; private DynamicForm form; private RadioGroupItem radioGroupItem = new RadioGroupItem("options", "Deploy Options"); private SelectItem selectVersionItem = new SortedSelectItem("selectVersion", "Deployment Version"); private LinkedHashMap<String, String> radioGroupValues = new LinkedHashMap<String, String>(); private LinkedHashMap<String, String> selectVersionValues = new LinkedHashMap<String, String>(); private PageList<BundleVersion> bundleVersions = null; private BundleVersion latestVersion; private BundleVersion liveVersion; private boolean fetchingConfiguration = false; public SelectBundleVersionStep(BundleDeployWizard wizard) { this.wizard = wizard; } public String getName() { return MSG.view_bundle_deployWizard_selectVersionStep(); } public Canvas getCanvas() { fetchingConfiguration = false; if (form == null) { form = new DynamicForm(); form.setWidth100(); form.setNumCols(2); form.setColWidths("50%", "*"); setItemValues(); radioGroupItem.setRequired(true); radioGroupItem.setDisabled(true); radioGroupItem.addChangedHandler(new ChangedHandler() { public void onChanged(ChangedEvent event) { boolean isLatestVersion = LATEST_VERSION.equals(event.getValue()); if (isLatestVersion) { wizard.setBundleVersion(latestVersion); } boolean isLiveVersion = LIVE_VERSION.equals(event.getValue()); if (isLiveVersion) { wizard.setBundleVersion(liveVersion); } selectVersionItem.setDisabled(isLatestVersion || isLiveVersion); selectVersionItem.setRequired(!(isLatestVersion || isLiveVersion)); selectVersionItem.redraw(); form.markForRedraw(); } }); selectVersionItem.setDisabled(true); selectVersionItem.addChangedHandler(new ChangedHandler() { public void onChanged(ChangedEvent event) { for (BundleVersion bundleVersion : bundleVersions) { if (bundleVersion.getVersion().equals(event.getValue())) { wizard.setBundleVersion(bundleVersion); break; } } } }); form.setItems(radioGroupItem, selectVersionItem); } return form; } private void setItemValues() { BundleVersionCriteria criteria = new BundleVersionCriteria(); criteria.addFilterBundleId(wizard.getBundleId()); criteria.fetchConfigurationDefinition(false); GWTServiceLookup.getBundleService().findBundleVersionsByCriteria(criteria, // new AsyncCallback<PageList<BundleVersion>>() { public void onSuccess(PageList<BundleVersion> result) { bundleVersions = result; if (null == bundleVersions || bundleVersions.isEmpty()) { onFailure(new IllegalArgumentException("No bundle versions defined for bundle.")); } int highVersionOrder = -1; for (BundleVersion bundleVersion : result) { int versionOrder = bundleVersion.getVersionOrder(); if (versionOrder > highVersionOrder) { highVersionOrder = versionOrder; latestVersion = bundleVersion; } selectVersionValues.put(bundleVersion.getVersion(), bundleVersion.getVersion()); } BundleDeploymentCriteria criteria = new BundleDeploymentCriteria(); criteria.addFilterDestinationId(wizard.getDestination().getId()); criteria.addFilterIsLive(true); criteria.fetchBundleVersion(true); criteria.fetchConfiguration(true); GWTServiceLookup.getBundleService().findBundleDeploymentsByCriteria(criteria, // new AsyncCallback<PageList<BundleDeployment>>() { public void onSuccess(PageList<BundleDeployment> result) { radioGroupValues.put(LATEST_VERSION, MSG.view_bundle_deployWizard_selectVersion_latest(latestVersion.getVersion())); if (!result.isEmpty()) { BundleDeployment liveDeployment = result.get(0); // make sure the liveDeployment record has a bundleversion with configdef loaded BundleVersion liveBundleVersion = liveDeployment.getBundleVersion(); int i = bundleVersions.indexOf(liveBundleVersion); liveDeployment.setBundleVersion(bundleVersions.get(i)); wizard.setLiveDeployment(liveDeployment); liveVersion = liveDeployment.getBundleVersion(); radioGroupValues.put(LIVE_VERSION, MSG.view_bundle_deployWizard_selectVersion_live(liveVersion.getVersion())); } radioGroupValues.put(SELECT_VERSION, MSG.view_bundle_deployWizard_selectVersion_select()); selectVersionItem.setValueMap(selectVersionValues); selectVersionItem.setValue(latestVersion.getVersion()); selectVersionItem.redraw(); radioGroupItem.setValueMap(radioGroupValues); radioGroupItem.setValue(LATEST_VERSION); wizard.setBundleVersion(latestVersion); radioGroupItem.setDisabled(false); radioGroupItem.redraw(); form.markForRedraw(); } public void onFailure(Throwable caught) { CoreGUI.getErrorHandler().handleError(MSG.view_bundle_deployWizard_error_11(), caught); } }); } public void onFailure(Throwable caught) { CoreGUI.getErrorHandler().handleError(MSG.view_bundle_deployWizard_error_12(), caught); } }); } public boolean nextPage() { if (form.validate() && (null != this.wizard.getBundleVersion())) { if (this.wizard.getBundleVersion().getConfigurationDefinition().getName() != null) { return true; } else if(fetchingConfiguration == false) { fetchingConfiguration = true; BundleVersionCriteria criteria = new BundleVersionCriteria(); criteria.addFilterBundleId(wizard.getBundleId()); criteria.fetchConfigurationDefinition(true); criteria.addFilterVersion(wizard.getBundleVersion().getVersion()); GWTServiceLookup.getBundleService().findBundleVersionsByCriteria(criteria, new AsyncCallback<PageList<BundleVersion>>() { @Override public void onFailure(Throwable caught) { CoreGUI.getErrorHandler().handleError(caught.getMessage(), caught); fetchingConfiguration = false; } @Override public void onSuccess(PageList<BundleVersion> result) { if (result.size() == 0) { CoreGUI.getErrorHandler().handleError("Couldn't find requested Bundle version."); } else { ConfigurationDefinition configDef = result.get(0).getConfigurationDefinition(); wizard.getBundleVersion().setConfigurationDefinition(configDef); wizard.getView().incrementStep(); } fetchingConfiguration = false; } }); } else { this.wizard.getView().showMessage("Please wait while loading the Bundle configuration."); } } return false; } }