modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleVersion.java
| 6 +
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
| 17 ++-
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/bundle/BundleManagerBeanTest.java
| 51 ++++++++++
3 files changed, 70 insertions(+), 4 deletions(-)
New commits:
commit f364f5ff907a4fff391579181fee1e2e01a861a7
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Tue Jun 5 14:48:53 2012 -0400
[BZ 828905] fix the version ordering column when deleting a bundle version
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleVersion.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleVersion.java
index 31fc9ab..b4010bd 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleVersion.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleVersion.java
@@ -57,6 +57,11 @@ import org.rhq.core.domain.tagging.Tag;
*/
@Entity
@NamedQueries( {
+ @NamedQuery(name = BundleVersion.UPDATE_VERSION_ORDER_BY_BUNDLE_ID_AFTER_DELETE,
query = "" //
+ + "UPDATE BundleVersion bv "//
+ + " SET bv.versionOrder = (bv.versionOrder-1) " //
+ + " WHERE bv.bundle.id = :bundleId " //
+ + " AND bv.versionOrder > :versionOrder"), //
@NamedQuery(name = BundleVersion.UPDATE_VERSION_ORDER_BY_BUNDLE_ID, query =
"" //
+ "UPDATE BundleVersion bv "//
+ " SET bv.versionOrder = (bv.versionOrder+1) " //
@@ -83,6 +88,7 @@ import org.rhq.core.domain.tagging.Tag;
public class BundleVersion implements Serializable {
private static final long serialVersionUID = 1L;
+ public static final String UPDATE_VERSION_ORDER_BY_BUNDLE_ID_AFTER_DELETE =
"BundleVersion.updateVersionOrderByBundleIdAfterDelete";
public static final String UPDATE_VERSION_ORDER_BY_BUNDLE_ID =
"BundleVersion.updateVersionOrderByBundleId";
public static final String QUERY_FIND_LATEST_BY_BUNDLE_ID =
"BundleVersion.findLatestByBundleId";
public static final String QUERY_FIND_VERSION_INFO_BY_BUNDLE_ID =
"BundleVersion.findVersionsByBundleId";
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 0e129ee..a6302de 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
@@ -1646,10 +1646,11 @@ public class BundleManagerBean implements BundleManagerLocal,
BundleManagerRemot
return;
}
- int bundleId = 0;
- if (deleteBundleIfEmpty) {
- bundleId = bundleVersion.getBundle().getId(); // note that we lazy load this
if we never plan to delete the bundle
- }
+ // After we delete this bundle version, this is the version order value that is
being removed.
+ // Later we need to re-order the other bundles that are newer than this so their
version orders are readjusted.
+ int doomedBundleVersionOrder = bundleVersion.getVersionOrder();
+
+ int bundleId = bundleVersion.getBundle().getId();
// deployments replace other deployments and have a self-referring FK. The
deployments
// need to be removed in a way that will ensure that a replaced deployment is not
removed
@@ -1671,9 +1672,17 @@ public class BundleManagerBean implements BundleManagerLocal,
BundleManagerRemot
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);
+ doomedBundleVersionOrder = -1; // just a marker to let us know not to
bother with adjusting version orders
}
}
+ if (doomedBundleVersionOrder >= 0) {
+ q =
entityManager.createNamedQuery(BundleVersion.UPDATE_VERSION_ORDER_BY_BUNDLE_ID_AFTER_DELETE);
+ q.setParameter("bundleId", bundleId);
+ q.setParameter("versionOrder", doomedBundleVersionOrder);
+ q.executeUpdate();
+ }
+
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 e3b985e..a4d43b8 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
@@ -533,6 +533,12 @@ public class BundleManagerBeanTest extends AbstractEJB3Test {
bCriteria.addFilterId(b1.getId());
bResults = bundleManager.findBundlesByCriteria(overlord, bCriteria);
assert bResults.size() == 0 : "Should have deleted bundle since no versions
exists anymore";
+
+ // make sure our composite query is OK and can show us 0 bundles, too
+ PageList<BundleWithLatestVersionComposite> composites;
+ bCriteria = new BundleCriteria();
+ composites =
bundleManager.findBundlesWithLatestVersionCompositesByCriteria(overlord, bCriteria);
+ assert composites.size() == 0;
}
@Test(enabled = TESTS_ENABLED)
@@ -696,6 +702,51 @@ public class BundleManagerBeanTest extends AbstractEJB3Test {
assert results.get(1).getBundleDescription().equals(b2.getDescription());
assert results.get(1).getLatestVersion().equals("9.1");
assert results.get(1).getVersionsCount().longValue() == 1L;
+
+ // now delete one of the older bundle versions and make sure the ordering remains
intact
+ bundleManager.deleteBundleVersion(overlord, bv1.getId(), true);
+ results =
bundleManager.findBundlesWithLatestVersionCompositesByCriteria(overlord, criteria);
+ assert results.size() == 2 : results;
+ assert results.get(0).getBundleId().equals(b1.getId());
+ assert results.get(0).getBundleName().equals(b1.getName());
+ assert results.get(0).getBundleDescription().equals(b1.getDescription());
+ assert results.get(0).getLatestVersion().equals("2.0");
+ assert results.get(0).getVersionsCount().longValue() == 3L;
+ assert results.get(1).getBundleId().equals(b2.getId());
+ assert results.get(1).getBundleName().equals(b2.getName());
+ assert results.get(1).getBundleDescription().equals(b2.getDescription());
+ assert results.get(1).getLatestVersion().equals("9.1");
+ assert results.get(1).getVersionsCount().longValue() == 1L;
+
+ // now add another bundle version and make sure the ordering is updated properly
[BZ 828905]
+ BundleVersion bv5 = createBundleVersion(b1.getName() + "-5",
"5.0", b1);
+ assertNotNull(bv5);
+ assertEquals("5.0", bv5.getVersion());
+ assert 3 == bv5.getVersionOrder();
+ results =
bundleManager.findBundlesWithLatestVersionCompositesByCriteria(overlord, criteria);
+ assert results.get(0).getBundleId().equals(b1.getId());
+ assert results.get(0).getBundleName().equals(b1.getName());
+ assert results.get(0).getBundleDescription().equals(b1.getDescription());
+ assert results.get(0).getLatestVersion().equals("5.0");
+ assert results.get(0).getVersionsCount().longValue() == 4L;
+
+ // delete the latest bundle version and make sure we didn't screw up the
order
+ bundleManager.deleteBundleVersion(overlord, bv5.getId(), true);
+ results =
bundleManager.findBundlesWithLatestVersionCompositesByCriteria(overlord, criteria);
+ assert results.get(0).getBundleId().equals(b1.getId());
+ assert results.get(0).getBundleName().equals(b1.getName());
+ assert results.get(0).getBundleDescription().equals(b1.getDescription());
+ assert results.get(0).getLatestVersion().equals("2.0");
+ assert results.get(0).getVersionsCount().longValue() == 3L;
+
+ // delete the oldest bundle version and make sure we didn't screw up the
order
+ bundleManager.deleteBundleVersion(overlord, bv4.getId(), true); // deleting
version 0.5
+ results =
bundleManager.findBundlesWithLatestVersionCompositesByCriteria(overlord, criteria);
+ assert results.get(0).getBundleId().equals(b1.getId());
+ assert results.get(0).getBundleName().equals(b1.getName());
+ assert results.get(0).getBundleDescription().equals(b1.getDescription());
+ assert results.get(0).getLatestVersion().equals("2.0");
+ assert results.get(0).getVersionsCount().longValue() == 2L;
}
@Test(enabled = TESTS_ENABLED)
Show replies by date