Update of
/var/cvs/contributions/CMSContainer/cmsc/portlets/src/java/com/finalist/cmsc/portlets
In directory
james.mmbase.org:/tmp/cvs-serv16519/cmsc/portlets/src/java/com/finalist/cmsc/portlets
Modified Files:
XsltPortlet.java
Log Message:
CMSC-1276 Improve extensibility of xsltportlet
See also:
http://cvs.mmbase.org/viewcvs/contributions/CMSContainer/cmsc/portlets/src/java/com/finalist/cmsc/portlets
See also: http://www.mmbase.org/jira/browse/CMSC-1276
Index: XsltPortlet.java
===================================================================
RCS file:
/var/cvs/contributions/CMSContainer/cmsc/portlets/src/java/com/finalist/cmsc/portlets/XsltPortlet.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
--- XsltPortlet.java 17 Dec 2008 13:33:16 -0000 1.7
+++ XsltPortlet.java 4 Feb 2009 16:18:09 -0000 1.8
@@ -18,14 +18,11 @@
import javax.portlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.transform.TransformerException;
+import javax.xml.transform.*;
+import javax.xml.transform.stream.StreamSource;
import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.StringUtils;
-import org.xml.sax.SAXException;
-
import com.finalist.cmsc.beans.om.NavigationItem;
import com.finalist.cmsc.navigation.ServerUtil;
import com.finalist.cmsc.portalImpl.PortalConstants;
@@ -112,20 +109,77 @@
@Override
protected void doView(RenderRequest request, RenderResponse response)
throws PortletException, IOException {
PortletPreferences preferences = request.getPreferences();
- String template =
preferences.getValue(PortalConstants.CMSC_PORTLET_VIEW_TEMPLATE, null);
- String page = preferences.getValue(PAGE, null);
- String window = preferences.getValue(WINDOW, null);
- String xsl = getTemplate("view", template, "xsl");
String xmlSource = preferences.getValue(SOURCE_ATTR_PARAM, null);
+ Object xml = null;
+ if (StringUtils.isNotEmpty(xmlSource)) {
+ xml = new URL(xmlSource);
+ }
+ try {
+ renderXml(request, response, xml);
+ }
+ catch (MalformedURLException e) {
+ getLogger().error("Xslt portlet URL error: " + e.getMessage());
+ String errmsg = "error.url.malformed";
+ response.getWriter().print(createErrorMessage(request, errmsg,
xmlSource));
+ }
+ catch (UnknownHostException uhe) {
+ getLogger().error("Xslt portlet connection error: " +
uhe.getMessage());
+ String errmsg = "error.url.unknownhost";
+ response.getWriter().print(createErrorMessage(request, errmsg,
xmlSource));
+ }
+ catch (ConnectException ce) {
+ getLogger().error("Xslt portlet connection error: " +
ce.getMessage());
+ String errmsg = "error.url.connect";
+ response.getWriter().print(createErrorMessage(request, errmsg,
xmlSource));
+ }
+ }
+
+
+ protected void renderXml(RenderRequest request, RenderResponse response,
Object xml) throws IOException {
// set required content type and write content
+
+ PortletPreferences preferences = request.getPreferences();
+ String template =
preferences.getValue(PortalConstants.CMSC_PORTLET_VIEW_TEMPLATE, null);
+ String xsl = getTemplate("view", template, "xsl");
response.setContentType("text/html");
- if (StringUtils.isNotEmpty(xsl) && StringUtils.isNotEmpty(xmlSource)) {
+ if (StringUtils.isNotEmpty(xsl) && xml != null) {
try {
HashMap<String, Object> xslParams = getXsltParams(preferences);
+ addRenderUrl(request, response, xslParams);
+ addActionUrl(response, xslParams);
+ xslParams.put("NAMESPACE", response.getNamespace());
+
+ StringBuffer content = new StringBuffer(4096);
+
+ String html = transformXml(xsl, xml, xslParams);
+ if (html != null) {
+ content.append(html);
+ }
+ response.getWriter().print(content.toString());
+ }
+ catch (TransformerException e) {
+ getLogger().error("Xslt portlet transformer error: " +
e.getMessage(), e);
+ }
+ }
+ }
+
+
+ private void addActionUrl(RenderResponse response, HashMap<String, Object>
xslParams) {
+ PortletURL actionUrl = response.createActionURL();
+ xslParams.put("ACTIONURL", actionUrl);
+ }
+
+
+ private void addRenderUrl(RenderRequest request, RenderResponse response,
HashMap<String, Object> xslParams) {
/** get renderUrl */
PortletURL renderUrl = null;
+
+ PortletPreferences preferences = request.getPreferences();
+ String page = preferences.getValue(PAGE, null);
+ String window = preferences.getValue(WINDOW, null);
+
if (page != null && window != null) {
String link = "";
NavigationItem item =
SiteManagement.convertToNavigationItem(page);
@@ -144,49 +198,25 @@
renderUrl = response.createRenderURL();
}
xslParams.put("RENDERURL", renderUrl);
-
- StringBuffer content = new StringBuffer(4096);
-
- String html = transformXml(xsl, xmlSource, xslParams);
- if (html != null) {
- content.append(html);
- }
- response.getWriter().print(content.toString());
- }
- catch (TransformerException e) {
- getLogger().error("Xslt portlet transformer error: " +
e.getMessage());
- }
- catch (ParserConfigurationException e) {
- getLogger().error("Xslt portlet parser error: " + e.getMessage());
- }
- catch (SAXException e) {
- getLogger().error("Xslt portlet sax error: " + e.getMessage());
- }
- catch (MalformedURLException e) {
- getLogger().error("Xslt portlet URL error: " + e.getMessage());
- String errmsg = "error.url.malformed";
- response.getWriter().print(createErrorMessage(request, errmsg,
xmlSource));
- }
- catch (UnknownHostException uhe) {
- getLogger().error("Xslt portlet connection error: " +
uhe.getMessage());
- String errmsg = "error.url.unknownhost";
- response.getWriter().print(createErrorMessage(request, errmsg,
xmlSource));
- }
- catch (ConnectException ce) {
- getLogger().error("Xslt portlet connection error: " +
ce.getMessage());
- String errmsg = "error.url.connect";
- response.getWriter().print(createErrorMessage(request, errmsg,
xmlSource));
- }
- }
}
- protected String transformXml(String xsl, String xml, HashMap<String,
Object> xslParams)
- throws TransformerException, ParserConfigurationException,
SAXException, IOException, MalformedURLException {
+ protected String transformXml(String xsl, Object xml, HashMap<String,
Object> xslParams)
+ throws TransformerException, IOException, MalformedURLException {
InputStream xslSrc = getPortletContext().getResourceAsStream(xsl);
- URL xmlURL = new URL(xml);
- XsltUtil xsltUtil = new XsltUtil(xmlURL, xslSrc, null);
+ XsltUtil xsltUtil = new XsltUtil(xml, xslSrc, null);
+ URIResolver uriResolver = new URIResolver() {
+ public Source resolve(String href, String base) {
+ String includedXsl = XsltPortlet.this.getTemplate("view", href,
"xsl");
+
+ InputStream includedXslSrc =
XsltPortlet.this.getPortletContext().getResourceAsStream(includedXsl);
+ return new StreamSource(includedXslSrc);
+ }
+ };
+
+ xsltUtil.setURIResolver(uriResolver);
+
return xsltUtil.transformToString(xslParams);
}
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs