/*
* Aipo is a groupware program developed by TOWN, Inc.
* Copyright (C) 2004-2015 TOWN, Inc.
* http://www.aipo.com
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.aimluck.eip.util;
import org.apache.jetspeed.om.profile.Entry;
import org.apache.jetspeed.om.profile.Portlets;
import org.apache.jetspeed.om.profile.Profile;
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;
import org.apache.turbine.services.pull.ApplicationTool;
import org.apache.turbine.util.DynamicURI;
import org.apache.turbine.util.RunData;
/**
*
*/
public class ALJetspeedLink implements ApplicationTool, JetspeedLink {
private static final JetspeedLogger logger = JetspeedLogFactoryService
.getLogger(ALJetspeedLink.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 ALJetspeedLink() {
}
/**
* Constructor required by ApplicationTool interface
*
* @param data
* A Jetspeed RunData object.
*/
public ALJetspeedLink(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
*/
@Override
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
*/
@Override
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
*/
@Override
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()
*/
@Deprecated
@Override
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()
*/
@Deprecated
@Override
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
*/
@Override
public DynamicURI getHomePage() {
return getLink(
JetspeedLink.DEFAULT,
null,
"",
JetspeedLink.DEFAULT,
null,
"",
"",
"",
"",
"");
}
/**
* Return a link that includes the template from rundata
*
* @return DynamicURI to template
*/
@Override
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()
*/
@Deprecated
@Override
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()
*/
@Deprecated
@Override
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()
*/
@Deprecated
@Override
public DynamicURI setAction(String action, Portlets portlets) {
return getAction(action, 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()
*/
@Deprecated
@Override
public DynamicURI setAction(String action, Portlet portlet) {
return getAction(action, 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()
*/
@Deprecated
@Override
public DynamicURI setAction(String action, Entry entry) {
return getAction(action, 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()
*/
@Deprecated
public DynamicURI setAction(String action, String peid) {
return getAction(action, 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()
*/
@Deprecated
@Override
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()
*/
@Deprecated
@Override
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()
*/
@Deprecated
@Override
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()
*/
@Deprecated
@Override
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()
*/
@Deprecated
@Override
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()
*/
@Deprecated
@Override
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()
*/
@Deprecated
@Override
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()
*/
@Deprecated
@Override
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()
*/
@Deprecated
@Override
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()
*/
@Deprecated
@Override
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()
*/
@Deprecated
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
*/
@Override
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;
}
}
@Override
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);
}
@Override
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);
}
@Override
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);
}
@Override
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);
}
/**
*/
@Override
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
*/
@Override
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
*/
@Override
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
*/
@Override
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
*/
@Override
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
*/
@Override
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
*/
@Override
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
*/
@Override
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
*/
@Override
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
*/
@Override
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
*/
@Override
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
*/
@Override
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
*/
@Override
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
*/
@Override
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
*/
@Override
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
*/
@Override
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
*/
@Override
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
*/
@Override
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
*/
@Override
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
*/
@Override
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 = 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.
*/
@Override
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
*/
@Override
public String getActionKey() {
return JetspeedResources.PATH_ACTION_KEY;
}
/**
* Is the PSML for the anonymous user?
*
* @return True = PSML is for the anonymous user
*/
@Override
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
*/
@Override
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
*/
@Override
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
*/
@Override
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
*/
@Override
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
*/
@Override
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
*/
@Override
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
*/
@Override
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.
*/
@Deprecated
@Override
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
*/
@Override
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
*/
@Override
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
*/
@Override
public void refresh() {
// empty
}
@Override
public DynamicURI setMediaType(String mediaType) {
return getLink(
JetspeedLink.CURRENT,
null,
null,
JetspeedLink.DEFAULT,
null,
null,
null,
mediaType);
}
}