manifoldcf-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From shinich...@apache.org
Subject svn commit: r1137907 [6/8] - in /incubator/lcf/site/publish: ./ images/ skin/ skin/css/ skin/images/ skin/scripts/ skin/translations/
Date Tue, 21 Jun 2011 08:36:59 GMT
Added: incubator/lcf/site/publish/programmatic-operation.html
URL: http://svn.apache.org/viewvc/incubator/lcf/site/publish/programmatic-operation.html?rev=1137907&view=auto
==============================================================================
--- incubator/lcf/site/publish/programmatic-operation.html (added)
+++ incubator/lcf/site/publish/programmatic-operation.html Tue Jun 21 08:36:54 2011
@@ -0,0 +1,1033 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta content="Apache Forrest" name="Generator">
+<meta name="Forrest-version" content="0.9">
+<meta name="Forrest-skin-name" content="lucene">
+<title>Programmatic Operation</title>
+<link type="text/css" href="skin/basic.css" rel="stylesheet">
+<link media="screen" type="text/css" href="skin/screen.css" rel="stylesheet">
+<link media="print" type="text/css" href="skin/print.css" rel="stylesheet">
+<link type="text/css" href="skin/profile.css" rel="stylesheet">
+<script src="skin/getBlank.js" language="javascript" type="text/javascript"></script><script src="skin/getMenu.js" language="javascript" type="text/javascript"></script><script src="skin/fontsize.js" language="javascript" type="text/javascript"></script>
+<link rel="shortcut icon" href="images/favicon.ico">
+</head>
+<body onload="init()">
+<script type="text/javascript">ndeSetTextSize();</script>
+<div id="top">
+<!--+
+    |breadtrail
+    +-->
+<div class="breadtrail">
+<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://incubator.apache.org/">Incubator</a><script src="skin/breadcrumbs.js" language="JavaScript" type="text/javascript"></script>
+</div>
+<!--+
+    |header
+    +-->
+<div class="header">
+<!--+
+    |start group logo
+    +-->
+<div class="grouplogo">
+<a href="http://www.apache.org"><img class="logoImage" alt="Apache" src="images/apache_feather.gif" title="Apache Software Foundation"></a>
+</div>
+<!--+
+    |end group logo
+    +-->
+<!--+
+    |start Project Logo
+    +-->
+<div class="projectlogo">
+<a href="http://incubator.apache.org/lcf"><img class="logoImage" alt="Apache ManifoldCF" src="images/ManifoldCF-logo.PNG" title="ManifoldCF"></a>
+</div>
+<!--+
+    |end Project Logo
+    +-->
+<!--+
+    |start Search
+    +-->
+<div class="searchbox">
+<form action="http://www.lucidimagination.com/search/" method="get" class="roundtopsmall">
+<input onFocus="getBlank (this, 'Search the site with Solr');" size="25" name="q" id="query" type="text" value="Search the site with Solr">&nbsp; 
+                    <input name="Search" value="Search" type="submit">
+</form>
+<div style="position: relative; top: -5px; left: -10px">Powered by <a href="http://www.lucidimagination.com" style="color: #033268">Lucid Imagination</a>
+</div>
+</div>
+<!--+
+    |end search
+    +-->
+<!--+
+    |start Tabs
+    +-->
+<ul id="tabs">
+<li class="current">
+<a class="selected" href="index.html">Main</a>
+</li>
+<li>
+<a class="unselected" href="http://cwiki.apache.org/confluence/display/CONNECTORS/Index">Wiki</a>
+</li>
+</ul>
+<!--+
+    |end Tabs
+    +-->
+</div>
+</div>
+<div id="main">
+<div id="publishedStrip">
+<!--+
+    |start Subtabs
+    +-->
+<div id="level2tabs"></div>
+<!--+
+    |end Endtabs
+    +-->
+<script type="text/javascript"><!--
+document.write("Last Published: " + document.lastModified);
+//  --></script>
+</div>
+<!--+
+    |breadtrail
+    +-->
+<div class="breadtrail">
+
+             &nbsp;
+           </div>
+<!--+
+    |start Menu, mainarea
+    +-->
+<!--+
+    |start Menu
+    +-->
+<div id="menu">
+<div onclick="SwitchMenu('menu_1.1', 'skin/')" id="menu_1.1Title" class="menutitle">About</div>
+<div id="menu_1.1" class="menuitemgroup">
+<div class="menuitem">
+<a href="index.html">Welcome</a>
+</div>
+<div class="menuitem">
+<a href="who.html">Who We Are</a>
+</div>
+<div class="menuitem">
+<a href="http://www.manning.com/wright/">Get the Book</a>
+</div>
+<div class="menuitem">
+<a href="http://www.cafepress.com/lucene/">Buy Stuff</a>
+</div>
+<div class="menuitem">
+<a href="http://www.apache.org/foundation/sponsorship.html">Sponsor Apache</a>
+</div>
+<div class="menuitem">
+<a href="http://www.apache.org/foundation/thanks.html">Sponsors of Apache</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_selected_1.2', 'skin/')" id="menu_selected_1.2Title" class="menutitle" style="background-image: url('skin/images/chapter_open.gif');">Documentation</div>
+<div id="menu_selected_1.2" class="selectedmenuitemgroup" style="display: block;">
+<div class="menuitem">
+<a href="concepts.html">Concepts</a>
+</div>
+<div class="menuitem">
+<a href="included-connectors.html">Compatibility Matrix</a>
+</div>
+<div class="menuitem">
+<a href="faq.html">Frequently Asked Questions</a>
+</div>
+<div class="menupage">
+<div class="menupagetitle">API Documentation</div>
+</div>
+<div class="menuitem">
+<a href="javadoc.html">Javadoc</a>
+</div>
+<div class="menuitem">
+<a href="how-to-build-and-deploy.html">Building and Deploying</a>
+</div>
+<div class="menuitem">
+<a href="end-user-documentation.html">End-user Documentation (HTML)</a>
+</div>
+<div class="menuitem">
+<a href="end-user-documentation.pdf">End-user Documentation (PDF)</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.3', 'skin/')" id="menu_1.3Title" class="menutitle">Resources</div>
+<div id="menu_1.3" class="menuitemgroup">
+<div class="menuitem">
+<a href="download.html">Download</a>
+</div>
+<div class="menuitem">
+<a href="mail.html">Mailing Lists</a>
+</div>
+<div class="menuitem">
+<a href="developer-resources.html">Developer/Integrator Resources</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.4', 'skin/')" id="menu_1.4Title" class="menutitle">Related-Projects</div>
+<div id="menu_1.4" class="menuitemgroup">
+<div class="menuitem">
+<a href="http://incubator.apache.org/droids/">Droids</a>
+</div>
+<div class="menuitem">
+<a href="http://lucene.apache.org/java/">Java</a>
+</div>
+<div class="menuitem">
+<a href="http://incubator.apache.org/lucene.net/">Lucene.Net</a>
+</div>
+<div class="menuitem">
+<a href="http://lucene.apache.org/lucy/">Lucy</a>
+</div>
+<div class="menuitem">
+<a href="http://lucene.apache.org/mahout/">Mahout</a>
+</div>
+<div class="menuitem">
+<a href="http://lucene.apache.org/nutch/">Nutch</a>
+</div>
+<div class="menuitem">
+<a href="http://lucene.apache.org/openrelevance/">Open Relevance</a>
+</div>
+<div class="menuitem">
+<a href="http://lucene.apache.org/pylucene/">PyLucene</a>
+</div>
+<div class="menuitem">
+<a href="http://lucene.apache.org/solr/">Solr</a>
+</div>
+<div class="menuitem">
+<a href="http://lucene.apache.org/tika/">Tika</a>
+</div>
+</div>
+<div id="credit"></div>
+<div id="roundbottom">
+<img style="display: none" class="corner" height="15" width="15" alt="" src="skin/images/rc-b-l-15-1body-2menu-3menu.png"></div>
+<!--+
+  |alternative credits
+  +-->
+<div id="credit2"></div>
+</div>
+<!--+
+    |end Menu
+    +-->
+<!--+
+    |start content
+    +-->
+<div id="content">
+<h1>Programmatic Operation</h1>
+<div id="minitoc-area">
+<ul class="minitoc">
+<li>
+<a href="#Programmatic+Operation">Programmatic Operation</a>
+<ul class="minitoc">
+<li>
+<a href="#Control+by+Servlet+API">Control by Servlet API</a>
+<ul class="minitoc">
+<li>
+<a href="#Output+connector+objects">Output connector objects</a>
+</li>
+<li>
+<a href="#Authority+connector+objects">Authority connector objects</a>
+</li>
+<li>
+<a href="#Repository+connector+objects">Repository connector objects</a>
+</li>
+<li>
+<a href="#Output+connection+objects">Output connection objects</a>
+</li>
+<li>
+<a href="#Authority+connection+objects">Authority connection objects</a>
+</li>
+<li>
+<a href="#Repository+connection+objects">Repository connection objects</a>
+</li>
+<li>
+<a href="#Job+objects">Job objects</a>
+</li>
+<li>
+<a href="#Job+status+objects">Job status objects</a>
+</li>
+<li>
+<a href="#Connection-type-specific+objects">Connection-type-specific objects</a>
+</li>
+<li>
+<a href="#File+system+connector">File system connector</a>
+</li>
+</ul>
+</li>
+<li>
+<a href="#Control+via+Commands">Control via Commands</a>
+</li>
+<li>
+<a href="#Control+by+direct+code">Control by direct code</a>
+</li>
+<li>
+<a href="#Caveats">Caveats</a>
+</li>
+</ul>
+</li>
+</ul>
+</div> 
+    
+<a name="N1000E"></a><a name="Programmatic+Operation"></a>
+<h2 class="h3">Programmatic Operation</h2>
+<div class="section">
+<p></p>
+<p>A certain subset of ManifoldCF users want to think of ManifoldCF as an engine that they can poke from whatever other system they are developing.  While ManifoldCF is not precisely a document indexing engine per se, it can certainly be controlled programmatically.  Right now, there are three principle ways of achieving this control.</p>
+<p></p>
+<a name="N1001B"></a><a name="Control+by+Servlet+API"></a>
+<h3 class="h4">Control by Servlet API</h3>
+<p></p>
+<p>ManifoldCF provides a servlet-based JSON API that gives you the complete ability to define connections and jobs, and control job execution.  You can read about JSON <a href="http://www.json.org">here</a>.  The API is designed to be RESTful in character.  Thus, it makes full use of the HTTP verbs GET, PUT, POST, and DELETE, and represents objects as URLs.  The basic format of the JSON servlet resource URLs is as follows:</p>
+<p></p>
+<p>http[s]://<em>&lt;server_and_port&gt;</em>/mcf-api-service/json/<em>&lt;resource&gt;</em>
+</p>
+<p></p>
+<p>The servlet ignores request data, except when the PUT or POST verb is used.  In that case, the request data is presumed to be a JSON object.  The servlet responds either with an error response code (either 400 or 500) with an appropriate explanatory message, or with a 200 (OK), 201 (CREATED), or 404 (NOT FOUND) response code along with a response JSON object.</p>
+<p></p>
+<p>The actual available resources and commands are as follows:</p>
+<p></p>
+<p></p>
+<p></p>
+<table class="ForrestTable" cellspacing="1" cellpadding="4">
+          
+<tr>
+<th colspan="1" rowspan="1">Resource</th><th colspan="1" rowspan="1">Verb</th><th colspan="1" rowspan="1">What it does</th><th colspan="1" rowspan="1">Input format</th><th colspan="1" rowspan="1">Output format</th>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">outputconnectors</td><td colspan="1" rowspan="1">GET</td><td colspan="1" rowspan="1">List all registered output connectors</td><td colspan="1" rowspan="1">N/A</td><td colspan="1" rowspan="1">{"outputconnector":[<em>&lt;list_of_output_connector_objects&gt;</em>]} <strong>OR</strong> {"error":<em>&lt;error_text&gt;</em>}</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">authorityconnectors</td><td colspan="1" rowspan="1">GET</td><td colspan="1" rowspan="1">List all registered authority connectors</td><td colspan="1" rowspan="1">N/A</td><td colspan="1" rowspan="1">{"authorityconnector":[<em>&lt;list_of_authority_connector_objects&gt;</em>]} <strong>OR</strong> {"error":<em>&lt;error_text&gt;</em>}</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">repositoryconnectors</td><td colspan="1" rowspan="1">GET</td><td colspan="1" rowspan="1">List all registered repository connectors</td><td colspan="1" rowspan="1">N/A</td><td colspan="1" rowspan="1">{"repositoryconnector":[<em>&lt;list_of_repository_connector_objects&gt;</em>]} <strong>OR</strong> {"error":<em>&lt;error_text&gt;</em>}</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">outputconnections</td><td colspan="1" rowspan="1">GET</td><td colspan="1" rowspan="1">List all output connections</td><td colspan="1" rowspan="1">N/A</td><td colspan="1" rowspan="1">{"outputconnection":[<em>&lt;list_of_output_connection_objects&gt;</em>]} <strong>OR</strong> {"error":<em>&lt;error_text&gt;</em>}</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">outputconnections/<em>&lt;encoded_connection_name&gt;</em></td><td colspan="1" rowspan="1">GET</td><td colspan="1" rowspan="1">Get a specific output connection</td><td colspan="1" rowspan="1">N/A</td><td colspan="1" rowspan="1">{"outputconnection":<em>&lt;output_connection_object&gt;</em>} <strong>OR</strong> { } <strong>OR</strong> {"error":<em>&lt;error_text&gt;</em>}</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">outputconnections/<em>&lt;encoded_connection_name&gt;</em></td><td colspan="1" rowspan="1">PUT</td><td colspan="1" rowspan="1">Save or create an output connection</td><td colspan="1" rowspan="1">{"outputconnection":<em>&lt;output_connection_object&gt;</em>}</td><td colspan="1" rowspan="1">{"connection_name":<em>&lt;connection_name&gt;</em>} <strong>OR</strong> {"error":<em>&lt;error_text&gt;</em>}</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">outputconnections/<em>&lt;encoded_connection_name&gt;</em></td><td colspan="1" rowspan="1">DELETE</td><td colspan="1" rowspan="1">Delete an output connection</td><td colspan="1" rowspan="1">N/A</td><td colspan="1" rowspan="1">{ } <strong>OR</strong> {"error":<em>&lt;error_text&gt;</em>}</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">status/outputconnections/<em>&lt;encoded_connection_name&gt;</em></td><td colspan="1" rowspan="1">GET</td><td colspan="1" rowspan="1">Check the status of an output connection</td><td colspan="1" rowspan="1">N/A</td><td colspan="1" rowspan="1">{"check_result":<em>&lt;message&gt;</em>} <strong>OR</strong> {"error":<em>&lt;error_text&gt;</em>}</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">info/outputconnections/<em>&lt;encoded_connection_name&gt;</em>/<em>&lt;connector_specific_resource&gt;</em></td><td colspan="1" rowspan="1">GET</td><td colspan="1" rowspan="1">Retrieve arbitrary connector-specific resource</td><td colspan="1" rowspan="1">N/A</td><td colspan="1" rowspan="1"><em>&lt;response_data&gt;</em> <strong>OR</strong> {"error":<em>&lt;error_text&gt;</em>} <strong>OR</strong> {"service_interruption":<em>&lt;error_text&gt;</em>}</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">reset/outputconnections/<em>&lt;encoded_connection_name&gt;</em></td><td colspan="1" rowspan="1">PUT</td><td colspan="1" rowspan="1">Forget previous indexing state</td><td colspan="1" rowspan="1">N/A</td><td colspan="1" rowspan="1">{ } <strong>OR</strong> {"error":<em>&lt;error_text&gt;</em>}</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">authorityconnections</td><td colspan="1" rowspan="1">GET</td><td colspan="1" rowspan="1">List all authority connections</td><td colspan="1" rowspan="1">N/A</td><td colspan="1" rowspan="1">{"authorityconnection":[<em>&lt;list_of_authority_connection_objects&gt;</em>]} <strong>OR</strong> {"error":<em>&lt;error_text&gt;</em>}</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">authorityconnections/<em>&lt;encoded_connection_name&gt;</em></td><td colspan="1" rowspan="1">GET</td><td colspan="1" rowspan="1">Get a specific authority connection</td><td colspan="1" rowspan="1">N/A</td><td colspan="1" rowspan="1">{"authorityconnection":<em>&lt;authority_connection_object&gt;</em>} <strong>OR</strong> { } <strong>OR</strong> {"error":<em>&lt;error_text&gt;</em>}</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">authorityconnections/<em>&lt;encoded_connection_name&gt;</em></td><td colspan="1" rowspan="1">PUT</td><td colspan="1" rowspan="1">Save or create an authority connection</td><td colspan="1" rowspan="1">{"authorityconnection":<em>&lt;authority_connection_object&gt;</em>}</td><td colspan="1" rowspan="1">{"connection_name":<em>&lt;connection_name&gt;</em>} <strong>OR</strong> {"error":<em>&lt;error_text&gt;</em>}</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">authorityconnections/<em>&lt;encoded_connection_name&gt;</em></td><td colspan="1" rowspan="1">DELETE</td><td colspan="1" rowspan="1">Delete an authority connection</td><td colspan="1" rowspan="1">N/A</td><td colspan="1" rowspan="1">{ } <strong>OR</strong> {"error":<em>&lt;error_text&gt;</em>}</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">status/authorityconnections/<em>&lt;encoded_connection_name&gt;</em></td><td colspan="1" rowspan="1">GET</td><td colspan="1" rowspan="1">Check the status of an authority connection</td><td colspan="1" rowspan="1">N/A</td><td colspan="1" rowspan="1">{"check_result":<em>&lt;message&gt;</em>} <strong>OR</strong> {"error":<em>&lt;error_text&gt;</em>}</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">repositoryconnections</td><td colspan="1" rowspan="1">GET</td><td colspan="1" rowspan="1">List all repository connections</td><td colspan="1" rowspan="1">N/A</td><td colspan="1" rowspan="1">{"repositoryconnection":[<em>&lt;list_of_repository_connection_objects&gt;</em>]} <strong>OR</strong> {"error":<em>&lt;error_text&gt;</em>}</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">repositoryconnections/<em>&lt;encoded_connection_name&gt;</em></td><td colspan="1" rowspan="1">GET</td><td colspan="1" rowspan="1">Get a specific repository connection</td><td colspan="1" rowspan="1">N/A</td><td colspan="1" rowspan="1">{"repositoryconnection":<em>&lt;repository_connection_object&gt;</em>} <strong>OR</strong> { } <strong>OR</strong> {"error":<em>&lt;error_text&gt;</em>}</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">repositoryconnections/<em>&lt;encoded_connection_name&gt;</em></td><td colspan="1" rowspan="1">PUT</td><td colspan="1" rowspan="1">Save or create a repository connection</td><td colspan="1" rowspan="1">{"repositoryconnection":<em>&lt;repository_connection_object&gt;</em>}</td><td colspan="1" rowspan="1">{"connection_name":<em>&lt;connection_name&gt;</em>} <strong>OR</strong> {"error":<em>&lt;error_text&gt;</em>}</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">repositoryconnections/<em>&lt;encoded_connection_name&gt;</em></td><td colspan="1" rowspan="1">DELETE</td><td colspan="1" rowspan="1">Delete a repository connection</td><td colspan="1" rowspan="1">N/A</td><td colspan="1" rowspan="1">{ } <strong>OR</strong> {"error":<em>&lt;error_text&gt;</em>}</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">status/repositoryconnections/<em>&lt;encoded_connection_name&gt;</em></td><td colspan="1" rowspan="1">GET</td><td colspan="1" rowspan="1">Check the status of a repository connection</td><td colspan="1" rowspan="1">N/A</td><td colspan="1" rowspan="1">{"check_result":<em>&lt;message&gt;</em>} <strong>OR</strong> {"error":<em>&lt;error_text&gt;</em>}</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">info/repositoryconnections/<em>&lt;encoded_connection_name&gt;</em>/<em>&lt;connector_specific_resource&gt;</em></td><td colspan="1" rowspan="1">GET</td><td colspan="1" rowspan="1">Retrieve arbitrary connector-specific resource</td><td colspan="1" rowspan="1">N/A</td><td colspan="1" rowspan="1"><em>&lt;response_data&gt;</em> <strong>OR</strong> {"error":<em>&lt;error_text&gt;</em>} <strong>OR</strong> {"service_interruption":<em>&lt;error_text&gt;</em>}</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">jobs</td><td colspan="1" rowspan="1">GET</td><td colspan="1" rowspan="1">List all job definitions</td><td colspan="1" rowspan="1">N/A</td><td colspan="1" rowspan="1">{"job":[<em>&lt;list_of_job_objects&gt;</em>]} <strong>OR</strong> {"error":<em>&lt;error_text&gt;</em>}</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">jobs</td><td colspan="1" rowspan="1">POST</td><td colspan="1" rowspan="1">Create a job</td><td colspan="1" rowspan="1">{"job":<em>&lt;job_object&gt;</em>}</td><td colspan="1" rowspan="1">{"job_id":<em>&lt;job_identifier&gt;</em>} <strong>OR</strong> {"error":<em>&lt;error_text&gt;</em>}</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">jobs/<em>&lt;job_id&gt;</em></td><td colspan="1" rowspan="1">GET</td><td colspan="1" rowspan="1">Get a specific job definition</td><td colspan="1" rowspan="1">N/A</td><td colspan="1" rowspan="1">{"job":<em>&lt;job_object_&gt;</em>} <strong>OR</strong> { } <strong>OR</strong> {"error":<em>&lt;error_text&gt;</em>}</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">jobs/<em>&lt;job_id&gt;</em></td><td colspan="1" rowspan="1">PUT</td><td colspan="1" rowspan="1">Save a job definition</td><td colspan="1" rowspan="1">{"job":<em>&lt;job_object&gt;</em>}</td><td colspan="1" rowspan="1">{"job_id":<em>&lt;job_identifier&gt;</em>} <strong>OR</strong> {"error":<em>&lt;error_text&gt;</em>}</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">jobs/<em>&lt;job_id&gt;</em></td><td colspan="1" rowspan="1">DELETE</td><td colspan="1" rowspan="1">Delete a job definition</td><td colspan="1" rowspan="1">N/A</td><td colspan="1" rowspan="1">{ } <strong>OR</strong> {"error":<em>&lt;error_text&gt;</em>}</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">jobstatuses</td><td colspan="1" rowspan="1">GET</td><td colspan="1" rowspan="1">List all jobs and their status</td><td colspan="1" rowspan="1">N/A</td><td colspan="1" rowspan="1">{"job":[<em>&lt;list_of_job_status_objects&gt;</em>]} <strong>OR</strong> {"error":<em>&lt;error_text&gt;</em>}</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">jobstatuses/<em>&lt;job_id&gt;</em></td><td colspan="1" rowspan="1">GET</td><td colspan="1" rowspan="1">Get a specific job's status</td><td colspan="1" rowspan="1">N/A</td><td colspan="1" rowspan="1">{"jobstatus":<em>&lt;job_status_object&gt;</em>} <strong>OR</strong> { } <strong>OR</strong> {"error":<em>&lt;error_text&gt;</em>} </td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">start/<em>&lt;job_id&gt;</em></td><td colspan="1" rowspan="1">PUT</td><td colspan="1" rowspan="1">Start a specified job manually</td><td colspan="1" rowspan="1">N/A</td><td colspan="1" rowspan="1">{ } <strong>OR</strong> {"error":<em>&lt;error_text&gt;</em>}</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">abort/<em>&lt;job_id&gt;</em></td><td colspan="1" rowspan="1">PUT</td><td colspan="1" rowspan="1">Abort a specified job</td><td colspan="1" rowspan="1">N/A</td><td colspan="1" rowspan="1">{ } <strong>OR</strong> {"error":<em>&lt;error_text&gt;</em>}</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">restart/<em>&lt;job_id&gt;</em></td><td colspan="1" rowspan="1">PUT</td><td colspan="1" rowspan="1">Stop and start a specified job</td><td colspan="1" rowspan="1">N/A</td><td colspan="1" rowspan="1">{ } <strong>OR</strong> {"error":<em>&lt;error_text&gt;</em>}</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">pause/<em>&lt;job_id&gt;</em></td><td colspan="1" rowspan="1">PUT</td><td colspan="1" rowspan="1">Pause a specified job</td><td colspan="1" rowspan="1">N/A</td><td colspan="1" rowspan="1">{ } <strong>OR</strong> {"error":<em>&lt;error_text&gt;</em>}</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">resume/<em>&lt;job_id&gt;</em></td><td colspan="1" rowspan="1">PUT</td><td colspan="1" rowspan="1">Resume a specified job</td><td colspan="1" rowspan="1">N/A</td><td colspan="1" rowspan="1">{ } <strong>OR</strong> {"error":<em>&lt;error_text&gt;</em>}</td>
+</tr>
+        
+</table>
+<p></p>
+<p>Other resources having to do with reports have been planned, but not yet been implemented.</p>
+<p></p>
+<a name="N104A3"></a><a name="Output+connector+objects"></a>
+<h4>Output connector objects</h4>
+<p></p>
+<p>The JSON fields an output connector object has are as follows:</p>
+<p></p>
+<table class="ForrestTable" cellspacing="1" cellpadding="4">
+            
+<tr>
+<th colspan="1" rowspan="1">Field</th><th colspan="1" rowspan="1">Meaning</th>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"description"</td><td colspan="1" rowspan="1">The optional description of the connector</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"class_name"</td><td colspan="1" rowspan="1">The class name of the class implementing the connector</td>
+</tr>
+          
+</table>
+<p></p>
+<a name="N104D4"></a><a name="Authority+connector+objects"></a>
+<h4>Authority connector objects</h4>
+<p></p>
+<p>The JSON fields an authority connector object has are as follows:</p>
+<p></p>
+<table class="ForrestTable" cellspacing="1" cellpadding="4">
+            
+<tr>
+<th colspan="1" rowspan="1">Field</th><th colspan="1" rowspan="1">Meaning</th>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"description"</td><td colspan="1" rowspan="1">The optional description of the connector</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"class_name"</td><td colspan="1" rowspan="1">The class name of the class implementing the connector</td>
+</tr>
+          
+</table>
+<p></p>
+<a name="N10505"></a><a name="Repository+connector+objects"></a>
+<h4>Repository connector objects</h4>
+<p></p>
+<p>The JSON fields a repository connector object has are as follows:</p>
+<p></p>
+<table class="ForrestTable" cellspacing="1" cellpadding="4">
+            
+<tr>
+<th colspan="1" rowspan="1">Field</th><th colspan="1" rowspan="1">Meaning</th>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"description"</td><td colspan="1" rowspan="1">The optional description of the connector</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"class_name"</td><td colspan="1" rowspan="1">The class name of the class implementing the connector</td>
+</tr>
+          
+</table>
+<p></p>
+<a name="N10536"></a><a name="Output+connection+objects"></a>
+<h4>Output connection objects</h4>
+<p></p>
+<p>Output connection names, when they are part of a URL, should be encoded as follows:</p>
+<p></p>
+<ol>
+            
+<li>All instances of '.' should be replaced by '..'.</li>
+            
+<li>All instances of '/' should be replaced by '.+'.</li>
+            
+<li>The URL should be encoded using standard URL utf-8-based %-encoding.</li>
+          
+</ol>
+<p></p>
+<p>The JSON fields an output connection object has are as follows:</p>
+<p></p>
+<table class="ForrestTable" cellspacing="1" cellpadding="4">
+            
+<tr>
+<th colspan="1" rowspan="1">Field</th><th colspan="1" rowspan="1">Meaning</th>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"name"</td><td colspan="1" rowspan="1">The unique name of the connection</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"description"</td><td colspan="1" rowspan="1">The description of the connection</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"class_name"</td><td colspan="1" rowspan="1">The java class name of the class implementing the connection</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"max_connections"</td><td colspan="1" rowspan="1">The total number of outstanding connections allowed to exist at a time</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"configuration"</td><td colspan="1" rowspan="1">The configuration object for the connection, which is specific to the connection class</td>
+</tr>
+          
+</table>
+<p></p>
+<a name="N10598"></a><a name="Authority+connection+objects"></a>
+<h4>Authority connection objects</h4>
+<p></p>
+<p>Authority connection names, when they are part of a URL, should be encoded as follows:</p>
+<p></p>
+<ol>
+            
+<li>All instances of '.' should be replaced by '..'.</li>
+            
+<li>All instances of '/' should be replaced by '.+'.</li>
+            
+<li>The URL should be encoded using standard URL utf-8-based %-encoding.</li>
+          
+</ol>
+<p></p>
+<p>The JSON fields for an authority connection object are as follows:</p>
+<p></p>
+<table class="ForrestTable" cellspacing="1" cellpadding="4">
+            
+<tr>
+<th colspan="1" rowspan="1">Field</th><th colspan="1" rowspan="1">Meaning</th>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"name"</td><td colspan="1" rowspan="1">The unique name of the connection</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"description"</td><td colspan="1" rowspan="1">The description of the connection</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"class_name"</td><td colspan="1" rowspan="1">The java class name of the class implementing the connection</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"max_connections"</td><td colspan="1" rowspan="1">The total number of outstanding connections allowed to exist at a time</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"configuration"</td><td colspan="1" rowspan="1">The configuration object for the connection, which is specific to the connection class</td>
+</tr>
+          
+</table>
+<p></p>
+<a name="N105FA"></a><a name="Repository+connection+objects"></a>
+<h4>Repository connection objects</h4>
+<p></p>
+<p>Repository connection names, when they are part of a URL, should be encoded as follows:</p>
+<p></p>
+<ol>
+            
+<li>All instances of '.' should be replaced by '..'.</li>
+            
+<li>All instances of '/' should be replaced by '.+'.</li>
+            
+<li>The URL should be encoded using standard URL utf-8-based %-encoding.</li>
+          
+</ol>
+<p></p>
+<p>The JSON fields for a repository connection object are as follows:</p>
+<p></p>
+<table class="ForrestTable" cellspacing="1" cellpadding="4">
+            
+<tr>
+<th colspan="1" rowspan="1">Field</th><th colspan="1" rowspan="1">Meaning</th>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"name"</td><td colspan="1" rowspan="1">The unique name of the connection</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"description"</td><td colspan="1" rowspan="1">The description of the connection</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"class_name"</td><td colspan="1" rowspan="1">The java class name of the class implementing the connection</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"max_connections"</td><td colspan="1" rowspan="1">The total number of outstanding connections allowed to exist at a time</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"configuration"</td><td colspan="1" rowspan="1">The configuration object for the connection, which is specific to the connection class</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"acl_authority"</td><td colspan="1" rowspan="1">The (optional) name of the authority that will enforce security for this connection</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"throttle"</td><td colspan="1" rowspan="1">An array of throttle objects, which control how quickly documents can be requested from this connection</td>
+</tr>
+          
+</table>
+<p></p>
+<p>Each throttle object has the following fields:</p>
+<p></p>
+<table class="ForrestTable" cellspacing="1" cellpadding="4">
+            
+<tr>
+<th colspan="1" rowspan="1">Field</th><th colspan="1" rowspan="1">Meaning</th>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"match"</td><td colspan="1" rowspan="1">The regular expression which is used to match a document's bins to determine if the throttle should be applied</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"match_description"</td><td colspan="1" rowspan="1">Optional text describing the meaning of the throttle</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"rate"</td><td colspan="1" rowspan="1">The maximum fetch rate to use if the throttle applies, in fetches per minute</td>
+</tr>
+          
+</table>
+<p></p>
+<a name="N106A2"></a><a name="Job+objects"></a>
+<h4>Job objects</h4>
+<p></p>
+<p>The JSON fields for a job are is as follows:</p>
+<p></p>
+<table class="ForrestTable" cellspacing="1" cellpadding="4">
+            
+<tr>
+<th colspan="1" rowspan="1">Field</th><th colspan="1" rowspan="1">Meaning</th>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"id"</td><td colspan="1" rowspan="1">The job's identifier, if present.  If not present, ManifoldCF will create one (and will also create the job when saved).</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"description"</td><td colspan="1" rowspan="1">Text describing the job</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"repository_connection"</td><td colspan="1" rowspan="1">The name of the repository connection to use with the job</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"output_connection"</td><td colspan="1" rowspan="1">The name of the output connection to use with the job</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"document_specification"</td><td colspan="1" rowspan="1">The document specification object for the job, whose format is repository-connection specific</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"output_specification"</td><td colspan="1" rowspan="1">The output specification object for the job, whose format is output-connection specific</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"start_mode"</td><td colspan="1" rowspan="1">The start mode for the job, which can be one of "schedule window start", "schedule window anytime", or "manual"</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"run_mode"</td><td colspan="1" rowspan="1">The run mode for the job, which can be either "continuous" or "scan once"</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"hopcount_mode"</td><td colspan="1" rowspan="1">The hopcount mode for the job, which can be either "accurate", "no delete", "never delete"</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"priority"</td><td colspan="1" rowspan="1">The job's priority, typically "5"</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"recrawl_interval"</td><td colspan="1" rowspan="1">The default time between recrawl of documents (if the job is "continuous"), in milliseconds, or "infinite" for infinity</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"expiration_interval"</td><td colspan="1" rowspan="1">The time until a document expires (if the job is "continuous"), in milliseconds, or "infinite" for infinity</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"reseed_interval"</td><td colspan="1" rowspan="1">The time between reseeding operations (if the job is "continuous"), in milliseconds, or "infinite" for infinity</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"hopcount"</td><td colspan="1" rowspan="1">An array of hopcount objects, describing the link types and associated maximum hops permitted for the job</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"schedule"</td><td colspan="1" rowspan="1">An array of schedule objects, describing when the job should be started and run</td>
+</tr>
+          
+</table>
+<p></p>
+<p>Each hopcount object has the following fields:</p>
+<p></p>
+<table class="ForrestTable" cellspacing="1" cellpadding="4">
+            
+<tr>
+<th colspan="1" rowspan="1">Field</th><th colspan="1" rowspan="1">Meaning</th>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"link_type"</td><td colspan="1" rowspan="1">The connection-type-dependent type of a link for which a hop count restriction is specified</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"count"</td><td colspan="1" rowspan="1">The maximum number of hops allowed for the associated link type, starting at a seed</td>
+</tr>
+          
+</table>
+<p></p>
+<p>Each schedule object has the following fields:</p>
+<p></p>
+<table class="ForrestTable" cellspacing="1" cellpadding="4">
+            
+<tr>
+<th colspan="1" rowspan="1">Field</th><th colspan="1" rowspan="1">Meaning</th>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"timezone"</td><td colspan="1" rowspan="1">The optional time zone for the schedule object; if not present the default server time zone is used</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"duration"</td><td colspan="1" rowspan="1">The optional length of the described time window, in milliseconds; if not present, duration is considered infinite</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"dayofweek"</td><td colspan="1" rowspan="1">The optional day-of-the-week enumeration object</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"monthofyear"</td><td colspan="1" rowspan="1">The optional month-of-the-year enumeration object</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"dayofmonth"</td><td colspan="1" rowspan="1">The optional day-of-the-month enumeration object</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"year"</td><td colspan="1" rowspan="1">The optional year enumeration object</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"hourofday"</td><td colspan="1" rowspan="1">The optional hour-of-the-day enumeration object</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"minutesofhour"</td><td colspan="1" rowspan="1">The optional minutes-of-the-hour enumeration object</td>
+</tr>
+          
+</table>
+<p></p>
+<p>Each enumeration object describes an array of integers using the form:</p>
+<p></p>
+<p>{"value":[<em>&lt;integer_list&gt;</em>]}</p>
+<p></p>
+<p>Each integer is a zero-based index describing which entity is being specified.  For example, for "dayofweek", 0 corresponds to Sunday, etc., and thus "dayofweek":{"value":[0,6]} would describe Saturdays and Sundays.</p>
+<p></p>
+<a name="N107F3"></a><a name="Job+status+objects"></a>
+<h4>Job status objects</h4>
+<p></p>
+<p>The JSON fields of a job status object are as follows:</p>
+<p></p>
+<table class="ForrestTable" cellspacing="1" cellpadding="4">
+            
+<tr>
+<th colspan="1" rowspan="1">Field</th><th colspan="1" rowspan="1">Meaning</th>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"job_id"</td><td colspan="1" rowspan="1">The job identifier</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"status"</td><td colspan="1" rowspan="1">The job status, having the possible values: "not yet run", "running", "paused", "done", "waiting", "starting up", "cleaning up", "error", "aborting", "restarting", "running no connector", and "terminating"</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"error_text"</td><td colspan="1" rowspan="1">The error text, if the status is "error"</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"start_time"</td><td colspan="1" rowspan="1">The job start time, in milliseconds since Jan 1, 1970</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"end_time"</td><td colspan="1" rowspan="1">The job end time, in milliseconds since Jan 1, 1970</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"documents_in_queue"</td><td colspan="1" rowspan="1">The total number of documents in the queue for the job</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"documents_outstanding"</td><td colspan="1" rowspan="1">The number of documents for the job that are currently considered 'active'</td>
+</tr>
+            
+<tr>
+<td colspan="1" rowspan="1">"documents_processed"</td><td colspan="1" rowspan="1">The number of documents that in the queue for the job that have been processed at least once</td>
+</tr>
+          
+</table>
+<p></p>
+<a name="N10860"></a><a name="Connection-type-specific+objects"></a>
+<h4>Connection-type-specific objects</h4>
+<p></p>
+<p>As you may note when trying to use the above JSON API methods, you cannot get very far in defining connections or jobs without knowing the JSON format of a connection's configuration information, or a job's connection-specific document specification and output specification information.  The form of these objects is controlled by the Java implementation of the underlying connector, and is translated directly into JSON, so if you write your own connector you should be able to figure out what it will be in the API.  For connectors already part of ManifoldCF, it remains an ongoing task to document these connector-specific objects.  This task is not yet underway.</p>
+<p></p>
+<p>Luckily, it is pretty easy to learn a lot about the objects in question by simply creating connections and jobs in the ManifoldCF crawler UI, and then inspecting the resulting JSON objects through the API.  In this way, it should be possible to do a decent job of coding most API-based integrations.  The one place where difficulties will certainly occur will be if you try to completely replace the ManifoldCF crawler UI with one of your own.  This is because most connectors have methods that communicate with their respective back-ends in order to allow the user to select appropriate values.  For example, the path drill-down that is presented by the LiveLink connector requires that the connector interrogate the appropriate LiveLink repository in order to populate its path selection pull-downs.  There is, at this time, only one sanctioned way to accomplish the same job using the API, which is to use the appropriate "<em>connection_type</em>/execute/<em>type-specific_command</
 em>" command to perform the necessary functions.  Some set of useful functions has been coded for every appropriate connector, but the exact commands for every connector, and their JSON syntax, remains undocumented for now.</p>
+<p></p>
+<a name="N10879"></a><a name="File+system+connector"></a>
+<h4>File system connector</h4>
+<p></p>
+<p>The file system connector has no configuration information, and no connector-specific commands.  However, it does have document specification information.  The information looks something like this:</p>
+<p></p>
+<p>{"startpoint":[{"_attribute_path":"c:\path_to_files","include":[{"_attribute_type":"file","_attribute_match":"*.txt"},{"_attribute_type":"file","_attribute_match":"*.doc"\,"_attribute_type":"directory","_attribute_match":"*"],"exclude":["*.mov"]]}</p>
+<p></p>
+<p>As you can see, multiple starting paths are possible, and the inclusion and exclusion rules also can be one or multiple.</p>
+<p></p>
+<p></p>
+<a name="N10894"></a><a name="Control+via+Commands"></a>
+<h3 class="h4">Control via Commands</h3>
+<p></p>
+<p>For script writers, there currently exist a number of ManifoldCF execution commands.  These commands are primarily rich in the area of definition of connections and jobs, controlling jobs, and running reports.  The following table lists the current suite.</p>
+<p></p>
+<table class="ForrestTable" cellspacing="1" cellpadding="4">
+          
+<tr>
+<th colspan="1" rowspan="1">Command</th><th colspan="1" rowspan="1">What it does</th>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">org.apache.manifoldcf.agents.DefineOutputConnection</td><td colspan="1" rowspan="1">Create a new output connection</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">org.apache.manifoldcf.agents.DeleteOutputConnection</td><td colspan="1" rowspan="1">Delete an existing output connection</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">org.apache.manifoldcf.authorities.ChangeAuthSpec</td><td colspan="1" rowspan="1">Modify an authority's configuration information</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">org.apache.manifoldcf.authorities.CheckAll</td><td colspan="1" rowspan="1">Check all authorities to be sure they are functioning</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">org.apache.manifoldcf.authorities.DefineAuthorityConnection</td><td colspan="1" rowspan="1">Create a new authority connection</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">org.apache.manifoldcf.authorities.DeleteAuthorityConnection</td><td colspan="1" rowspan="1">Delete an existing authority connection</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">org.apache.manifoldcf.crawler.AbortJob</td><td colspan="1" rowspan="1">Abort a running job</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">org.apache.manifoldcf.crawler.AddScheduledTime</td><td colspan="1" rowspan="1">Add a schedule record to a job</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">org.apache.manifoldcf.crawler.ChangeJobDocSpec</td><td colspan="1" rowspan="1">Modify a job's specification information</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">org.apache.manifoldcf.crawler.DefineJob</td><td colspan="1" rowspan="1">Create a new job</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">org.apache.manifoldcf.crawler.DefineRepositoryConnection</td><td colspan="1" rowspan="1">Create a new repository connection</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">org.apache.manifoldcf.crawler.DeleteJob</td><td colspan="1" rowspan="1">Delete an existing job</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">org.apache.manifoldcf.crawler.DeleteRepositoryConnection</td><td colspan="1" rowspan="1">Delete an existing repository connection</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">org.apache.manifoldcf.crawler.ExportConfiguration</td><td colspan="1" rowspan="1">Write the complete list of all connection definitions and job specifications to a file</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">org.apache.manifoldcf.crawler.FindJob</td><td colspan="1" rowspan="1">Locate a job identifier given a job's name</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">org.apache.manifoldcf.crawler.GetJobSchedule</td><td colspan="1" rowspan="1">Find a job's schedule given a job's identifier</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">org.apache.manifoldcf.crawler.ImportConfiguration</td><td colspan="1" rowspan="1">Import configuration as written by a previous ExportConfiguration command</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">org.apache.manifoldcf.crawler.ListJobStatuses</td><td colspan="1" rowspan="1">List the status of all jobs</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">org.apache.manifoldcf.crawler.ListJobs</td><td colspan="1" rowspan="1">List the identifiers for all jobs</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">org.apache.manifoldcf.crawler.PauseJob</td><td colspan="1" rowspan="1">Given a job identifier, pause the specified job</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">org.apache.manifoldcf.crawler.RestartJob</td><td colspan="1" rowspan="1">Given a job identifier, restart the specified job</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">org.apache.manifoldcf.crawler.RunDocumentStatus</td><td colspan="1" rowspan="1">Run a document status report</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">org.apache.manifoldcf.crawler.RunMaxActivityHistory</td><td colspan="1" rowspan="1">Run a maximum activity report</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">org.apache.manifoldcf.crawler.RunMaxBandwidthHistory</td><td colspan="1" rowspan="1">Run a maximum bandwidth report</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">org.apache.manifoldcf.crawler.RunQueueStatus</td><td colspan="1" rowspan="1">Run a queue status report</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">org.apache.manifoldcf.crawler.RunResultHistory</td><td colspan="1" rowspan="1">Run a result history report</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">org.apache.manifoldcf.crawler.RunSimpleHistory</td><td colspan="1" rowspan="1">Run a simply history report</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">org.apache.manifoldcf.crawler.StartJob</td><td colspan="1" rowspan="1">Start a job</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">org.apache.manifoldcf.crawler.WaitForJobDeleted</td><td colspan="1" rowspan="1">After a job has been deleted, wait until the delete has completed</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">org.apache.manifoldcf.crawler.WaitForJobInactive</td><td colspan="1" rowspan="1">After a job has been started or aborted, wait until the job ceases all activity</td>
+</tr>
+          
+<tr>
+<td colspan="1" rowspan="1">org.apache.manifoldcf.crawler.WaitJobPaused</td><td colspan="1" rowspan="1">After a job has been paused, wait for the pause to take effect</td>
+</tr>
+        
+</table>
+<p></p>
+<a name="N109E7"></a><a name="Control+by+direct+code"></a>
+<h3 class="h4">Control by direct code</h3>
+<p></p>
+<p>Control by direct java code is quite a reasonable thing to do.  The sources of the above commands should give a pretty clear idea how to proceed, if that's what you want to do.</p>
+<p></p>
+<p></p>
+<a name="N109F7"></a><a name="Caveats"></a>
+<h3 class="h4">Caveats</h3>
+<p></p>
+<p>The above commands know nothing about the differences between connection types.  Instead, they deal with configuration and specification information in the form of XML documents.  Normally, these XML documents are hidden from a system integrator, unless they happen to look into the database with a tool such as psql.  But the API commands above often will require such XML documents to be included as part of the command execution.</p>
+<p></p>
+<p>This has one major consequence.  Any application that would manipulate connections and jobs directly cannot be connection-type independent - these applications must know the proper form of XML to submit to the command.  So, it is not possible to use these command APIs to write one's own UI wrapper, without sacrificing some of the repository independence that ManifoldCF by itself maintains.</p>
+</div>
+  
+</div>
+<!--+
+    |end content
+    +-->
+<div class="clearboth">&nbsp;</div>
+</div>
+<div id="footer">
+<!--+
+    |start bottomstrip
+    +-->
+<div class="lastmodified">
+<script type="text/javascript"><!--
+document.write("Last Published: " + document.lastModified);
+//  --></script>
+</div>
+<div class="copyright">
+        Copyright &copy;
+         2009, 2010, 2011 <a href="http://www.apache.org/licenses/">The Apache Software Foundation.</a>
+</div>
+<!--+
+    |end bottomstrip
+    +-->
+</div>
+</body>
+</html>

Propchange: incubator/lcf/site/publish/programmatic-operation.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/lcf/site/publish/programmatic-operation.html
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: incubator/lcf/site/publish/skin/CommonMessages_de.xml
URL: http://svn.apache.org/viewvc/incubator/lcf/site/publish/skin/CommonMessages_de.xml?rev=1137907&view=auto
==============================================================================
--- incubator/lcf/site/publish/skin/CommonMessages_de.xml (added)
+++ incubator/lcf/site/publish/skin/CommonMessages_de.xml Tue Jun 21 08:36:54 2011
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+  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.
+-->
+<catalogue>
+  <message key="Font size:">Schriftgrösse:</message>
+  <message key="Last Published:">Zuletzt veröffentlicht:</message>
+  <message key="Search">Suche:</message>
+  <message key="Search the site with">Suche auf der Seite mit</message>
+</catalogue>

Propchange: incubator/lcf/site/publish/skin/CommonMessages_de.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/lcf/site/publish/skin/CommonMessages_de.xml
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: incubator/lcf/site/publish/skin/CommonMessages_en_US.xml
URL: http://svn.apache.org/viewvc/incubator/lcf/site/publish/skin/CommonMessages_en_US.xml?rev=1137907&view=auto
==============================================================================
--- incubator/lcf/site/publish/skin/CommonMessages_en_US.xml (added)
+++ incubator/lcf/site/publish/skin/CommonMessages_en_US.xml Tue Jun 21 08:36:54 2011
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+  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.
+-->
+<catalogue>
+  <message  key="Font size:">Font size:</message>
+  <message key="Last Published:">Last Published:</message>
+  <message key="Search">Search</message>
+  <message key="Search the site with">Search site with</message>
+</catalogue>

Propchange: incubator/lcf/site/publish/skin/CommonMessages_en_US.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/lcf/site/publish/skin/CommonMessages_en_US.xml
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: incubator/lcf/site/publish/skin/CommonMessages_es.xml
URL: http://svn.apache.org/viewvc/incubator/lcf/site/publish/skin/CommonMessages_es.xml?rev=1137907&view=auto
==============================================================================
--- incubator/lcf/site/publish/skin/CommonMessages_es.xml (added)
+++ incubator/lcf/site/publish/skin/CommonMessages_es.xml Tue Jun 21 08:36:54 2011
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+  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.
+-->
+<catalogue>
+  <message key="Font size:">Tamaño del texto:</message>
+  <message key="Last Published:">Fecha de publicación:</message>
+  <message key="Search">Buscar</message>
+  <message key="Search the site with">Buscar en</message>
+</catalogue>

Propchange: incubator/lcf/site/publish/skin/CommonMessages_es.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/lcf/site/publish/skin/CommonMessages_es.xml
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: incubator/lcf/site/publish/skin/CommonMessages_fr.xml
URL: http://svn.apache.org/viewvc/incubator/lcf/site/publish/skin/CommonMessages_fr.xml?rev=1137907&view=auto
==============================================================================
--- incubator/lcf/site/publish/skin/CommonMessages_fr.xml (added)
+++ incubator/lcf/site/publish/skin/CommonMessages_fr.xml Tue Jun 21 08:36:54 2011
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+  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.
+-->
+<catalogue>
+  <message key="Font size:">Taille :</message>
+  <message key="Last Published:">Dernière publication :</message>
+  <message key="Search">Rechercher</message>
+  <message key="Search the site with">Rechercher sur le site avec</message>
+</catalogue>

Propchange: incubator/lcf/site/publish/skin/CommonMessages_fr.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/lcf/site/publish/skin/CommonMessages_fr.xml
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: incubator/lcf/site/publish/skin/basic.css
URL: http://svn.apache.org/viewvc/incubator/lcf/site/publish/skin/basic.css?rev=1137907&view=auto
==============================================================================
--- incubator/lcf/site/publish/skin/basic.css (added)
+++ incubator/lcf/site/publish/skin/basic.css Tue Jun 21 08:36:54 2011
@@ -0,0 +1,166 @@
+/*
+* 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.
+*/
+/**
+ * General
+ */
+
+img { border: 0; }
+
+#content table {
+  border: 0;
+  width: 100%;
+}
+/*Hack to get IE to render the table at 100%*/
+* html #content table { margin-left: -3px; }
+
+#content th,
+#content td {
+  margin: 0;
+  padding: 0;
+  vertical-align: top;
+}
+
+.clearboth {
+  clear: both;
+}
+
+.note, .warning, .fixme {
+  border: solid black 1px;
+  margin: 1em 3em;
+}
+
+.note .label {
+  background: #369;
+  color: white;
+  font-weight: bold;
+  padding: 5px 10px;
+}
+.note .content {
+  background: #F0F0FF;
+  color: black;
+  line-height: 120%;
+  font-size: 90%;
+  padding: 5px 10px;
+}
+.warning .label {
+  background: #C00;
+  color: white;
+  font-weight: bold;
+  padding: 5px 10px;
+}
+.warning .content {
+  background: #FFF0F0;
+  color: black;
+  line-height: 120%;
+  font-size: 90%;
+  padding: 5px 10px;
+}
+.fixme .label {
+  background: #C6C600;
+  color: black;
+  font-weight: bold;
+  padding: 5px 10px;
+}
+.fixme .content {
+  padding: 5px 10px;
+}
+
+/**
+ * Typography
+ */
+
+body {
+  font-family: verdana, "Trebuchet MS", arial, helvetica, sans-serif;
+  font-size: 100%;
+}
+
+#content {
+  font-family: Georgia, Palatino, Times, serif;
+  font-size: 95%;
+}
+#tabs {
+  font-size: 70%;
+}
+#menu {
+  font-size: 80%;
+}
+#footer {
+  font-size: 70%;
+}
+
+h1, h2, h3, h4, h5, h6 {
+  font-family: "Trebuchet MS", verdana, arial, helvetica, sans-serif;
+  font-weight: bold;
+  margin-top: 1em;
+  margin-bottom: .5em;
+}
+
+h1 {
+    margin-top: 0;
+    margin-bottom: 1em;
+  font-size: 1.4em;
+}
+#content h1 {
+  font-size: 160%;
+  margin-bottom: .5em;
+}
+#menu h1 {
+  margin: 0;
+  padding: 10px;
+  background: #336699;
+  color: white;
+}
+h2 { font-size: 120%; }
+h3 { font-size: 100%; }
+h4 { font-size: 90%; }
+h5 { font-size: 80%; }
+h6 { font-size: 75%; }
+
+p {
+  line-height: 120%;
+  text-align: left;
+  margin-top: .5em;
+  margin-bottom: 1em;
+}
+
+#content li,
+#content th,
+#content td,
+#content li ul,
+#content li ol{
+  margin-top: .5em;
+  margin-bottom: .5em;
+}
+
+
+#content li li,
+#minitoc-area li{
+  margin-top: 0em;
+  margin-bottom: 0em;
+}
+
+#content .attribution {
+  text-align: right;
+  font-style: italic;
+  font-size: 85%;
+  margin-top: 1em;
+}
+
+.codefrag {
+  font-family: "Courier New", Courier, monospace;
+  font-size: 110%;
+}
\ No newline at end of file

