Package org.apache.jetspeed.layout.impl

Source Code of org.apache.jetspeed.layout.impl.UpdatePageAction

/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.layout.impl;

import java.util.Map;

import org.apache.jetspeed.JetspeedActions;
import org.apache.jetspeed.ajax.AJAXException;
import org.apache.jetspeed.ajax.AjaxAction;
import org.apache.jetspeed.ajax.AjaxBuilder;
import org.apache.jetspeed.layout.PortletActionSecurityBehavior;
import org.apache.jetspeed.om.folder.Folder;
import org.apache.jetspeed.om.page.BaseFragmentElement;
import org.apache.jetspeed.om.page.BaseFragmentsElement;
import org.apache.jetspeed.om.page.DynamicPage;
import org.apache.jetspeed.om.page.Fragment;
import org.apache.jetspeed.om.page.Page;
import org.apache.jetspeed.page.PageManager;
import org.apache.jetspeed.page.document.Node;
import org.apache.jetspeed.request.RequestContext;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* Update Page action -- updates various parts of the PSML page
*
* AJAX Parameters:
*    action = updatepage
*    General methods:
*    method = add | remove
*    Info methods:
*    | info
*    Meta methods:
*    | add-meta | update-meta | remove-meta
*    Security methods:
*    | add-secref | remove-secref
*    Fragment methods:
*    | update-fragment | add-fragment | remove-fragment
*   
*    update-fragment params: id, layout(name), sizes, layoutid (add)
*   
* @author <a href="mailto:taylor@apache.org">David Sean Taylor </a>
* @version $Id: $
*/
public class UpdatePageAction
    extends BaseSiteUpdateAction
    implements AjaxAction, AjaxBuilder, Constants
{
    protected Logger log = LoggerFactory.getLogger(UpdatePageAction.class);
   
    public UpdatePageAction(String template,
                            String errorTemplate,
                            PageManager pm,
                            PortletActionSecurityBehavior securityBehavior)                           
                           
    {
        super(template, errorTemplate, pm, securityBehavior);
    }
   
    public boolean run(RequestContext requestContext, Map resultMap)
            throws AJAXException
    {
        boolean success = true;
        String status = "success";
        try
        {
            resultMap.put(ACTION, "updatepage");
            // Get the necessary parameters off of the request
            String method = getActionParameter(requestContext, "method");
            if (method == null)
            {
                throw new RuntimeException("Method not provided");
            }           
            resultMap.put("method", method);
            if (false == checkAccess(requestContext, JetspeedActions.EDIT))
            {
                success = false;
                resultMap.put(REASON, "Insufficient access to administer portal permissions");               
                return success;
            }          
            int count = 0;
            BaseFragmentsElement page = null;           
            String path = getActionParameter(requestContext, "path");
            if (path == null)
            {
                page = requestContext.getPage().getPageOrTemplate();
            }
            else
            {
                if (!method.equals("add"))
                {
                    if (path.endsWith(Page.DOCUMENT_TYPE))
                    {
                        page = pageManager.getPage(path);
                    }
                    else if (path.endsWith(DynamicPage.DOCUMENT_TYPE))
                    {
                        page = pageManager.getDynamicPage(path);
                    }
                    else
                    {
                        success = false;
                        resultMap.put(REASON, "Can't lookup page by document type: " + path);               
                        return success;                       
                    }
                }
                else
                {
                    if (pageManager.pageExists(path) || pageManager.dynamicPageExists(path))
                    {
                        success = false;
                        resultMap.put(REASON, "Can't create: Page already exists: " + path);               
                        return success;               
                    }
                }
            }
            if (page == null)
            {
                throw new AJAXException("Missing current page or 'path' parameter");
            }
           
            if (method.equals("info"))
            {
                count = updateInformation(requestContext, resultMap, page, path);
            }
            else if (method.equals("add-meta"))
            {
                count = insertMetadata(requestContext, resultMap, page);
            }
            else if (method.equals("update-meta"))
            {
                count = updateMetadata(requestContext, resultMap, page);
            }
            else if (method.equals("remove-meta"))
            {
                count = removeMetadata(requestContext, resultMap, page);
            }
            else if (method.equals("add-secref"))
            {
                count = insertSecurityReference(requestContext, resultMap, page);
            }
            else if (method.equals("update-secref"))
            {
                count = updateSecurityReference(requestContext, resultMap, page);
            }                       
            else if (method.equals("remove-secref"))
            {
                count = removeSecurityReference(requestContext, resultMap, page);
            }
            else if (method.equals("remove-secdef"))
            {
                count = removeSecurityDef(requestContext, resultMap, page);
            }           
            else if (method.equals("add"))
            {
                page = pageManager.newPage(path);
                page.setTitle(getActionParameter(requestContext, TITLE));
                String s = getActionParameter(requestContext, SHORT_TITLE );
                if (!isBlank(s))
                    page.setShortTitle(s);
                String l = getActionParameter(requestContext, DEFAULT_LAYOUT);
                if (!isBlank(l) && (page.getRootFragment() instanceof Fragment))
                {
                    Fragment rootFragment = (Fragment)page.getRootFragment();
                    rootFragment.setName(getActionParameter(requestContext, DEFAULT_LAYOUT));
                }
                count++;               
            }
            else if (method.equals("copy"))
            {             
              String destination = getActionParameter(requestContext, "destination");
              String name = getActionParameter(requestContext, RESOURCE_NAME);
              destination = destination + Folder.PATH_SEPARATOR + name;
              if (page instanceof Page)
              {
                  Page newPage = pageManager.copyPage((Page)page,destination);
                  pageManager.updatePage(newPage);
              }
              else if (page instanceof DynamicPage)
              {
                    DynamicPage newPage = pageManager.copyDynamicPage((DynamicPage)page,destination);
                    pageManager.updateDynamicPage(newPage);                 
              }
            }
            else if (method.equals("move"))
            {             
              String destination = getActionParameter(requestContext, "destination");
              String name = getActionParameter(requestContext, RESOURCE_NAME);             
              destination = destination + Folder.PATH_SEPARATOR + name;
                if (page instanceof Page)
                {
                    Page newPage = pageManager.copyPage((Page)page, destination, true);
                    pageManager.updatePage(newPage);
                    pageManager.removePage((Page)page);
                }
                else if (page instanceof DynamicPage)
                {
                    DynamicPage newPage = pageManager.copyDynamicPage((DynamicPage)page, destination, true);
                    pageManager.updateDynamicPage(newPage);
                    pageManager.removeDynamicPage((DynamicPage)page);
                }
            }
            else if (method.equals("remove"))
            {
                if (page instanceof Page)
                {
                    pageManager.removePage((Page)page);
                }
                else if (page instanceof DynamicPage)
                {
                    pageManager.removeDynamicPage((DynamicPage)page);
                }
            }
            else if (method.equals("update-fragment"))
            {
                String fragmentId = getActionParameter(requestContext, PORTLETID);
                String layout = getActionParameter(requestContext, LAYOUT);               
                if (isBlank(fragmentId) || isBlank(layout))
                {
                    resultMap.put(REASON, "Missing parameter to update fragment");               
                    return false;                   
                }               
                count = updateFragment(requestContext, resultMap, page, fragmentId, layout);
            }
            else if (method.equals("add-fragment"))
            {
                String parentId = getActionParameter(requestContext, LAYOUTID);
                String layout = getActionParameter(requestContext, LAYOUT);               
                if (isBlank(parentId) || isBlank(layout))
                {
                    resultMap.put(REASON, "Missing parameter to add fragment");               
                    return false;                   
                }               
                count = addFragment(requestContext, resultMap, page, parentId, layout);
            }
            else if (method.equals("remove-fragment"))
            {
                String fragmentId = getActionParameter(requestContext, PORTLETID);
                if (isBlank(fragmentId))
                {
                    resultMap.put(REASON, "Missing parameter to remove fragment");               
                    return false;                   
                }               
                count = removeFragment(requestContext, resultMap, page, fragmentId);               
            }
            else if (method.equals("update-portlet-decorator"))
            {
                String fragmentId = getActionParameter(requestContext, PORTLETID);
              String portletDecorator = getActionParameter(requestContext, "portlet-decorator");
                if (isBlank(fragmentId) || isBlank(portletDecorator))
                {
                    resultMap.put(REASON, "Missing parameter to update portlet decorator");               
                    return false;                   
                }               
                count = updatePortletDecorator(requestContext, resultMap, page, fragmentId, portletDecorator);
            }
            else
            {
                success = false;
                resultMap.put(REASON, "Unsupported Site Update method: " + method);               
                return success;               
            }
            if (count > 0)
            {
                if (page instanceof Page)
                {
                    pageManager.updatePage((Page)page);
                }
                else
                {
                    pageManager.updateDynamicPage((DynamicPage)page);                   
                }
            }                       
            resultMap.put("count", Integer.toString(count));
            resultMap.put(STATUS, status);
        }
        catch (Exception e)
        {
            log.error("exception administering Site update", e);
            resultMap.put(REASON, e.toString());
            success = false;
        }
        return success;
    }
   
    protected int updatePortletDecorator(RequestContext requestContext, Map resultMap, BaseFragmentsElement page, String fragmentId, String portletDecorator)
    {
      int count = 0;
      BaseFragmentElement fragment = page.getFragmentById(fragmentId);
        if (fragment != null)
        {               
          fragment.setDecorator( portletDecorator );
          count++;
        }
      return count;
    }
   
    protected int updateFragment(RequestContext requestContext, Map resultMap, BaseFragmentsElement page, String fragmentId, String layout)
    {
        int count = 0;
        String sizes = getActionParameter(requestContext, SIZES);
        BaseFragmentElement updateFragment = page.getFragmentById(fragmentId);
        if (updateFragment instanceof Fragment)
        {
            Fragment fragment = (Fragment)updateFragment;
            if (!layout.equals(fragment.getName()))
            {
                fragment.setName(layout);
                count++;
                if ( isBlank(sizes) )
                {
                    fragment.setLayoutSizes(null);
                }
                else
                {
                    fragment.setLayoutSizes(sizes);
                }
                count++;
            }
            else
            {
                if (!isBlank(sizes))
                {
                    fragment.setLayoutSizes(sizes);
                    count++;
                }
            }
        }
        return count;
    }

    protected int addFragment(RequestContext requestContext, Map resultMap, BaseFragmentsElement page, String parentFragmentId, String layout)
    {
        int count = 0;
        String sizes = getActionParameter(requestContext, SIZES);
        BaseFragmentElement parentFragment = page.getFragmentById(parentFragmentId);
        if (parentFragment instanceof Fragment)
        {
            Fragment fragment = (Fragment)parentFragment;
            Fragment newFragment = pageManager.newFragment();
            newFragment.setType(Fragment.LAYOUT);           
            newFragment.setName(layout);
            fragment.getFragments().add(newFragment);           
            resultMap.put(PORTLETID, newFragment.getId());                       
            count++;
            if (!isBlank(sizes))
            {
                newFragment.setLayoutSizes(sizes);
                count++;
            }
        }
        return count;
    }

    protected int removeFragment(RequestContext requestContext, Map resultMap, BaseFragmentsElement page, String fragmentId)
    {
        int count = 0;
        BaseFragmentElement fragment = page.getFragmentById(fragmentId);
        if (fragment != null)
        {
            page.removeFragmentById(fragment.getId());
            count++;
        }
        return count;
    }   
       
    protected int updateInformation(RequestContext requestContext, Map resultMap, Node node, String path)
    throws AJAXException   
    {
        int count = 0;
        try
        {
            Page page = (Page)node;           
            String title = getActionParameter(requestContext, "title");
            if (title != null && isFieldModified(title, page.getTitle()))
                page.setTitle(title);
            String shortTitle = getActionParameter(requestContext, "short-title");
            if (shortTitle != null && isFieldModified(shortTitle, page.getShortTitle()))
                page.setShortTitle(shortTitle);
            String layoutDecorator = getActionParameter(requestContext, "layout-decorator");
            if (layoutDecorator != null && isFieldModified(layoutDecorator, page.getDefaultDecorator(Fragment.LAYOUT)))
            {
                if (isBlank(layoutDecorator))
                    layoutDecorator = null;
                page.setDefaultDecorator(layoutDecorator, Fragment.LAYOUT);
            }
            String portletDecorator = getActionParameter(requestContext, "portlet-decorator");
            if (portletDecorator != null && isFieldModified(portletDecorator, page.getDefaultDecorator(Fragment.PORTLET)))
            {
                if (isBlank(portletDecorator))
                    portletDecorator = null;                
                page.setDefaultDecorator(portletDecorator, Fragment.PORTLET);
            }
            String theme = getActionParameter(requestContext, "theme");
            if (theme != null && isFieldModified(theme, page.getSkin()))
            {
                if (isBlank(theme))
                    theme = null;                
                page.setSkin(theme);
            }
            String hidden = getActionParameter(requestContext, "hidden");
            if (hidden != null && isBooleanModified(hidden, page.isHidden()))
                page.setHidden(!page.isHidden());                                   
            count++;
        }
        catch (Exception e)
        {
            throw new AJAXException(e);
        }       
        return count;
    }
   
}
TOP

Related Classes of org.apache.jetspeed.layout.impl.UpdatePageAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.