Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.wcrx.study.portal.protocol.util;
- import com.ibm.portal.*;
- import com.ibm.portal.ac.AccessControlHome;
- import com.ibm.portal.ac.RoleDataController;
- import com.ibm.portal.ac.data.RoleType;
- import com.ibm.portal.content.*;
- import com.ibm.portal.model.*;
- import com.ibm.portal.model.controller.ContentModelControllerHome;
- import com.ibm.portal.model.controller.CreationContextBuilderFactory;
- import com.ibm.portal.model.controller.context.UniqueNameStrategy;
- import com.ibm.portal.model.controller.exceptions.CannotCommitException;
- import com.ibm.portal.model.controller.exceptions.CannotInstantiateControllerException;
- import com.ibm.portal.navigation.NavigationModel;
- import com.ibm.portal.navigation.NavigationNode;
- import com.ibm.portal.portletmodel.PortletModel;
- import com.ibm.portal.services.contentmapping.*;
- import com.ibm.portal.services.contentmapping.exceptions.*;
- import com.ibm.portal.um.Group;
- import com.ibm.portal.um.PumaController;
- import com.ibm.portal.um.PumaHome;
- import com.ibm.portal.um.exceptions.PumaMissingAccessRightsException;
- import com.ibm.portal.um.exceptions.PumaModelException;
- import com.ibm.portal.um.exceptions.PumaSystemException;
- import com.ibm.wps.pe.pc.std.core.PortletUtils;
- import javax.naming.Context;
- import javax.naming.InitialContext;
- import javax.naming.NamingException;
- import javax.portlet.*;
- import javax.servlet.ServletRequest;
- import javax.servlet.ServletResponse;
- import java.util.*;
- /**
- * @author : Georgy Gobozov
- * @created : 12.03.13
- */
- public class PageUtil {
- public static final String FRIENDLY_NAME_KEY = "com.ibm.portal.friendly.name";
- public static final String TOP_PROTOCOL_KEY = "top.protocol.page";
- /**
- * @param parentUniqueName - page unique name under new page will be created
- * @param title - new page title
- * @param request - portlet request
- * @param response - portlet response
- * @return
- */
- public static boolean createPortalPage(String parentUniqueName, String title, PortletRequest request, PortletResponse response) {
- ContentNode parent = (ContentNode) getNodeByUniqueName(parentUniqueName, request, response);
- return createPortalPage(parent, title, null, null, request, response);
- }
- /**
- * @param parentUniqueName - page unique name under new page will be created
- * @param title - new page title
- * @param uniqueName - new page unique name
- * @param friendlyName - new page friendly name (friendly url)
- * @param request - portlet request
- * @param response - portlet response
- * @return
- */
- public static boolean createPortalPage(String parentUniqueName, String title, String uniqueName, String friendlyName, PortletRequest request, PortletResponse response) {
- ContentNode parent = (ContentNode) getNodeByUniqueName(parentUniqueName, request, response);
- return createPortalPage(parent, title, uniqueName, friendlyName, request, response);
- }
- /**
- * @param parentId - page object id under new page will be created
- * @param title - new page title
- * @param request - portlet request
- * @param response - portlet response
- * @return
- */
- public static boolean createPortalPage(ObjectID parentId, String title, PortletRequest request, PortletResponse response) {
- ContentNode parent = (ContentNode) getNodeByObjectId(parentId, request, response);
- return createPortalPage(parent, title, null, null, request, response);
- }
- /**
- * @param parentId - page object id under new page will be created
- * @param title - new page title
- * @param uniqueName - new page unique name
- * @param friendlyName - new page friendly name (friendly url)
- * @param request - portlet request
- * @param response - portlet response
- * @return
- */
- public static boolean createPortalPage(ObjectID parentId, String title, String uniqueName, String friendlyName, PortletRequest request, PortletResponse response) {
- ContentNode parent = (ContentNode) getNodeByObjectId(parentId, request, response);
- return createPortalPage(parent, title, uniqueName, friendlyName, request, response);
- }
- /**
- * @param uniqueName - page unique name
- * @param request - portlet request
- * @param response - portlet response
- * @return
- */
- public static Identifiable getNodeByUniqueName(String uniqueName, PortletRequest request, PortletResponse response) {
- Object node = getController(request, response).getLocator().findByUniqueName(uniqueName);
- return node == null ? null : (Identifiable) node;
- }
- /**
- * @param id - page object id
- * @param request - portlet request
- * @param response - portlet response
- * @return
- */
- public static Identifiable getNodeByObjectId(ObjectID id, PortletRequest request, PortletResponse response) {
- Object node = getController(request, response).getLocator().findByID(id);
- return node == null ? null : (Identifiable) node;
- }
- /**
- * @param parent - parent page under new page created
- * @param title - new page title
- * @param uniqueName - new page unique name
- * @param friendlyName - new page friendly name (friendly url)
- * @param request - portlet request
- * @param response - portlet response
- * @return
- */
- private static boolean createPortalPage(ContentNode parent, String title, String uniqueName, String friendlyName, PortletRequest request, PortletResponse response) {
- boolean result = false;
- ContentModelController ctrl = null;
- CreationContextBuilderFactory factory = null;
- ContentPageCreationContext ctx = null;
- ModifiableContentPage newPage = null;
- try {
- ctrl = getController(request, response);
- factory = CreationContextBuilderFactory.getInstance();
- // Use the context to create the private page
- ctx = factory.newContentPageCreationContext(true);
- newPage = (ModifiableContentPage) ctrl.create(ContentPage.class, ctx);
- newPage.setTitle(request.getLocale(), title);
- // set page unique name
- if (uniqueName != null)
- newPage.getModifiableObjectID().setUniqueName(uniqueName);
- // set friendly name
- if (friendlyName != null) {
- ModifiableMetaDataProvider mmdp = (ModifiableMetaDataProvider) ctrl.getModifiableNode(newPage);
- mmdp.getModifiableMetaData().setValue(FRIENDLY_NAME_KEY, friendlyName);
- }
- if (parent != null) {
- ctrl.insert(newPage, parent, null);
- ctrl.commit();
- result = true;
- }
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- if (null != ctrl)
- ctrl.dispose();
- }
- return result;
- }
- /**
- * @param copiedUniqueName - target page unique name
- * @param parentUniqueName - parent page unique name under new page created
- * @param title - new page title
- * @param request - portlet request
- * @param response - portlet response
- * @param isDeepCopy - copy page with nested pages or not
- */
- public static void copyPortalPage(String copiedUniqueName, String parentUniqueName, String title, PortletRequest request, PortletResponse response, boolean isDeepCopy) throws Exception {
- Identifiable parent = getNodeByUniqueName(parentUniqueName, request, response);
- ContentNode template = (ContentNode) getNodeByUniqueName(copiedUniqueName, request, response);
- copyPortalPage(template, parent, title, null, null, request, response, isDeepCopy, null);
- }
- /**
- * @param copiedUniqueName - target page unique name
- * @param parentUniqueName - parent page unique name under new page created
- * @param title - new page title
- * @param uniqueName - new page unique name
- * @param friendlyName - new page friendly name (friendly url)
- * @param request - portlet request
- * @param response - portlet response
- * @param isDeepCopy - copy page with nested pages or not
- * @param mapping - map with template pages ids and wcm areas mapped to, may be null
- */
- public static void copyPortalPage(String copiedUniqueName, String parentUniqueName, String title, String uniqueName, String friendlyName, PortletRequest request, PortletResponse response, boolean isDeepCopy, Map<ObjectID, String> mapping) throws Exception {
- Identifiable parent = getNodeByUniqueName(parentUniqueName, request, response);
- ContentNode template = (ContentNode) getNodeByUniqueName(copiedUniqueName, request, response);
- copyPortalPage(template, parent, title, uniqueName, friendlyName, request, response, isDeepCopy, mapping);
- }
- /**
- * @param copiedId - target page object id
- * @param parentId - page page object id under new page created
- * @param title - new page title
- * @param request - portlet request
- * @param response - portlet response
- * @param isDeepCopy - copy page with nested pages or not
- */
- public static void copyPortalPage(ObjectID copiedId, ObjectID parentId, String title, PortletRequest request, PortletResponse response, boolean isDeepCopy) throws Exception {
- Identifiable parent = getNodeByObjectId(parentId, request, response);
- ContentNode template = (ContentNode) getNodeByObjectId(copiedId, request, response);
- copyPortalPage(template, parent, title, null, null, request, response, isDeepCopy, null);
- }
- /**
- * @param copiedId - target page object id
- * @param parentId - page page object id under new page created
- * @param title - new page title
- * @param uniqueName - new page unique name
- * @param friendlyName - new page friendly name (friendly url)
- * @param request - portlet request
- * @param response - portlet response
- * @param isDeepCopy - copy page with nested pages or not
- */
- public static void copyPortalPage(ObjectID copiedId, ObjectID parentId, String title, String uniqueName, String friendlyName, PortletRequest request, PortletResponse response, boolean isDeepCopy) throws Exception {
- Identifiable parent = getNodeByObjectId(parentId, request, response);
- ContentNode template = (ContentNode) getNodeByObjectId(copiedId, request, response);
- copyPortalPage(template, parent, title, uniqueName, friendlyName, request, response, isDeepCopy, null);
- }
- //http://public.dhe.ibm.com/software/dw/lotus/portal_javadoc/80/portal/spi_docs/com/ibm/portal/model/controller/CreationContextBuilderFactory.html
- private static void copyPortalPage(ContentNode template, Identifiable parent, String newPageTitle, String newPageUniqueName, String newPageFriendlyName, PortletRequest request, PortletResponse response, boolean isDeepCopy, Map<ObjectID, String> mapping) throws Exception {
- ContentModelController ctrl = getController(request, response);
- ContentMappingInfoController mappingCtrl = getContentMappingController();
- try {
- NavigationModel navModel = getNavigationModel(request, response);
- makeCopy(template, parent, newPageTitle, newPageUniqueName, newPageFriendlyName, request, response, navModel, ctrl, getPortletModelProvider(), isDeepCopy, mappingCtrl, mapping);
- ctrl.commit();
- mappingCtrl.commit();
- } finally {
- if (ctrl != null)
- ctrl.dispose();
- }
- }
- // todo add support labels and links
- private static void makeCopy(ContentNode template, Identifiable parent, String newPageTitle, String newPageUniqueName, String newPageFriendlyName, PortletRequest request, PortletResponse response, NavigationModel navModel, ContentModelController ctrl, PortletModelProvider pmp, boolean isDeepCopy, ContentMappingInfoController mappingCtrl, Map<ObjectID, String> mapping) throws Exception {
- ServletRequest servletRequest = PortletUtils.getInternalRequest(request).getHttpServletRequest();
- ServletResponse servletResponse = PortletUtils.getInternalResponse(response).getHttpServletResponse();
- try {
- if (template != null && parent != null) {
- final CreationContextBuilderFactory factory = CreationContextBuilderFactory.getInstance();
- final UniqueNameStrategy strategy = UniqueNameStrategy.NULL;
- CreationContext ctx;
- ModifiableContentNode newPage;
- ContentNodeType type = template.getContentNodeType();
- //ContentNodeType.STATICPAGE
- if (type.equals(ContentNodeType.PAGE)) {
- PortletModel portletModel = pmp.getPortletModel((ContentPage) template, servletRequest, servletResponse);
- ctx = factory.newContentNodeCopyCreationContext(template, ctrl, portletModel, strategy, null);
- newPage = (ModifiableContentPage) ctrl.create(ContentPage.class, ctx);
- } else if (type.equals(ContentNodeType.STATICPAGE)) {
- PortletModel portletModel = pmp.getPortletModel((ContentPage) template, servletRequest, servletResponse);
- ctx = factory.newContentNodeCopyCreationContext(template, ctrl, portletModel, strategy, null);
- newPage = (ModifiableContentPage) ctrl.create(StaticContentPage.class, ctx);
- } else if (type.equals(ContentNodeType.LABEL)) {
- ctx = factory.newContentNodeCopyCreationContext(template, ctrl, null, strategy, null);
- newPage = (ModifiableContentLabel) ctrl.create(ContentLabel.class, ctx);
- } else if (type.equals(ContentNodeType.EXTERNALURL)){
- ctx = factory.newContentNodeCopyCreationContext(template, ctrl, null, strategy, null);
- newPage = (ModifiableExternalContentURL) ctrl.create(ExternalContentURL.class, ctx);
- } else if (type.equals(ContentNodeType.INTERNALURL)){
- ctx = factory.newContentNodeCopyCreationContext(template, ctrl, null, strategy, null);
- newPage = (ModifiableInternalContentURL) ctrl.create(InternalContentURL.class, ctx);
- } else {
- return;
- }
- newPage.setTitle(new Locale("EN"), newPageTitle);
- if (newPageUniqueName != null)
- newPage.getModifiableObjectID().setUniqueName(newPageUniqueName);
- if (newPageFriendlyName != null)
- setPageParameter(ctrl, newPage, FRIENDLY_NAME_KEY, newPageFriendlyName);
- if (mapping != null && mapping.get(template.getObjectID()) != null)
- setPageMapping(newPage.getObjectID(), mapping.get(template.getObjectID()), mappingCtrl);
- ctrl.insert(newPage, parent, null);
- if (isDeepCopy) {
- NavigationNode targetNode = (NavigationNode) ctrl.getLocator().findByID(template.getObjectID());
- List<NavigationNode> children = getChildrenNodes(navModel, targetNode);
- if (!children.isEmpty()) {
- for (NavigationNode nn : children) {
- try {
- ContentPage page = (ContentPage) ctrl.getLocator().findByID(nn.getObjectID());
- Identifiable node = (Identifiable) ctrl.getLocator().findByID(newPage.getObjectID());
- String title = nn.getTitle(new Locale("EN"));
- String childUniqueName = newPageUniqueName == null ? null : newPageUniqueName + "." + title;
- String childFriendlyName = getStringMetadata(nn, FRIENDLY_NAME_KEY);
- makeCopy(page, node, title, childUniqueName, childFriendlyName, request, response, navModel, ctrl, pmp, true, mappingCtrl, mapping);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- }
- } else {
- throw new Exception("Parent page " + parent + " or copied page " + template.getTitle(new Locale("EN")) + " is null or not found!");
- }
- } catch (Exception e) {
- e.printStackTrace();
- throw new Exception(e);
- }
- }
- /**
- * @param ctrl
- * @param node - page parameter set for
- * @param key - parameter name
- * @param value - parameter value
- */
- public static void setPageParameter(ContentModelController ctrl, ContentNode node, String key, String value) throws Exception{
- ModifiableMetaDataProvider mmdp = (ModifiableMetaDataProvider) ctrl.getModifiableNode(node);
- mmdp.getModifiableMetaData().setValue(key, value);
- }
- private static PortletModelProvider getPortletModelProvider() {
- try {
- Context context = new InitialContext();
- PortletModelHome home = (PortletModelHome) context.lookup(PortletModelHome.JNDI_NAME);
- return home.getPortletModelProvider();
- } catch (NamingException e) {
- e.printStackTrace();
- }
- return null;
- }
- public static NavigationModel getNavigationModel(PortletRequest request, PortletResponse response) {
- ServletRequest servletRequest = PortletUtils.getInternalRequest(request).getHttpServletRequest();
- ServletResponse servletResponse = PortletUtils.getInternalResponse(response).getHttpServletResponse();
- try {
- Context context = new InitialContext();
- NavigationModelHome navHome = (NavigationModelHome) context.lookup(NavigationModelHome.JNDI_NAME);
- return navHome.getNavigationModelProvider().getNavigationModel(servletRequest, servletResponse);
- } catch (NamingException e) {
- e.printStackTrace();
- } catch (ModelException e) {
- e.printStackTrace();
- }
- return null;
- }
- private static ContentMappingInfoController getContentMappingController() {
- try {
- Context ctx = new InitialContext();
- ContentMappingInfoHome contentMappingInfoHome = (ContentMappingInfoHome) ctx.lookup(ContentMappingInfoHome.JNDI_NAME);
- return contentMappingInfoHome.getContentMappingInfoController();
- } catch (NamingException e) {
- e.printStackTrace();
- }
- return null;
- }
- /**
- * You need to call controller.commit() to persist changes after this method call
- *
- * @param pageId - page object ID
- * @param siteAreaPath - WCM sitearea path to page mapped
- * @param controller - ContentMappingInfoController
- */
- public static void setPageMapping(ObjectID pageId, String siteAreaPath, ContentMappingInfoController controller) {
- try {
- ModifiableContentMappingInfo mappingInfo = controller.createModifiableContentMappingInfo(pageId);
- mappingInfo.addContentPath(siteAreaPath, true, null);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * @param pageId - page object ID
- * @param siteAreaPath - WCM sitearea path to page mapped
- */
- public static void setPageMapping(ObjectID pageId, String siteAreaPath) {
- try {
- Context ctx = new InitialContext();
- ContentMappingInfoHome contentMappingInfoHome = (ContentMappingInfoHome) ctx.lookup(ContentMappingInfoHome.JNDI_NAME);
- ContentMappingInfoController controller = contentMappingInfoHome.getContentMappingInfoController();
- setPageMapping(pageId, siteAreaPath, controller);
- controller.commit();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * Returns page parameter as string
- *
- * @param node - page
- * @param key - parameter name
- * @return
- */
- public static String getStringMetadata(NavigationNode node, String key) {
- if (node instanceof com.ibm.portal.MetaDataProvider) {
- com.ibm.portal.MetaData iMetaData = ((com.ibm.portal.MetaDataProvider) node).getMetaData();
- Object url = iMetaData.getValue(key);
- if (url != null && !url.toString().equals("")) {
- return url.toString();
- }
- }
- return null;
- }
- /**
- * Returns page parameter as boolean
- *
- * @param node - page
- * @param key - parameter name
- * @return
- */
- public static boolean getBooleanMetadata(NavigationNode node, String key) {
- if (node instanceof com.ibm.portal.MetaDataProvider) {
- com.ibm.portal.MetaData iMetaData = ((com.ibm.portal.MetaDataProvider) node).getMetaData();
- Object url = iMetaData.getValue(key);
- if (url != null && !url.toString().equals("")) {
- return url.toString().equalsIgnoreCase("true");
- }
- }
- return false;
- }
- /**
- * @param nm - navigation model
- * @param rootNode - parent navigation node for searched node
- * @param nodeUniqueName - target node unique name
- * @return navigation node
- */
- public static NavigationNode getNavNodeByUniqueName(NavigationModel nm, NavigationNode rootNode, String nodeUniqueName) {
- try {
- if (rootNode == null)
- rootNode = (NavigationNode) nm.getRoot();
- String uniqueName = rootNode.getContentNode().getObjectID().getUniqueName();
- if (uniqueName != null && uniqueName.equals(nodeUniqueName))
- return rootNode;
- Iterator<NavigationNode> iterator = nm.getChildren(rootNode);
- while (iterator.hasNext()) {
- NavigationNode n = getNavNodeByUniqueName(nm, iterator.next(), nodeUniqueName);
- if (n != null)
- return n;
- }
- } catch (ModelException e) {
- e.printStackTrace();
- }
- return null;
- }
- public static List<NavigationNode> getChildrenNodes(NavigationModel nm, NavigationNode parentNode) {
- List<NavigationNode> childs = new ArrayList<NavigationNode>();
- try {
- if (parentNode == null) return childs;
- Iterator<NavigationNode> iter = nm.getChildren(parentNode);
- while (iter.hasNext()) {
- NavigationNode node = iter.next();
- childs.add(node);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return childs;
- }
- public static ContentModelController getController(PortletRequest request, PortletResponse response) {
- ContentModel aContentmodel = null;
- ContentModelController ctrl = null;
- ContentModelControllerHome home = null;
- try {
- Context ictx = new InitialContext();
- ContentModelHome homea = (ContentModelHome) ictx.lookup("portal:service/model/ContentModel");
- if (homea != null) {
- ContentModelProvider provider = homea.getContentModelProvider();
- PortletUtils.getInternalRequest(request).getHttpServletRequest();
- //aContentmodel = provider.getContentModel((ServletRequest) request, (ServletResponse) response);
- aContentmodel = provider.getContentModel(PortletUtils.getInternalRequest(request).getHttpServletRequest(), PortletUtils.getInternalResponse(response).getHttpServletResponse());
- }
- home = (ContentModelControllerHome) ictx.lookup(ContentModelControllerHome.JNDI_NAME);
- if (home != null) {
- try {
- ctrl = home.getContentModelControllerProvider().createContentModelController(aContentmodel);
- } catch (CannotInstantiateControllerException e) {
- e.printStackTrace();
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return ctrl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement