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.


Remote Portlet Application Deployer

Overview
--------

Remote Portlet Application Deployer(RPAD) deploys a portlet from remote
portlet repositories into a Portal server, such as Jetspeed2, directly. RPAD
consists of 2 parts: RPAD API and RPAD Portlet. RPAD API defines the
programing interface to access to remote portlet repositories. RPAD Portlet
provides JSR 168 compliant portlet to deploy a target portlet from remote
repositories.

+---------------------------+
|   Portal Server(J2,...)   |
+---------------------------+
|       RPAD Portlet        |
+---------------------------+
|         RPAD API          |
+---------------------------+
             A Download
             V Access
+---------------------------+
| Remote Portlet Repository |
+---------------------------+
| Portlet | Portlet | ...   |
+---------------------------+


Design
------

        +-----------------------------------+
        |           RPAD Portlet            |
        | (RPADPortletFilter + JSF Portlet) |
        +-----------------------------------+
                       V Call RPAD API
+---------------------------------------------------+
|                RepositoryManager                  |
+---------------------------------------------------+
         V                      V                V
+------------------+ +----------------------+ +-----+
| SimpleRepository | | WebServiceRepository | | ... |
+------------------+ |        (TBD)         | +-----+
                     +----------------------+ 


Class Description
-----------------

 RPAD API:

  Class org.apache.jetspeed.portlets.rpad.RepositoryManager

   RepositoryManager manages Repository instances. Portal, such as Jetspeed2,
   calls methods of this class to access remote portlet repositories.

  Interface org.apache.jetspeed.portlets.rpad.Repository

   RPAD supports a variety of kinds of portlet repositories. A portlet
   repository needs to implement this interface. Repository manages
   PortletApplication instances for a remote portlet repository.
   Portal can access portlet information in a remote portlet repository via
   this class.

  Class org.apache.jetspeed.portlets.rpad.PortletApplication

   This class has properties of a portlet application, such as a portlet name,
   url to download war file.

  Class org.apache.jetspeed.portlets.rpad.simple.SimpleRepository

   SimpleRepository is a file-based repository. If a portlet provider puts
   a repository site descriptor for a remote portlet repository, using
   SimpleRepository, the provider delivers portlets to a Portal server.
   The syntax of the repository site descriptor is under discussion with
   PRP(https://prp.dev.java.net/). We will define it by the first week of 
   Feb.

 RPAD Portlet:

  The current implementation is JSF-based portlet.

  Class org.apache.jetspeed.portlets.rpad.portlet.RPADPortletFilter

   RPADPortletFilter initializes RepositoryManager instance. 

  Interface org.apache.jetspeed.portlets.rpad.portlet.deployer.PortletDeployer

   RPAD Portlet calls PortletDeployer#deploy(PortletApplication) to deploy
   the target portlet into your Portal. If you implements PortletDeployer
   class for your Portal, RPAD works on your Portal.

  Class
   org.apache.jetspeed.portlets.rpad.portlet.deployer.impl.JetspeedPortletDeployer

    This class is PortletDeployer implementation for Jetspeed2.

TODO
----

 - Manage a portlet version in J2
 - Store portlet information to DB, not memory
 - Move RPAD into under Apache Portals sub-project for other portals to use RPAD

