<!doctype html>
<!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ -->
<!--[if lt IE 7 ]> <html class="no-js ie6" lang="en"> <![endif]-->
<!--[if IE 7 ]>    <html class="no-js ie7" lang="en"> <![endif]-->
<!--[if IE 8 ]>    <html class="no-js ie8" lang="en"> <![endif]-->
<!--[if (gte IE 9)|!(IE)]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
  <meta charset="utf-8">

  <!-- Always force latest IE rendering engine (even in intranet) & Chrome Frame
       Remove this if you use the .htaccess -->
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

  <title>Apache Archiva Redback REST API</title>

  <!-- Mobile viewport optimized: j.mp/bplateviewport -->
  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <!-- CSS: implied media="all" -->
  <link rel="stylesheet" href="css/style.css?v=2">
  <link rel="stylesheet" href="css/prettify.css">

  <!-- All JavaScript at the bottom, except for Modernizr which enables HTML5 elements & feature detects -->
  <script src="js/libs/modernizr-1.7.min.js"></script>

</head>

<body class="home">

  <div class="container">
    <header>
      <div id="header" class="column first last span-20">
        <div id="site-name" class="column span-18 append-1 prepend-1 first last"><a href="index.html">Apache Archiva Redback REST API</a></div>
        <div id="primary" class="column span-18 append-1 prepend-1 first last">
          <ul class="navigation">
            <li id="nav-rest"><a href="rest.html">REST</a></li>
            <li id="nav-data"><a href="model.html">Data Model</a></li>
          </ul>
        </div>
        <div>
          <ul class="xbreadcrumbs" id="breadcrumbs">
            <li class="current">
              <a href="index.html" class="home">Home</a>
            </li>
          </ul>
        </div>
      </div>
    </header>
    <div id="main" class="column first last span-20">

      <h1>REST Resources</h1>
      <p>
        This API supports a <a href="http://en.wikipedia.org/wiki/Representational_State_Transfer">Representational State Transfer (REST)</a>
        model for accessing a set of resources through a fixed set of operations. The following resources are accessible through the RESTful model:
      </p>
      <ul>
        <li><a href="resource_LdapGroupMappingService.html">LdapGroupMappingService</a></li>
        <li><a href="resource_LoginService.html">LoginService</a></li>
        <li><a href="resource_PasswordService.html">PasswordService</a></li>
        <li><a href="resource_RoleManagementService.html">RoleManagementService</a></li>
        <li><a href="resource_UserService.html">UserService</a></li>
        <li><a href="resource_UtilServices.html">UtilServices</a></li>
      </ul>
      <p>
        There is also a <a href="application.wadl">WADL document</a> describing the REST API.
      </p>

    <h1>Data Model</h1>

    <p>
      All endpoints act on a common set of data. The data can be represented with difference media (i.e. "MIME") types, depending on the endpoint
      that consumes and/or produces the data. The data can described by <a href="http://www.w3.org/XML/Schema">XML Schema</a>, which definitively
      describes the XML representation of the data.
    </p>

    <p>
      This document will describe the data using terms based on <a href="http://www.w3.org/XML/Schema">XML Schema</a>.
      Data can be grouped by namespace, with a schema document describing the <i>elements</i> and <i>types</i> of the namespace.
      Generally speaking, <i>types</i> define the structure of the data and <i>elements</i> are <i>instances</i> of a type. For example,
      <i>elements</i> are usually produced by (or consumed by) a REST endpoint, and the structure of each element is described by
      its <i>type</i>.
    </p>


      <h2>Namespace "ns0"</h2>
      <table>
        <tr>
          <td align="right">Namespace URI:</td>
          <td>(default namespace)</td>
        </tr>
        <tr>
          <td align="right">XSD:</td>
          <td><a href="ns0.xsd">ns0.xsd</a></td>
        </tr>
      </table>

        <h3>Data Elements</h3>

        <ul>
          <li><a href="el_ns0_application.html">application</a></li>
          <li><a href="el_ns0_applicationRole.html">applicationRole</a></li>
          <li><a href="el_ns0_errorMessage.html">errorMessage</a></li>
          <li><a href="el_ns0_ldapGroupMapping.html">ldapGroupMapping</a></li>
          <li><a href="el_ns0_ldapGroupMappingUpdateRequest.html">ldapGroupMappingUpdateRequest</a></li>
          <li><a href="el_ns0_loginRequest.html">loginRequest</a></li>
          <li><a href="el_ns0_operation.html">operation</a></li>
          <li><a href="el_ns0_permission.html">permission</a></li>
          <li><a href="el_ns0_redbackRestError.html">redbackRestError</a></li>
          <li><a href="el_ns0_registrationKey.html">registrationKey</a></li>
          <li><a href="el_ns0_resource.html">resource</a></li>
          <li><a href="el_ns0_role.html">role</a></li>
          <li><a href="el_ns0_roleTemplate.html">roleTemplate</a></li>
          <li><a href="el_ns0_stringList.html">stringList</a></li>
          <li><a href="el_ns0_user.html">user</a></li>
          <li><a href="el_ns0_userRegistrationRequest.html">userRegistrationRequest</a></li>
        </ul>

        <h3>Data Types</h3>
        <ul>
          <li><a href="ns0_application.html">application</a></li>
          <li><a href="ns0_applicationRoles.html">applicationRoles</a></li>
          <li><a href="ns0_errorMessage.html">errorMessage</a></li>
          <li><a href="ns0_ldapGroupMapping.html">ldapGroupMapping</a></li>
          <li><a href="ns0_ldapGroupMappingUpdateRequest.html">ldapGroupMappingUpdateRequest</a></li>
          <li><a href="ns0_loginRequest.html">loginRequest</a></li>
          <li><a href="ns0_operation.html">operation</a></li>
          <li><a href="ns0_permission.html">permission</a></li>
          <li><a href="ns0_redbackRestError.html">redbackRestError</a></li>
          <li><a href="ns0_registrationKey.html">registrationKey</a></li>
          <li><a href="ns0_resource.html">resource</a></li>
          <li><a href="ns0_role.html">role</a></li>
          <li><a href="ns0_roleTemplate.html">roleTemplate</a></li>
          <li><a href="ns0_stringList.html">stringList</a></li>
          <li><a href="ns0_user.html">user</a></li>
          <li><a href="ns0_userRegistrationRequest.html">userRegistrationRequest</a></li>
        </ul>

      <div class="clear" />
    </div>
    <footer>
      <div id="footer">
        Generated by <a href="http://enunciate.codehaus.org">Enunciate</a>.
      </div>
    </footer>
  </div> <!--! end of #container -->

  <!-- JavaScript at the bottom for fast page loading -->

  <!-- Grab Google CDN's jQuery, with a protocol relative URL; fall back to local if necessary -->
  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.js"></script>
  <script>window.jQuery || document.write("<script src='js/libs/jquery-1.5.1.min.js'>\x3C/script>")</script>

  <!--manage the navigation menu-->
  <script src="js/libs/xbreadcrumbs.js"></script>
  <script>
    $(function() {
      $('#breadcrumbs').xBreadcrumbs();
    });
  </script>


  <!-- prettify code blocks. see http://code.google.com/p/google-code-prettify/ -->
  <script src="js/libs/prettify/prettify.js"></script>
  <script>
    $(function() {
      prettyPrint();
    });
  </script>

  <!--[if lt IE 7 ]>
    <script src="js/libs/dd_belatedpng.js"></script>
    <script>DD_belatedPNG.fix("img, .png_bg"); // Fix any <img> or .png_bg bg-images. Also, please read goo.gl/mZiyb </script>
  <![endif]-->

</body>
</html>