Added: incubator/lcf/site/publish/skin/breadcrumbs-optimized.js
URL: http://svn.apache.org/viewvc/incubator/lcf/site/publish/skin/breadcrumbs-optimized.js?rev=1137907&view=auto
==============================================================================
--- incubator/lcf/site/publish/skin/breadcrumbs-optimized.js (added)
+++ incubator/lcf/site/publish/skin/breadcrumbs-optimized.js Tue Jun 21 08:36:54 2011
@@ -0,0 +1,90 @@
+/*
+* 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.
+*/
+var PREPREND_CRUMBS=new Array();
+var link1="@skinconfig.trail.link1.name@";
+var link2="@skinconfig.trail.link2.name@";
+var link3="@skinconfig.trail.link3.name@";
+if(!(link1=="")&&!link1.indexOf( "@" ) == 0){
+  PREPREND_CRUMBS.push( new Array( link1, @skinconfig.trail.link1.href@ ) ); }
+if(!(link2=="")&&!link2.indexOf( "@" ) == 0){
+  PREPREND_CRUMBS.push( new Array( link2, @skinconfig.trail.link2.href@ ) ); }
+if(!(link3=="")&&!link3.indexOf( "@" ) == 0){
+  PREPREND_CRUMBS.push( new Array( link3, @skinconfig.trail.link3.href@ ) ); }
+var DISPLAY_SEPARATOR=" &gt; ";
+var DISPLAY_PREPREND=" &gt; ";
+var DISPLAY_POSTPREND=":";
+var CSS_CLASS_CRUMB="breadcrumb";
+var CSS_CLASS_TRAIL="breadcrumbTrail";
+var CSS_CLASS_SEPARATOR="crumbSeparator";
+var FILE_EXTENSIONS=new Array( ".html", ".htm", ".jsp", ".php", ".php3", ".php4" );
+var PATH_SEPARATOR="/";
+
+function sc(s) {
+	var l=s.toLowerCase();
+	return l.substr(0,1).toUpperCase()+l.substr(1);
+}
+function getdirs() {
+	var t=document.location.pathname.split(PATH_SEPARATOR);
+	var lc=t[t.length-1];
+	for(var i=0;i < FILE_EXTENSIONS.length;i++)
+	{
+		if(lc.indexOf(FILE_EXTENSIONS[i]))
+			return t.slice(1,t.length-1); }
+	return t.slice(1,t.length);
+}
+function getcrumbs( d )
+{
+	var pre = "/";
+	var post = "/";
+	var c = new Array();
+	if( d != null )
+	{
+		for(var i=0;i < d.length;i++) {
+			pre+=d[i]+postfix;
+			c.push(new Array(d[i],pre)); }
+	}
+	if(PREPREND_CRUMBS.length > 0 )
+		return PREPREND_CRUMBS.concat( c );
+	return c;
+}
+function gettrail( c )
+{
+	var h=DISPLAY_PREPREND;
+	for(var i=0;i < c.length;i++)
+	{
+		h+='<a href="'+c[i][1]+'" >'+sc(c[i][0])+'</a>';
+		if(i!=(c.length-1))
+			h+=DISPLAY_SEPARATOR; }
+	return h+DISPLAY_POSTPREND;
+}
+
+function gettrailXHTML( c )
+{
+	var h='<span class="'+CSS_CLASS_TRAIL+'">'+DISPLAY_PREPREND;
+	for(var i=0;i < c.length;i++)
+	{
+		h+='<a href="'+c[i][1]+'" class="'+CSS_CLASS_CRUMB+'">'+sc(c[i][0])+'</a>';
+		if(i!=(c.length-1))
+			h+='<span class="'+CSS_CLASS_SEPARATOR+'">'+DISPLAY_SEPARATOR+'</span>'; }
+	return h+DISPLAY_POSTPREND+'</span>';
+}
+
+if(document.location.href.toLowerCase().indexOf("http://")==-1)
+	document.write(gettrail(getcrumbs()));
+else
+	document.write(gettrail(getcrumbs(getdirs())));
+

Added: incubator/lcf/site/publish/skin/breadcrumbs.js
URL: http://svn.apache.org/viewvc/incubator/lcf/site/publish/skin/breadcrumbs.js?rev=1137907&view=auto
==============================================================================
--- incubator/lcf/site/publish/skin/breadcrumbs.js (added)
+++ incubator/lcf/site/publish/skin/breadcrumbs.js Tue Jun 21 08:36:54 2011
@@ -0,0 +1,237 @@
+/*
+* 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.
+*/
+/**
+ * This script, when included in a html file, builds a neat breadcrumb trail
+ * based on its url. That is, if it doesn't contains bugs (I'm relatively
+ * sure it does).
+ *
+ * Typical usage:
+ * <script type="text/javascript" language="JavaScript" src="breadcrumbs.js"></script>
+ */
+
+/**
+ * IE 5 on Mac doesn't know Array.push.
+ *
+ * Implement it - courtesy to fritz.
+ */
+var abc	= new Array();
+if (!abc.push) {
+  Array.prototype.push	= function(what){this[this.length]=what}
+}
+
+/* ========================================================================
+	CONSTANTS
+   ======================================================================== */
+
+/**
+ * Two-dimensional array containing extra crumbs to place at the front of
+ * the trail. Specify first the name of the crumb, then the URI that belongs
+ * to it. You'll need to modify this for every domain or subdomain where
+ * you use this script (you can leave it as an empty array if you wish)
+ */
+var PREPREND_CRUMBS = new Array();
+
+var link1 = "@skinconfig.trail.link1.name@";
+var link2 = "@skinconfig.trail.link2.name@";
+var link3 = "@skinconfig.trail.link3.name@";
+
+var href1 = "@skinconfig.trail.link1.href@";
+var href2 = "@skinconfig.trail.link2.href@";
+var href3 = "@skinconfig.trail.link3.href@";
+
+   if(!(link1=="")&&!link1.indexOf( "@" ) == 0){
+     PREPREND_CRUMBS.push( new Array( link1, href1 ) );
+   }
+   if(!(link2=="")&&!link2.indexOf( "@" ) == 0){
+     PREPREND_CRUMBS.push( new Array( link2, href2 ) );
+   }
+   if(!(link3=="")&&!link3.indexOf( "@" ) == 0){
+     PREPREND_CRUMBS.push( new Array( link3, href3 ) );
+   }
+
+/**
+ * String to include between crumbs:
+ */
+var DISPLAY_SEPARATOR = " &gt; ";
+/**
+ * String to include at the beginning of the trail
+ */
+var DISPLAY_PREPREND = " &gt; ";
+/**
+ * String to include at the end of the trail
+ */
+var DISPLAY_POSTPREND = "";
+
+/**
+ * CSS Class to use for a single crumb:
+ */
+var CSS_CLASS_CRUMB = "breadcrumb";
+
+/**
+ * CSS Class to use for the complete trail:
+ */
+var CSS_CLASS_TRAIL = "breadcrumbTrail";
+
+/**
+ * CSS Class to use for crumb separator:
+ */
+var CSS_CLASS_SEPARATOR = "crumbSeparator";
+
+/**
+ * Array of strings containing common file extensions. We use this to
+ * determine what part of the url to ignore (if it contains one of the
+ * string specified here, we ignore it).
+ */
+var FILE_EXTENSIONS = new Array( ".html", ".htm", ".jsp", ".php", ".php3", ".php4" );
+
+/**
+ * String that separates parts of the breadcrumb trail from each other.
+ * When this is no longer a slash, I'm sure I'll be old and grey.
+ */
+var PATH_SEPARATOR = "/";
+
+/* ========================================================================
+	UTILITY FUNCTIONS
+   ======================================================================== */
+/**
+ * Capitalize first letter of the provided string and return the modified
+ * string.
+ */
+function sentenceCase( string )
+{        return string;
+	//var lower = string.toLowerCase();
+	//return lower.substr(0,1).toUpperCase() + lower.substr(1);
+}
+
+/**
+ * Returns an array containing the names of all the directories in the
+ * current document URL
+ */
+function getDirectoriesInURL()
+{
+	var trail = document.location.pathname.split( PATH_SEPARATOR );
+
+	// check whether last section is a file or a directory
+	var lastcrumb = trail[trail.length-1];
+	for( var i = 0; i < FILE_EXTENSIONS.length; i++ )
+	{
+		if( lastcrumb.indexOf( FILE_EXTENSIONS[i] ) )
+		{
+			// it is, remove it and send results
+			return trail.slice( 1, trail.length-1 );
+		}
+	}
+
+	// it's not; send the trail unmodified
+	return trail.slice( 1, trail.length );
+}
+
+/* ========================================================================
+	BREADCRUMB FUNCTIONALITY
+   ======================================================================== */
+/**
+ * Return a two-dimensional array describing the breadcrumbs based on the
+ * array of directories passed in.
+ */
+function getBreadcrumbs( dirs )
+{
+	var prefix = "/";
+	var postfix = "/";
+
+	// the array we will return
+	var crumbs = new Array();
+
+	if( dirs != null )
+	{
+		for( var i = 0; i < dirs.length; i++ )
+		{
+			prefix += dirs[i] + postfix;
+			crumbs.push( new Array( dirs[i], prefix ) );
+		}
+	}
+
+	// preprend the PREPREND_CRUMBS
+	if(PREPREND_CRUMBS.length > 0 )
+	{
+		return PREPREND_CRUMBS.concat( crumbs );
+	}
+
+	return crumbs;
+}
+
+/**
+ * Return a string containing a simple text breadcrumb trail based on the
+ * two-dimensional array passed in.
+ */
+function getCrumbTrail( crumbs )
+{
+	var xhtml = DISPLAY_PREPREND;
+
+	for( var i = 0; i < crumbs.length; i++ )
+	{
+		xhtml += '<a href="' + crumbs[i][1] + '" >';
+		xhtml += unescape( crumbs[i][0] ) + '</a>';
+		if( i != (crumbs.length-1) )
+		{
+			xhtml += DISPLAY_SEPARATOR;
+		}
+	}
+
+	xhtml += DISPLAY_POSTPREND;
+
+	return xhtml;
+}
+
+/**
+ * Return a string containing an XHTML breadcrumb trail based on the
+ * two-dimensional array passed in.
+ */
+function getCrumbTrailXHTML( crumbs )
+{
+	var xhtml = '<span class="' + CSS_CLASS_TRAIL  + '">';
+	xhtml += DISPLAY_PREPREND;
+
+	for( var i = 0; i < crumbs.length; i++ )
+	{
+		xhtml += '<a href="' + crumbs[i][1] + '" class="' + CSS_CLASS_CRUMB + '">';
+		xhtml += unescape( crumbs[i][0] ) + '</a>';
+		if( i != (crumbs.length-1) )
+		{
+			xhtml += '<span class="' + CSS_CLASS_SEPARATOR + '">' + DISPLAY_SEPARATOR + '</span>';
+		}
+	}
+
+	xhtml += DISPLAY_POSTPREND;
+	xhtml += '</span>';
+
+	return xhtml;
+}
+
+/* ========================================================================
+	PRINT BREADCRUMB TRAIL
+   ======================================================================== */
+
+// check if we're local; if so, only print the PREPREND_CRUMBS
+if( document.location.href.toLowerCase().indexOf( "http://" ) == -1 )
+{
+	document.write( getCrumbTrail( getBreadcrumbs() ) );
+}
+else
+{
+	document.write( getCrumbTrail( getBreadcrumbs( getDirectoriesInURL() ) ) );
+}
+

Added: incubator/lcf/site/publish/skin/fontsize.js
URL: http://svn.apache.org/viewvc/incubator/lcf/site/publish/skin/fontsize.js?rev=1137907&view=auto
==============================================================================
--- incubator/lcf/site/publish/skin/fontsize.js (added)
+++ incubator/lcf/site/publish/skin/fontsize.js Tue Jun 21 08:36:54 2011
@@ -0,0 +1,166 @@
+/*
+* 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.
+*/
+function init() 
+{ //embedded in the doc
+  //ndeSetTextSize();
+}
+
+function checkBrowser(){
+  if (!document.getElementsByTagName){
+    return true;
+  }
+  else{
+    return false;
+  }
+}
+
+
+function ndeSetTextSize(chgsize,rs) 
+{
+  var startSize;
+  var newSize;
+
+  if (!checkBrowser)
+  {
+    return;
+  }
+
+  startSize = parseInt(ndeGetDocTextSize());
+
+  if (!startSize)
+  {
+    startSize = 16;
+  }
+
+  switch (chgsize)
+  {
+  case 'incr':
+    newSize = startSize + 2;
+    break;
+
+  case 'decr':
+    newSize = startSize - 2;
+    break;
+
+  case 'reset':
+    if (rs) {newSize = rs;} else {newSize = 16;}
+    break;
+
+  default:
+    try{
+      newSize = parseInt(ndeReadCookie("nde-textsize"));
+    }
+    catch(e){
+      alert(e);
+    }
+    
+    if (!newSize || newSize == 'NaN')
+    {
+      newSize = startSize;
+    }
+    break;
+
+  }
+
+  if (newSize < 10) 
+  {
+    newSize = 10;
+  }
+
+  newSize += 'px';
+
+  document.getElementsByTagName('html')[0].style.fontSize = newSize;
+  document.getElementsByTagName('body')[0].style.fontSize = newSize;
+
+  ndeCreateCookie("nde-textsize", newSize, 365);
+}
+
+function ndeGetDocTextSize() 
+{
+  if (!checkBrowser)
+  {
+    return 0;
+  }
+
+  var size = 0;
+  var body = document.getElementsByTagName('body')[0];
+
+  if (body.style && body.style.fontSize)
+  {
+    size = body.style.fontSize;
+  }
+  else if (typeof(getComputedStyle) != 'undefined')
+  {
+    size = getComputedStyle(body,'').getPropertyValue('font-size');
+  }
+  else if (body.currentStyle)
+  {
+   size = body.currentStyle.fontSize;
+  }
+
+  //fix IE bug
+  if( isNaN(size)){
+    if(size.substring(size.length-1)=="%"){
+      return
+    }
+
+  }
+
+  return size;
+
+}
+
+
+
+function ndeCreateCookie(name,value,days) 
+{
+  var cookie = name + "=" + value + ";";
+
+  if (days) 
+  {
+    var date = new Date();
+    date.setTime(date.getTime()+(days*24*60*60*1000));
+    cookie += " expires=" + date.toGMTString() + ";";
+  }
+  cookie += " path=/";
+
+  document.cookie = cookie;
+
+}
+
+function ndeReadCookie(name) 
+{
+  var nameEQ = name + "=";
+  var ca = document.cookie.split(';');
+
+ 
+  for(var i = 0; i < ca.length; i++) 
+  {
+    var c = ca[i];
+    while (c.charAt(0) == ' ') 
+    {
+      c = c.substring(1, c.length);
+    }
+
+    ctest = c.substring(0,name.length);
+ 
+    if(ctest == name){
+      return c.substring(nameEQ.length,c.length);
+    }
+  }
+  return null;
+}

Added: incubator/lcf/site/publish/skin/getBlank.js
URL: http://svn.apache.org/viewvc/incubator/lcf/site/publish/skin/getBlank.js?rev=1137907&view=auto
==============================================================================
--- incubator/lcf/site/publish/skin/getBlank.js (added)
+++ incubator/lcf/site/publish/skin/getBlank.js Tue Jun 21 08:36:54 2011
@@ -0,0 +1,40 @@
+/*
+* 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.
+*/
+/**
+ * getBlank script - when included in a html file and called from a form text field, will set the value of this field to ""
+ * if the text value is still the standard value.
+ * getPrompt script - when included in a html file and called from a form text field, will set the value of this field to the prompt
+ * if the text value is empty.
+ *
+ * Typical usage:
+ * <script type="text/javascript" language="JavaScript" src="getBlank.js"></script>
+ * <input type="text" id="query" value="Search the site:" onFocus="getBlank (this, 'Search the site:');" onBlur="getBlank (this, 'Search the site:');"/>
+ */
+<!--
+function getBlank (form, stdValue){
+if (form.value == stdValue){
+	form.value = '';
+	}
+return true;
+}
+function getPrompt (form, stdValue){
+if (form.value == ''){
+	form.value = stdValue;
+	}
+return true;
+}
+//-->

Added: incubator/lcf/site/publish/skin/getMenu.js
URL: http://svn.apache.org/viewvc/incubator/lcf/site/publish/skin/getMenu.js?rev=1137907&view=auto
==============================================================================
--- incubator/lcf/site/publish/skin/getMenu.js (added)
+++ incubator/lcf/site/publish/skin/getMenu.js Tue Jun 21 08:36:54 2011
@@ -0,0 +1,45 @@
+/*
+* 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.
+*/
+/**
+ * This script, when included in a html file, can be used to make collapsible menus
+ *
+ * Typical usage:
+ * <script type="text/javascript" language="JavaScript" src="menu.js"></script>
+ */
+
+if (document.getElementById){ 
+  document.write('<style type="text/css">.menuitemgroup{display: none;}</style>')
+}
+
+
+function SwitchMenu(obj, thePath)
+{
+var open = 'url("'+thePath + 'images/chapter_open.gif")';
+var close = 'url("'+thePath + 'images/chapter.gif")';
+  if(document.getElementById)  {
+    var el = document.getElementById(obj);
+    var title = document.getElementById(obj+'Title');
+
+    if(el.style.display != "block"){ 
+      title.style.backgroundImage = open;
+      el.style.display = "block";
+    }else{
+      title.style.backgroundImage = close;
+      el.style.display = "none";
+    }
+  }// end -  if(document.getElementById) 
+}//end - function SwitchMenu(obj)

Added: incubator/lcf/site/publish/skin/images/README.txt
URL: http://svn.apache.org/viewvc/incubator/lcf/site/publish/skin/images/README.txt?rev=1137907&view=auto
==============================================================================
--- incubator/lcf/site/publish/skin/images/README.txt (added)
+++ incubator/lcf/site/publish/skin/images/README.txt Tue Jun 21 08:36:54 2011
@@ -0,0 +1 @@
+The images in this directory are used if the current skin lacks them.

Propchange: incubator/lcf/site/publish/skin/images/README.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/lcf/site/publish/skin/images/README.txt
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: incubator/lcf/site/publish/skin/images/add.jpg
URL: http://svn.apache.org/viewvc/incubator/lcf/site/publish/skin/images/add.jpg?rev=1137907&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/lcf/site/publish/skin/images/add.jpg
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/lcf/site/publish/skin/images/apache-thanks.png
URL: http://svn.apache.org/viewvc/incubator/lcf/site/publish/skin/images/apache-thanks.png?rev=1137907&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/lcf/site/publish/skin/images/apache-thanks.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: incubator/lcf/site/publish/skin/images/built-with-cocoon.gif
URL: http://svn.apache.org/viewvc/incubator/lcf/site/publish/skin/images/built-with-cocoon.gif?rev=1137907&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/lcf/site/publish/skin/images/built-with-cocoon.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/lcf/site/publish/skin/images/built-with-forrest-button.png
URL: http://svn.apache.org/viewvc/incubator/lcf/site/publish/skin/images/built-with-forrest-button.png?rev=1137907&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/lcf/site/publish/skin/images/built-with-forrest-button.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: incubator/lcf/site/publish/skin/images/chapter.gif
URL: http://svn.apache.org/viewvc/incubator/lcf/site/publish/skin/images/chapter.gif?rev=1137907&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/lcf/site/publish/skin/images/chapter.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/lcf/site/publish/skin/images/corner-imports.svg.xslt
URL: http://svn.apache.org/viewvc/incubator/lcf/site/publish/skin/images/corner-imports.svg.xslt?rev=1137907&view=auto
==============================================================================
--- incubator/lcf/site/publish/skin/images/corner-imports.svg.xslt (added)
+++ incubator/lcf/site/publish/skin/images/corner-imports.svg.xslt Tue Jun 21 08:36:54 2011
@@ -0,0 +1,92 @@
+<?xml version="1.0"?>
+<!--
+  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.
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+  <xsl:param name="orientation-tb"/>
+  <xsl:param name="orientation-lr"/>
+  <xsl:param name="size"/>
+  <xsl:param name="bg-color-name"/>
+  <xsl:param name="stroke-color-name"/>
+  <xsl:param name="fg-color-name"/>
+<!-- if not all colors are present, don't even try to render the corners -->
+  <xsl:variable name="isize">
+    <xsl:choose>
+      <xsl:when test="$bg-color-name and $stroke-color-name and $fg-color-name">
+        <xsl:value-of select="$size"/>
+      </xsl:when>
+      <xsl:otherwise>0</xsl:otherwise>
+    </xsl:choose>
+  </xsl:variable>
+  <xsl:variable name="smallersize" select="number($isize)-1"/>
+  <xsl:variable name="biggersize" select="number($isize)+1"/>
+  <xsl:variable name="bg">
+    <xsl:if test="skinconfig/colors/color[@name=$bg-color-name]">fill:<xsl:value-of select="skinconfig/colors/color[@name=$bg-color-name]/@value"/>;</xsl:if>
+  </xsl:variable>
+  <xsl:variable name="fill">
+    <xsl:if test="skinconfig/colors/color[@name=$stroke-color-name]">fill:<xsl:value-of select="skinconfig/colors/color[@name=$stroke-color-name]/@value"/>;</xsl:if>
+  </xsl:variable>
+  <xsl:variable name="stroke">
+    <xsl:if test="skinconfig/colors/color[@name=$fg-color-name]">stroke:<xsl:value-of select="skinconfig/colors/color[@name=$fg-color-name]/@value"/>;</xsl:if>
+  </xsl:variable>
+  <xsl:template match="skinconfig">
+    <svg width="{$isize}" height="{$isize}">
+<!-- background-->
+      <rect x="-1" y="-1" width="{$biggersize}" height="{$biggersize}" style="{$bg}stroke-width:0"/>
+<!-- 0,0 0,-4 4,0 4,-4-->
+      <xsl:variable name="flip-tb-scale">
+        <xsl:choose>
+          <xsl:when test="$orientation-tb='t'">1</xsl:when>
+          <xsl:otherwise>-1</xsl:otherwise>
+        </xsl:choose>
+      </xsl:variable>
+      <xsl:variable name="flip-lr-scale">
+        <xsl:choose>
+          <xsl:when test="$orientation-lr='l'">1</xsl:when>
+          <xsl:otherwise>-1</xsl:otherwise>
+        </xsl:choose>
+      </xsl:variable>
+      <xsl:variable name="flip-tb-translate">
+        <xsl:choose>
+          <xsl:when test="$orientation-tb='t'">0</xsl:when>
+          <xsl:otherwise>-<xsl:value-of select="$isize" />
+          </xsl:otherwise>
+        </xsl:choose>
+      </xsl:variable>
+      <xsl:variable name="flip-lr-translate">
+        <xsl:choose>
+          <xsl:when test="$orientation-lr='l'">0</xsl:when>
+          <xsl:otherwise>-<xsl:value-of select="$isize" />
+          </xsl:otherwise>
+        </xsl:choose>
+      </xsl:variable>
+<!-- flip transform -->
+      <g transform="scale({$flip-lr-scale},{$flip-tb-scale}) translate({$flip-lr-translate}, {$flip-tb-translate})">
+        <xsl:call-template name="figure" />
+      </g>
+    </svg>
+  </xsl:template>
+  <xsl:template name="figure">
+<!-- Just change shape here -->
+    <g transform="translate(0.5 0.5)">
+      <ellipse cx="{$smallersize}" cy="{$smallersize}" rx="{$smallersize}" ry="{$smallersize}"
+				 style="{$fill}{$stroke}stroke-width:1"/>
+    </g>
+<!-- end -->
+  </xsl:template>
+  <xsl:template match="*"></xsl:template>
+  <xsl:template match="text()"></xsl:template>
+</xsl:stylesheet>

Propchange: incubator/lcf/site/publish/skin/images/corner-imports.svg.xslt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/lcf/site/publish/skin/images/corner-imports.svg.xslt
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: incubator/lcf/site/publish/skin/images/current.gif
URL: http://svn.apache.org/viewvc/incubator/lcf/site/publish/skin/images/current.gif?rev=1137907&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/lcf/site/publish/skin/images/current.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream



Mime
View raw message