1) Moved net.sourceforge.phpeclipse.ui\src\net\sourceforge\phpdt back to net.sourcefo...
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpeclipse / obfuscator / ObfuscatorIgnoreSet.java
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/obfuscator/ObfuscatorIgnoreSet.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/obfuscator/ObfuscatorIgnoreSet.java
new file mode 100644 (file)
index 0000000..402a8bd
--- /dev/null
@@ -0,0 +1,349 @@
+/*
+ * (c) Copyright IBM Corp. 2000, 2001.
+ * All Rights Reserved.
+ */
+package net.sourceforge.phpeclipse.obfuscator;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.HashMap;
+import java.util.Iterator;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import net.sourceforge.phpeclipse.PHPeclipsePlugin;
+
+import org.eclipse.core.runtime.CoreException;
+import org.w3c.dom.Document;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Text;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+/**
+ * <code>ObfuscatorIgnoreSet</code> manages a collection of templates and
+ * makes them persistent.
+ */
+public class ObfuscatorIgnoreSet {
+
+       // private static class TemplateComparator implements Comparator {
+       // public int compare(Object arg0, Object arg1) {
+       // if (arg0 == arg1)
+       // return 0;
+       //                      
+       // if (arg0 == null)
+       // return -1;
+       //                              
+       // Template template0= (Template) arg0;
+       // Template template1= (Template) arg1;
+       //                      
+       // return template0.getName().compareTo(template1.getName());
+       // }
+       // }
+
+       private static final String TEMPLATE_TAG = "ignore"; //$NON-NLS-1$
+
+       // private static final String NAME_ATTRIBUTE= "name"; //$NON-NLS-1$
+       // private static final String DESCRIPTION_ATTRIBUTE= "description";
+       // //$NON-NLS-1$
+       // private static final String CONTEXT_ATTRIBUTE= "context"; //$NON-NLS-1$
+       // private static final String ENABLED_ATTRIBUTE= "enabled"; //$NON-NLS-1$
+
+       // private List fTemplates= new ArrayList();
+       private HashMap fIdentifierMap = new HashMap();
+
+       // private Comparator fTemplateComparator= new TemplateComparator();
+       // private Template[] fSortedTemplates= new Template[0];
+
+       /**
+        * Convenience method for reading templates from a file.
+        * 
+        * @see #addFromStream(InputStream)
+        */
+       public void addFromFile(File file) throws CoreException {
+               InputStream stream = null;
+
+               try {
+                       stream = new FileInputStream(file);
+                       addFromStream(stream);
+
+               } catch (IOException e) {
+                       throwReadException(e);
+
+               } finally {
+                       try {
+                               if (stream != null)
+                                       stream.close();
+                       } catch (IOException e) {
+                       }
+               }
+       }
+
+       /**
+        * Reads templates from a XML stream and adds them to the template set.
+        */
+       public void addFromStream(InputStream stream) throws CoreException {
+               try {
+                       DocumentBuilderFactory factory = DocumentBuilderFactory
+                                       .newInstance();
+                       DocumentBuilder parser = factory.newDocumentBuilder();
+                       Document document = parser.parse(new InputSource(stream));
+                       NodeList elements = document.getElementsByTagName(TEMPLATE_TAG);
+
+                       int count = elements.getLength();
+                       for (int i = 0; i != count; i++) {
+                               Node node = elements.item(i);
+                               NamedNodeMap attributes = node.getAttributes();
+
+                               if (attributes == null)
+                                       continue;
+
+                               // String name= getAttributeValue(attributes, NAME_ATTRIBUTE);
+                               // String description= getAttributeValue(attributes,
+                               // DESCRIPTION_ATTRIBUTE);
+                               // String context= getAttributeValue(attributes,
+                               // CONTEXT_ATTRIBUTE);
+                               // Node enabledNode= attributes.getNamedItem(ENABLED_ATTRIBUTE);
+
+                               // if (name == null || description == null || context == null)
+                               // throw new
+                               // SAXException(ObfuscatorMessages.getString("TemplateSet.error.missing.attribute"));
+                               // //$NON-NLS-1$
+
+                               // boolean enabled= true; //(enabledNode == null) ||
+                               // (enabledNode.getNodeValue().equals("true")); //$NON-NLS-1$
+
+                               StringBuffer buffer = new StringBuffer();
+                               NodeList children = node.getChildNodes();
+                               for (int j = 0; j != children.getLength(); j++) {
+                                       String value = children.item(j).getNodeValue();
+                                       if (value != null)
+                                               buffer.append(value);
+                               }
+                               String pattern = buffer.toString().trim();
+                               fIdentifierMap.put(pattern, new PHPIdentifier(pattern,
+                                               PHPIdentifier.VARIABLE));
+                               // Template template= new Template(name, description, context,
+                               // pattern);
+                               // template.setEnabled(enabled);
+                               // add(template);
+                       }
+
+                       // sort();
+
+               } catch (ParserConfigurationException e) {
+                       throwReadException(e);
+               } catch (IOException e) {
+                       throwReadException(e);
+               } catch (SAXException e) {
+                       throwReadException(e);
+               }
+       }
+
+//     private String getAttributeValue(NamedNodeMap attributes, String name) {
+//             Node node = attributes.getNamedItem(name);
+//
+//             return node == null ? null : node.getNodeValue();
+//     }
+
+       /**
+        * Convenience method for saving to a file.
+        * 
+        * @see #saveToStream(OutputStream)
+        */
+       public void saveToFile(File file) throws CoreException {
+               OutputStream stream = null;
+
+               try {
+                       stream = new FileOutputStream(file);
+                       saveToStream(stream);
+               } catch (IOException e) {
+                       throwWriteException(e);
+
+               } finally {
+                       try {
+                               if (stream != null)
+                                       stream.close();
+                       } catch (IOException e) {
+                       }
+               }
+       }
+
+       /**
+        * Saves the template set as XML.
+        */
+       public void saveToStream(OutputStream stream) throws CoreException {
+               try {
+                       DocumentBuilderFactory factory = DocumentBuilderFactory
+                                       .newInstance();
+                       DocumentBuilder builder = factory.newDocumentBuilder();
+                       Document document = builder.newDocument();
+
+                       Node root = document.createElement("obfuscator"); // $NON-NLS-1$
+                                                                                                                               // //$NON-NLS-1$
+                       document.appendChild(root);
+                       Iterator iter = fIdentifierMap.keySet().iterator();
+                       while (iter.hasNext()) {
+                               // for (int i= 0; i != fTemplates.size(); i++) {
+                               // Template template= (Template) fTemplates.get(i);
+
+                               Node node = document.createElement("ignore"); // $NON-NLS-1$
+                                                                                                                               // //$NON-NLS-1$
+                               root.appendChild(node);
+
+                               // NamedNodeMap attributes= node.getAttributes();
+                               //                              
+                               // Attr name= document.createAttribute(NAME_ATTRIBUTE);
+                               // name.setValue(template.getName());
+                               // attributes.setNamedItem(name);
+                               //      
+                               // Attr description=
+                               // document.createAttribute(DESCRIPTION_ATTRIBUTE);
+                               // description.setValue(template.getDescription());
+                               // attributes.setNamedItem(description);
+                               //      
+                               // Attr context= document.createAttribute(CONTEXT_ATTRIBUTE);
+                               // context.setValue(template.getContextTypeName());
+                               // attributes.setNamedItem(context);
+                               //
+                               // Attr enabled= document.createAttribute(ENABLED_ATTRIBUTE);
+                               // enabled.setValue(template.isEnabled() ? "true" : "false");
+                               // //$NON-NLS-1$ //$NON-NLS-2$
+                               // attributes.setNamedItem(enabled);
+
+                               Text pattern = document.createTextNode((String) iter.next());
+                               node.appendChild(pattern);
+                       }
+                       Transformer transformer = TransformerFactory.newInstance()
+                                       .newTransformer();
+                       transformer.setOutputProperty(OutputKeys.METHOD, "xml"); //$NON-NLS-1$
+                       transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); //$NON-NLS-1$
+                       DOMSource source = new DOMSource(document);
+                       StreamResult result = new StreamResult(stream);
+
+                       transformer.transform(source, result);
+
+               } catch (ParserConfigurationException e) {
+                       throwWriteException(e);
+               } catch (TransformerException e) {
+                       throwWriteException(e);
+               }
+               // OutputFormat format = new OutputFormat();
+               // format.setPreserveSpace(true);
+               // Serializer serializer =
+               // SerializerFactory.getSerializerFactory("xml").makeSerializer(stream,
+               // format); //$NON-NLS-1$
+               // serializer.asDOMSerializer().serialize(document);
+               //
+               // } catch (ParserConfigurationException e) {
+               // throwWriteException(e);
+               // } catch (IOException e) {
+               // throwWriteException(e);
+               // }
+       }
+
+       private static void throwReadException(Throwable t) throws CoreException {
+               PHPeclipsePlugin.log(t);
+               // IStatus status= new
+               // JavaUIStatus(JavaStatusConstants.TEMPLATE_IO_EXCEPTION,
+               // ObfuscatorMessages.getString("TemplateSet.error.read"), t);
+               // //$NON-NLS-1$
+               // throw new JavaUIException(status);
+       }
+
+       private static void throwWriteException(Throwable t) throws CoreException {
+               PHPeclipsePlugin.log(t);
+               // IStatus status= new
+               // JavaUIStatus(JavaStatusConstants.TEMPLATE_IO_EXCEPTION,
+               // ObfuscatorMessages.getString("TemplateSet.error.write"), t);
+               // //$NON-NLS-1$
+               // throw new JavaUIException(status);
+       }
+
+       /**
+        * Adds a template to the set.
+        */
+       // public void add(Template template) {
+       // if (exists(template))
+       // return; // ignore duplicate
+       //              
+       // fTemplates.add(template);
+       // sort();
+       // }
+       // private boolean exists(Template template) {
+       // for (Iterator iterator = fTemplates.iterator(); iterator.hasNext();) {
+       // Template anotherTemplate = (Template) iterator.next();
+       //
+       // if (template.equals(anotherTemplate))
+       // return true;
+       // }
+       //              
+       // return false;
+       // }
+       //      
+       // /**
+       // * Removes a template to the set.
+       // */
+       // public void remove(Template template) {
+       // fTemplates.remove(template);
+       // sort();
+       // }
+       //
+       /**
+        * Empties the set.
+        */
+       public void clear() {
+               fIdentifierMap.clear();
+               // fTemplates.clear();
+               // sort();
+       }
+
+       //      
+       // /**
+       // * Returns all templates.
+       // */
+       // public Template[] getTemplates() {
+       // return (Template[]) fTemplates.toArray(new Template[fTemplates.size()]);
+       // }
+
+       /**
+        * Returns all templates with a given name.
+        */
+       // public Template[] getTemplates(String name) {
+       // ArrayList res= new ArrayList();
+       // for (Iterator iterator= fTemplates.iterator(); iterator.hasNext();) {
+       // Template curr= (Template) iterator.next();
+       // if (curr.getName().equals(name)) {
+       // res.add(curr);
+       // }
+       // }
+       // return (Template[]) res.toArray(new Template[res.size()]);
+       // }
+       //      
+       // private void sort() {
+       // fSortedTemplates= (Template[]) fTemplates.toArray(new
+       // Template[fTemplates.size()]);
+       // Arrays.sort(fSortedTemplates, fTemplateComparator);
+       // }
+       /**
+        * @return
+        */
+       public HashMap getIdentifierMap() {
+               return fIdentifierMap;
+       }
+
+}