import javax.xml.transform.dom.DOMSource;\r
\r
import org.argeo.slc.core.SlcException;\r
+import org.argeo.slc.core.process.SlcExecution;\r
+import org.argeo.slc.core.test.tree.TreeTestResult;\r
+import org.argeo.slc.core.test.tree.TreeTestResultCollection;\r
import org.springframework.oxm.Marshaller;\r
import org.springframework.web.servlet.view.xslt.XsltView;\r
import org.w3c.dom.Document;\r
\r
@Override\r
protected Class<?>[] getSourceTypes() {\r
- return new Class[] { Object.class };\r
+ return new Class[] { TreeTestResult.class,\r
+ TreeTestResultCollection.class, SlcExecution.class };\r
}\r
\r
@Override\r
package org.argeo.slc.web.mvc;\r
\r
+import java.io.IOException;\r
+import java.util.Map;\r
+import java.util.TreeMap;\r
+\r
+import javax.xml.transform.Source;\r
+import javax.xml.transform.TransformerException;\r
+import javax.xml.transform.URIResolver;\r
+import javax.xml.transform.stream.StreamSource;\r
+\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+import org.argeo.slc.core.SlcException;\r
+import org.springframework.core.io.DefaultResourceLoader;\r
+import org.springframework.core.io.Resource;\r
import org.springframework.oxm.Marshaller;\r
import org.springframework.web.servlet.view.AbstractUrlBasedView;\r
import org.springframework.web.servlet.view.xslt.XsltViewResolver;\r
\r
-public class XsltMarshallerViewResolver extends XsltViewResolver {\r
+public class XsltMarshallerViewResolver extends XsltViewResolver implements\r
+ URIResolver {\r
+ private final static Log log = LogFactory\r
+ .getLog(XsltMarshallerViewResolver.class);\r
\r
private Marshaller marshaller;\r
+ private Map<String, Source> cacheUriResolver = new TreeMap<String, Source>();\r
+\r
+ public XsltMarshallerViewResolver() {\r
+ setUriResolver(this);\r
+ }\r
\r
@Override\r
protected AbstractUrlBasedView buildView(String viewName) throws Exception {\r
this.marshaller = marshaller;\r
}\r
\r
+ @Override\r
+ public Source resolve(String href, String base) throws TransformerException {\r
+ if (log.isTraceEnabled())\r
+ log.trace("Resolve URI for href=" + href + " base=" + base);\r
+\r
+ Source res = null;\r
+ if (isCache())\r
+ res = cacheUriResolver.get(href);\r
+\r
+ if (res == null)\r
+ res = getStylesheetSource(href);\r
+\r
+ if (res == null)\r
+ res = getStylesheetSource(getPrefix() + href);\r
+\r
+ if (res == null)\r
+ throw new SlcException("Can't resolve URI for href=" + href\r
+ + " base=" + base);\r
+\r
+ if (isCache() && !cacheUriResolver.containsKey(href))\r
+ cacheUriResolver.put(href, res);\r
+\r
+ return res;\r
+ }\r
+\r
+ protected Source getStylesheetSource(String url) {\r
+ if (log.isDebugEnabled()) {\r
+ log.debug("Loading XSLT stylesheet from '" + url + "'");\r
+ }\r
+ try {\r
+ final Resource stylesheetResource = getApplicationContext()\r
+ .getResource(url);\r
+ String systemId = url.substring(0, url.lastIndexOf('/') + 1);\r
+ return new StreamSource(stylesheetResource.getInputStream(),\r
+ systemId);\r
+ } catch (IOException e) {\r
+ if (log.isTraceEnabled())\r
+ log.trace("Cannot load stylesheet " + url, e);\r
+ return null;\r
+ }\r
+ }\r
+\r
}\r