CRM项目总结-封装PortletURLUtil

package com.ebizwindow.crm.utils;

import java.security.Key;
import java.util.List;

import javax.portlet.ActionRequest;
import javax.portlet.PortletMode;
import javax.portlet.PortletModeException;
import javax.portlet.PortletRequest;
import javax.portlet.PortletURL;
import javax.portlet.WindowState;
import javax.portlet.WindowStateException;
import javax.servlet.http.HttpServletRequest;

import com.ebizwindow.crm.constants.PortletIDs;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.util.HttpUtil;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.kernel.util.UnicodeProperties;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.model.Layout;
import com.liferay.portal.model.PortletConstants;
import com.liferay.portal.model.User;
import com.liferay.portal.service.LayoutLocalServiceUtil;
import com.liferay.portal.service.UserLocalServiceUtil;
import com.liferay.portal.theme.ThemeDisplay;
import com.liferay.portal.util.PortalUtil;
import com.liferay.portlet.PortletURLFactoryUtil;
import com.liferay.util.Encryptor;
import com.liferay.util.EncryptorException;

/**
 * @author Ivan Li
 * 
 */
public class PortletURLUtil {

	private static Log _log = LogFactoryUtil.getLog(PortletURLUtil.class);

	public static String getPortletURLWithinCurrentPage(
			PortletRequest portletRequest, String portletId, int lifeCycle,
			String windowState, String portletMode) throws PortalException,
			SystemException {
		String portletURL = null;

		HttpServletRequest request = PortalUtil
				.getHttpServletRequest(portletRequest);

		ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);

		String targetPortletId = null;
		String rootPortletId = PortletConstants.getRootPortletId(portletId);

