package org.objectstyle.wolips.wodclipse.core.completion; import java.util.List; import org.eclipse.core.resources.IFile; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.IType; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.Position; import org.eclipse.ui.part.FileEditorInput; import org.objectstyle.wolips.bindings.Activator; import org.objectstyle.wolips.bindings.preferences.PreferenceConstants; import org.objectstyle.wolips.bindings.wod.HtmlElementCache; import org.objectstyle.wolips.bindings.wod.HtmlElementName; import org.objectstyle.wolips.bindings.wod.IWodElement; import org.objectstyle.wolips.bindings.wod.IWodElementProblem; import org.objectstyle.wolips.bindings.wod.IWodModel; import org.objectstyle.wolips.bindings.wod.WodElementProblem; import org.objectstyle.wolips.bindings.wod.WodProblem; import org.objectstyle.wolips.wodclipse.core.document.WodFileDocumentProvider; import org.objectstyle.wolips.wodclipse.core.util.WodHtmlUtils; import org.objectstyle.wolips.wodclipse.core.util.WodModelUtils; public class WodCacheEntry extends AbstractCacheEntry<IWodModel> { public WodCacheEntry(WodParserCache cache) { super(cache); } @Override public void validate() throws Exception { setValidated(true); IWodModel wodModel = _getModel(); if (wodModel != null) { WodParserCache cache = getCache(); IJavaProject javaProject = cache.getJavaProject(); IType componentType = cache.getComponentType(); HtmlElementCache htmlElementCache = cache.getHtmlEntry().getHtmlElementCache(); List<WodProblem> wodProblems = wodModel.getProblems(javaProject, componentType, WodParserCache.getTypeCache(), htmlElementCache); IFile wodFile = getFile(); if (wodFile != null && wodFile.exists()) { IFile htmlFile = cache.getHtmlEntry().getFile(); boolean createHtmlMarkers = htmlFile != null && htmlFile.exists(); for (WodProblem wodProblem : wodProblems) { WodModelUtils.createMarker(wodFile, wodProblem); String wodErrorsInHtmlSeverity = Activator.getDefault().getPluginPreferences().getString(PreferenceConstants.WOD_ERRORS_IN_HTML_SEVERITY_KEY); if (!PreferenceConstants.IGNORE.equals(wodErrorsInHtmlSeverity)) { // We create HTML markers for WOD problems so that you can have the // wod view closed and still see errors if (createHtmlMarkers && wodProblem instanceof IWodElementProblem) { IWodElement element = ((IWodElementProblem) wodProblem).getElement(); if (element != null) { List<HtmlElementName> htmlElementNames = htmlElementCache.getHtmlElementNames(element.getElementName()); if (htmlElementNames != null) { for (HtmlElementName htmlElementName : htmlElementNames) { int lineNumber = WodHtmlUtils.getLineAtOffset(cache.getHtmlEntry().getContents(), htmlElementName.getStartOffset()); WodElementProblem htmlProblem = new WodElementProblem(element, "In the WOD, " + wodProblem.getMessage(), new Position(htmlElementName.getStartOffset(), htmlElementName.getEndOffset() - htmlElementName.getStartOffset() + 1), lineNumber, wodProblem.isWarning() || PreferenceConstants.WARNING.equals(wodErrorsInHtmlSeverity)); WodModelUtils.createMarker(htmlFile, htmlProblem); } } } } } } } } } @Override protected IWodModel _parse(String contents) { //_wodModel = WodModelUtils.createWodModel(_wodFile, _wodDocument); return null; } @Override protected IWodModel _parse(IDocument document, boolean updateCache) { IFile wodFile = getFile(); IWodModel model = WodModelUtils.createWodModel(wodFile, document); _setContents(document.get()); return model; } @Override protected IWodModel _parse(IFile file, boolean updateCache) throws Exception { IWodModel model; FileEditorInput input = new FileEditorInput(file); WodFileDocumentProvider provider = new WodFileDocumentProvider(); provider.connect(input); try { IDocument document = provider.getDocument(input); model = parse(document, updateCache); } finally { provider.disconnect(input); } return model; } }