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
53 public boolean visit(IResource resource)
56 // return true to continue visiting children.
61 class XMLErrorHandler extends DefaultHandler
66 public XMLErrorHandler(IFile file)
71 private void addMarker(SAXParseException e, int severity)
73 MograsimBuilder.this.addMarker(file, e.getMessage(), e.getLineNumber(), severity);
76 public void error(SAXParseException exception) throws SAXException
78 addMarker(exception, IMarker.SEVERITY_ERROR);
81 public void fatalError(SAXParseException exception) throws SAXException
83 addMarker(exception, IMarker.SEVERITY_ERROR);
86 public void warning(SAXParseException exception) throws SAXException
88 addMarker(exception, IMarker.SEVERITY_WARNING);
92 public static final String BUILDER_ID = "PluginTest.mograsimBuilder";
94 private static final String MARKER_TYPE = "PluginTest.xmlProblem";
96 private SAXParserFactory parserFactory;
98 private void addMarker(IFile file, String message, int lineNumber, int severity)
102 IMarker marker = file.createMarker(MARKER_TYPE);
103 marker.setAttribute(IMarker.MESSAGE, message);
104 marker.setAttribute(IMarker.SEVERITY, severity);
105 if (lineNumber == -1)
109 marker.setAttribute(IMarker.LINE_NUMBER, lineNumber);
111 catch (CoreException e)
117 protected IProject[] build(int kind, Map<String, String> args, IProgressMonitor monitor) throws CoreException
119 if (kind == FULL_BUILD)
124 IResourceDelta delta = getDelta(getProject());
130 incrementalBuild(delta, monitor);
136 protected void clean(IProgressMonitor monitor) throws CoreException
138 // delete markers set and files created
139 getProject().deleteMarkers(MARKER_TYPE, true, IResource.DEPTH_INFINITE);
142 void checkXML(IResource resource)
144 if (resource instanceof IFile && resource.getName().endsWith(".xml"))
146 IFile file = (IFile) resource;
148 XMLErrorHandler reporter = new XMLErrorHandler(file);
151 getParser().parse(file.getContents(), reporter);
159 private void deleteMarkers(IFile file)
163 file.deleteMarkers(MARKER_TYPE, false, IResource.DEPTH_ZERO);
165 catch (CoreException ce)
170 protected void fullBuild(final IProgressMonitor monitor) throws CoreException
174 getProject().accept(new SampleResourceVisitor());
176 catch (CoreException e)
181 private SAXParser getParser() throws ParserConfigurationException, SAXException
183 if (parserFactory == null)
185 parserFactory = SAXParserFactory.newInstance();
187 return parserFactory.newSAXParser();
190 protected void incrementalBuild(IResourceDelta delta, IProgressMonitor monitor) throws CoreException
192 // the visitor does the work.
193 delta.accept(new SampleDeltaVisitor());