package org.eclipse.dltk.validators.internal.externalchecker.core; import java.io.StringReader; import java.io.StringWriter; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerFactoryConfigurationError; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.eclipse.dltk.core.DLTKCore; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; public class ExternalCheckerWildcardManager { private static final String STRING = "wildcards"; //$NON-NLS-1$ private static final String WILDCARD = "wildcard"; //$NON-NLS-1$ private static final String DESCRIPTION = "description"; //$NON-NLS-1$ private static final String PATTERN = "pattern"; //$NON-NLS-1$ private static final String LETTER = "letter"; //$NON-NLS-1$ public static final String WILDCARDS = ExternalCheckerPlugin.PLUGIN_ID + ".wildcards"; //$NON-NLS-1$ public static String getDefaultWildcards() { CustomWildcard[] wildcards = { new CustomWildcard( "f", "[\\w]?:?.+", Messages.ExternalCheckerWildcardManager_fileName), //$NON-NLS-1$ //$NON-NLS-2$ new CustomWildcard( "m", ".*", Messages.ExternalCheckerWildcardManager_message), //$NON-NLS-1$ //$NON-NLS-2$ new CustomWildcard( "n", "[0-9]+", Messages.ExternalCheckerWildcardManager_lineNumber) }; //$NON-NLS-1$ //$NON-NLS-2$ return rulesToXML(wildcards); } public static List loadCustomWildcards() { List wildcards = new ArrayList(); String preference = ExternalCheckerPlugin.getDefault() .getPluginPreferences().getString( ExternalCheckerWildcardManager.WILDCARDS); if (DLTKCore.DEBUG) { System.out.println(preference); } if (preference != "") { //$NON-NLS-1$ try { DocumentBuilderFactory factorryr = DocumentBuilderFactory .newInstance(); DocumentBuilder builder = factorryr.newDocumentBuilder(); Document doc = builder.parse(new InputSource(new StringReader( preference))); Element docElement = doc.getDocumentElement(); if (!docElement.getNodeName().equalsIgnoreCase(STRING)) { return wildcards; } NodeList nlist = docElement.getChildNodes(); for (int i = 0; i < nlist.getLength(); i++) { Node node = nlist.item(i); short type = node.getNodeType(); if (type == Node.ELEMENT_NODE) { Element element = (Element) node; if (element.getNodeName().equalsIgnoreCase(WILDCARD)) { String name = element.getAttribute(LETTER); String value = element.getAttribute(PATTERN); String descr = element.getAttribute(DESCRIPTION); CustomWildcard wcard = new CustomWildcard(name, value, descr); wildcards.add(wcard); } } } } catch (Exception x) { if (DLTKCore.DEBUG) { System.out.println(x.toString()); } } } return wildcards; } public static void storeWildcards(CustomWildcard[] customWildcards) { String xmlString = rulesToXML(customWildcards); ExternalCheckerPlugin.getDefault().getPluginPreferences().setValue( WILDCARDS, xmlString); ExternalCheckerPlugin.getDefault().savePluginPreferences(); } private static String rulesToXML(CustomWildcard[] customWildcards) throws TransformerFactoryConfigurationError { String xmlString = null; DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); try { DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.newDocument(); Element root = document.createElement(STRING); document.appendChild(root); for (int i = 0; i < customWildcards.length; i++) { Element wildcard = document.createElement(WILDCARD); String name = customWildcards[i].getLetter(); String value = customWildcards[i].getSpattern(); String description = customWildcards[i].getDescription(); wildcard.setAttribute(LETTER, name); wildcard.setAttribute(PATTERN, value); wildcard.setAttribute(DESCRIPTION, description); root.appendChild(wildcard); } TransformerFactory tfactory = TransformerFactory.newInstance(); Transformer trannsformer = tfactory.newTransformer(); trannsformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); //$NON-NLS-1$ trannsformer.setOutputProperty(OutputKeys.INDENT, "yes"); //$NON-NLS-1$ ; StringWriter sw = new StringWriter(); StreamResult result = new StreamResult(sw); DOMSource source = new DOMSource(document); trannsformer.transform(source, result); xmlString = sw.toString(); if (DLTKCore.DEBUG) { System.out.println(xmlString); } } catch (Exception x) { if (DLTKCore.DEBUG) { System.out.println(x.toString()); } } return xmlString; } }