/*
* Copyright 2000-2001,2004 The Apache Software Foundation.
*
* Licensed 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.jetspeed.util.template;
// Jetspeed
import org.apache.jetspeed.om.profile.Entry;
import org.apache.jetspeed.om.profile.Profile;
import org.apache.jetspeed.om.profile.Portlets;
import org.apache.jetspeed.om.profile.ProfileException;
import org.apache.jetspeed.om.profile.ProfileLocator;
import org.apache.jetspeed.portal.Portlet;
import org.apache.jetspeed.services.Profiler;
import org.apache.jetspeed.services.logging.JetspeedLogFactoryService;
import org.apache.jetspeed.services.logging.JetspeedLogger;
import org.apache.jetspeed.services.resources.JetspeedResources;
import org.apache.jetspeed.services.rundata.JetspeedRunData;
import org.apache.jetspeed.util.template.JetspeedLink;
// Turbine
import org.apache.turbine.util.RunData;
import org.apache.turbine.util.DynamicURI;
import org.apache.turbine.services.pull.ApplicationTool;
/**
* <p>A customized version of the TemplateLink which can handle portlet
* references.</p>
*
* <p>It is inserted into the template context by Turbine, via request tools.</p>
*
* <p>Each portlet must call setPortlet(this) on it before entering the template
* rendering code. This is done currently in VelocityPortlet.</p>
*
* @author <a href="mailto:paulsp@apache.org">Paul Spencer</a>
* @version $Id: BaseJetspeedLink.java,v 1.23 2004/02/23 03:20:45 jford Exp $
*/
public class BaseJetspeedLink implements ApplicationTool, JetspeedLink
{
/**
* Static initialization of the logger for this class
*/
private static final JetspeedLogger logger = JetspeedLogFactoryService.getLogger(BaseJetspeedLink.class.getName());
/**
*<p>Request to which we refer.</p>
*/
private JetspeedRunData rundata = null;
/**
* Profile locator from <code>rundata</code>. This is here
* for performance reasons.
*/
private ProfileLocator locator = null;
/**
* Profile from <code>rundata</code>. This is here
* for performance reasons.
*/
private Profile profile = null;
/**
* Has the initialization for the current rundata been performed?. This is
* here for performance reasons.
*/
private boolean initDone = false;
/**
*<p>The portlet that will be used to build the reference.</p>
*/
protected Portlet activePortlet = null;
/**
* Empty constructor.for introspection
*/
public BaseJetspeedLink()
{
}
/**
* Constructor required by ApplicationTool interface
*
* @param data A Jetspeed RunData object.
*/
public BaseJetspeedLink(RunData data)
{
init((Object) data);
}
/**
* This will initialise a JetspeedLink object that was
* constructed with the default constructor
*
* @param rundata to be a RunData object
*/
public void init(RunData rundata)
{
init((Object) rundata);
}
/**
* Adds a name=value pair to the query string.
*
* @param name A String with the name to add.
* @param value An Object with the value to add.
* @return DynamicURI that to the desired page
*/
public DynamicURI addQueryData(String name, Object value)
{
try
{
return getRoot().addQueryData(name, value);
}
catch (ProfileException e)
{
logger.error("Exception", e);
return null;
}
}
/**
* Adds a name=value pair to the path_info string.
*
* @param name A String with the name to add.
* @param value An Object with the value to add.
* @return DynamicURI that to the desired page
*/
public DynamicURI addPathInfo(String name, Object value)
{
try
{
return getRoot().addPathInfo(name, value);
}
catch (ProfileException e)
{
logger.error("Exception", e);
return null;
}
}
/**
* Return an link to a specific portal element
*
* @param peid of the portal element
* @return DynamicURI to specific portal element
*
* @deprecated Use getPortletById() or getPaneById()
*/
public DynamicURI setPortalElement(String peid)
{
if (initDone == false)
{
initLink();
}
if (profile.getDocument().getEntryById(peid) != null)
{
return getPortletById(peid);
}
else
{
return setPaneById(peid);
}
}
/**
* Return an link to a specific portlet using the portet's id
*
* @param peid of the portlet
* @return DynamicURI to specific portlet
*
* @deprecated Use getPortletById()
*/
public DynamicURI setPortletById(String peid)
{
return getPortletById(peid);
}
/**
* Return link to the home page without user,
* page, group, role, template, action, media type, language, or country
* in link.
*
* @return DynamicURI to the home page
*/
public DynamicURI getHomePage()
{
return getLink(JetspeedLink.DEFAULT, null, "", JetspeedLink.DEFAULT, null, "", "", "", "", "");
}
/**
* Return a link that includes the template
* from rundata
*
* @return DynamicURI to template
*/
public DynamicURI getTemplate()
{
String template = rundata.getRequestedTemplate();
return getLink(JetspeedLink.CURRENT, null, null, JetspeedLink.DEFAULT, null, null, template, null, null, null);
}
/**
* Return a link to the template.
*
* @param template to add to link
* @return DynamicURI to specific portlet
*
* @deprecated Use getTemplate()
*/
public DynamicURI setTemplate(String template)
{
return getTemplate(template);
}
/**
* Return a link that includes an action
*
* @param action Desired action
* @return DynamicURI that includes the desire action
*
* @deprecated Use getAction()
*/
public DynamicURI setAction(String action)
{
return getAction(action);
}
/**
* Return a link that includes an action to a specific portlet, as defined
* by a portlets
*
* @param action Desired action
* @param portlets to receive the action
* @return DynamicURI that includes the desire action
*
* @deprecated Use getAction()
*/
public DynamicURI setAction(String action, Portlets portlets)
{
return getAction(action, (Portlets) portlets);
}
/**
* Return a link that includes an action to a specific portlet
*
* @param action Desired action
* @param portlet to receive the action
* @return DynamicURI that includes the desire action
*
* @deprecated Use getAction()
*/
public DynamicURI setAction(String action, Portlet portlet)
{
return getAction(action, (Portlet) portlet);
}
/**
* Return a link that includes an action to a specific portlet, as defined
* by an entry
*
* @param action Desired action
* @param entry to receive the action
* @return DynamicURI that includes the desire action
*
* @deprecated Use getAction()
*/
public DynamicURI setAction(String action, Entry entry)
{
return getAction(action, (Entry) entry);
}
/**
* Return a link that includes an action to a specific portlet, as defined
* by a PEID
*
* @param action Desired action
* @param peid Id of portlet to receive the action
* @return DynamicURI that includes the desire action
* @deprecated Use getAction()
*/
public DynamicURI setAction(String action, String peid)
{
return getAction(action, (String) peid);
}
/**
* Return a link to a default page for the group
*
* @param group Desired group
* @return DynamicURI that to the desired page
*
* @deprecated Use getGroup()
*/
public DynamicURI setGroup(String group)
{
return getGroup(group);
}
/**
* Return a link to a desired page for the group
*
* @param page Desired page
* @param group Desired group
* @return DynamicURI that to the desired page
*
* @deprecated Use getGroup()
*/
public DynamicURI setGroup(String group, String page)
{
return getGroup(group, page);
}
/**
* Return a link to a default page for the
* current user, group, or role.
*
* @return DynamicURI that to the desired page
*
* @deprecated Use getPage()
*/
public DynamicURI setPage()
{
return getPage();
}
/**
* Return a link to a desired page for the
* current user, group, or role.
*
* @param page Desired page
* @return DynamicURI that to the desired page
*
* @deprecated Use getPage()
*/
public DynamicURI setPage(String page)
{
return getPage(page);
}
/**
* Return a link to a desired page and pane for the
* current user, group, or role.
*
* @param page Desired page
* @param paneName Desired pane name
* @return DynamicURI that to the desired page
* @deprecated Use getPage()
*/
public DynamicURI setPage(String page, String paneName)
{
return getPage(page, paneName);
}
/**
* Return a link to a default page for the role
*
* @param role Desired role
* @return DynamicURI that to the desired page
*
* @deprecated use getRole()
*/
public DynamicURI setRole(String role)
{
return getRole(role);
}
/**
* Return a link to a desired page for the role
*
* @param role Desired role
* @param page Desired page
* @return DynamicURI that to the desired page
*
* @deprecated use getRole()
*/
public DynamicURI setRole(String role, String page)
{
return getRole(role, page);
}
/**
* Return a link to a default page for the user
*
* @param user Desired user
* @return DynamicURI that to the desired page
*
* @deprecated Use getUser()
*/
public DynamicURI setUser(String user)
{
return getUser(user);
}
/**
* Return a link to a desired page for the user
*
* @param page Desired page
* @param user Desired user
* @return DynamicURI that to the desired page
*
* @deprecated Use getUser()
*/
public DynamicURI setUser(String user, String page)
{
return getUser(user, page);
}
/**
* Return a link to a specific pane using the pane's id
*
* @param paneId of the Pane
* @return URI to specific portlet
*
* @deprecated Use getPaneById()
*/
public DynamicURI setPaneById(String paneId)
{
return getPaneById(paneId);
}
/**
* Return a link to a specific pane using the pane's id
*
* @param paneName Name of the Pane
* @return URI to specific portlet
* @deprecated Use getPaneByName()
*/
public DynamicURI setPaneByName(String paneName)
{
return getPaneByName(paneName);
}
/**
* Return a link to a desired page. This is allows the inclusion of a Group/Role/User,
* page, template, action, media type, language, and country.
*
* @param rootType Type of root PSML docuument. The should be one of the following:
* <dl>
* <dt>JetspeedLink.CURRENT</dt><dd>The link will retain the current Group/Role/User referance. rootValue is not used</dd>
* <dt>JetspeedLink.DEFAULT</dt><dd>Default Group, Role, or User. rootValue is not used</dd>
* <dt>JetspeedLink.GROUP</dt><dd>Link will be to a Group PSML. rootValue is a Group Name</dd>
* <dt>JetspeedLink.ROLE</dt><dd>Link will be to a Role PSML. rootValue is a Role Name</dd>
* <dt>JetspeedLink.USER</dt><dd>Link will be to a User PSML. rootValue is a User Name</dd>
* </dl>
* @param rootValue See description of rootType
* @param pageName Name of page. null = default page
* @param elementType
* <dl>
* <dt>JetspeedLink.CURRENT</dt><dd>The link will retain the current Pane/Portlet referance. elementValue is not used</dd>
* <dt>JetspeedLink.DEFAULT</dt><dd>The link will NOT referance a pane or portlet. elementValue is not used</dd>
* <dt>JetspeedLink.PANE_ID</dt><dd>Link will be to a Pane using it's ID. elementValue is a Pane's ID</dd>
* <dt>JetspeedLink.PANE_NAME</dt><dd>Link will be to a Pane using it's Name. elementValue is a Pane's Name</dd>
* <dt>JetspeedLink.PORTLET_ID</dt><dd>Link will be to a Portlet using it's ID. elementValue is a Portlet's ID</dd>
* <dt>JetspeedLink.PORTLET_NAME</dt><dd>Link will be to a Portlet using it's Name. elementValue is a Portlet's Name</dd>
* <dt>JetspeedLink.PORTLET_ID_QUERY</dt><dd>Link will be to a Portlet using it's ID based on portlet name provided. elementValue is a Portlet's name. ID is for the first portlet with matching name</dd>
* </dl>
* @param elementValue
* See description of elementType
* @param actionName Name of action. If no action is desired use JetspeedLink.NO_ACTION.
* @param templateName
* Name of template. If no template is desired use JetspeedLink.NO_TEMPLATE.
* @param mediaType Desired media type. null = default media type
* @param language Desired language. null = default language
* @param country Desired country. null = default language
* @return URI to specific portlet
*/
public DynamicURI getLink(int rootType, String rootValue, String pageName, int elementType, String elementValue, String actionName, String templateName, String mediaType, String language, String country)
{
String uriPathType = null;
String uriPathElement = null;
try
{
DynamicURI uri = getRoot();
// Set Group/Role/User in path
switch (rootType)
{
case JetspeedLink.DEFAULT:
case JetspeedLink.CURRENT:
break;
case JetspeedLink.GROUP:
uriPathType = Profiler.PARAM_GROUP;
break;
case JetspeedLink.ROLE:
uriPathType = Profiler.PARAM_ROLE;
break;
case JetspeedLink.USER:
uriPathType = Profiler.PARAM_USER;
break;
}
if (rootType != JetspeedLink.CURRENT)
{
// Cleanup URI
uri.removePathInfo(Profiler.PARAM_GROUP);
uri.removePathInfo(Profiler.PARAM_ROLE);
uri.removePathInfo(Profiler.PARAM_USER);
if ((rootType != JetspeedLink.DEFAULT) && (rootValue != null) && (rootValue.trim().length() > 0))
{
uri.addPathInfo(uriPathType, rootValue);
}
}
// Set Page in path
if (pageName != null)
{
uri.removePathInfo(Profiler.PARAM_PAGE);
if (pageName.trim().length() > 0)
{
uri.addPathInfo(Profiler.PARAM_PAGE, pageName);
}
}
// Set Portlet/Pane in path
switch (elementType)
{
case JetspeedLink.CURRENT:
case JetspeedLink.DEFAULT:
break;
case JetspeedLink.PANE_ID:
uriPathElement = JetspeedResources.PATH_PANEID_KEY;
break;
case JetspeedLink.PANE_NAME:
uriPathElement = JetspeedResources.PATH_PANENAME_KEY;
break;
case JetspeedLink.PORTLET_ID:
uriPathElement = JetspeedResources.PATH_PORTLETID_KEY;
break;
case JetspeedLink.PORTLET_NAME:
uriPathElement = JetspeedResources.PATH_PORTLET_KEY;
break;
case JetspeedLink.PORTLET_ID_QUERY:
if (logger.isDebugEnabled())
{
logger.debug("BaseJetspeedLink: elementValue = " + elementValue);
}
uriPathElement = JetspeedResources.PATH_PORTLETID_KEY;
ProfileLocator baseLocator = Profiler.createLocator();
Profile baseProfile = null;
switch (rootType)
{
case JetspeedLink.DEFAULT:
break;
case JetspeedLink.CURRENT:
baseProfile = rundata.getProfile();
break;
case JetspeedLink.GROUP:
baseLocator.setGroupByName(rootValue);
break;
case JetspeedLink.ROLE:
baseLocator.setRoleByName(rootValue);
break;
case JetspeedLink.USER:
try
{
if (logger.isDebugEnabled())
{
logger.debug("BaseJetspeedLink: rootValue user = " + rootValue);
}
baseLocator.setUser(org.apache.jetspeed.services.JetspeedSecurity.getUser(rootValue));
}
catch (Exception se)
{
logger.error("Exception", se);
return null;
}
break;
}
if ((rootType != JetspeedLink.CURRENT) && (rootType != JetspeedLink.DEFAULT))
{
if (mediaType != null && mediaType.length() > 0)
{
baseLocator.setMediaType(mediaType);
}
if (language != null && language.length() > 0)
{
baseLocator.setLanguage(language);
}
if (country != null && country.length() > 0)
{
baseLocator.setCountry(country);
}
if (pageName != null && pageName.length() > 0)
{
baseLocator.setName(pageName);
}
baseProfile = Profiler.getProfile(baseLocator);
}
if (logger.isDebugEnabled())
{
logger.debug("BaseJetspeedLink: baseLocator = " + baseLocator.getPath());
}
if ((baseProfile != null) && (elementValue != null))
{
if (logger.isDebugEnabled())
{
logger.debug("BaseJetspeedLink: baseProfile = " + baseProfile.toString());
}
if (baseProfile.getDocument() != null)
{
if (logger.isDebugEnabled())
{
logger.debug("BaseJetspeedLink: baseProfile.getDocment() = " + baseProfile.getDocument());
}
Entry entry = baseProfile.getDocument().getEntry(elementValue);
if (entry != null)
{
if (logger.isDebugEnabled())
{
logger.debug("BaseJetspeedLink: entry id = " + entry.getId());
}
elementValue = entry.getId();
}
else
{
elementValue = null;
}
}
}
break;
}
if (elementType != JetspeedLink.CURRENT)
{
// Remove Group/Role/User in URI
uri.removePathInfo(JetspeedResources.PATH_PANEID_KEY);
uri.removePathInfo(JetspeedResources.PATH_PANENAME_KEY);
uri.removePathInfo(JetspeedResources.PATH_PORTLETID_KEY);
uri.removePathInfo(JetspeedResources.PATH_PORTLET_KEY);
if ((elementType != JetspeedLink.DEFAULT) && (elementValue != null) && (elementValue.length() > 0))
{
uri.addPathInfo(uriPathElement, elementValue);
}
}
// Set Template in path
if (templateName != null)
{
uri.removePathInfo(JetspeedResources.PATH_TEMPLATE_KEY);
if (templateName.length() > 0)
{
uri.addPathInfo(JetspeedResources.PATH_TEMPLATE_KEY, templateName);
}
}
// Set Action in path
if (actionName != null)
{
uri.removeQueryData(JetspeedResources.PATH_ACTION_KEY);
if (actionName.length() > 0)
{
uri.addQueryData(JetspeedResources.PATH_ACTION_KEY, actionName);
}
}
// Set MediaType in path
if (mediaType != null)
{
uri.removePathInfo(Profiler.PARAM_MEDIA_TYPE);
if (mediaType.length() > 0)
{
uri.addPathInfo(Profiler.PARAM_MEDIA_TYPE, mediaType);
}
}
// Set Language in path
if (language != null)
{
uri.removePathInfo(Profiler.PARAM_LANGUAGE);
if (language.length() > 0)
{
uri.addPathInfo(Profiler.PARAM_LANGUAGE, language);
}
}
// Set Country in path
if (country != null)
{
uri.removePathInfo(Profiler.PARAM_COUNTRY);
if (country.length() > 0)
{
uri.addPathInfo(Profiler.PARAM_COUNTRY, country);
}
}
return uri;
}
catch (ProfileException e)
{
logger.error("Exception", e);
return null;
}
}
public DynamicURI getLink(int rootType, String rootValue, String pageName, int elementType, String elementValue, String actionName, String templateName, String mediaType, String language)
{
return getLink(rootType, rootValue, pageName, elementType, elementValue, actionName, templateName, mediaType, language, null);
}
public DynamicURI getLink(int rootType, String rootValue, String pageName, int elementType, String elementValue, String actionName, String templateName, String mediaType)
{
return getLink(rootType, rootValue, pageName, elementType, elementValue, actionName, templateName, mediaType, null, null);
}
public DynamicURI getLink(int rootType, String rootValue, String pageName, int elementType, String elementValue, String actionName, String templateName)
{
return getLink(rootType, rootValue, pageName, elementType, elementValue, actionName, actionName, null, null, null);
}
public DynamicURI getLink(int rootType, String rootValue, String pageName, int elementType, String elementValue, String actionName)
{
return getLink(rootType, rootValue, pageName, elementType, elementValue, actionName, null, null, null, null);
}
/**
*/
public DynamicURI getLink(int rootType, String rootValue, String pageName, int elementType, String elementValue)
{
return getLink(rootType, rootValue, pageName, elementType, elementValue, null, null, null, null, null);
}
/**
* Return a link that includes an action
*
* @param action action
* @return DynamicURI that includes the desire action
*/
public DynamicURI getAction(String action)
{
return getLink(JetspeedLink.CURRENT, null, null, JetspeedLink.CURRENT, null, action, null, null, null, null);
}
/**
* Return a link that includes an action to a specific portlet, as defined
* by an entry
*
* @param action Desired action
* @param entry to receive the action
* @return DynamicURI that includes the desire action
*/
public DynamicURI getAction(String action, Entry entry)
{
if (entry != null)
{
return getLink(JetspeedLink.CURRENT, null, null, JetspeedLink.PORTLET_ID, entry.getId(), null, action, null, null, null);
}
else
{
return getLink(JetspeedLink.CURRENT, null, null, JetspeedLink.PORTLET_ID, null, null, action, null, null, null);
}
}
/**
* Return a link that includes an action to a specific portlet
*
* @param action Desired action
* @param portlet to receive the action
* @return DynamicURI that includes the desire action
*/
public DynamicURI getAction(String action, Portlet portlet)
{
if (portlet != null)
{
return getLink(JetspeedLink.CURRENT, null, null, JetspeedLink.PORTLET_ID, portlet.getID(), action, null, null, null, null);
}
else
{
return getLink(JetspeedLink.CURRENT, null, null, JetspeedLink.PORTLET_ID, null, action, null, null, null, null);
}
}
/**
* Return a link that includes an action to a specific portlet, as defined
* by a portlets
*
* @param action Desired action
* @param portlets to receive the action
* @return DynamicURI that includes the desire action
*/
public DynamicURI getAction(String action, Portlets portlets)
{
if (portlets != null)
{
return getLink(JetspeedLink.CURRENT, null, null, JetspeedLink.PORTLET_ID, portlets.getId(), action, null, null, null, null);
}
else
{
return getLink(JetspeedLink.CURRENT, null, null, JetspeedLink.PORTLET_ID, null, action, null, null, null, null);
}
}
/**
* Return a link that includes an action to a specific portlet, as defined
* by a PEID
*
* @param action Desired action
* @param peid Id of the portlet to receive the action
* @return DynamicURI that includes the desire action
*/
public DynamicURI getAction(String action, String peid)
{
return getLink(JetspeedLink.CURRENT, null, null, JetspeedLink.PORTLET_ID, peid, action, null, null, null, null);
}
/**
* Return a link to a default page for the group
*
* @param group Desired group
* @return DynamicURI that to the default page for the group
*/
public DynamicURI getGroup(String group)
{
return getLink(JetspeedLink.GROUP, group, "", JetspeedLink.DEFAULT, null, null, null, null, null, null);
}
/**
* Return a link to a desired page for the group
*
* @param page Desired page
* @param group Desired group
* @return DynamicURI that to the desired group and page
*/
public DynamicURI getGroup(String group, String page)
{
return getLink(JetspeedLink.GROUP, group, page, JetspeedLink.DEFAULT, null, null, null, null, null, null);
}
/**
* Return a link to a default page for the
* current user, group, or role.
*
* @return DynamicURI that to the default page
*/
public DynamicURI getPage()
{
return getLink(JetspeedLink.CURRENT, null, "", JetspeedLink.DEFAULT, null, null, null, null, null, null);
}
/**
* Return a link to a desired page for the
* current user, group, or role.
*
* @param page Desired page
* @return DynamicURI that to the desired page
*/
public DynamicURI getPage(String page)
{
return getLink(JetspeedLink.CURRENT, null, page, JetspeedLink.DEFAULT, null, null, null, null, null, null);
}
/**
* Return a link to a desired page and pane for the
* current user, group, or role.
*
* @param page Desired page
* @param paneName Name of the desired pane
* @return DynamicURI that to the desired page
*/
public DynamicURI getPage(String page, String paneName)
{
return getLink(JetspeedLink.CURRENT, null, page, JetspeedLink.PANE_NAME, paneName, null, null, null, null, null);
}
/**
* Return a link to a specific pane using the pane's id
*
* @param paneId of the Pane
* @return URI to specific portlet
*/
public DynamicURI getPaneById(String paneId)
{
return getLink(JetspeedLink.CURRENT, null, this.getPageName(), JetspeedLink.PANE_ID, paneId, null, null, null, null, null);
}
/**
* Return a link to a specific pane using the pane's id
*
* @param paneName Name of the Pane
* @return URI to specific portlet
*/
public DynamicURI getPaneByName(String paneName)
{
return getLink(JetspeedLink.CURRENT, null, this.getPageName(), JetspeedLink.PANE_NAME, paneName, null, null, null, null, null);
}
/**
* Return an link to a specific portlet using the portet's id
*
* @param peid of the portlet
* @return DynamicURI to specific portlet
*/
public DynamicURI getPortletById(String peid)
{
return getLink(JetspeedLink.CURRENT, null, this.getPageName(), JetspeedLink.PORTLET_ID, peid, null, null, null, null, null);
}
/**
* Add a portlet reference in the link.
*
* Note: This must be used with caution, since a portlet may exist may times
* in a PSML. setPortletById() is the perfered method.
*
* @param portletName the name of the portlet to link to
* @return a DynamicURI referencing the named portlet
*/
public DynamicURI getPortletByName(String portletName)
{
return getLink(JetspeedLink.CURRENT, null, this.getPageName(), JetspeedLink.PORTLET_NAME, portletName, null, null, null, null, null);
}
/**
* Return a link to a default page for the role
*
* @param role Desired role
* @return DynamicURI that to the desired page
*/
public DynamicURI getRole(String role)
{
return getLink(JetspeedLink.ROLE, role, "", JetspeedLink.DEFAULT, null, null, null, null, null, null);
}
/**
* Return a link to a desired page for the role
*
* @param role Desired role
* @param page Desired page
* @return DynamicURI that to the desired page
*/
public DynamicURI getRole(String role, String page)
{
return getLink(JetspeedLink.ROLE, role, page, JetspeedLink.DEFAULT, null, null, null, null, null, null);
}
/**
* Return a link to the template.
*
* @param template to add to link
* @return DynamicURI to specific portlet
*/
public DynamicURI getTemplate(String template)
{
return getLink(JetspeedLink.CURRENT, null, null, JetspeedLink.DEFAULT, null, null, template, null, null, null);
}
/**
* Return a link to a default page for the user
*
* @param user Desired user
* @return DynamicURI that to the desired page
*/
public DynamicURI getUser(String user)
{
return getLink(JetspeedLink.USER, user, "", JetspeedLink.DEFAULT, null, null, null, null, null, null);
}
/**
* Return a link to a desired page for the user
*
* @param page Desired page
* @param user Desired user
* @return DynamicURI that to the desired page
*/
public DynamicURI getUser(String user, String page)
{
return getLink(JetspeedLink.USER, user, page, JetspeedLink.DEFAULT, null, null, null, null, null, null);
}
private void initLink()
{
if (initDone == true)
{
return;
}
try
{
// get the profile that is set in the rundata
profile = rundata.getProfile();
// if there was no profile, try making one from the rundata
if (profile == null)
{
// this would only happen if the JetspeedAccessController didn't get a chance
// to setup the rundata...
profile = Profiler.getProfile(rundata);
rundata.setProfile(profile);
logger.warn("BaseJetspeedLink: profile in rundata was null");
}
}
catch (ProfileException e)
{
logger.error("Exception", e);
}
if (profile != null)
{
// Get ProfileLocator for path info.
if ((profile instanceof ProfileLocator) == true)
{
locator = (ProfileLocator) profile;
}
}
initDone = true;
}
/**
* Return a link to the root portlet or pane
*
* @throws ProfileException if the profile detects an error
* @return URI to the root portlet/pane
*/
private DynamicURI getRoot() throws ProfileException
{
DynamicURI uri = null;
initLink();
if (locator != null)
{
uri = Profiler.makeDynamicURI(rundata, locator);
}
if (uri == null)
{
uri = new DynamicURI(rundata);
}
// check if we need to force to a secure (https) link
if (JetspeedResources.getBoolean("force.ssl", false))
{
uri.setSecure();
}
return uri;
}
/**
* Return a URL, as a string, the the root page or pane.
*
* @return a URL, as a string, the the root page or pane.
*/
public String toString()
{
try
{
return getRoot().toString();
}
catch (ProfileException e)
{
logger.error("Exception", e);
return null;
}
}
/**
* Return the action key. Used by velocity templates, i.e. $jlink.ActionKey
*
* @return the action parameter name
*/
public String getActionKey()
{
return JetspeedResources.PATH_ACTION_KEY;
}
/**
* Is the PSML for the anonymous user?
*
* @return True = PSML is for the anonymous user
*/
public boolean getAnonymous()
{
initLink();
try
{
return locator.getAnonymous();
}
catch (Exception e)
{
logger.error("Exception", e);
return true;
}
}
/**
* Return country of the PSML file
*
* @return Country of PSML, or null if no country
*/
public String getCountry()
{
initLink();
try
{
return locator.getCountry();
}
catch (Exception e)
{
logger.error("Exception", e);
return null;
}
}
/**
* Return Group name of the PSML file
*
* @return Group name of PSML, or null if no Group name
*/
public String getGroupName()
{
initLink();
try
{
return locator.getGroupName();
}
catch (Exception e)
{
logger.error("Exception", e);
return null;
}
}
/**
* Return Language of the PSML file
*
* @return Language of PSML, or null if no Language
*/
public String getLanguage()
{
initLink();
try
{
return locator.getLanguage();
}
catch (Exception e)
{
logger.error("Exception", e);
return null;
}
}
/**
* Return Media Type of the PSML file
*
* @return Media Type of PSML, or null if no Media Type
*/
public String getMediaType()
{
initLink();
try
{
return locator.getMediaType();
}
catch (Exception e)
{
logger.error("Exception", e);
return null;
}
}
/**
* Return Page name of the PSML file
*
* @return Page name of PSML, or null if no Page name
*/
public String getPageName()
{
initLink();
try
{
return locator.getName();
}
catch (Exception e)
{
logger.error("Exception", e);
return null;
}
}
/**
* Return Role name of the PSML file
*
* @return Role name of PSML, or null if no Role name
*/
public String getRoleName()
{
initLink();
try
{
return locator.getRoleName();
}
catch (Exception e)
{
logger.error("Exception", e);
return null;
}
}
/**
* Return User name of the PSML file
*
* @return User name of PSML, or null if no User name
*/
public String getUserName()
{
initLink();
try
{
return locator.getUserName();
}
catch (Exception e)
{
logger.error("Exception", e);
return null;
}
}
/**
* The following methods used by Velocity to get value of constants
*/
public static int getCURRENT()
{
return JetspeedLink.CURRENT;
}
public static int getDEFAULT()
{
return JetspeedLink.DEFAULT;
}
public static int getGROUP()
{
return JetspeedLink.GROUP;
}
public static int getPANE_ID()
{
return JetspeedLink.PANE_ID;
}
public static int getPANE_NAME()
{
return JetspeedLink.PANE_NAME;
}
public static int getPORTLET_ID()
{
return JetspeedLink.PORTLET_ID;
}
public static int getPORTLET_NAME()
{
return JetspeedLink.PORTLET_NAME;
}
public static int getROLE()
{
return JetspeedLink.ROLE;
}
public static int getUSER()
{
return JetspeedLink.USER;
}
public static String getDEFAULT_PAGE()
{
return "";
}
/**
* deprecated methods from JetspeedTemplateLink.
*/
/**
* <p> Set the portlet giving context to this Link object.</p>
*
* This method is from JetspeedTemplateLink and is only here
* for backward compatibility. This it should not be used for
* any new development. Also any problems with this method will
* not be fixed
*
* @param portlet the name of the active portlet
* @deprecated the name is confusing. Use @see(#forPaneById()) instead.
*/
public void setPortlet(Portlet portlet)
{
this.activePortlet = portlet;
}
/**
* Add a portlet reference in the link.
*
* Note: This must be used with caution, since a portlet may exist may times
* in a PSML. setPortletById() is the perfered method.
*
* @param portletName the name of the portlet to link to
* @return a DynamicURI referencing the named portlet for easy link construction in template
*/
public DynamicURI setPortletByName(String portletName)
{
DynamicURI uri = null;
try
{
uri = getRoot();
}
catch (Exception e)
{
logger.error("Exception", e);
return null;
}
if ((portletName != null) && (portletName.length() > 0))
{
uri.addPathInfo(JetspeedResources.PATH_PORTLET_KEY, portletName);
}
return uri;
}
/**
* Methods required by ApplictionTool interface
*
*/
/**
* This will initialise a JetspeedLink object that was
* constructed with the default constructor (ApplicationTool
* method).
*
* @param data assumed to be a RunData object
*/
public void init(Object data)
{
// Keeping init small and fast
if (data instanceof JetspeedRunData)
{
this.rundata = (JetspeedRunData) data;
}
else
{
this.rundata = null;
}
profile = null;
locator = null;
initDone = false;
return;
}
/**
* Refresh method - does nothing
*/
public void refresh()
{
// empty
}
public DynamicURI setMediaType(String mediaType)
{
return getLink(JetspeedLink.CURRENT, null, null, JetspeedLink.DEFAULT, null, null, null, mediaType);
}
}