/******************************************************************************* * Copyright (c) 2011, 2013 Formal Mind GmbH and University of Dusseldorf. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Lukas Ladenberger - initial API and implementation ******************************************************************************/ package org.eclipse.rmf.reqif10.common.util; import java.io.IOException; import java.io.StringWriter; import java.util.Collections; import java.util.HashMap; import java.util.Map; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.util.FeatureMapUtil; import org.eclipse.emf.ecore.xmi.XMLResource; import org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl; import org.eclipse.rmf.reqif10.XhtmlContent; import org.eclipse.rmf.reqif10.xhtml.XhtmlDivType; import org.eclipse.rmf.reqif10.xhtml.XhtmlFactory; /** * @author Lukas Ladenberger */ public class ProrXhtmlSimplifiedHelper { private static String newLine = System.getProperty("line.separator"); /** * This static method returns the XML representation as string. */ public static String generateXMLString(EObject eobject) throws IOException { StringWriter sw = new StringWriter(); Map<Object, Object> options = new HashMap<Object, Object>(); options.put(XMLResource.OPTION_ROOT_OBJECTS, Collections.singletonList(eobject)); options.put(XMLResource.OPTION_EXTENDED_META_DATA, Boolean.TRUE); options.put(XMLResource.OPTION_DECLARE_XML, Boolean.TRUE); options.put(XMLResource.OPTION_SAVE_TYPE_INFORMATION, Boolean.FALSE); options.put(XMLResource.OPTION_USE_ENCODED_ATTRIBUTE_STYLE, Boolean.FALSE); XMLResourceImpl ri = new XMLResourceImpl(); ri.save(sw, options); return sw.toString(); } /** * This static method returns the simplified version of the * {@link XhtmlContent}. */ public static String xhtmlToSimplifiedString(XhtmlContent xhtmlContent) { String stringValue = ""; try { stringValue = generateXMLString(xhtmlContent); stringValue = stringValue.replaceAll(newLine, ""); stringValue = stringValue.replaceAll(" +", " "); stringValue = stringValue.replaceAll("\\<xhtml:br/\\>", newLine); stringValue = stringValue.replaceAll("\\</xhtml:p\\>", newLine + newLine); stringValue = stringValue.replaceAll("\\<xhtml:li\\>", "- "); stringValue = stringValue.replaceAll("\\<xhtml:ul\\>", newLine); stringValue = stringValue.replaceAll("\\</xhtml:ul\\>", newLine); stringValue = stringValue.replaceAll("\\<xhtml:ol\\>", newLine); stringValue = stringValue.replaceAll("\\</xhtml:ol\\>", newLine); stringValue = stringValue.replaceAll("\\</xhtml:li\\>", newLine); stringValue = stringValue.replaceAll("\\</xhtml:div\\>", newLine); stringValue = stringValue.replaceAll("\\<.*?\\>", " "); stringValue = stringValue.trim(); } catch (IOException e) { } return stringValue; } /** * This static method returns the simplified version of the * {@link XhtmlContent}. */ public static XhtmlDivType stringToSimplifiedXhtml(String str) { XhtmlDivType div = XhtmlFactory.eINSTANCE.createXhtmlDivType(); String[] split = str.split("\\r\\n|\\r|\\n"); for (int i = 0; i < split.length; i++) { String br = split[i]; FeatureMapUtil.addText(div.getMixed(), br); if (i < split.length - 1) div.getBr().add(XhtmlFactory.eINSTANCE.createXhtmlBrType()); } return div; } /** * * A very simplified version to check if the given {@link XhtmlContent} * object is a formatted attribute. Or in other words: This method checks if * the {@link XhtmlContent} object comes from ProR, if so return that the * object is no formatted attribute. * * @param xhtmlContent * @return */ public static boolean isFormattedAttribute(XhtmlContent xhtmlContent) { try { String xhtmlString = ReqIF10XhtmlUtil.getXhtmlString(xhtmlContent); if (xhtmlString != null) { String stringValue = xhtmlString.replaceAll("\\<xhtml:br/\\>", ""); stringValue = stringValue .replaceAll( "\\<xhtml:div xmlns:xhtml=\"http://www.w3.org/1999/xhtml\"\\>", " "); stringValue = stringValue.replaceAll("\\</xhtml:div\\>", ""); stringValue = stringValue.replaceAll(newLine, ""); stringValue = stringValue.replaceAll(" ", ""); if (stringValue.contains("<xhtml:")) return true; } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return false; } }