<?xml version="1.0" encoding="UTF-8"?>
<!-- 
/*
 * 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_Oodt_Balance
   @author Andrew F. Hart
   @version $Id$
-->
<package version="2.0" xmlns="http://pear.php.net/dtd/package-2.0"
  xmlns:tasks="http://pear.php.net/dtd/tasks-1.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0.xsd
         http://pear.php.net/dtd/package-2.0
         http://pear.php.net/dtd/package-2.0.xsd">
  <name>Org_Apache_Oodt_Balance</name>
  <uri>http://balance.jpl.nasa.gov</uri>
  <!-- <channel/>-->
  <summary>OODT Balance Webapp Base Package</summary>
  <description>
    This package provides the OODT Balance webapp-base package required
    by all Balance-based web applications.
  </description>
  <lead>
    <name>Andrew Hart</name>
    <user>ahart</user>
    <email>ahart@apache.org</email>
    <active>yes</active>
  </lead>
  <date>2011-04-23</date>
  <version>
    <release>0.3.0</release>
    <api>0.3.0</api>
  </version>
  <stability>
    <release>beta</release>
    <api>beta</api>
  </stability>
  <license uri="http://www.apache.org/licenses/LICENSE-2.0">ASL 2.0 License</license>
  <notes>
    This package provides the OODT Balance webapp-base package required
    by all Balance-based web applications.
  </notes>
  <contents>
    <dir name="/" baseinstalldir="Org/Apache/Oodt/Balance">
      <dir name="Boot">
        <file name="bootstrap.php" role="php"/>
      </dir>
      <dir name="Core">
		<file name="Application.class.php" role="php"/>
        <file name="ApplicationDataResponse.class.php" role="php"/>
		<file name="ApplicationRequest.class.php" role="php"/>
		<file name="ApplicationResponse.class.php" role="php"/>
      </dir>
      <dir name="Interfaces">
        <file name="IApplicationAuthenticationProvider.php" role="php"/>
        <file name="IApplicationAuthorizationProvider.php"  role="php"/>
        <file name="IApplicationDataProvider.php" role="php"/>
        <file name="IApplicationErrorProvider.php" role="php"/>
        <file name="IApplicationWidget.php" role="php"/>
      </dir>
      <dir name="Providers">
        <dir name="Authentication">
          <file name="LDAPAuthenticationProvider.class.php" role="php"/>
        </dir>
        <dir name="Authorization">
          <file name="LDAPAuthorizationProvider.class.php" role="php"/>
        </dir>
        <dir name="Data">
          <file name="MySqlDataProvider.class.php" role="php"/>
        </dir>    
        <dir name="Error">
          <file name="DefaultErrorProvider.class.php" role="php"/>
        </dir> 
      </dir>
    </dir><!-- / -->
  </contents>
  <dependencies>
    <required>
      <php>
        <min>5.1.6</min>
      </php>
      <pearinstaller>
        <min>1.6.1</min>
      </pearinstaller>
    </required>
  </dependencies>
  <phprelease />
  <changelog>
    <release>
      <version>
        <release>0.2.0</release>
        <api>0.2.0</api>
      </version>
      <stability>
        <release>stable</release>
        <api>stable</api>
      </stability>
      <date>2011-02-03</date>
      <license uri="http://oodt.jpl.nasa.gov">OODT License</license>
      <notes>
      Improvements to the core library to support more flexible use
      of modules and greater reusability.
      </notes>     
    </release>
    <release>
      <version>
        <release>0.1.0</release>
        <api>0.1.0</api>
      </version>
      <stability>
        <release>stable</release>
        <api>stable</api>
      </stability>
      <date>2010-11-01</date>
      <license uri="http://oodt.jpl.nasa.gov">OODT License</license>
      <notes>
      This release marks the first release of the OODT Balance webapp-base package.
      </notes>     
    </release>
  </changelog>
</package>
