Removed some more warnings and cleaned more SWT listeners
[Mograsim.git] / plugins / net.mograsim.plugin.core / src / net / mograsim / plugin / nature / MograsimBuilder.java
1 package net.mograsim.plugin.nature;
2
3 import java.util.Map;
4
5 import javax.xml.parsers.ParserConfigurationException;
6 import javax.xml.parsers.SAXParser;
7 import javax.xml.parsers.SAXParserFactory;
8
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;
22
23 public class MograsimBuilder extends IncrementalProjectBuilder
24 {
25
26         class SampleDeltaVisitor implements IResourceDeltaVisitor
27         {
28                 @Override
29                 public boolean visit(IResourceDelta delta) throws CoreException
30                 {
31                         IResource resource = delta.getResource();
32                         switch (delta.getKind())
33                         {
34                         case IResourceDelta.ADDED:
35                                 // handle added resource
36                                 checkXML(resource);
37                                 break;
38                         case IResourceDelta.REMOVED:
39                                 // handle removed resource
40                                 break;
41                         case IResourceDelta.CHANGED:
42                                 // handle changed resource
43                                 checkXML(resource);
44                                 break;
45                         }
46                         // return true to continue visiting children.
47                         return true;
48                 }
49         }
50
51         class SampleResourceVisitor implements IResourceVisitor
52         {
53                 @Override
54                 public boolean visit(IResource resource)
55                 {
56                         checkXML(resource);
57                         // return true to continue visiting children.
58                         return true;
59                 }
60         }
61
62         class XMLErrorHandler extends DefaultHandler
63         {
64
65                 private IFile file;
66
67                 public XMLErrorHandler(IFile file)
68                 {
69                         this.file = file;
70                 }
71
72                 private void addMarker(SAXParseException e, int severity)
73                 {
74                         MograsimBuilder.this.addMarker(file, e.getMessage(), e.getLineNumber(), severity);
75                 }
76
77                 @Override
78                 public void error(SAXParseException exception) throws SAXException
79                 {
80                         addMarker(exception, IMarker.SEVERITY_ERROR);
81                 }
82
83                 @Override
84                 public void fatalError(SAXParseException exception) throws SAXException
85                 {
86                         addMarker(exception, IMarker.SEVERITY_ERROR);
87                 }
88
89                 @Override
90                 public void warning(SAXParseException exception) throws SAXException
91                 {
92                         addMarker(exception, IMarker.SEVERITY_WARNING);
93                 }
94         }
95
96         public static final String BUILDER_ID = "PluginTest.mograsimBuilder";
97
98         private static final String MARKER_TYPE = "PluginTest.xmlProblem";
99
100         private SAXParserFactory parserFactory;
101
102         private void addMarker(IFile file, String message, int lineNumber, int severity)
103         {
104                 try
105                 {
106                         IMarker marker = file.createMarker(MARKER_TYPE);
107                         marker.setAttribute(IMarker.MESSAGE, message);
108                         marker.setAttribute(IMarker.SEVERITY, severity);
109                         if (lineNumber == -1)
110                         {
111                                 lineNumber = 1;
112                         }
113                         marker.setAttribute(IMarker.LINE_NUMBER, lineNumber);
114                 }
115                 catch (CoreException e)
116                 {
117                 }
118         }
119
120         @Override
121         protected IProject[] build(int kind, Map<String, String> args, IProgressMonitor monitor) throws CoreException
122         {
123                 if (kind == FULL_BUILD)
124                 {
125                         fullBuild(monitor);
126                 } else
127                 {
128                         IResourceDelta delta = getDelta(getProject());
129                         if (delta == null)
130                         {
131                                 fullBuild(monitor);
132                         } else
133                         {
134                                 incrementalBuild(delta, monitor);
135                         }
136                 }
137                 return null;
138         }
139
140         @Override
141         protected void clean(IProgressMonitor monitor) throws CoreException
142         {
143                 // delete markers set and files created
144                 getProject().deleteMarkers(MARKER_TYPE, true, IResource.DEPTH_INFINITE);
145         }
146
147         void checkXML(IResource resource)
148         {
149                 if (resource instanceof IFile && resource.getName().endsWith(".xml"))
150                 {
151                         IFile file = (IFile) resource;
152                         deleteMarkers(file);
153                         XMLErrorHandler reporter = new XMLErrorHandler(file);
154                         try
155                         {
156                                 getParser().parse(file.getContents(), reporter);
157                         }
158                         catch (Exception e1)
159                         {
160                         }
161                 }
162         }
163
164         private void deleteMarkers(IFile file)
165         {
166                 try
167                 {
168                         file.deleteMarkers(MARKER_TYPE, false, IResource.DEPTH_ZERO);
169                 }
170                 catch (CoreException ce)
171                 {
172                 }
173         }
174
175         protected void fullBuild(final IProgressMonitor monitor) throws CoreException
176         {
177                 try
178                 {
179                         getProject().accept(new SampleResourceVisitor());
180                 }
181                 catch (CoreException e)
182                 {
183                 }
184         }
185
186         private SAXParser getParser() throws ParserConfigurationException, SAXException
187         {
188                 if (parserFactory == null)
189                 {
190                         parserFactory = SAXParserFactory.newInstance();
191                 }
192                 return parserFactory.newSAXParser();
193         }
194
195         protected void incrementalBuild(IResourceDelta delta, IProgressMonitor monitor) throws CoreException
196         {
197                 // the visitor does the work.
198                 delta.accept(new SampleDeltaVisitor());
199         }
200 }