package org.objectstyle.wolips.wodclipse.core.validation; import java.util.LinkedList; import java.util.List; import jp.aonir.fuzzyxml.FuzzyXMLAttribute; import jp.aonir.fuzzyxml.FuzzyXMLElement; import org.eclipse.core.resources.IMarker; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.text.Position; import org.objectstyle.wolips.bindings.wod.WodBindingDeprecationProblem; import org.objectstyle.wolips.bindings.wod.WodBindingNameProblem; import org.objectstyle.wolips.bindings.wod.WodBindingValueProblem; import org.objectstyle.wolips.bindings.wod.WodProblem; import org.objectstyle.wolips.wodclipse.core.Activator; import org.objectstyle.wolips.wodclipse.core.completion.WodParserCache; import org.objectstyle.wolips.wodclipse.core.util.WodHtmlUtils; import org.objectstyle.wolips.wodclipse.core.util.WodModelUtils; public class InlineWodProblem { private WodParserCache _cache; private List<WodProblem> _wodProblems; private FuzzyXMLElement _element; public InlineWodProblem(FuzzyXMLElement element, String message, boolean warning, WodParserCache cache) { _cache = cache; _element = element; int offset = element.getOffset() + 1; int length = element.getName().length(); int lineNumber = WodHtmlUtils.getLineAtOffset(_cache.getHtmlEntry().getContents(), offset); WodProblem problem = new WodProblem(message, new Position(offset, length), lineNumber, warning); _wodProblems = new LinkedList<WodProblem>(); _wodProblems.add(problem); } public InlineWodProblem(FuzzyXMLElement element, WodProblem wodProblem, WodParserCache cache) { _cache = cache; _element = element; _wodProblems = new LinkedList<WodProblem>(); _wodProblems.add(wodProblem); } public InlineWodProblem(FuzzyXMLElement element, List<WodProblem> problems, WodParserCache cache) { _cache = cache; _element = element; _wodProblems = problems; } public FuzzyXMLElement getElement() { return _element; } public void createProblemMarkers() { for (WodProblem wodProblem : _wodProblems) { IMarker marker = WodModelUtils.createMarker(_cache.getHtmlEntry().getFile(), wodProblem); try { if (marker != null) { boolean elementError = true; if (wodProblem instanceof WodBindingNameProblem) { String name = ((WodBindingNameProblem) wodProblem).getBindingName(); FuzzyXMLAttribute attribute = _element.getAttributeNode(name); if (attribute != null) { elementError = false; int offset = attribute.getOffset() + 1; marker.setAttribute(IMarker.LINE_NUMBER, WodHtmlUtils.getLineAtOffset(_cache.getHtmlEntry().getContents(), offset)); marker.setAttribute(IMarker.CHAR_START, offset); marker.setAttribute(IMarker.CHAR_END, offset + attribute.getName().length()); } } else if (wodProblem instanceof WodBindingValueProblem) { String name = ((WodBindingValueProblem) wodProblem).getBindingName(); FuzzyXMLAttribute attribute = _element.getAttributeNode(name); if (attribute != null) { elementError = false; int offset = attribute.getOffset() + 1; marker.setAttribute(IMarker.LINE_NUMBER, WodHtmlUtils.getLineAtOffset(_cache.getHtmlEntry().getContents(), offset)); marker.setAttribute(IMarker.CHAR_START, _element.getOffset() + attribute.getValueDataOffset() + 1); marker.setAttribute(IMarker.CHAR_END, _element.getOffset() + attribute.getValueDataOffset() + 1 + attribute.getValueDataLength()); } } else if (wodProblem instanceof WodBindingDeprecationProblem) { String name = ((WodBindingDeprecationProblem) wodProblem).getBindingName(); FuzzyXMLAttribute attribute = _element.getAttributeNode(name); if (attribute != null) { elementError = false; int offset = _element.getOffset() + attribute.getValueDataOffset() + 1; marker.setAttribute(IMarker.LINE_NUMBER, WodHtmlUtils.getLineAtOffset(_cache.getHtmlEntry().getContents(), offset)); marker.setAttribute(IMarker.CHAR_START, offset); marker.setAttribute(IMarker.CHAR_END, offset + attribute.getValueDataLength()); } } if (elementError) { int offset = _element.getOffset() + 1; marker.setAttribute(IMarker.LINE_NUMBER, WodHtmlUtils.getLineAtOffset(_cache.getHtmlEntry().getContents(), offset)); marker.setAttribute(IMarker.CHAR_START, offset); marker.setAttribute(IMarker.CHAR_END, offset + _element.getName().length()); } } } catch (CoreException e) { e.printStackTrace(); Activator.getDefault().log(e); } } } }