<?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>Apache_OODT_Balance</name>
  <channel>pear.apache.org/oodt</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>2013-06-29</date>
  <version>
    <release>0.6.0</release>
    <api>0.6.0</api>
  </version>
  <stability>
    <release>stable</release>
    <api>stable</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>
