Update of /var/cvs/contributions/CMSContainer/cmsc/richtext/src/java/com/finalist/cmsc/richtext In directory james.mmbase.org:/tmp/cvs-serv17953/richtext/src/java/com/finalist/cmsc/richtext
Modified Files: Tag: b1_6 RichText.java RichTextGetProcessor.java Log Message: CMSC-1298 Clone channel feature See also: http://cvs.mmbase.org/viewcvs/contributions/CMSContainer/cmsc/richtext/src/java/com/finalist/cmsc/richtext See also: http://www.mmbase.org/jira/browse/CMSC-1298 Index: RichText.java =================================================================== RCS file: /var/cvs/contributions/CMSContainer/cmsc/richtext/src/java/com/finalist/cmsc/richtext/RichText.java,v retrieving revision 1.9.2.2 retrieving revision 1.9.2.3 diff -u -b -r1.9.2.2 -r1.9.2.3 --- RichText.java 5 Mar 2009 08:00:54 -0000 1.9.2.2 +++ RichText.java 25 Mar 2009 08:56:43 -0000 1.9.2.3 @@ -15,7 +15,6 @@ */ package com.finalist.cmsc.richtext; -import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUtils; @@ -101,7 +100,7 @@ return doc; } - public final static Object stripLinkAndImage(Node sourceNode,Field field,Map<Integer, Integer> copiedNodes) { + public final static Object stripLinkAndImage(Node sourceNode,Node destinationNode,Field field,Map<Integer, Integer> copiedNodes) { DataType dataType = field.getDataType(); while (StringUtils.isEmpty(dataType.getName())) { dataType = dataType.getOrigin(); @@ -116,10 +115,12 @@ if (hasRichtextItems(fieldValue)) { Document doc = getRichTextDocument(fieldValue); RichTextGetProcessor richTextGetProcessor = new RichTextGetProcessor(); - richTextGetProcessor.resolve(sourceNode,doc,copiedNodes); + richTextGetProcessor.resolve(sourceNode,destinationNode,doc,copiedNodes); String out = getRichTextString(doc); out = WordHtmlCleaner.fixEmptyAnchors(out); + if(log.isDebugEnabled()) { log.debug("final richtext text = " + out); + } return out; } } Index: RichTextGetProcessor.java =================================================================== RCS file: /var/cvs/contributions/CMSContainer/cmsc/richtext/src/java/com/finalist/cmsc/richtext/RichTextGetProcessor.java,v retrieving revision 1.14.2.2 retrieving revision 1.14.2.3 diff -u -b -r1.14.2.2 -r1.14.2.3 --- RichTextGetProcessor.java 5 Mar 2009 08:00:54 -0000 1.14.2.2 +++ RichTextGetProcessor.java 25 Mar 2009 08:56:43 -0000 1.14.2.3 @@ -13,7 +13,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; - +import java.util.ArrayList; import org.apache.commons.lang.StringUtils; import org.mmbase.bridge.Cloud; import org.mmbase.bridge.Field; @@ -30,7 +30,6 @@ import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; - import com.finalist.cmsc.mmbase.RelationUtil; import com.finalist.cmsc.mmbase.ResourcesUtil; @@ -307,9 +306,9 @@ return ResourcesUtil.getServletPathWithAssociation("content", "/content/*", id, title); } - public void resolve(Node node,Document doc,Map<Integer, Integer> copiedNodes) { - resolveLinks(doc, node,copiedNodes); - resolveImages(doc, node,copiedNodes); + public void resolve(Node sourceNode,Node destinationNode,Document doc,Map<Integer, Integer> copiedNodes) { + resolveLinks(doc,sourceNode,destinationNode,copiedNodes); + resolveImages(doc,sourceNode,destinationNode,copiedNodes); } /** * To resolve the links in Richtext fields @@ -318,17 +317,20 @@ * @param copiedNodes * @param channels */ - public static void resolveLinks(Document doc, Node sourceNode,Map<Integer, Integer> copiedNodes) { + public static void resolveLinks(Document doc, Node sourceNode,Node destinationNode,Map<Integer, Integer> copiedNodes) { if (doc == null) { return; } // collect <A> tags org.w3c.dom.NodeList nl = doc.getElementsByTagName("a"); - log.debug("number of links: " + nl.getLength()); - - for (int i = 0, len = nl.getLength(); i < len; i++) { - Element link = (Element) nl.item(i); + List<org.w3c.dom.Node> links = new ArrayList<org.w3c.dom.Node>(); + int len = nl.getLength(); + for(int i = 0 ; i < len ; i++) { + links.add(nl.item(i)); + } + for (int i = 0; i < len; i++) { + Element link = (Element) links.get(i); if (link.hasAttribute(RichText.DESTINATION_ATTR) && "undefined".equalsIgnoreCase(link.getAttribute(RichText.DESTINATION_ATTR))) { link.removeAttribute(RichText.DESTINATION_ATTR); @@ -354,7 +356,10 @@ else { Integer destination = copiedNodes.get(source); if (destination != null && destination > 0 && sourceNode.getCloud().hasNode(destination)) { - Relation rel = RelationUtil.createRelation(sourceNode, sourceNode.getCloud().getNode(destination), "inlinerel"); + Relation rel = RelationUtil.getRelation(sourceNode.getCloud().getNodeManager("inlinerel"), destinationNode.getNumber(), destination); + if(rel == null) { + rel = RelationUtil.createRelation(destinationNode, sourceNode.getCloud().getNode(destination), "inlinerel"); + } link.setAttribute(RichText.DESTINATION_ATTR, String.valueOf(destination)); link.setAttribute(RichText.RELATIONID_ATTR, String.valueOf(rel.getNumber())); } @@ -372,14 +377,19 @@ * @param copiedNodes * @param channels */ - public static void resolveImages(Document doc,Node sourceNode,Map<Integer, Integer> copiedNodes) { + public static void resolveImages(Document doc,Node sourceNode,Node destinationNode,Map<Integer, Integer> copiedNodes) { if (doc == null) { return; } org.w3c.dom.NodeList nl = doc.getElementsByTagName("img"); log.debug("number of images: " + nl.getLength()); - for (int i = 0, len = nl.getLength(); i < len; i++) { - Element image = (Element) nl.item(i); + List<org.w3c.dom.Node> links = new ArrayList<org.w3c.dom.Node>(); + int len = nl.getLength(); + for(int i = 0 ; i < len ; i++) { + links.add(nl.item(i)); + } + for (int i = 0; i < len; i++) { + Element image = (Element) links.get(i); if (image.hasAttribute(RichText.DESTINATION_ATTR) && "undefined".equalsIgnoreCase(image.getAttribute(RichText.DESTINATION_ATTR))) { @@ -406,7 +416,10 @@ else { Integer destination = copiedNodes.get(source); if (destination != null && destination > 0 && sourceNode.getCloud().hasNode(destination)) { - Relation rel = RelationUtil.createRelation(sourceNode, sourceNode.getCloud().getNode(destination), "imageinlinerel"); + Relation rel = RelationUtil.getRelation(sourceNode.getCloud().getNodeManager("imageinlinerel"), destinationNode.getNumber(), destination); + if(rel == null) { + rel = RelationUtil.createRelation(destinationNode, sourceNode.getCloud().getNode(destination), "imageinlinerel"); + } image.setAttribute(RichText.DESTINATION_ATTR, String.valueOf(destination)); image.setAttribute(RichText.RELATIONID_ATTR, String.valueOf(rel.getNumber())); } _______________________________________________ Cvs mailing list Cvs@lists.mmbase.org http://lists.mmbase.org/mailman/listinfo/cvs