diff options
author | Dwayne Boone <dwayne@zeroc.com> | 2015-03-26 14:32:47 -0230 |
---|---|---|
committer | Dwayne Boone <dwayne@zeroc.com> | 2015-03-26 14:32:47 -0230 |
commit | 454c03e66a16a6d733163e67e317fbf565b5cdbf (patch) | |
tree | 7ecc45eecd24a65bf5bc81af2a48621d80b58caf /eclipse/java/Slice2javaPlugin/src/com/zeroc/slice2javaplugin/internal/Dependencies.java | |
parent | Updated .gitignore files (diff) | |
download | ice-454c03e66a16a6d733163e67e317fbf565b5cdbf.tar.bz2 ice-454c03e66a16a6d733163e67e317fbf565b5cdbf.tar.xz ice-454c03e66a16a6d733163e67e317fbf565b5cdbf.zip |
ICE-6396 Move eclipse plugin to its own repo
Diffstat (limited to 'eclipse/java/Slice2javaPlugin/src/com/zeroc/slice2javaplugin/internal/Dependencies.java')
-rw-r--r-- | eclipse/java/Slice2javaPlugin/src/com/zeroc/slice2javaplugin/internal/Dependencies.java | 528 |
1 files changed, 0 insertions, 528 deletions
diff --git a/eclipse/java/Slice2javaPlugin/src/com/zeroc/slice2javaplugin/internal/Dependencies.java b/eclipse/java/Slice2javaPlugin/src/com/zeroc/slice2javaplugin/internal/Dependencies.java deleted file mode 100644 index 9222c3ed48f..00000000000 --- a/eclipse/java/Slice2javaPlugin/src/com/zeroc/slice2javaplugin/internal/Dependencies.java +++ /dev/null @@ -1,528 +0,0 @@ -// ********************************************************************** -// -// Copyright (c) 2003-2015 ZeroC, Inc. All rights reserved. -// -// This plug-in is provided to you under the terms and conditions -// of the Eclipse Public License Version 1.0 ("EPL"). A copy of -// the EPL is available at http://www.eclipse.org/legal/epl-v10.html. -// -// ********************************************************************** - -package com.zeroc.slice2javaplugin.internal; - -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.OutputKeys; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerConfigurationException; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; - -import org.eclipse.core.filesystem.EFS; -import org.eclipse.core.filesystem.IFileStore; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Path; -import org.eclipse.core.runtime.Status; -import org.eclipse.ui.console.MessageConsoleStream; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.w3c.dom.Text; -import org.xml.sax.SAXException; - -import com.zeroc.slice2javaplugin.Activator; - -public class Dependencies -{ - public Dependencies(IProject project, Set<IFile> LprojectResources, MessageConsoleStream err) - { - _project = project; - _projectResources = LprojectResources; - _err = err; - - // Build a map of location to project resource. - - for(IFile f : _projectResources) - { - _locationToResource.put(f.getLocation(), f); - } - } - - /** - * - * @param allDependencies The string of all dependencies. - * @throws CoreException - */ - public void updateDependencies(String allDependencies) - throws CoreException - { - Slice2JavaDependenciesParser parser = new Slice2JavaDependenciesParser(); - try - { - InputStream in = new ByteArrayInputStream(allDependencies.getBytes()); - Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new BufferedInputStream(in)); - parser.visit(doc); - } - catch(SAXException e) - { - throw new CoreException(new Status(IStatus.ERROR, Activator.PLUGIN_ID, - "internal error reading dependencies", e)); - } - catch(ParserConfigurationException e) - { - throw new CoreException(new Status(IStatus.ERROR, Activator.PLUGIN_ID, - "internal error reading dependencies", e)); - } - catch(IOException e) - { - throw new CoreException(new Status(IStatus.ERROR, Activator.PLUGIN_ID, - "internal error reading dependencies", e)); - } - - for(Map.Entry<String, List<String>> entry : parser.dependencies.entrySet()) - { - Path sourcePath = new Path(entry.getKey()); - assert sourcePath.isAbsolute(); - - IFile sourceFile = _locationToResource.get(sourcePath); - if(sourceFile == null) - { - if(_err != null) - { - _err.println("Dependencies: ignoring non-project resource " + sourcePath.toString()); - } - // This should not occur. - continue; - } - - for(String s : entry.getValue()) - { - IFile f = getProjectResource(new Path(s)); - // Ignore any resources not in the project. - if(f != null) - { - Set<IFile> dependents = reverseSliceSliceDependencies.get(f); - if(dependents == null) - { - dependents = new HashSet<IFile>(); - reverseSliceSliceDependencies.put(f, dependents); - } - dependents.add(sourceFile); - } - } - - Set<IFile> dependents = new HashSet<IFile>(); - sliceSliceDependencies.put(sourceFile, dependents); - for(String s : entry.getValue()) - { - IFile f = getProjectResource(new Path(s)); - // Ignore any resources not in the project. - if(f != null) - { - dependents.add(f); - } - } - } - } - - private IFile getProjectResource(Path path) - { - IFile f = null; - if(path.isAbsolute()) - { - f = _locationToResource.get(path); - } - else - { - f = _project.getFile(path.toString()); - if(!f.exists()) - { - f = null; - } - } - if(_projectResources.contains(f)) - { - return f; - } - return null; - } - - public void read() - throws CoreException - { - IFileStore dependencies = getDependenciesStore(); - if(!dependencies.fetchInfo(EFS.NONE, null).exists()) - { - return; - } - InputStream in = dependencies.openInputStream(EFS.NONE, null); - - try - { - Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new BufferedInputStream(in)); - DependenciesParser parser = new DependenciesParser(_project); - parser.visit(doc); - sliceSliceDependencies = parser.sliceSliceDependencies; - reverseSliceSliceDependencies = parser.reverseSliceSliceDependencies; - sliceJavaDependencies = parser.sliceJavaDependencies; - errorSliceFiles = parser.errorSliceFiles; - } - catch(SAXException e) - { - throw new CoreException(new Status(IStatus.ERROR, Activator.PLUGIN_ID, - "internal error reading dependencies", e)); - } - catch(ParserConfigurationException e) - { - throw new CoreException(new Status(IStatus.ERROR, Activator.PLUGIN_ID, - "internal error reading dependencies", e)); - } - catch(IOException e) - { - throw new CoreException(new Status(IStatus.ERROR, Activator.PLUGIN_ID, - "internal error reading dependencies", e)); - } - } - - public void write() - throws CoreException - { - // Create a DOM of the map. - Document doc = null; - try - { - doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); - } - catch(ParserConfigurationException e) - { - throw new CoreException(new Status(IStatus.ERROR, Activator.PLUGIN_ID, - "internal error writing dependencies", e)); - } - - Element root = doc.createElement("dependencies"); - doc.appendChild(root); - - writeDependencies(sliceSliceDependencies, doc, "sliceSliceDependencies", root); - writeDependencies(reverseSliceSliceDependencies, doc, "reverseSliceSliceDependencies", root); - writeDependencies(sliceJavaDependencies, doc, "sliceJavaDependencies", root); - writeErrorSliceFiles(errorSliceFiles, doc, "errorSliceFiles", root); - - // Write the DOM to the dependencies.xml file. - TransformerFactory transfac = TransformerFactory.newInstance(); - Transformer trans = null; - try - { - trans = transfac.newTransformer(); - } - catch(TransformerConfigurationException e) - { - throw new CoreException(new Status(IStatus.ERROR, Activator.PLUGIN_ID, - "internal error writing dependencies", e)); - } - // tf.setAttribute("indent-number", 4); - - // trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); - trans.setOutputProperty(OutputKeys.INDENT, "yes"); - trans.setOutputProperty(OutputKeys.ENCODING, "UTF8"); - trans.setOutputProperty(OutputKeys.INDENT, "yes"); - trans.setOutputProperty(OutputKeys.METHOD, "XML"); - - IFileStore dependencies = getDependenciesStore(); - OutputStream out = dependencies.openOutputStream(EFS.NONE, null); - StreamResult result = new StreamResult(new BufferedOutputStream(out)); - DOMSource source = new DOMSource(doc); - try - { - trans.transform(source, result); - } - catch(TransformerException e) - { - throw new CoreException(new Status(IStatus.ERROR, Activator.PLUGIN_ID, - "internal error writing dependencies", e)); - } - try - { - out.close(); - } - catch(IOException e) - { - throw new CoreException(new Status(IStatus.ERROR, Activator.PLUGIN_ID, - "internal error writing dependencies", e)); - } - } - - private void writeErrorSliceFiles(Set<IFile> s, Document doc, String name, Element root) - { - Element jsd = doc.createElement(name); - root.appendChild(jsd); - - for(IFile f : s) - { - Element elem = doc.createElement("file"); - jsd.appendChild(elem); - Text text = doc.createTextNode(f.getProjectRelativePath().toString()); - elem.appendChild(text); - } - } - - private void writeDependencies(Map<IFile, Set<IFile>> map, Document doc, String name, Element root) - { - Element jsd = doc.createElement(name); - root.appendChild(jsd); - - Iterator<Map.Entry<IFile, Set<IFile>>> p = map.entrySet().iterator(); - while(p.hasNext()) - { - Map.Entry<IFile, Set<IFile>> e = p.next(); - Element entry = doc.createElement("entry"); - jsd.appendChild(entry); - - Element key = doc.createElement("key"); - entry.appendChild(key); - Text text = doc.createTextNode(e.getKey().getProjectRelativePath().toString()); - key.appendChild(text); - - Element value = doc.createElement("value"); - entry.appendChild(value); - - Iterator<IFile> q = e.getValue().iterator(); - while(q.hasNext()) - { - IFile f = q.next(); - Element elem = doc.createElement("file"); - value.appendChild(elem); - text = doc.createTextNode(f.getProjectRelativePath().toString()); - elem.appendChild(text); - } - } - } - - private IFileStore getDependenciesStore() - throws CoreException - { - IPath name = new Path(_project.getName()); - IFileStore store = EFS.getLocalFileSystem().getStore(Activator.getDefault().getStateLocation()).getFileStore( - name); - if(!store.fetchInfo(EFS.NONE, null).exists()) - { - store.mkdir(EFS.NONE, null); - } - return store.getFileStore(new Path("dependencies.xml")); - } - - private static class Slice2JavaDependenciesParser - { - Map<String, List<String>> dependencies = new java.util.HashMap<String, List<String>>(); - - private Node findNode(Node n, String qName) - throws SAXException - { - NodeList children = n.getChildNodes(); - for(int i = 0; i < children.getLength(); ++i) - { - Node child = children.item(i); - if(child.getNodeType() == Node.ELEMENT_NODE && child.getNodeName().equals(qName)) - { - return child; - } - } - throw new SAXException("no such node: " + qName); - } - - private void visitDependencies(Node n) throws SAXException - { - NodeList children = n.getChildNodes(); - for(int i = 0; i < children.getLength(); ++i) - { - if(children.item(i).getNodeType() == Node.ELEMENT_NODE && children.item(i).getNodeName().equals("source")) - { - String source = ((Element)children.item(i)).getAttribute("name"); - if(source.length() == 0) - { - throw new SAXException("empty name attribute"); - } - List<String> dependsOn = visitDependsOn(children.item(i)); - dependencies.put(source, dependsOn); - } - } - } - - private List<String> visitDependsOn(Node source) throws SAXException - { - List<String> depends = new ArrayList<String>(); - NodeList dependencies = source.getChildNodes(); - for(int j = 0; j < dependencies.getLength(); ++j) - { - if(dependencies.item(j).getNodeType() == Node.ELEMENT_NODE && dependencies.item(j).getNodeName().equals("dependsOn")) - { - Element dependsOn = (Element)dependencies.item(j); - String name = dependsOn.getAttribute("name"); - if(name.length() == 0) - { - throw new SAXException("empty name attribute"); - } - depends.add(name); - } - } - return depends; - } - - public void visit(Node doc) throws SAXException - { - Node n = findNode(doc, "dependencies"); - visitDependencies(n); - } - } - - private static class DependenciesParser - { - private IProject _project; - - Map<IFile, Set<IFile>> sliceSliceDependencies = new java.util.HashMap<IFile, Set<IFile>>(); - Map<IFile, Set<IFile>> reverseSliceSliceDependencies = new java.util.HashMap<IFile, Set<IFile>>(); - Map<IFile, Set<IFile>> sliceJavaDependencies = new java.util.HashMap<IFile, Set<IFile>>(); - Set<IFile> errorSliceFiles = new java.util.HashSet<IFile>(); - - private Node findNode(Node n, String qName) - throws SAXException - { - NodeList children = n.getChildNodes(); - for(int i = 0; i < children.getLength(); ++i) - { - Node child = children.item(i); - if(child.getNodeType() == Node.ELEMENT_NODE && child.getNodeName().equals(qName)) - { - return child; - } - } - throw new SAXException("no such node: " + qName); - } - - private String getText(Node n) - throws SAXException - { - NodeList children = n.getChildNodes(); - if(children.getLength() == 1 && children.item(0).getNodeType() == Node.TEXT_NODE) - { - return children.item(0).getNodeValue(); - } - throw new SAXException("no text element"); - } - - private List<String> processFiles(Node n) - throws SAXException - { - List<String> files = new ArrayList<String>(); - NodeList children = n.getChildNodes(); - for(int i = 0; i < children.getLength(); ++i) - { - Node child = children.item(i); - if(child.getNodeType() == Node.ELEMENT_NODE && child.getNodeName().equals("file")) - { - files.add(getText(child)); - } - } - return files; - } - - public void visitDependencies(Map<IFile, Set<IFile>> map, Node n) - throws SAXException - { - NodeList children = n.getChildNodes(); - for(int i = 0; i < children.getLength(); ++i) - { - Node child = children.item(i); - if(child.getNodeType() == Node.ELEMENT_NODE && child.getNodeName().equals("entry")) - { - IFile key = _project.getFile(new Path(getText(findNode(child, "key")))); - - Node value = findNode(child, "value"); - List<String> files = processFiles(value); - Set<IFile> f = new HashSet<IFile>(); - for(String s : files) - { - f.add(_project.getFile(new Path(s))); - } - - map.put(key, f); - } - } - } - - public void visitErrorList(Set<IFile> s, Node n) throws SAXException - { - NodeList children = n.getChildNodes(); - for(int i = 0; i < children.getLength(); ++i) - { - Node child = children.item(i); - if(child.getNodeType() == Node.ELEMENT_NODE && child.getNodeName().equals("file")) - { - s.add(_project.getFile(new Path(getText(child)))); - } - } - } - - public void visit(Node doc) - throws SAXException - { - Node dependencies = findNode(doc, "dependencies"); - visitDependencies(sliceSliceDependencies, findNode(dependencies, "sliceSliceDependencies")); - visitDependencies(reverseSliceSliceDependencies, findNode(dependencies, "reverseSliceSliceDependencies")); - visitDependencies(sliceJavaDependencies, findNode(dependencies, "sliceJavaDependencies")); - try - { - visitErrorList(errorSliceFiles, findNode(dependencies, "errorSliceFiles")); - } - catch(SAXException e) - { - // Optional. - } - } - - DependenciesParser(IProject project) - { - _project = project; - } - } - - // A map of slice to dependencies. - // - // sliceSliceDependencies is the set of slice files that depend on the IFile - // (the output of slice2java --depend). - // - // _reverseSliceSliceDependencies is the reverse. - public Map<IFile, Set<IFile>> sliceSliceDependencies = new java.util.HashMap<IFile, Set<IFile>>(); - public Map<IFile, Set<IFile>> reverseSliceSliceDependencies = new java.util.HashMap<IFile, Set<IFile>>(); - - // A map of slice file to java source files. - public Map<IFile, Set<IFile>> sliceJavaDependencies = new java.util.HashMap<IFile, Set<IFile>>(); - - // A set of slice files that have not, or cannot be built. - public Set<IFile> errorSliceFiles = new java.util.HashSet<IFile>(); - - private IProject _project; - private MessageConsoleStream _err; - private Set<IFile> _projectResources; - private Map<IPath, IFile> _locationToResource = new HashMap<IPath, IFile>(); -} |