blob: 631018dae31d5b27eb22f1aceee289157aa6fa18 [file] [log] [blame]
/* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.portals.pluto.demo.v3annotated;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.inject.Inject;
import javax.portlet.MutableRenderParameters;
import javax.portlet.MutableResourceParameters;
import javax.portlet.PortletConfig;
import javax.portlet.PortletException;
import javax.portlet.PortletRequestDispatcher;
import javax.portlet.PortletURL;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import javax.portlet.ResourceRequest;
import javax.portlet.ResourceResponse;
import javax.portlet.ResourceURL;
import javax.portlet.annotations.PortletConfiguration;
import javax.portlet.annotations.RenderMethod;
import javax.portlet.annotations.ServeResourceMethod;
import javax.portlet.MimeResponse;
/**
* Resource portlet for viewing path information.
*/
@PortletConfiguration(portletName="PathInfoPortlet") // not necessary; test for title handling
public class PathInfoPortlet {
public static final String RESPARAM_DISPLAY = "display";
private static final String JSP = "/WEB-INF/jsp/pathinfo.jsp?mix1&qp1=qval1&mix2=qmix2";
private static final String SERVLET = "/Named/Bob/Some/Path/Info?mix1&qp1=qval1&mix2=qmix2";
private static final String NAME = "Bob";
@Inject
private PortletConfig pcfg;
@Inject
private MimeResponse mimeresp;
@RenderMethod(portletNames = { "PathInfoPortlet" }, ordinal = 100)
public void getImageInclude(RenderRequest req, RenderResponse resp) throws IOException, PortletException {
String op = req.getRenderParameters().getValue("op");
PrintWriter writer = resp.getWriter();
if (op == null || !op.equals("fwd")) {
resp.setContentType("text/html");
writer.append("<h3>Path Info Portlet</h3>");
writer.append("<div class='parmbox'>");
PortletURL rurl = resp.createRenderURL();
MutableRenderParameters rp = rurl.getRenderParameters().clone();
rp.setValue("renp1", "renval1");
rp.setValue("mix2", "renmix2");
rp.setValue("mix1", "renmix1");
rp.setValue("op", "inc");
rurl.getRenderParameters().set(rp);
RenderLink tl = new RenderLink("Resource include", rurl);
writer.append(tl.toString());
rurl = resp.createRenderURL();
rp.setValue("op", "fwd");
rurl.getRenderParameters().set(rp);
tl = new RenderLink("Forward to Servlet from Render", rurl);
writer.append(tl.toString());
rurl = resp.createRenderURL();
rp.setValue("op", "fwdjsp");
rurl.getRenderParameters().set(rp);
tl = new RenderLink("Forward to JSP from Render", rurl);
writer.append(tl.toString());
rurl = resp.createRenderURL();
rp.setValue("op", "incjsp");
rurl.getRenderParameters().set(rp);
tl = new RenderLink("Include JSP from Render", rurl);
writer.append(tl.toString());
rurl = resp.createRenderURL();
rp.setValue("op", "nested");
rurl.getRenderParameters().set(rp);
tl = new RenderLink("Nested Include Portlet -> Servlet -> JSP", rurl);
writer.append(tl.toString());
rurl = resp.createRenderURL();
rp.setValue("op", "named");
rurl.getRenderParameters().set(rp);
tl = new RenderLink("Include Named Servlet", rurl);
writer.append(tl.toString());
writer.append("</div>");
}
if (op != null) {
PortletURL cntlurl = resp.createRenderURL();
MutableRenderParameters rp = cntlurl.getRenderParameters();
rp.setValue("renp1", "renval1");
rp.setValue("mix2", "renmix2");
rp.setValue("mix1", "renmix1");
rp.setValue("op", "inc");
if (op.equals("fwd")) {
RenderLink renlink = new RenderLink("back", cntlurl);
req.setAttribute("renderLink", renlink);
req.setAttribute("title", "Forwarded to Servlet by render method.");
PortletRequestDispatcher rd = pcfg.getPortletContext().getRequestDispatcher(SERVLET);
rd.forward(req, resp);
return;
} else if (op.equals("fwdjsp")) {
RenderLink renlink = new RenderLink("back", cntlurl);
req.setAttribute("renderLink", renlink);
req.setAttribute("jsptitle", "Forwarded to JSP by render method.");
PortletRequestDispatcher rd = pcfg.getPortletContext().getRequestDispatcher(JSP);
rd.forward(req, resp);
return;
}
writer.append("<div class='infobox'>");
if (op.equals("nested")) {
req.setAttribute("title", "Included nested in Portlet -> Servlet -> JSP.");
PathDisplay pd = new PathDisplay(req, "Render Method (Before)");
writer.write(pd.toMarkup());
PortletRequestDispatcher rd = pcfg.getPortletContext().getRequestDispatcher(SERVLET);
rd.include(req, resp);
pd = new PathDisplay(req, "Render Method (After)");
writer.write(pd.toMarkup());
} else if (op.equals("incjsp")) {
req.setAttribute("jsptitle", "Included by render method.");
PortletRequestDispatcher rd = pcfg.getPortletContext().getRequestDispatcher(JSP);
rd.include(req, resp);
} else if (op.equals("inc")) {
ResourceURL resurl = mimeresp.createResourceURL();
MutableResourceParameters resparms = resurl.getResourceParameters();
resparms.setValue("resp1", "resval1");
resparms.setValue("mix1", "resval2");
String pid = resp.getNamespace();
writer.append("<div id='").append(pid).append("-putResourceHere'></div>\n");
writer.append("<script>\n");
writer.append("(function () {\n");
writer.append(" var xhr = new XMLHttpRequest();\n");
writer.append(" xhr.onreadystatechange=function() {\n");
writer.append(" if (xhr.readyState==4 && xhr.status==200) {\n");
writer.append(" document.getElementById('").append(pid)
.append("-putResourceHere').innerHTML=xhr.responseText;\n");
writer.append(" }\n");
writer.append(" };\n");
writer.append(" xhr.open(\"GET\",\"").append(resurl.toString()).append("\",true);\n");
writer.append(" xhr.send();\n");
writer.append("})();\n");
writer.append("</script>\n");
writer.append("<h5>Forward:</h5>");
resurl = mimeresp.createResourceURL();
resurl.setResourceID("fwd");
resurl.getResourceParameters().set(resparms);
writer.append("<div id='").append(pid).append("-puReHe'></div>\n");
writer.append("<script>\n");
writer.append("(function () {\n");
writer.append(" var xhr = new XMLHttpRequest();\n");
writer.append(" xhr.onreadystatechange=function() {\n");
writer.append(" if (xhr.readyState==4 && xhr.status==200) {\n");
writer.append(" document.getElementById('").append(pid)
.append("-puReHe').innerHTML=xhr.responseText;\n");
writer.append(" }\n");
writer.append(" };\n");
writer.append(" xhr.open(\"GET\",\"").append(resurl.toString()).append("\",true);\n");
writer.append(" xhr.send();\n");
writer.append("})();\n");
writer.append("</script>\n");
} else if (op.equals("named")) {
writer.write("Including named servlet:");
req.setAttribute("title", "Included named Servlet.");
PortletRequestDispatcher rd = req.getPortletContext().getNamedDispatcher(NAME);
rd.include(req, resp);
} else {
writer.write("unknown operation: " + op);
}
writer.append("</div>");
}
}
/**
* This resource method generates some output directly, then includes output
* from a JSP as specified in the annotation.
*
* @return The string for inclusion in the output.
* @throws IOException
*/
@ServeResourceMethod(portletNames = { "PathInfoPortlet" }, include=JSP)
public void getPathInfo(ResourceRequest req, ResourceResponse resp) throws IOException {
@SuppressWarnings("unchecked")
ArrayList<String> pathInfo = (ArrayList<String>) req.getAttribute("pathInfo");
if (pathInfo == null) {
pathInfo = new ArrayList<String>();
}
PathDisplay pd = new PathDisplay(req, "Resource Method (ResourceRequest)");
pathInfo.add(pd.toMarkup());
req.setAttribute("pathInfo", pathInfo);
req.setAttribute("jsptitle", "Included by resource method.");
}
@ServeResourceMethod(portletNames = { "PathInfoPortlet" }, resourceID="fwd")
public void getPathInfo2(ResourceRequest req, ResourceResponse resp) throws IOException, PortletException {
req.setAttribute("jsptitle", "Forwarded by resource method.");
PortletRequestDispatcher prd = req.getPortletContext().getRequestDispatcher(JSP);
prd.forward(req, resp);
}
}