/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. */ package com.liferay.jenkins.results.parser; import java.io.CharArrayWriter; import java.io.IOException; import java.io.StringReader; import java.io.Writer; import java.util.Iterator; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.Text; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; import org.dom4j.tree.DefaultElement; /** * @author Peter Yoo */ public class Dom4JUtil { public static void addToElement(Element element, Object... items) { for (int i = 0; i < items.length; i++) { Object item = items[i]; if (item == null) { continue; } if (item instanceof Element) { element.add((Element)item); continue; } if (item instanceof String) { element.addText((String)item); continue; } throw new IllegalArgumentException( "Only elements and strings may be added"); } } public static String format(Element element) throws IOException { return format(element, true); } public static String format(Element element, boolean pretty) throws IOException { Writer writer = new CharArrayWriter(); OutputFormat outputFormat = OutputFormat.createPrettyPrint(); outputFormat.setTrimText(false); XMLWriter xmlWriter = null; if (pretty) { xmlWriter = new XMLWriter(writer, outputFormat); } else { xmlWriter = new XMLWriter(writer); } xmlWriter.write(element); return writer.toString(); } public static Element getNewAnchorElement( String href, Element parentElement, Object... items) { if ((items == null) || (items.length == 0)) { return null; } Element anchorElement = null; anchorElement = getNewElement("a", parentElement); anchorElement.addAttribute("href", href); addToElement(anchorElement, items); return anchorElement; } public static Element getNewAnchorElement(String href, Object... items) { return getNewAnchorElement(href, null, items); } public static Element getNewElement(String childElementTag) { return getNewElement(childElementTag, null); } public static Element getNewElement( String childElementTag, Element parentElement, Object... items) { Element childElement = new DefaultElement(childElementTag); if (parentElement != null) { parentElement.add(childElement); } if ((items != null) && (items.length > 0)) { addToElement(childElement, items); } return childElement; } public static Document parse(String xml) throws DocumentException { SAXReader saxReader = new SAXReader(); return saxReader.read(new StringReader(xml)); } public static void replace( Element element, boolean cascade, String replacementText, String targetText) { Iterator<?> attributeIterator = element.attributeIterator(); while (attributeIterator.hasNext()) { Attribute attribute = (Attribute)attributeIterator.next(); String text = attribute.getValue(); attribute.setValue(text.replace(targetText, replacementText)); } Iterator<?> nodeIterator = element.nodeIterator(); while (nodeIterator.hasNext()) { Node node = (Node)nodeIterator.next(); if (node instanceof Text) { Text textNode = (Text)node; String text = textNode.getText(); if (text.contains(targetText)) { text = text.replace(targetText, replacementText); textNode.setText(text); } continue; } if (node instanceof Element && cascade) { replace((Element)node, cascade, replacementText, targetText); continue; } } } public static Element toCodeSnippetElement(String content) { return getNewElement( "pre", null, getNewElement( "code", null, JenkinsResultsParserUtil.redact(content))); } }