1 package net.mograsim.plugin.nature;
5 import javax.xml.parsers.ParserConfigurationException;
6 import javax.xml.parsers.SAXParser;
7 import javax.xml.parsers.SAXParserFactory;
9 import org.eclipse.core.resources.IFile;
10 import org.eclipse.core.resources.IMarker;
11 import org.eclipse.core.resources.IProject;
12 import org.eclipse.core.resources.IResource;
13 import org.eclipse.core.resources.IResourceDelta;
14 import org.eclipse.core.resources.IResourceDeltaVisitor;
15 import org.eclipse.core.resources.IResourceVisitor;
16 import org.eclipse.core.resources.IncrementalProjectBuilder;
17 import org.eclipse.core.runtime.CoreException;
18 import org.eclipse.core.runtime.IProgressMonitor;
19 import org.xml.sax.SAXException;
20 import org.xml.sax.SAXParseException;
21 import org.xml.sax.helpers.DefaultHandler;
23 public class MograsimBuilder extends IncrementalProjectBuilder
26 class SampleDeltaVisitor implements IResourceDeltaVisitor
29 public boolean visit(IResourceDelta delta) throws CoreException
31 IResource resource = delta.getResource();
32 switch (delta.getKind())
34 case IResourceDelta.ADDED:
35 // handle added resource
38 case IResourceDelta.REMOVED:
39 // handle removed resource
41 case IResourceDelta.CHANGED:
42 // handle changed resource
46 // return true to continue visiting children.
51 class SampleResourceVisitor implements IResourceVisitor
54 public boolean visit(IResource resource)
57 // return true to continue visiting children.
62 class XMLErrorHandler extends DefaultHandler
67 public XMLErrorHandler(IFile file)
72 private void addMarker(SAXParseException e, int severity)
74 MograsimBuilder.this.addMarker(file, e.getMessage(), e.getLineNumber(), severity);
78 public void error(SAXParseException exception) throws SAXException
80 addMarker(exception, IMarker.SEVERITY_ERROR);
84 public void fatalError(SAXParseException exception) throws SAXException
86 addMarker(exception, IMarker.SEVERITY_ERROR);
90 public void warning(SAXParseException exception) throws SAXException
92 addMarker(exception, IMarker.SEVERITY_WARNING);
96 public static final String BUILDER_ID = "PluginTest.mograsimBuilder";
98 private static final String MARKER_TYPE = "PluginTest.xmlProblem";
100 private SAXParserFactory parserFactory;
102 private void addMarker(IFile file, String message, int lineNumber, int severity)
106 IMarker marker = file.createMarker(MARKER_TYPE);
107 marker.setAttribute(IMarker.MESSAGE, message);
108 marker.setAttribute(IMarker.SEVERITY, severity);
109 if (lineNumber == -1)
113 marker.setAttribute(IMarker.LINE_NUMBER, lineNumber);
115 catch (CoreException e)
121 protected IProject[] build(int kind, Map<String, String> args, IProgressMonitor monitor) throws CoreException
123 if (kind == FULL_BUILD)
128 IResourceDelta delta = getDelta(getProject());
134 incrementalBuild(delta, monitor);
141 protected void clean(IProgressMonitor monitor) throws CoreException
143 // delete markers set and files created
144 getProject().deleteMarkers(MARKER_TYPE, true, IResource.DEPTH_INFINITE);
147 void checkXML(IResource resource)
149 if (resource instanceof IFile && resource.getName().endsWith(".xml"))
151 IFile file = (IFile) resource;
153 XMLErrorHandler reporter = new XMLErrorHandler(file);
156 getParser().parse(file.getContents(), reporter);
164 private void deleteMarkers(IFile file)
168 file.deleteMarkers(MARKER_TYPE, false, IResource.DEPTH_ZERO);
170 catch (CoreException ce)
175 protected void fullBuild(final IProgressMonitor monitor) throws CoreException
179 getProject().accept(new SampleResourceVisitor());
181 catch (CoreException e)
186 private SAXParser getParser() throws ParserConfigurationException, SAXException
188 if (parserFactory == null)
190 parserFactory = SAXParserFactory.newInstance();
192 return parserFactory.newSAXParser();
195 protected void incrementalBuild(IResourceDelta delta, IProgressMonitor monitor) throws CoreException
197 // the visitor does the work.
198 delta.accept(new SampleDeltaVisitor());