001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: package org.apache.jetspeed.layout.impl;
018:
019: import java.util.Locale;
020: import java.util.Map;
021:
022: import org.apache.commons.logging.Log;
023: import org.apache.commons.logging.LogFactory;
024: import org.apache.jetspeed.JetspeedActions;
025: import org.apache.jetspeed.ajax.AjaxAction;
026: import org.apache.jetspeed.ajax.AjaxBuilder;
027: import org.apache.jetspeed.layout.PortletActionSecurityBehavior;
028: import org.apache.jetspeed.page.document.NodeNotFoundException;
029: import org.apache.jetspeed.portalsite.Menu;
030: import org.apache.jetspeed.portalsite.PortalSiteRequestContext;
031: import org.apache.jetspeed.profiler.impl.ProfilerValveImpl;
032: import org.apache.jetspeed.request.RequestContext;
033:
034: /**
035: * Get menu action retrieves a menu defined for the addressed page.
036: *
037: * AJAX Parameters:
038: * menu = the name of the menu definition to retrieve
039: *
040: * @author <a href="mailto:rwatler@apache.org">Randy Watler</a>
041: * @version $Id: $
042: */
043: public class GetMenuAction extends BasePortletAction implements
044: AjaxAction, AjaxBuilder, Constants {
045: protected static final Log log = LogFactory
046: .getLog(GetMenusAction.class);
047:
048: public GetMenuAction(String template, String errorTemplate,
049: PortletActionSecurityBehavior securityBehavior) {
050: super (template, errorTemplate, securityBehavior);
051: }
052:
053: public boolean run(RequestContext requestContext, Map resultMap) {
054: boolean success = true;
055: String status = "success";
056: try {
057: // generate action result
058: resultMap.put(ACTION, "getmenu");
059:
060: // check permission to use ajax api
061: if (!checkAccess(requestContext, JetspeedActions.VIEW)) {
062: success = false;
063: resultMap
064: .put(REASON, "Insufficient access to get menu");
065: return success;
066: }
067:
068: // get action parameter
069: String menuName = getActionParameter(requestContext,
070: MENU_NAME);
071: if (menuName == null) {
072: success = false;
073: resultMap.put(REASON, "Missing required '" + MENU_NAME
074: + "' parameter");
075: return success;
076: }
077:
078: // get request context
079: PortalSiteRequestContext siteRequestContext = (PortalSiteRequestContext) requestContext
080: .getAttribute(ProfilerValveImpl.PORTAL_SITE_REQUEST_CONTEXT_ATTR_KEY);
081: if (siteRequestContext == null) {
082: success = false;
083: resultMap
084: .put(REASON,
085: "Missing portal site request context from ProfilerValve");
086: return success;
087: }
088:
089: // get request locale
090: Locale locale = requestContext.getLocale();
091:
092: // get menu definition
093: Menu menuDefinition = null;
094: try {
095: menuDefinition = siteRequestContext.getMenu(menuName);
096: } catch (NodeNotFoundException nnfe) {
097: }
098: if (menuDefinition == null) {
099: success = false;
100: resultMap.put(REASON,
101: "Unable to lookup specified menu for page");
102: return success;
103: }
104:
105: // return menu definition action results
106: resultMap.put(MENU, menuDefinition);
107: resultMap.put(MENU_CONTEXT, siteRequestContext);
108: resultMap.put(MENU_LOCALE, locale);
109: resultMap.put(STATUS, status);
110: } catch (Exception e) {
111: log.error("Exception while getting page menus info", e);
112: success = false;
113: }
114:
115: return success;
116: }
117: }
|