diff options
Diffstat (limited to 'org.openembedded.bc.ui/src/org/openembedded/bc/ui/builder/BitbakeBuilder.java')
-rw-r--r-- | org.openembedded.bc.ui/src/org/openembedded/bc/ui/builder/BitbakeBuilder.java | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/org.openembedded.bc.ui/src/org/openembedded/bc/ui/builder/BitbakeBuilder.java b/org.openembedded.bc.ui/src/org/openembedded/bc/ui/builder/BitbakeBuilder.java new file mode 100644 index 0000000..40ece69 --- /dev/null +++ b/org.openembedded.bc.ui/src/org/openembedded/bc/ui/builder/BitbakeBuilder.java @@ -0,0 +1,178 @@ +/***************************************************************************** + * Copyright (c) 2009 Ken Gilmer + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Ken Gilmer - initial API and implementation + *******************************************************************************/ +package org.openembedded.bc.ui.builder; + +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.IncrementalProjectBuilder; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.xml.sax.SAXException; + +public class BitbakeBuilder 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) { + + return true; + } + } +*/ +/* class XMLErrorHandler extends DefaultHandler { + + private IFile file; + + public XMLErrorHandler(IFile file) { + this.file = file; + } + + private void addMarker(SAXParseException e, int severity) { + BitbakeBuilder.this.addMarker(file, e.getMessage(), e + .getLineNumber(), severity); + } + + @Override + public void error(SAXParseException exception) throws SAXException { + addMarker(exception, IMarker.SEVERITY_ERROR); + } + + @Override + public void fatalError(SAXParseException exception) throws SAXException { + addMarker(exception, IMarker.SEVERITY_ERROR); + } + + @Override + public void warning(SAXParseException exception) throws SAXException { + addMarker(exception, IMarker.SEVERITY_WARNING); + } + } +*/ + public static final String BUILDER_ID = "org.openembedded.bc.ui.builder.BitbakeBuilder"; + + private static final String MARKER_TYPE = "org.openembedded.bc.ui.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) { + e.printStackTrace(); + } + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.core.internal.events.InternalBuilder#build(int, + * java.util.Map, org.eclipse.core.runtime.IProgressMonitor) + */ + @Override + 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) { + ce.printStackTrace(); + } + } + + 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()); + } +} |