Java tutorial
/* * Copyright (c) 2002-2013, Mairie de Paris * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright notice * and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice * and the following disclaimer in the documentation and/or other materials * provided with the distribution. * * 3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * License 1.0 */ package fr.paris.lutece.portal.web.admin; import fr.paris.lutece.portal.business.page.Page; import fr.paris.lutece.portal.business.page.PageHome; import fr.paris.lutece.portal.business.portlet.PortletType; import fr.paris.lutece.portal.business.portlet.PortletTypeHome; import fr.paris.lutece.portal.business.role.RoleHome; import fr.paris.lutece.portal.business.style.PageTemplate; import fr.paris.lutece.portal.business.style.PageTemplateHome; import fr.paris.lutece.portal.business.user.AdminUser; import fr.paris.lutece.portal.service.content.ContentPostProcessorService; import fr.paris.lutece.portal.service.content.ContentService; import fr.paris.lutece.portal.service.fileupload.FileUploadService; import fr.paris.lutece.portal.service.i18n.I18nService; import fr.paris.lutece.portal.service.message.AdminMessage; import fr.paris.lutece.portal.service.message.AdminMessageService; import fr.paris.lutece.portal.service.message.SiteMessageException; import fr.paris.lutece.portal.service.page.IPageService; import fr.paris.lutece.portal.service.page.PageResourceIdService; import fr.paris.lutece.portal.service.page.PageService; import fr.paris.lutece.portal.service.portal.PortalService; import fr.paris.lutece.portal.service.portal.ThemesService; import fr.paris.lutece.portal.service.portlet.PortletResourceIdService; import fr.paris.lutece.portal.service.rbac.RBACService; import fr.paris.lutece.portal.service.security.UserNotSignedException; import fr.paris.lutece.portal.service.spring.SpringContextService; import fr.paris.lutece.portal.service.template.AppTemplateService; import fr.paris.lutece.portal.service.util.AppPropertiesService; import fr.paris.lutece.portal.web.constants.Markers; import fr.paris.lutece.portal.web.constants.Messages; import fr.paris.lutece.portal.web.constants.Parameters; import fr.paris.lutece.portal.web.resource.ExtendableResourcePluginActionManager; import fr.paris.lutece.portal.web.upload.MultipartHttpServletRequest; import fr.paris.lutece.util.ReferenceList; import fr.paris.lutece.util.html.HtmlTemplate; import fr.paris.lutece.util.string.StringUtil; import fr.paris.lutece.util.url.UrlItem; import org.apache.commons.fileupload.FileItem; import org.apache.commons.lang.StringUtils; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; /** * This class provides the admin interface to manage administration of site */ public class AdminPageJspBean extends AdminFeaturesPageJspBean { //////////////////////////////////////////////////////////////////////////// // Constants // Right public static final String RIGHT_MANAGE_ADMIN_SITE = "CORE_ADMIN_SITE"; // Properties for page titles public static final String PROPERTY_PAGE_TITLE_ADMIN_SITE = "portal.site.admin_page.pageTitle"; // Markers private static final String MARK_PAGE = "page"; private static final String MARK_PAGE_INIT_ID = "page_init_id"; private static final String MARK_PAGE_MESSAGE = "page_message"; private static final String MARK_PORTLET_TYPES_LIST = "portlet_types_list"; private static final String MARK_PAGE_ORDER_LIST = "page_order_list"; private static final String MARK_PAGE_ROLES_LIST = "page_roles_list"; private static final String MARK_PAGE_THEMES_LIST = "page_themes_list"; private static final String MARK_IMAGE_URL = "image_url"; private static final String MARK_PAGE_TEMPLATES_LIST = "page_templates_list"; private static final String MARK_PAGE_TEMPLATE = "page_template"; private static final String MARK_INDEX_ROW = "index_row"; private static final String MARK_AUTORIZATION = "authorization"; private static final String MARK_PAGE_BLOCK = "page_block"; // Parameters private static final String PARAMETER_IMAGE_CONTENT = "image_content"; private static final String PARAMETER_NODE_STATUS = "node_status"; private static final String PARAMETER_BLOCK = "param_block"; private static final String PARAMETER_PORTLET_TYPE = "portlet_type"; private static final String PARAMETER_PAGE_TEMPLATE_UPDATE_IMAGE = "update_image"; private static final int BLOCK_SEARCH = 1; private static final int BLOCK_PROPERTY = 2; private static final int BLOCK_CHILDPAGE = 5; // Templates private static final String TEMPLATE_PAGE_TEMPLATE_ROW = "admin/site/page_template_list_row.html"; private static final String TEMPLATE_ADMIN_PAGE = "admin/site/admin_page.html"; private static final String TEMPLATE_ADMIN_PAGE_BLOCK_SEARCH = "admin/site/admin_page_block_search.html"; private static final String TEMPLATE_ADMIN_PAGE_BLOCK_PROPERTY = "admin/site/admin_page_block_property.html"; private static final String TEMPLATE_ADMIN_PAGE_BLOCK_CHILDPAGE = "admin/site/admin_page_block_childpage.html"; // Properties definition private static final String PROPERTY_MESSAGE_PAGE_INEXISTENT = "portal.site.admin_page.messagePageInexistent"; private static final String PROPERTY_MESSAGE_PAGE_FORMAT = "portal.site.admin_page.messagePageFormat"; private static final String PROPERTY_MESSAGE_CONFIRM_REMOVE_PAGE = "portal.site.message.confirmRemovePage"; private static final String PROPERTY_LIST_ORDER_MAX = "list.order.max"; // Jsp private static final String JSP_ADMIN_SITE = "AdminSite.jsp"; private static final String JSP_REMOVE_PAGE = "jsp/admin/site/DoRemovePage.jsp"; //Messages private static final String MESSAGE_TITLE_INVALID_CHARACTERS = "portal.site.message.invalidCharactersInTitleName"; private static final String MESSAGE_DESCRIPTION_INVALID_CHARACTERS = "portal.site.message.invalidCharactersInDescription"; private static final String MESSAGE_CANNOT_REMOVE_CHILDPAGE_EXISTS = "portal.site.message.cannotRemoveChildPageExists"; private static final String MESSAGE_LENGTH_DESCRIPTION = "portal.site.message.pageLengthDescription"; private static final String MESSAGE_ROOT_PAGE_FORBIDDEN = "portal.site.message.rootPageForbidden"; private static final String MESSAGE_INVALID_PAGE_ID = "portal.site.message.pageIdInvalid"; private static final String MESSAGE_PAGE_ID_CHILDPAGE = "portal.site.message.pageIdChildPage"; private static final String MESSAGE_SAME_PAGE_ID = "portal.site.message.pageSameId"; private static IPageService _pageService = (IPageService) SpringContextService.getBean("pageService"); /** * Displays the page which contains the management forms of a skin page whose identifier is specified in parameter * * @param request The identifier of the page * @return The html code of the management forms of a page */ public String getAdminPage(HttpServletRequest request) { String strPageId = request.getParameter(Parameters.PAGE_ID); if ((strPageId == null) || strPageId.equals("")) { strPageId = String.valueOf(PortalService.getRootPageId()); } String strParamBlock = request.getParameter(PARAMETER_BLOCK); String strPortletType = request.getParameter(PARAMETER_PORTLET_TYPE); return getAdminPageBlock(strPageId, strParamBlock, strPortletType, request); } /** * Returns the html code for displaying the page whose identifier is specified in parameter from the administration * unit. <br> That is useful to make a preview of the page. * * @param request The http request * @return The html code of the page * @throws UserNotSignedException The UserNotSignedException * @throws SiteMessageException occurs when a site message need to be displayed */ public String getAdminPagePreview(HttpServletRequest request) throws UserNotSignedException, SiteMessageException { ContentService cs = PortalService.getInvokedContentService(request); int nMode = 1; String strContent = StringUtils.EMPTY; if (cs != null) { strContent = cs.getPage(request, nMode); } else { strContent = PortalService.getDefaultPage(request, nMode); } if (ContentPostProcessorService.hasProcessor()) { strContent = ContentPostProcessorService.process(request, strContent); } return strContent; } /** * Processes of the modification of the page informations * * @param request The http request * @return The jsp url result of the process */ public String doModifyPage(HttpServletRequest request) { MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request; int nPageId = Integer.parseInt(mRequest.getParameter(Parameters.PAGE_ID)); Page page = PageHome.getPage(nPageId); Integer nOldAutorisationNode = page.getIdAuthorizationNode(); String strErrorUrl = getPageData(mRequest, page); if (strErrorUrl != null) { return strErrorUrl; } int nParentPageId = Integer.parseInt(mRequest.getParameter(Parameters.PARENT_ID)); if (nParentPageId != page.getParentPageId()) { strErrorUrl = getNewParentPageId(mRequest, page, nParentPageId); if (strErrorUrl != null) { return strErrorUrl; } } //set the authorization node if (page.getNodeStatus() != 0) { Page parentPage = PageHome.getPage(page.getParentPageId()); page.setIdAuthorizationNode(parentPage.getIdAuthorizationNode()); } else { page.setIdAuthorizationNode(page.getId()); } if ((page.getIdAuthorizationNode() == null) || !page.getIdAuthorizationNode().equals(nOldAutorisationNode)) { PageService.updateChildrenAuthorizationNode(page.getId(), page.getIdAuthorizationNode()); } String strUpdatePicture = mRequest.getParameter(PARAMETER_PAGE_TEMPLATE_UPDATE_IMAGE); FileItem item = mRequest.getFile(PARAMETER_IMAGE_CONTENT); boolean bUpdatePicture = false; String strPictureName = FileUploadService.getFileNameOnly(item); if (strUpdatePicture != null) { if (strPictureName.equals("")) { return AdminMessageService.getMessageUrl(request, Messages.MANDATORY_FILE, AdminMessage.TYPE_STOP); } else { bUpdatePicture = true; } } if (bUpdatePicture) { byte[] bytes = item.get(); String strMimeType = item.getContentType(); page.setImageContent(bytes); page.setMimeType(strMimeType); } // Updates the page _pageService.updatePage(page); // Displays again the current page with the modifications return getUrlPage(nPageId); } /** * Display the confirm page for the delete of a page * * @param request The http request * @return The html code of the confirm page */ public String getRemovePage(HttpServletRequest request) { String strPageId = request.getParameter(Parameters.PAGE_ID); UrlItem url = new UrlItem(JSP_REMOVE_PAGE); url.addParameter(Parameters.PAGE_ID, strPageId); return AdminMessageService.getMessageUrl(request, PROPERTY_MESSAGE_CONFIRM_REMOVE_PAGE, url.getUrl(), "", AdminMessage.TYPE_CONFIRMATION); } /** * Processes the deletion of a page * * @param request The http request * @return The jsp url result of the process */ public String doRemovePage(HttpServletRequest request) { String strPageId = request.getParameter(Parameters.PAGE_ID); int nPageId = Integer.parseInt(strPageId); // Checks that the page has no child Collection<Page> list = PageHome.getChildPagesMinimalData(nPageId); if (list.size() > 0) { return AdminMessageService.getMessageUrl(request, MESSAGE_CANNOT_REMOVE_CHILDPAGE_EXISTS, AdminMessage.TYPE_STOP); } int nParentPageId = PageHome.getPage(nPageId).getParentPageId(); // Delete the page _pageService.removePage(nPageId); return getUrlPage(nParentPageId); } /** * Processes the creation of a child page to the page whose identifier is stored in the http request * * @param request The http request * @return The jsp url result of the process */ public String doCreateChildPage(HttpServletRequest request) { MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request; String strParentPageId = mRequest.getParameter(Parameters.PAGE_ID); int nParentPageId = Integer.parseInt(strParentPageId); Page page = new Page(); page.setParentPageId(nParentPageId); String strErrorUrl = getPageData(mRequest, page); if (strErrorUrl != null) { return strErrorUrl; } // Create the page _pageService.createPage(page); //set the authorization node if (page.getNodeStatus() != 0) { Page parentPage = PageHome.getPage(page.getParentPageId()); page.setIdAuthorizationNode(parentPage.getIdAuthorizationNode()); } else { page.setIdAuthorizationNode(page.getId()); } FileItem item = mRequest.getFile(PARAMETER_IMAGE_CONTENT); byte[] bytes = item.get(); String strMimeType = item.getContentType(); page.setImageContent(bytes); page.setMimeType(strMimeType); _pageService.updatePage(page); // Displays again the current page with the modifications return getUrlPage(page.getId()); } /** * Management of the image associated to the page * @param page The Page Object * @param strPageId The page identifier * @return The url */ public String getResourceImagePage(Page page, String strPageId) { String strResourceType = _pageService.getResourceTypeId(); UrlItem url = new UrlItem(Parameters.IMAGE_SERVLET); url.addParameter(Parameters.RESOURCE_TYPE, strResourceType); url.addParameter(Parameters.RESOURCE_ID, strPageId); return url.getUrlWithEntity(); } ////////////////////////////////////////////////////////////////////////////////// // Private implementation /** * Displays the page which contains the management forms of a skin page whose identifier is specified in parameter. * * @param strPageId The identifier of the page * @param strParamBlock The block parameter to display * @param strPortletType the str portlet type * @param request The request * @return The management page of a page */ private String getAdminPageBlock(String strPageId, String strParamBlock, String strPortletType, HttpServletRequest request) { Map<String, Object> model = new HashMap<String, Object>(); Page page = null; int nPageId = 1; int nPageIdInit = 1; int nParamBlock = 0; try { nPageId = Integer.parseInt(strPageId); nPageIdInit = nPageId; nParamBlock = (strParamBlock != null) ? Integer.parseInt(strParamBlock) : 0; boolean bPageExist = PageHome.checkPageExist(nPageId); if (bPageExist) { page = PageHome.getPage(nPageId); model.put(MARK_PAGE_MESSAGE, ""); } else { nPageId = PortalService.getRootPageId(); page = PageHome.getPage(nPageId); model.put(MARK_PAGE_MESSAGE, I18nService.getLocalizedString(PROPERTY_MESSAGE_PAGE_INEXISTENT, getLocale())); } } catch (NumberFormatException nfe) { nPageId = PortalService.getRootPageId(); page = PageHome.getPage(nPageId); model.put(MARK_PAGE_MESSAGE, I18nService.getLocalizedString(PROPERTY_MESSAGE_PAGE_FORMAT, getLocale())); } switch (nParamBlock) { case BLOCK_SEARCH: model.put(MARK_PAGE_BLOCK, getAdminPageBlockSearch(nPageIdInit, model)); break; case BLOCK_PROPERTY: case BLOCK_CHILDPAGE: model.put(MARK_PAGE_BLOCK, getAdminPageBlockProperty(page, nParamBlock, model)); break; default: model.put(MARK_PAGE_BLOCK, ""); break; } model.put(MARK_PORTLET_TYPES_LIST, getPortletTypeList(getUser())); model.put(MARK_PAGE, page); ExtendableResourcePluginActionManager.fillModel(request, getUser(), model, strPageId, Page.RESOURCE_TYPE); HtmlTemplate template = AppTemplateService.getTemplate(TEMPLATE_ADMIN_PAGE, getLocale(), model); return getAdminPage(template.getHtml()); } /** * Displays the page which contains the management forms of a skin page whose identifier is specified in parameter * * @param page The page object * @param nParamBlock The id parameter to display * @param model The HashMap * @return The management page of a page */ private String getAdminPageBlockProperty(Page page, int nParamBlock, Map model) { model.put(MARK_PAGE, page); model.put(MARK_PAGE_INIT_ID, page.getId()); model.put(MARK_PAGE_ORDER_LIST, getOrdersList()); model.put(MARK_PAGE_ROLES_LIST, RoleHome.getRolesList(getUser())); model.put(MARK_PAGE_THEMES_LIST, ThemesService.getPageThemes(getLocale())); model.put(MARK_IMAGE_URL, getResourceImagePage(page, Integer.toString(page.getId()))); int nIndexRow = 1; StringBuffer strPageTemplatesRow = new StringBuffer(); // Scan of the list for (PageTemplate pageTemplate : PageTemplateHome.getPageTemplatesList()) { strPageTemplatesRow.append(getTemplatesPageList(pageTemplate.getId(), page.getPageTemplateId(), Integer.toString(nIndexRow))); nIndexRow++; } model.put(MARK_PAGE_TEMPLATES_LIST, strPageTemplatesRow); // Add in v2.0 int nManageAuthorization = 1; if (_pageService.isAuthorizedAdminPage(page.getId(), PageResourceIdService.PERMISSION_MANAGE, getUser())) { nManageAuthorization = 0; } model.put(MARK_AUTORIZATION, Integer.toString(nManageAuthorization)); String strTemplate = TEMPLATE_ADMIN_PAGE_BLOCK_PROPERTY; if (nParamBlock == BLOCK_CHILDPAGE) { strTemplate = TEMPLATE_ADMIN_PAGE_BLOCK_CHILDPAGE; } HtmlTemplate template = AppTemplateService.getTemplate(strTemplate, getLocale(), model); return template.getHtml(); } /** * Displays the page which contains the management forms of a skin page whose identifier is specified in parameter * * @param nPageIdInit The identifier of the init page * @param model The HashMap * @return The management page of a page */ private String getAdminPageBlockSearch(int nPageIdInit, Map model) { model.put(MARK_PAGE_INIT_ID, Integer.toString(nPageIdInit)); HtmlTemplate template = AppTemplateService.getTemplate(TEMPLATE_ADMIN_PAGE_BLOCK_SEARCH, getLocale(), model); return template.getHtml(); } /** * Provide page data * @param request The HttpServletRequest * @param page the Page Object * @return strErrorUrl */ private String getPageData(HttpServletRequest request, Page page) { String strErrorUrl = null; String strPageId = request.getParameter(Parameters.PAGE_ID); int nPageId = Integer.parseInt(strPageId); String strName = request.getParameter(Parameters.PAGE_NAME); String strDescription = request.getParameter(Parameters.PAGE_DESCRIPTION); String strTemplatePageId = request.getParameter(Parameters.PAGE_TEMPLATE_ID); int nTemplatePageId = Integer.parseInt(strTemplatePageId); String strOrder = request.getParameter(Parameters.ORDER); String strRole = request.getParameter(Parameters.ROLE); String strTheme = request.getParameter(Parameters.THEME); String strMetaKeywords = request.getParameter(Parameters.META_KEYWORDS).trim(); String strMetaDescription = request.getParameter(Parameters.META_DESCRIPTION).trim(); /* Added in v2.0 */ String strNodeStatus = request.getParameter(PARAMETER_NODE_STATUS); int nNodeStatus = Integer.parseInt(strNodeStatus); // Checks the description length (150 car. maximum) if (strDescription.length() > 150) { return AdminMessageService.getMessageUrl(request, MESSAGE_LENGTH_DESCRIPTION, AdminMessage.TYPE_STOP); } // Checks if the mandatory field page name is found in the request if (strName.trim().equals("")) { return AdminMessageService.getMessageUrl(request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP); } // Checks if the page name contains HTML special characters else if (StringUtil.containsHtmlSpecialCharacters(strName)) { return AdminMessageService.getMessageUrl(request, MESSAGE_TITLE_INVALID_CHARACTERS, AdminMessage.TYPE_STOP); } // Checks if the page description contains HTML special characters else if (StringUtil.containsHtmlSpecialCharacters(strDescription)) { return AdminMessageService.getMessageUrl(request, MESSAGE_DESCRIPTION_INVALID_CHARACTERS, AdminMessage.TYPE_STOP); } // Checks if the META name of the page contains HTML special characters else if (StringUtil.containsHtmlSpecialCharacters(strMetaKeywords)) { return AdminMessageService.getMessageUrl(request, MESSAGE_DESCRIPTION_INVALID_CHARACTERS, AdminMessage.TYPE_STOP); } // Checks if the META description of the page description contains HTML special characters else if (StringUtil.containsHtmlSpecialCharacters(strMetaDescription)) { return AdminMessageService.getMessageUrl(request, MESSAGE_DESCRIPTION_INVALID_CHARACTERS, AdminMessage.TYPE_STOP); } else { page.setName(strName); } int nOrder = (strOrder != null) ? Integer.parseInt(strOrder) : PageHome.getNewChildPageOrder(nPageId); page.setPageTemplateId(nTemplatePageId); page.setDescription(strDescription); page.setOrder(nOrder); page.setRole(strRole); page.setCodeTheme(strTheme); page.setNodeStatus(nNodeStatus); page.setMetaKeywords(strMetaKeywords); page.setMetaDescription(strMetaDescription); return strErrorUrl; } /** * Returns the list of the orders * * @return The list of the orders in form of a ReferenceList object */ private ReferenceList getOrdersList() { ReferenceList list = new ReferenceList(); int nOrderMax = AppPropertiesService.getPropertyInt(PROPERTY_LIST_ORDER_MAX, 15); for (int i = 1; i <= nOrderMax; i++) { list.addItem(i, String.valueOf(i)); } return list; } /** * Returns an html template containing the list of the portlet types * @param user The AdminUser * @return The html code */ private Collection<PortletType> getPortletTypeList(AdminUser user) { List<PortletType> listPortletType = PortletTypeHome.getPortletTypesList(getLocale()); return RBACService.getAuthorizedCollection(listPortletType, PortletResourceIdService.PERMISSION_CREATE, user); } /** * Gets an html template displaying the patterns list available in the portal for the layout * * @param nTemplatePageId The identifier of the layout to select in the list * @param nPageTemplatePageId The pafa templatepage id * @param nIndexRow the index row * @return The html code of the list */ private String getTemplatesPageList(int nTemplatePageId, int nPageTemplatePageId, String nIndexRow) { Map<String, Object> model = new HashMap<String, Object>(); PageTemplate pageTemplate = PageTemplateHome.findByPrimaryKey(nTemplatePageId); model.put(MARK_PAGE_TEMPLATE, pageTemplate); model.put(MARK_INDEX_ROW, nIndexRow); String strChecked = (pageTemplate.getId() == nPageTemplatePageId) ? "checked=\"checked\"" : ""; model.put(Markers.PAGE_TEMPLATE_CHECKED, strChecked); HtmlTemplate template = AppTemplateService.getTemplate(TEMPLATE_PAGE_TEMPLATE_ROW, getLocale(), model); return template.getHtml(); } /** * Return AdminSite Url * @param nId The PageId * @return url */ private String getUrlPage(int nId) { UrlItem url = new UrlItem(JSP_ADMIN_SITE); url.addParameter(Parameters.PAGE_ID, nId); return url.getUrl(); } /** * * @param request The HttpServletRequest * @param page The Page * @param nParentPageId The page parent Id * @return strParentPageId the new parent id */ private String getNewParentPageId(HttpServletRequest request, Page page, int nParentPageId) { String strErrorUrl = null; if (nParentPageId != 0) { int nChildPagePageId = nParentPageId; boolean bPageExist = PageHome.checkPageExist(nChildPagePageId); if (bPageExist) { if (nChildPagePageId >= PortalService.getRootPageId()) { Page childPage = PageHome.getPage(nChildPagePageId); int nParentChildPageId = childPage.getParentPageId(); while ((nChildPagePageId != page.getId()) && (nChildPagePageId != 0)) { if (nParentChildPageId != page.getId()) { childPage = PageHome.getPage(nParentChildPageId); nChildPagePageId = childPage.getId(); nParentChildPageId = childPage.getParentPageId(); } else { return AdminMessageService.getMessageUrl(request, MESSAGE_PAGE_ID_CHILDPAGE, AdminMessage.TYPE_STOP); } } if (nParentPageId != page.getId()) { String strParentPageId = Integer.toString(nParentPageId); page.setParentPageId(Integer.parseInt(strParentPageId)); } else { return AdminMessageService.getMessageUrl(request, MESSAGE_SAME_PAGE_ID, AdminMessage.TYPE_STOP); } } else { return AdminMessageService.getMessageUrl(request, MESSAGE_ROOT_PAGE_FORBIDDEN, AdminMessage.TYPE_STOP); } } else { return AdminMessageService.getMessageUrl(request, MESSAGE_INVALID_PAGE_ID, AdminMessage.TYPE_STOP); } } else { return AdminMessageService.getMessageUrl(request, MESSAGE_INVALID_PAGE_ID, AdminMessage.TYPE_STOP); } return strErrorUrl; } }