java/code/src/com/redhat/rhn/domain/kickstart/KickstartDefaults.hbm.xml
| 2
java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/tree/KickstartTreeHandler.java
| 1
java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/tree/test/KickstartTreeHandlerTest.java
| 31 +++++++
java/code/src/com/redhat/rhn/manager/kickstart/tree/TreeDeleteOperation.java
| 42 ++++++++--
4 files changed, 69 insertions(+), 7 deletions(-)
New commits:
commit d5661f414a0229e685631906b596cfe24458fab3
Author: Brad Buckingham <bbuckingham(a)redhat.com>
Date: Thu Apr 2 10:03:08 2009 -0400
493421 - api - kickstart.tree.deleteTreeAndProfiles fixed to delete associated
profiles
The API as initially written appeared to be a copy/paste of
kickstart.tree.delete. As a result, if a tree had any profiles associated
with it, the request was rejected. This commit includes updates to remove
any profiles associated with the tree. Also, added a junit test for the API
which was previously missing...
diff --git a/java/code/src/com/redhat/rhn/domain/kickstart/KickstartDefaults.hbm.xml
b/java/code/src/com/redhat/rhn/domain/kickstart/KickstartDefaults.hbm.xml
index 9f1b484..71ad4e8 100644
--- a/java/code/src/com/redhat/rhn/domain/kickstart/KickstartDefaults.hbm.xml
+++ b/java/code/src/com/redhat/rhn/domain/kickstart/KickstartDefaults.hbm.xml
@@ -17,7 +17,7 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<many-to-one name="kstree"
class="com.redhat.rhn.domain.kickstart.KickstartableTree"
- cascade="save-update"
+ cascade="none"
column="kstree_id" />
<many-to-one name="profile"
diff --git
a/java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/tree/KickstartTreeHandler.java
b/java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/tree/KickstartTreeHandler.java
index 835202c..c3d21ce 100644
---
a/java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/tree/KickstartTreeHandler.java
+++
b/java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/tree/KickstartTreeHandler.java
@@ -174,6 +174,7 @@ public class KickstartTreeHandler extends BaseHandler {
if (op.getTree() == null) {
throw new
InvalidKickstartTreeException("api.kickstart.tree.notfound");
}
+ op.setDeleteProfiles(Boolean.TRUE);
ValidatorError ve = op.store();
if (ve != null) {
throw new InvalidKickstartTreeException(ve.getKey());
diff --git
a/java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/tree/test/KickstartTreeHandlerTest.java
b/java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/tree/test/KickstartTreeHandlerTest.java
index 2e75334..03058c7 100644
---
a/java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/tree/test/KickstartTreeHandlerTest.java
+++
b/java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/tree/test/KickstartTreeHandlerTest.java
@@ -16,10 +16,13 @@ package com.redhat.rhn.frontend.xmlrpc.kickstart.tree.test;
import com.redhat.rhn.domain.channel.Channel;
import com.redhat.rhn.domain.channel.test.ChannelFactoryTest;
+import com.redhat.rhn.domain.kickstart.KickstartData;
import com.redhat.rhn.domain.kickstart.KickstartFactory;
import com.redhat.rhn.domain.kickstart.KickstartInstallType;
import com.redhat.rhn.domain.kickstart.KickstartableTree;
+import com.redhat.rhn.domain.kickstart.test.KickstartDataTest;
import com.redhat.rhn.domain.kickstart.test.KickstartableTreeTest;
+import com.redhat.rhn.frontend.xmlrpc.kickstart.KickstartHandler;
import com.redhat.rhn.frontend.xmlrpc.kickstart.tree.KickstartTreeHandler;
import com.redhat.rhn.frontend.xmlrpc.test.BaseHandlerTestCase;
import com.redhat.rhn.testing.TestUtils;
@@ -33,6 +36,7 @@ import java.util.List;
public class KickstartTreeHandlerTest extends BaseHandlerTestCase {
private KickstartTreeHandler handler = new KickstartTreeHandler();
+ private KickstartHandler ksHandler = new KickstartHandler();
public void testListKickstartableTrees() throws Exception {
Channel baseChan = ChannelFactoryTest.createTestChannel(admin);
@@ -103,6 +107,33 @@ public class KickstartTreeHandlerTest extends BaseHandlerTestCase {
assertNull(KickstartFactory.lookupKickstartTreeByLabel(label, admin.getOrg()));
}
+ public void testDeleteTreeAndProfiles() throws Exception {
+
+ KickstartData ks = KickstartDataTest.createKickstartWithProfile(admin);
+ KickstartableTree testTree = ks.getKickstartDefaults().getKstree();
+ Channel channel = testTree.getChannel();
+
+ // verify our setup... should have 1 tree and 1 profile associated w/it
+ List ksTrees = handler.list(adminKey, channel.getLabel());
+ List ksProfiles = ksHandler.listKickstarts(adminKey);
+ assertNotNull(ksTrees);
+ assertNotNull(ksProfiles);
+ assertEquals(1, ksTrees.size());
+ assertEquals(1, ksProfiles.size());
+
+ // execute test...
+ int result = handler.deleteTreeAndProfiles(adminKey, testTree.getLabel());
+ assertEquals(1, result);
+
+ // verify that both the tree and associated profile no longer exist
+ ksTrees = handler.list(adminKey, channel.getLabel());
+ ksProfiles = ksHandler.listKickstarts(adminKey);
+ assertNotNull(ksTrees);
+ assertNotNull(ksProfiles);
+ assertEquals(0, ksTrees.size());
+ assertEquals(0, ksProfiles.size());
+ }
+
public void testListTreeTypes() throws Exception {
List types = handler.listInstallTypes(adminKey);
assertNotNull(types);
diff --git a/java/code/src/com/redhat/rhn/manager/kickstart/tree/TreeDeleteOperation.java
b/java/code/src/com/redhat/rhn/manager/kickstart/tree/TreeDeleteOperation.java
index 0b916db..656ccc6 100644
--- a/java/code/src/com/redhat/rhn/manager/kickstart/tree/TreeDeleteOperation.java
+++ b/java/code/src/com/redhat/rhn/manager/kickstart/tree/TreeDeleteOperation.java
@@ -15,19 +15,23 @@
package com.redhat.rhn.manager.kickstart.tree;
import com.redhat.rhn.common.validator.ValidatorError;
+import com.redhat.rhn.domain.kickstart.KickstartData;
import com.redhat.rhn.domain.kickstart.KickstartFactory;
import com.redhat.rhn.domain.user.User;
+import com.redhat.rhn.manager.kickstart.KickstartDeleteCommand;
import com.redhat.rhn.manager.kickstart.cobbler.CobblerCommand;
import com.redhat.rhn.manager.kickstart.cobbler.CobblerDistroDeleteCommand;
import java.util.List;
/**
- * TreeEditCommand to edit a KickstartableTree
+ * TreeDeleteOperation to delete a KickstartableTree
* @version $Rev$
*/
public class TreeDeleteOperation extends BaseTreeEditOperation {
+ private Boolean deleteProfiles = Boolean.FALSE;
+
/**
* Default constructor: DONT USE
* @param userIn to set
@@ -57,22 +61,48 @@ public class TreeDeleteOperation extends BaseTreeEditOperation {
}
/**
+ * Set the delete profiles flag. If set, invoking store will delete
+ * any profile that are currently associated with the tree.
+ *
+ * @param deleteProfilesIn flag indicating if profiles associated with
+ * the tree should be deleted during store()
+ */
+ public void setDeleteProfiles(Boolean deleteProfilesIn) {
+ deleteProfiles = deleteProfilesIn;
+ }
+
+ /**
* {@inheritDoc}
* store() here actually does a remove operation.
* It is done to reuse code from BaseTreeEditOperation and BaseTreeAction
*/
public ValidatorError store() {
- List profiles = KickstartFactory.lookupKickstartDatasByTree(this.tree);
+
+ ValidatorError error = null;
+ List<KickstartData> profiles =
KickstartFactory.lookupKickstartDatasByTree(
+ this.tree);
+
if (profiles != null && profiles.size() > 0) {
- return new ValidatorError("kickstart.tree.inuse");
+
+ if (deleteProfiles) {
+ for (KickstartData profile : profiles) {
+ KickstartDeleteCommand cmd = new KickstartDeleteCommand(
+ profile.getId(), this.user);
+ cmd.store();
+ }
+ }
+ else {
+ error = new ValidatorError("kickstart.tree.inuse");
+ }
}
- else {
+
+ if (error == null) {
KickstartFactory.removeKickstartableTree(this.tree);
CobblerDistroDeleteCommand delcmd = new CobblerDistroDeleteCommand(this.tree,
- this.user);
+ this.user);
delcmd.store();
- return null;
}
+ return error;
}
Show replies by date