blob: 215b8e4040cb31e1b490d8450c6a5c259d4f9638 [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.pluto.tags;
import java.util.Map;
import javax.portlet.BaseURL;
import javax.portlet.PortletConfig;
import javax.portlet.PortletResponse;
import javax.portlet.RenderResponse;
import javax.portlet.ResourceResponse;
import javax.portlet.ResourceURL;
import javax.servlet.jsp.JspException;
/**
* A tag handler for the <CODE>resourceURL</CODE> tag as defined in the JSR 286.
* Creates a url that points to the current Portlet and triggers a
* resource request with the supplied parameters.
*
* @version 2.0
*/
public class ResourceURLTag286 extends BaseURLTag {
private static final long serialVersionUID = 286L;
private String id = null;
private String cachability = null;
private ResourceURL resourceURL = null;
public ResourceURLTag286() {
super();
this.escapeXml = true;
}
/* (non-Javadoc)
* @see org.apache.pluto.tags.BaseURLTag#doStartTag()
*/
@Override
public int doStartTag() throws JspException {
PortletConfig portletConfig =
(PortletConfig) pageContext.getRequest().getAttribute(Constants.PORTLET_CONFIG);
Map<String,String[]> containerRuntimeOptions = portletConfig.getContainerRuntimeOptions();
if (containerRuntimeOptions != null){
String[] result = containerRuntimeOptions.get(Constants.ESCAPE_XML_RUNTIME_OPTION);
if (result != null){
if (result.length > 0){
escapeXml = Boolean.parseBoolean(result[0]);
}
}
}
PortletResponse portletResponse = (PortletResponse) pageContext.getRequest()
.getAttribute(Constants.PORTLET_RESPONSE);
if (portletResponse != null) {
ResourceURL resourceURL = createResourceURL(portletResponse);
if(id != null){
resourceURL.setResourceID(id);
}
if(cachability != null){
try{
resourceURL.setCacheability(cachability);
}
catch(IllegalArgumentException e){
throw new JspException(e);
}
catch(IllegalStateException e){
throw new JspException(e);
}
}
setUrl(resourceURL);
}
return super.doStartTag();
}
/**
* @return the id
*/
public String getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(String id) {
this.id = id;
}
/**
* @return the cachability
*/
public String getCachability() {
return cachability;
}
/**
* @param cachability the cachability to set
*/
public void setCachability(String cachability) {
this.cachability = cachability;
}
/* (non-Javadoc)
* @see org.apache.pluto.tags.BaseURLTag#getUrl()
*/
@Override
protected ResourceURL getUrl() {
return resourceURL;
}
/* (non-Javadoc)
* @see org.apache.pluto.tags.BaseURLTag#setUrl(javax.portlet.BaseURL)
*/
@Override
protected void setUrl(BaseURL url) {
this.resourceURL = (ResourceURL)url;
}
/**
* Creates a resourceURL.
*
* @param portletResponse
* @return a resourceURL
* @throws JspException
*/
protected ResourceURL createResourceURL(PortletResponse portletResponse) throws JspException{
ResourceURL result = null;
if(portletResponse instanceof RenderResponse){
result = ((RenderResponse)portletResponse).createResourceURL();
}
else if(portletResponse instanceof ResourceResponse){
result = ((ResourceResponse)portletResponse).createResourceURL();
}
else{
throw new JspException();
}
return result;
}
}