| package $packageName$; |
| |
| import java.util.Map; |
| |
| import javax.xml.parsers.ParserConfigurationException; |
| import javax.xml.parsers.SAXParser; |
| import javax.xml.parsers.SAXParserFactory; |
| |
| import org.eclipse.core.resources.IFile; |
| import org.eclipse.core.resources.IMarker; |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.resources.IResource; |
| import org.eclipse.core.resources.IResourceDelta; |
| import org.eclipse.core.resources.IResourceDeltaVisitor; |
| import org.eclipse.core.resources.IResourceVisitor; |
| import org.eclipse.core.resources.IncrementalProjectBuilder; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.xml.sax.SAXException; |
| import org.xml.sax.SAXParseException; |
| import org.xml.sax.helpers.DefaultHandler; |
| |
| public class $builderClassName$ extends IncrementalProjectBuilder { |
| |
| class SampleDeltaVisitor implements IResourceDeltaVisitor { |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.core.resources.IResourceDeltaVisitor#visit(org.eclipse.core.resources.IResourceDelta) |
| */ |
| public boolean visit(IResourceDelta delta) throws CoreException { |
| IResource resource = delta.getResource(); |
| switch (delta.getKind()) { |
| case IResourceDelta.ADDED: |
| // handle added resource |
| checkXML(resource); |
| break; |
| case IResourceDelta.REMOVED: |
| // handle removed resource |
| break; |
| case IResourceDelta.CHANGED: |
| // handle changed resource |
| checkXML(resource); |
| break; |
| } |
| //return true to continue visiting children. |
| return true; |
| } |
| } |
| |
| class SampleResourceVisitor implements IResourceVisitor { |
| public boolean visit(IResource resource) { |
| checkXML(resource); |
| //return true to continue visiting children. |
| return true; |
| } |
| } |
| |
| class XMLErrorHandler extends DefaultHandler { |
| |
| private IFile file; |
| |
| public XMLErrorHandler(IFile file) { |
| this.file = file; |
| } |
| |
| private void addMarker(SAXParseException e, int severity) { |
| $builderClassName$.this.addMarker(file, e.getMessage(), e |
| .getLineNumber(), severity); |
| } |
| |
| public void error(SAXParseException exception) throws SAXException { |
| addMarker(exception, IMarker.SEVERITY_ERROR); |
| } |
| |
| public void fatalError(SAXParseException exception) throws SAXException { |
| addMarker(exception, IMarker.SEVERITY_ERROR); |
| } |
| |
| public void warning(SAXParseException exception) throws SAXException { |
| addMarker(exception, IMarker.SEVERITY_WARNING); |
| } |
| } |
| |
| public static final String BUILDER_ID = "$pluginId$.$builderId$"; |
| |
| private static final String MARKER_TYPE = "$pluginId$.xmlProblem"; |
| |
| private SAXParserFactory parserFactory; |
| |
| private void addMarker(IFile file, String message, int lineNumber, |
| int severity) { |
| try { |
| IMarker marker = file.createMarker(MARKER_TYPE); |
| marker.setAttribute(IMarker.MESSAGE, message); |
| marker.setAttribute(IMarker.SEVERITY, severity); |
| if (lineNumber == -1) { |
| lineNumber = 1; |
| } |
| marker.setAttribute(IMarker.LINE_NUMBER, lineNumber); |
| } catch (CoreException e) { |
| } |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.core.internal.events.InternalBuilder#build(int, |
| * java.util.Map, org.eclipse.core.runtime.IProgressMonitor) |
| */ |
| protected IProject[] build(int kind, Map args, IProgressMonitor monitor) |
| throws CoreException { |
| if (kind == FULL_BUILD) { |
| fullBuild(monitor); |
| } else { |
| IResourceDelta delta = getDelta(getProject()); |
| if (delta == null) { |
| fullBuild(monitor); |
| } else { |
| incrementalBuild(delta, monitor); |
| } |
| } |
| return null; |
| } |
| |
| void checkXML(IResource resource) { |
| if (resource instanceof IFile && resource.getName().endsWith(".xml")) { |
| IFile file = (IFile) resource; |
| deleteMarkers(file); |
| XMLErrorHandler reporter = new XMLErrorHandler(file); |
| try { |
| getParser().parse(file.getContents(), reporter); |
| } catch (Exception e1) { |
| } |
| } |
| } |
| |
| private void deleteMarkers(IFile file) { |
| try { |
| file.deleteMarkers(MARKER_TYPE, false, IResource.DEPTH_ZERO); |
| } catch (CoreException ce) { |
| } |
| } |
| |
| protected void fullBuild(final IProgressMonitor monitor) |
| throws CoreException { |
| try { |
| getProject().accept(new SampleResourceVisitor()); |
| } catch (CoreException e) { |
| } |
| } |
| |
| private SAXParser getParser() throws ParserConfigurationException, |
| SAXException { |
| if (parserFactory == null) { |
| parserFactory = SAXParserFactory.newInstance(); |
| } |
| return parserFactory.newSAXParser(); |
| } |
| |
| protected void incrementalBuild(IResourceDelta delta, |
| IProgressMonitor monitor) throws CoreException { |
| // the visitor does the work. |
| delta.accept(new SampleDeltaVisitor()); |
| } |
| } |