X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/resourcesview/PHPProject.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/resourcesview/PHPProject.java index e903be5..775c6d7 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/resourcesview/PHPProject.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/resourcesview/PHPProject.java @@ -11,8 +11,10 @@ import javax.xml.parsers.SAXParserFactory; import net.sourceforge.phpeclipse.LoadPathEntry; import net.sourceforge.phpeclipse.PHPeclipsePlugin; +import org.eclipse.core.resources.ICommand; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IProjectDescription; import org.eclipse.core.resources.IProjectNature; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; @@ -26,150 +28,201 @@ import org.xml.sax.SAXException; import org.xml.sax.XMLReader; public class PHPProject implements IProjectNature, PHPElement { - protected IProject fProject; - protected List loadPathEntries; - protected boolean scratched; - - public PHPProject() {} - - public void configure() throws CoreException {} - - public void deconfigure() throws CoreException {} - - public IProject getProject() { - return fProject; - } - - protected IProject getProject(String name) { - return PHPeclipsePlugin.getWorkspace().getRoot().getProject(name); - } - - public void setProject(IProject aProject) { - fProject = aProject; - } - - public void addLoadPathEntry(IProject anotherPHPProject) { - scratched = true; - - LoadPathEntry newEntry = new LoadPathEntry(anotherPHPProject); - getLoadPathEntries().add(newEntry); - } - - public void removeLoadPathEntry(IProject anotherPHPProject) { - Iterator entries = getLoadPathEntries().iterator(); - while (entries.hasNext()) { - LoadPathEntry entry = (LoadPathEntry) entries.next(); - if (entry.getType() == LoadPathEntry.TYPE_PROJECT && entry.getProject().getName().equals(anotherPHPProject.getName())) { - getLoadPathEntries().remove(entry); - scratched = true; - break; - } - } - } - - public List getLoadPathEntries() { - if (loadPathEntries == null) { - loadLoadPathEntries(); - } - - return loadPathEntries; - } - - public List getReferencedProjects() { - List referencedProjects = new ArrayList(); - - Iterator iterator = getLoadPathEntries().iterator(); - while (iterator.hasNext()) { - LoadPathEntry pathEntry = (LoadPathEntry) iterator.next(); - if (pathEntry.getType() == LoadPathEntry.TYPE_PROJECT) - referencedProjects.add(pathEntry.getProject()); - } - - return referencedProjects; - } - - protected void loadLoadPathEntries() { - loadPathEntries = new ArrayList(); - - IFile loadPathsFile = getLoadPathEntriesFile(); - - XMLReader reader = null; - try { - reader = SAXParserFactory.newInstance().newSAXParser().getXMLReader(); - reader.setContentHandler(getLoadPathEntriesContentHandler()); - reader.parse(new InputSource(loadPathsFile.getContents())); - } catch (Exception e) { - //the file is nonextant or unreadable - } - } - - protected ContentHandler getLoadPathEntriesContentHandler() { - return new ContentHandler() { - public void characters(char[] arg0, int arg1, int arg2) throws SAXException {} - - public void endDocument() throws SAXException {} - - public void endElement(String arg0, String arg1, String arg2) throws SAXException {} - - public void endPrefixMapping(String arg0) throws SAXException {} - - public void ignorableWhitespace(char[] arg0, int arg1, int arg2) throws SAXException {} - - public void processingInstruction(String arg0, String arg1) throws SAXException {} - - public void setDocumentLocator(Locator arg0) {} - - public void skippedEntity(String arg0) throws SAXException {} - - public void startDocument() throws SAXException {} - - public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { - if ("pathentry".equals(qName)) - if ("project".equals(atts.getValue("type"))) { - IPath referencedProjectPath = new Path(atts.getValue("path")); - IProject referencedProject = getProject(referencedProjectPath.lastSegment()); - loadPathEntries.add(new LoadPathEntry(referencedProject)); - } - } - - public void startPrefixMapping(String arg0, String arg1) throws SAXException {} - }; - } - - protected IFile getLoadPathEntriesFile() { - return fProject.getFile(".loadpath"); - } - - public void save() throws CoreException { - if (scratched) { - InputStream xmlPath = new ByteArrayInputStream(getLoadPathXML().getBytes()); - IFile loadPathsFile = getLoadPathEntriesFile(); - if (!loadPathsFile.exists()) - loadPathsFile.create(xmlPath, true, null); - else - loadPathsFile.setContents(xmlPath, true, false, null); - - scratched = false; - } - } - - protected String getLoadPathXML() { - StringBuffer buffer = new StringBuffer(); - buffer.append(""); - - Iterator pathEntriesIterator = loadPathEntries.iterator(); - - while (pathEntriesIterator.hasNext()) { - LoadPathEntry entry = (LoadPathEntry) pathEntriesIterator.next(); - buffer.append(entry.toXML()); - } - - buffer.append(""); - return buffer.toString(); - } - - public IResource getUnderlyingResource() { - return fProject; - } + protected IProject fProject; + protected List loadPathEntries; + protected boolean scratched; + + public PHPProject() { + } + + public void configure() throws CoreException { + // get project description and then the associated build commands + IProjectDescription desc = fProject.getDescription(); + ICommand[] commands = desc.getBuildSpec(); + + // determine if builder already associated + boolean found = false; + for (int i = 0; i < commands.length; ++i) { + if (commands[i].getBuilderName().equals(PHPeclipsePlugin.BUILDER_PARSER_ID)) { + found = true; + break; + } + } + + // add builder if not already in project + if (!found) { + ICommand command = desc.newCommand(); + command.setBuilderName(PHPeclipsePlugin.BUILDER_PARSER_ID); + ICommand[] newCommands = new ICommand[commands.length + 1]; + + // Add it before other builders. + System.arraycopy(commands, 0, newCommands, 1, commands.length); + newCommands[0] = command; + desc.setBuildSpec(newCommands); + fProject.setDescription(desc, null); + } + } + + public void deconfigure() throws CoreException { + } + + public IProject getProject() { + return fProject; + } + + protected IProject getProject(String name) { + return PHPeclipsePlugin.getWorkspace().getRoot().getProject(name); + } + + public void setProject(IProject aProject) { + fProject = aProject; + } + + public void addLoadPathEntry(IProject anotherPHPProject) { + scratched = true; + + LoadPathEntry newEntry = new LoadPathEntry(anotherPHPProject); + getLoadPathEntries().add(newEntry); + } + + public void removeLoadPathEntry(IProject anotherPHPProject) { + Iterator entries = getLoadPathEntries().iterator(); + while (entries.hasNext()) { + LoadPathEntry entry = (LoadPathEntry) entries.next(); + if (entry.getType() == LoadPathEntry.TYPE_PROJECT + && entry.getProject().getName().equals(anotherPHPProject.getName())) { + getLoadPathEntries().remove(entry); + scratched = true; + break; + } + } + } + + public List getLoadPathEntries() { + if (loadPathEntries == null) { + loadLoadPathEntries(); + } + + return loadPathEntries; + } + + public List getReferencedProjects() { + List referencedProjects = new ArrayList(); + + Iterator iterator = getLoadPathEntries().iterator(); + while (iterator.hasNext()) { + LoadPathEntry pathEntry = (LoadPathEntry) iterator.next(); + if (pathEntry.getType() == LoadPathEntry.TYPE_PROJECT) + referencedProjects.add(pathEntry.getProject()); + } + + return referencedProjects; + } + + protected void loadLoadPathEntries() { + loadPathEntries = new ArrayList(); + + IFile loadPathsFile = getLoadPathEntriesFile(); + + XMLReader reader = null; + try { + reader = SAXParserFactory.newInstance().newSAXParser().getXMLReader(); + reader.setContentHandler(getLoadPathEntriesContentHandler()); + reader.parse(new InputSource(loadPathsFile.getContents())); + } catch (Exception e) { + //the file is nonextant or unreadable + } + } + + protected ContentHandler getLoadPathEntriesContentHandler() { + return new ContentHandler() { + public void characters(char[] arg0, int arg1, int arg2) + throws SAXException { + } + + public void endDocument() throws SAXException { + } + + public void endElement(String arg0, String arg1, String arg2) + throws SAXException { + } + + public void endPrefixMapping(String arg0) throws SAXException { + } + + public void ignorableWhitespace(char[] arg0, int arg1, int arg2) + throws SAXException { + } + + public void processingInstruction(String arg0, String arg1) + throws SAXException { + } + + public void setDocumentLocator(Locator arg0) { + } + + public void skippedEntity(String arg0) throws SAXException { + } + + public void startDocument() throws SAXException { + } + + public void startElement( + String namespaceURI, + String localName, + String qName, + Attributes atts) + throws SAXException { + if ("pathentry".equals(qName)) + if ("project".equals(atts.getValue("type"))) { + IPath referencedProjectPath = new Path(atts.getValue("path")); + IProject referencedProject = + getProject(referencedProjectPath.lastSegment()); + loadPathEntries.add(new LoadPathEntry(referencedProject)); + } + } + + public void startPrefixMapping(String arg0, String arg1) + throws SAXException { + } + }; + } + + protected IFile getLoadPathEntriesFile() { + return fProject.getFile(".loadpath"); + } + + public void save() throws CoreException { + if (scratched) { + InputStream xmlPath = + new ByteArrayInputStream(getLoadPathXML().getBytes()); + IFile loadPathsFile = getLoadPathEntriesFile(); + if (!loadPathsFile.exists()) + loadPathsFile.create(xmlPath, true, null); + else + loadPathsFile.setContents(xmlPath, true, false, null); + + scratched = false; + } + } + + protected String getLoadPathXML() { + StringBuffer buffer = new StringBuffer(); + buffer.append(""); + + Iterator pathEntriesIterator = loadPathEntries.iterator(); + + while (pathEntriesIterator.hasNext()) { + LoadPathEntry entry = (LoadPathEntry) pathEntriesIterator.next(); + buffer.append(entry.toXML()); + } + + buffer.append(""); + return buffer.toString(); + } + + public IResource getUnderlyingResource() { + return fProject; + } }