modules/core/domain/src/main/java/org/rhq/core/domain/criteria/BundleFileCriteria.java | 6
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/AbstractBundleCreateWizard.java | 13 +
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleCreateWizard.java | 1
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleInfoStep.java | 9 +
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleSummaryStep.java | 87 ++++++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleUploadDataStep.java | 33 +--
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/wizard/WizardView.java | 38 +++-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/BundleGWTService.java | 6
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/operation/create/OperationParametersStep.java | 8
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/operation/create/OperationSchedulingStep.java | 66 ++-----
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/factory/ConfigurationStep.java | 13 -
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/factory/ConfigurationTemplateStep.java | 10 -
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/BundleGWTServiceImpl.java | 14 -
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java | 27 ++-
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerRemote.java | 5
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/webservices/WebservicesManagerBean.java | 4
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/bundle/BundleManagerBeanTest.java | 45 +++++
17 files changed, 255 insertions(+), 130 deletions(-)
New commits:
commit f799588e682c83802916a9cd8f117265402837d4
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Wed Mar 24 00:49:05 2010 -0400
get end-to-end bundle create wizard to work. still need to pretty up the upload file step, but this commit has end-to-end working with the ability to cancel at any point in the wizard
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/AbstractBundleCreateWizard.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/AbstractBundleCreateWizard.java
index 01e2598..c33e4d5 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/AbstractBundleCreateWizard.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/AbstractBundleCreateWizard.java
@@ -18,6 +18,8 @@
*/
package org.rhq.enterprise.gui.coregui.client.bundle.create;
+import java.util.HashMap;
+
import com.google.gwt.user.client.rpc.AsyncCallback;
import org.rhq.core.domain.bundle.BundleType;
@@ -38,6 +40,7 @@ public abstract class AbstractBundleCreateWizard extends AbstractBundleWizard {
private String bundleDescription;
private String recipe;
private BundleVersion bundleVersion;
+ private HashMap<String, Boolean> allBundleFilesStatus; // bundle file names with their upload status (true=they were uploaded)
public BundleType getBundleType() {
return bundleType;
@@ -87,12 +90,20 @@ public abstract class AbstractBundleCreateWizard extends AbstractBundleWizard {
this.bundleVersion = bv;
}
+ public HashMap<String, Boolean> getAllBundleFilesStatus() {
+ return allBundleFilesStatus;
+ }
+
+ public void setAllBundleFilesStatus(HashMap<String, Boolean> allBundleFilesStatus) {
+ this.allBundleFilesStatus = allBundleFilesStatus;
+ }
+
public void cancel() {
final BundleVersion bv = getBundleVersion();
if (bv != null) {
// the user must have created it already after verification step, delete it
BundleGWTServiceAsync bundleServer = GWTServiceLookup.getBundleService();
- bundleServer.deleteBundleVersion(bv.getId(), new AsyncCallback<Void>() {
+ bundleServer.deleteBundleVersion(bv.getId(), true, new AsyncCallback<Void>() {
public void onSuccess(Void result) {
CoreGUI.getMessageCenter().notify(
new Message("Canceled bundle [" + bv.getName() + "] version [" + bv.getVersion() + "]",
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleCreateWizard.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleCreateWizard.java
index e76dc7f..43f7407 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleCreateWizard.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleCreateWizard.java
@@ -32,6 +32,7 @@ public class BundleCreateWizard extends AbstractBundleCreateWizard {
steps.add(new BundleInfoStep(this));
steps.add(new BundleUploadRecipeStep(this));
steps.add(new BundleUploadDataStep(this));
+ steps.add(new BundleSummaryStep(this));
setSteps(steps);
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleInfoStep.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleInfoStep.java
index 2bfc93d..58c4e66 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleInfoStep.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleInfoStep.java
@@ -38,6 +38,8 @@ import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.components.wizard.WizardStep;
import org.rhq.enterprise.gui.coregui.client.gwt.BundleGWTServiceAsync;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.util.message.Message;
+import org.rhq.enterprise.gui.coregui.client.util.message.Message.Severity;
/**
* @author John Mazzitelli
@@ -128,6 +130,13 @@ public class BundleInfoStep implements WizardStep {
if (wizard.getBundleType() == null) {
bundleServer.getAllBundleTypes(new AsyncCallback<ArrayList<BundleType>>() {
public void onSuccess(ArrayList<BundleType> result) {
+ if (result == null || result.size() == 0) {
+ wizard.setBundleType(null);
+ CoreGUI.getMessageCenter().notify(
+ new Message("No bundle types are supported", Severity.Error));
+ return;
+ }
+
for (BundleType bundleType : result) {
knownBundleTypes.put(bundleType.getName(), bundleType);
if (wizard.getBundleType() == null) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleSummaryStep.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleSummaryStep.java
new file mode 100644
index 0000000..bddf61b
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleSummaryStep.java
@@ -0,0 +1,87 @@
+/*
+ * 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.enterprise.gui.coregui.client.bundle.create;
+
+import com.smartgwt.client.types.Alignment;
+import com.smartgwt.client.types.TitleOrientation;
+import com.smartgwt.client.widgets.Canvas;
+import com.smartgwt.client.widgets.form.DynamicForm;
+import com.smartgwt.client.widgets.form.fields.TextAreaItem;
+import com.smartgwt.client.widgets.form.fields.TextItem;
+
+import org.rhq.enterprise.gui.coregui.client.components.wizard.WizardStep;
+
+/**
+ * @author John Mazzitelli
+ */
+public class BundleSummaryStep implements WizardStep {
+
+ private DynamicForm form;
+ private final AbstractBundleCreateWizard wizard;
+
+ public BundleSummaryStep(AbstractBundleCreateWizard bundleCreationWizard) {
+ this.wizard = bundleCreationWizard;
+ }
+
+ public Canvas getCanvas() {
+ TextItem nameTextItem;
+ TextItem versionTextItem;
+ TextAreaItem descriptionTextAreaItem;
+ TextItem bundleTypeTextItem;
+
+ form = new DynamicForm();
+ form.setPadding(20);
+ form.setWidth100();
+ form.setNumCols(2);
+
+ bundleTypeTextItem = new TextItem("bundleTypeItem", "Bundle Type");
+ bundleTypeTextItem.setValue(wizard.getBundleType().getName());
+ bundleTypeTextItem.setDisabled(true);
+ bundleTypeTextItem.setTitleAlign(Alignment.LEFT);
+
+ nameTextItem = new TextItem("name", "Name");
+ nameTextItem.setValue(wizard.getBundleName());
+ nameTextItem.setDisabled(true);
+ nameTextItem.setTitleAlign(Alignment.LEFT);
+
+ versionTextItem = new TextItem("version", "Version");
+ versionTextItem.setValue(wizard.getBundleVersionString());
+ versionTextItem.setDisabled(true);
+ versionTextItem.setTitleAlign(Alignment.LEFT);
+
+ descriptionTextAreaItem = new TextAreaItem("description", "Description");
+ descriptionTextAreaItem.setValue(wizard.getBundleDescription());
+ descriptionTextAreaItem.setDisabled(true);
+ descriptionTextAreaItem.setTitleOrientation(TitleOrientation.TOP);
+ descriptionTextAreaItem.setColSpan(2);
+ descriptionTextAreaItem.setWidth(300);
+
+ form.setItems(bundleTypeTextItem, nameTextItem, versionTextItem, descriptionTextAreaItem);
+
+ return form;
+ }
+
+ public boolean nextPage() {
+ return true; // this is the last page, we are done
+ }
+
+ public String getName() {
+ return "Summary";
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleUploadDataStep.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleUploadDataStep.java
index 2a6a7c5..793cd5a 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleUploadDataStep.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleUploadDataStep.java
@@ -46,7 +46,6 @@ public class BundleUploadDataStep implements WizardStep {
private final AbstractBundleCreateWizard wizard;
private final BundleGWTServiceAsync bundleServer = GWTServiceLookup.getBundleService();
private DynamicForm form;
- private Map<String, Boolean> allFilesStatus;
public BundleUploadDataStep(AbstractBundleCreateWizard bundleCreationWizard) {
this.wizard = bundleCreationWizard;
@@ -63,14 +62,12 @@ public class BundleUploadDataStep implements WizardStep {
new AsyncCallback<HashMap<String, Boolean>>() {
public void onSuccess(HashMap<String, Boolean> result) {
- allFilesStatus = result;
+ wizard.setAllBundleFilesStatus(result);
prepareForm(layout);
- enableNextButtonWhenAppropriate();
}
public void onFailure(Throwable caught) {
- allFilesStatus = null;
- enableNextButtonWhenAppropriate();
+ wizard.setAllBundleFilesStatus(null);
CoreGUI.getErrorHandler().handleError("Cannot obtain bundle file information from server", caught);
}
});
@@ -80,33 +77,33 @@ public class BundleUploadDataStep implements WizardStep {
}
public boolean nextPage() {
- return true; // TODO: Implement this method.
+ return isFinished();
}
public String getName() {
return "Upload Bundle Files";
}
- public boolean isNextEnabled() {
- if (this.allFilesStatus == null) {
+ private boolean isFinished() {
+ if (wizard.getAllBundleFilesStatus() == null) {
return false;
}
- if (this.allFilesStatus.containsValue(Boolean.FALSE)) {
+ if (wizard.getAllBundleFilesStatus().containsValue(Boolean.FALSE)) {
return false;
}
return true;
}
- public boolean isPreviousEnabled() {
- return true;
- }
+ private void prepareForm(VLayout layout) {
+ // if there are no files to upload, immediately skip this step
+ final HashMap<String, Boolean> allFilesStatus = wizard.getAllBundleFilesStatus();
- private void enableNextButtonWhenAppropriate() {
- this.wizard.getView().getNextButton().setDisabled(!isNextEnabled());
- }
+ if (allFilesStatus != null && allFilesStatus.size() == 0) {
+ // TODO: do something to tell the user they don't have to do anything for this step
+ return;
+ }
- private void prepareForm(VLayout layout) {
- for (Map.Entry<String, Boolean> entry : this.allFilesStatus.entrySet()) {
+ for (Map.Entry<String, Boolean> entry : allFilesStatus.entrySet()) {
HLayout formLayout = new HLayout();
layout.addMember(formLayout);
@@ -133,7 +130,6 @@ public class BundleUploadDataStep implements WizardStep {
CoreGUI.getMessageCenter().notify(
new Message("Failed to upload bundle file", results, Message.Severity.Error));
}
- enableNextButtonWhenAppropriate();
}
});
uploadForm.addFormSubmitFailedHandler(new FormSubmitFailedHandler() {
@@ -142,7 +138,6 @@ public class BundleUploadDataStep implements WizardStep {
allFilesStatus.put(uploadForm.getName(), Boolean.FALSE);
CoreGUI.getMessageCenter().notify(
new Message("Failed to upload file", null, Message.Severity.Error));
- enableNextButtonWhenAppropriate();
}
});
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/BundleGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/BundleGWTService.java
index c257909..5743653 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/BundleGWTService.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/BundleGWTService.java
@@ -47,9 +47,9 @@ public interface BundleGWTService extends RemoteService {
BundleVersion createBundleVersion(int bundleId, String name, String version, String recipe) throws Exception;
- void deleteBundle(int bundleId);
+ void deleteBundle(int bundleId) throws Exception;
- void deleteBundleVersion(int bundleVersionId);
+ void deleteBundleVersion(int bundleVersionId, boolean deleteBundleIfEmpty) throws Exception;
PageList<Bundle> findBundlesByCriteria(BundleCriteria criteria) throws Exception;
@@ -60,7 +60,7 @@ public interface BundleGWTService extends RemoteService {
HashMap<String, Boolean> getAllBundleVersionFilenames(int bundleVersionId) throws Exception;
- ArrayList<BundleType> getAllBundleTypes();
+ ArrayList<BundleType> getAllBundleTypes() throws Exception;
BundleDeployment scheduleBundleDeployment(int bundleDeployDefinitionId, int resourceId) throws Exception;
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/BundleGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/BundleGWTServiceImpl.java
index 25eba1c..5473a94 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/BundleGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/BundleGWTServiceImpl.java
@@ -89,7 +89,7 @@ public class BundleGWTServiceImpl extends AbstractGWTServiceImpl implements Bund
return SerialUtility.prepare(results, "createBundleVersion");
}
- public void deleteBundle(int bundleId) {
+ public void deleteBundle(int bundleId) throws Exception {
try {
bundleManager.deleteBundle(getSessionSubject(), bundleId);
} catch (Exception e) {
@@ -97,15 +97,15 @@ public class BundleGWTServiceImpl extends AbstractGWTServiceImpl implements Bund
}
}
- public void deleteBundleVersion(int bundleVersionId) {
+ public void deleteBundleVersion(int bundleVersionId, boolean deleteBundleIfEmpty) throws Exception {
try {
- bundleManager.deleteBundleVersion(getSessionSubject(), bundleVersionId);
+ bundleManager.deleteBundleVersion(getSessionSubject(), bundleVersionId, deleteBundleIfEmpty);
} catch (Exception e) {
throw new RuntimeException(ThrowableUtil.getAllMessages(e));
}
}
- public PageList<Bundle> findBundlesByCriteria(BundleCriteria criteria) {
+ public PageList<Bundle> findBundlesByCriteria(BundleCriteria criteria) throws Exception {
try {
PageList<Bundle> results = bundleManager.findBundlesByCriteria(getSessionSubject(), criteria);
return SerialUtility.prepare(results, "findBundlesByCriteria");
@@ -114,7 +114,7 @@ public class BundleGWTServiceImpl extends AbstractGWTServiceImpl implements Bund
}
}
- public PageList<BundleVersion> findBundleVersionsByCriteria(BundleVersionCriteria criteria) {
+ public PageList<BundleVersion> findBundleVersionsByCriteria(BundleVersionCriteria criteria) throws Exception {
try {
PageList<BundleVersion> results = bundleManager.findBundleVersionsByCriteria(getSessionSubject(), criteria);
return SerialUtility.prepare(results, "findBundleVersionsByCriteria");
@@ -124,7 +124,7 @@ public class BundleGWTServiceImpl extends AbstractGWTServiceImpl implements Bund
}
public PageList<BundleWithLatestVersionComposite> findBundlesWithLastestVersionCompositesByCriteria(
- BundleCriteria criteria) {
+ BundleCriteria criteria) throws Exception {
try {
PageList<BundleWithLatestVersionComposite> results;
results = bundleManager.findBundlesWithLastestVersionCompositesByCriteria(getSessionSubject(), criteria);
@@ -134,7 +134,7 @@ public class BundleGWTServiceImpl extends AbstractGWTServiceImpl implements Bund
}
}
- public ArrayList<BundleType> getAllBundleTypes() {
+ public ArrayList<BundleType> getAllBundleTypes() throws Exception {
try {
ArrayList<BundleType> bundleTypes = new ArrayList<BundleType>();
bundleTypes.addAll(bundleManager.getAllBundleTypes(getSessionSubject()));
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
index 440eee6..e52e3b6 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
@@ -674,7 +674,7 @@ public class BundleManagerBean implements BundleManagerLocal, BundleManagerRemot
}
for (BundleVersion bv : bundle.getBundleVersions()) {
- bundleManager.deleteBundleVersion(subject, bv.getId());
+ bundleManager.deleteBundleVersion(subject, bv.getId(), false);
}
// we need to whack the Repo once the Bundle no longer refers to it
@@ -687,23 +687,28 @@ public class BundleManagerBean implements BundleManagerLocal, BundleManagerRemot
}
@RequiredPermission(Permission.MANAGE_INVENTORY)
- public void deleteBundleVersion(Subject subject, int bundleVersionId) throws Exception {
+ public void deleteBundleVersion(Subject subject, int bundleVersionId, boolean deleteBundleIfEmpty) throws Exception {
BundleVersion bundleVersion = this.entityManager.find(BundleVersion.class, bundleVersionId);
if (null == bundleVersion) {
return;
}
- int bundleId = bundleVersion.getBundle().getId();
+ int bundleId = 0;
+ if (deleteBundleIfEmpty) {
+ bundleId = bundleVersion.getBundle().getId(); // note that we lazy load this if we never plan to delete the bundle
+ }
// remove the bundle version - cascade remove the deploy defs which will cascade remove the deployments.
this.entityManager.remove(bundleVersion);
- this.entityManager.flush();
- Query q = entityManager.createNamedQuery(BundleVersion.QUERY_FIND_VERSION_INFO_BY_BUNDLE_ID);
- q.setParameter("bundleId", bundleId);
- if (q.getResultList().size() == 0) {
- // there are no more bundle versions left, blow away the bundle and all repo/bundle files associated with it
- deleteBundle(subject, bundleId);
+ if (deleteBundleIfEmpty) {
+ this.entityManager.flush();
+ Query q = entityManager.createNamedQuery(BundleVersion.QUERY_FIND_VERSION_INFO_BY_BUNDLE_ID);
+ q.setParameter("bundleId", bundleId);
+ if (q.getResultList().size() == 0) {
+ // there are no more bundle versions left, blow away the bundle and all repo/bundle files associated with it
+ deleteBundle(subject, bundleId);
+ }
}
return;
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerRemote.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerRemote.java
index b3a84ff..efde215 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerRemote.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerRemote.java
@@ -204,12 +204,15 @@ public interface BundleManagerRemote {
*
* @param subject
* @param bundleVersionId
+ * @param deleteBundleIfEmpty if <code>true</code> and if this method deletes the last bundle version for its
+ * bundle, then that bundle entity itself will be completely purged
* @throws Exception if any part of the removal fails.
*/
@WebMethod
void deleteBundleVersion( //
@WebParam(name = "subject") Subject subject, //
- @WebParam(name = "bundleVersionId") int bundleVersionId) throws Exception;
+ @WebParam(name = "bundleVersionId") int bundleVersionId, //
+ @WebParam(name = "deleteBundleIfEmpty") boolean deleteBundleIfEmpty) throws Exception;
@WebMethod
PageList<Bundle> findBundlesByCriteria( //
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/webservices/WebservicesManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/webservices/WebservicesManagerBean.java
index 6521e5b..17d3c96 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/webservices/WebservicesManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/webservices/WebservicesManagerBean.java
@@ -375,8 +375,8 @@ public class WebservicesManagerBean implements WebservicesRemote {
bundleManager.deleteBundle(subject, bundleId);
}
- public void deleteBundleVersion(Subject subject, int bundleVersionId) throws Exception {
- bundleManager.deleteBundleVersion(subject, bundleVersionId);
+ public void deleteBundleVersion(Subject subject, int bundleVersionId, boolean deleteBundleIfEmpty) throws Exception {
+ bundleManager.deleteBundleVersion(subject, bundleVersionId, deleteBundleIfEmpty);
}
public PageList<BundleDeployDefinition> findBundleDeployDefinitionsByCriteria(Subject subject,
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/bundle/BundleManagerBeanTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/bundle/BundleManagerBeanTest.java
index 833d844..0d99b17 100644
--- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/bundle/BundleManagerBeanTest.java
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/bundle/BundleManagerBeanTest.java
@@ -295,7 +295,7 @@ public class BundleManagerBeanTest extends UpdateSubsytemTestBase {
BundleCriteria bCriteria = new BundleCriteria();
// delete the first one - this deletes the BV but the bundle should remain intact
- bundleManager.deleteBundleVersion(overlord, bv2.getId());
+ bundleManager.deleteBundleVersion(overlord, bv2.getId(), true);
bvCriteria.addFilterId(bv2.getId());
PageList<BundleVersion> bvResults = bundleManager.findBundleVersionsByCriteria(overlord, bvCriteria);
assert bvResults.size() == 0;
@@ -304,7 +304,7 @@ public class BundleManagerBeanTest extends UpdateSubsytemTestBase {
assert bResults.size() == 1 : "Should not have deleted bundle yet, 1 version still exists";
// delete the second one - this deletes last BV thus the bundle should also get deleted
- bundleManager.deleteBundleVersion(overlord, bv1.getId());
+ bundleManager.deleteBundleVersion(overlord, bv1.getId(), true);
bvCriteria.addFilterId(bv1.getId());
bvResults = bundleManager.findBundleVersionsByCriteria(overlord, bvCriteria);
assert bvResults.size() == 0;
commit 0b503904be650eae0418dd646a617b4fed1c9e9e
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Wed Mar 24 00:48:19 2010 -0400
get the wizard framework to know when the wizard is finished and to close the dialog when it is
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/wizard/WizardView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/wizard/WizardView.java
index b30e6a7..e0f3f92 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/wizard/WizardView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/wizard/WizardView.java
@@ -125,24 +125,23 @@ public class WizardView extends VLayout {
cancelButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent clickEvent) {
wizard.cancel();
- wizardWindow.destroy();
+ closeDialog();
}
});
previousButton = new IButton("Previous");
previousButton.setDisabled(true);
previousButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent clickEvent) {
- setStep(currentStep - 1);
+ decrementStep();
}
});
nextButton = new IButton("Next");
- nextButton.setDisabled(true);
nextButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent clickEvent) {
WizardStep step = wizard.getSteps().get(currentStep);
if (step.nextPage()) {
- setStep(currentStep + 1);
+ incrementStep();
}
}
});
@@ -154,18 +153,31 @@ public class WizardView extends VLayout {
}
- public void setStep(int stepIndex) {
+ private void setStep(int stepIndex) {
currentStep = stepIndex;
- stepLabel.setContents("Step " + (stepIndex + 1) + " of " + wizard.getSteps().size());
- WizardStep step = wizard.getSteps().get(currentStep);
+ List<WizardStep> wizardSteps = wizard.getSteps();
+
+ // determine if we are "finished" - that is, going past our last step
+ if (currentStep >= wizardSteps.size()) {
+ closeDialog();
+ return;
+ }
+
+ stepLabel.setContents("Step " + (stepIndex + 1) + " of " + wizardSteps.size());
+
+ WizardStep step = wizardSteps.get(currentStep);
stepTitleLabel.setContents(step.getName());
previousButton.setDisabled(stepIndex == 0);
- boolean last = (stepIndex == (wizard.getSteps().size() - 1));
- nextButton.setDisabled(last);
+ boolean last = (stepIndex == (wizardSteps.size() - 1));
+ if (last) {
+ nextButton.setTitle("Finish");
+ } else {
+ nextButton.setTitle("Next");
+ }
for (IButton button : customButtons) {
buttonBar.removeMember(button);
@@ -182,7 +194,7 @@ public class WizardView extends VLayout {
if (currentCanvas != null) {
contentLayout.removeMember(currentCanvas);
}
- currentCanvas = wizard.getSteps().get(currentStep).getCanvas();
+ currentCanvas = wizardSteps.get(currentStep).getCanvas();
contentLayout.addMember(currentCanvas);
markForRedraw();
@@ -201,7 +213,7 @@ public class WizardView extends VLayout {
wizardWindow.addCloseClickHandler(new CloseClickHandler() {
public void onCloseClick(CloseClientEvent closeClientEvent) {
wizard.cancel();
- wizardWindow.destroy();
+ closeDialog();
}
});
wizardWindow.addItem(this);
@@ -232,4 +244,8 @@ public class WizardView extends VLayout {
public void incrementStep() {
setStep(currentStep + 1);
}
+
+ public void decrementStep() {
+ setStep(currentStep - 1);
+ }
}
commit b39be42983f7a27932ff270c7ee5021e2ef38338
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Tue Mar 23 23:48:39 2010 -0400
remove the obsolete/unused isNext/PreviousEnabled methods from the steps classes
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/operation/create/OperationParametersStep.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/operation/create/OperationParametersStep.java
index 6ae3921..42de0a4 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/operation/create/OperationParametersStep.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/operation/create/OperationParametersStep.java
@@ -67,12 +67,4 @@ public class OperationParametersStep implements WizardStep {
public Configuration getParameterConfiguration() {
return configurationEditor != null ? configurationEditor.getConfiguration() : null;
}
-
- public boolean isNextEnabled() {
- return true;
- }
-
- public boolean isPreviousEnabled() {
- return true;
- }
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/operation/create/OperationSchedulingStep.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/operation/create/OperationSchedulingStep.java
index e923b08..c1546a8 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/operation/create/OperationSchedulingStep.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/operation/create/OperationSchedulingStep.java
@@ -42,7 +42,7 @@ import com.smartgwt.client.widgets.form.fields.SpacerItem;
import com.smartgwt.client.widgets.form.fields.StaticTextItem;
import com.smartgwt.client.widgets.form.fields.TimeItem;
import com.smartgwt.client.widgets.form.validator.CustomValidator;
-import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+
import org.rhq.enterprise.gui.coregui.client.components.wizard.WizardStep;
/**
@@ -66,12 +66,12 @@ public class OperationSchedulingStep implements WizardStep, ItemChangedHandler {
form.setWidth100();
form.setPadding(10);
form.setNumCols(3);
-// form.setColWidths("15%", "35%", "15%", "*");
+ // form.setColWidths("15%", "35%", "15%", "*");
form.setValidateOnChange(true);
final RadioGroupItem start = new RadioGroupItem("start", "Start");
start.setColSpan(3);
- start.setValueMap(enumValueMap(ExecutionSchedule.Start.class)); // "Immediately", "Future"
+ start.setValueMap(enumValueMap(ExecutionSchedule.Start.class)); // "Immediately", "Future"
start.setRedrawOnChange(true);
start.setValue("Immediately");
@@ -84,7 +84,7 @@ public class OperationSchedulingStep implements WizardStep, ItemChangedHandler {
});
RadioGroupItem recurr = new RadioGroupItem("recurr", "Recurrence");
- recurr.setValueMap(enumValueMap(ExecutionSchedule.Recurr.class)); // "Once", "EveryNMinutes", "Hourly", "Daily", "Weekly", "Monthly");
+ recurr.setValueMap(enumValueMap(ExecutionSchedule.Recurr.class)); // "Once", "EveryNMinutes", "Hourly", "Daily", "Weekly", "Monthly");
recurr.setRedrawOnChange(true);
recurr.setValue("Once");
recurr.setShowIfCondition(new FormItemIfFunction() {
@@ -93,26 +93,23 @@ public class OperationSchedulingStep implements WizardStep, ItemChangedHandler {
}
});
-
-
CanvasItem onceForm = new CanvasItem("once", "Run At");
onceForm.setShowTitle(false);
onceForm.setCanvas(getOnceForm());
onceForm.setShowIfCondition(new FormItemIfFunction() {
public boolean execute(FormItem formItem, Object o, DynamicForm dynamicForm) {
- return !"Immediately".equals(form.getValueAsString("start")) &&
- ExecutionSchedule.Recurr.Once.name().equals(form.getValueAsString("recurr"));
+ return !"Immediately".equals(form.getValueAsString("start"))
+ && ExecutionSchedule.Recurr.Once.name().equals(form.getValueAsString("recurr"));
}
});
-
CanvasItem everyNMinuteForm = new CanvasItem("everyNMinutesForm", "NMinutes");
everyNMinuteForm.setShowTitle(false);
everyNMinuteForm.setCanvas(getEveryNMinutesForm());
everyNMinuteForm.setShowIfCondition(new FormItemIfFunction() {
public boolean execute(FormItem formItem, Object o, DynamicForm dynamicForm) {
- return !"Immediately".equals(form.getValueAsString("start")) &&
- ExecutionSchedule.Recurr.EveryNMinutes.name().equals(form.getValueAsString("recurr"));
+ return !"Immediately".equals(form.getValueAsString("start"))
+ && ExecutionSchedule.Recurr.EveryNMinutes.name().equals(form.getValueAsString("recurr"));
}
});
@@ -121,8 +118,8 @@ public class OperationSchedulingStep implements WizardStep, ItemChangedHandler {
hourlyForm.setCanvas(getHourlyForm());
hourlyForm.setShowIfCondition(new FormItemIfFunction() {
public boolean execute(FormItem formItem, Object o, DynamicForm dynamicForm) {
- return !"Immediately".equals(form.getValueAsString("start")) &&
- ExecutionSchedule.Recurr.Hourly.name().equals(form.getValueAsString("recurr"));
+ return !"Immediately".equals(form.getValueAsString("start"))
+ && ExecutionSchedule.Recurr.Hourly.name().equals(form.getValueAsString("recurr"));
}
});
@@ -136,7 +133,6 @@ public class OperationSchedulingStep implements WizardStep, ItemChangedHandler {
}
});
-
CanvasItem weeklyForm = new CanvasItem("weekly", "Weekly");
weeklyForm.setShowTitle(false);
weeklyForm.setCanvas(getWeeklyForm());
@@ -212,12 +208,8 @@ public class OperationSchedulingStep implements WizardStep, ItemChangedHandler {
messageItem.setShowTitle(false);
messageItem.setCellStyle("HeaderLabel");
- form.setItems(start, scheduleHeader, recurr,
- onceForm, everyNMinuteForm, hourlyForm, dailyForm, weeklyForm, monthlyForm,
- rangeHeader, startDate, end, endDate,
- new SpacerItem(), messageItem);
-
-
+ form.setItems(start, scheduleHeader, recurr, onceForm, everyNMinuteForm, hourlyForm, dailyForm, weeklyForm,
+ monthlyForm, rangeHeader, startDate, end, endDate, new SpacerItem(), messageItem);
form.addItemChangedHandler(this);
}
@@ -255,7 +247,6 @@ public class OperationSchedulingStep implements WizardStep, ItemChangedHandler {
form.setGroupTitle("Every N Minutes");
form.addItemChangedHandler(this);
-
form.setWrapItemTitles(false);
form.setNumCols(2);
@@ -276,7 +267,6 @@ public class OperationSchedulingStep implements WizardStep, ItemChangedHandler {
form.setGroupTitle("Hourly At");
form.addItemChangedHandler(this);
-
form.setWrapItemTitles(false);
form.setNumCols(2);
@@ -289,7 +279,6 @@ public class OperationSchedulingStep implements WizardStep, ItemChangedHandler {
return form;
}
-
private DynamicForm getDailyForm() {
DynamicForm form = new DynamicForm();
form.setValuesManager(valuesManager);
@@ -308,7 +297,6 @@ public class OperationSchedulingStep implements WizardStep, ItemChangedHandler {
return form;
}
-
private DynamicForm getWeeklyForm() {
DynamicForm form = new DynamicForm();
form.setValuesManager(valuesManager);
@@ -317,7 +305,6 @@ public class OperationSchedulingStep implements WizardStep, ItemChangedHandler {
form.setGroupTitle("Weekly On");
form.addItemChangedHandler(this);
-
form.setWrapItemTitles(false);
TimeItem timeOfDay = new TimeItem("timeOfDay", "Time Of Day");
@@ -347,7 +334,6 @@ public class OperationSchedulingStep implements WizardStep, ItemChangedHandler {
form.setGroupTitle("Monthly On");
form.addItemChangedHandler(this);
-
IntegerItem dayItem = new IntegerItem();
dayItem.setName("dayOfMonth");
dayItem.setTitle("Day of Month");
@@ -370,21 +356,11 @@ public class OperationSchedulingStep implements WizardStep, ItemChangedHandler {
return "Schedule";
}
- public boolean isNextEnabled() {
- return true;
- }
-
- public boolean isPreviousEnabled() {
- return true;
- }
-
public void onItemChanged(ItemChangedEvent itemChangeEvent) {
-
executionSchedule.setStart(ExecutionSchedule.Start.valueOf(valuesManager.getValueAsString("start")));
executionSchedule.setRecurr(ExecutionSchedule.Recurr.valueOf(valuesManager.getValueAsString("recurr")));
-
Date onceDate = (Date) valuesManager.getValues().get("onceStartDate");
executionSchedule.setOnceDateTime(onceDate);
@@ -394,7 +370,6 @@ public class OperationSchedulingStep implements WizardStep, ItemChangedHandler {
executionSchedule.setTimeOfDay((Date) valuesManager.getValues().get("timeOfDay"));
-
HashSet<ExecutionSchedule.DayOfWeek> selectedDays = new HashSet<ExecutionSchedule.DayOfWeek>(); //.noneOf(ExecutionSchedule.DayOfWeek.class);
for (ExecutionSchedule.DayOfWeek d : EnumSet.allOf(ExecutionSchedule.DayOfWeek.class)) {
if (valuesManager.getValues().containsKey(d.name())) {
@@ -403,29 +378,24 @@ public class OperationSchedulingStep implements WizardStep, ItemChangedHandler {
}
executionSchedule.setDaysOfWeek(selectedDays);
-
-
executionSchedule.setDayOfMonth(Integer.parseInt(valuesManager.getValueAsString("dayOfMonth")));
-
-
- executionSchedule.setStartDate((Date)valuesManager.getValues().get("startDate"));
+ executionSchedule.setStartDate((Date) valuesManager.getValues().get("startDate"));
if ("Never".equals(valuesManager.getValues().get("endType"))) {
executionSchedule.setEndDate(null);
} else {
- executionSchedule.setEndDate((Date)valuesManager.getValues().get("endDate"));
+ executionSchedule.setEndDate((Date) valuesManager.getValues().get("endDate"));
}
- form.setValue("message",executionSchedule.getMessage());
+ form.setValue("message", executionSchedule.getMessage());
}
-
- private LinkedHashMap<String,String> enumValueMap(Class<? extends Enum> e) {
- LinkedHashMap<String,String> map = new LinkedHashMap<String, String>();
+ private LinkedHashMap<String, String> enumValueMap(Class<? extends Enum> e) {
+ LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();
for (Object o : EnumSet.allOf(e)) {
Enum v = (Enum) o;
- map.put(v.name(),v.name()); // localize
+ map.put(v.name(), v.name()); // localize
}
return map;
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/factory/ConfigurationStep.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/factory/ConfigurationStep.java
index 33ddebe..0d466d3 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/factory/ConfigurationStep.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/factory/ConfigurationStep.java
@@ -18,15 +18,10 @@
*/
package org.rhq.enterprise.gui.coregui.client.inventory.resource.factory;
-import java.util.Map;
-
import com.smartgwt.client.widgets.Canvas;
-import com.smartgwt.client.widgets.form.DynamicForm;
-import com.smartgwt.client.widgets.form.fields.SelectItem;
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.enterprise.gui.coregui.client.components.configuration.ConfigurationEditor;
import org.rhq.enterprise.gui.coregui.client.components.wizard.WizardStep;
@@ -61,14 +56,6 @@ public class ConfigurationStep implements WizardStep {
return "Edit Configuration";
}
- public boolean isPreviousEnabled() {
- return true;
- }
-
- public boolean isNextEnabled() {
- return false;
- }
-
public Configuration getConfiguration() {
return editor.getConfiguration();
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/factory/ConfigurationTemplateStep.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/factory/ConfigurationTemplateStep.java
index eee603a..a9182ee 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/factory/ConfigurationTemplateStep.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/factory/ConfigurationTemplateStep.java
@@ -51,7 +51,7 @@ public class ConfigurationTemplateStep implements WizardStep {
TextItem nameItem = new TextItem("resourceName", "Resource Name");
nameItem.setRequired(true);
- SelectItem templateSelect = new SelectItem("template","Template");
+ SelectItem templateSelect = new SelectItem("template", "Template");
ConfigurationDefinition definition = wizard.getConfigurationDefinition();
@@ -77,14 +77,6 @@ public class ConfigurationTemplateStep implements WizardStep {
return "Select a Template";
}
- public boolean isPreviousEnabled() {
- return false;
- }
-
- public boolean isNextEnabled() {
- return true;
- }
-
public Configuration getConfiguration() {
return templates.get(form.getValueAsString("template")).createConfiguration();
}
commit 24b38a17ceca586ad9df9bf5b2e6209e2c64a4af
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Tue Mar 23 23:28:24 2010 -0400
delete the bundle if, when deleting a BV it turns out there are no more bundle versions for that bundle
this includes a unit test to make sure deleting BVs work
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
index bab247a..440eee6 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
@@ -677,7 +677,7 @@ public class BundleManagerBean implements BundleManagerLocal, BundleManagerRemot
bundleManager.deleteBundleVersion(subject, bv.getId());
}
- // we need to whack the Repo once the Bundle no longe refers to it
+ // we need to whack the Repo once the Bundle no longer refers to it
Repo bundleRepo = bundle.getRepo();
this.entityManager.remove(bundle);
@@ -686,14 +686,26 @@ public class BundleManagerBean implements BundleManagerLocal, BundleManagerRemot
repoManager.deleteRepo(subject, bundleRepo.getId());
}
- public void deleteBundleVersion(Subject subject, int bundleVersionId) {
+ @RequiredPermission(Permission.MANAGE_INVENTORY)
+ public void deleteBundleVersion(Subject subject, int bundleVersionId) throws Exception {
BundleVersion bundleVersion = this.entityManager.find(BundleVersion.class, bundleVersionId);
if (null == bundleVersion) {
return;
}
- // remove the bundle version, this will cascade remove the deploy defs which will cascade remove
- // the deployments.
+ int bundleId = bundleVersion.getBundle().getId();
+
+ // remove the bundle version - cascade remove the deploy defs which will cascade remove the deployments.
this.entityManager.remove(bundleVersion);
+ this.entityManager.flush();
+
+ Query q = entityManager.createNamedQuery(BundleVersion.QUERY_FIND_VERSION_INFO_BY_BUNDLE_ID);
+ q.setParameter("bundleId", bundleId);
+ if (q.getResultList().size() == 0) {
+ // there are no more bundle versions left, blow away the bundle and all repo/bundle files associated with it
+ deleteBundle(subject, bundleId);
+ }
+
+ return;
}
}
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/bundle/BundleManagerBeanTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/bundle/BundleManagerBeanTest.java
index c2284d9..833d844 100644
--- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/bundle/BundleManagerBeanTest.java
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/bundle/BundleManagerBeanTest.java
@@ -45,11 +45,13 @@ import org.rhq.core.domain.bundle.BundleVersion;
import org.rhq.core.domain.bundle.composite.BundleWithLatestVersionComposite;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.PropertySimple;
+import org.rhq.core.domain.content.Architecture;
import org.rhq.core.domain.content.Package;
import org.rhq.core.domain.content.PackageType;
import org.rhq.core.domain.content.PackageVersion;
import org.rhq.core.domain.content.Repo;
import org.rhq.core.domain.criteria.BundleCriteria;
+import org.rhq.core.domain.criteria.BundleFileCriteria;
import org.rhq.core.domain.criteria.BundleVersionCriteria;
import org.rhq.core.domain.resource.Agent;
import org.rhq.core.domain.resource.InventoryStatus;
@@ -269,6 +271,49 @@ public class BundleManagerBeanTest extends UpdateSubsytemTestBase {
}
@Test(enabled = TESTS_ENABLED)
+ public void testDeleteBundleVersion() throws Exception {
+ Bundle b1 = createBundle("one");
+ assertNotNull(b1);
+ BundleVersion bv1 = createBundleVersion(b1.getName() + "-1", null, b1);
+ assertNotNull(bv1);
+ assertEquals("1.0", bv1.getVersion());
+ BundleVersion bv2 = createBundleVersion(b1.getName() + "-2", null, b1);
+ assertNotNull(bv2);
+ assertEquals("1.1", bv2.getVersion());
+
+ // let's add a bundle file so we can ensure our deletion will also delete the file too
+ bundleManager.addBundleFileViaByteArray(overlord, bv2.getId(), "testfile", "1.0", new Architecture("noarch"),
+ "content".getBytes(), false);
+ BundleFileCriteria bfCriteria = new BundleFileCriteria();
+ bfCriteria.addFilterBundleVersionId(bv2.getId());
+ bfCriteria.fetchPackageVersion(true);
+ PageList<BundleFile> files = bundleManager.findBundleFilesByCriteria(overlord, bfCriteria);
+ assert files.size() == 1 : files;
+ assert files.get(0).getPackageVersion().getGeneralPackage().getName().equals("testfile") : files;
+
+ BundleVersionCriteria bvCriteria = new BundleVersionCriteria();
+ BundleCriteria bCriteria = new BundleCriteria();
+
+ // delete the first one - this deletes the BV but the bundle should remain intact
+ bundleManager.deleteBundleVersion(overlord, bv2.getId());
+ bvCriteria.addFilterId(bv2.getId());
+ PageList<BundleVersion> bvResults = bundleManager.findBundleVersionsByCriteria(overlord, bvCriteria);
+ assert bvResults.size() == 0;
+ bCriteria.addFilterId(b1.getId());
+ PageList<Bundle> bResults = bundleManager.findBundlesByCriteria(overlord, bCriteria);
+ assert bResults.size() == 1 : "Should not have deleted bundle yet, 1 version still exists";
+
+ // delete the second one - this deletes last BV thus the bundle should also get deleted
+ bundleManager.deleteBundleVersion(overlord, bv1.getId());
+ bvCriteria.addFilterId(bv1.getId());
+ bvResults = bundleManager.findBundleVersionsByCriteria(overlord, bvCriteria);
+ assert bvResults.size() == 0;
+ bCriteria.addFilterId(b1.getId());
+ bResults = bundleManager.findBundlesByCriteria(overlord, bCriteria);
+ assert bResults.size() == 0 : "Should have deleted bundle since no versions exists anymore";
+ }
+
+ @Test(enabled = TESTS_ENABLED)
public void testCreateBundleVersionOrdering() throws Exception {
Bundle b1 = createBundle("one");
assertNotNull(b1);
commit 1531142b056f293af50fddc51352cda5a4132869
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Tue Mar 23 23:27:44 2010 -0400
fix bundle file criteria - name of field should be "general"Package
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/BundleFileCriteria.java b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/BundleFileCriteria.java
index 8341922..8abe728 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/BundleFileCriteria.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/BundleFileCriteria.java
@@ -41,7 +41,7 @@ public class BundleFileCriteria extends Criteria {
private boolean fetchBundleVersion;
private boolean fetchPackageVersion;
- private boolean fetchPackage;
+ private boolean fetchGeneralPackage;
public BundleFileCriteria() {
super();
@@ -76,8 +76,8 @@ public class BundleFileCriteria extends Criteria {
this.fetchBundleVersion = fetchBundleVersion;
}
- public void fetchPackage(boolean fetchPackage) {
- this.fetchPackage = fetchPackage;
+ public void fetchPackage(boolean fetchGeneralPackage) {
+ this.fetchGeneralPackage = fetchGeneralPackage;
}
public void fetchPackageVersion(boolean fetchPackageVersion) {