Update of
/var/cvs/contributions/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository
In directory
james.mmbase.org:/tmp/cvs-serv17953/contentrepository/src/java/com/finalist/cmsc/repository
Modified Files:
Tag: b1_6
RepositoryUtil.java
Log Message:
CMSC-1298 Clone channel feature
See also:
http://cvs.mmbase.org/viewcvs/contributions/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository
See also: http://www.mmbase.org/jira/browse/CMSC-1298
Index: RepositoryUtil.java
===================================================================
RCS file:
/var/cvs/contributions/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/RepositoryUtil.java,v
retrieving revision 1.36.2.5
retrieving revision 1.36.2.6
diff -u -b -r1.36.2.5 -r1.36.2.6
--- RepositoryUtil.java 20 Mar 2009 10:12:55 -0000 1.36.2.5
+++ RepositoryUtil.java 25 Mar 2009 08:56:43 -0000 1.36.2.6
@@ -1245,15 +1245,34 @@
if(log.isDebugEnabled()) {
log.debug("#################:"+output.toString());
}
-
+ String cloneCopy = PropertiesUtil.getProperty("clonecopy");
+ if("true".equalsIgnoreCase(cloneCopy)) {
+
copyContentElements(sourceChannel,destChannel,channelList,copiedNodes,output);
+ }
return newNode;
}
+ public static Node copyContentElements(Node sourceChannel, Node
destChannel, List<Integer> channelList,Map<Integer, Integer> copiedNodes
,StringBuilder output) {
+ if (!isParent(sourceChannel, destChannel)) {
+ Object newChannelNumber = copiedNodes.get(sourceChannel.getNumber());
+ if( newChannelNumber != null) {
+ Node newChannel =
sourceChannel.getCloud().getNode((Integer)newChannelNumber);
+ cloneRelatedNodes(sourceChannel,
newChannel,copiedNodes,output,channelList);
+ NodeList children = getOrderedChildren(sourceChannel);
+ for (Iterator<Node> iter = children.iterator(); iter.hasNext();) {
+ Node childChannel = iter.next();
+ copyContentElements(childChannel,
newChannel,channelList,copiedNodes,output);
+ }
+
+ }
+ }
+ return null;
+ }
public static Node copyChannel(Node sourceChannel, Node destChannel,
List<Integer> channelList,Map<Integer, Integer> copiedNodes ,StringBuilder
output) {
if (!isParent(sourceChannel, destChannel)) {
Node newChannel = CloneUtil.cloneNode(sourceChannel);
appendChild(destChannel, newChannel);
-
+ copiedNodes.put(sourceChannel.getNumber(), newChannel.getNumber());
NodeList children = getOrderedChildren(sourceChannel);
for (Iterator<Node> iter = children.iterator(); iter.hasNext();) {
Node childChannel = iter.next();
@@ -1262,7 +1281,6 @@
String cloneCopy = PropertiesUtil.getProperty("clonecopy");
if("true".equalsIgnoreCase(cloneCopy)) {
cloneAssetNodes(sourceChannel,newChannel,copiedNodes,output);
- cloneRelatedNodes(sourceChannel,
newChannel,copiedNodes,output,channelList);
}
else {
CloneUtil.cloneRelations(sourceChannel, newChannel, CONTENTREL,
CONTENTELEMENT);
@@ -1501,7 +1519,7 @@
//Only clone node, when it hasn't been cloned before.
Node destChild;
if (copiedNodes.get(sourceChild.getNumber()) == null) {
- destChild = cloneNode(sourceChild,copiedNodes,channels);
+ destChild = cloneNode(sourceChild,copiedNodes);
copiedNodes.put(Integer.valueOf(sourceChild.getNumber()),Integer.valueOf(destChild.getNumber()));
cloned = true;
//Logging
@@ -1517,6 +1535,7 @@
//*** End cloning node
//Create a new relation between the new node and its parent
+
if(!"imageinlinerel".equalsIgnoreCase(rel.getNodeManager().getName()) &&
!"inlinerel".equalsIgnoreCase(rel.getNodeManager().getName())) {
Relation destRel = destNode.createRelation(destChild, relManager);
String relName = destRel.getNodeManager().getName();
if (relName.equalsIgnoreCase("posrel") ||
@@ -1526,7 +1545,8 @@
destRel.setIntValue("pos", rel.getIntValue("pos"));
}
destRel.commit();
-
+ output.append("[newRel:" + destNode.getNumber() + "," + relName
+ "];");
+ }
//Creation channels are skipped at copying relations, so do it by
hand.
@@ -1541,7 +1561,7 @@
destChild.setStringValue("title",
destChild.getStringValue("title") + "-North");
destChild.commit();
}
- output.append("[newRel:" + destNode.getNumber() + "," + relName
+ "];");
+
// if
(destChild.getNodeManager().getName().equalsIgnoreCase("subject")) {
//Now go deeper into the tree
@@ -1557,7 +1577,7 @@
* @param channels
* @return
*/
- public static Node cloneNode(Node localNode,Map<Integer, Integer>
copiedNodes,List<Integer> channels) {
+ public static Node cloneNode(Node localNode,Map<Integer, Integer>
copiedNodes) {
if (isRelation(localNode)) {
return CloneUtil.cloneRelation(localNode);
}
@@ -1565,7 +1585,7 @@
NodeManager localNodeManager = localNode.getNodeManager();
NodeManager nodeManager =
localNode.getCloud().getNodeManager(localNodeManager.getName());
Node newNode = nodeManager.createNode();
-
+ newNode.commit();
FieldIterator fields = localNodeManager.getFields().fieldIterator();
while (fields.hasNext()) {
Field field = fields.nextField();
@@ -1575,7 +1595,7 @@
if (!(fieldName.equals("owner") || fieldName.equals("number") ||
fieldName.equals("otype") ||
(fieldName.indexOf("_") == 0))) {
- cloneNodeField(localNode, newNode,
field,copiedNodes,channels);
+ cloneNodeField(localNode, newNode, field,copiedNodes);
}
}
}
@@ -1595,14 +1615,14 @@
* @param field
* the field to clone
*/
- public static void cloneNodeField(Node sourceNode, Node destinationNode,
Field field,Map<Integer, Integer> copiedNodes,List<Integer> channels) {
+ public static void cloneNodeField(Node sourceNode, Node destinationNode,
Field field,Map<Integer, Integer> copiedNodes) {
String fieldName = field.getName();
if (destinationNode.getNodeManager().hasField(fieldName) == true) {
Field sourceField = sourceNode.getNodeManager().getField(fieldName);
if (sourceField.getState() != Field.STATE_SYSTEM &&
!sourceField.isVirtual()) {
destinationNode.setValueWithoutProcess(fieldName,
- strip(sourceNode,field,copiedNodes,channels));
+ strip(sourceNode,destinationNode,field,copiedNodes));
}
}
}
@@ -1615,8 +1635,8 @@
* @param channels
* @return
*/
- public static Object strip(Node sourceNode,Field field,Map<Integer,
Integer> copiedNodes,List<Integer> channels) {
- return RichText.stripLinkAndImage(sourceNode, field, copiedNodes);
+ public static Object strip(Node sourceNode, Node destinationNode,Field
field,Map<Integer, Integer> copiedNodes) {
+ return RichText.stripLinkAndImage(sourceNode, destinationNode,field,
copiedNodes);
}
/**
* quick test to see if node is a relation by testing fieldnames
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs