package org.objectstyle.wolips.htmlpreview.editor; import java.io.File; import java.net.MalformedURLException; import java.util.Stack; import jp.aonir.fuzzyxml.FuzzyXMLElement; import jp.aonir.fuzzyxml.FuzzyXMLNode; import jp.aonir.fuzzyxml.internal.RenderContext; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.jdt.core.IClasspathEntry; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.JavaModelException; import org.objectstyle.wolips.bindings.wod.IWodBinding; import org.objectstyle.wolips.bindings.wod.IWodElement; import org.objectstyle.wolips.wodclipse.core.completion.WodParserCache; public abstract class TagDelegate { public abstract void renderNode(IWodElement wodElement, FuzzyXMLElement xmlElement, RenderContext renderContext, StringBuffer htmlBuffer, StringBuffer cssBuffer, Stack<WodParserCache> caches, Stack<FuzzyXMLNode> nodes); public void reset() { // DO NOTHING } public static void appendHtmlBindings(StringBuffer htmlBuffer, IWodElement wodElement) { IWodBinding idBinding = wodElement.getBindingNamed("id"); if (idBinding != null && !idBinding.isKeyPath()) { htmlBuffer.append(" id = \"" + idBinding.getValue() + "\""); } IWodBinding classBinding = wodElement.getBindingNamed("class"); if (classBinding != null && !classBinding.isKeyPath()) { htmlBuffer.append(" class = \"" + classBinding.getValue() + "\""); } IWodBinding styleBinding = wodElement.getBindingNamed("style"); if (styleBinding != null && !styleBinding.isKeyPath()) { htmlBuffer.append(" style = \"" + styleBinding.getValue() + "\""); } } public static String getResourceUrl(String frameworkBindingName, String filenameBindingName, String hrefBindingName, IWodElement wodElement, Stack<WodParserCache> caches) { String resourceUrl; IWodBinding hrefBinding = wodElement.getBindingNamed(hrefBindingName); if (hrefBinding != null && !hrefBinding.isKeyPath()) { resourceUrl = hrefBinding.getValue(); } else { resourceUrl = TagDelegate.getResourceUrl(frameworkBindingName, filenameBindingName, wodElement, caches); } return resourceUrl; } public static String getResourceUrl(String frameworkBindingName, String filenameBindingName, IWodElement wodElement, Stack<WodParserCache> caches) { File webserverResourcesFolder = null; IWodBinding frameworkBinding = wodElement.getBindingNamed(frameworkBindingName); String framework = null; if (frameworkBinding == null) { framework = "app"; } else if (!frameworkBinding.isKeyPath()) { framework = frameworkBinding.getValue(); } if (framework != null) { framework = framework.replaceAll("\"", ""); IJavaProject javaProject = caches.peek().getJavaProject(); if ("app".equals(framework)) { webserverResourcesFolder = new File(javaProject.getProject().getLocation().toFile(), "WebServerResources"); } else { try { IClasspathEntry[] classpathEntries = javaProject.getResolvedClasspath(true); for (IClasspathEntry classpathEntry : classpathEntries) { if ((classpathEntry.getEntryKind() == IClasspathEntry.CPE_PROJECT || classpathEntry.getEntryKind() == IClasspathEntry.CPE_SOURCE) && classpathEntry.getPath().segment(0).equals(framework)) { File projectFolder = new File(ResourcesPlugin.getWorkspace().getRoot().getLocation().toFile(), classpathEntry.getPath().segment(0)); webserverResourcesFolder = new File(projectFolder, "WebServerResources"); } } } catch (JavaModelException e) { e.printStackTrace(); } } } String resourceUrl = null; if (webserverResourcesFolder != null) { File webserverResourceFile = null; IWodBinding filenameBinding = wodElement.getBindingNamed(filenameBindingName); if (filenameBinding != null && !filenameBinding.isKeyPath()) { String filename = filenameBinding.getValue().replaceAll("\"", ""); webserverResourceFile = new File(webserverResourcesFolder, filename); } if (webserverResourceFile != null) { try { resourceUrl = webserverResourceFile.getAbsoluteFile().toURL().toExternalForm(); } catch (MalformedURLException e) { e.printStackTrace(); } } } if (resourceUrl == null) { resourceUrl = "MISSING"; } return resourceUrl; } }