Update of /var/cvs/contributions/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository In directory james.mmbase.org:/tmp/cvs-serv18004/contentrepository/src/java/com/finalist/cmsc/repository
Modified Files: 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.43 retrieving revision 1.44 diff -u -b -r1.43 -r1.44 --- RepositoryUtil.java 20 Mar 2009 10:13:20 -0000 1.43 +++ RepositoryUtil.java 25 Mar 2009 08:57:36 -0000 1.44 @@ -566,8 +566,19 @@ * - Content Node * @return true if the node has a related creation channel */ + public static boolean hasCreationChannel(Node content) { + int count = content + .countRelatedNodes(content.getCloud().getNodeManager(CONTENTCHANNEL), CREATIONREL, DESTINATION); + return count > 0; + } + /** + * Check if a contentnode has a creationchannel + * + * @param content + * - Content Node + * @return true if the node has a related creation channel + */ public static boolean hasCreationChannel(Node content,Node channel) { - if(!isChannel(channel)) { return false; } @@ -582,18 +593,6 @@ return false; } /** - * Check if a contentnode has a creationchannel - * - * @param content - * - Content Node - * @return true if the node has a related creation channel - */ - public static boolean hasCreationChannel(Node content) { - int count = content - .countRelatedNodes(content.getCloud().getNodeManager(CONTENTCHANNEL), CREATIONREL, DESTINATION); - return count > 0; - } - /** * Get creation channel * * @param content @@ -1246,14 +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); @@ -1492,7 +1510,7 @@ continue; //Skip nodes not in the current channel tree. } else - { + { output.append(" into main "); //*** Start cloning the node from sourceChild -> destChild //If the related node should be cloned, dive into the node and deepcopy it Node sourceChild = rel.getDestination(); @@ -1500,9 +1518,8 @@ //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 @@ -1518,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") || @@ -1527,6 +1545,8 @@ destRel.setIntValue("pos", rel.getIntValue("pos")); } destRel.commit(); + output.append("[newRel:" + destNode.getNumber() + "," + relName + "];"); + } @@ -1542,7 +1562,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 @@ -1558,7 +1578,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); } @@ -1566,7 +1586,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(); @@ -1576,7 +1596,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); } } } @@ -1596,14 +1616,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)); } } } @@ -1616,8 +1636,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 Cvs@lists.mmbase.org http://lists.mmbase.org/mailman/listinfo/cvs