Fixing some bugs and making the plug-in compatible with Java 1.4
[phpeclipse.git] / net.sourceforge.phpeclipse.launching / src / net / sourceforge / phpdt / internal / launching / PHPRuntime.java
index dd1827c..1dbea3b 100644 (file)
@@ -18,7 +18,6 @@ import java.util.List;
 import javax.xml.parsers.SAXParserFactory;
 
 import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
 import org.xml.sax.Attributes;
 import org.xml.sax.ContentHandler;
 import org.xml.sax.InputSource;
@@ -28,9 +27,11 @@ import org.xml.sax.XMLReader;
 
 public class PHPRuntime {
        protected static PHPRuntime runtime;
-       
+
        protected List installedInterpreters;
+
        protected PHPInterpreter selectedInterpreter;
+
        protected PHPRuntime() {
                super();
        }
@@ -41,7 +42,7 @@ public class PHPRuntime {
                }
                return runtime;
        }
-       
+
        public PHPInterpreter getSelectedInterpreter() {
                if (selectedInterpreter == null) {
                        loadRuntimeConfiguration();
@@ -49,14 +50,14 @@ public class PHPRuntime {
                return selectedInterpreter;
        }
 
-       public PHPInterpreter getInterpreter(String name) {
+       public PHPInterpreter getInterpreter(String installLocation) {
                Iterator interpreters = getInstalledInterpreters().iterator();
-               while(interpreters.hasNext()) {
+               while (interpreters.hasNext()) {
                        PHPInterpreter each = (PHPInterpreter) interpreters.next();
-                       if (each.getName().equals(name))
+                       if (each.getInstallLocation().toString().equals(installLocation))
                                return each;
                }
-               
+
                return getSelectedInterpreter();
        }
 
@@ -68,7 +69,8 @@ public class PHPRuntime {
        public void addInstalledInterpreter(PHPInterpreter anInterpreter) {
                getInstalledInterpreters().add(anInterpreter);
                if (getInstalledInterpreters().size() == 1)
-                       setSelectedInterpreter((PHPInterpreter) getInstalledInterpreters().get(0));
+                       setSelectedInterpreter((PHPInterpreter) getInstalledInterpreters()
+                                       .get(0));
 
                saveRuntimeConfiguration();
        }
@@ -78,97 +80,143 @@ public class PHPRuntime {
                        loadRuntimeConfiguration();
                return installedInterpreters;
        }
-       
+
        public void setInstalledInterpreters(List newInstalledInterpreters) {
                installedInterpreters = newInstalledInterpreters;
                if (installedInterpreters.size() > 0)
-                       setSelectedInterpreter((PHPInterpreter)installedInterpreters.get(0));
+                       setSelectedInterpreter((PHPInterpreter) installedInterpreters
+                                       .get(0));
                else
                        setSelectedInterpreter(null);
        }
-       
+
        protected void saveRuntimeConfiguration() {
                writeXML(getRuntimeConfigurationWriter());
        }
 
        protected Writer getRuntimeConfigurationWriter() {
                try {
-                       OutputStream stream = new BufferedOutputStream(new FileOutputStream(getRuntimeConfigurationFile()));
+                       OutputStream stream = new BufferedOutputStream(
+                                       new FileOutputStream(getRuntimeConfigurationFile()));
                        return new OutputStreamWriter(stream);
-               } catch (FileNotFoundException e) {}
+               } catch (FileNotFoundException e) {
+               }
 
                return null;
        }
-       
+
        protected void loadRuntimeConfiguration() {
                installedInterpreters = new ArrayList();
                try {
-                       XMLReader reader = SAXParserFactory.newInstance().newSAXParser().getXMLReader();
-                       reader.setContentHandler(getRuntimeConfigurationContentHandler());
-                       reader.parse(new InputSource(getRuntimeConfigurationReader()));
-               } catch(Exception e) {
-                       PHPLaunchingPlugin.getDefault().log(e);
+                       File file = getRuntimeConfigurationFile();
+                       if (file.exists()) {
+                               XMLReader reader = SAXParserFactory.newInstance()
+                                               .newSAXParser().getXMLReader();
+                               reader
+                                               .setContentHandler(getRuntimeConfigurationContentHandler());
+                               reader.parse(new InputSource(
+                                               getRuntimeConfigurationReader(file)));
+                       }
+               } catch (Exception e) {
+                       PHPLaunchingPlugin.log(e);
                }
        }
 
-       protected Reader getRuntimeConfigurationReader() {
+       protected Reader getRuntimeConfigurationReader(File file) {
                try {
-                       return new FileReader(getRuntimeConfigurationFile());
-               } catch(FileNotFoundException e) {}
+                       return new FileReader(file);
+               } catch (FileNotFoundException e) {
+               }
                return new StringReader("");
        }
-       
+
        protected void writeXML(Writer writer) {
                try {
-                       writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?><runtimeconfig>");
+                       writer
+                                       .write("<?xml version=\"1.0\" encoding=\"UTF-8\"?><runtimeconfig>");
                        Iterator interpretersIterator = installedInterpreters.iterator();
                        while (interpretersIterator.hasNext()) {
                                writer.write("<interpreter name=\"");
-                               
-                               PHPInterpreter entry = (PHPInterpreter) interpretersIterator.next();
-                               writer.write(entry.getName());
+
+                               PHPInterpreter entry = (PHPInterpreter) interpretersIterator
+                                               .next();
+                               // writer.write(entry.getName());
                                writer.write("\" path=\"");
                                writer.write(entry.getInstallLocation().toString());
                                writer.write("\"");
                                if (entry.equals(selectedInterpreter))
                                        writer.write(" selected=\"true\"");
-                                       
+
                                writer.write("/>");
                        }
                        writer.write("</runtimeconfig>");
                        writer.flush();
-               } catch(IOException e) {
+               } catch (IOException e) {
                        PHPLaunchingPlugin.log(e);
                }
        }
 
        protected ContentHandler getRuntimeConfigurationContentHandler() {
                return new ContentHandler() {
-                       public void setDocumentLocator(Locator locator) {}
-                       public void startDocument() throws SAXException {}
-                       public void endDocument() throws SAXException {}
-                       public void startPrefixMapping(String prefix, String uri) throws SAXException {}
-                       public void endPrefixMapping(String prefix) throws SAXException {}
-                       public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
+                       public void setDocumentLocator(Locator locator) {
+                       }
+
+                       public void startDocument() throws SAXException {
+                       }
+
+                       public void endDocument() throws SAXException {
+                       }
+
+                       public void startPrefixMapping(String prefix, String uri)
+                                       throws SAXException {
+                       }
+
+                       public void endPrefixMapping(String prefix) throws SAXException {
+                       }
+
+                       public void startElement(String namespaceURI, String localName,
+                                       String qName, Attributes atts) throws SAXException {
                                if ("interpreter".equals(qName)) {
                                        String interpreterName = atts.getValue("name");
-                                       IPath installLocation = new Path(atts.getValue("path"));
-                                       PHPInterpreter interpreter = new PHPInterpreter(interpreterName, installLocation);
+                                       java.io.File installLocation;
+                                       if (interpreterName != null) {
+                                               installLocation = new File(atts.getValue("path")
+                                                               + File.separatorChar + interpreterName);
+                                       } else {
+                                               installLocation = new File(atts.getValue("path"));
+                                       }
+                                       PHPInterpreter interpreter = new PHPInterpreter(
+                                                       installLocation);
                                        installedInterpreters.add(interpreter);
                                        if (atts.getValue("selected") != null)
                                                selectedInterpreter = interpreter;
                                }
                        }
-                       public void endElement(String namespaceURI, String localName, String qName) throws SAXException {}
-                       public void characters(char[] ch, int start, int length) throws SAXException {}
-                       public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {}
-                       public void processingInstruction(String target, String data) throws SAXException {}
-                       public void skippedEntity(String name) throws SAXException {}
+
+                       public void endElement(String namespaceURI, String localName,
+                                       String qName) throws SAXException {
+                       }
+
+                       public void characters(char[] ch, int start, int length)
+                                       throws SAXException {
+                       }
+
+                       public void ignorableWhitespace(char[] ch, int start, int length)
+                                       throws SAXException {
+                       }
+
+                       public void processingInstruction(String target, String data)
+                                       throws SAXException {
+                       }
+
+                       public void skippedEntity(String name) throws SAXException {
+                       }
                };
        }
-       
+
        protected File getRuntimeConfigurationFile() {
-               IPath stateLocation = PHPLaunchingPlugin.getDefault().getStateLocation();
+               IPath stateLocation = PHPLaunchingPlugin.getDefault()
+                               .getStateLocation();
                IPath fileLocation = stateLocation.append("runtimeConfiguration.xml");
                return new File(fileLocation.toOSString());
        }