		Layout layout = themeDisplay.getLayout();
		if (layout != null) {

			UnicodeProperties typeSettings = layout.getTypeSettingsProperties();

			labelBreak: for (String key : typeSettings.keySet()) {
				String value = typeSettings.get(key);
				int idx = value.indexOf(rootPortletId);
				if (idx >= 0) {
					String[] portletIds = StringUtil.split(value);
					for (String id : portletIds) {
						if (id.contains(rootPortletId)) {
							targetPortletId = id;
							break labelBreak;
						}
					}
				}
			}

			StringBuilder sb = new StringBuilder();
			String layoutURL = PortalUtil.getLayoutFriendlyURL(layout,
					themeDisplay);

			sb.append(layoutURL);
			sb.append(StringPool.QUESTION).append("p_p_id")
					.append(StringPool.EQUAL).append(targetPortletId);
			sb.append(StringPool.AMPERSAND).append("p_p_lifecycle")
					.append(StringPool.EQUAL).append(lifeCycle);
			sb.append(StringPool.AMPERSAND).append("p_p_state")
					.append(StringPool.EQUAL).append(windowState);
			sb.append(StringPool.AMPERSAND).append("p_p_mode")
					.append(StringPool.EQUAL).append(portletMode);

			portletURL = sb.toString();

		} else {
			_log.debug("Get portlet URL by portletId within the current page!");
		}
		return portletURL;
	}

	public static String getPortletURLByUserId(PortletRequest portletRequest,
			long userId, String portletId) throws PortalException,
			SystemException {
		User user = UserLocalServiceUtil.getUserById(userId);
		long groupId = user.getGroup().getGroupId();

		return getPortletURLByGroupId(portletRequest, groupId, portletId, 1,
				WindowState.MAXIMIZED.toString(), PortletMode.VIEW.toString());
	}

	public static String getPortletURLByGroupId(PortletRequest portletRequest,
			long groupId, String portletId, int lifeCycle, String state,
			String mode) throws SystemException, PortalException {
		String portletURL = null;
		Layout selectedLayout = null;
		String targetPortletId = null;
		String rootPortletId = PortletConstants.getRootPortletId(portletId);
		List<Layout> layouts = LayoutLocalServiceUtil
				.getLayouts(groupId, false);
		if (layouts != null) {
			labelBreak: for (Layout layout : layouts) {
				UnicodeProperties typeSettings = layout
						.getTypeSettingsProperties();
				for (String key : typeSettings.keySet()) {
					String value = typeSettings.get(key);
					int idx = value.indexOf(rootPortletId);
					if (idx >= 0) {
						String[] portletIds = StringUtil.split(value);
						for (String id : portletIds) {
							if (id.contains(rootPortletId)) {
								selectedLayout = layout;
								targetPortletId = id;
								break labelBreak;
							}
						}
					}
				}
			}
		}

		if (selectedLayout != null) {
			StringBuilder sb = new StringBuilder();
			// HttpServletRequest request =
			// PortalUtil.getHttpServletRequest(portletRequest);
			ThemeDisplay themeDisplay = (ThemeDisplay) portletRequest
					.getAttribute(WebKeys.THEME_DISPLAY);
			String layoutURL = PortalUtil.getLayoutFriendlyURL(selectedLayout,
					themeDisplay);

			sb.append(layoutURL);

			// sb.append(StringPool.QUESTION).append("p_auth").append(StringPool.EQUAL);
			// sb.append(processValue(null, AuthTokenUtil.getToken(request)));

			sb.append(StringPool.QUESTION).append("p_p_id")
					.append(StringPool.EQUAL).append(targetPortletId);
			sb.append(StringPool.AMPERSAND).append("p_p_lifecycle")
					.append(StringPool.EQUAL).append(lifeCycle);
			sb.append(StringPool.AMPERSAND).append("p_p_state")
					.append(StringPool.EQUAL).append(state);
			sb.append(StringPool.AMPERSAND).append("p_p_mode")
					.append(StringPool.EQUAL).append(mode);

			portletURL = sb.toString();
		} else {
			_log.debug("Get Portlet URL By UserId and portletId with empty result!");
		}

		return portletURL;
	}

	public static PortletURL getPortletURL(ActionRequest actionRequest)
			throws PortalException, SystemException {
		long groupId = PortalUtil.getScopeGroupId(actionRequest);
		String portletId = PortalUtil.getPortletId(actionRequest);
		long plid = PortalUtil.getPlidFromPortletId(groupId, portletId);
		PortletURL redirectURL = PortletURLFactoryUtil.create(
				PortalUtil.getHttpServletRequest(actionRequest), portletId,
				plid, PortletRequest.ACTION_PHASE);
		try {
			redirectURL.setPortletMode(actionRequest.getPortletMode());
			redirectURL.setWindowState(actionRequest.getWindowState());
		} catch (PortletModeException e) {
			_log.error(e);
		} catch (WindowStateException e) {
			_log.error(e);
		}
		return redirectURL;
	}

	public static PortletURL getPortletURL(PortletRequest actionRequest)
			throws PortalException, SystemException {
		long groupId = PortalUtil.getScopeGroupId(actionRequest);
		String portletId = PortalUtil.getPortletId(actionRequest);
		long plid = PortalUtil.getPlidFromPortletId(groupId, portletId);
		PortletURL redirectURL = PortletURLFactoryUtil.create(
				PortalUtil.getHttpServletRequest(actionRequest), portletId,
				plid, PortletRequest.ACTION_PHASE);
		try {
			redirectURL.setPortletMode(actionRequest.getPortletMode());
			redirectURL.setWindowState(actionRequest.getWindowState());
		} catch (PortletModeException e) {
			_log.error(e);
		} catch (WindowStateException e) {
			_log.error(e);
		}
		return redirectURL;
	}

	public static PortletURL getPortletURLInLayout(ActionRequest actionRequest) {
		String portletId = PortalUtil.getPortletId(actionRequest);

		ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest
				.getAttribute(WebKeys.THEME_DISPLAY);
		Layout layout = themeDisplay.getLayout();
		long plid = layout.getPlid();

		PortletURL redirectURL = PortletURLFactoryUtil.create(
				PortalUtil.getHttpServletRequest(actionRequest), portletId,
				plid, PortletRequest.ACTION_PHASE);
		try {
			redirectURL.setPortletMode(actionRequest.getPortletMode());
			redirectURL.setWindowState(actionRequest.getWindowState());
		} catch (PortletModeException e) {
			_log.error(e);
		} catch (WindowStateException e) {
			_log.error(e);
		}

		_log.debug("redirectURL : " + redirectURL.toString());
		return redirectURL;
	}

	public static String getObjDetailURL(PortletRequest portletRequest,
			String portletId, long entityId) throws SystemException,
			PortalException {
		long groupId = PortalUtil.getScopeGroupId(portletRequest);
		int lifeCycle = 1;
		String windowState = WindowState.NORMAL.toString();
		String portletMode = PortletMode.VIEW.toString();
		String detailURL = PortletURLUtil.getPortletURLByGroupId(
				portletRequest, groupId, portletId, lifeCycle, windowState,
				portletMode);
		if (portletId.equals(PortletIDs.CUSTOMER_DETAIL)) {
			detailURL = detailURL + "&customerId=" + entityId;
		} else if (portletId.equals(PortletIDs.CONTACT_DETAIL)) {
			detailURL = detailURL + "&contactId=" + entityId;
		} else if (portletId.equals(PortletIDs.MARKET_DETAIL)) {
			detailURL = detailURL + "&marketId=" + entityId;
		} else if (portletId.equals(PortletIDs.CLUE_DETAIL)) {
			detailURL = detailURL + "&clueId=" + entityId;
		} else if (portletId.equals(PortletIDs.OPPORTUNITY_DETAIL)) {
			detailURL = detailURL + "&opportunityId=" + entityId;
		} else if (portletId.equals(PortletIDs.QUOTATION_DETAIL)) {
			detailURL = detailURL + "&quotationId=" + entityId;
		} else if (portletId.equals(PortletIDs.CONTRACT_DETAIL)) {
			detailURL = detailURL + "&contractId=" + entityId;
		} else if (portletId.equals(PortletIDs.ACTIVITY_DETAIL)) {
			detailURL = detailURL + "&activityId=" + entityId;
		} else if (portletId.equals(PortletIDs.PRODUCT)) {
			detailURL = detailURL + "&productIds" + entityId;
		} else if (portletId.equals(PortletIDs.ORDER_DETAIL)) {
			detailURL = detailURL + "&orderId=" + entityId;
		}
		detailURL = detailURL + "&operation=load";
		return detailURL;
	}

	@SuppressWarnings("unused")
	private static String processValue(Key key, String value) {
		if (key == null) {
			return HttpUtil.encodeURL(value);
		} else {
			try {
				return HttpUtil.encodeURL(Encryptor.encrypt(key, value));
			} catch (EncryptorException ee) {
				return value;
			}
		}
	}
	
	public static String getReturnUrl(ActionRequest actionRequest, String portletId, String layoutId)
			throws PortalException, SystemException {
		long groupId = PortalUtil.getScopeGroupId(actionRequest);
		int lifeCycle = 0;
		String portletMode = PortletMode.VIEW.toString();
		String windowState = WindowState.NORMAL.toString();
		String url = getPortletURLByGroupId(actionRequest, groupId, portletId, lifeCycle, windowState, portletMode);
		StringBuffer sb = new StringBuffer(url);
		sb.append("&layoutId=").append(layoutId)
			.append("&fileLarge=fileLarge");
		return sb.toString();
	}

}

  

原文地址:https://www.cnblogs.com/airycode/p/4819421.html