<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright 2004 The Apache Software Foundation.
Licensed  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.
-->

<pluto-portal-driver
    xmlns="http://portals.apache.org/pluto/xsd/pluto-portal-driver-config.xsd"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://portals.apache.org/pluto/xsd/pluto-portal-driver-config.xsd
                        http://portals.apache.org/pluto/xsd/pluto-portal-driver-config.xsd"
    version="1.1">

  <portal-name>pluto-portal-driver</portal-name>
  <portal-version>1.1.0-SNAPSHOT</portal-version>
  <container-name>Pluto Portal Driver</container-name>

  <supports>
    <portlet-mode>view</portlet-mode>
    <portlet-mode>edit</portlet-mode>
    <portlet-mode>help</portlet-mode>
    <portlet-mode>config</portlet-mode>

    <window-state>normal</window-state>
    <window-state>maximized</window-state>
    <window-state>minimized</window-state>
  </supports>


    <!--

    NOTE: Once all of the services are re-implemented correctly, we will
    remove this registry from the config. This is because it is no longer
    necessary, as each portlet registers itself as it starts up!
    -->
    
  <portlet-app>
    <context-path>/pluto</context-path>
    <portlets>
      <portlet name="AboutPortlet"/>
      <portlet name="AdminPortlet"/>
      <portlet name="AdminDeploymentPortlet"/>
      <portlet name="PlutoPageAdmin"/>
    </portlets>
  </portlet-app>
  
  <portlet-app>
    <context-path>/testsuite</context-path>
    <portlets>
      <portlet name="TestPortlet1"/>
      <portlet name="TestPortlet2"/>
    </portlets>
  </portlet-app>

  <!-- Render configuration which defines the portal pages. -->
  <render-config default="Test Page">
    <page name="Test Page" uri="/WEB-INF/themes/pluto-default-theme.jsp">
      <portlet context="/testsuite" name="TestPortlet1"/>
      <portlet context="/testsuite" name="TestPortlet2"/>
    </page>
    <page name="Secondary Page" uri="/WEB-INF/themes/pluto-default-theme.jsp">
      <portlet context="/testsuite" name="TestPortlet1"/>
      <portlet context="/testsuite" name="TestPortlet2"/>
    </page>
    <page name="About Pluto" uri="/WEB-INF/themes/pluto-default-theme.jsp">
      <portlet context="/pluto" name="AboutPortlet"/>
    </page>
    <page name="Pluto Admin" uri="/WEB-INF/themes/pluto-default-theme.jsp">
      <portlet context="/pluto" name="AdminDeploymentPortlet"/>
      <portlet context="/pluto" name="AdminPortlet"/>
      <portlet context="/pluto" name="PlutoPageAdmin"/>
    </page>
  </render-config>
  
</pluto-portal-driver>


