Update of
/var/cvs/contributions/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms
In directory
james.mmbase.org:/tmp/cvs-serv6800/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms
Modified Files:
Tag: b1_4
ChannelDelete.java
Log Message:
CMSC-1068 If you delete a contentchannel, contentchannels below get lost in
the void
See also:
http://cvs.mmbase.org/viewcvs/contributions/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms
See also: http://www.mmbase.org/jira/browse/CMSC-1068
Index: ChannelDelete.java
===================================================================
RCS file:
/var/cvs/contributions/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms/ChannelDelete.java,v
retrieving revision 1.7.2.2
retrieving revision 1.7.2.3
diff -u -b -r1.7.2.2 -r1.7.2.3
--- ChannelDelete.java 14 Mar 2008 12:50:37 -0000 1.7.2.2
+++ ChannelDelete.java 1 Oct 2008 11:04:39 -0000 1.7.2.3
@@ -13,7 +13,7 @@
import javax.servlet.http.HttpServletRequest;
-import net.sf.mmapps.commons.util.StringUtil;
+import org.apache.commons.lang.StringUtils;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
@@ -38,7 +38,7 @@
String action = getParameter(request, "remove");
Node channelNode = cloud.getNode(objectnumber);
- if (StringUtil.isEmptyOrWhitespace(action)) {
+ if (StringUtils.isBlank(action)) {
if (RepositoryUtil.hasCreatedContent(channelNode)) {
return mapping.findForward("channeldeletewarning");
}
@@ -50,22 +50,23 @@
if ("cancel".equals(action)) {
return mapping.findForward(SUCCESS);
}
- else if ("delete".equals(action)) {
- NodeList createdElements =
RepositoryUtil.getCreatedElements(channelNode);
- for (Iterator<Node> iter = createdElements.iterator();
iter.hasNext();) {
- Node objectNode = iter.next();
- RepositoryUtil.removeContentFromChannel(objectNode,
channelNode);
- RepositoryUtil.removeCreationRelForContent(objectNode);
-
- RepositoryUtil.removeContentFromAllChannels(objectNode);
- RepositoryUtil.addContentToChannel(objectNode,
RepositoryUtil.getTrashNode(cloud));
-
- Publish.remove(objectNode);
- Publish.unpublish(objectNode);
- Workflow.remove(objectNode);
+ if ("delete".equals(action)) {
+ deleteAction(cloud, channelNode);
+ }
+ if ("move".equals(action)) {
+ moveAction(cloud, channelNode);
+ }
+ return mapping.findForward(SUCCESS);
}
}
- else if ("move".equals(action)) {
+
+ private void moveAction(Cloud cloud, Node channelNode) {
+ NodeList childChannels = RepositoryUtil.getChildren(channelNode);
+ for (Iterator<Node> childIter = childChannels.iterator();
childIter.hasNext();) {
+ Node childChannel = childIter.next();
+ moveAction(cloud, childChannel);
+ }
+
// get relations of content elements to channels other then
the creationchannel
NodeList createdElements =
RepositoryUtil.getCreatedElements(channelNode);
@@ -73,8 +74,9 @@
Node elementNode = iter.next();
// get relations
RelationManager contentRelationManager =
cloud.getRelationManager("contentrel");
- NodeList relatedChannelsList =
- contentRelationManager.getList("(snumber != " +
channelNode.getNumber() + " and dnumber = " + elementNode.getNumber() + ")",
"number", "UP");
+ NodeList relatedChannelsList =
contentRelationManager.getList("(snumber != "
+ + channelNode.getNumber() + " and dnumber = " +
elementNode.getNumber()
+ + ")", "number", "UP");
// loop through channel relations
Iterator<Node> iter2 = relatedChannelsList.iterator();
@@ -83,37 +85,67 @@
Node relationNode = iter2.next();
Node newChannelNode =
cloud.getNode(relationNode.getStringValue("snumber"));
+ if (RepositoryUtil.isParent(channelNode, newChannelNode)) {
+ moveElementToTrash(cloud, channelNode, elementNode);
+ }
+ else {
+ moveElementToAnotherChannel(channelNode, elementNode,
newChannelNode);
+ }
+ }
+ else {
+ moveElementToTrash(cloud, channelNode, elementNode);
+ }
+ }
+ deleteChannel(channelNode);
+ }
+
+ private void deleteAction(Cloud cloud, Node channelNode) {
+ NodeList childChannels = RepositoryUtil.getChildren(channelNode);
+ for (Iterator<Node> childIter = childChannels.iterator();
childIter.hasNext();) {
+ Node childChannel = childIter.next();
+ deleteAction(cloud, childChannel);
+ }
+
+ NodeList createdElements =
RepositoryUtil.getCreatedElements(channelNode);
+ for (Iterator<Node> iter = createdElements.iterator(); iter.hasNext();) {
+ Node objectNode = iter.next();
+ moveElementToTrash(cloud, channelNode, objectNode);
+ }
+ deleteChannel(channelNode);
+ }
+
+ private void deleteChannel(Node channelNode) {
+ Publish.remove(channelNode);
+ Publish.unpublish(channelNode);
+ Workflow.remove(channelNode);
+
+ channelNode.delete(true);
+ }
+
+ private void moveElementToAnotherChannel(Node channelNode, Node
elementNode, Node newChannelNode) {
// move content element to the channel
RepositoryUtil.removeContentFromChannel(elementNode,
channelNode);
RepositoryUtil.removeCreationRelForContent(elementNode);
RepositoryUtil.addCreationChannel(elementNode,
newChannelNode);
+
+ // unpublish and remove from workflow
+ Publish.remove(elementNode);
+ Publish.unpublish(elementNode);
+ Workflow.remove(elementNode);
}
- else {
+
+ private void moveElementToTrash(Cloud cloud, Node channelNode, Node
elementNode) {
// remove the element
RepositoryUtil.removeContentFromChannel(elementNode,
channelNode);
RepositoryUtil.removeCreationRelForContent(elementNode);
RepositoryUtil.removeContentFromAllChannels(elementNode);
RepositoryUtil.addContentToChannel(elementNode,
RepositoryUtil.getTrashNode(cloud));
- }
+
// unpublish and remove from workflow
Publish.remove(elementNode);
Publish.unpublish(elementNode);
Workflow.remove(elementNode);
}
- }
-
-
- if (Workflow.hasWorkflow(channelNode)) {
- Workflow.remove(channelNode);
- }
- Publish.remove(channelNode);
- Publish.unpublish(channelNode);
- Workflow.remove(channelNode);
-
- channelNode.delete(true);
- return mapping.findForward(SUCCESS);
- }
- }
}
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs