com.liferay.portal.kernel.portlet.bridges.mvc.MVCActionCommand.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.portal.kernel.portlet.bridges.mvc.MVCActionCommand.java

Source

/**
 * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
 *
 * This library is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by the Free
 * Software Foundation; either version 2.1 of the License, or (at your option)
 * any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details.
 */

package com.liferay.portal.kernel.portlet.bridges.mvc;

import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletException;

/**
 * Provides an interface to allow the portlet to process a particular action
 * request. This interface can only be used when the portlet is based on {@link
 * MVCPortlet}.
 *
 * <p>
 * The action command to be invoked is determined by two factors:
 * </p>
 *
 * <ul>
 * <li>
 * The portlet name that the action URL refers to.
 * </li>
 * <li>
 * The parameter value <code>ActionRequest.ACTION_NAME</code> of the action URL.
 * </li>
 * </ul>
 *
 * <p>
 * Implementations of this interface must be OSGi components that are registered
 * in the OSGi Registry with the following properties:
 * </p>
 *
 * <ul>
 * <li>
 * <code>javax.portlet.name</code>: The portlet name associated to this action
 * command.
 * </li>
 * <li>
 * <code>mvc.command.name</code>: the command name to match with the parameter
 * value <code>ActionRequest.ACTION_NAME</code>. This name cannot contain any
 * comma (<code>,</code>).
 * </li>
 * </ul>
 *
 * <p>
 * The method {@link MVCPortlet#processAction(ActionRequest, ActionResponse)}
 * searches the OSGi Registry for the action command that matches both the
 * portlet name with the property <code>javax.portlet.name</code> and the
 * parameter value <code>ActionRequest.ACTION_NAME</code> with the property
 * <code>mvc.command.name</code>.
 * </p>
 *
 * <p>
 * In general, only one action command is executed per portlet action URL. If
 * the parameter value <code>ActionRequest.ACTION_NAME</code> is, however, a
 * comma separated list of names, {@link MVCPortlet} finds the matching action
 * commands and invokes them sequentially in the order they're specified in the
 * list.
 * </p>
 *
 * <p>
 * When there are multiple action commands registered for the same portlet name
 * and with the same command name, only the action command with the highest
 * service ranking is invoked.
 * </p>
 *
 * <p>
 * {@link BaseMVCActionCommand} is an abstract class that implements this
 * interface and can be extended to simplify using action commands.
 * </p>
 *
 * @author Michael C. Han
 */
public interface MVCActionCommand extends MVCCommand {

    public static final MVCActionCommand EMPTY = new MVCActionCommand() {

        @Override
        public boolean processAction(ActionRequest actionRequest, ActionResponse actionResponse) {

            return false;
        }

    };

    /**
     * Invoked by {@link MVCPortlet} to allow the portlet to process an action
     * request.
     *
     * @param  actionRequest the action request
     * @param  actionResponse the action response
     * @return <code>true</code> if an error occurs in processing the action
     *         request; <code>false</code> otherwise
     */
    public boolean processAction(ActionRequest actionRequest, ActionResponse actionResponse)
            throws PortletException;

}