Update of
/var/cvs/contributions/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms
In directory
james.mmbase.org:/tmp/cvs-serv6953/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms
Modified Files:
Tag: b1_5
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.9
retrieving revision 1.9.2.1
diff -u -b -r1.9 -r1.9.2.1
--- ChannelDelete.java 10 May 2008 16:31:23 -0000 1.9
+++ ChannelDelete.java 1 Oct 2008 11:05:04 -0000 1.9.2.1
@@ -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