diff --git a/src/site/apt/documentation.apt b/src/site/apt/documentation.apt
index 6645de4..b86557f 100644
--- a/src/site/apt/documentation.apt
+++ b/src/site/apt/documentation.apt
@@ -27,7 +27,7 @@
 
 * Wink 1.0 
 
-  * User Guide {{{./1.0/Apache_Wink_User_Guide.htm}HTML}} / {{{./1.0/Apache_Wink_User_Guide.pdf}PDF}} 
+  * User Guide {{{./1.0/html/Apache Wink Developer Guide.html}HTML}} / {{{./1.0/Apache_Wink_User_Guide.pdf}PDF}} 
   
   * {{{./1.0/api/index.html}API}} (Javadoc)
   
diff --git a/src/site/resources/1.0/html/1 Introduction to Apache Wink.html b/src/site/resources/1.0/html/1 Introduction to Apache Wink.html
new file mode 100644
index 0000000..757c4fc
--- /dev/null
+++ b/src/site/resources/1.0/html/1 Introduction to Apache Wink.html
@@ -0,0 +1,110 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : 1 Introduction to Apache Wink</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : 1 Introduction to Apache Wink
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Sep 12, 2009 by <font color="#0050B2">bluk</font>.
+				    </div>
+
+				    <h1><a name="1IntroductiontoApacheWink-IntroductiontoApacheWink"></a>Introduction to Apache Wink</h1>
+
+<p>Apache Wink 1.0 is a complete Java based solution for implementing and consuming REST based Web Services. The goal of the Wink framework is to provide a reusable and extendable set of classes and interfaces that will serve as a foundation on which a developer can efficiently construct applications.
+<br clear="all" /></p>
+
+<p>Wink consists of a Server module for developing REST services, and of a Client module for consuming REST services. It cleanly separates the low-level protocol aspects from the application aspects. Therefore, in order to implement and consume REST Web Services the developer only needs to focus on the application business logic and not on the low-level technical details.
+<br clear="all" /></p>
+
+<p>The Wink Developer Guide provides the developer with a rudimentary understanding of the Wink framework and the building blocks that comprise it.
+<br clear="all" /></p>
+
+<h2><a name="1IntroductiontoApacheWink-WelcometoApacheWink"></a>Welcome to Apache Wink</h2>
+
+<p>Wink is a framework for the simple implementation and consumption of REST web services. REST is an acronym that stands for REpresentational State Transfer. REST web services are "Resources" that are identified by unique URIs. These resources are accessed and manipulated using a set of "Uniform methods". Each resource has one or more "Representations" that are transferred between the client and the service during a web service invocation.
+<br clear="all" /></p>
+
+<p>The central features that distinguish the REST architectural style from other network-based styles is its emphasis on a uniform interface, multi representations and services introspection.
+<br clear="all" /></p>
+
+<p>Wink facilitates the development and consumption of REST web services by providing the means for modeling the service according to the REST architectural style. Wink provides the necessary infrastructure for defining and implementing the resources, representations and uniform methods that comprise a service.
+<br clear="all" /></p>
+
+<h3><a name="1IntroductiontoApacheWink-RESTArchitecture"></a>REST Architecture</h3>
+
+<p>For a detailed understanding of the REST architecture refer to the description by Roy Fielding in his dissertation, <a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm">The Design of Network-based Software Architectures</a>.  In particular, <a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm">Chapter 5 Representational State Transfer (REST)</a> describes the principles of the architecture.</p>
+
+<h4><a name="1IntroductiontoApacheWink-RESTWebService"></a>REST Web Service</h4>
+
+
+<p>Figure 1: REST Web service design structure</p>
+
+<p><br clear="all" />  <img src="attachments/2328642/2523181.jpg" align="absmiddle" border="0"/><br clear="all" /></p>
+
+
+<p><br clear="all" />
+Figure 1 demonstrates the design principles and components that comprise a REST web service. Wink reflects these design principles in the implementation of web services.
+<br clear="all" /></p>
+
+
+
+<h2><a name="1IntroductiontoApacheWink-ApacheWinkOpenDevelopment"></a>Apache Wink Open Development</h2>
+
+<p>The purpose of this document is to provide detailed information about Wink 1.0 and describe the additional features that the Apache Wink 1.0 runtime provides in addition to the JAX-RS Java API for REST Web Service specification.
+<br clear="all" /></p>
+
+<p>In addition to the features description, this document also provides information regarding implementation specific issues.
+<br clear="all" /></p>
+
+<p>This document provides the developer with a rudimentary understanding of the Wink 1.0 framework in order to highlight the underlying concepts and precepts that make up the framework in order to create a basis for understanding, cooperation and open development of Wink.</p>
+
+<div class='panelMacro'><table class='tipMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/check.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>JAX-RS Specification Document</b><br /> For more information on the JAX-RS functionality, refer to the JAX-RS specification document, available at the following location:<br/>
+<a href="http://jcp.org/aboutJava/communityprocess/final/jsr311/index.html">http://jcp.org/aboutJava/communityprocess/final/jsr311/index.html</a> </td></tr></table></div>
+
+
+<h2><a name="1IntroductiontoApacheWink-JAXRSCompliancy"></a>JAX-RS Compliancy</h2>
+
+
+<p>Apache Wink 1.0 is a complete implementation of the JAX-RS v1.0 specification.
+<br clear="all" /></p>
+
+<p>JAX-RS is a Java based API for RESTful Web Services is a Java programming language API that provides support in creating web services according to the Representational State Transfer (REST) architectural style. JAX-RS uses annotations, introduced in Java SE 5, to simplify the development and deployment of web service clients and endpoints. </p>
+
+				    					    <br/>
+                        <div class="tabletitle">
+                            <a name="attachments">Attachments:</a>
+                        </div>
+
+                        <div class="greybox" align="left">
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2328642/2523182.jpg">REST Web Service.jpg</a> (image/jpeg)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2328642/2523181.jpg">REST Web Service.jpg</a> (image/jpeg)
+                                <br/>
+                                                    </div>
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/2 Apache Wink Building Blocks.html b/src/site/resources/1.0/html/2 Apache Wink Building Blocks.html
new file mode 100644
index 0000000..ae567f5
--- /dev/null
+++ b/src/site/resources/1.0/html/2 Apache Wink Building Blocks.html
@@ -0,0 +1,672 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : 2 Apache Wink Building Blocks</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : 2 Apache Wink Building Blocks
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Oct 18, 2009 by <font color="#0050B2">michael</font>.
+				    </div>
+
+				    <h1><a name="2ApacheWinkBuildingBlocks-ApacheWinkBuildingBlocks"></a>Apache Wink Building Blocks</h1>
+
+<p>In order to take full advantage of Apache Wink, a basic understanding of the building blocks that comprise it and their functional integration is required. The following section provides an introduction to the&nbsp; basic concepts and building blocks of Apache Wink, version 1.0. In order to gain in-depth understandings of the building blocks refer to the table of contents where these concepts are expanded and addtional example are used to further illustrate the Apache Wink and JAX-RS SDK technologies.</p>
+
+
+<h2><a name="2ApacheWinkBuildingBlocks-Thissectioncontainsthefollowingtopics%3A"></a>This section contains the following topics:</h2>
+
+
+<h4><a name="2ApacheWinkBuildingBlocks-ServiceImplementationBuildingBlocks"></a>Service Implementation Building Blocks</h4>
+
+<ul>
+	<li><a href="#2ApacheWinkBuildingBlocks-Resource">Resource</a></li>
+	<li><a href="#2ApacheWinkBuildingBlocks-Providers">Providers</a></li>
+	<li><a href="#2ApacheWinkBuildingBlocks-URIDispatching">URI Dispatching</a></li>
+	<li><a href="#2ApacheWinkBuildingBlocks-Assets">Assets</a></li>
+	<li><a href="#2ApacheWinkBuildingBlocks-Annotations">Annotations</a></li>
+	<li><a href="#2ApacheWinkBuildingBlocks-URLHandling">URL Handling</a></li>
+	<li><a href="#2ApacheWinkBuildingBlocks-HTTPMethodsGET%2CPOST%2CPUT%2CDELETEandOPTIONS">HTTP Methods - GET, POST, PUT, DELETE and OPTIONS</a></li>
+	<li><a href="#2ApacheWinkBuildingBlocks-BasicURLQueryParameters">Basic URL Query Parameters</a></li>
+	<li><a href="#2ApacheWinkBuildingBlocks-ApacheWinkBuildingBlocksSummary">Apache Wink Building Blocks Summary</a></li>
+</ul>
+
+
+<h4><a name="2ApacheWinkBuildingBlocks-ClientComponentsBuildingBlocks"></a>Client Components Building Blocks</h4>
+
+
+
+<ul>
+	<li><a href="#2ApacheWinkBuildingBlocks-RestClientClass">RestClient Class</a></li>
+	<li><a href="#2ApacheWinkBuildingBlocks-ResourceInterface">Resource Interface</a></li>
+	<li><a href="#2ApacheWinkBuildingBlocks-ClientRequestInterface">ClientRequest Interface</a></li>
+	<li><a href="#2ApacheWinkBuildingBlocks-ClientResponseInterface">ClientResponse Interface</a></li>
+	<li><a href="#2ApacheWinkBuildingBlocks-ClientConfigClass">ClientConfig Class</a></li>
+	<li><a href="#2ApacheWinkBuildingBlocks-ClientHandlerInterface">ClientHandler Interface</a></li>
+	<li><a href="#2ApacheWinkBuildingBlocks-InputStreamAdapterInterface">InputStreamAdapter Interface</a></li>
+	<li><a href="#2ApacheWinkBuildingBlocks-OutputStreamAdapterInterface">OutputStreamAdapter Interface</a></li>
+	<li><a href="#2ApacheWinkBuildingBlocks-EntityTypeClass">EntityType Class</a></li>
+</ul>
+
+
+
+<h4><a name="2ApacheWinkBuildingBlocks-TheApacheWinkRuntime"></a>The Apache Wink Runtime</h4>
+
+<ul>
+	<li><a href="#2ApacheWinkBuildingBlocks-RequestProcessor">Request Processor</a></li>
+	<li><a href="#2ApacheWinkBuildingBlocks-DeploymentConfiguration">Deployment Configuration</a></li>
+	<li><a href="#2ApacheWinkBuildingBlocks-HandlerChains">Handler Chains</a></li>
+</ul>
+
+
+<p><br clear="all" /></p>
+<hr />
+<h1><a name="2ApacheWinkBuildingBlocks-ServiceImplementationBuildingBlockOverview"></a>Service Implementation Building Block Overview</h1>
+
+<p>As mentioned in the "<b>Apache Wink Introduction</b>" section, Apache Wink 1.0 reflects the design principles of a REST web service. It does so by providing the developer with a set of java classes that enable the implementation of "<b>Resources</b>", "<b>Representations</b>" and the association between them. Wink 1.0 also enables the developer to define the resource URI and the "<b>Uniform methods</b>" that are applicable to the resource.</p>
+
+<p><br clear="all" /></p>
+<hr />
+<h2><a name="2ApacheWinkBuildingBlocks-Resource"></a>Resource</h2>
+
+<p>A "<b>resource</b>" represents a serviceable component that enables for the retrieval and manipulation of data. A "<b>resource class</b>" is used to implement a resource by defining the "<b>resource methods</b>" that handle requests by implementing the business logic. A resource is bound or anchored to a URI space by annotating the resource class with the @Path annotation.</p>
+
+<p><br clear="all" /></p>
+<hr />
+<h2><a name="2ApacheWinkBuildingBlocks-Providers"></a>Providers</h2>
+
+<p>A provider is a class that is annotated with the @Provider annotation and implements one or more interfaces defined by the JAX-RS specification. Providers are not bound to any specific resource. The appropriate provider is automatically selected by the Apache Wink runtime according to the JAX-RS specification.  Apache Wink supplies many providers, however, application developers may supply their own which take precedence over any provider in the default runtime.</p>
+
+<p>There are three types of providers defined by the JAX-RS specification:</p>
+<ul>
+	<li>Entry Providers</li>
+	<li>Context Providers</li>
+	<li>Exception Mapping Provider</li>
+</ul>
+
+
+<h3><a name="2ApacheWinkBuildingBlocks-EntityProvider"></a>Entity Provider</h3>
+
+<p>An "<b>Entity Provider</b>" is a class that converts server data into a specific format requested by the client and/or converts a request transmitted by the client into server data. For instance, a String entity provider can turn request entities (message bodies) over the wire into a Java type (java.lang.String).  Entity providers can also turn native Java types such as a java.lang.String into an appropriate response entity.  An entity provider can be restricted to support a limited set of media types using the @javax.ws.rs.Produces and @javax.ws.rs.Consumes annotations. An entity provider is configured to handle a specific server data type by implementing the javax.ws.rs.ext.MessageBodyWriter and/or javax.ws.rs.ext.MessageBodyReader interfaces.</p>
+
+<p><b>Figure 2: Entity Provider Diagram</b></p>
+
+<p>&nbsp; <img src="attachments/2329360/2523203.jpg" align="absmiddle" border="0"/></p>
+
+<h3><a name="2ApacheWinkBuildingBlocks-ContextProvider"></a>Context Provider</h3>
+
+<p>Context providers are used to supply contexts to resource classes and other providers by implementing the javax.ws.rs.ext.ContextResolver interface. For example, if a custom JAXBContext is required to serialize or deserialize JAXB objects, an application can provide a ContextResolver that will return a specific instance of a JAXBContext.  Context providers may restrict the media types that they support using the @javax.ws.rs.Produces annotation.</p>
+
+<p><b>Figure 3: Context Provider Diagram</b></p>
+
+<p> <img src="attachments/2329360/3113002.jpg" align="absmiddle" border="0"/></p>
+
+
+<h3><a name="2ApacheWinkBuildingBlocks-ExceptionMappingProvider"></a>Exception Mapping Provider</h3>
+
+<p>Exception mapping providers map exceptions into an instance of a javax.ws.rs.core.Response by implementing the javax.ws.rs.ext.ExceptionMapper interface. The Response objects can contain response information such as status codes, HTTP headers, and a response entity (message body).  When a resource method throws an exception, the runtime will try to find a suitable ExceptionMapper to "translate" the exception to an appropriate Response object.</p>
+
+<p><b>Figure 4: Exception Mapping Provider Diagram</b></p>
+
+<p> <img src="attachments/2329360/3113003.jpg" align="absmiddle" border="0"/></p>
+
+<p><br clear="all" /></p>
+<hr />
+<h2><a name="2ApacheWinkBuildingBlocks-URIDispatching"></a>URI Dispatching</h2>
+
+<p>Designing an efficient REST web service requires that the application developer understands the resources that comprise the service, how to best identify the resources, and how they relate to one another.</p>
+
+<p>RESTful resources are identified by URIs in most cases related resources have URIs that share common path elements.</p>
+
+<p><b>Figure 5: Apache Wink Logic Flow</b></p>
+
+<p> <img src="attachments/2329360/2523204.jpg" align="absmiddle" border="0" height="406" width="492"/></p>
+
+
+<h4><a name="2ApacheWinkBuildingBlocks-ApacheWinkLogicFlow"></a>Apache Wink Logic Flow</h4>
+
+<p>Figure 5 illustrates the Apache Wink logic flow. The HTTP request sent by the client invokes the "<b>Apache Wink REST Servlet</b>". The REST servlet uses the "<b>Request Processor</b>" and the request URI in order to find, match and invoke the correct resource method.</p>
+
+<h3><a name="2ApacheWinkBuildingBlocks-BookmarksExample"></a>Bookmarks Example</h3>
+
+<p>Throughout this document, various project examples are used in order to describe the functionality and processes that comprise the Apache Wink.<br/>
+In order to explain the REST design principles used in the Apache Wink this developer guide refers to the "<b>Bookmark</b>" example project found in the examples folder located in the Apache Wink distribution.</p>
+
+<p>Refer to the code (using an IDE application) in the example in conjunction with the following explanations and illustrations in this developer guide.</p>
+
+<h4><a name="2ApacheWinkBuildingBlocks-ApacheWinkServletandRequestProcessor"></a>Apache Wink Servlet and Request Processor</h4>
+
+<p><b>Figure 6:&nbsp; Apache Wink REST Servlet and Request Processor for the Bookmark Services</b></p>
+
+<p> <img src="attachments/2329360/2523205.jpg" align="absmiddle" border="0" height="421" width="500"/></p>
+
+
+
+<h4><a name="2ApacheWinkBuildingBlocks-ServerandRequestProcessor"></a>Server and Request Processor</h4>
+
+<p>Figure 6 shows the Apache Wink servlet and request Processor concept in the context of the application server. In the "<b>Bookmarks</b>" example in Figure 6 there are two Resources, the first Resource is associated with the <b>/mybookmarks</b> URI and manages the bookmarks collection, the second resource is associated with the <b>/mybookmarks/{bookmark}</b> Resources and manages an individual bookmark within the collection.</p>
+
+<p>The Resources' defined by the web service and managed by Apache Wink are referred to as <b>"URI space"</b>. The Resources space is the collection of all URI's that exist in the same context. Figure 6 shows the URI space that contains <b>/mybookmarks</b> and <b>/mybookmarks/{bookmarks}</b>.</p>
+
+<h4><a name="2ApacheWinkBuildingBlocks-URISpace"></a>URI Space</h4>
+
+<p>The Bookmarks service URI space consists of the following URI space items and detailed descriptions about their context and functionality.<br/>
+<b>Table 1: URI Management</b></p>
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'> URI space Item <br clear="all" /> </th>
+<th class='confluenceTh'> Description <br clear="all" /> </th>
+</tr>
+<tr>
+<td class='confluenceTd'> <b>/Bookmark/rest</b> <br clear="all" /> </td>
+<td class='confluenceTd'> This URI is the root context of the bookmark service and the entry point of the URI space of the service. An HTTP GET request to this URI returns a "Service Document" which is automatically generated by Apache Wink. The service document provides information about all available collections in the URI space. <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <b>/Bookmark/rest /mybookmarks</b> <br clear="all" /> </td>
+<td class='confluenceTd'> This URI is associated with a collection of bookmarks resources.&nbsp; Clients use the HTTP GET method in order to retrieve a representation of the collection and HTTP POST method in order to create a new item in the collection. <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <b>/Bookmark/rest /mybookmarks/{bookmark}</b> </td>
+<td class='confluenceTd'> This URI template is associated with a single bookmark resource. Clients use the HTTP GET method in order to retrieve a representation of the resource, HTTP PUT method is used in order to update the resource and HTTP DELETE method is used in order to delete the resource. <br clear="all" /> </td>
+</tr>
+</tbody></table>
+
+<p><br clear="all" /></p>
+<hr />
+<h2><a name="2ApacheWinkBuildingBlocks-Assets"></a>Assets</h2>
+
+<p>Assets are classes that contain "<b>web service business logic</b>" implemented by the developer. Each Asset is associated with one or more URI. The Apache Wink dispatcher invokes the Asset, which is associated with the URI found in the HTTP request.</p>
+
+<p>An Asset class can implement one or more methods, each method is associated with a single HTTP method (GET, HEAD, POST, PUT, DELETE etc).&nbsp; The methods can be associated with a MIME type of a produced representation. Methods that handle HTTP verbs of requests with a body (such as PUT, POST) are also associated with the MIME type of the HTTP request.<br/>
+The Asset class can be registered to the Apache Wink using the "Spring context xml" or by using a registration API.</p>
+
+
+
+<p><div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Spring Context Configuration</b><br />For further information regarding the Spring Context, refer to <a href="5.5 Spring Integration.html" title="5.5 Spring Integration">5.5 Spring Integration</a> in section 5 Apache Wink Server.</td></tr></table></div><br clear="all" /></p>
+<hr />
+<h2><a name="2ApacheWinkBuildingBlocks-Annotations"></a>Annotations</h2>
+
+<p>Annotations are a special text notations, or metadata, added to Java version 1.5. Annotations in Java source code can affect both compilation and runtime behavior of the resulting Java classes.<br/>
+JAX-RS is implemented by the use of annotations that are defined in the JAX-RS specification. Apache Wink provides a set of additional annotations that enrich the functionality of the JAX-RS enabled application.</p>
+
+<p>The following table describes the additional Apache Wink annotations:</p>
+
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'> Annotation <br clear="all" /> </th>
+<th class='confluenceTh'> Precedes <br clear="all" /> </th>
+<th class='confluenceTh'> Description <br clear="all" /> </th>
+</tr>
+<tr>
+<td class='confluenceTd'> @Workspace <br clear="all" /> </td>
+<td class='confluenceTd'> Resource <br clear="all" /> </td>
+<td class='confluenceTd'> Associate a "Collection Resource" with a workspace element and collection elements in an APP Service Document <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> @Scope <br clear="all" /> </td>
+<td class='confluenceTd'> Resource /Provider <br clear="all" /> </td>
+<td class='confluenceTd'> Defines the default lifecycle behavior for resources and providers, and the option for controlling the lifecycle through the javax.ws.rs.core.Application class <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> @Parent <br clear="all" /> </td>
+<td class='confluenceTd'> Resource <br clear="all" /> </td>
+<td class='confluenceTd'> Provides the ability to define a base template URI for the URI specified in a resources @Path annotation <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> @Asset <br clear="all" /> </td>
+<td class='confluenceTd'> Class <br clear="all" /> </td>
+<td class='confluenceTd'> Used by the Apache Wink runtime in order to identify an entity as an Asset <br clear="all" /> </td>
+</tr>
+</tbody></table>
+
+<p><br clear="all" /></p>
+<hr />
+<h2><a name="2ApacheWinkBuildingBlocks-URLHandling"></a>URL Handling</h2>
+
+<p>The Apache Wink receives HTTP requests and then dispatches a wrapped HTTP request to the appropriate Resource method.<br/>
+The HTTP request is match to the Resource method based on the HTTP request parameters, the Resource method definitions and the MIME type.</p>
+
+<p><b>Figure 7: URL Request Handling</b></p>
+
+<p> <img src="attachments/2329360/2523210.jpg" align="absmiddle" border="0" height="431" width="425"/></p>
+
+
+<h4><a name="2ApacheWinkBuildingBlocks-RequestHandling"></a>Request Handling</h4>
+
+<p>Figure 7 demonstrates the HTTP Client request path to the URI dispatcher, once the dispatcher receives the request it is then matched according to the HTTP method, URL and MIME type and finally the Resource registry definition.</p>
+
+<p><br clear="all" /></p>
+<hr />
+<h2><a name="2ApacheWinkBuildingBlocks-HTTPMethodsGET%2CPOST%2CPUT%2CDELETEandOPTIONS"></a>HTTP Methods - GET, POST, PUT, DELETE and OPTIONS</h2>
+
+<p>The common HTTP 1.1 methods for the Apache Wink are defined in the following section. This set of methods can be expanded.</p>
+
+<h3><a name="2ApacheWinkBuildingBlocks-MethodUsage"></a>Method Usage</h3>
+
+<p><b>Table 3: HTTP Methods</b></p>
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'> Method <br clear="all" /> </th>
+<th class='confluenceTh'> Safe <br clear="all" /> </th>
+<th class='confluenceTh'> Idempotent <br clear="all" /> </th>
+<th class='confluenceTh'> Cacheable <br clear="all" /> </th>
+</tr>
+<tr>
+<td class='confluenceTd'> GET <br clear="all" /> </td>
+<td class='confluenceTd'> X <br clear="all" /> </td>
+<td class='confluenceTd'> X <br clear="all" /> </td>
+<td class='confluenceTd'> X <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> HEAD <br clear="all" /> </td>
+<td class='confluenceTd'> X <br clear="all" /> </td>
+<td class='confluenceTd'> X <br clear="all" /> </td>
+<td class='confluenceTd'> X <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> PUT <br clear="all" /> </td>
+<td class='confluenceTd'>&nbsp;</td>
+<td class='confluenceTd'> X <br clear="all" /> </td>
+<td class='confluenceTd'>&nbsp;</td>
+</tr>
+<tr>
+<td class='confluenceTd'> POST <br clear="all" /> </td>
+<td class='confluenceTd'>&nbsp;</td>
+<td class='confluenceTd'>&nbsp;</td>
+<td class='confluenceTd'> &#42; <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> DELETE <br clear="all" /> </td>
+<td class='confluenceTd'>&nbsp;</td>
+<td class='confluenceTd'> X <br clear="all" /> </td>
+<td class='confluenceTd'>&nbsp;</td>
+</tr>
+<tr>
+<td class='confluenceTd'> OPTIONS <br clear="all" /> </td>
+<td class='confluenceTd'>&nbsp;</td>
+<td class='confluenceTd'>&nbsp;</td>
+<td class='confluenceTd'>&nbsp;</td>
+</tr>
+</tbody></table>
+
+<h4><a name="2ApacheWinkBuildingBlocks-KeyX"></a>Key - X</h4>
+
+
+<ul>
+	<li><b>Safe</b> &#45; does not affect the server state</li>
+	<li><b>Idempotent</b> &#45; a repeated application of the same method has the same effect as a single application</li>
+	<li><b>Cacheable</b> &#45; a response to a method is cacheable if it meets the requirements for HTTP caching</li>
+	<li><b>&#42;</b> &#45;&nbsp;&nbsp; Responses to this method are not cacheable, unless the response includes an appropriate Cache-Control or Expires header fields. However, the 303 response can be used to direct the user agent to retrieve a cacheable resource.</li>
+</ul>
+
+
+<h3><a name="2ApacheWinkBuildingBlocks-GET"></a>GET</h3>
+
+<p>The GET method is used to retrieve information from a specified URI and is assumed to be a safe and repeatable operation by browsers, caches and other HTTP aware components. This means that the operation must have no side effects and GET method requests can be re-issued.</p>
+
+<h3><a name="2ApacheWinkBuildingBlocks-HEAD"></a>HEAD</h3>
+
+<p>The HEAD method is the same as the GET method except for the fact that the HEAD does not contain message body.</p>
+
+<h3><a name="2ApacheWinkBuildingBlocks-POST"></a>POST</h3>
+
+<p>The POST method is used for operations that have side effects and cannot be safely repeated. For example, transferring money from one bank account to another has side effects and should not be repeated without explicit approval by the user.</p>
+
+<p>The POST method submits data to be processed, for example, from an HTML form, to the identified resource. The data is included in the body of the request. This may result in the creation of a new resource or the updates of existing resources or both.</p>
+
+<h3><a name="2ApacheWinkBuildingBlocks-PUT"></a>PUT</h3>
+
+<p>The PUT method requests that the enclosed entity be stored under the supplied Request-URI. If the Request-URI refers to an already existing resource, the enclosed entity should be considered as a modified version of the one residing on the origin server.</p>
+
+<p>If the Request-URI does not point to an existing resource, and that URI is capable of being defined as a new resource by the requesting user agent, the origin server can create the resource with that URI.</p>
+
+
+<h3><a name="2ApacheWinkBuildingBlocks-DELETE"></a>DELETE</h3>
+
+<p>The DELETE method requests that the origin server delete the resource identified by the Request-URI. This method can be overridden on the origin server.<br/>
+The client cannot be guaranteed that the operation has been carried out, even if the status code returned from the origin server indicates that the action has been completed successfully.</p>
+
+
+<h3><a name="2ApacheWinkBuildingBlocks-OPTIONS"></a>OPTIONS</h3>
+
+<p>The OPTIONS method represents a request for information about the communication options available on the request/response chain identified by the Request-URI.<br/>
+This method allows the client to determine the options and/or requirements associated with a resource, or the capabilities of a server, without implying a resource action or initiating a resource retrieval.</p>
+
+
+<h3><a name="2ApacheWinkBuildingBlocks-BasicURLQueryParameters"></a>Basic URL Query Parameters</h3>
+
+<p>A URL parameter is a name and value pair appended to a URL. The parameter begins with a question mark "<b>?</b>" and takes the form of name=value.<br/>
+If more than one URL parameter exists, each parameter is separated by an ampersand "<b>&amp;</b>" symbol. URL parameters enable the client to send data as part of the URL to the server.</p>
+
+<p>When a server receives a request and parameters are appended to the URL of the request, the server uses these parameters as if they were sent as part of the request body. There are several predefined URL parameters recognized by Apache Wink when using Wink providers. The following table lists the parameters commonly used in web service URLs. These special URL parameters are defined in the "<b>RestConstants</b>" class.</p>
+
+<h4><a name="2ApacheWinkBuildingBlocks-QueryParameters"></a>Query Parameters</h4>
+
+<p><b>Table 4: URL Parameters</b></p>
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'> Parameter <br clear="all" /> </th>
+<th class='confluenceTh'> Description <br clear="all" /> </th>
+<th class='confluenceTh'> Value <br clear="all" /> </th>
+</tr>
+<tr>
+<td class='confluenceTd'> alt <br clear="all" /> </td>
+<td class='confluenceTd'> Provides an alternative representation of the specified MIME type. Apache Wink recognizes this as a representation request of the highest priority. <br clear="all" /> </td>
+<td class='confluenceTd'> MIME type, e.g. <br clear="all" />
+"text%2Fplain" <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> absolute-urls <br clear="all" /> </td>
+<td class='confluenceTd'> Indicates to Apache Wink that the generated&nbsp; links in the response should be absolute, mutual exclusive with the relative-urls parameter <br clear="all" /> </td>
+<td class='confluenceTd'> NONE <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> relative-urls <br clear="all" /> </td>
+<td class='confluenceTd'> Indicates to Apache Wink that the generated&nbsp; links in the response should be relative, mutual exclusive with the absolute-urls parameter <br clear="all" /> </td>
+<td class='confluenceTd'> NONE <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> callback <br clear="all" /> </td>
+<td class='confluenceTd'> Wrap javascript representation in callback function, is relevant when requested with an application/json MIME type. <br clear="all" /> </td>
+<td class='confluenceTd'> name of callback function. <br clear="all" />
+For example, "myfunc" <br clear="all" /> </td>
+</tr>
+</tbody></table>
+
+<h5><a name="2ApacheWinkBuildingBlocks-CombiningURLParameters"></a>Combining URL Parameters</h5>
+
+<p>A single URL can contain more than one URL parameter, example <b>"?alt=text%2Fjavascript &amp;callback=myfunc"</b>(where "%2F" represents escaped "/").</p>
+
+<p><br clear="all" /></p>
+<hr />
+<h2><a name="2ApacheWinkBuildingBlocks-ApacheWinkBuildingBlocksSummary"></a>Apache Wink Building Blocks Summary</h2>
+
+<p>The previous section "<b>Service Implementation Building Blocks</b>" outlines the basic precepts and building blocks that comprise the service side of Apache Wink.<br/>
+In order to understand the relationship between the building blocks that comprise Apache Wink a set of example applications have been designed and built that provide a reference point that demonstrate a rudimentary understanding about the functionality of Apache Wink.</p>
+
+<h3><a name="2ApacheWinkBuildingBlocks-ApacheWinkExamples"></a>Apache Wink Examples</h3>
+
+<p>The following examples applications are used in this "<b>Apache Wink Developer Guide</b>".</p>
+
+<ul>
+	<li>Bookmarks</li>
+	<li>HelloWorld</li>
+	<li>QADefects</li>
+</ul>
+
+
+<h4><a name="2ApacheWinkBuildingBlocks-BookmarksProject"></a>Bookmarks Project</h4>
+
+<p>This developer guide uses the bookmarks example application in order to describe the logic flow process within Apache Wink.<br/>
+Refer to the comments located in the "<b>Bookmarks</b>" example application code for in-depth explanations about the methods used to build the bookmarks application.</p>
+
+<h4><a name="2ApacheWinkBuildingBlocks-HelloWorldProject"></a>HelloWorld Project</h4>
+
+<p>Complete the step-by-step "<b>HelloWorld</b>" tutorial in chapter 3 "<b>Getting Started with Apache Wink</b>" and then follow the installation instructions on page xx, in order to view the "<b>Bookmarks</b>" example application from within the Eclipse IDE.</p>
+
+<h4><a name="2ApacheWinkBuildingBlocks-QADefects"></a>QADefects</h4>
+
+<p>The QADefects example application illustrates the advanced functionality of Apache Wink by implementing most of the features provided by the Apache Wink (Runtime) framework.</p>
+
+<p><br clear="all" /></p>
+<hr />
+<h1><a name="2ApacheWinkBuildingBlocks-ApacheWinkClientComponentBasicsOverview"></a>Apache Wink Client Component Basics Overview</h1>
+
+<p>The Apache Wink Client interacts with REST Web-Services. It maps REST concepts to Java classes and encapsulates underlying REST related standards and protocols, as well as providing a plug-in mechanism for raw HTTP streaming data manipulation. This mechanism also provides the ability to embed cross application functionality on the client side, such as security, compression and caching.</p>
+
+
+<p><b>Figure 8: Apache Wink Client Simplified Breakdown</b></p>
+
+<p><img src="attachments/2329360/3113001.jpg" align="absmiddle" border="0"/></p>
+
+
+
+
+
+<p><b>Figure 8</b>: The illustration shows the basic elements that comprise the Apache Wink Client. The Apache Wink Client utilizes the providers mechanism defined by the JAX-RS specification to perform reading and writing of java objects. The Apache Wink Client is pre-initialized with the same providers that are predefined by the Apache Wink JAX-RS server implementation.</p>
+
+<p><br clear="all" /></p>
+<hr />
+<h1><a name="2ApacheWinkBuildingBlocks-ApacheWinkClientComponents"></a>Apache Wink Client Components</h1>
+
+<p>The Apache Wink Client is comprised of several key elements that together create a simple and convenient framework for the consumption of REST based web services. The client is an abstraction of REST concepts modeled into simple java classes that encapsulate the underlying HTTP protocol, used for the service invocation.</p>
+
+<p>The Apache Wink Client uses the java HttpURLConnection class for the HTTP invocation. The Apache Wink Client also provides a module that utilizes the Apache HTTP Client instead of the default HttpURLConnection class.</p>
+
+<p>The following section provides an overview of the key elements and classes that comprise the Apache Wink Client.</p>
+
+<h2><a name="2ApacheWinkBuildingBlocks-RestClientClass"></a>RestClient Class</h2>
+
+<p>The RestClient class is the central access point to Apache Wink Client. It provides the user with functionality that enables the creation of new Resource instances. The RestClient provides the user with the ability to set different configuration parameters and custom JAX-RS providers and propagates them to the created resources.</p>
+
+<h2><a name="2ApacheWinkBuildingBlocks-ResourceInterface"></a>Resource Interface</h2>
+
+<p>The Resource interface represents a single web resource located at a specific URL, enabling for the manipulation and retrieval of the resource by the invocation of different HTTP methods on the resource instance. The resource interface is implemented following the Builder design pattern so method calls can be easily aggregated and in order to enable easy construction of requests and setting of the resource properties prior to invocation.</p>
+
+<h2><a name="2ApacheWinkBuildingBlocks-ClientRequestInterface"></a>ClientRequest Interface</h2>
+
+<p>The ClientRequest interface represents a request issued by invoking any one of the invocation methods on a Resource. An instance of a ClientRequest is created at the beginning of an invocation and passed to all the client handlers defined on the client that was used for the invocation.</p>
+
+<h2><a name="2ApacheWinkBuildingBlocks-ClientResponseInterface"></a>ClientResponse Interface</h2>
+
+<p>The ClientResponse interface represents an HTTP response that is received after invoking any one of the invocation methods on a Resource. An instance of a ClientResponse is created by the ConnectionHandler at the end of the handler chain, and is returned from every handler on the chain.</p>
+
+<h2><a name="2ApacheWinkBuildingBlocks-ClientConfigClass"></a>ClientConfig Class</h2>
+
+<p>The ClientConfig class provides client configuration when instantiating a new RestClient. The ClientConfig is implemented using the Builder design pattern so method calls can be easily aggregated. Custom Providers and client Handlers are set on the ClientConfig instance prior to the creation of the RestClient.</p>
+
+<h2><a name="2ApacheWinkBuildingBlocks-ClientHandlerInterface"></a>ClientHandler Interface</h2>
+
+<p>Client handlers are used to incorporate cross invocation functionality. The ClientHandler interface is implemented by client handlers, and the handle() method is invoked for every request invocation in order to allow the handler to perform custom actions during the request invocation.</p>
+
+
+<h2><a name="2ApacheWinkBuildingBlocks-InputStreamAdapterInterface"></a>InputStreamAdapter Interface</h2>
+
+<p>The InputStreamAdapter interface is used to wrap the response input stream with another input stream in order to allow the manipulation of the response entity stream. The adapt() method is called after reading the response status code and response headers, and before returning to the ClientResponse to the handlers on the chain.</p>
+
+<h2><a name="2ApacheWinkBuildingBlocks-OutputStreamAdapterInterface"></a>OutputStreamAdapter Interface</h2>
+
+<p>The OutputStreamAdapter interface is used to wrap the request output stream with another output stream to allow the manipulation of the request entity stream. The adapt() method is called before writing the request headers to allow the adapter to manipulate the request.</p>
+
+<h2><a name="2ApacheWinkBuildingBlocks-EntityTypeClass"></a>EntityType Class</h2>
+
+<p>The EntityType is used to specify the class type and the generic type of responses. Typically, an anonymous "<b>EntityType</b>" instance is created in order to specify the response type, as is shown in the following code example:</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">Resource resource = client.resource(uri);
+List&lt;<span class="code-object">String</span>&gt; list = resource.get(<span class="code-keyword">new</span> EntityType&lt;List&lt;<span class="code-object">String</span>&gt;&gt;() {});
+</pre>
+</div></div>
+
+<h2><a name="2ApacheWinkBuildingBlocks-ApacheHttpClientConfigClass"></a>ApacheHttpClientConfig Class</h2>
+
+<p>The "<b>ApacheHttpClientConfig</b>" Configuration object configures the Apache Wink Client to use the Apache HttpClient as the underlying HTTP client. The following code snippet, demonstrates the typical usage:</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java"><span class="code-comment">// creates the client that uses Apache DefaultHttpClient as the underlying Http client.
+</span>RestClient client = <span class="code-keyword">new</span> RestClient(<span class="code-keyword">new</span> ApacheHttpClientConfig(<span class="code-keyword">new</span> DefaultHttpClient()));
+
+<span class="code-comment">// creates the resource
+</span>Resource resource = client.resource(<span class="code-quote">"http:<span class="code-comment">//myhost:80/my/service"</span>);
+</span>
+<span class="code-comment">// invokes a GET method on the resource and receives the response entity as a string
+</span><span class="code-object">String</span> entity = resource.get(<span class="code-object">String</span>.class);
+...
+</pre>
+</div></div>
+<p><br clear="all" /></p>
+<hr />
+<h1><a name="2ApacheWinkBuildingBlocks-TheApacheWinkRuntime"></a>The Apache Wink Runtime</h1>
+
+<p>The Apache Wink runtime is deployed on a JEE environment and is configured by defining the RestServlet in the web.xml file of the application. This servlet is the entry point of all the HTTP requests targeted for web services, and passes the request and response instances to the Wink engine for processing.</p>
+
+<p><b>Figure 9: Apache Wink Request Processor</b> <b>Architecture</b><br/>
+<img src="attachments/2329360/2523215.jpg" align="absmiddle" border="0" height="312" width="490"/></p>
+
+<p>The diagram illustrates the core components of the Apache Wink runtime. The Wink engine is the RequestProcessor. It builds an instance of a MessageContext with all of the required information for the request and passes it through the engine handler chains. The handler chains are responsible for serving the request, invoking the required resource method and finally generating a response.<br/>
+In case of an error, the RequestProcessor invokes the Error chain with the generated exception for producing the appropriate response.<br/>
+The Apache Wink runtime maintains providers and resources in two registries, the "<b>providers registry</b>" and the "resource registry" utilizing them during request processing.</p>
+
+<p><br clear="all" /></p>
+<hr />
+<h2><a name="2ApacheWinkBuildingBlocks-RequestProcessor"></a>Request Processor</h2>
+
+<p>The RequestProcessor is the Apache Wink engine, that is initialized by the RestServlet and is populated with an instance of a DeploymentConfiguration.<br/>
+When a request is passed to the handleRequest() method of the RequestProcessor, a new instance of a&nbsp; MessageContext is created.<br/>
+The MessageContext contains all of the information that is required for the Wink runtime to handle the request. The RequestProcessor first invokes the Request Handler Chain and then the Response Handler Chain.</p>
+
+<p>If an exception occurs during any stage of the request processing, the RequestProcessor invokes the Error Handler Chain for processing the exception.</p>
+
+<p><br clear="all" /></p>
+<hr />
+<h2><a name="2ApacheWinkBuildingBlocks-DeploymentConfiguration"></a>Deployment Configuration</h2>
+
+<p>The Apache Wink runtime is initialized with an instance of a Deployment Configuration. The Deployment Configuration holds the runtime configuration, including the handler chains, registries, configuration properties.<br/>
+The Deployment Configuration is initialized with an instance of a JAX-RS Application used for obtaining user resources and providers.</p>
+
+<p><br clear="all" /></p>
+<hr />
+<h3><a name="2ApacheWinkBuildingBlocks-CustomizationoftheHandlersChain"></a>Customization of the Handlers Chain</h3>
+
+<p>The handler chain is customized by extending the org.apache.wink.server.handlers.HandlersFactory class, overriding specific methods and specifying the new class in the web.xml file of the application.<br/>
+In order to specify a different HandlersFactory class instead of the default handlers, specify an init parameter for a custom properties file to be loaded by the RestServlet.  Then, the value of the wink.handlersFactoryClass property must be set as the fully qualified name of the customized handlers class in the properties file.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml"><span class="code-tag">&lt;servlet&gt;</span>
+ <span class="code-tag">&lt;servlet-name&gt;</span>restSdkService<span class="code-tag">&lt;/servlet-name&gt;</span>
+ <span class="code-tag">&lt;servlet-class&gt;</span>
+ org.apache.wink.server.internal.servlet.RestServlet
+ <span class="code-tag">&lt;/servlet-class&gt;</span>
+ <span class="code-tag">&lt;init-param&gt;</span>
+ <span class="code-tag">&lt;param-name&gt;</span>propertiesLocation<span class="code-tag">&lt;/param-name&gt;</span>
+ <span class="code-tag">&lt;param-value&gt;</span>path/to/my-wink-properties.properties<span class="code-tag">&lt;/param-value&gt;</span>
+ <span class="code-tag">&lt;/init-param&gt;</span>
+<span class="code-tag">&lt;/servlet&gt;</span>
+</pre>
+</div></div>
+<p>In the my-wink-properties properties file:</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml">wink.handlersFactoryClass=org.apache.wink.MyCustomHandlersFactory
+</pre>
+</div></div>
+<p>See the JavaDoc for the HandlersFactory API.</p>
+
+<p><br clear="all" /></p>
+<hr />
+<h2><a name="2ApacheWinkBuildingBlocks-HandlerChains"></a>Handler Chains</h2>
+
+<p>The handler chain pattern is used by the Wink runtime for implementing the core functionalities.<br/>
+There are three handler chains utilized by the Wink runtime:</p>
+
+<ul>
+	<li>RequestHandlersChain</li>
+	<li>ResponseHandlersChain</li>
+	<li>ErrorHandlersChain</li>
+</ul>
+
+
+
+<p><div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Handler Chains</b><br />For further information regarding the "<b>Handler Chains</b>", refer to section 5 <b>Apache Wink Server</b>, <a href="5.7 Handler Chain - Runtime Extension.html" title="5.7 Handler Chain - Runtime Extension">5.7 Handler Chain - Runtime Extension</a> </td></tr></table></div><br clear="all" /></p>
+<hr />
+<h2><a name="2ApacheWinkBuildingBlocks-Registries"></a>Registries</h2>
+
+<p>The Apache Wink runtime utilizes two registries for maintaining the JAX-RS resources and providers. Both registries maintain their elements in a sorted state according to the JAX-RS specification for increasing performance during request processing. In addition to the JAX-RS specification sorting, Wink supports the prioritization of resources and providers.</p>
+
+
+<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Resources and Providers Prioritization</b><br />For further information regarding &#42;"<b>Resources and Providers Prioritization</b>", refer to the section <a href="5.1 Registration and Configuration.html#5.1RegistrationandConfiguration-Priorities">5.1 Registration and Configuration</a>. </td></tr></table></div>
+
+<h3><a name="2ApacheWinkBuildingBlocks-ResourceRegistry"></a>Resource Registry</h3>
+
+<p><b>Firgure 10: Resource Registry Architecture</b><br/>
+<img src="attachments/2329360/2523216.jpg" align="absmiddle" border="0"/></p>
+
+<p>The resources registry maintains all of the root resources in the form of Resource Records.<br/>
+A Resource Record holds the following:</p>
+<ul>
+	<li><b>URI Template Processor</b> &#45; represents a URI template associated with a resource. Used during the resource matching process.</li>
+	<li><b>Resource Metadata</b> &#45; holds the resource metadata collected from the resource annotations.</li>
+	<li><b>Sub-Resource Records</b> &#45; records of all the sub-resources (methods and locators) collected from the sub-resource annotations.</li>
+	<li><b>Resource Factory</b> &#45; a factory that retrieves an instance of the resource in accordance to the creation method defined for the resource.<br/>
+Possible creation methods include:
+	<ul>
+		<li>
+		<ul>
+			<li>singleton</li>
+			<li>prototype</li>
+			<li>spring configuration</li>
+			<li>user customizable</li>
+		</ul>
+		</li>
+	</ul>
+	</li>
+</ul>
+
+
+				    					    <br/>
+                        <div class="tabletitle">
+                            <a name="attachments">Attachments:</a>
+                        </div>
+
+                        <div class="greybox" align="left">
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2329360/2523203.jpg">Entity Provider.jpg</a> (image/jpeg)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2329360/2523204.jpg">Apache Wink Logic Workflow.jpg</a> (image/jpeg)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2329360/2523205.jpg">Servlet Dispatcher Concept 2.jpg</a> (image/jpeg)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2329360/2523210.jpg">URL Handling.jpg</a> (image/jpeg)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2329360/2523213.jpg">Simplified Client.jpg</a> (image/jpeg)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2329360/2523212.jpg">Simplified Client.jpg</a> (image/jpeg)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2329360/2523214.jpg">Simplified Client2.jpg</a> (image/jpeg)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2329360/2523215.jpg">Winky Spanky Diagram.jpg</a> (image/jpeg)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2329360/2523216.jpg">Resource Registry.jpg</a> (image/jpeg)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2329360/3113001.jpg">Wink Client Diagram.jpg</a> (image/jpeg)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2329360/3113002.jpg">Context Provider.jpg</a> (image/jpeg)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2329360/3113003.jpg">Exception Mapping Provider.jpg</a> (image/jpeg)
+                                <br/>
+                                                    </div>
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/3 Getting Started with Apache Wink.html b/src/site/resources/1.0/html/3 Getting Started with Apache Wink.html
new file mode 100644
index 0000000..a26dad1
--- /dev/null
+++ b/src/site/resources/1.0/html/3 Getting Started with Apache Wink.html
@@ -0,0 +1,92 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : 3 Getting Started with Apache Wink</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : 3 Getting Started with Apache Wink
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Sep 23, 2009 by <font color="#0050B2">michael</font>.
+				    </div>
+
+				    <h1><a name="3GettingStartedwithApacheWink-GettingStartedwithApacheWink"></a>Getting Started with Apache Wink</h1>
+
+
+<p>Apache Wink consists of a main library and an additional set of dependant libraries. The Apache Wink distribution also includes an "<b>examples</b>" folder that contains all of the "<b>example projects</b>" referred to in this developer guide.</p>
+
+<h3><a name="3GettingStartedwithApacheWink-Thissectioncontainsthefollowing%3A"></a>This section contains the following:</h3>
+
+<ul>
+	<li><a href="#3GettingStartedwithApacheWink-ApacheWinkDistributionFiles">Apache Wink Distribution Files</a></li>
+	<li><a href="#3GettingStartedwithApacheWink-CreatingaProjectusingtheApacheWink">Creating a Project using the Apache Wink</a></li>
+	<li><a href="#3GettingStartedwithApacheWink-TestingtheProjectDeployment">Testing the Project Deployment</a></li>
+	<li><a href="#3GettingStartedwithApacheWink-HelloWorldDetailedDescription">HelloWorld Detailed Description</a></li>
+	<li><a href="#3GettingStartedwithApacheWink-HelloWorldJ2EEDeploymentDescriptorweb.xml">HelloWorld J2EE Deployment Descriptor - web.xml</a></li>
+	<li><a href="#3GettingStartedwithApacheWink-HelloWorldSpringDeploymentDescriptorHelloWorldContextserver.xml">HelloWorld Spring Deployment Descriptor HelloWorldContext-server.xml</a></li>
+	<li><a href="#3GettingStartedwithApacheWink-BookmarkExampleApplication">Bookmark Example Application</a></li>
+	<li><a href="#3GettingStartedwithApacheWink-ApacheWinkGettingStartedSummary">Apache Wink Getting Started Summary</a></li>
+</ul>
+
+
+<h1><a name="3GettingStartedwithApacheWink-GettingStartedwithApacheWinkOverview"></a>Getting Started with Apache Wink Overview</h1>
+
+<p>In order to gain an in-depth understanding of the Apache Wink SDK a series of example projects have been designed to help the developer clarify the underlying principles and usage of the Apache Wink.<br/>
+The following sections provide a detailed step-by-step implementation and deployment of the HelloWorld example application using the Eclipse IDE as the default development environment.</p>
+
+<h2><a name="3GettingStartedwithApacheWink-ApacheWinkDistributionFiles"></a>Apache Wink Distribution Files</h2>
+
+<p>TBD</p>
+
+<h2><a name="3GettingStartedwithApacheWink-CreatingaProjectusingtheApacheWink"></a>Creating a Project using the Apache Wink</h2>
+
+<p>TBD</p>
+
+<h2><a name="3GettingStartedwithApacheWink-TestingtheProjectDeployment"></a>Testing the Project Deployment</h2>
+
+<p>TBD</p>
+
+<h2><a name="3GettingStartedwithApacheWink-HelloWorldDetailedDescription"></a>HelloWorld Detailed Description</h2>
+
+<p>TBD</p>
+
+<h2><a name="3GettingStartedwithApacheWink-HelloWorldJ2EEDeploymentDescriptorweb.xml"></a>HelloWorld J2EE Deployment Descriptor - web.xml</h2>
+
+<p>TBD</p>
+
+<h3><a name="3GettingStartedwithApacheWink-HelloWorldSpringDeploymentDescriptorHelloWorldContextserver.xml"></a>HelloWorld Spring Deployment Descriptor HelloWorldContext-server.xml</h3>
+
+<p>TBD</p>
+
+<h2><a name="3GettingStartedwithApacheWink-BookmarkExampleApplication"></a>Bookmark Example Application</h2>
+
+<p>TBD</p>
+
+
+<h2><a name="3GettingStartedwithApacheWink-ApacheWinkGettingStartedSummary"></a>Apache Wink Getting Started Summary</h2>
+
+<p>TBD</p>
+
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/4 JAX-RS Concepts.html b/src/site/resources/1.0/html/4 JAX-RS Concepts.html
new file mode 100644
index 0000000..e74bcb6
--- /dev/null
+++ b/src/site/resources/1.0/html/4 JAX-RS Concepts.html
@@ -0,0 +1,142 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : 4 JAX-RS Concepts</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : 4 JAX-RS Concepts
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Sep 16, 2009 by <font color="#0050B2">michael</font>.
+				    </div>
+
+				    <h1><a name="4JAX-RSConcepts-JAXRSConcepts"></a>JAX-RS Concepts</h1>
+
+<p>JAX-RS (JSR 311) is the latest JCP specification that provides a Java based API for REST Web services over the HTTP protocol. The JAX-RS specification is an annotation based server side API.</p>
+
+<h2><a name="4JAX-RSConcepts-ApplyingJAXRStoApacheWink"></a>Applying JAX-RS to Apache Wink</h2>
+
+<p><a href="http://incubator.apache.org/wink/">Apache Wink</a> is a full implementation of the JAX-RS 1.0 specification, providing a rich set of features and expansions that extend and supplement the JAX-RS specification. Apache Wink is designed to be an easy to use, production quality and efficient implementation.</p>
+
+<p>The Apache Wink architecture enables the incorporation of custom functionality via the use of handlers that provide for the manipulation of requests, Apache Wink also provides a powerful client module for the consumption of REST web services and is bundled with a range of built-in Providers that enable the developer to quickly implement applications that make use of industry standard formats such as XML, ATOM, APP, RSS, JSON, CSV, HTML.</p>
+
+<h3><a name="4JAX-RSConcepts-DevelopingRESTApplications"></a>Developing REST Applications</h3>
+
+<p>For those new to JAX-RS or developing REST applications, follow this in-progress developer guide.  If you have comments or questions, send an e-mail to the appropriate <a href="http://cwiki.apache.org/confluence/display/WINK/Index" title="Index">Apache Wink mailing lists</a>.</p>
+
+<p>While this developer guide covers common scenarios, it is not intended to detail the JAX-RS specification itself.  Please read the (brief yet understandable) specification if it is available to you.</p>
+
+<h2><a name="4JAX-RSConcepts-GettingStartedASimpleJAXRSApplicationJAXRSGettingStarted"></a><a href="JAX-RS Getting Started.html" title="JAX-RS Getting Started">Getting Started - A Simple JAX-RS Application</a></h2>
+
+<ul>
+	<li>Creating a Resource</li>
+	<li>Creating a javax.ws.rs.core.Application sub-class</li>
+	<li>Packaging Apache Wink with a Web Application</li>
+	<li>Installation and Running the Application</li>
+</ul>
+
+
+<h2><a name="4JAX-RSConcepts-ApplicationConfigurationJAXRSApplicationConfiguration"></a><a href="JAX-RS Application Configuration.html" title="JAX-RS Application Configuration">Application Configuration</a></h2>
+
+<ul>
+	<li>javax.ws.rs.core.Application subclass</li>
+	<li>Container environment information</li>
+</ul>
+
+
+<h2><a name="4JAX-RSConcepts-Resources%2CHTTPMethods%2CandPathsJAXRSResources%2CHTTPMethods%2CandPaths"></a><a href="JAX-RS Resources, HTTP Methods, and Paths.html" title="JAX-RS Resources, HTTP Methods, and Paths">Resources, HTTP Methods, and Paths</a></h2>
+
+<ul>
+	<li><a href="JAX-RS Resources, HTTP Methods, and Paths.html#JAX-RSResources%2CHTTPMethods%2CandPaths-RootResource">Root Resource Methods</a></li>
+	<li><a href="JAX-RS Resources, HTTP Methods, and Paths.html#JAX-RSResources%2CHTTPMethods%2CandPaths-javax.ws.rs.core.Response">javax.ws.rs.core.Response</a></li>
+	<li><a href="JAX-RS Resources, HTTP Methods, and Paths.html#JAX-RSResources%2CHTTPMethods%2CandPaths-HTTPMethods">HTTP Methods</a></li>
+	<li><a href="JAX-RS Resources, HTTP Methods, and Paths.html#JAX-RSResources%2CHTTPMethods%2CandPaths-SubresourceMethod">Subresource Methods</a></li>
+	<li><a href="JAX-RS Resources, HTTP Methods, and Paths.html#JAX-RSResources%2CHTTPMethods%2CandPaths-SubresourceLocator">Subresource Locators</a></li>
+	<li>Regular Expressions</li>
+</ul>
+
+
+<h2><a name="4JAX-RSConcepts-RequestandResponseEntities%28MessageBodies%29andMediaTypesJAXRSRequestandResponseEntities"></a><a href="JAX-RS Request and Response Entities.html" title="JAX-RS Request and Response Entities">Request and Response Entities (Message Bodies) and Media Types</a></h2>
+
+<ul>
+	<li><a href="JAX-RS Request and Response Entities.html#JAX-RSRequestandResponseEntities-ConsumesAndProduces">Produces/Consumes annotations</a></li>
+	<li>ATOM</li>
+	<li>XML</li>
+	<li>JSON</li>
+	<li><a href="JAX-RS Request and Response Entities.html#JAX-RSRequestandResponseEntities-JAXRSStandardEntityProviders">Standard Entity Parameter Types</a></li>
+	<li>Custom application provided Message Body Readers/Writers</li>
+	<li><a href="JAX-RS Request and Response Entities.html#JAX-RSRequestandResponseEntities-TransferEncoding">Transfer Encoding</a></li>
+	<li><a href="JAX-RS Request and Response Entities.html#JAX-RSRequestandResponseEntities-ContentEncoding">Content Encoding</a></li>
+</ul>
+
+
+<h2><a name="4JAX-RSConcepts-ParametersJAXRSParameters"></a><a href="JAX-RS Parameters.html" title="JAX-RS Parameters">Parameters</a></h2>
+
+<ul>
+	<li><a href="JAX-RS Parameters.html#JAX-RSParameters-QueryParameter">Query Parameters</a></li>
+	<li><a href="JAX-RS Parameters.html#JAX-RSParameters-PathParameter">Path Parameters</a></li>
+	<li><a href="JAX-RS Parameters.html#JAX-RSParameters-MatrixParameter">Matrix Parameters</a></li>
+	<li><a href="JAX-RS Parameters.html#JAX-RSParameters-HeaderParameter">Header Parameters</a></li>
+	<li><a href="JAX-RS Parameters.html#JAX-RSParameters-CookieParameter">Cookie Parameters</a></li>
+</ul>
+
+
+<h2><a name="4JAX-RSConcepts-HTTPHeadersJAXRSHTTPHeaders"></a><a href="JAX-RS HTTP Headers.html" title="JAX-RS HTTP Headers">HTTP Headers</a></h2>
+
+<ul>
+	<li><a href="JAX-RS HTTP Headers.html#JAX-RSHTTPHeaders-RequestHeaders">Common HTTP Request Headers</a></li>
+	<li><a href="JAX-RS HTTP Headers.html#JAX-RSHTTPHeaders-ResponseHeaders">Common HTTP Response Headers</a></li>
+</ul>
+
+
+<h2><a name="4JAX-RSConcepts-ContentNegotiationJAXRSContentNegotiation"></a><a href="JAX-RS Content Negotiation.html" title="JAX-RS Content Negotiation">Content Negotiation</a></h2>
+
+<ul>
+	<li><a href="JAX-RS Content Negotiation.html#JAX-RSContentNegotiation-URL">Using URIs to identify content type</a></li>
+	<li><a href="JAX-RS Content Negotiation.html#JAX-RSContentNegotiation-Parameter">Using parameters to identify content type</a></li>
+	<li><a href="JAX-RS Content Negotiation.html#JAX-RSContentNegotiation-AcceptHeader">Using Accept headers</a></li>
+</ul>
+
+
+<h2><a name="4JAX-RSConcepts-UsingRequestContextInformationJAXRSContextInformation"></a><a href="JAX-RS Context Information.html" title="JAX-RS Context Information">Using Request Context Information</a></h2>
+
+<ul>
+	<li><a href="JAX-RS Context Information.html#JAX-RSContextInformation-HttpHeaders">HTTP Headers</a></li>
+	<li><a href="JAX-RS Context Information.html#JAX-RSContextInformation-UriInfo">URI Information</a></li>
+	<li><a href="JAX-RS Context Information.html#JAX-RSContextInformation-SecurityContext">Security Information</a></li>
+	<li><a href="JAX-RS Context Information.html#JAX-RSContextInformation-Request">Request</a></li>
+	<li><a href="JAX-RS Context Information.html#JAX-RSContextInformation-Providers">Providers</a></li>
+</ul>
+
+
+<h2><a name="4JAX-RSConcepts-CachingJAXRSCaching"></a><a href="JAX-RS Caching.html" title="JAX-RS Caching">Caching</a></h2>
+
+<ul>
+	<li>Expires</li>
+	<li>Cache-Control</li>
+</ul>
+
+
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/5 Apache Wink Server.html b/src/site/resources/1.0/html/5 Apache Wink Server.html
new file mode 100644
index 0000000..704d949
--- /dev/null
+++ b/src/site/resources/1.0/html/5 Apache Wink Server.html
@@ -0,0 +1,146 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : 5 Apache Wink Server</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : 5 Apache Wink Server
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Oct 14, 2009 by <font color="#0050B2">michael</font>.
+				    </div>
+
+				    <h1><a name="5ApacheWinkServer-ApacheWinkServerModule"></a>Apache Wink Server Module</h1>
+
+<p>The following section describes the Apache Wink Server and provides a detailed description of the Apache Wink Server component and its functionality.</p>
+
+
+
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'><h3><a name="5ApacheWinkServer-Contents"></a>Contents </h3></th>
+</tr>
+<tr>
+<td class='confluenceTd'> <a href="5.1 Registration and Configuration.html" title="5.1 Registration and Configuration">5.1 Registration and Configuration</a><br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <a href="5.2 Annotations.html" title="5.2 Annotations">5.2 Annotations</a><br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <a href="5.3 Resource Matching.html" title="5.3 Resource Matching">5.3 Resource Matching</a><br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <a href="5.4 APP Service Document.html" title="5.4 APP Service Document">5.4 APP. Service Document</a><br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <a href="5.5 Spring Integration.html" title="5.5 Spring Integration">5.5 Spring Integration</a><br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <a href="5.6 WebDAV Extension.html" title="5.6 WebDAV Extension">5.6 WebDAV Extension</a><br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <a href="5.7 Handler Chain - Runtime Extension.html" title="5.7 Handler Chain - Runtime Extension">5.7 Handler Chain</a><br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <a href="5.8 Link Builder.html" title="5.8 Link Builder">5.8 Link Builder</a><br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <a href="5.9 Assets.html" title="5.9 Assets">5.9 Assets</a><br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <a href="5.10 Admin Views.html" title="5.10 Admin Views">5.10 Admin Views</a><br clear="all" /> </td>
+</tr>
+</tbody></table>
+
+<h2><a name="5ApacheWinkServer-ApacheWinkServerOverview"></a>Apache Wink Server Overview</h2>
+
+<p>The Apache Wink Server module is a complete implementation of the JAX-RS v1.0 specification. In addition to the core implementation, the Wink Server module provides a set of additional features that are designed to facilitate the development of RESTful Web services. The framework is easy to extend and to enrich with new functionality.</p>
+
+<h2><a name="5ApacheWinkServer-MainFeatures"></a>Main Features</h2>
+
+<p>The Apache Wink Server main features are as follows:</p>
+
+<ul>
+	<li>Is a complete implementation of the JAX-RS v1.0 specification</li>
+	<li>Provides out-of-the-box Java object models for Atom, Json, RSS, APP, CSV, HTML, Multipart and OpenSearch along with providers to serialize and deserialize these models</li>
+	<li>Highly configurable  and flexible runtime functionality</li>
+	<li>Provides a Handlers mechanism for manipulation of HTTP request and response messages</li>
+	<li>Automatic generation of APP document for collection resources</li>
+	<li>Spring integration</li>
+	<li>Provides support for WebDAV through the WebDAV extension</li>
+	<li>Provides an in-depth administration view of the runtime registries</li>
+</ul>
+
+
+
+<h3><a name="5ApacheWinkServer-ApacheWinkHighLevelServerArchitectureOverview"></a>Apache Wink High Level Server Architecture Overview</h3>
+
+<p>The following diagram illustrates the general architecture of the Apache Wink server runtime.</p>
+
+
+<p><img src="attachments/2851038/4751373.jpg" align="absmiddle" border="0"/></p>
+
+<p>The Apache Wink server runtime layer receives incoming HTTP requests from the hosting container. Once a request is received the Apache Wink server runtime initiates a new request session by creating a message context that is passed through the handlers chain which consists of system and user defined handlers.</p>
+
+<p>Initially the runtime passes the message context through the handlers responsible for finding the resources and resource methods that match the request according to the JAX-RS specification. If required, the incoming request is de-serialized using the appropriate provider. Once the injectable parameters are ready for injection the matched resource method is invoked and the returned response object is then passed through the handler chain in order to select and activate the appropriate provider for serialization as the HTTP response.</p>
+
+				    					    <br/>
+                        <div class="tabletitle">
+                            <a name="attachments">Attachments:</a>
+                        </div>
+
+                        <div class="greybox" align="left">
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2851038/3112967.jpg">Wink Logo.jpg</a> (image/jpeg)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2851038/3112968.jpg">Wink Logo.jpg</a> (image/jpeg)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2851038/3112966.jpg">Wink Logo.jpg</a> (image/jpeg)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2851038/3801124.jpg">Apache Wink Server Diagram.jpg</a> (image/jpeg)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2851038/3801097.jpg">Apache Wink Server Diagram.jpg</a> (image/jpeg)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2851038/3801125.jpg">Apache Wink Server Diagram1.jpg</a> (image/jpeg)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2851038/4751370.jpg">Apache Wink Server Diagram2.jpg</a> (image/jpeg)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2851038/4751371.jpg">Apache Wink Server Diagram3.jpg</a> (image/jpeg)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2851038/4751372.jpg">Apache Wink Server Diagram4.jpg</a> (image/jpeg)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2851038/4751373.jpg">Apache Wink Server Diagram5.jpg</a> (image/jpeg)
+                                <br/>
+                                                    </div>
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/5.1 Registration and Configuration.html b/src/site/resources/1.0/html/5.1 Registration and Configuration.html
new file mode 100644
index 0000000..02bdb0f
--- /dev/null
+++ b/src/site/resources/1.0/html/5.1 Registration and Configuration.html
@@ -0,0 +1,319 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : 5.1 Registration and Configuration</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : 5.1 Registration and Configuration
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Oct 13, 2009 by <font color="#0050B2">bluk</font>.
+				    </div>
+
+				    <h1><a name="5.1RegistrationandConfiguration-RegistrationandConfiguration"></a>Registration and Configuration</h1>
+
+<p>Apache Wink provides several methods for registering resources and providers. This chapter describes registration methods and Wink configuration options. &nbsp;</p>
+
+<h2><a name="5.1RegistrationandConfiguration-SimpleApplication"></a>Simple Application</h2>
+
+<p>Apache Wink provides the "<b>SimpleWinkApplication</b>" class in order to support the loading of resources and providers through a simple text file that contains a list of fully qualified class names of the resource and provider classes. Each line contains a single fully qualified class name that is either a resource or a provider. Empty lines and lines that begin with a number sign (#) are permitted and ignored.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml"># Providers
+com.example.MyXmlProvider
+com.example.MyJSONProvider
+
+# Resources
+com.example.FooResource
+com.example.BarResource
+</pre>
+</div></div>
+
+<h4><a name="5.1RegistrationandConfiguration-SpecifyingtheSimpleApplicationFileLocation"></a>Specifying the Simple Application File Location</h4>
+
+<p>The path to a simple application file is configured via the applicationConfigLocation init-param in the web.xml file. It is possible to specify multiple files by separating them with a semicolon.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml"><span class="code-tag">&lt;servlet&gt;</span>
+  <span class="code-tag">&lt;servlet-name&gt;</span>restSdkService<span class="code-tag">&lt;/servlet-name&gt;</span>
+  <span class="code-tag">&lt;servlet-class&gt;</span>
+    org.apache.wink.server.internal.servlet.RestServlet
+  <span class="code-tag">&lt;/servlet-class&gt;</span>
+  <span class="code-tag">&lt;init-param&gt;</span>
+    <span class="code-tag">&lt;param-name&gt;</span>applicationConfigLocation<span class="code-tag">&lt;/param-name&gt;</span>
+    <span class="code-tag">&lt;param-value&gt;</span>/WEB-INF/providers;/WEB-INF/resources<span class="code-tag">&lt;/param-value&gt;</span>
+  <span class="code-tag">&lt;/init-param&gt;</span>
+<span class="code-tag">&lt;/servlet&gt;</span>
+</pre>
+</div></div>
+
+<h3><a name="5.1RegistrationandConfiguration-ApacheWinkApplication"></a>Apache Wink Application</h3>
+
+<p>Apache Wink extends the javax.ws.rs.core.Application class with the org.apache.wink.common.WinkApplication class in order to provide the Dynamic Resources and the Priorities functionality.</p>
+
+<p>An application may provide an instance of the Apache Wink Application to the Apache Wink runtime as specified by the JAX-RS specification.</p>
+
+<h3><a name="5.1RegistrationandConfiguration-DynamicResources"></a>Dynamic Resources</h3>
+
+<p>Dynamic Resources enable the binding of a Resource class to a URI path during runtime instead of by using the @Path annotation. A dynamic resource must implement the DynamicResource interface and must not be annotated with the @Path annotation.</p>
+
+<h3><a name="5.1RegistrationandConfiguration-Motivation"></a>Motivation</h3>
+
+<p>A Dynamic Resource is useful for situations where a resource class must be bound to multiple paths, for example, a sorting resource:</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+<span class="code-keyword">public</span> class SortingResource&lt;E <span class="code-keyword">extends</span> Comparable&lt;? <span class="code-keyword">super</span> E&gt;&gt; {
+    <span class="code-keyword">private</span> List&lt;E&gt; list;
+    @POST
+    <span class="code-keyword">public</span> void sort() {
+        Collections.sort(list);
+    }
+    <span class="code-keyword">public</span> void setList(List&lt;E&gt; list) {
+        <span class="code-keyword">this</span>.list = list;
+    }
+    <span class="code-keyword">public</span> List&lt;E&gt; getList() {
+        <span class="code-keyword">return</span> list;
+    }
+}
+</pre>
+</div></div>
+
+<h5><a name="5.1RegistrationandConfiguration-Explanation"></a>Explanation</h5>
+
+<p>In this example, the SortingResource class can sort any list. If the application manages a library of books and exposes the following resource paths, then the SortingResource class can be used for the implementation of all these resource paths, assuming that it could be bound to more than one path.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml">/sort-books
+/sort-authors
+/sort-titles
+</pre>
+</div></div>
+<p>A dynamic resource is also useful for situations where the resource path is unknown during development, and is only known during the application startup.</p>
+
+<h3><a name="5.1RegistrationandConfiguration-Usage"></a>Usage</h3>
+
+<p>A Dynamic Resource is a resource class that implements the org.apache.wink.server.DynamicResource interface or extends the org.apache.wink.server.AbstractDynamicResource convenience class.</p>
+
+<p>A Dynamic Resource is not registered in Apache Wink through the Application#getClasses() method or the Application#getSignletons() method, since the same class can be used for multiple resources.<br/>
+In order to register Dynamic Resources in the system, the WinkApplication#getInstances()method must be used.</p>
+
+<h3><a name="5.1RegistrationandConfiguration-Scope"></a>Scope</h3>
+
+<p>The scope of a Dynamic Resource is limited to "singleton" as it is initialized prior to its registration, and the system does not have enough information to create it in runtime. This limitation is irrelevant when working with Spring. Refer to chapter ‎0 for more information on Spring integration.</p>
+
+
+<h2><a name="5.1RegistrationandConfiguration-Priorities"></a>Priorities</h2>
+
+<p>Although JAX-RS defines the algorithm for searching for resources and providers, Apache Wink enables to extend this algorithm by allowing the specification of priorities for them.<br/>
+Apache Wink extends the JAX-RS search algorithms by providing the ability to specify priorities on the resources and providers. This is achieved by enabling the registration of multiple Application instances with different priorities, rendering the order of their registration irrelevant as long as they have different priorities.</p>
+
+<p>In order to register a prioritized Application, it is necessary to register an instance of a Apache WinkApplication class. Priority values range between 0 and 1. In the event that the priority was not specified, a default priority of 0.5 is used.</p>
+
+<h3><a name="5.1RegistrationandConfiguration-ResourcePriorities"></a>Resource Priorities</h3>
+
+<p>Priorities on resources are useful for situations where an application registers core resources bound to paths, and allows extensions to register resources on the same paths in order to override the core resources.</p>
+
+
+<p>The Apache Wink runtime first sorts the resources based on their priority and then based on the JAX-RS specification, thus if two resources have the same path, the one with higher priority is invoked.</p>
+
+<h3><a name="5.1RegistrationandConfiguration-ProviderPriorities"></a>Provider Priorities</h3>
+
+<p>JAX-RS requires that application-provided providers be used in preference to implementation pre-packaged providers. Apache Wink extends this requirement by allowing applications to specify a priority for providers.</p>
+
+<p>The Apache Wink runtime initially sorts the matching providers according to the JAX-RS specification, and uses the priority as the last sorting key for providers of equal standing.<br/>
+If two providers have the same priority, the order in which they are registered determines their priority such that the latest addition receives the highest priority.<br/>
+In order to meet the JAX-RS requirements, the pre-packages providers are registered using a priority of 0.1.</p>
+
+<h4><a name="5.1RegistrationandConfiguration-PropertiesTable"></a>Properties Table</h4>
+
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'> Property Name <br clear="all" /> </th>
+<th class='confluenceTh'> Description <br clear="all" /> </th>
+<th class='confluenceTh'> Default Value <br clear="all" /> </th>
+</tr>
+<tr>
+<td class='confluenceTd'> wink.http.uri <br clear="all" /> </td>
+<td class='confluenceTd'> URI that is used by the Link Builders in case of HTTP <br clear="all" /> </td>
+<td class='confluenceTd'> Use the URI from the request <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> wink.https.uri <br clear="all" /> </td>
+<td class='confluenceTd'> URI used by the Link Builders in case of HTTPS <br clear="all" /> </td>
+<td class='confluenceTd'> Use the URI from the request <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> wink.context.uri <br clear="all" /> </td>
+<td class='confluenceTd'> Context path used by the Link Builders <br clear="all" /> </td>
+<td class='confluenceTd'> Use the context path from the request <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> wink.defaultUrisRelative <br clear="all" /> </td>
+<td class='confluenceTd'> Indicates if URIs generated by the Link Builders are absolute or relative, valid values: true or false <br clear="all" /> </td>
+<td class='confluenceTd'> true - links are relative <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> wink.addAltParam <br clear="all" /> </td>
+<td class='confluenceTd'> Indicates if the "alt" query parameter should be added to URIs generated by the Link Builders. Valid values are: true, false <br clear="all" /> </td>
+<td class='confluenceTd'> true - add the alt query parameter <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> wink.search<br clear="all" />
+ PolicyContinuedSearch <br clear="all" /> </td>
+<td class='confluenceTd'> Indicates if continues search is enabled. Valid values: true, false <br clear="all" /> </td>
+<td class='confluenceTd'> true - continued search is enabled <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> wink.rootResource <br clear="all" /> </td>
+<td class='confluenceTd'> Indicates if a root resource with Service Document generation capabilities should be added. <br clear="all" />
+Valid values are: none, atom, atom+html <br clear="all" /> </td>
+<td class='confluenceTd'> atom+html &#45;-atom and html Service Document generation capabilities <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> wink.serviceDocumentCssPath <br clear="all" /> </td>
+<td class='confluenceTd'> Defines path to a css file that is used in the&nbsp; html Service Document generation. Relevant only if html Service Document is defined <br clear="all" /> </td>
+<td class='confluenceTd'> No css file defined <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> wink.handlersFactoryClass <br clear="all" /> </td>
+<td class='confluenceTd'> Defines a org.apache.wink.server<br clear="all" />
+ .handlers.HandlersFactory class that defines user handlers <br clear="all" /> </td>
+<td class='confluenceTd'> No user handlers defined <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> wink.mediaType<br clear="all" />
+ MapperFactoryClass <br clear="all" /> </td>
+<td class='confluenceTd'> Defines a org.apache.wink.server.handlers<br clear="all" />
+ .MediaTypeMapperFactory class that defines media type mappers <br clear="all" /> </td>
+<td class='confluenceTd'> No media type mappers defined <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> wink.loadApplications <br clear="all" /> </td>
+<td class='confluenceTd'> Loads providers defined in a wink-application file found by the runtime <br clear="all" /> </td>
+<td class='confluenceTd'> True, automatically load all wink-application specified classes <br clear="all" /> </td>
+</tr>
+</tbody></table>
+
+<h3><a name="5.1RegistrationandConfiguration-CustomPropertiesFileDefinition"></a>Custom Properties File Definition</h3>
+
+<p>In order to provide a custom properties file, the application should define the propertiesLocation init-param in the Apache Wink Servlet definition.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml"># Providers
+<span class="code-tag">&lt;servlet&gt;</span>
+  <span class="code-tag">&lt;servlet-name&gt;</span>restSdkService<span class="code-tag">&lt;/servlet-name&gt;</span>
+  <span class="code-tag">&lt;servlet-class&gt;</span>
+    org.apache.wink.server.internal.servlet.RestServlet
+  <span class="code-tag">&lt;/servlet-class&gt;</span>
+  <span class="code-tag">&lt;init-param&gt;</span>
+    <span class="code-tag">&lt;param-name&gt;</span>propertiesLocation<span class="code-tag">&lt;/param-name&gt;</span>
+    <span class="code-tag">&lt;param-value&gt;</span>/WEB-INF/configuration.properties<span class="code-tag">&lt;/param-value&gt;</span>
+  <span class="code-tag">&lt;/init-param&gt;</span>
+  <span class="code-tag">&lt;init-param&gt;</span>
+    <span class="code-tag">&lt;param-name&gt;</span>winkApplicationConfigLocation<span class="code-tag">&lt;/param-name&gt;</span>
+    <span class="code-tag">&lt;param-value&gt;</span>/WEB-INF/application<span class="code-tag">&lt;/param-value&gt;</span>
+  <span class="code-tag">&lt;/init-param&gt;</span>
+  <span class="code-tag">&lt;load-on-startup&gt;</span>0<span class="code-tag">&lt;/load-on-startup&gt;</span>
+<span class="code-tag">&lt;/servlet&gt;</span>
+</pre>
+</div></div>
+
+<h2><a name="5.1RegistrationandConfiguration-Runtime"></a>Runtime</h2>
+
+<p>RegistrationApache Wink provides several APIs for Runtime Registration. The APIs appear in the org.apache.wink.server.utils.RegistrationUtils class. The most important method is the one that registers an instance of the javax.ws.rs.core.Application class</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml"># Providers
+static void registerApplication(Application application, ServletContext servletContext)
+</pre>
+</div></div>
+<div class='panelMacro'><table class='noteMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Double Registration</b><br />Registration is ignored and a warning is printed to the log if the instance was previously registered</td></tr></table></div>
+
+<h2><a name="5.1RegistrationandConfiguration-MediaTypeMapping"></a>Media-Type Mapping</h2>
+
+<p>It is sometimes necessary to override the Content-Type response header based on the client user agent. For example, the Firefox browser cannot handle the application/atom+xml media type for Atom content, unless it is defined as a text/xml.</p>
+
+<p>Apache Wink provides a set of predefined Media-Type mappings for use in such cases by supplying the MediaTypeMapper class. Applications may extend or override the MediaTypeMapper class to define additional mappings.</p>
+
+<h3><a name="5.1RegistrationandConfiguration-CustomizingMappings"></a>Customizing Mappings</h3>
+
+<p>In order to customize these mappings the application should create a instance of a org.apache.wink.server.handlers.MediaTypeMapperFactory class and set it in a customized Wink properties file.</p>
+
+<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Reference</b><br />Refer to section <a href="" title="5.1 Registration and Configuration">5.1 Registration and Configuration</a> for more information on Customizing the Default Properties Configuration.</td></tr></table></div>
+
+<h2><a name="5.1RegistrationandConfiguration-"></a></h2>
+
+
+<h2><a name="5.1RegistrationandConfiguration-AlternativeShortcuts"></a>Alternative Shortcuts</h2>
+
+<p>Clients specify the requested media type by setting the Http Accept header. Apache Wink provides an alternate method for specifying the requested media type via use of the "alt" request parameter. This functionality is useful for situation where the client has little affect on the accept header, for example when requesting a resource using a browser.</p>
+
+<p>For example, a request to /entry?alt=application/xml&nbsp; specifies that the requested response media type is application/xml. Apache Wink provides a shortcut mechanism for specifying the media type of the alt query parameter and provides a predefined set of shortcuts for common media types.</p>
+
+<h3><a name="5.1RegistrationandConfiguration-PredefinedShortcuts"></a>Predefined Shortcuts</h3>
+
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'> Shortcut <br clear="all" /> </th>
+<th class='confluenceTh'> Media Type <br clear="all" /> </th>
+</tr>
+<tr>
+<td class='confluenceTd'> json <br clear="all" /> </td>
+<td class='confluenceTd'> text/javascript <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> atom <br clear="all" /> </td>
+<td class='confluenceTd'> application/atom+xml <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> xml <br clear="all" /> </td>
+<td class='confluenceTd'> application/xml <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> text <br clear="all" /> </td>
+<td class='confluenceTd'> text/plain <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> html <br clear="all" /> </td>
+<td class='confluenceTd'> text/html <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> csv <br clear="all" /> </td>
+<td class='confluenceTd'> text/csv <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> opensearch <br clear="all" /> </td>
+<td class='confluenceTd'> application/opensearchdescription+xml <br clear="all" /> </td>
+</tr>
+</tbody></table>
+
+<h3><a name="5.1RegistrationandConfiguration-CustomizingShortcuts"></a>Customizing Shortcuts</h3>
+
+<p>The shortcuts table can be customized by overriding the deployment configuration class.</p>
+
+<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Reference</b><br />Refer to section <a href="2 Apache Wink Building Blocks.html#2ApacheWinkBuildingBlocks-DeploymentConfiguration">2 Apache Wink Building Blocks</a> for more information on Customizing the Default Deployment Configuration.</td></tr></table></div>
+
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/5.10 Admin Views.html b/src/site/resources/1.0/html/5.10 Admin Views.html
new file mode 100644
index 0000000..b98c32f
--- /dev/null
+++ b/src/site/resources/1.0/html/5.10 Admin Views.html
@@ -0,0 +1,77 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : 5.10 Admin Views</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : 5.10 Admin Views
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Oct 13, 2009 by <font color="#0050B2">michael</font>.
+				    </div>
+
+				    <h1><a name="5.10AdminViews-AdministrationViews"></a>Administration Views</h1>
+
+
+
+
+<p>Apache Wink provides administration views in order to help developers better understand the services that the REST application expose. There are two administration views, the "<b>application resource XML view</b>" and the "<b>resource registry XML view</b>".</p>
+
+
+<h2><a name="5.10AdminViews-ApplicationResourcesXMLView"></a>Application Resources XML View</h2>
+
+
+<p>The application resource XML view shows the way the application is exposed to the user, it exposes the REST resources with their URI templates, the HTTP methods that are supported by the resources and the consume/produces MimeType supported by each method. This view can be used as a base for the service documentation.</p>
+
+<h2><a name="5.10AdminViews-ResourceRegistryXMLView"></a>Resource Registry XML View</h2>
+
+
+<p>The resource registry XML view shows the way that the application is developed, it is similar to the "<b>Application resources XML view</b>" but it also exposes the classes that implement resources and their priority in the registry. This view can be useful for debugging.</p>
+
+<h2><a name="5.10AdminViews-Configuration"></a>Configuration</h2>
+
+<p>By default these views are disabled, in order to activate them register the "<b>AdminServlet</b>" implemented by the <b>org.apache.wink.server.internal.servlet.AdminServletin</b> the web.xml file. No init parameters are required.</p>
+
+<h3><a name="5.10AdminViews-Example"></a>Example</h3>
+
+<p>The following code snippet is an example of a web application descriptor file.</p>
+
+
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml">
+<span class="code-tag">&lt;servlet&gt;</span>
+	<span class="code-tag">&lt;servlet-name&gt;</span>restSdkAdmin<span class="code-tag">&lt;/servlet-name&gt;</span>
+	<span class="code-tag">&lt;servlet-class&gt;</span>org.apache.wink.server.internal.servlet.AdminServlet<span class="code-tag">&lt;/servlet-class&gt;</span>
+<span class="code-tag">&lt;/servlet&gt;</span>
+
+<span class="code-tag">&lt;servlet-mapping&gt;</span>
+	<span class="code-tag">&lt;servlet-name&gt;</span>restSdkAdmin<span class="code-tag">&lt;/servlet-name&gt;</span>
+	<span class="code-tag">&lt;url-pattern&gt;</span>/admin<span class="code-tag">&lt;/url-pattern&gt;</span>
+<span class="code-tag">&lt;/servlet-mapping&gt;</span>
+</pre>
+</div></div>
+
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/5.2 Annotations.html b/src/site/resources/1.0/html/5.2 Annotations.html
new file mode 100644
index 0000000..8b66c58
--- /dev/null
+++ b/src/site/resources/1.0/html/5.2 Annotations.html
@@ -0,0 +1,296 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : 5.2 Annotations</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : 5.2 Annotations
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Oct 13, 2009 by <font color="#0050B2">michael</font>.
+				    </div>
+
+				    <h1><a name="5.2Annotations-Annotations"></a>Annotations</h1>
+
+<p>Apache Wink provides several annotations in addition to those defined by the JAX-RS specification. The following section describes these annotations in detail.</p>
+
+
+<h2><a name="5.2Annotations-@WorkspaceAnnotation"></a>@Workspace Annotation</h2>
+
+<p>The purpose of the @Workspace annotation is to associate a "Collection Resource" with a workspace element and collection elements in an APP Service Document.</p>
+
+<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Reference</b><br />For more information regarding the APP Service Document, refer to section <a href="5.4 APP Service Document.html" title="5.4 APP Service Document">5.4 APP Service Document</a></td></tr></table></div>
+<p>The workspaceTitle annotation parameter specifies the title of the workspace and the collectionTitle annotation parameter specifies the title of the collection.</p>
+
+<h3><a name="5.2Annotations-@WorkspaceAnnotationSpecification"></a>@Workspace Annotation Specification</h3>
+
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'> Value </th>
+<th class='confluenceTh'> Description </th>
+</tr>
+<tr>
+<td class='confluenceTd'> <b>Mandatory</b> </td>
+<td class='confluenceTd'> No </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <b>Target</b> </td>
+<td class='confluenceTd'> Resource class </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <b>Parameters</b> </td>
+<td class='confluenceTd'> <b>Name</b> </td>
+<td class='confluenceTd'> <b>Type</b> <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'>&nbsp;</td>
+<td class='confluenceTd'> workspaceTitle <br clear="all" /> </td>
+<td class='confluenceTd'> String <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'>&nbsp;</td>
+<td class='confluenceTd'> collectionTitle <br clear="all" /> </td>
+<td class='confluenceTd'> String <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <b>Example</b> </td>
+<td class='confluenceTd'> @Workspace(workspaceTitle = "Title", <br clear="all" />
+collectionTitle = "Collection") x <br clear="all" /> </td>
+</tr>
+</tbody></table>
+
+<h3><a name="5.2Annotations-@WorkspaceAnnotationExample"></a>@Workspace Annotation Example</h3>
+
+<p>The following example demonstrates the use of @Workspace annotation on two resources in order to have the auto-generated APP service document contain the information about them.</p>
+
+<p>Given the following collection Resources definitions, ResourceA and ResourceB, the result is displayed in the "Auto Generated APP Service Document" table that follows.</p>
+
+<h4><a name="5.2Annotations-ResourceADefinition"></a>ResourceA Definition</h4>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml">@Workspace(workspaceTitle = <span class="code-quote">"Services"</span>, collectionTitle = <span class="code-quote">"Service1"</span>)
+@Path(<span class="code-quote">"services/service1"</span>)
+public class ResourceA {
+    @POST
+    @Produces(<span class="code-quote">"text/plain"</span>)
+    @Consumes({<span class="code-quote">"application/atom+xml"</span>, <span class="code-quote">"application/xml"</span>})
+    public String getText() {return <span class="code-quote">"hey there1"</span>;}
+}
+</pre>
+</div></div>
+
+<h4><a name="5.2Annotations-ResourceBDefinition"></a>ResourceB Definition</h4>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml">@Workspace(workspaceTitle = <span class="code-quote">"Services"</span>, collectionTitle = <span class="code-quote">"Service2"</span>)
+@Path(<span class="code-quote">"services/service2"</span>)
+public class ResourceB {
+    @POST
+    @Produces(<span class="code-quote">"text/plain"</span>)
+    @Consumes({<span class="code-quote">"application/atom+xml"</span>, <span class="code-quote">"application/xml"</span>})
+    public String getText() {return <span class="code-quote">"hey there2"</span>;}
+}
+</pre>
+</div></div>
+<p>The auto-generated APP Service Document is as follows:</p>
+
+<h4><a name="5.2Annotations-AutoGeneratedAPPServiceDocument"></a>Auto Generated APP Service Document</h4>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml">&lt;service <span class="code-keyword">xmlns:atom</span>=http://www.w3.org/2005/Atom
+         xmlns=<span class="code-quote">"http://www.w3.org/2007/app"</span>&gt;
+    <span class="code-tag">&lt;workspace&gt;</span>
+        <span class="code-tag">&lt;atom:title&gt;</span>Services<span class="code-tag">&lt;/atom:title&gt;</span>
+        <span class="code-tag">&lt;collection href=<span class="code-quote">"services/service1"</span>&gt;</span>
+            <span class="code-tag">&lt;atom:title&gt;</span>Service1<span class="code-tag">&lt;/atom:title&gt;</span>
+            <span class="code-tag">&lt;accept&gt;</span>application/xml<span class="code-tag">&lt;/accept&gt;</span>
+            <span class="code-tag">&lt;accept&gt;</span>application/atom+xml<span class="code-tag">&lt;/accept&gt;</span>
+        <span class="code-tag">&lt;/collection&gt;</span>
+        <span class="code-tag">&lt;collection href=<span class="code-quote">"services/service2"</span>&gt;</span>
+            <span class="code-tag">&lt;atom:title&gt;</span>Service2<span class="code-tag">&lt;/atom:title&gt;</span>
+            <span class="code-tag">&lt;accept&gt;</span>application/xml<span class="code-tag">&lt;/accept&gt;</span>
+            <span class="code-tag">&lt;accept&gt;</span>application/atom+xml<span class="code-tag">&lt;/accept&gt;</span>
+        <span class="code-tag">&lt;/collection&gt;</span>
+    <span class="code-tag">&lt;/workspace&gt;</span>
+<span class="code-tag">&lt;/service&gt;</span>
+</pre>
+</div></div>
+
+<h2><a name="5.2Annotations-@AssetAnnotation"></a>@Asset Annotation</h2>
+
+<p>The @Asset annotation is a marker annotation used by the Apache Wink runtime in order to identify an entity as an Asset.</p>
+
+<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Reference</b><br />For more information about Assets refer to section <a href="5.9 Assets.html" title="5.9 Assets">5.9 Assets</a>.</td></tr></table></div>
+
+<h3><a name="5.2Annotations-@AssetAnnotationSpecification"></a>@Asset Annotation Specification</h3>
+
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'> Value <br clear="all" /> </th>
+<th class='confluenceTh'> Description <br clear="all" /> </th>
+</tr>
+<tr>
+<td class='confluenceTd'> Mandatory <br clear="all" /> </td>
+<td class='confluenceTd'> No <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> Target <br clear="all" /> </td>
+<td class='confluenceTd'> Resource class <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> Parameters <br clear="all" /> </td>
+<td class='confluenceTd'> None <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> Example <br clear="all" /> </td>
+<td class='confluenceTd'> @Asset <br clear="all" /> </td>
+</tr>
+</tbody></table>
+
+<h2><a name="5.2Annotations-@ScopeAnnotation"></a>@Scope Annotation</h2>
+
+<p>The JAX-RS specification defines the default lifecycle behavior for resources and providers, and the option for controlling the lifecycle through the javax.ws.rs.core.Application class.</p>
+
+<p>Apache Wink provides the @Scope annotation to specify the lifecycle of a provider or resource.</p>
+
+<h3><a name="5.2Annotations-@ScopeAnnotationSpecification"></a>@Scope Annotation Specification</h3>
+
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'> Value </th>
+<th class='confluenceTh'> Description </th>
+</tr>
+<tr>
+<td class='confluenceTd'> <b>Mandatory</b> </td>
+<td class='confluenceTd'> No </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <b>Target</b> </td>
+<td class='confluenceTd'> Provider class or Resource class </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <b>Parameters</b> </td>
+<td class='confluenceTd'> <b>Name</b> </td>
+<td class='confluenceTd'> <b>Type</b> <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'>&nbsp;</td>
+<td class='confluenceTd'> Value <br clear="all" /> </td>
+<td class='confluenceTd'> ScopeType enum <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <b>Example</b> </td>
+<td class='confluenceTd'> @Scope(ScopeType.PROTOTYPE) <br clear="all" /> </td>
+</tr>
+</tbody></table>
+
+<h3><a name="5.2Annotations-ResourceExample"></a>Resource Example</h3>
+
+<p>The following example illustrates how to define a resource with a singleton lifecycle.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml">@Scope(ScopeType.SINGLETON)
+@Path(<span class="code-quote">"service1"</span>)
+public class ResourceA {
+    ...
+}
+</pre>
+</div></div>
+
+<h3><a name="5.2Annotations-ProviderExample"></a>Provider Example</h3>
+
+<p>The following example illustrates how to define a provider with a prototype lifecycle.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml">@Scope(ScopeType.PROTOTYPE)
+@Provider
+public class EntityProvider implements MessageBodyReader<span class="code-tag">&lt;String&gt;</span> {
+    ...
+}
+</pre>
+</div></div>
+
+<h2><a name="5.2Annotations-@ParentAnnotation"></a>@Parent Annotation</h2>
+
+<p>The @Parent annotation provides the ability to define a base template URI for the URI specified in a resources @Path annotation.<br/>
+If a resource is annotated with the @Parent annotation, the Apache Wink runtime calculates the final resource template by first retrieving the value of the @Parent annotation, which holds the parent resource class, and then concatenates the resource path template definition to the path template definition of the parent resource.</p>
+
+<h3><a name="5.2Annotations-@ParentAnnotationSpecification"></a>@Parent Annotation Specification</h3>
+
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'> Value </th>
+<th class='confluenceTh'> Description </th>
+</tr>
+<tr>
+<td class='confluenceTd'> <b>Mandatory</b> </td>
+<td class='confluenceTd'> No </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <b>Target</b> </td>
+<td class='confluenceTd'> Provider class or Resource class </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <b>Parameters</b> </td>
+<td class='confluenceTd'> <b>Name</b> </td>
+<td class='confluenceTd'> <b>Type</b> <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'>&nbsp;</td>
+<td class='confluenceTd'> Value <br clear="all" /> </td>
+<td class='confluenceTd'> Class&lt;?&gt; <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <b>Example</b> </td>
+<td class='confluenceTd'> @Parent(ParentResource.class) <br clear="all" /> </td>
+</tr>
+</tbody></table>
+
+<h4><a name="5.2Annotations-Example1"></a>Example 1</h4>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml">@Path(<span class="code-quote">"services"</span>)
+public class ParentResource {
+    ...
+}
+</pre>
+</div></div>
+
+<h4><a name="5.2Annotations-Example2"></a>Example 2</h4>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml">@Parent(BaseResource.class)
+@Path(<span class="code-quote">"service1"</span>)
+public class ResourceA {
+    ...
+}
+</pre>
+</div></div>
+
+<h5><a name="5.2Annotations-Explanation"></a>Explanation</h5>
+
+<p>In the example, the user defined two resources: A ParentResource and ResourceA. ParentResource defines the @Path annotation to associate it with "<b>services</b>" URI. ResourceA defines the @Path annotation to associate it with "<b>service1</b>" URI and defines ParentResource to be its parent by specifying it in the @Parent annotation. In this case, the final URI path for ResourceA is "<b>services/service1</b>".</p>
+
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/5.3 Resource Matching.html b/src/site/resources/1.0/html/5.3 Resource Matching.html
new file mode 100644
index 0000000..d2f1807
--- /dev/null
+++ b/src/site/resources/1.0/html/5.3 Resource Matching.html
@@ -0,0 +1,75 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : 5.3 Resource Matching</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : 5.3 Resource Matching
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Oct 13, 2009 by <font color="#0050B2">michael</font>.
+				    </div>
+
+				    <h1><a name="5.3ResourceMatching-ResourceMatching"></a>Resource Matching</h1>
+
+<p>Apache Wink provides a Continued Search mode when searching for a resource method to invoke during request processing, which is an extended search mode to the algorithm defined by the JAX-RS specification.</p>
+
+
+<h2><a name="5.3ResourceMatching-ResourceMatchingOverview"></a>Resource Matching Overview</h2>
+
+<p>Section 3.7.2 of the JAX-RS specification describes the process of matching requests to resource methods. The fact that only the first matching root resource (section 1(f) of the algorithm) and only the first matching sub-resource locator (section 2(g) of the algorithm) are selected during the process makes it difficult for application developers to implement certain scenarios.<br/>
+For example, it is impossible to have two resources anchored to the same URI, each having its own set of supported methods:</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml">@Path(<span class="code-quote">"my/service"</span>)
+public class ResourceA {
+    @GET
+    @Produces(<span class="code-quote">"text/plain"</span>)
+    public String getText() {...}
+}
+
+@Path(<span class="code-quote">"my/service"</span>)
+public class ResourceB {
+    @GET
+    @Produces(<span class="code-quote">"text/html"</span>)
+    public String getHtml() {...}
+}
+</pre>
+</div></div>
+
+<h3><a name="5.3ResourceMatching-Explanation"></a>Explanation</h3>
+
+<p>In order to implement this according to the JAX-RS specification, ResourceB must  extend ResourceA and be registered instead of ResourceA. However, this may not always be possible, such as in an application that uses JAX-RS as the web service frontend while providing an open architecture for registering extending services. For example, Firefox that provides an Extensions mechanism. The extending service must be aware of the core implementation workings and classes, that may not always be plausible. Moreover, it is impossible for a service to extend the functionality of another service without knowing the inner workings of that service, that creates an "evil" dependency between service implementations.</p>
+
+<p>In order to solve this problem, Apache Wink provides a special resource Continued Search mode when searching for a resource and method to invoke. By default, this mode is off, meaning that the search algorithm is strictly JAX-RS compliant. When this mode is activated, and a root resource or sub-resource locator proves to be a dead-end, the Apache Wink runtime will continue to search from the next root-resource or sub-resource locator, as if they were the first match.</p>
+
+<p>In the previous example, there is no way to know which of the resources is a first match for a request to "<b>/my/service</b>". If the Continued Search mode is off, either the getText() method is unreachable or the getHtml() method is unreachable. However, when the Continued Search mode is active, a request for text/plain reaches the getText() method in ResourceA, and a request for text/html reaches the getHtml() method in ResourceB.</p>
+
+<h2><a name="5.3ResourceMatching-Configuration"></a>Configuration</h2>
+
+<p>The Continued Search mode is activated by setting the value of the wink.searchPolicyContinuedSearch key in the application configuration properties file to true.<br/>
+If the key is set to anything else but true or if it does not exist in the properties file, then the Continued Search mode is set to off, and the behavior is strictly JAX-RS compliant.</p>
+
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/5.4 APP Service Document.html b/src/site/resources/1.0/html/5.4 APP Service Document.html
new file mode 100644
index 0000000..48b4f5e
--- /dev/null
+++ b/src/site/resources/1.0/html/5.4 APP Service Document.html
@@ -0,0 +1,100 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : 5.4 APP Service Document</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : 5.4 APP Service Document
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Oct 13, 2009 by <font color="#0050B2">michael</font>.
+				    </div>
+
+				    <h1><a name="5.4APPServiceDocument-APPServiceDocument"></a>APP Service Document</h1>
+
+<p>Apache Wink supports the automatic and manual generation of APP Service Documents by providing an APP data model and set of complementary providers.</p>
+
+
+<p>Atom Publishing Protocol Service Documents are designed to support the auto-discovery of services. APP Service Documents represent server-defined groups of Collections used to initialize the process of creating and editing resources. These groups of collections are called Workspaces. The Service Document can indicate which media types and categories a collection accepts.&nbsp; &nbsp;</p>
+
+
+<p>The Apache Wink runtime supports the generation of the APP Service Documents in the XML (application/atomsvc+xml) and HTML (text/html) representations.</p>
+
+
+<h2><a name="5.4APPServiceDocument-EnablingtheAPPServiceDocumentAutoGeneration"></a>Enabling the APP Service Document Auto Generation</h2>
+
+<p>APP Service Document generation is activated by setting the wink.rootResource key in the configuration properties file. By default, the key value is set to "atom+html", indicating that both XML (application/atomsvc+xml) and HTML (text/html) representations are available.</p>
+
+
+<p>Once activated, the auto-generated APP Service Document is available at the application root URL "<a href="http://host:port/application">http://host:port/application</a>".</p>
+
+
+<h2><a name="5.4APPServiceDocument-AddingResourcestoAPPServiceDocument"></a>Adding Resources to APP Service Document</h2>
+
+<p>Apache Wink provides the @Workspace annotation used to associate a Collection Resource with an APP Service Document workspace and collection elements. The only requirement to incorporate a collection resource in a service document is to place the @Workspace annotation on the resource.</p>
+
+<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Reference</b><br />For more information on the @Workspace annotation refer to <a href="5.2 Annotations.html" title="5.2 Annotations">5.2 Annotations</a>.</td></tr></table></div>
+<h3><a name="5.4APPServiceDocument-Example"></a>Example</h3>
+
+<p>Given the following collection resource definition:</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml">@Workspace(workspaceTitle = <span class="code-quote">"Workspace"</span>, collectionTitle = <span class="code-quote">"Title"</span>)
+@Path(<span class="code-quote">"my/service"</span>)
+public class ResourceA {
+    ...
+}
+</pre>
+</div></div>
+<p>The auto-generated APP Service Document is:</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml">&lt;service <span class="code-keyword">xmlns:atom</span>=http://www.w3.org/2005/Atom
+         xmlns=<span class="code-quote">"http://www.w3.org/2007/app"</span>&gt;
+  <span class="code-tag">&lt;workspace&gt;</span>
+    <span class="code-tag">&lt;atom:title&gt;</span>Workspace<span class="code-tag">&lt;/atom:title&gt;</span>
+    <span class="code-tag">&lt;collection href=<span class="code-quote">"my/service"</span>&gt;</span>
+      <span class="code-tag">&lt;atom:title&gt;</span>Title<span class="code-tag">&lt;/atom:title&gt;</span>
+      <span class="code-tag">&lt;accept/&gt;</span>
+    <span class="code-tag">&lt;/collection&gt;</span>
+  <span class="code-tag">&lt;/workspace&gt;</span>
+<span class="code-tag">&lt;/service&gt;</span>
+</pre>
+</div></div>
+<h2><a name="5.4APPServiceDocument-APPServiceDocumentHTMLStyling"></a>APP Service Document HTML Styling</h2>
+
+<p>Apache Wink provides the ability to change the default styling of the APP Service Document HTML representation. The styling is changed by setting the value of the wink.serviceDocumentCssPath key in the configuration properties file to the application specific CSS file location.</p>
+
+<h3><a name="5.4APPServiceDocument-Implementation"></a>Implementation</h3>
+
+<p>The following classes implement the APP Service Document support:</p>
+<ul>
+	<li><b>org.apache.wink.server.internal.resources.RootResource</b> &#45; generates the XML (application/atomsvc+xml) representation of the APP Service Document.</li>
+</ul>
+
+
+<p><b>&nbsp;org.apache.wink.server.internal.resources</b>. HtmlServiceDocumentResource - generates the HTML (text/html) representation of the APP Service Document.</p>
+
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/5.5 Spring Integration.html b/src/site/resources/1.0/html/5.5 Spring Integration.html
new file mode 100644
index 0000000..d4c11b6
--- /dev/null
+++ b/src/site/resources/1.0/html/5.5 Spring Integration.html
@@ -0,0 +1,246 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : 5.5 Spring Integration</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : 5.5 Spring Integration
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Oct 12, 2009 by <font color="#0050B2">bluk</font>.
+				    </div>
+
+				    <h1><a name="5.5SpringIntegration-SpringIntegration"></a>Spring Integration</h1>
+
+<p>Apache Wink provides an additional module deployed as an external jar in order to provide Spring integration. The Spring integration provides the following features:</p>
+<ul>
+	<li>The ability to register resources and providers from the Spring context, registered as classes or as Spring beans</li>
+</ul>
+
+
+<ul>
+	<li>The ability to define the lifecycle of resources or providers that are registered as Spring beans, overriding the default scope specified by the JAX-RS specification.</li>
+</ul>
+
+
+<ul>
+	<li>Resources and providers can benefit from Spring features such as IoC and post-processors.</li>
+</ul>
+
+
+<ul>
+	<li>Customize Apache Wink from the Spring context. When working with Spring, Apache Wink defines a core spring context that contains customization hooks, enabling easy customization that would otherwise require coding.</li>
+</ul>
+
+
+<h2><a name="5.5SpringIntegration-SpringRegistration"></a>Spring Registration</h2>
+
+<p>Spring makes it convenient to register resources and providers as spring beans.<br/>
+Spring Context Loading. In order to load the Spring Context, it is necessary to add a Context Load Listener definition to the web.xml file. The contextConfigLocation context-param must specify the location of the Apache Wink core context file and the application context file, as described in the following example:</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml"><span class="code-tag">&lt;context-param&gt;</span>
+  <span class="code-tag">&lt;param-name&gt;</span>contextConfigLocation<span class="code-tag">&lt;/param-name&gt;</span>
+  <span class="code-tag">&lt;param-value&gt;</span>classpath:META-INF/server/winkCoreContext-server.xml
+               classpath:mycontext.xml
+  <span class="code-tag">&lt;/param-value&gt;</span>
+<span class="code-tag">&lt;/context-param&gt;</span>
+<span class="code-tag">&lt;listener&gt;</span>
+  <span class="code-tag">&lt;listener-class&gt;</span>
+    org.springframework.web.context.ContextLoaderListener
+  <span class="code-tag">&lt;/listener-class&gt;</span>
+<span class="code-tag">&lt;/listener&gt;</span>
+</pre>
+</div></div>
+
+<h3><a name="5.5SpringIntegration-RegisteringResourcesandProviders"></a>Registering Resources and Providers</h3>
+
+<p>Apache Wink provides the org.apache.wink.spring.Registrar class in order to register resources and providers through a Spring context. The Registrar class extends the WinkApplication class and must be registered as a singleton spring bean. It is possible to define multiple registrars in the same context. All registrars are automatically collected by the runtime and registered as WinkApplication objects during the context loading. The registrar provides the following properties:</p>
+<ul>
+	<li><b>instances</b> &#45; instances of resources and providers. Ordinarily, these instances are Spring beans, so they can benefit from IoC and other Spring features.</li>
+</ul>
+
+
+<ul>
+	<li><b>classes</b> &#45; a set of resources and providers class names. This property is similar to the getClasses() method of the Application class.</li>
+</ul>
+
+
+<ul>
+	<li><b>priority</b> &#45; the priority of the WinkApplication</li>
+</ul>
+
+
+<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Reference</b><br />For more information on Priorities refer to section <a href="5.1 Registration and Configuration.html#5.1RegistrationandConfiguration-Priorities">5.1 Registration and Configuration</a>.</td></tr></table></div>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml"><span class="code-tag">&lt;bean class=<span class="code-quote">"org.apache.wink.spring.Registrar"</span>&gt;</span>
+  <span class="code-tag">&lt;property name=<span class="code-quote">"classes"</span>&gt;</span>
+    <span class="code-tag">&lt;set value-type=<span class="code-quote">"java.lang.Class"</span>&gt;</span>
+      <span class="code-tag">&lt;value&gt;</span>package.className<span class="code-tag">&lt;/value&gt;</span>
+    <span class="code-tag">&lt;/set&gt;</span>
+  <span class="code-tag">&lt;/property&gt;</span>
+  <span class="code-tag">&lt;property name=<span class="code-quote">"instances"</span>&gt;</span>
+    <span class="code-tag">&lt;set&gt;</span>
+      <span class="code-tag">&lt;ref bean=<span class="code-quote">"resources.resource1"</span> /&gt;</span>
+      <span class="code-tag">&lt;ref bean=<span class="code-quote">"resources.resource2"</span> /&gt;</span>
+      <span class="code-tag">&lt;ref bean=<span class="code-quote">"providers.provider1"</span> /&gt;</span>
+    <span class="code-tag">&lt;/set&gt;</span>
+  <span class="code-tag">&lt;/property&gt;</span>
+<span class="code-tag">&lt;/bean&gt;</span>
+</pre>
+</div></div>
+
+<h2><a name="5.5SpringIntegration-CustomPropertiesFileDefinition"></a>Custom Properties File Definition</h2>
+
+<p>Apache Wink provides a set of customizable properties. When working with Spring, the user should redefine the custom properties file using the Spring context:</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml">&lt;bean id=<span class="code-quote">"customPropertiesFactory"</span>
+class=<span class="code-quote">"org.springframework.beans.factory.config.PropertiesFactoryBean"</span>&gt;
+  <span class="code-tag">&lt;property name=<span class="code-quote">"locations"</span>&gt;</span>
+    <span class="code-tag">&lt;list&gt;</span>
+      <span class="code-tag">&lt;value&gt;</span>WEB-INF/configuration.properties<span class="code-tag">&lt;/value&gt;</span>
+    <span class="code-tag">&lt;/list&gt;</span>
+  <span class="code-tag">&lt;/property&gt;</span>
+<span class="code-tag">&lt;/bean&gt;</span>
+<span class="code-tag">&lt;bean id=<span class="code-quote">"customConfigurer"</span> class=<span class="code-quote">"org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"</span>&gt;</span>
+  <span class="code-tag">&lt;property name=<span class="code-quote">"ignoreUnresolvablePlaceholders"</span> value=<span class="code-quote">"true"</span> /&gt;</span>
+  <span class="code-tag">&lt;property name=<span class="code-quote">"order"</span> value=<span class="code-quote">"1"</span> /&gt;</span>
+  <span class="code-tag">&lt;property name=<span class="code-quote">"propertiesArray"</span>&gt;</span>
+    <span class="code-tag">&lt;list&gt;</span>
+      <span class="code-tag">&lt;props&gt;</span>
+       <span class="code-tag">&lt;prop key=<span class="code-quote">"wink.propertiesFactory"</span>&gt;</span>customPropertiesFactory<span class="code-tag">&lt;/prop&gt;</span>
+      <span class="code-tag">&lt;/props&gt;</span>
+    <span class="code-tag">&lt;/list&gt;</span>
+  <span class="code-tag">&lt;/property&gt;</span>
+<span class="code-tag">&lt;/bean&gt;</span>
+</pre>
+</div></div>
+<ul>
+	<li>The customPropertiesFactory bean loads the properties file.</li>
+</ul>
+
+
+<ul>
+	<li>The customConfigurer bean overrides the default factory with a custom factory.</li>
+</ul>
+
+
+<ul>
+	<li>The order is set to "1". This makes the customConfigurer bean run before the default Apache Wink configurer.</li>
+</ul>
+
+
+<ul>
+	<li>In addition, notice that ignoreUnresolvablePlaceholders must be set to true, otherwise the configurer will fail, since some unresolved properties can remain in the context.</li>
+</ul>
+
+
+<h2><a name="5.5SpringIntegration-CustomizingMediaTypeMappings"></a>Customizing Media-Type Mappings</h2>
+
+<p>Apache Wink provides the ability to customize the Media-Type mappings using Spring context.</p>
+
+<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Reference</b><br />For more information on Media-Type Mapping refer to section <a href="5.1 Registration and Configuration.html#5.1RegistrationandConfiguration-MediaTypeMapping">5.1 Registration and Configuration</a> .</td></tr></table></div>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml"><span class="code-tag">&lt;bean id=<span class="code-quote">"custom.MediaTypeMapper"</span> class=<span class="code-quote">"org.apache.wink.server.internal.MediaTypeMapper"</span>&gt;</span>
+  <span class="code-tag">&lt;property name=<span class="code-quote">"mappings"</span>&gt;</span>
+    <span class="code-tag">&lt;list&gt;</span>
+      <span class="code-tag">&lt;map&gt;</span>
+        <span class="code-tag">&lt;entry key=<span class="code-quote">"userAgentStartsWith"</span> value=<span class="code-quote">"Mozilla/"</span> /&gt;</span>
+        <span class="code-tag">&lt;entry key=<span class="code-quote">"resultMediaType"</span>&gt;</span>
+          <span class="code-tag">&lt;util:constant static-field=<span class="code-quote">" javax.ws.rs.core.MediaType.ATOM"</span> /&gt;</span>
+        <span class="code-tag">&lt;/entry&gt;</span>
+        <span class="code-tag">&lt;entry key=<span class="code-quote">"typeToSend"</span>&gt;</span>
+          <span class="code-tag">&lt;util:constant static-field=<span class="code-quote">"javax.ws.rs.core.MediaType.TEXT_XML"</span> /&gt;</span>
+        <span class="code-tag">&lt;/entry&gt;</span>
+      <span class="code-tag">&lt;/map&gt;</span>
+    <span class="code-tag">&lt;/list&gt;</span>
+  <span class="code-tag">&lt;/property&gt;</span>
+<span class="code-tag">&lt;/bean&gt;</span>
+<span class="code-tag">&lt;bean id=<span class="code-quote">"customConfigurer"</span> class=<span class="code-quote">"org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"</span>&gt;</span>
+  <span class="code-tag">&lt;property name=<span class="code-quote">"ignoreUnresolvablePlaceholders"</span> value=<span class="code-quote">"true"</span> /&gt;</span>
+  <span class="code-tag">&lt;property name=<span class="code-quote">"order"</span> value=<span class="code-quote">"1"</span> /&gt;</span>
+  <span class="code-tag">&lt;property name=<span class="code-quote">"propertiesArray"</span>&gt;</span>
+    <span class="code-tag">&lt;list&gt;</span>
+      <span class="code-tag">&lt;props&gt;</span>
+        <span class="code-tag">&lt;prop key=<span class="code-quote">"wink.MediaTypeMapper"</span>&gt;</span>custom.MediaTypeMapper<span class="code-tag">&lt;/prop&gt;</span>
+      <span class="code-tag">&lt;/props&gt;</span>
+    <span class="code-tag">&lt;/list&gt;</span>
+  <span class="code-tag">&lt;/property&gt;</span>
+<span class="code-tag">&lt;/bean&gt;</span>
+</pre>
+</div></div>
+
+<ul>
+	<li>The custom.MediaTypeMapper bean creates a new Media-Type mapper.</li>
+</ul>
+
+
+<ul>
+	<li>The customConfigurer bean overrides the default factory with a custom factory.</li>
+</ul>
+
+
+
+<p><div class='panelMacro'><table class='noteMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>customConfigurer</b><br />The order is set to "1". This makes the customConfigurer run before the default Apache Wink configurer.</td></tr></table></div>&#42; In addition, notice that ignoreUnresolvablePlaceholders must be set to true, otherwise the configurer will fail, since some unresolved properties can remain in the context.</p>
+
+<h2><a name="5.5SpringIntegration-CustomizingAlternativeShortcuts"></a>Customizing Alternative Shortcuts</h2>
+
+<p>Apache Wink provides the ability to customize the Alternative Shortcuts in one of two ways.</p>
+<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Reference</b><br />For more information on Alternative Shortcuts Mappings refer to section <a href="5.1 Registration and Configuration.html#5.1RegistrationandConfiguration-CustomizingMappings">5.1 Registration and Configuration</a>.</td></tr></table></div>
+
+
+<h3><a name="5.5SpringIntegration-ExternalPropertiesFile"></a>External Properties File</h3>
+
+<p>The shortcuts are defined in a properties file. The shortcuts properties file is loaded in the same way that the configuration properties file is loaded.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml">&lt;bean id=<span class="code-quote">"custom.Shortcuts"</span>
+class=<span class="code-quote">"org.springframework.beans.factory.config.PropertiesFactoryBean"</span>&gt;
+  <span class="code-tag">&lt;property name=<span class="code-quote">"locations"</span>&gt;</span>
+    <span class="code-tag">&lt;list&gt;</span>
+      <span class="code-tag">&lt;value&gt;</span>WEB-INF/shortcuts<span class="code-tag">&lt;/value&gt;</span>
+    <span class="code-tag">&lt;/list&gt;</span>
+  <span class="code-tag">&lt;/property&gt;</span>
+<span class="code-tag">&lt;/bean&gt;</span>
+<span class="code-tag">&lt;bean id=<span class="code-quote">"customConfigurer"</span> class=<span class="code-quote">"org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"</span>&gt;</span>
+  <span class="code-tag">&lt;property name=<span class="code-quote">"ignoreUnresolvablePlaceholders"</span> value=<span class="code-quote">"true"</span> /&gt;</span>
+  <span class="code-tag">&lt;property name=<span class="code-quote">"order"</span> value=<span class="code-quote">"1"</span> /&gt;</span>
+  <span class="code-tag">&lt;property name=<span class="code-quote">"propertiesArray"</span>&gt;</span>
+    <span class="code-tag">&lt;list&gt;</span>
+      <span class="code-tag">&lt;props&gt;</span>
+        <span class="code-tag">&lt;prop key=<span class="code-quote">"wink.alternateShortcutsMap"</span>&gt;</span>custom.Shortcuts<span class="code-tag">&lt;/prop&gt;</span>
+      <span class="code-tag">&lt;/props&gt;</span>
+    <span class="code-tag">&lt;/list&gt;</span>
+  <span class="code-tag">&lt;/property&gt;</span>
+<span class="code-tag">&lt;/bean&gt;</span>
+</pre>
+</div></div>
+
+<h3><a name="5.5SpringIntegration-SpringContextFile"></a>Spring Context File</h3>
+
+<p>Defines the map of the shortcuts in the Spring context.</p>
+
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/5.6 WebDAV Extension.html b/src/site/resources/1.0/html/5.6 WebDAV Extension.html
new file mode 100644
index 0000000..92f023c
--- /dev/null
+++ b/src/site/resources/1.0/html/5.6 WebDAV Extension.html
@@ -0,0 +1,141 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : 5.6 WebDAV Extension</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : 5.6 WebDAV Extension
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Oct 13, 2009 by <font color="#0050B2">michael</font>.
+				    </div>
+
+				    <h1><a name="5.6WebDAVExtension-WebDAVExtension"></a>WebDAV Extension</h1>
+
+<p>Apache Wink provides an extension module for supporting the WebDAV protocol. The extension contains the complete WebDAV XML model and a WebDAV response builder for easing the process of creating a WebDAV multistatus response.</p>
+
+<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Usful Information</b><br />The WebDAV extension is a single jar wink-webdav-&lt;version&gt;.jar, and it has no special dependencies.</td></tr></table></div> 
+
+
+
+<h2><a name="5.6WebDAVExtension-WebDAVDataModel"></a>WebDAV Data Model</h2>
+
+<p>The WebDAV extension provides a Java data model that reflects the WebDAV XMLs defined in the WebDAV RFC. All classes of the data model are located in the org.apache.wink.webdav.model package.</p>
+
+<h2><a name="5.6WebDAVExtension-WebDAVClasses"></a>WebDAV Classes</h2>
+
+<p>The WebDAV extension provides several classes that applications can use in order to receive basic support for common WebDAV methods.</p>
+
+<h3><a name="5.6WebDAVExtension-WebDAVModelHelper"></a>WebDAVModelHelper</h3>
+
+<p>The WebDAVModelHelper class provides helper methods for XML marshaling and unmarshaling of the WebDAV data model classes. It also provides helper methods for creating generic properties as DOM element classes to populate the WebDAV Prop element.</p>
+
+<h3><a name="5.6WebDAVExtension-WebDAVResponseBuilder"></a>WebDAVResponseBuilder</h3>
+
+<p>The WebDAVResponseBuilder class is used in order to create responses to WebDAV PROPFIND requests. It takes a SyndEntry or SyndFeed as input in order to create the response.</p>
+
+<h2><a name="5.6WebDAVExtension-ResourceMethodDefinition"></a>Resource Method Definition</h2>
+
+<p>A resource method is defined to handle the desired WebDAV method by annotating it with one of the WebDAV method designators defined in the WebDAVMethod enum.<br/>
+The supported WebDAV Http methods are as follows:</p>
+<ul>
+	<li>PROPFIND</li>
+</ul>
+
+
+<ul>
+	<li>PROPPATCH</li>
+</ul>
+
+
+<ul>
+	<li>MKCOL</li>
+</ul>
+
+
+<ul>
+	<li>COPY</li>
+</ul>
+
+
+<ul>
+	<li>MOVE</li>
+</ul>
+
+
+<ul>
+	<li>LOCK</li>
+</ul>
+
+
+<ul>
+	<li>UNLOCK.</li>
+</ul>
+
+
+<h2><a name="5.6WebDAVExtension-CreatingaMultistatusResponse"></a>Creating a Multistatus Response</h2>
+
+<p>In order to create a <b>MULTISTATUS</b> response to a <b>PROPFIND</b> request the user can use the <b>WebDAVResponseBuilder</b> class, or create the response manually.</p>
+
+<h3><a name="5.6WebDAVExtension-UsingWebDAVResponseBuilder"></a>Using WebDAVResponseBuilder</h3>
+
+<p>In order to create a multistatus response using the <b>WebDAVResponseBuilder</b> class, call one of the propfind() methods.</p>
+
+<p>The <b>WebDAVResponseBuilder</b> class also enables the user to provide the properties to include in the response by extending the PropertyProvider class, overriding the setPropertyValue() method and passing the property provider instance to the response builder propfind() method.</p>
+
+<h3><a name="5.6WebDAVExtension-WebDAVResponseBuilderExample"></a>WebDAVResponseBuilder Example</h3>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml">
+@Path(<span class="code-quote">"defects/{defect}"</span>)
+public class DefectResource {
+  @WebDAVMethod.PROPFIND
+  @Consumes(<span class="code-quote">"application/xml"</span>)
+  @Produces(application/xml")
+  public Response propfindDefect(@PathParam(<span class="code-quote">"defect"</span>) String defected) {
+    SyndFeed feed = ...
+    return WebDAVResponseBuilder.propfind(feed);
+  }
+}
+</pre>
+</div></div>
+<p>The propfindDefect() method is associated with the PROPFIND WebDAV Http method using the @WebDAVMethod.PROPFIND annotation.</p>
+
+<p>When the propfindDefect() method is invoked, an instance of a  org.apache.wink.common.model.synd.SyndFeed is created and passed to the WebDAVResponseBuilder.propfind() method in order to create the actual response.</p>
+
+<h3><a name="5.6WebDAVExtension-ManualCreation"></a>Manual Creation</h3>
+
+<p>In order to create a Multistatus response manually, perform the following steps:</p>
+
+<ol>
+	<li>Create a new org.apache.wink.webdav.model.Multistatus instance and set its fields according to the application logic.</li>
+	<li>Create a new javax.ws.rs.core.Response instance, set the response code to MULTI_STATUS (207), and set its entity to be the Multistatus instance.</li>
+</ol>
+
+
+
+<p>Return the Response instance from the resource method</p>
+
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/5.7 Handler Chain - Runtime Extension.html b/src/site/resources/1.0/html/5.7 Handler Chain - Runtime Extension.html
new file mode 100644
index 0000000..25fbb51
--- /dev/null
+++ b/src/site/resources/1.0/html/5.7 Handler Chain - Runtime Extension.html
@@ -0,0 +1,208 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : 5.7 Handler Chain - Runtime Extension</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : 5.7 Handler Chain - Runtime Extension
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Oct 12, 2009 by <font color="#0050B2">bluk</font>.
+				    </div>
+
+				    <h1><a name="5.7HandlerChain-RuntimeExtension-HandlerChainRuntimeExtension"></a>Handler Chain - Runtime Extension</h1>
+
+<p>The Apache Wink runtime utilizes three Handler Chains for the complete processing of a request: Request chain, Response chain and Error chain. A handler receives a MessageContext instance for accessing and manipulating the current request information and a HandlerChain instance for advancing the chain. It is the responsibility of the handler to pass control to the next handler on the chain by invoking the doChain() method on the HandlerChain instance.</p>
+
+<p>A handler may call the doChain() method several times if needed, so handlers are required to consider the possibility they will be invoked more than once for the same request.<br/>
+All handler related interfaces reside in the org.apache.wink.server.handlers package.</p>
+
+<p>The implementation of separate chains provides the ability to move up and down one chain before moving on to the next chain. This is particularly useful for the implementation of the JAX-RS resource-method search algorithm that includes invoking sub-resource locators, and implementing the Continued Search mode.</p>
+
+<h2><a name="5.7HandlerChain-RuntimeExtension-Handlers"></a>Handlers</h2>
+
+<p>There are two types of handlers:</p>
+<ul>
+	<li><b>System Handler -</b> are the handlers that implement the core engine of the Apache Wink runtime. The Apache Wink runtime will not function correctly if any of the system handlers are removed from the chain.</li>
+</ul>
+
+
+<ul>
+	<li><b>User Handler -</b> are the handlers that are provided by an application to customize a chains behavior and to add unique functionality to it. User handlers are not part of the core functionality of Apache Wink.</li>
+</ul>
+
+
+<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Reference</b><br />In order to customize a handler chain refer to section 2 "<b>Apache Wink Building Blocks</b>", <a href="2 Apache Wink Building Blocks.html#2ApacheWinkBuildingBlocks-CustomizationoftheHandlersChain">Customization of the Handlers Chain</a></td></tr></table></div>
+
+<h2><a name="5.7HandlerChain-RuntimeExtension-MessageContext"></a>Message Context</h2>
+
+<p>The MessageContext allows the following:<br/>
+Allows handlers to access and manipulate the current request informationAllows handlers to maintain a state by setting attributes on the message context, as the handlers themselves are singletons and therefore statelessAllows handlers to pass information to other handlers on the chain</p>
+
+<h2><a name="5.7HandlerChain-RuntimeExtension-RequestHandlerChain"></a>Request Handler Chain</h2>
+
+<p>The Request Handler Chain is responsible for processing a request according to the JAX-RS specification by accepting the request, searching for the resource method to invoke, de-serializing the request entity and finally for invoking the resource method. It is responsible for invoking sub-resource locators by moving up and down the chain as needed. A Request handler is a class that implements the org.apache.wink.server.handlers.RequestHandler interface.</p>
+
+
+<h2><a name="5.7HandlerChain-RuntimeExtension-SystemRequestHandlers"></a>System Request Handlers</h2>
+
+<p>The following is a list of system handlers comprising the request handler chain in the order that they appear in the chain.</p>
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'> Handler </th>
+<th class='confluenceTh'> Description </th>
+</tr>
+<tr>
+<td class='confluenceTd'> SearchResultHandler </td>
+<td class='confluenceTd'> Responsible for throwing the search result error if there was one during the search for the resource method </td>
+</tr>
+<tr>
+<td class='confluenceTd'> OptionsMethodHandler </td>
+<td class='confluenceTd'> Generates a response for an OPTIONS request in case that there is no resource method that is associated with OPTIONS, according to the JAX-RS spec </td>
+</tr>
+<tr>
+<td class='confluenceTd'> HeadMethodHandler </td>
+<td class='confluenceTd'> Handles a response for a HEAD request in case that there is no resource method that is associated with HEAD, according to the JAX-RS spec </td>
+</tr>
+<tr>
+<td class='confluenceTd'> FindRootResourceHandler </td>
+<td class='confluenceTd'> Locates the root resource that best matches the request </td>
+</tr>
+<tr>
+<td class='confluenceTd'> FindResourceMethodHandler </td>
+<td class='confluenceTd'> Locates the actual method to invoke that matches the request, invoking sub-resource locators as needed </td>
+</tr>
+<tr>
+<td class='confluenceTd'> CreateInvocationParametersHandler </td>
+<td class='confluenceTd'> Creates the parameters of the resource method to invoke and de-serializes the request entity using the appropriate MessageBodyReader </td>
+</tr>
+<tr>
+<td class='confluenceTd'> InvokeMethodHandler </td>
+<td class='confluenceTd'> Invokes the resource method </td>
+</tr>
+</tbody></table>
+
+
+<h3><a name="5.7HandlerChain-RuntimeExtension-UserRequestHandlers"></a>User Request Handlers</h3>
+
+<p>User request handlers are inserted before the InvokeMethodHandler handler.</p>
+
+<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Reference</b><br />In order to customize a handler chain refer to section 2 "<b>Apache Wink Building Blocks</b>", <a href="2 Apache Wink Building Blocks.html#2ApacheWinkBuildingBlocks-CustomizationoftheHandlersChain">Customization of the Handlers Chain</a></td></tr></table></div>
+
+<h2><a name="5.7HandlerChain-RuntimeExtension-ResponseHandlerChain"></a>Response Handler Chain</h2>
+
+<p>The Response Handler Chain is responsible for handling the object returned from invoking a resource method or sub-resource method according to the JAX-RS specification. It is responsible for determining the response status code, selecting the response media type and for serializing the response entity.<br/>
+A Response handler is a class that implements the <b>org.apache.wink.server.handlers.ResponseHandler interface.</b></p>
+
+
+
+<h3><a name="5.7HandlerChain-RuntimeExtension-SystemResponseHandlers"></a>System Response Handlers</h3>
+
+<p>The following is a list of system handlers comprising the response handler chain in the order that they appear in the chain.</p>
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'> Handler <br clear="all" /> </th>
+<th class='confluenceTh'> Description <br clear="all" /> </th>
+</tr>
+<tr>
+<td class='confluenceTd'> PopulateResponseStatusHandler <br clear="all" /> </td>
+<td class='confluenceTd'> Determines the response status code, according to the JAX-RS spec <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> PopulateResponseMediaTypeHandler <br clear="all" /> </td>
+<td class='confluenceTd'> Determines the response media type, according to the JAX-RS spec <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> FlushResultHandler <br clear="all" /> </td>
+<td class='confluenceTd'> Serializes the response entity using the appropriate MessageBodyWriter <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> HeadMethodHandler <br clear="all" /> </td>
+<td class='confluenceTd'> Performs cleanup operations in case that there was no resource method that was associated with HEAD. <br clear="all" /> </td>
+</tr>
+</tbody></table>
+
+<h3><a name="5.7HandlerChain-RuntimeExtension-UserResponseHandlers"></a>User Response Handlers</h3>
+
+<p>User response handlers are inserted before the FlushResultHandler handler. Apache Wink initializes the user response handler chain with the <b>CheckLocationHeaderHandler</b> handler that verifies that the "<b>Location</b>" response header is present on a response when there is a status code that requires it, for example, status code: 201.</p>
+
+<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Reference</b><br />In order to customize a handler chain refer to section 2 "<b>Apache Wink Building Blocks</b>", <a href="2 Apache Wink Building Blocks.html#2ApacheWinkBuildingBlocks-CustomizationoftheHandlersChain">Customization of the Handlers Chain</a></td></tr></table></div>
+
+<h2><a name="5.7HandlerChain-RuntimeExtension-ErrorHandlerChain"></a>Error Handler Chain</h2>
+
+<p>The Error Handler Chain is responsible for handling all of the exceptions that are thrown during the invocation of the Request and Response handler chains, according to the JAX-RS specification for handling exceptions. It is responsible for determining the response status code, selecting the response media type and for serializing the response entity.</p>
+
+<p>An Error handler is a class that implements the org.apache.wink.server.handlers.ResponseHandler interface.</p>
+
+<h3><a name="5.7HandlerChain-RuntimeExtension-SystemErrorHandlers"></a>System Error Handlers</h3>
+
+<p>The following is a list of system handlers comprising the error handler chain in the order that they appear in the chain.</p>
+
+<h3><a name="5.7HandlerChain-RuntimeExtension-ErrorHandlers"></a>Error Handlers</h3>
+
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'> Handler <br clear="all" /> </th>
+<th class='confluenceTh'> Description <br clear="all" /> </th>
+</tr>
+<tr>
+<td class='confluenceTd'> PopulateErrorResponseHandler <br clear="all" /> </td>
+<td class='confluenceTd'> Prepares the response entity from a thrown exception according to the JAX-RS specification <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> PopulateResponseStatusHandler <br clear="all" /> </td>
+<td class='confluenceTd'> Determines the response status code according to the JAX-RS spec <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> PopulateResponseMediaTypeHandler <br clear="all" /> </td>
+<td class='confluenceTd'> Determines the response media type, according to the JAX-RS spec <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> FlushResultHandler <br clear="all" /> </td>
+<td class='confluenceTd'> Serializes the response entity using the appropriate MessageBodyWriter <br clear="all" /> </td>
+</tr>
+</tbody></table>
+
+<h3><a name="5.7HandlerChain-RuntimeExtension-UserErrorHandlers"></a>User Error Handlers</h3>
+
+<p>User error handlers are inserted before the FlushResultHandler handler.</p>
+
+<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Reference</b><br />In order to customize a handler chain refer to section 2 "<b>Apache Wink Building Blocks</b>", <a href="2 Apache Wink Building Blocks.html#2ApacheWinkBuildingBlocks-CustomizationoftheHandlersChain">Customization of the Handlers Chain</a></td></tr></table></div>
+
+<h2><a name="5.7HandlerChain-RuntimeExtension-RequestProcessing"></a>Request Processing</h2>
+
+<p>The following details how the Apache Wink runtime performs request processing:</p>
+<ol>
+	<li>Create new instances of the three handler chains. The handlers themselves are singletons.</li>
+	<li>Create a new instance of a MessageContext to pass between the handlers.</li>
+	<li>Invoke the first handler on the Request chain.</li>
+	<li>Once the request chain is complete, invoke the Response chain and pass it the MessageContext that was used in the Request chain.</li>
+	<li>Make both chains and the MessageContext available for garbage collection.</li>
+</ol>
+
+
+<p>If at any time during the execution of a Request or Response chain an exception is thrown, catch the exception, wrap it in a new MessageContext instance and invoke the Error chain to produce an appropriate response.</p>
+
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/5.8 Link Builder.html b/src/site/resources/1.0/html/5.8 Link Builder.html
new file mode 100644
index 0000000..d2ca5d3
--- /dev/null
+++ b/src/site/resources/1.0/html/5.8 Link Builder.html
@@ -0,0 +1,124 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : 5.8 Link Builder</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : 5.8 Link Builder
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Oct 12, 2009 by <font color="#0050B2">bluk</font>.
+				    </div>
+
+				    <h1><a name="5.8LinkBuilder-LinkBuilders"></a>Link Builders</h1>
+
+<p>The LinkBuilders interface enables access to two types of links builders, the SystemLinksBuilder and the SingleLinkBuilder. An instance of LinkBuilders is injected into a class field or method parameter using the @Context annotation.</p>
+
+<p>Upon creation, the LinkBuilders automatically detects if the target method being invoked is a resource method or a sub-resource method. The "resource" and "subResource" properties of the builder are initialized accordingly. The link builder interfaces reside in the org.apache.wink.server.utils package.</p>
+
+
+<h2><a name="5.8LinkBuilder-LinkBuildersOverview"></a>Link Builders Overview</h2>
+
+<p>The JAX-RS specification defines the UriBuilder interface used to construct a URI from a template, but does not specify any mechanism that can automatically generate all resource links.<br/>
+Apache Wink provides the SystemLinksBuilder for automatic generation of all the alternate links to a resource, one link per every supported media type. For example, this is useful for an application that produces Atom feeds to include in the feed all the alternate representations of the resource.</p>
+
+
+<p>Apache Wink provides a mechanism for defining if the generated links should be absolute links or relative to a base URI. For example, links embedded in an Atom feed should be as short as possible in order to optimize the payload size.</p>
+
+
+<h3><a name="5.8LinkBuilder-The%22alt%22QueryParameter"></a>The "alt" Query Parameter</h3>
+
+<p>Apache Wink supports the special query parameter "alt" that is used to override the value of the request Accept header. When the link builders generate a link that specifies the "type" attribute, then the "alt" query parameter is automatically added to the generated link. This is controlled by setting the wink.addAltParam key of the configuration properties file or by calling the LinksBuilder#addAltParam() method.</p>
+
+<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Reference</b><br />For more information on the Configuration Properties File refer to section <a href="5.1 Registration and Configuration.html#5.1RegistrationandConfiguration-ProviderPriorities">5.1 Registration and Configuration</a>.</td></tr></table></div>
+
+<h2><a name="5.8LinkBuilder-SystemLinksBuilder"></a>System Links Builder</h2>
+
+<p>The SystemLinksBuilder interface enables the generation of all, or a subset of, the system links to a resource or its sub-resources. The links are generated as absolute URIs or as relative to the base URI according to the SystemLinksBuilder state, request information or the application configuration.</p>
+
+<h3><a name="5.8LinkBuilder-Example"></a>Example</h3>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml">
+@Path(<span class="code-quote">"defects/{id}"</span>)
+public class DefectResource {
+@GET
+@Produces(<span class="code-quote">"application/atom+xml"</span>)
+public SyndEntry getAtom() {     ...   }
+@GET
+@Produces(<span class="code-quote">"application/json"</span>)
+public JSONObject getJson() {    ...  }
+}
+@GET
+@Produces(<span class="code-quote">"application/xml"</span>)
+public Defect getXml(@Context LinkBuilders linkBuilders) {     SystemLinksBuilder builder = linkBuilders.systemLinksBuilder();     ListsystemLinks = builder.build(null);     ...   }
+}
+</pre>
+</div></div>
+
+<h3><a name="5.8LinkBuilder-Explanation"></a>Explanation</h3>
+
+<p>The DefectResource#getXml() method is invoked when a GET request for application/xml is made to /defects/3. The Apache Wink runtime injects an instance of LinkBuilders to the linkBuilder parameter and a new instance of a SystemLinksBuilder is created by invoking the systemLinksBuilder() method.<br/>
+The call to the build() method of the SystemLinksBuilder generates three alternate links to the DefectResource and the self link:</p>
+
+
+<ul>
+	<li>&lt;link rel="self" href="/defects/3"/&gt;</li>
+</ul>
+
+
+<ul>
+	<li>&lt;link rel="alternate" type="application/json" href="/defects/3"/&gt;</li>
+</ul>
+
+
+<ul>
+	<li>&lt;link rel="alternate" type="application/xml" href="/defects/3"/&gt;</li>
+</ul>
+
+
+<ul>
+	<li>&lt;link rel="alternate" type="application/xtom+xml" href="/defects/3"/&gt;</li>
+</ul>
+
+
+<h2><a name="5.8LinkBuilder-SingleLinkBuilder"></a>Single Link Builder</h2>
+
+<p>The SingleLinkBuilder interface enables the generation of a single link referencing a resource or a sub-resource, allowing the specification of the 'rel' and 'type' attributes of the generated link. The links are generated as absolute URIs or as relative to the base URI according to the SingleLinkBuilder state, request information or the application configuration.<br/>
+Generating Absolute or Relative Links<br/>
+The link builders generate absolute or relative links based on the following algorithm:</p>
+
+<ol>
+	<li>Use the value that was passed to the relativize() method of the builder.</li>
+	<li>If the relativize() method was not called, then use the value of the "relative-urls" query parameter from the request. The value must be either true or false.</li>
+	<li>If the request does not contain the "<b>relative-urls</b>" query parameter, then use the value of the wink.defaultUrisRelative key set in the application configuration properties file. The value must be either true or false.</li>
+	<li>If the configuration key does not exist, then use true.</li>
+</ol>
+
+
+
+<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Reference</b><br />For more information on the Configuration Properties File refer to section <a href="5.1 Registration and Configuration.html#5.1RegistrationandConfiguration-ProviderPriorities">5.1 Registration and Configuration</a>.</td></tr></table></div>
+
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/5.9 Assets.html b/src/site/resources/1.0/html/5.9 Assets.html
new file mode 100644
index 0000000..76629ff
--- /dev/null
+++ b/src/site/resources/1.0/html/5.9 Assets.html
@@ -0,0 +1,291 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : 5.9 Assets</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : 5.9 Assets
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Oct 13, 2009 by <font color="#0050B2">michael</font>.
+				    </div>
+
+				    <h1><a name="5.9Assets-Assets"></a>Assets</h1>
+
+<p>An Asset is a special entity that is returned by a resource method or is injected into a resource method as an entity parameter. The asset is used for retrieving the actual request entity or response entity.<br/>
+The purpose of an asset is to act as a container of an entity data model while providing the transformation methods of the data model into data models of other representations.<br/>
+Asset classes are POJOs, annotated with the @Asset annotation, that have any number of entity methods.</p>
+
+<p>When an asset instance is returned from a resource method or is set as the entity on a Response instance, it is used by the Apache Wink runtime to retrieve the actual response entity by invoking the appropriate entity-producing method of the asset.</p>
+
+<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Reference</b><br />For more information on Entity-Producing Methods refer to section <a href="#5.9Assets-EntityProducingMethods">Entity Producing Methods</a>.</td></tr></table></div>
+
+<p>When an asset is the entity parameter of a resource method, it is used by the Apache Wink runtime to set the actual request entity by invoking the appropriate entity-consuming method of the asset.</p>
+
+<h2><a name="5.9Assets-AssetsOverview"></a>Assets Overview</h2>
+
+<p>A typical application exposes each resource in a number of representations. Some form of data model usually backs the resource, and the application business logic relies on the manipulation of that data model. The application will most likely expose resource methods allowing the consumption of the data model in more than one representation (for example Atom and XML) and the production of the data model in other representation (for example Atom, XML and JSON).</p>
+
+<p>According to the JAX-RS specification, the optimal method for implementing a resource is one that consumes and produces an application data model and makes use of a different provider for every media type.</p>
+
+<p>For example, if a resource implements methods that consume and produce a "Defect" bean, then a provider  must be implemented for each representation of the "Defect" (Atom, XML and JSON). However, there are times that the transformation of the application data model into a representation requires information that may only be available to the resource but is unavailable to a provider (for example, a connection to the Database).</p>
+
+<p>There are several solutions for dealing with the problem of a provider not having sufficient information to perform application data transformations. The following is a description of two possible solutions:</p>
+
+<ul>
+	<li>Passing the information as members on the resource and accessing the resource from the provider via the UriInfo context.</li>
+</ul>
+
+
+<p>This solution is only plausible if the resource scope is "per request" and does not work if the resource is a singleton.</p>
+
+<ul>
+	<li>Passing the information from the resource to the provider via the attributes of the HttpServletRequest.</li>
+</ul>
+
+
+<p>This solution is only plausible when the application is deployed in a JEE container and is not the optimal solution.<br/>
+In addition to the previously mentioned problem, the creation of a provider for every data model per media type may result in the inflation of providers in the system, causing the provider selection algorithm to consider a large set of potential providers.</p>
+
+<p>As a result, the selection of the actual provider from the set of potential providers is non-deterministic, because the selection between them is undefined.</p>
+
+
+<p><div class='panelMacro'><table class='tipMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/check.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Performance Degradation</b><br />An additional side effect of provider inflation is performance degradation.</td></tr></table></div>The use of an asset solves the problem of passing information between a resource and a provider and reduces the amount of registered providers in the system.</p>
+
+<h2><a name="5.9Assets-Lifecycle"></a>Lifecycle</h2>
+
+<p>Resource methods can use an asset as a response entity and as a request entity. The Apache Wink runtime applies different lifecycles for each case.</p>
+
+<h3><a name="5.9Assets-ResponseEntityAsset"></a>Response Entity Asset</h3>
+
+<p>The lifecycle of an asset as a response entity is as follows:</p>
+<ol>
+	<li>The application creates and returns the asset from the resource method.</li>
+	<li>The appropriate entity-producing method is invoked by the Apache Wink runtime to retrieve the actual response entity.</li>
+	<li>The appropriate message body writer as obtained from the Providers#getMessageBodyWriter() method serializes the entity obtained at the previous step.</li>
+	<li>The asset is made available for garbage collection.</li>
+</ol>
+
+
+
+
+
+
+<h3><a name="5.9Assets-RequestEntityAsset"></a>Request Entity Asset</h3>
+
+<p>The lifecycle of an asset as a request entity is as follows:</p>
+
+<ol>
+	<li>An asset class is instantiated by the Apache Wink runtime by invoking the asset default constructor. Note that this implies that the asset class must have a public default constructor.</li>
+	<li>The appropriate message body reader as obtained from the Providers#getMessageBodyReader() method is invoked by the Apache Wink runtime to read the request entity.</li>
+	<li>The appropriate entity-consuming method is invoked on the asset to populate the asset with the request entity.</li>
+	<li>The asset is injected into the resource method as the entity parameter.</li>
+	<li>The asset is made available for garbage collection after returning from the resource method.</li>
+</ol>
+
+
+
+
+
+
+
+<h3><a name="5.9Assets-AssetEntityMethods"></a>Asset Entity Methods</h3>
+
+<p>Asset Entity methods are the public methods of an asset annotated with either @Consumes or @Produces annotation. Annotating a method with both @Consumes and @Produces annotations is not supported and may result in unexpected behavior.</p>
+
+<h3><a name="5.9Assets-EntityProducingMethods"></a>Entity Producing Methods</h3>
+
+<p>An Entity Producing Method is a public asset method annotated with the @Produces annotation, designating it to produce the actual response entity. Such methods produce an entity only for the media types declared in the @Produces annotation. Note that under this definition, wildcard ("<b>/</b>") is allowed.<br/>
+The Apache Wink runtime will not invoke an entity-producing method whose effective value of @Produces does not match the request Accept header</p>
+
+<h3><a name="5.9Assets-EntityConsumingMethods"></a>Entity Consuming Methods</h3>
+
+<p>An Entity Consuming Method is a public asset method annotated with the @Consumes annotation, designating it to consume the actual request entity for populating the asset. Such methods consume an entity only for the media types declared in the @Consumes annotation. Note that under this definition, wildcard ("<b>/</b>") is allowed.<br/>
+The Apache Wink runtime will not invoke an entity-consuming method whose effective value of @Consumes does not match the request Content-Type header.</p>
+
+<h2><a name="5.9Assets-Parameters"></a>Parameters</h2>
+
+<p>Asset Entity methods support the same parameter types as JAX-RS specifies for a resource method.</p>
+
+
+<h2><a name="5.9Assets-ReturnType"></a>Return Type</h2>
+
+<p>Entity methods may return any type that is permissible to return from a resource method.</p>
+
+<h2><a name="5.9Assets-Exceptions"></a>Exceptions</h2>
+
+<p>Exceptions thrown from an entity method are treated as exceptions thrown from a resource method.</p>
+
+<h2><a name="5.9Assets-AnnotationInheritance"></a>Annotation Inheritance</h2>
+
+<p>The @Produces and @Consumes annotations are not inherited when an asset sub-class overrides an asset entity method. Asset sub-classes must re-declare the @Produces and @Consumes annotations for the overriding method to be an entity method.</p>
+
+<h2><a name="5.9Assets-EntityMethodMatching"></a>Entity Method Matching</h2>
+
+<p>Asset classes are handled by the AssetProvider which is a JAX-RS provider that is capable of consuming and producing all media types.</p>
+
+<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Reference</b><br />For more information on Asset Providers refer to section 7.7 Assets Provider.</td></tr></table></div>
+
+<h3><a name="5.9Assets-RequestEntityMatching"></a>Request Entity Matching</h3>
+
+<p>The following points describe the process of selecting the asset entity-consuming method to handle the request entity. This process occurs during the invocation of the <b>AssetProvider#isReadable()</b> method.</p>
+
+<ol>
+	<li>Collect all the entity-consuming methods of the asset. These are the public methods annotated with @Consumes annotation.</li>
+	<li>Sort the collected entity-consuming methods in descending order, where methods with more specific media types precede methods with less specific media types, following the rule n/m &gt; n/&#42; &gt; <b>/</b>.</li>
+	<li>Select the first method that supports the media type of the request entity body as provided to the AssetProvider#isReadable() method, and return true.</li>
+	<li>If no entity-consuming method supports the media type of the request entity body, return false. The Apache Wink runtime continues searching for a different provider to handle the asset as a regular entity.</li>
+</ol>
+
+
+
+
+
+
+<h3><a name="5.9Assets-ResponseEntityMatching"></a>Response Entity Matching</h3>
+
+<p>The following points describe the process of selecting an entity-producing method to produce the actual response entity. The following process occurs during the invocation of the <b>AssetProvider#isWriteable()</b> method.</p>
+<ol>
+	<li>Collect all the entity-producing methods of the asset. These are the public methods annotated with @Produces annotation.</li>
+	<li>Sort the collected entity-producing methods in descending order, where methods with more specific media types precede methods with less specific media types, following the rule n/m &gt; n/&#42; &gt; <b>/</b>.</li>
+	<li>Select the first method that supports the media type of the response entity body as provided to the AssetProvider#isWriteable()method and return true.</li>
+	<li>&nbsp;If no entity-producing method supports the media type of the response entity body, return false. The Apache Wink runtime continues searching for a different provider to handle the asset as a regular entity.</li>
+</ol>
+
+
+
+
+
+
+<h2><a name="5.9Assets-AssetExample"></a>Asset Example</h2>
+
+<p>The following example illustrates the use of an asset. The "<b>Defect</b>" bean is a JAXB annotated class.</p>
+
+
+<h3><a name="5.9Assets-DefectAssetClass"></a>DefectAsset Class</h3>
+
+<p>The DefectAsset class is the asset backed by an instance of a "Defect" bean.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml">@Asset
+public class DefectAsset {
+    public Defect defect;
+    public DefectAsset(Defect defect) {
+        this.defect = defect;
+    }
+    @Produces(<span class="code-quote">"application/xml"</span>)
+    public Defect getDefect() {
+        return this.defect;
+    }
+    @Produces(<span class="code-quote">"text/html"</span>)
+    public String getDefectAsHtml() {
+        String html = ...;
+        return html;
+    }
+
+    @Produces(<span class="code-quote">"application/atom+xml"</span>)
+    public AtomEntry getDefectAsAtom() {
+        AtomEntry entry = ...;
+        return entry;
+    }
+    @Consumes(<span class="code-quote">"application/xml"</span>)
+    public void setDefect(Defect defect) {
+        this.defect = defect;
+    }
+}
+</pre>
+</div></div>
+
+<h3><a name="5.9Assets-DefectResourceClass"></a>DefectResource Class</h3>
+
+<p>&nbsp;The DefectResource class is a resource that is anchored to the URI path "<b>defects/{id}</b>" within the Apache Wink runtime.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml">@Path(<span class="code-quote">"defects/{id}"</span>)
+public class DefectResource {
+    @GET
+    public DefectAsset getDefect(@PathParam(<span class="code-quote">"id"</span>) String id) {
+        return new DefectAsset(defects.get(id));
+    }
+    @PUT
+    public DefectAsset updateDefect(DefectAsset defectAsset,
+                                    @PathParam(<span class="code-quote">"id"</span>) String id) {
+        defects.put(id, defectAsset.getDefect());
+        return defectAsset;
+    }
+}
+</pre>
+</div></div>
+
+<h4><a name="5.9Assets-ScenarioExplanation1"></a>Scenario Explanation 1</h4>
+
+<ol>
+	<li>A client issues an HTTP GET request with a URI="/defects/1" and Accept Header= "application/xm</li>
+	<li>The Apache Wink runtime analyzes the request and invokes the DefectResource#getDefect() resource method.</li>
+	<li>The DefectResource#getDefect() resource method creates an instance of DefectAsset and populates it with defect "1" data</li>
+	<li>The DefectResource#getDefect() resource method returns the DefectAsset instance back to Apache Wink runtim</li>
+	<li>The Apache Wink runtime analyzes the asset and invokes the DefectAsset#getDefect() entity-producing method to obtain the reference to the "Defect" bean.</li>
+	<li>The "Defect" bean is serialized by Apache Wink runtime as an XML using the appropriate provider.</li>
+</ol>
+
+
+
+
+
+
+
+
+
+<h4><a name="5.9Assets-ScenarioExplanation2"></a>Scenario Explanation 2</h4>
+
+
+<ol>
+	<li>A Client issues an HTTP GET request with a URI="/defects/1" and Accept Header= "text/html"</li>
+	<li>The Apache Wink runtime analyzes the request and invokes the DefectResource#getDefect() resource metho</li>
+	<li>The DefectResource#getDefect() resource method creates an instance of DefectAsset and populates it with defect "1" data.</li>
+	<li>The DefectResource#getDefect() method returns the populated asset back to the Apache Wink runtime.</li>
+	<li>The Apache Wink runtime analyzes the asset and invokes the DefectAsset#getDefectAsHtml() entity-producing method in order to obtain the reference to the "Defect" bean.</li>
+	<li>The "Defect" is serialized by Apache Wink runtime as an HTML using the appropriate provider.</li>
+</ol>
+
+
+
+
+
+
+
+
+
+<h4><a name="5.9Assets-ScenarioExplanation3"></a>Scenario Explanation 3</h4>
+
+
+<ol>
+	<li>A Client issues an HTTP PUT request with a URI="/defects/1" and Accept Header= "text/html"</li>
+	<li>The Apache Wink runtime analyzes the request and invokes the DefectResource#updateDefect() method with an instance of DefectAsset populated with the request entity.&#42; A DefectAsset is instantiated by the Apache Wink runtime</li>
+	<li>The DefectAsset#setDefect() entity-consuming method is invoked in order to populate the DefectAsset with the defect data.</li>
+</ol>
+
+
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/6 Apache Wink Client.html b/src/site/resources/1.0/html/6 Apache Wink Client.html
new file mode 100644
index 0000000..79a5095
--- /dev/null
+++ b/src/site/resources/1.0/html/6 Apache Wink Client.html
@@ -0,0 +1,123 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : 6 Apache Wink Client</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : 6 Apache Wink Client
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Oct 14, 2009 by <font color="#0050B2">michael</font>.
+				    </div>
+
+				    <h1><a name="6ApacheWinkClient-ApacheWinkClient"></a>Apache Wink Client</h1>
+
+<p>The following section describes the Apache Wink Client and provides a detailed description of the Apache Wink Client component and its functionality.</p>
+
+<h3><a name="6ApacheWinkClient-"></a></h3>
+
+
+
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'><h3><a name="6ApacheWinkClient-Contents"></a>Contents </h3></th>
+</tr>
+<tr>
+<td class='confluenceTd'> <a href="6.1 Getting Started with Apache Wink Client.html" title="6.1 Getting Started with Apache Wink Client">6.1 Getting Started with Apache Wink Client</a><br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <a href="6.2 Configuring the Apache Wink Client.html" title="6.2 Configuring the Apache Wink Client">6.2 Configuring the Apache Wink Client</a><br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <a href="6.3 Input and Output Stream Adapters.html" title="6.3 Input and Output Stream Adapters">6.3 Input and Output Stream Adapters</a><br clear="all" /> </td>
+</tr>
+</tbody></table>
+
+
+
+
+<h2><a name="6ApacheWinkClient-ApacheWinkClientOverview"></a>Apache Wink Client Overview</h2>
+
+<p>The Apache Wink Client is an easy-to-use client, providing a high level Java API for writing clients that consume HTTP-based RESTful Web Services. The Apache Wink Client utilizes JAX-RS concepts, encapsulates Rest standards and protocols and maps Rest principles concepts to Java classes, which facilitates the development of clients for any HTTP-based Rest Web Services.</p>
+
+<p>The Apache Wink Client also provides a Handlers mechanism that enables the manipulation of HTTP request/response messages.</p>
+
+<h2><a name="6ApacheWinkClient-MainFeatures"></a>Main Features</h2>
+
+<p>The Apache Wink Clients main features are as follows:</p>
+
+
+
+
+<ul>
+	<li>Utilizes JAX-RS Providers for resource serialization and deserialization</li>
+	<li>Provides Java object models for Atom, Json, RSS, APP, CSV, Multipart and OpenSearch along with providers to serialize and deserialize these models</li>
+	<li>Uses the JDK HttpUrlConnection as the underlying Http transport</li>
+	<li>Allows for the easy replacement of the underlying Http transport</li>
+	<li>Provides a Handlers mechanism for manipulation of HTTP request and response messages</li>
+</ul>
+
+
+<h3><a name="6ApacheWinkClient-Supports"></a>Supports</h3>
+
+
+<ul>
+	<li>Http proxy</li>
+	<li>SSL</li>
+</ul>
+
+
+<h2><a name="6ApacheWinkClient-"></a></h2>
+
+
+<h3><a name="6ApacheWinkClient-ApacheWinkHighLevelClientArchitectureOverview"></a>Apache Wink High Level Client Architecture Overview</h3>
+
+<p>The following diagram illustrates the high-level architecture of the Apache Wink Client.</p>
+
+<h3><a name="6ApacheWinkClient-"></a></h3>
+
+<p><img src="attachments/2851055/3112983.jpg" align="absmiddle" border="0"/></p>
+
+<p>The RestClient class is the Apache Wink Client entry point and is responsible for holding different configuration options and the provider registry.</p>
+
+
+
+
+<p>The RestClient is used to create instances of the Resource class. The Resource class represents a web resource associated with a specific URI and is used to perform uniform interface operations on the resource it represents. Every method invocation goes through a user defined handlers chain that enables for manipulation of the request and response.</p>
+
+				    					    <br/>
+                        <div class="tabletitle">
+                            <a name="attachments">Attachments:</a>
+                        </div>
+
+                        <div class="greybox" align="left">
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2851055/3112970.jpg">Wink Logo.jpg</a> (image/jpeg)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2851055/3112983.jpg">Symphony 2.0 Client Diagram.jpg</a> (image/jpeg)
+                                <br/>
+                                                    </div>
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/6.1 Getting Started with Apache Wink Client.html b/src/site/resources/1.0/html/6.1 Getting Started with Apache Wink Client.html
new file mode 100644
index 0000000..d4fa5b1
--- /dev/null
+++ b/src/site/resources/1.0/html/6.1 Getting Started with Apache Wink Client.html
@@ -0,0 +1,133 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : 6.1 Getting Started with Apache Wink Client</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : 6.1 Getting Started with Apache Wink Client
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Oct 13, 2009 by <font color="#0050B2">michael</font>.
+				    </div>
+
+				    <h2><a name="6.1GettingStartedwithApacheWinkClient-GettingStartedwiththeApacheWinkClient"></a>Getting Started with the Apache Wink Client</h2>
+
+<p>The following section details the getting started examples that demonstrate how to write a simple client that consume RESTful Web Services with the Apache Wink Client.</p>
+
+<h3><a name="6.1GettingStartedwithApacheWinkClient-GETRequest"></a>GET Request</h3>
+
+<p>The following example demonstrates how to issue an Http GET request.</p>
+
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml">// create the rest client instance
+1  RestClient client = new RestClient();
+
+// create the resource instance to interact with
+2  Resource resource = client.resource(<span class="code-quote">"http://services.com/HelloWorld"</span>);
+// perform a GET on the resource. The resource will be returned as plain text
+3  String response = resource.accept(<span class="code-quote">"text/plain"</span>).get(String.class);
+</pre>
+</div></div>
+
+<h4><a name="6.1GettingStartedwithApacheWinkClient-Explanation"></a>Explanation</h4>
+
+<p>The RestClient is the entry point for building a RESTful Web Service client. In order to start working with the Wink Client, a new instance of RestClient needs to be created, as the example shows in line 1 of the example. A new Resource is then created with the given URI, by calling the RestClient#resource() method as appears in line 2.</p>
+
+<p>Finally, the Resource#get() method is invoked in order to issue an Http GET request as appears in line 3.<br/>
+Once the Http response is returned, the client invokes the relevant provider to desterilizes the response in line 3.</p>
+
+<h3><a name="6.1GettingStartedwithApacheWinkClient-POSTRequest"></a>POST Request</h3>
+
+<p>The following example demonstrates how to issue an Http POST request.</p>
+
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml">// create the rest client instance
+1  RestClient client = new RestClient();
+
+// create the resource instance to interact with
+2  Resource resource = client.resource(<span class="code-quote">"http://services.co"</span>);
+
+// issue the request
+3  String response = resource.contentType(<span class="code-quote">"text/plain"</span>).accept(<span class="code-quote">"text/plain"</span>).post(String.class, <span class="code-quote">"foo"</span>);
+</pre>
+</div></div>
+
+<h4><a name="6.1GettingStartedwithApacheWinkClient-Explanation"></a>Explanation</h4>
+
+<p>The POST Request example demonstrates how to issue a simple Http POST request that sends and receives resources as strings.</p>
+
+<p>First, a new instance of a Resource is created through the RestClient. The Http POST request is then issued by specifying the request and response media types and the response entity type (String.class).</p>
+
+<h3><a name="6.1GettingStartedwithApacheWinkClient-POSTAtomRequest"></a>POST Atom Request</h3>
+
+<p>The following example demonstrates how to issue an Http POST request that sends and receives atom entries.</p>
+
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml">// create the rest client instance
+1  RestClient client = new RestClient();
+
+// create the resource instance to interact with
+2  Resource resource = client.resource(<span class="code-quote">"http://services.co"</span>);
+
+3  AtomEntry request = getAtomEntry();
+
+// issue the request
+4  AtomEntry response = resource.contentType(<span class="code-quote">"application/atom+xml"</span>).accept(<span class="code-quote">"application/atom+xml"</span>).post(AtomEntry.class, request);
+</pre>
+</div></div>
+
+<h4><a name="6.1GettingStartedwithApacheWinkClient-Explanation"></a>Explanation</h4>
+
+<p>The Apache Wink Client provides an object model for Atom (atom feed and atom entry), and supplies out-of-the-box providers that enable sending and receiving atom feeds and entries.</p>
+
+<h3><a name="6.1GettingStartedwithApacheWinkClient-UsingClientResponse"></a>Using ClientResponse</h3>
+
+<p>The following example demonstrates how to use the ClientResponse object in order to de-serialize the response entity.</p>
+
+
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml">// create the rest client instance
+1  RestClient client = new RestClient();
+
+// create the resource instance to interact with
+2  Resource resource = client.resource(<span class="code-quote">"http://services.co"</span>);
+
+// issue the request
+3  ClientResponse response = resource.accept(<span class="code-quote">"text/plain"</span>).get();
+
+// deserialize response
+4  String responseAsString = response.getEntity(String.class);
+</pre>
+</div></div>
+
+<h4><a name="6.1GettingStartedwithApacheWinkClient-Explanation"></a>Explanation</h4>
+
+<p>If the response entity type is not provided when invoking the Resource#get() method that appears in line 3, the response will be returned as the raw ClientResponse. In order to trigger the response deserialization mechanism, the ClientResponse#getEntity() method needs to be invoked as it appears in line 4 with the required response entity type.</p>
+
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/6.2 Configuring the Apache Wink Client.html b/src/site/resources/1.0/html/6.2 Configuring the Apache Wink Client.html
new file mode 100644
index 0000000..46b64c0
--- /dev/null
+++ b/src/site/resources/1.0/html/6.2 Configuring the Apache Wink Client.html
@@ -0,0 +1,116 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : 6.2 Configuring the Apache Wink Client</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : 6.2 Configuring the Apache Wink Client
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Oct 13, 2009 by <font color="#0050B2">michael</font>.
+				    </div>
+
+				    <h2><a name="6.2ConfiguringtheApacheWinkClient-ClientConfiguration"></a>Client Configuration</h2>
+
+<p>The RestClient configuration is performed by using the ClientConfig class. An instance of the configuration class is passed to the constructor of the RestClient when constructing a new RestClient.</p>
+
+<p>The following options can be configured in the RestClient:</p>
+
+<ul>
+	<li>Custom providers via JAX-RS Application</li>
+</ul>
+
+
+<ul>
+	<li>Handler chain</li>
+</ul>
+
+
+<ul>
+	<li>Proxy host and port</li>
+</ul>
+
+
+<ul>
+	<li>Connect and read timeouts</li>
+</ul>
+
+
+<ul>
+	<li>Redirect</li>
+</ul>
+
+
+<h3><a name="6.2ConfiguringtheApacheWinkClient-HandlerConfiguration"></a>Handler Configuration</h3>
+
+<p>The following example demonstrates how to register a custom handler.</p>
+
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml">1  ClientConfig config = new ClientConfig();
+// Create new JAX-RS Application
+2  config.handlers(new DummyHandler());
+// create the rest client instance
+3  RestClient client = new RestClient(config);
+// create the resource instance to interact with
+4  Resource resource = client.resource(<span class="code-quote">"http://services.com/HelloWorld"</span>);
+// perform a GET on the resource
+// the resource will be returned as plain text
+5  String response = resource.accept(<span class="code-quote">"text/plain"</span>).get(String.class);
+</pre>
+</div></div>
+
+<h4><a name="6.2ConfiguringtheApacheWinkClient-Explanation"></a>Explanation</h4>
+
+<p>First, a new instance of a ClientConfig is created as it appears in line 1. Then the new handler is added to the handlers chain by invoking the handlers() method on the ClientConfig instance as it appears in line 2. Finally, a new instance of a RestClient is created with this configuration as it appears in line 3.</p>
+
+<h3><a name="6.2ConfiguringtheApacheWinkClient-CustomProviderConfiguration"></a>Custom Provider Configuration</h3>
+
+<p>The following example demonstrates how to register a custom entity provider.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml">1  ClientConfig config = new ClientConfig();
+   // Create new JAX-RS Application
+2    Application app = new Application() {
+     @Override
+      public Set<span class="code-tag">&lt;Class&lt;?&gt;</span>&gt; getClasses() {
+        HashSet<span class="code-tag">&lt;Class&lt;?&gt;</span>&gt; set = new HashSet<span class="code-tag">&lt;Class&lt;?&gt;</span>&gt;();
+        set.add(FooProvider.class);
+        return set;}};
+3  conf.applications(app);
+// create the rest client instance
+4  RestClient client = new RestClient(config);
+// create the resource instance to interact with
+5  Resource resource = client.resource(<span class="code-quote">"http://services.com/HelloWorld"</span>);
+// perform a GET on the resource. the resource will be returned as plain text
+6  String response = resource.accept(<span class="code-quote">"text/plain"</span>).get(String.class);
+</pre>
+</div></div>
+
+<h4><a name="6.2ConfiguringtheApacheWinkClient-Explanation"></a>Explanation</h4>
+
+<p>First, a new instance of ClientConfig is created as it appears in line 1. Then a new anonymous Application is instantiated and set on the ClientConfig as it appears in line 2 and 3. Finally, a new instance of a RestClient is created with this configuration as it appears in line 4.</p>
+
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/6.3 Input and Output Stream Adapters.html b/src/site/resources/1.0/html/6.3 Input and Output Stream Adapters.html
new file mode 100644
index 0000000..cb5dfac
--- /dev/null
+++ b/src/site/resources/1.0/html/6.3 Input and Output Stream Adapters.html
@@ -0,0 +1,110 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : 6.3 Input and Output Stream Adapters</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : 6.3 Input and Output Stream Adapters
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Oct 13, 2009 by <font color="#0050B2">michael</font>.
+				    </div>
+
+				    <h2><a name="6.3InputandOutputStreamAdapters-InputandOutputStreamAdapters"></a>Input and Output Stream Adapters</h2>
+
+<p>The Apache Wink Client provides the ability to manipulate raw Http input and output entity streams through the InputStreamAdapter and the OutputStreamAdapter interfaces. This is useful for modifying the input and output streams, regardless of the actual entity, for example when adding compression capabilities.<br/>
+The adapt() method of the output stream adapter is called before the request headers are committed, in order to allow the adapter to manipulate them.</p>
+
+<p>The adapt() method of the input stream adapter is called after the response status code and the headers are received in order to allow the adapter to behave accordingly.</p>
+
+<h3><a name="6.3InputandOutputStreamAdapters-StreamAdaptersExample"></a>Stream Adapters Example</h3>
+
+<p>The following example demonstrates how to implement input and output adapters.</p>
+
+<h3><a name="6.3InputandOutputStreamAdapters-GzipHandler"></a>Gzip Handler</h3>
+
+<p>The following code snippet is an example of adding a input and output adapters in the Gzip handler.</p>
+
+
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml">public class GzipHandler implements ClientHandler {
+   public ClientResponse handle(ClientRequest request,
+                                HandlerContext context) {
+        request.getHeaders().add(<span class="code-quote">"Accept-Encoding"</span>, <span class="code-quote">"gzip"</span>);
+        context.addInputStreamAdapter(new GzipInputAdapter());
+        context.addOutputStreamAdapter(new GzipOutputAdapter());
+        return context.doChain(request);
+  }}
+</pre>
+</div></div>
+
+<h4><a name="6.3InputandOutputStreamAdapters-Explanation"></a>Explanation</h4>
+
+<p>The Gzip handler creates instances of the <b>GzipInputAdapter</b> and the <b>GzipOutputAdapter</b> and adds them to the stream adapters of the current request by invoking the <b>addInputStreamAdapter()</b> method and the <b>addOutputStreamAdapter()</b> method on the HandlerContext instance.</p>
+
+<h3><a name="6.3InputandOutputStreamAdapters-GzipInputStreamAdapter"></a>Gzip Input Stream Adapter</h3>
+
+<p>The following code snippet is an example of an implementation of a Gzip input stream adapter.</p>
+
+
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml">class GzipInputAdapter implements InputStreamAdapter{
+        public InputStream adapt(InputStream is,
+                                 ClientResponse response) {
+      String header = response.getHeaders().getFirst(<span class="code-quote">"Content-Encoding"</span>);
+      if (header != null &amp;&amp; header.equalsIgnoreCase(<span class="code-quote">"gzip"</span>)) {
+        return new GZIPInputStream(is);
+      }
+      return is;
+   }}
+</pre>
+</div></div>
+
+<h4><a name="6.3InputandOutputStreamAdapters-Explanation"></a>Explanation</h4>
+
+<p>The Gzip input stream adapter is responsible for wrapping the input stream with the Gzip input stream.</p>
+
+<h3><a name="6.3InputandOutputStreamAdapters-GzipOutputStreamAdapter"></a>Gzip Output Stream Adapter</h3>
+
+<p>The following code snippet is an example of an implementation of a Gzip output stream adapter.</p>
+
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml">class GzipOutputAdapter implements OutputStreamAdapter {
+    public OutputStream adapt(OutputStream os,
+                              ClientRequest request) {
+        request.getHeaders().add(<span class="code-quote">"Content-Encoding"</span>, <span class="code-quote">"gzip"</span>);
+        return new GZIPOutputStream(os);
+    }}
+</pre>
+</div></div>
+
+<h4><a name="6.3InputandOutputStreamAdapters-Explanation"></a>Explanation</h4>
+
+<p>The Gzip output stream adapter is responsible for wrapping the output stream with the Gzip output stream. </p>
+
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/7 Apache Wink Representations.html b/src/site/resources/1.0/html/7 Apache Wink Representations.html
new file mode 100644
index 0000000..e51b211
--- /dev/null
+++ b/src/site/resources/1.0/html/7 Apache Wink Representations.html
@@ -0,0 +1,160 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : 7 Apache Wink Representations</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : 7 Apache Wink Representations
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Oct 14, 2009 by <font color="#0050B2">michael</font>.
+				    </div>
+
+				    <h1><a name="7ApacheWinkRepresentations-ApacheWinkRepresentations"></a>Apache Wink Representations</h1>
+
+<p>In addition to the JAX-RS standard representations Apache Wink provides an expanded set of representations that can be used by an application to expose resources in a rich set of representations. The following section provides information about the representations that are supported by Apache Wink.</p>
+
+
+
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'><h3><a name="7ApacheWinkRepresentations-Contents"></a>Contents </h3></th>
+</tr>
+<tr>
+<td class='confluenceTd'> <a href="7.1 JSON.html" title="7.1 JSON">7.1 Json </a> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <a href="7.2 APP.html" title="7.2 APP">7.2 APP </a> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <a href="7.3 Atom.html" title="7.3 Atom">7.3 Atom </a> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <a href="7.4 RSS.html" title="7.4 RSS">7.4 RSS</a> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <a href="7.5 HTML.html" title="7.5 HTML">7.5 HTML </a> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <a href="7.6 CSV.html" title="7.6 CSV">7.6 CSV </a> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <a href="7.7 OpenSearch.html" title="7.7 OpenSearch">7.7 OpenSearch </a> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <a href="7.8 MultiPart.html" title="7.8 MultiPart">7.8 MultiPart</a> </td>
+</tr>
+</tbody></table>
+
+<h3><a name="7ApacheWinkRepresentations-ApacheWinkRepresentationsRequestFlow"></a>Apache Wink Representations Request Flow</h3>
+
+<p>The following diagram illustrates the client request flow for a resource.</p>
+
+<h3><a name="7ApacheWinkRepresentations-"></a></h3>
+
+<p><img src="attachments/2851061/4751375.jpg" align="absmiddle" border="0"/></p>
+
+
+<p>A resource is an abstract entity and as such can not be transmitted between peers. When a client is required to send or receive a resource it must use a representation of that resource. The resource representation is a specific formatting of the resource data. The diagram illustrates that a request for a resource is in fact a request for a specific representation of that resource. </p>
+
+<p>Apache Wink implements resource representations through the use of providers for java objects as defined by the JAX-RS specification.</p>
+
+
+<h3><a name="7ApacheWinkRepresentations-ApacheWinkProviders"></a>Apache Wink Providers</h3>
+
+
+<h3><a name="7ApacheWinkRepresentations-"></a></h3>
+
+<p>In addition to JAX-RS standard providers (<b>refer to section 4.2 of the JAX-RS specification</b>), Apache Wink provides a set of complementary providers. The purpose of these providers is to provide mapping services between various representations for example Atom, APP, OpenSearch, CSV, JSON and HTML, and their associated Java data models.</p>
+
+<p>The Apache Wink providers are pre-registered and delivered with the Apache Wink runtime along with the JAX-RS standard providers.</p>
+
+<p>Apache Wink provides an additional method for defining the life cycle of a provider via the use of the @Scope annotation and a way to define the providers priorities.</p>
+
+<h2><a name="7ApacheWinkRepresentations-"></a></h2>
+
+<h4><a name="7ApacheWinkRepresentations-Scoping"></a>Scoping</h4>
+
+<p>The JAX-RS specification defines by default, that a singleton instance of each provider class is instantiated for each JAX-RS application. Apache Wink fully supports this requirement and in addition provides a "Prototype" lifecycle, which is an instance per-request lifecycle.<br/>
+Prototype means that a new instance of a provider class is instantiated for each request. The @Scope annotation (section‎0) is used on a provider class to specify its lifecycle. The lifecycle of a provider that does not specify the @Scope annotation defaults to the singleton lifecycle.</p>
+
+<h4><a name="7ApacheWinkRepresentations-PrototypeExample"></a>Prototype Example</h4>
+
+<p>The following example shows how to define a provider with a prototype lifecycle.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml">@Scope(ScopeType.PROTOTYPE)
+@Provider
+public class MyProvider implements MessageBodyReader<span class="code-tag">&lt;String&gt;</span>{
+    ...
+}
+</pre>
+</div></div>
+
+<h4><a name="7ApacheWinkRepresentations-SingletonExample1"></a>Singleton Example 1</h4>
+
+<p>The following example shows how to define a provider with a singleton lifecycle.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml">@Scope(ScopeType.SINGELTON)
+@Provider
+public class MyProvider implements MessageBodyReader<span class="code-tag">&lt;String&gt;</span>{
+    ...
+}
+</pre>
+</div></div>
+
+<h4><a name="7ApacheWinkRepresentations-SingletonExample2"></a>Singleton Example 2</h4>
+
+<p>The following example shows that when the @Scope annotation is not used, the provider will be a singleton, as per the JAX-RS specification.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-xml">@Provider
+public class MyProvider implements MessageBodyReader<span class="code-tag">&lt;String&gt;</span>{
+    ...
+}
+</pre>
+</div></div>
+
+<h3><a name="7ApacheWinkRepresentations-Priority"></a>Priority</h3>
+
+<p>Apache Wink provides a method for setting a priority for a provider.</p>
+
+<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Reference</b><br />For more information on Provider Priorities refer to section <a href="5.1 Registration and Configuration.html#5.1RegistrationandConfiguration-ProviderPriorities">5.1 Registration and Configuration</a>.</td></tr></table></div>
+
+				    					    <br/>
+                        <div class="tabletitle">
+                            <a name="attachments">Attachments:</a>
+                        </div>
+
+                        <div class="greybox" align="left">
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2851061/4751374.jpg">Apache Wink Representations Diagram.jpg</a> (image/jpeg)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2851061/4751375.jpg">Apache Wink Representations Diagram2.jpg</a> (image/jpeg)
+                                <br/>
+                                                    </div>
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/7.1 JSON.html b/src/site/resources/1.0/html/7.1 JSON.html
new file mode 100644
index 0000000..73dfbd0
--- /dev/null
+++ b/src/site/resources/1.0/html/7.1 JSON.html
@@ -0,0 +1,270 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : 7.1 JSON</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : 7.1 JSON
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Oct 13, 2009 by <font color="#0050B2">michael</font>.
+				    </div>
+
+				    <h3><a name="7.1JSON-JSONProviders"></a>JSON Providers</h3>
+
+<p>Apache Wink provides a set providers that are capable of serializing a number of data models into JSON representations. There are currently 3 Apache Wink extensions that provide JSON support.  Each has unique features that may make one more suitable for your particular application.</p>
+
+<h3><a name="7.1JSON-winkjsonprovider%28org.json%29"></a>wink-json-provider (org.json)</h3>
+
+<p>The wink-json-provider extension is provided in the binary distribution and uses the <a href="http://json.org">JSON.org</a> classes to provide JSON support.  Include the wink-json-provider-&lt;VERSION&gt;.jar in the classpath and the providers will automatically be registered.  You will also need the org.json JAR which is provided in the ext/wink-json-provider/lib folder.</p>
+
+<h5><a name="7.1JSON-org.apache.wink.providers.json.JsonProvider"></a>org.apache.wink.providers.json.JsonProvider</h5>
+
+<p>Handles reading and writing of org.json.JSONObject classes for the application/json and application/javascript media types.</p>
+
+
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'>&nbsp;</th>
+<th class='confluenceTh'> Supported </th>
+<th class='confluenceTh'> Media Types <br clear="all" /> </th>
+<th class='confluenceTh'> Entity <br clear="all" /> </th>
+</tr>
+<tr>
+<td class='confluenceTd'> Read <br clear="all" /> </td>
+<td class='confluenceTd'> Yes <br clear="all" /> </td>
+<td class='confluenceTd'> application/json , application/javascript <br clear="all" /> </td>
+<td class='confluenceTd'> org.json.JSONObject </td>
+</tr>
+<tr>
+<td class='confluenceTd'> Write <br clear="all" /> </td>
+<td class='confluenceTd'> Yes </td>
+<td class='confluenceTd'> application/json , application/javascript <br clear="all" /> </td>
+<td class='confluenceTd'> org.json.JSONObject </td>
+</tr>
+</tbody></table>
+
+
+<h5><a name="7.1JSON-org.apache.wink.providers.json.JsonArrayProvider"></a>org.apache.wink.providers.json.JsonArrayProvider</h5>
+
+<p>Handles reading and writing of org.json.JSONArray classes for the application/json and application/javascript media types.</p>
+
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'>&nbsp;</th>
+<th class='confluenceTh'> Supported </th>
+<th class='confluenceTh'> Media Types <br clear="all" /> </th>
+<th class='confluenceTh'> Entity <br clear="all" /> </th>
+</tr>
+<tr>
+<td class='confluenceTd'> Read <br clear="all" /> </td>
+<td class='confluenceTd'> Yes <br clear="all" /> </td>
+<td class='confluenceTd'> application/json , application/javascript <br clear="all" /> </td>
+<td class='confluenceTd'> org.json.JSONArray </td>
+</tr>
+<tr>
+<td class='confluenceTd'> Write <br clear="all" /> </td>
+<td class='confluenceTd'> Yes </td>
+<td class='confluenceTd'> application/json , application/javascript <br clear="all" /> </td>
+<td class='confluenceTd'> org.json.JSONArray </td>
+</tr>
+</tbody></table>
+
+
+<h5><a name="7.1JSON-org.apache.wink.providers.json.JsonJAXBProvider"></a>org.apache.wink.providers.json.JsonJAXBProvider</h5>
+
+<p>Handles reading and writing of JAXBElement and JAXB annotated classes for the application/json and application/javascript media types.</p>
+
+
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'>&nbsp;</th>
+<th class='confluenceTh'> Supported </th>
+<th class='confluenceTh'> Media Types <br clear="all" /> </th>
+<th class='confluenceTh'> Entity <br clear="all" /> </th>
+</tr>
+<tr>
+<td class='confluenceTd'> Read <br clear="all" /> </td>
+<td class='confluenceTd'> Yes <br clear="all" /> </td>
+<td class='confluenceTd'> application/json , application/javascript <br clear="all" /> </td>
+<td class='confluenceTd'> JAXB object, <br clear="all" />
+JAXBElement&lt;?&gt;&gt;&gt; </td>
+</tr>
+<tr>
+<td class='confluenceTd'> Write <br clear="all" /> </td>
+<td class='confluenceTd'> Yes </td>
+<td class='confluenceTd'> application/json , application/javascript <br clear="all" /> </td>
+<td class='confluenceTd'> JAXB object, <br clear="all" />
+JAXBElement&lt;?&gt;&gt;&gt; </td>
+</tr>
+</tbody></table>
+
+
+
+<h3><a name="7.1JSON-ProducingandConsumingJSONExample"></a>Producing and Consuming JSON Example</h3>
+
+<p>The following example demonstrates the usage of a JSON provider for reading and writing JSON representations.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+    @GET
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    <span class="code-keyword">public</span> JSONObject postJSON(JSONObject requestJSON) {
+        <span class="code-object">String</span> property = requestJSON.getString(<span class="code-quote">"property"</span>);
+        JSONObject jobj = <span class="code-keyword">new</span> JSONObject();
+        <span class="code-keyword">return</span> jobj;
+    }
+
+    /* Book is a JAXB annotated class */
+
+    @GET
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    <span class="code-keyword">public</span> Book postJSONBook(Book requestBookEntity) {
+        <span class="code-object">String</span> title = requestBookEntity.getTitle();
+        /* other code */
+        Book response = <span class="code-keyword">new</span> Book();
+        <span class="code-keyword">return</span> response;
+    }
+</pre>
+</div></div>
+
+<h3><a name="7.1JSON-winkjettisonprovider%28org.codehaus.jettison%29"></a>wink-jettison-provider (org.codehaus.jettison)</h3>
+
+<p>The wink-jettison-provider extension is provided in the binary distribution and uses the <a href="http://jettison.codehaus.org/">Jettison</a> code to provide JSON support.  Include the wink-jettison-provider-&lt;VERSION&gt;.jar in the classpath and the providers will automatically be registered.  You will also need the Jettison library JARs which are provided in the ext/wink-jettison-provider/lib folder.</p>
+
+<p>By default, reading is currently disabled due to potential issues with the reader.  You can enable it by calling setUseAsReader(boolean) on each provider and registering as a singleton in the JAX-RS Application sub-class.</p>
+
+<h5><a name="7.1JSON-rg.apache.wink.providers.jettison.JettisonJAX..."></a>org.apache.wink.providers.jettison.JettisonJAXBElementProvider</h5>
+
+<p>Handles reading and writing of JAXBElement classes for the application/json media type.</p>
+
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'>&nbsp;</th>
+<th class='confluenceTh'> Supported </th>
+<th class='confluenceTh'> Media Types <br clear="all" /> </th>
+<th class='confluenceTh'> Entity <br clear="all" /> </th>
+</tr>
+<tr>
+<td class='confluenceTd'> Read <br clear="all" /> </td>
+<td class='confluenceTd'> Yes <br clear="all" /> </td>
+<td class='confluenceTd'> application/json <br clear="all" /> </td>
+<td class='confluenceTd'> JAXBElement&lt;?&gt;&gt;&gt; </td>
+</tr>
+<tr>
+<td class='confluenceTd'> Write <br clear="all" /> </td>
+<td class='confluenceTd'> Yes </td>
+<td class='confluenceTd'> application/json <br clear="all" /> </td>
+<td class='confluenceTd'> JAXBElement&lt;?&gt;&gt;&gt; </td>
+</tr>
+</tbody></table>
+
+
+<h5><a name="7.1JSON-rg.apache.wink.providers.jettison.JettisonJAX..."></a>org.apache.wink.providers.jettison.JettisonJAXBElementProvider</h5>
+
+<p>Handles reading and writing of JAXB annotated classes for the application/json media type.</p>
+
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'>&nbsp;</th>
+<th class='confluenceTh'> Supported </th>
+<th class='confluenceTh'> Media Types <br clear="all" /> </th>
+<th class='confluenceTh'> Entity <br clear="all" /> </th>
+</tr>
+<tr>
+<td class='confluenceTd'> Read <br clear="all" /> </td>
+<td class='confluenceTd'> Yes <br clear="all" /> </td>
+<td class='confluenceTd'> application/json <br clear="all" /> </td>
+<td class='confluenceTd'> JAXB object </td>
+</tr>
+<tr>
+<td class='confluenceTd'> Write <br clear="all" /> </td>
+<td class='confluenceTd'> Yes </td>
+<td class='confluenceTd'> application/json <br clear="all" /> </td>
+<td class='confluenceTd'> JAXB object </td>
+</tr>
+</tbody></table>
+
+
+<h3><a name="7.1JSON-Example"></a>Example</h3>
+
+<p>The following examples demonstrates the usage of a Jettison provider for producing and consuming JSON.</p>
+
+
+<h4><a name="7.1JSON-JettisonProviderRegistration"></a>Jettison Provider Registration</h4>
+
+
+<p>The following code example demonstrates the way to register a Jettison provider within a JAX-RS application.</p>
+
+
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+    <span class="code-keyword">public</span> class MyApp <span class="code-keyword">extends</span> Application {
+        <span class="code-keyword">public</span> Set getClasses() {
+            Set s = <span class="code-keyword">new</span> HashSet();
+            s.add(MyResource.class);
+            <span class="code-keyword">return</span> s;
+        }
+
+        <span class="code-keyword">public</span> Set&lt;<span class="code-object">Object</span>&gt; getSingletons() {
+            Set s = <span class="code-keyword">new</span> HashSet();
+            JettisonJAXBProvider jaxbProvider = <span class="code-keyword">new</span> JettisonJAXBProvider();
+            jaxbProvider.setUseAsReader(<span class="code-keyword">true</span>);
+            <span class="code-keyword">return</span> s;
+        }
+    }
+</pre>
+</div></div>
+
+<h4><a name="7.1JSON-ProducingandConsumingJSON"></a>Producing and Consuming JSON</h4>
+
+<p>The following code example demonstrates the reading and writting of JAXB objects into a JSON representation by using a Jettison provider.</p>
+
+
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+    /* Book is a JAXB annotated class */
+
+    @GET
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    <span class="code-keyword">public</span> Book postJSONBook(Book requestBookEntity) {
+        <span class="code-object">String</span> title = requestBookEntity.getTitle();
+        /* other code */
+        Book response = <span class="code-keyword">new</span> Book();
+        <span class="code-keyword">return</span> response;
+    }
+</pre>
+</div></div>
+
+<h4><a name="7.1JSON-JacksonJSONProcessor"></a>Jackson JSON Processor</h4>
+
+<p><a href="http://jackson.codehaus.org/">Jackson JSON Processor</a> may also suit your needs and can be used.  They provide their own JAX-RS entity provider.  See their documentation for more information.</p>
+
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/7.2 APP.html b/src/site/resources/1.0/html/7.2 APP.html
new file mode 100644
index 0000000..d48a518
--- /dev/null
+++ b/src/site/resources/1.0/html/7.2 APP.html
@@ -0,0 +1,149 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : 7.2 APP</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : 7.2 APP
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Oct 13, 2009 by <font color="#0050B2">michael</font>.
+				    </div>
+
+				    <h2><a name="7.2APP-AtomPublishingProtocol%28AtomPub%29Overview"></a>Atom Publishing Protocol (AtomPub) Overview</h2>
+
+<p>The Atom Publishing Protocol (AtomPub) is an application-level protocol for publishing and editing Web resources.  The protocol is based on HTTP transport of Atom-formatted representations. The Atom format is documented in the Atom Syndication Format.</p>
+
+<h3><a name="7.2APP-DataModel"></a>Data Model</h3>
+
+<p>Apache Wink provides an Atom Publishing Protocol data model for producing Service Documents (application/atomsvc+xml) and Categories Documents (application/atomcat+xml). All of the model classes are located under the org.apache.wink.common.model.app package.</p>
+
+<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Important Note</b><br />The APP data model can also be used to produce Service and Categories documents in HTML (text/html) and JSON (application/json) formats. For more details regarding HTML see section HTML (TBD). For JSON format see section (TBD)</td></tr></table></div>
+
+<h4><a name="7.2APP-APPServiceDocumentSupport"></a>APP Service Document Support</h4>
+
+<p>The following table shows the APP service document data models and the representations in which it can be serialized and de-serialized.</p>
+
+
+
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'>&nbsp;</th>
+<th class='confluenceTh'> Supported </th>
+<th class='confluenceTh'> Media Types <br clear="all" /> </th>
+<th class='confluenceTh'> Data Model <br clear="all" /> </th>
+<th class='confluenceTh'> Provider Registration <br clear="all" /> </th>
+</tr>
+<tr>
+<td class='confluenceTd'> Read <br clear="all" /> </td>
+<td class='confluenceTd'> Yes <br clear="all" /> </td>
+<td class='confluenceTd'> application/atomsvc+xml </td>
+<td class='confluenceTd'> org.apache.wink.common<br clear="all" />
+ .model.app.AppService </td>
+<td class='confluenceTd'> Not required. Registered by default <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> Write <br clear="all" /> </td>
+<td class='confluenceTd'> Yes </td>
+<td class='confluenceTd'> application/atomsvc+xml <br clear="all" /> </td>
+<td class='confluenceTd'> org.apache.wink.common<br clear="all" />
+ .model.app.AppService </td>
+<td class='confluenceTd'> Not required. Registered by default </td>
+</tr>
+</tbody></table>
+
+
+
+
+
+<h4><a name="7.2APP-APPCategoriesDocumentSupport"></a>APP Categories Document Support</h4>
+
+<p>The following table shows the APP Catagories document data models and the representations in which it can be serialized and de-serialized.</p>
+
+
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'>&nbsp;</th>
+<th class='confluenceTh'> Supported </th>
+<th class='confluenceTh'> Media Types <br clear="all" /> </th>
+<th class='confluenceTh'> Data Model <br clear="all" /> </th>
+<th class='confluenceTh'> Provider Registration <br clear="all" /> </th>
+</tr>
+<tr>
+<td class='confluenceTd'> Read <br clear="all" /> </td>
+<td class='confluenceTd'> Yes <br clear="all" /> </td>
+<td class='confluenceTd'> application/atomcat+xml </td>
+<td class='confluenceTd'> org.apache.wink.common<br clear="all" />
+ .model.app.AppCategories </td>
+<td class='confluenceTd'> Not required. Registered by default <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> Write <br clear="all" /> </td>
+<td class='confluenceTd'> Yes </td>
+<td class='confluenceTd'> application/atomcat+xml <br clear="all" /> </td>
+<td class='confluenceTd'> org.apache.wink.common<br clear="all" />
+ .model.app.AppCategories </td>
+<td class='confluenceTd'> Not required. Registered by default <br clear="all" /> </td>
+</tr>
+</tbody></table>
+
+
+
+
+
+<h3><a name="7.2APP-"></a></h3>
+
+
+<h3><a name="7.2APP-ProducinganAPPServiceDocumentExample"></a>Producing an APP Service Document Example</h3>
+
+<p>The following code example demonstrates the creation of an APP Service Document.</p>
+
+
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">   @GET
+    @Produces(MediaTypeUtils.ATOM_SERVICE_DOCUMENT)
+    <span class="code-keyword">public</span> AppService getServiceDocument() {
+        AppService serviceDocument = <span class="code-keyword">new</span> AppService();
+        List&lt;AppWorkspace&gt; workspaces = serviceDocument.getWorkspace();
+        AppWorkspace workspace1 =  <span class="code-keyword">new</span> AppWorkspace();
+        workspace1.setTitle(<span class="code-keyword">new</span> AtomText(<span class="code-quote">"Workspace1"</span>));
+        List&lt;AppCollection&gt; collections = workspace1.getCollection();
+        AppCollection collection = <span class="code-keyword">new</span> AppCollection();
+        collection.setTitle(<span class="code-keyword">new</span> AtomText(<span class="code-quote">"Collection1"</span>));
+
+        collections.add(collection);
+        workspaces.add(workspace1);
+        ...
+        <span class="code-keyword">return</span> serviceDocument;
+    }
+</pre>
+</div></div>
+
+<h5><a name="7.2APP-Explanation"></a>Explanation</h5>
+
+<p>AppService class is JAXB annotated POJO. An instance of an AppService class is created, populated and returned by the resource. A generic JAXB provider is used to serializes this class into an XML representation. </p>
+
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/7.3 Atom.html b/src/site/resources/1.0/html/7.3 Atom.html
new file mode 100644
index 0000000..f7d4c0a
--- /dev/null
+++ b/src/site/resources/1.0/html/7.3 Atom.html
@@ -0,0 +1,225 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : 7.3 Atom</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : 7.3 Atom
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Oct 15, 2009 by <font color="#0050B2">shivakumar</font>.
+				    </div>
+
+				    <h2><a name="7.3Atom-AtomSyndicationFormatOverview"></a>Atom Syndication Format Overview</h2>
+
+<p>Atom is an XML-based document format that describes lists of related information known as "feeds".  Feeds are composed of a number of items, known as "entries", each with an extensible set of attached metadata.  For example, each entry has a title. The primary use case that Atom addresses is the syndication of Web content such as weblogs and news headlines to Web sites as well as directly to user agents.</p>
+
+<h3><a name="7.3Atom-DataModel"></a>Data Model</h3>
+
+<p>Apache Wink provides an Atom Syndication Format data model for consuming and producing Atom Feeds and Atom Entries (application/atom+xml). All of the model classes are located under the org.apache.wink.common.model.atom and org.apache.wink.common.model.synd packages.</p>
+
+
+<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Important Note</b><br />The Atom Syndication Format data model can also be used to produce Atom Feeds and Atom Entries in HTML (text/html) and JSON (application/json) formats. For more details regarding HTML see section HTML (TBD). For JSON format see section (TBD)</td></tr></table></div>
+
+
+<h4><a name="7.3Atom-AtomFeedSupport"></a>Atom Feed Support</h4>
+
+<p>The following table shows the Atom Feed data models and the representations in which it can be serialized and de-serialized.</p>
+
+
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'>&nbsp;</th>
+<th class='confluenceTh'> Supported </th>
+<th class='confluenceTh'> Media Types <br clear="all" /> </th>
+<th class='confluenceTh'> Data Model <br clear="all" /> </th>
+<th class='confluenceTh'> Provider registration <br clear="all" /> </th>
+</tr>
+<tr>
+<td class='confluenceTd'> Read <br clear="all" /> </td>
+<td class='confluenceTd'> Yes <br clear="all" /> </td>
+<td class='confluenceTd'> application/atom+xml <br clear="all" /> </td>
+<td class='confluenceTd'> org.apache.wink <br clear="all" />
+.common.model<br clear="all" />
+ .atom.AtomFeed <br clear="all" />
+<br clear="all" />
+org.apache.wink <br clear="all" />
+.common.model<br clear="all" />
+ .synd.SyndFeed <br clear="all" /> </td>
+<td class='confluenceTd'> Not required. Registered by default <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> Write <br clear="all" /> </td>
+<td class='confluenceTd'> Yes </td>
+<td class='confluenceTd'> application/atom+xml <br clear="all" /> </td>
+<td class='confluenceTd'> org.apache.wink <br clear="all" />
+.common.model<br clear="all" />
+ .atom.AtomFeed <br clear="all" />
+<br clear="all" />
+org.apache.wink <br clear="all" />
+.common.model<br clear="all" />
+ .synd.SyndFeed <br clear="all" /> </td>
+<td class='confluenceTd'> Not required. Registered by default </td>
+</tr>
+</tbody></table>
+
+
+
+
+
+<h4><a name="7.3Atom-AtomEntrySupport"></a>Atom Entry Support</h4>
+
+<p>The following table shows the Atom Entry data models and the representations in which it can be serialized and de-serialized.</p>
+
+
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'>&nbsp;</th>
+<th class='confluenceTh'> Supported </th>
+<th class='confluenceTh'> Media Types <br clear="all" /> </th>
+<th class='confluenceTh'> Data Model <br clear="all" /> </th>
+<th class='confluenceTh'> Provider registration <br clear="all" /> </th>
+</tr>
+<tr>
+<td class='confluenceTd'> Read <br clear="all" /> </td>
+<td class='confluenceTd'> Yes <br clear="all" /> </td>
+<td class='confluenceTd'> application/atom+xml <br clear="all" /> </td>
+<td class='confluenceTd'> org.apache.wink <br clear="all" />
+.common.model<br clear="all" />
+ .atom.AtomEntry <br clear="all" />
+<br clear="all" />
+org.apache.wink <br clear="all" />
+.common.model<br clear="all" />
+ .synd.SyndEntry </td>
+<td class='confluenceTd'> Not required. Registered by default <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> Write <br clear="all" /> </td>
+<td class='confluenceTd'> Yes </td>
+<td class='confluenceTd'> application/atom+xml <br clear="all" /> </td>
+<td class='confluenceTd'> org.apache.wink <br clear="all" />
+.common.model<br clear="all" />
+ .atom.AtomEntry <br clear="all" />
+<br clear="all" />
+org.apache.wink <br clear="all" />
+.common.model<br clear="all" />
+ .synd.SyndEntry </td>
+<td class='confluenceTd'> Not required. Registered by default <br clear="all" /> </td>
+</tr>
+</tbody></table>
+
+
+
+
+
+<h3><a name="7.3Atom-Examples"></a>Examples</h3>
+
+<p>The following code example demonstrates reading and writing of Atom Feeds&nbsp; and Atom Entries.</p>
+
+
+<h4><a name="7.3Atom-ProducingAtomFeed"></a>Producing Atom Feed</h4>
+
+<p>The following code example demonstrates the creation of an Atom Feed.</p>
+
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+    @GET
+    @Produces(MediaType.APPLICATION_ATOM_XML)
+    <span class="code-keyword">public</span> AtomFeed getFeed() {
+        AtomFeed feed = <span class="code-keyword">new</span> AtomFeed();
+        feed.setId(<span class="code-quote">"http:<span class="code-comment">//example.com/atomfeed"</span>);
+</span>        feed.setTitle(<span class="code-keyword">new</span> AtomText(<span class="code-quote">"Example"</span>));
+        feed.setUpdated(<span class="code-keyword">new</span> Date());
+        AtomLink link1 = <span class="code-keyword">new</span> AtomLink();
+        ...
+
+        <span class="code-keyword">return</span> feed;
+    }
+}
+</pre>
+</div></div>
+
+
+<h4><a name="7.3Atom-ConsumingAtomFeed"></a>Consuming Atom Feed</h4>
+
+<p>The following code example demonstrates the consumption of an Atom Feed.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+    @POST
+    @Consumes(MediaType.APPLICATION_ATOM_XML)
+    <span class="code-keyword">public</span> void setFeed(AtomFeed feed) {
+        ...
+
+        <span class="code-keyword">return</span>;
+    }
+</pre>
+</div></div>
+
+<h4><a name="7.3Atom-ProducingAtomEntry"></a>Producing Atom Entry</h4>
+
+<p>The following code example demonstrates the creation of an Atom Entry.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+    @GET
+    @Produces(MediaType.APPLICATION_ATOM_XML)
+    <span class="code-keyword">public</span> AtomEntry getEntry() {
+        AtomEntry entry = <span class="code-keyword">new</span> AtomEntry();
+        entry.setId(<span class="code-quote">"http:<span class="code-comment">//example.com/entry"</span>);
+</span>        entry.setTitle(<span class="code-keyword">new</span> AtomText(<span class="code-quote">"Web Demo"</span>));
+        entry.getLinks().add(link2);
+        entry.setUpdated(<span class="code-keyword">new</span> Date());
+        entry.setPublished(<span class="code-keyword">new</span> Date());
+        ...
+        <span class="code-keyword">return</span> entry;
+    }
+</pre>
+</div></div>
+
+<h4><a name="7.3Atom-ConsumingAtomEntry"></a>Consuming Atom Entry</h4>
+
+<p>The following code example demonstrates the consumption of an Atom Entry.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+    @POST
+    @Consumes(MediaType.APPLICATION_ATOM_XML)
+    <span class="code-keyword">public</span> void setEntry(AtomEntry entry) {
+        ...
+
+        <span class="code-keyword">return</span>;
+   }
+</pre>
+</div></div>
+
+
+
+
+
+<h2><a name="7.3Atom-"></a></h2>
+
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/7.4 RSS.html b/src/site/resources/1.0/html/7.4 RSS.html
new file mode 100644
index 0000000..1916fd2
--- /dev/null
+++ b/src/site/resources/1.0/html/7.4 RSS.html
@@ -0,0 +1,128 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : 7.4 RSS</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : 7.4 RSS
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Oct 15, 2009 by <font color="#0050B2">michael</font>.
+				    </div>
+
+				    <h2><a name="7.4RSS-RSSDataModel"></a>RSS Data Model</h2>
+
+
+<p>RSS (Really Simple Syndication) is an XML-based document format for the syndication of web content such as weblogs and news headlines to Web sites as well as directly to user agents. Apache Wink supports the RSS 2.0 specification.</p>
+
+<h3><a name="7.4RSS-"></a></h3>
+
+
+<h3><a name="7.4RSS-%28ReallySimpleSyndication%29RSSDataModelOverview"></a>(Really Simple Syndication) RSS Data Model Overview</h3>
+
+<p>Apache Wink provides an RSS data model for consuming and producing RSS Feeds (application/xml). All of the model classes are located under <b>org.apache.wink.common.model.rss</b> package.</p>
+
+<h4><a name="7.4RSS-RSSFeedSupport"></a>RSS Feed Support</h4>
+
+<p>The following table shows the RSS Feed data models and the representations in which it can be serialized and de-serialized.</p>
+
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'>&nbsp;</th>
+<th class='confluenceTh'> Supported </th>
+<th class='confluenceTh'> Media Types </th>
+<th class='confluenceTh'> Data Model </th>
+<th class='confluenceTh'> Provider registration </th>
+</tr>
+<tr>
+<td class='confluenceTd'> Read </td>
+<td class='confluenceTd'> Yes </td>
+<td class='confluenceTd'> application/xml </td>
+<td class='confluenceTd'> org.apache.wink<br clear="all" />
+ .common.model<br clear="all" />
+ .rss.RssFeed </td>
+<td class='confluenceTd'> Not required. Registered by default </td>
+</tr>
+<tr>
+<td class='confluenceTd'> Write </td>
+<td class='confluenceTd'> Yes </td>
+<td class='confluenceTd'> application/xml </td>
+<td class='confluenceTd'> org.apache<br clear="all" />
+ .wink.common<br clear="all" />
+ .model.rss<br clear="all" />
+ .RssFeed </td>
+<td class='confluenceTd'> Not required. Registered by default </td>
+</tr>
+</tbody></table>
+
+<h3><a name="7.4RSS-Examples"></a>Examples</h3>
+
+<p>The following code example demonstrates reading and writing of RSS Feeds.</p>
+
+<h4><a name="7.4RSS-ProducingRSSFeed"></a>Producing RSS Feed</h4>
+
+<p>The following code example demonstrates the creation of an RSS Feed.</p>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">    @GET
+    @Produces(MediaType.APPLICATION_XML)
+    <span class="code-keyword">public</span> RssFeed getFeed() {
+        RssFeed rss = <span class="code-keyword">new</span> RssFeed();
+
+        RssChannel channel = <span class="code-keyword">new</span> RssChannel();
+        channel.setTitle(<span class="code-quote">"Liftoff News"</span>);
+        channel.setLink(<span class="code-quote">"http:<span class="code-comment">//liftoff.msfc.nasa.gov"</span>);
+</span>        channel.setDescription(<span class="code-quote">"Liftoff to Space Exploration."</span>);
+        channel.setPubDate(<span class="code-keyword">new</span> Date().toString());
+
+        RssItem item = <span class="code-keyword">new</span> RssItem();
+        item.setTitle(<span class="code-quote">"Star City"</span>);
+        item.setLink(<span class="code-quote">"http:<span class="code-comment">//liftoff.msfc.nasa.gov/news/2003/news-starcity.asp"</span>);
+</span>        item.setDescription(<span class="code-quote">"How <span class="code-keyword">do</span> Americans get ready to work with Russians aboard the International Space Station?"</span>);
+        channel.getItems().add(item);
+
+        ...
+
+        rss.setChannel(channel);
+        <span class="code-keyword">return</span> rss;
+    }
+}
+</pre>
+</div></div>
+
+<h4><a name="7.4RSS-ConsumingRSSFeed"></a>Consuming RSS Feed</h4>
+
+<p>The following code example demonstrates the consumption of an RSS Feed.</p>
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">    @POST
+    @Consumes(MediaType.APPLICATION_XML)
+    <span class="code-keyword">public</span> void setFeed(RssFeed feed) {
+        ...
+
+        <span class="code-keyword">return</span>;
+    }
+</pre>
+</div></div>
+
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/7.5 HTML.html b/src/site/resources/1.0/html/7.5 HTML.html
new file mode 100644
index 0000000..06cf6d2
--- /dev/null
+++ b/src/site/resources/1.0/html/7.5 HTML.html
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : 7.5 HTML</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : 7.5 HTML
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Oct 14, 2009 by <font color="#0050B2">michael</font>.
+				    </div>
+
+				    <h2><a name="7.5HTML-HTML"></a>HTML</h2>
+
+<p>Apache Wink provides a set of providers that are capable of serializing a number of data models (SyndEntry and SyndFeed) as HTML.</p>
+
+
+
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'>&nbsp;</th>
+<th class='confluenceTh'> Supported </th>
+<th class='confluenceTh'> Media Types <br clear="all" /> </th>
+<th class='confluenceTh'> Data model <br clear="all" /> </th>
+<th class='confluenceTh'> Provider registration <br clear="all" /> </th>
+</tr>
+<tr>
+<td class='confluenceTd'> Read <br clear="all" /> </td>
+<td class='confluenceTd'> No <br clear="all" /> </td>
+<td class='confluenceTd'> N/A <br clear="all" /> </td>
+<td class='confluenceTd'> N/A <br clear="all" /> </td>
+<td class='confluenceTd'> N/A <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> Write <br clear="all" /> </td>
+<td class='confluenceTd'> Yes </td>
+<td class='confluenceTd'> text/html <br clear="all" /> </td>
+<td class='confluenceTd'> org.apache.wink <br clear="all" />
+.common.model<br clear="all" />
+ .synd.SyndFeed <br clear="all" />
+<br clear="all" />
+org.apache.wink <br clear="all" />
+.common.model<br clear="all" />
+ .synd.SyndEntry </td>
+<td class='confluenceTd'> See below. </td>
+</tr>
+</tbody></table>
+
+<h3><a name="7.5HTML-ActivatingtheHTMLprovider"></a>Activating the HTML provider</h3>
+
+<p>The Apache Wink HTML providers are not enabled by default. In order to activate them they must be registered by the <b>HtmlSyndEntryProvider</b> and the <b>HtmlSyndFeedProvider</b> providers, located in the <b>org.apache.wink.server.internal.providers.entity.html</b> package.</p>
+
+<p>As the HTML providers use a jsps in order to generate the representation the HtmlDefaultRepresentation folder must include all its content and subfolders available for the servlet container.</p>
+
+<h4><a name="7.5HTML-Example"></a>Example</h4>
+
+<p>Detailed example of the HTML implementation can be seen at the QADefect example. </p>
+
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/7.6 CSV.html b/src/site/resources/1.0/html/7.6 CSV.html
new file mode 100644
index 0000000..6a5c321
--- /dev/null
+++ b/src/site/resources/1.0/html/7.6 CSV.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : 7.6 CSV</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : 7.6 CSV
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Oct 14, 2009 by <font color="#0050B2">michael</font>.
+				    </div>
+
+				    <h2><a name="7.6CSV-CommaSeparatedValues%28CSV%29Providers"></a>Comma Separated Values (CSV) Providers</h2>
+
+<p>Apache Wink provides a CSV data model and providers for producing and consuming CSV (text/csv). The model is based on a Serialization and a Deserialization interface, in addition to a simple CSV Table class. All of the model classes are located under the org.apache.wink.common.model.csv package.</p>
+
+
+<p>The following tables list the providers that provide this functionality.</p>
+
+
+
+
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'>&nbsp;</th>
+<th class='confluenceTh'> Supported </th>
+<th class='confluenceTh'> Media Types <br clear="all" /> </th>
+<th class='confluenceTh'> Data Model <br clear="all" /> </th>
+<th class='confluenceTh'> Provider registration <br clear="all" /> </th>
+</tr>
+<tr>
+<td class='confluenceTd'> Read <br clear="all" /> </td>
+<td class='confluenceTd'> Yes <br clear="all" /> </td>
+<td class='confluenceTd'> text/csv <br clear="all" /> </td>
+<td class='confluenceTd'> org.apache.wink <br clear="all" />
+.common.model<br clear="all" />
+ .csv.CsvDeserializer <br clear="all" />
+<br clear="all" />
+org.apache.wink <br clear="all" />
+.common.model<br clear="all" />
+ .csv.CsvTable <br clear="all" />
+<br clear="all" />
+org.apache.wink <br clear="all" />
+.common.model<br clear="all" />
+ .csv.MultiCsvTable <br clear="all" /> </td>
+<td class='confluenceTd'> Not required. Registered by default <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> Write <br clear="all" /> </td>
+<td class='confluenceTd'> Yes </td>
+<td class='confluenceTd'> text/csv <br clear="all" /> </td>
+<td class='confluenceTd'> org.apache.wink <br clear="all" />
+.common.model<br clear="all" />
+ .csv.CsvSerializer <br clear="all" />
+<br clear="all" />
+org.apache.wink <br clear="all" />
+.common.model<br clear="all" />
+ .csv.CsvTable <br clear="all" />
+<br clear="all" />
+org.apache.wink <br clear="all" />
+.common.model<br clear="all" />
+ .csv.MultiCsvTable <br clear="all" /> </td>
+<td class='confluenceTd'> Not required. Registered by default <br clear="all" /> </td>
+</tr>
+</tbody></table>
+
+
+<h3><a name="7.6CSV-Examples"></a>Examples</h3>
+
+<p>The following code example demonstrates the reading and writing of CSV documents.</p>
+
+
+
+<h4><a name="7.6CSV-ProducingCSV"></a>Producing CSV</h4>
+
+<p>The following code example demonstrates the creation of a CSV document.</p>
+
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">@GET
+@Produces(<span class="code-quote">"text/csv"</span>)
+<span class="code-keyword">public</span> CsvTable getJohns() {
+    CsvTable cvs = <span class="code-keyword">new</span> CsvTable(<span class="code-quote">"Id"</span>, <span class="code-quote">"First Name"</span>, <span class="code-quote">"Last Name"</span>, <span class="code-quote">"Email"</span>);
+    cvs.addRow(<span class="code-quote">"1"</span>,<span class="code-quote">"John"</span>,<span class="code-quote">"Kennedy"</span>,<span class="code-quote">"john@Kennedy.org"</span>);
+    cvs.addRow(<span class="code-quote">"2"</span>,<span class="code-quote">"John"</span>,<span class="code-quote">"Lennon"</span>,<span class="code-quote">"john@Lennon.org"</span>);
+    cvs.addRow(<span class="code-quote">"3"</span>,<span class="code-quote">"John"</span>,<span class="code-quote">"Malkovich"</span>,<span class="code-quote">"john@malkovich.org"</span>);
+    cvs.addRow(<span class="code-quote">"4"</span>,<span class="code-quote">"John"</span>,<span class="code-quote">"McCain"</span>,<span class="code-quote">"john@McCain.org"</span>);
+    <span class="code-keyword">return</span> cvs;
+}
+</pre>
+</div></div>
+
+
+<h5><a name="7.6CSV-"></a></h5>
+
+
+<h4><a name="7.6CSV-ConsumingCSV"></a>Consuming CSV</h4>
+
+<p>The following code example demonstrates the consumption of a CSV document.</p>
+
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">@POST
+@Consumes(<span class="code-quote">"text/csv"</span>)
+<span class="code-keyword">public</span> void postCsv(CsvTable csv) {
+    <span class="code-keyword">for</span> (<span class="code-object">String</span>[] row : csv.getRows()) {
+        <span class="code-keyword">for</span>(<span class="code-object">String</span> cell: row){
+            <span class="code-object">System</span>.out.print(cell + <span class="code-quote">" ,"</span>);
+        }
+        <span class="code-object">System</span>.out.print(<span class="code-quote">"\n"</span>);
+    }
+}
+</pre>
+</div></div>
+
+<h5><a name="7.6CSV-"></a></h5>
+
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/7.7 OpenSearch.html b/src/site/resources/1.0/html/7.7 OpenSearch.html
new file mode 100644
index 0000000..2768655
--- /dev/null
+++ b/src/site/resources/1.0/html/7.7 OpenSearch.html
@@ -0,0 +1,106 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : 7.7 OpenSearch</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : 7.7 OpenSearch
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Oct 14, 2009 by <font color="#0050B2">michael</font>.
+				    </div>
+
+				    <h2><a name="7.7OpenSearch-OpenSearchOverview"></a>OpenSearch Overview</h2>
+
+<p>OpenSearch is a collection of simple formats for the sharing of search results.<br/>
+The OpenSearch description document format is used to describe a search engine that can be used by search client applications.</p>
+
+<p>The OpenSearch response elements can be used to extend existing syndication formats, such as RSS and Atom, with the extra metadata needed to return search results. The OpenSearch document is associated with the "application/opensearchdescription+xml"  mime type.</p>
+
+<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Note</b><br />For more detailed information about Open Search, refers to the Open Search home page at <a href="http://www.opensearch.org/Home">http://www.opensearch.org/Home</a></td></tr></table></div>
+
+<h3><a name="7.7OpenSearch-DataModel"></a>Data Model</h3>
+
+<p>Apache Wink provides an Open Search data model for producing  Open Search Documents. of the model classes are located under the org.apache.wink.common.model.opensearch package. OpenSearchDescription class is used by an application to build Open Search Description documents.</p>
+
+
+<h4><a name="7.7OpenSearch-OpenSearchSupport"></a>OpenSearch Support</h4>
+
+<p>The following table shows the OpenSearch data model and representation in which it can be serialized and de-serialized.</p>
+
+
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'>&nbsp;</th>
+<th class='confluenceTh'> Supported </th>
+<th class='confluenceTh'> Media Types <br clear="all" /> </th>
+<th class='confluenceTh'> Data Model <br clear="all" /> </th>
+<th class='confluenceTh'> Provider registration <br clear="all" /> </th>
+</tr>
+<tr>
+<td class='confluenceTd'> Read <br clear="all" /> </td>
+<td class='confluenceTd'> Yes <br clear="all" /> </td>
+<td class='confluenceTd'> NA <br clear="all" /> </td>
+<td class='confluenceTd'> NA </td>
+<td class='confluenceTd'> NA <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> Write <br clear="all" /> </td>
+<td class='confluenceTd'> Yes </td>
+<td class='confluenceTd'> application/ <br clear="all" />
+opensearchdescription+xml <br clear="all" /> </td>
+<td class='confluenceTd'> org.apache.wink <br clear="all" />
+.common.model<br clear="all" />
+ .opensearch<br clear="all" />
+ .OpenSearchDescription </td>
+<td class='confluenceTd'> Not required. Registered by default <br clear="all" /> </td>
+</tr>
+</tbody></table>
+
+
+
+
+<h3><a name="7.7OpenSearch-ProducinganOpenSearchDocumentExample"></a>Producing an OpenSearch Document Example</h3>
+
+<p>The following example demonstrates the creation of an OpenSearch document.</p>
+
+
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">      @GET
+    @Produces(MediaTypeUtils.OPENSEARCH)
+    <span class="code-keyword">public</span> OpenSearchDescription getOpenSearch(@Context UriInfo info) {
+        <span class="code-object">String</span> baseUri = info.getAbsolutePath().toString();
+        OpenSearchDescription openSearchDescription = <span class="code-keyword">new</span> OpenSearchDescription();
+        openSearchDescription.setShortName(<span class="code-quote">"Example search engine"</span>);
+        ...
+        <span class="code-keyword">return</span> openSearchDescription;
+}
+</pre>
+</div></div>
+
+<h5><a name="7.7OpenSearch-"></a></h5>
+
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/7.8 MultiPart.html b/src/site/resources/1.0/html/7.8 MultiPart.html
new file mode 100644
index 0000000..e6ff5c4
--- /dev/null
+++ b/src/site/resources/1.0/html/7.8 MultiPart.html
@@ -0,0 +1,157 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : 7.8 MultiPart</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : 7.8 MultiPart
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Oct 14, 2009 by <font color="#0050B2">michael</font>.
+				    </div>
+
+				    <h1><a name="7.8MultiPart-MultiPart"></a>MultiPart</h1>
+
+<p>Apache Wink provides a MultiPart data model and providers for producing and consuming multipart messages (multipart/&#42; ). All of the model classes are located under the org.apache.wink.common.model.multipart package distributed with the wink-common jar.</p>
+
+<p>The data model can be used with the wink-server module or with the wink-client module.</p>
+
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'>&nbsp;</th>
+<th class='confluenceTh'> Supported </th>
+<th class='confluenceTh'> Media Types <br clear="all" /> </th>
+<th class='confluenceTh'> Data Model <br clear="all" /> </th>
+<th class='confluenceTh'> Provider registration <br clear="all" /> </th>
+</tr>
+<tr>
+<td class='confluenceTd'> Read <br clear="all" /> </td>
+<td class='confluenceTd'> Yes <br clear="all" /> </td>
+<td class='confluenceTd'> multipart/&#42; <br clear="all" /> </td>
+<td class='confluenceTd'> org.apache.wink <br clear="all" />
+.common.model<br clear="all" />
+ .multipart.InMultiPart <br clear="all" />
+<br clear="all" />
+org.apache.wink <br clear="all" />
+.common.model<br clear="all" />
+ .multipart<br clear="all" />
+ .BufferedInMultiPart <br clear="all" /> </td>
+<td class='confluenceTd'> Not required. Registered by default <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> Write <br clear="all" /> </td>
+<td class='confluenceTd'> Yes </td>
+<td class='confluenceTd'> multipart/&#42; <br clear="all" /> </td>
+<td class='confluenceTd'> org.apache.wink <br clear="all" />
+.common.model<br clear="all" />
+ .multipart.OutMultiPart<br clear="all" />
+ <br clear="all" />
+org.apache.wink <br clear="all" />
+.common.model<br clear="all" />
+ .multipart<br clear="all" />
+ .BufferedOutMultiPart <br clear="all" /> </td>
+<td class='confluenceTd'> Not required. Registered by default <br clear="all" /> </td>
+</tr>
+</tbody></table>
+
+<h2><a name="7.8MultiPart-SerializationandDeserialization"></a>Serialization and De-serialization</h2>
+
+<p>The serialization and de-serialization of a multipart message is performed by the multipart providers. The serialization and de-serialization of the parts that make up the multipart message is performed as if each part is a separate message and in accordance with the JAX-RS specification. This means that every part is serialized and de-serialized using the appropriate provider that matches the binding class and content media type of that specific part.</p>
+
+<h2><a name="7.8MultiPart-MainClasses"></a>Main Classes</h2>
+
+<p>The multipart data model is comprised of the following main classes:</p>
+
+<ul>
+	<li><b>InMultiPart</b> &#45; is used for de-serialization of an incoming multipart message.</li>
+	<li><b>InPart</b> &#45; represents a single part contained in an incoming multipart message.</li>
+	<li><b>OutMultiPart</b> &#45; is used for serialization of an outgoing multipart message.</li>
+	<li><b>OutPart</b> &#45; represents a single part contained in an outgoing multipart message.</li>
+</ul>
+
+
+
+<h2><a name="7.8MultiPart-StreamingMultipart"></a>Streaming Multipart</h2>
+
+<p>The base multipart classes are designed to handle multipart messages without buffering the data in order to avoid possible memory issues. This means that the data is accessible only once by the use of an iterator.</p>
+
+<h2><a name="7.8MultiPart-BufferingMultipart"></a>Buffering Multipart</h2>
+
+<p>The BufferedInMultiPart and BufferedOutMultiPart classes are used to handle multipart messages where the complete message is buffered in the memory, allowing random and multiple access of the data. These classes are suitable for situations where the multipart message is small.</p>
+
+<h2><a name="7.8MultiPart-Examples"></a>Examples</h2>
+
+<p>The following examples illustrate the usage of the multipart data model.</p>
+
+
+<h3><a name="7.8MultiPart-MultipartConsumption"></a>Multipart Consumption</h3>
+
+<p>The following example illustrates the usage of a streaming multipart message.</p>
+
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">@Path(<span class="code-quote">"files"</span>)
+@POST
+@Produces( MediaType.TEXT_PLAIN)
+@Consumes( MediaTypeUtils.MULTIPART_FORM_DATA)
+<span class="code-keyword">public</span> <span class="code-object">String</span> uploadFiles(InMultiPart inMP) <span class="code-keyword">throws</span> IOException {
+    <span class="code-keyword">while</span> (inMP.hasNext()) {
+        InPart part = inMP.next();
+        MultivaluedMap&lt;<span class="code-object">String</span>, <span class="code-object">String</span>&gt; heades = part.getHeaders();
+        <span class="code-object">String</span> CDHeader = heades.getFirst(<span class="code-quote">"Content-Disposition"</span>);
+        InputStream is = part.getBody(InputStream.class, <span class="code-keyword">null</span>);
+        <span class="code-comment">// use the input stream to read the part body
+</span>    }
+}
+</pre>
+</div></div>
+
+<p>&#42; Detailed example of the MultiPart implementation can be seen at the MultiPart example.</p>
+
+
+
+<h3><a name="7.8MultiPart-BufferedMultipartConsumption"></a>Buffered Multipart Consumption</h3>
+
+<p>The following example illustrates the usage of a buffering multipart message.</p>
+
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">@Path(<span class="code-quote">"users"</span>)
+@POST
+@Consumes( {<span class="code-quote">"multipart/mixed"</span>})
+<span class="code-keyword">public</span> BufferedOutMultiPart addUsers(BufferedInMultiPart inMP) <span class="code-keyword">throws</span> IOException {
+    List&lt;InPart&gt; parts = inMP.getParts();
+    <span class="code-keyword">for</span> (InPart p : parts) {
+        User u = p.getBody(User.class, <span class="code-keyword">null</span>);
+	<span class="code-comment">// use the user object retrieved from the part body
+</span>
+    }
+}
+
+</pre>
+</div></div>
+<p>&#42; Detailed example of the MultiPart implementation can be seen at the MultiPart example.</p>
+
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/Apache Wink Developer Guide.html b/src/site/resources/1.0/html/Apache Wink Developer Guide.html
new file mode 100644
index 0000000..ef13d09
--- /dev/null
+++ b/src/site/resources/1.0/html/Apache Wink Developer Guide.html
@@ -0,0 +1,179 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : Apache Wink Developer Guide</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : Apache Wink Developer Guide
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Oct 13, 2009 by <font color="#0050B2">michael</font>.
+				    </div>
+
+				    <h1><a name="ApacheWinkDeveloperGuide-"></a></h1>
+
+<p><img src="attachments/2328628/2523211.jpg" align="absmiddle" border="0"/></p>
+
+
+<h1><a name="ApacheWinkDeveloperGuide-ApacheWink1.0"></a>Apache Wink 1.0</h1>
+
+
+<p>Apache Wink is a complete Java based solution for implementing and consuming REST based Web Services. The goal of the Apache Wink framework is to provide a reusable and extendable set of classes and interfaces that will serve as a foundation on which a developer can efficiently construct applications.</p>
+
+
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'><h3><a name="ApacheWinkDeveloperGuide-Contents"></a>Contents </h3></th>
+</tr>
+<tr>
+<td class='confluenceTd'> <a href="1 Introduction to Apache Wink.html" title="1 Introduction to Apache Wink">1 Introduction to Apache Wink</a> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <a href="2 Apache Wink Building Blocks.html" title="2 Apache Wink Building Blocks">2 Apache Wink Building Blocks</a> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <a href="3 Getting Started with Apache Wink.html" title="3 Getting Started with Apache Wink">3 Getting Started with Apache Wink</a> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <a href="4 JAX-RS Concepts.html" title="4 JAX-RS Concepts">4 JAX-RS Concepts</a> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <a href="5 Apache Wink Server.html" title="5 Apache Wink Server">5 Apache Wink Server</a> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> &nbsp;&nbsp;&nbsp;<a href="5.1 Registration and Configuration.html" title="5.1 Registration and Configuration">5.1 Registration and Configuration</a> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> &nbsp;&nbsp;&nbsp;<a href="5.2 Annotations.html" title="5.2 Annotations">5.2 Annotations</a> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> &nbsp;&nbsp;&nbsp;<a href="5.3 Resource Matching.html" title="5.3 Resource Matching">5.3 Resource Matching</a> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> &nbsp;&nbsp;&nbsp;<a href="5.4 APP Service Document.html" title="5.4 APP Service Document">5.4 APP. Service Document</a> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> &nbsp;&nbsp;&nbsp;<a href="5.5 Spring Integration.html" title="5.5 Spring Integration">5.5 Spring Integration</a> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> &nbsp;&nbsp;&nbsp;<a href="5.6 WebDAV Extension.html" title="5.6 WebDAV Extension">5.6 WebDAV Extension</a> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> &nbsp;&nbsp;&nbsp;<a href="5.7 Handler Chain - Runtime Extension.html" title="5.7 Handler Chain - Runtime Extension">5.7 Handler Chain</a> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> &nbsp;&nbsp;&nbsp;<a href="5.8 Link Builder.html" title="5.8 Link Builder">5.8 Link Builder</a> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> &nbsp;&nbsp;&nbsp;<a href="5.9 Assets.html" title="5.9 Assets">5.9 Assets</a> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> &nbsp;&nbsp;&nbsp;<a href="5.10 Admin Views.html" title="5.10 Admin Views">5.10 Admin Views</a> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <a href="6 Apache Wink Client.html" title="6 Apache Wink Client">6 Apache Wink Client</a> <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> &nbsp;&nbsp;&nbsp;<a href="6.1 Getting Started with Apache Wink Client.html" title="6.1 Getting Started with Apache Wink Client">6.1 Getting Started with Apache Wink Client</a> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> &nbsp;&nbsp;&nbsp;<a href="6.2 Configuring the Apache Wink Client.html" title="6.2 Configuring the Apache Wink Client">6.2 Configuring the Apache Wink Client</a> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> &nbsp;&nbsp;&nbsp;<a href="6.3 Input and Output Stream Adapters.html" title="6.3 Input and Output Stream Adapters">6.3 Input and Output Stream Adapters</a> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <a href="7 Apache Wink Representations.html" title="7 Apache Wink Representations">7 Apache Wink Providers</a> <br clear="all" /> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> &nbsp;&nbsp;&nbsp;<a href="7.1 JSON.html" title="7.1 JSON">7.1 Json </a> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> &nbsp;&nbsp;&nbsp;<a href="7.2 APP.html" title="7.2 APP">7.2 APP </a> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> &nbsp;&nbsp;&nbsp;<a href="7.3 Atom.html" title="7.3 Atom">7.3 Atom </a> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> &nbsp;&nbsp;&nbsp;<a href="7.4 RSS.html" title="7.4 RSS">7.4 RSS</a> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> &nbsp;&nbsp;&nbsp;<a href="7.5 HTML.html" title="7.5 HTML">7.5 HTML </a> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> &nbsp;&nbsp;&nbsp;<a href="7.6 CSV.html" title="7.6 CSV">7.6 CSV </a> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> &nbsp;&nbsp;&nbsp;<a href="7.7 OpenSearch.html" title="7.7 OpenSearch">7.7 OpenSearch </a> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> &nbsp;&nbsp;&nbsp;<a href="7.8 MultiPart.html" title="7.8 MultiPart">7.8 MultiPart</a> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <a href="Appendix A - Feeds Support.html" title="Appendix A - Feeds Support">Appendix A - Feeds Support</a> </td>
+</tr>
+<tr>
+<td class='confluenceTd'> <a href="Appendix B - Google App Engine.html" title="Appendix B - Google App Engine">Appendix B - Google App Engine</a> </td>
+</tr>
+</tbody></table>
+
+				    					    <br/>
+                        <div class="tabletitle">
+                            <a name="attachments">Attachments:</a>
+                        </div>
+
+                        <div class="greybox" align="left">
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2328628/2523206.png">worddav9b9ce05b77b82d168b7932fdc5901024.png</a> (image/png)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2328628/2523207.png">worddav3b1b7a3eba6ce28e35547aae482e5159.png</a> (image/png)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2328628/2523208.png">worddavc10765bebdadcc60c3185b745a3f86bb.png</a> (image/png)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2328628/2523209.png">worddavefc5c57fe0c573c6838765a9e17304da.png</a> (image/png)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2328628/2523211.jpg">Wink Logo.jpg</a> (image/jpeg)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2328628/2523229.pdf">Apache Wink 0.1 Runtime Features List.pdf</a> (application/x-download)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2328628/2523233.zip">WINK-20090809-03_40_43-270.zip</a> (application/zip)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2328628/2523232.pdf">WINK-20090809-01_52_19-269.pdf</a> (application/x-download)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2328628/2523231.pdf">WINK-20090809-01_52_19-269.pdf</a> (application/x-download)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2328628/2523230.zip">WINK-20090809-03_40_43-270.zip</a> (application/zip)
+                                <br/>
+                                                    </div>
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/Appendix A - Feeds Support.html b/src/site/resources/1.0/html/Appendix A - Feeds Support.html
new file mode 100644
index 0000000..066c6c9
--- /dev/null
+++ b/src/site/resources/1.0/html/Appendix A - Feeds Support.html
@@ -0,0 +1,648 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : Appendix A - Feeds Support</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : Appendix A - Feeds Support
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Oct 15, 2009 by <font color="#0050B2">shivakumar</font>.
+				    </div>
+
+				    <h1><a name="AppendixA-FeedsSupport-MigrationfromApacheAbderatoApacheWink"></a>Migration from Apache Abdera to Apache Wink</h1>
+
+<p>Apache Wink is an excellent solution for consuming and producing Atom, APP and RSS documents. The following section describes how to migrate from Apache Abdera to Apache Wink by providing a set of examples that cover most use cases.</p>
+
+<h3><a name="AppendixA-FeedsSupport-AdvantagesofApacheWinkoverApacheAbdera"></a>Advantages of Apache Wink over Apache Abdera</h3>
+<ul>
+	<li>Standardized APIs (using JAX-RS and JAXB)</li>
+	<li>Support for handling XML and JSON more easily</li>
+	<li>Support for handling RSS and ATOM more easily</li>
+</ul>
+
+
+<h3><a name="AppendixA-FeedsSupport-Thissectioncontainsthefollowingtopics%3A"></a>This section contains the following topics:</h3>
+<ul>
+	<li><a href="#AppendixA-FeedsSupport-1%29ConsumingAtomDocuments">1&#41; Consuming Atom Documents</a></li>
+	<li><a href="#AppendixA-FeedsSupport-2%29a%29ProducingAtomDocuments">2&#41; a&#41; Producing Atom Documents</a></li>
+	<li><a href="#AppendixA-FeedsSupport-2%29b%29ProducingAtomDocumentstheJAXRSway">2&#41; b&#41; Producing Atom Documents &#45; the JAX&#45;RS way</a></li>
+	<li><a href="#AppendixA-FeedsSupport-3%29ConsumingRSSDocuments">3&#41; Consuming RSS Documents</a></li>
+	<li><a href="#AppendixA-FeedsSupport-4%29ProducingRSSDocuments">4&#41; Producing RSS Documents</a></li>
+	<li><a href="#AppendixA-FeedsSupport-5%29WritingAtomPublishingProtocol%28APP%29Server">5&#41; Writing Atom Publishing Protocol &#40;APP&#41; Server</a></li>
+	<li><a href="#AppendixA-FeedsSupport-6%29WritingAtomPublishingProtocol%28APP%29Client">6&#41; Writing Atom Publishing Protocol &#40;APP&#41; Client</a></li>
+</ul>
+
+
+<hr />
+<h3><a name="AppendixA-FeedsSupport-1%29ConsumingAtomDocuments"></a>1) Consuming Atom Documents</h3>
+<p>The following code example demonstrates the consumption of Atom documents using Apache Abdera.</p>
+
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'> Apache Abdera - Click on link to Download - <a href="attachments/2852765/3113129.java">ConsumeAtomUsingAbdera.java</a> </th>
+</tr>
+<tr>
+<td class='confluenceTd'> <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+Abdera abdera = <span class="code-keyword">new</span> Abdera();
+Parser parser = abdera.getParser();
+URL url = <span class="code-keyword">new</span> URL(<span class="code-quote">"http:<span class="code-comment">//alexharden.org/blog/atom.xml"</span>);
+</span>Document&lt;Feed&gt; doc = parser.parse(url.openStream());
+Feed feed = doc.getRoot();
+<span class="code-object">System</span>.out.println(feed.getTitle());
+<span class="code-keyword">for</span> (Entry entry : feed.getEntries()) {
+    <span class="code-object">System</span>.out.println(<span class="code-quote">"\t"</span> + entry.getTitle());
+}
+</pre>
+</div></div></td>
+</tr>
+<tr>
+</tr>
+</tbody></table>
+
+<p>The following code example demonstrates the consumption of Atom documents using Apache Wink.</p>
+
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'> Apache Wink  - Click on link to Download - <a href="attachments/2852765/3113127.java">ConsumeAtomUsingWink.java</a> </th>
+</tr>
+<tr>
+<td class='confluenceTd'> <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+RestClient client = <span class="code-keyword">new</span> RestClient();
+Resource resource = client.resource(<span class="code-quote">"http:<span class="code-comment">//alexharden.org/blog/atom.xml"</span>);
+</span>AtomFeed feed = resource.accept(MediaType.APPLICATION_ATOM_XML).get(AtomFeed.class);
+<span class="code-object">System</span>.out.println(feed.getTitle().getValue());
+<span class="code-keyword">for</span> (AtomEntry entry : feed.getEntries()) {
+    <span class="code-object">System</span>.out.println(<span class="code-quote">"\t"</span> + entry.getTitle().getValue());
+}
+</pre>
+</div></div></td>
+</tr>
+<tr>
+</tr>
+</tbody></table>
+
+<hr />
+<h3><a name="AppendixA-FeedsSupport-2%29a%29ProducingAtomDocuments"></a>2) a) Producing Atom Documents</h3>
+<p>The following code example demonstrates the production of Atom documents using Apache Abdera.</p>
+
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'> Apache Abdera  - Click on links to Download - <a href="attachments/2852765/3113130.java">ProduceAtomUsingAbdera.java</a> <a href="attachments/2852765/3113128.xml">ProduceAtomUsingAbdera_web.xml</a> </th>
+</tr>
+<tr>
+<td class='confluenceTd'> <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+<span class="code-keyword">protected</span> void doGet(HttpServletRequest request, HttpServletResponse response)
+    <span class="code-keyword">throws</span> ServletException, IOException {
+    Abdera abdera = <span class="code-keyword">new</span> Abdera();
+    Feed feed = abdera.newFeed();
+
+    feed.setId(<span class="code-quote">"tag:example.org,2007:/foo"</span>);
+    feed.setTitle(<span class="code-quote">"Test Feed"</span>);
+    feed.setSubtitle(<span class="code-quote">"Feed subtitle"</span>);
+    feed.setUpdated(<span class="code-keyword">new</span> Date());
+    feed.addAuthor(<span class="code-quote">"Shiva HR"</span>);
+    feed.addLink(<span class="code-quote">"http:<span class="code-comment">//example.com"</span>);
+</span>    feed.addLink(<span class="code-quote">"http:<span class="code-comment">//example.com/foo"</span>, <span class="code-quote">"self"</span>);
+</span>
+    Entry entry = feed.addEntry();
+    entry.setId(<span class="code-quote">"tag:example.org,2007:/foo/entries/1"</span>);
+    entry.setTitle(<span class="code-quote">"Entry title"</span>);
+    entry.setSummaryAsHtml(<span class="code-quote">"&lt;p&gt;This is the entry title&lt;/p&gt;"</span>);
+    entry.setUpdated(<span class="code-keyword">new</span> Date());
+    entry.setPublished(<span class="code-keyword">new</span> Date());
+    entry.addLink(<span class="code-quote">"http:<span class="code-comment">//example.com/foo/entries/1"</span>);
+</span>
+    feed.getDocument().writeTo(response.getWriter());
+} </pre>
+</div></div></td>
+</tr>
+<tr>
+</tr>
+</tbody></table>
+
+
+<p>The following code example demonstrates the production of Atom documents using Apache Wink.</p>
+
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'> Apache Wink  - Click on links to Download - <a href="attachments/2852765/3113134.java">ProduceAtomUsingWink.java</a> <a href="attachments/2852765/3113132.xml">ProduceAtomUsingWink_web.xml</a> </th>
+</tr>
+<tr>
+<td class='confluenceTd'> <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+<span class="code-keyword">protected</span> void doGet(HttpServletRequest request, HttpServletResponse response)
+    <span class="code-keyword">throws</span> ServletException, IOException {
+    AtomFeed feed = <span class="code-keyword">new</span> AtomFeed();
+    feed.setId(<span class="code-quote">"tag:example.org,2007:/foo"</span>);
+    feed.setTitle(<span class="code-keyword">new</span> AtomText(<span class="code-quote">"Test Feed"</span>));
+    feed.setSubtitle(<span class="code-keyword">new</span> AtomText(<span class="code-quote">"Feed subtitle"</span>));
+    feed.setUpdated(<span class="code-keyword">new</span> Date());
+
+    AtomPerson person = <span class="code-keyword">new</span> AtomPerson();
+    person.setName(<span class="code-quote">"Shiva HR"</span>);
+    feed.getAuthors().add(person);
+
+    AtomLink link1 = <span class="code-keyword">new</span> AtomLink();
+    link1.setHref(<span class="code-quote">"http:<span class="code-comment">//example.com"</span>);
+</span>    feed.getLinks().add(link1);
+
+    AtomLink link2 = <span class="code-keyword">new</span> AtomLink();
+    link2.setHref(<span class="code-quote">"http:<span class="code-comment">//example.com/foo"</span>);
+</span>    link2.setRel(<span class="code-quote">"self"</span>);
+    feed.getLinks().add(link2);
+
+    AtomEntry entry = <span class="code-keyword">new</span> AtomEntry();
+    entry.setId(<span class="code-quote">"tag:example.org,2007:/foo/entries/1"</span>);
+    entry.setTitle(<span class="code-keyword">new</span> AtomText(<span class="code-quote">"Entry title"</span>));
+
+    AtomText summary = <span class="code-keyword">new</span> AtomText();
+    summary.setType(AtomTextType.html);
+    summary.setValue(<span class="code-quote">"&lt;p&gt;This is the entry title&lt;/p&gt;"</span>);
+    entry.setSummary(summary);
+
+    entry.setUpdated(<span class="code-keyword">new</span> Date());
+    entry.setPublished(<span class="code-keyword">new</span> Date());
+
+    AtomLink link3 = <span class="code-keyword">new</span> AtomLink();
+    link3.setHref(<span class="code-quote">"http:<span class="code-comment">//example.com/foo/entries/1"</span>);
+</span>    entry.getLinks().add(link3);
+
+    feed.getEntries().add(entry);
+
+    AtomFeed.marshal(feed, response.getOutputStream());
+}
+</pre>
+</div></div></td>
+</tr>
+<tr>
+</tr>
+</tbody></table>
+
+
+<h3><a name="AppendixA-FeedsSupport-2%29b%29ProducingAtomDocumentstheJAXRSway"></a>2) b) Producing Atom Documents - the JAX-RS way</h3>
+<p>A more elegant way of producing Atom documents using Apache Wink is the JAX-RS way as described below:</p>
+
+<h4><a name="AppendixA-FeedsSupport-"></a></h4>
+
+<ol>
+	<li>Open the Eclipse development environment and create a "Dynamic Web Project".</li>
+	<li>Add Apache Wink &amp; its dependent JARs under Java EE Module Dependencies.</li>
+	<li>Create a POJO class and a method that creates Atom feed document. Annotate the class &amp; its methods with the required JAX-RS annotations as below:<br/>
+<a href="attachments/2852765/3113135.java">ProduceAtom.java</a></li>
+	<li>Add org.apache.wink.server.internal.servlet.RestServlet into web.xml and specify the path of above Resource class in it's init-param.<br/>
+See <a href="attachments/2852765/3113133.xml">ProduceAtomWinkElegant_web.xml</a> and <a href="attachments/2852765/3113131">application</a></li>
+	<li>Deploy the web-application and access it using the url <a href="http://localhost:8080/ProduceAtom_Wink_Elegant/rest/getAtom">http://localhost:8080/ProduceAtom_Wink_Elegant/rest/getAtom</a></li>
+	<li>Final WAR &#45;&gt; <a href="attachments/2852765/3113138.zip">ProduceAtom_Wink_Elegant.zip</a> (add Wink &amp; its dependent JARs under ProduceAtom_Wink_Elegant\WEB-INF\lib and re-zip it as WAR).</li>
+</ol>
+
+
+<hr />
+<h3><a name="AppendixA-FeedsSupport-3%29ConsumingRSSDocuments"></a>3) Consuming RSS Documents</h3>
+
+<p>The following code example demonstrates the consuming of RSS documents using Apache Abdera.</p>
+
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'> Apache Abdera  - Click on link to Download - <a href="attachments/2852765/3113136.java">ConsumeRssUsingAbdera.java</a> </th>
+</tr>
+<tr>
+<td class='confluenceTd'> <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+<span class="code-keyword">public</span> <span class="code-keyword">static</span> void main(<span class="code-object">String</span>[] args) <span class="code-keyword">throws</span> ParseException, IOException {
+    <span class="code-object">System</span>.out.println(<span class="code-quote">"Consuming RSS Documents using Abdera...\n"</span>);
+    Abdera abdera = <span class="code-keyword">new</span> Abdera();
+    Parser parser = abdera.getParser();
+    URL url = <span class="code-keyword">new</span> URL(<span class="code-quote">"http:<span class="code-comment">//www.rssboard.org/files/sample-rss-2.xml"</span>);
+</span>    Document&lt;RssFeed&gt; doc = parser.parse(url.openStream());
+    RssFeed rssFeed = doc.getRoot();
+    <span class="code-object">System</span>.out.println(<span class="code-quote">"Title: "</span> + rssFeed.getTitle());
+    <span class="code-object">System</span>.out.println(<span class="code-quote">"Description: "</span> + rssFeed.getSubtitle() + <span class="code-quote">"\n"</span>);
+    <span class="code-object">int</span> itemCount = 0;
+    <span class="code-keyword">for</span> (Entry entry : rssFeed.getEntries()) {
+        <span class="code-object">System</span>.out.println(<span class="code-quote">"Item "</span> + ++itemCount + <span class="code-quote">":"</span>);
+        <span class="code-object">System</span>.out.println(<span class="code-quote">"\tTitle: "</span> + entry.getTitle());
+        <span class="code-object">System</span>.out.println(<span class="code-quote">"\tPublish Date: "</span> + entry.getPublished());
+        <span class="code-object">System</span>.out.println(<span class="code-quote">"\tDescription: "</span> + entry.getContent());
+    }
+} </pre>
+</div></div></td>
+</tr>
+<tr>
+</tr>
+</tbody></table>
+
+<p>The following code example demonstrates the consuming of RSS documents using Apache Wink.</p>
+
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'> Apache Wink  - Click on link to Download - <a href="attachments/2852765/3113139.java">ConsumeRssUsingWink.java</a> </th>
+</tr>
+<tr>
+<td class='confluenceTd'> <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+<span class="code-keyword">public</span> <span class="code-keyword">static</span> void main(<span class="code-object">String</span>[] args) {
+    <span class="code-object">System</span>.out.println(<span class="code-quote">"Consuming RSS Documents using Apache Wink...\n"</span>);
+    RestClient client = <span class="code-keyword">new</span> RestClient();
+    <span class="code-object">String</span> url = <span class="code-quote">"http:<span class="code-comment">//www.rssboard.org/files/sample-rss-2.xml"</span>;
+</span>    Resource resource = client.resource(url);
+    RssFeed rss = resource.accept(MediaType.APPLICATION_XML).get(RssFeed.class);
+    RssChannel channel = rss.getChannel();
+    <span class="code-object">System</span>.out.println(<span class="code-quote">"Title: "</span> + channel.getTitle());
+    <span class="code-object">System</span>.out.println(<span class="code-quote">"Description: "</span> + channel.getDescription() + <span class="code-quote">"\n"</span>);
+    <span class="code-object">int</span> itemCount = 0;
+    <span class="code-keyword">for</span> (RssItem item : channel.getItems()) {
+        <span class="code-object">System</span>.out.println(<span class="code-quote">"Item "</span> + ++itemCount + <span class="code-quote">":"</span>);
+        <span class="code-object">System</span>.out.println(<span class="code-quote">"\tTitle: "</span> + item.getTitle());
+        <span class="code-object">System</span>.out.println(<span class="code-quote">"\tPublish Date: "</span> + item.getPubDate());
+        <span class="code-object">System</span>.out.println(<span class="code-quote">"\tDescription: "</span> + item.getDescription());
+    }
+}
+</pre>
+</div></div></td>
+</tr>
+<tr>
+</tr>
+</tbody></table>
+
+<hr />
+<h3><a name="AppendixA-FeedsSupport-4%29ProducingRSSDocuments"></a>4) Producing RSS Documents</h3>
+
+<h4><a name="AppendixA-FeedsSupport-ApacheAbdera"></a>Apache Abdera</h4>
+<p>Apache Abdera version 0.4 does not support RSS write.</p>
+
+<h4><a name="AppendixA-FeedsSupport-ApacheWink"></a>Apache Wink</h4>
+<p>Same as in <a href="#AppendixA-FeedsSupport-2%29b%29ProducingAtomDocumentstheJAXRSway">2&#41; b&#41; Producing Atom Documents &#45; the JAX&#45;RS way</a>. However the resource method now returns an RssFeed object instead of AtomFeed object.</p>
+
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'> Apache Wink  - Click on link to Download - <a href="attachments/2852765/3113137.zip">ProduceRss_Wink_Elegant.zip</a> </th>
+</tr>
+<tr>
+<td class='confluenceTd'> <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+@Path(<span class="code-quote">"/getRss"</span>)
+<span class="code-keyword">public</span> class ProduceRss {
+    @GET
+    @Produces(MediaType.APPLICATION_XML)
+    <span class="code-keyword">public</span> Rss getRss() {
+        RssFeed rss = <span class="code-keyword">new</span> RssFeed();
+
+        RssChannel channel = <span class="code-keyword">new</span> RssChannel();
+        channel.setTitle(<span class="code-quote">"Liftoff News"</span>);
+        channel.setLink(<span class="code-quote">"http:<span class="code-comment">//liftoff.msfc.nasa.gov"</span>);
+</span>        channel.setDescription(<span class="code-quote">"Liftoff to Space Exploration."</span>);
+        channel.setPubDate(<span class="code-keyword">new</span> Date().toString());
+
+        RssItem item = <span class="code-keyword">new</span> RssItem();
+        item.setTitle(<span class="code-quote">"Star City"</span>);
+        item.setLink(<span class="code-quote">"http:<span class="code-comment">//liftoff.msfc.nasa.gov/news/2003/news-starcity.asp"</span>);
+</span>        item.setDescription(<span class="code-quote">"How <span class="code-keyword">do</span> Americans get ready to work with Russians aboard the International Space Station?"</span>);
+
+        channel.getItem().add(item);
+        rss.setChannel(channel);
+        <span class="code-keyword">return</span> rss;
+    }
+}
+</pre>
+</div></div></td>
+</tr>
+<tr>
+</tr>
+</tbody></table>
+
+<hr />
+<h3><a name="AppendixA-FeedsSupport-5%29WritingAtomPublishingProtocol%28APP%29Server"></a>5) Writing Atom Publishing Protocol (APP) Server</h3>
+<p>The following steps explain how to implement an APP server as described in the following beautiful article by James Snell: <a href="http://www.ibm.com/developerworks/library/x-atompp1/">http://www.ibm.com/developerworks/library/x-atompp1/</a></p>
+
+<h4><a name="AppendixA-FeedsSupport-ApacheAbdera"></a>Apache Abdera</h4>
+
+<ol>
+	<li>Open the Eclipse development environment and create a "Dynamic Web Project".</li>
+	<li>Add Apache Abdera &amp; its dependent JARs under Java EE Module Dependencies.</li>
+	<li>Add the following CollectionAdapter and Provider classes under src/myPackage directory: <a href="attachments/2852765/4456457.java">APP_CollectionAdapter.java</a> <a href="attachments/2852765/4456455.java">APP_ContentProvider.java</a></li>
+	<li>Add org.apache.abdera.protocol.server.servlet.AbderaServlet into web.xml and point the following init paramters to the classes added above.
+<br clear="all" />
+org.apache.abdera.protocol.server.Provider
+<br clear="all" />
+org.apache.abdera.protocol.server.CollectionAdapter
+<br clear="all" />
+<a href="attachments/2852765/4456456.xml">APP_Server_Abdera_web.xml</a></li>
+	<li>Add the following index.jsp which has help on how to perform the APP operations: <a href="attachments/2852765/4456458.jsp">APP_Server_Abdera_index.jsp</a></li>
+	<li>Deploy and run the application.</li>
+</ol>
+
+
+<p>Final WAR &#45;&gt; <a href="attachments/2852765/4456454.zip">APP_Server_Abdera.zip</a> (add Apache Abdera &amp; its dependent JARs under APP_Server_Abdera\WEB-INF\lib and re-zip it as WAR).</p>
+
+<h4><a name="AppendixA-FeedsSupport-ApacheWink"></a>Apache Wink</h4>
+
+<ol>
+	<li>Open the Eclipse development environment and create a "Dynamic Web Project".</li>
+	<li>Add Apache Wink &amp; its dependent JARs under Java EE Module Dependencies.</li>
+	<li>Add the following Resource class under src/myPackage directory: <a href="attachments/2852765/4456460.java">EntriesCollection.java</a></li>
+	<li>Add org.apache.wink.server.internal.servlet.RestServlet into web.xml and specify the path of above Resource class in it's init-param. <a href="attachments/2852765/4456462.xml">APP_Server_Wink_web.xml</a> <a href="attachments/2852765/4456461">APP_Server_Wink_application</a></li>
+	<li>Add the following index.jsp which has help on how to perform the APP operations: <a href="attachments/2852765/4456459.jsp">APP_Server_Wink_index.jsp</a></li>
+	<li>Deploy and run the application.</li>
+</ol>
+
+
+<p>Final WAR &#45;&gt; <a href="attachments/2852765/4456452.zip">APP_Server_Wink.zip</a> (add Apache Wink &amp; its dependent JARs under APP_Server_Wink\WEB-INF\lib and re-zip it as WAR)</p>
+
+<h4><a name="AppendixA-FeedsSupport-References"></a>References</h4>
+
+<ul>
+	<li>Apache Wink's "SimpleDefects" example: <a href="http://svn.apache.org/repos/asf/incubator/wink/tags/wink-0.1-incubating/wink-examples/apps/SimpleDefects/src/main/java/org/apache/wink/example/simpledefects/resources/DefectsResource.java">http://svn.apache.org/repos/asf/incubator/wink/tags/wink-0.1-incubating/wink-examples/apps/SimpleDefects/src/main/java/org/apache/wink/example/simpledefects/resources/DefectsResource.java</a></li>
+	<li>Abdera Feed Sample shipped with IBM WebSphere Feature Pack for Web 2.0 <a href="http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.ajax.feed.samples.help/docs/GettingStarted_useage.html">http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.ajax.feed.samples.help/docs/GettingStarted_useage.html</a></li>
+	<li>Abdera Server Implementation Guide &#45;&gt; <a href="http://cwiki.apache.org/ABDERA/server-implementation-guide.html">http://cwiki.apache.org/ABDERA/server-implementation-guide.html</a></li>
+	<li>Abdera Collection Adapter Implementation Guide &#45;&gt; <a href="http://cwiki.apache.org/ABDERA/collection-adapter-implementation-guide.html">http://cwiki.apache.org/ABDERA/collection-adapter-implementation-guide.html</a></li>
+</ul>
+
+
+<hr />
+<h3><a name="AppendixA-FeedsSupport-6%29WritingAtomPublishingProtocol%28APP%29Client"></a>6) Writing Atom Publishing Protocol (APP) Client</h3>
+
+<p>In order to write an Atom Publishing Protocol client refer to the following examples.</p>
+
+<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Important Note</b><br />Make sure that the APP_Server_Abdera.war and the APP_Server_Wink.war provided in the previous example are deployed before running these examples.</td></tr></table></div>
+
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'> Apache Abdera - Click on link to Download - <a href="attachments/2852765/4751362.java">APP_Client_Abdera.java</a><br clear="all" /> </th>
+</tr>
+<tr>
+<td class='confluenceTd'> &nbsp;&nbsp;&nbsp; 1. Acessing Service Document: <br clear="all" />
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+Document&lt;Service&gt; introspection = abderaClient.get(SERVICE_URL).getDocument();
+Service service = introspection.getRoot();
+List&lt;Workspace&gt; workspaces = service.getWorkspaces();
+<span class="code-keyword">for</span> (Workspace workspace : workspaces) {
+    <span class="code-object">System</span>.out.println(<span class="code-quote">"\t"</span> + workspace.getTitle());
+    List&lt;Collection&gt; collections = workspace.getCollections();
+    <span class="code-keyword">for</span> (Collection collection : collections) {
+        <span class="code-object">System</span>.out.println(<span class="code-quote">"\t"</span> + collection.getTitle() + <span class="code-quote">"\t:\t"</span> + collection.getHref());
+    }
+    <span class="code-object">System</span>.out.print(<span class="code-quote">"\n"</span>);
+}
+</pre>
+</div></div></td>
+</tr>
+<tr>
+</tr>
+<tr>
+<td class='confluenceTd'> &nbsp;&nbsp;&nbsp; 2. Getting a Feed
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+RequestOptions opts = <span class="code-keyword">new</span> RequestOptions();
+opts.setContentType(<span class="code-quote">"application/atom+xml;type=feed"</span>);
+ClientResponse response = abderaClient.get(FEED_URL, opts);
+Feed feed = (Feed)response.getDocument().getRoot();
+</pre>
+</div></div></td>
+</tr>
+<tr>
+</tr>
+<tr>
+<td class='confluenceTd'> &nbsp;&nbsp;&nbsp; 3. Posting an entry to a Feed <br clear="all" />
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+RequestOptions opts = <span class="code-keyword">new</span> RequestOptions();
+opts.setContentType(<span class="code-quote">"application/atom+xml;type=entry"</span>);
+ClientResponse response = abderaClient.post(FEED_URL, newEntry, opts);
+</pre>
+</div></div></td>
+</tr>
+<tr>
+</tr>
+<tr>
+<td class='confluenceTd'> &nbsp;&nbsp;&nbsp; 4. Putting a change to an Entry <br clear="all" />
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+RequestOptions opts = <span class="code-keyword">new</span> RequestOptions();
+opts.setContentType(<span class="code-quote">"application/atom+xml;type=entry"</span>);
+ClientResponse response = abderaClient.put(ENTRY_URL, changedEntry.getDocument(), opts);
+</pre>
+</div></div></td>
+</tr>
+<tr>
+</tr>
+<tr>
+<td class='confluenceTd'> &nbsp;&nbsp;&nbsp; 5. Getting an Entry <br clear="all" />
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+RequestOptions opts = <span class="code-keyword">new</span> RequestOptions();
+opts.setContentType(<span class="code-quote">"application/atom+xml;type=entry"</span>);
+ClientResponse response = abderaClient.get(ENTRY_URL, opts);
+Entry entry = (Entry)response.getDocument().getRoot();
+</pre>
+</div></div></td>
+</tr>
+<tr>
+</tr>
+<tr>
+<td class='confluenceTd'> &nbsp;&nbsp;&nbsp; 6. Deleting an Entry <br clear="all" />
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+ClientResponse response = abderaClient.delete(ENTRY_URL);
+</pre>
+</div></div></td>
+</tr>
+<tr>
+</tr>
+</tbody></table>
+
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'> Apache Wink - Click on link to Download - <a href="attachments/2852765/4751361.java">APP_Client_Wink.java</a><br clear="all" /> </th>
+</tr>
+<tr>
+<td class='confluenceTd'> &nbsp;&nbsp;&nbsp; 1. Acessing Service Document: <br clear="all" />
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+Resource resource = restClient.resource(SERVICE_URL);
+AppService service = resource.accept(MediaTypeUtils.ATOM_SERVICE_DOCUMENT).get(AppService.class);
+List&lt;AppWorkspace&gt; workspaces = service.getWorkspace();
+<span class="code-keyword">for</span> (AppWorkspace workspace : workspaces) {
+    <span class="code-object">System</span>.out.println(<span class="code-quote">"\t"</span> + workspace.getTitle().getValue());
+    List&lt;AppCollection&gt; collections = workspace.getCollection();
+    <span class="code-keyword">for</span> (AppCollection collection : collections) {
+        <span class="code-object">System</span>.out.println(<span class="code-quote">"\t"</span> + collection.getTitle().getValue()
+            + <span class="code-quote">"\t:\t"</span>
+            + collection.getHref());
+    }
+    <span class="code-object">System</span>.out.print(<span class="code-quote">"\n"</span>);
+}
+</pre>
+</div></div></td>
+</tr>
+<tr>
+</tr>
+<tr>
+<td class='confluenceTd'> &nbsp;&nbsp;&nbsp; 2. Getting a Feed <br clear="all" />
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+Resource feedResource = restClient.resource(FEED_URL);
+AtomFeed feed = feedResource.accept(MediaType.APPLICATION_ATOM_XML).get(AtomFeed.class);
+</pre>
+</div></div></td>
+</tr>
+<tr>
+</tr>
+<tr>
+<td class='confluenceTd'> &nbsp;&nbsp;&nbsp; 3. Posting an entry to a Feed <br clear="all" />
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+Resource feedResource = restClient.resource(FEED_URL);
+ClientResponse response =
+    feedResource.contentType(MediaType.APPLICATION_ATOM_XML).post(newEntry);
+</pre>
+</div></div></td>
+</tr>
+<tr>
+</tr>
+<tr>
+<td class='confluenceTd'> &nbsp;&nbsp;&nbsp; 4. Putting a change to an Entry <br clear="all" />
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+Resource feedResource = restClient.resource(ENTRY_URL);
+ClientResponse response =
+    feedResource.contentType(MediaType.APPLICATION_ATOM_XML).put(changedEntry);
+</pre>
+</div></div></td>
+</tr>
+<tr>
+</tr>
+<tr>
+<td class='confluenceTd'> &nbsp;&nbsp;&nbsp; 5. Getting an Entry <br clear="all" />
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+Resource feedResource = restClient.resource(ENTRY_URL);
+AtomEntry atomEntry = feedResource.accept(MediaType.APPLICATION_ATOM_XML).get(AtomEntry.class);
+</pre>
+</div></div></td>
+</tr>
+<tr>
+</tr>
+<tr>
+<td class='confluenceTd'> &nbsp;&nbsp;&nbsp; 6. Deleting an Entry <br clear="all" />
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+Resource feedResource = restClient.resource(ENTRY_URL);
+ClientResponse response = feedResource.delete();
+</pre>
+</div></div></td>
+</tr>
+<tr>
+</tr>
+</tbody></table>
+<hr />
+
+				    					    <br/>
+                        <div class="tabletitle">
+                            <a name="attachments">Attachments:</a>
+                        </div>
+
+                        <div class="greybox" align="left">
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2852765/3113127.java">ConsumeAtomUsingWink.java</a> (application/octet-stream)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2852765/3113128.xml">ProduceAtomUsingAbdera_web.xml</a> (text/xml)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2852765/3113129.java">ConsumeAtomUsingAbdera.java</a> (application/octet-stream)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2852765/3113130.java">ProduceAtomUsingAbdera.java</a> (application/octet-stream)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2852765/3113131">application</a> (application/octet-stream)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2852765/3113132.xml">ProduceAtomUsingWink_web.xml</a> (text/xml)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2852765/3113133.xml">ProduceAtomWinkElegant_web.xml</a> (text/xml)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2852765/3113134.java">ProduceAtomUsingWink.java</a> (application/octet-stream)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2852765/3113135.java">ProduceAtom.java</a> (application/octet-stream)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2852765/3113136.java">ConsumeRssUsingAbdera.java</a> (application/octet-stream)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2852765/3113137.zip">ProduceRss_Wink_Elegant.zip</a> (application/zip)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2852765/3113138.zip">ProduceAtom_Wink_Elegant.zip</a> (application/zip)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2852765/3113139.java">ConsumeRssUsingWink.java</a> (application/octet-stream)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2852765/4456452.zip">APP_Server_Wink.zip</a> (application/x-zip-compressed)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2852765/4456454.zip">APP_Server_Abdera.zip</a> (application/x-zip-compressed)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2852765/4456455.java">APP_ContentProvider.java</a> (application/octet-stream)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2852765/4456456.xml">APP_Server_Abdera_web.xml</a> (text/xml)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2852765/4456457.java">APP_CollectionAdapter.java</a> (application/octet-stream)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2852765/4456458.jsp">APP_Server_Abdera_index.jsp</a> (application/octet-stream)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2852765/4456459.jsp">APP_Server_Wink_index.jsp</a> (application/octet-stream)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2852765/4456460.java">EntriesCollection.java</a> (application/octet-stream)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2852765/4456461">APP_Server_Wink_application</a> (application/octet-stream)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2852765/4456462.xml">APP_Server_Wink_web.xml</a> (text/xml)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2852765/4751361.java">APP_Client_Wink.java</a> (application/octet-stream)
+                                <br/>
+                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
+                                <a href="attachments/2852765/4751362.java">APP_Client_Abdera.java</a> (application/octet-stream)
+                                <br/>
+                                                    </div>
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/Appendix B - Google App Engine.html b/src/site/resources/1.0/html/Appendix B - Google App Engine.html
new file mode 100644
index 0000000..8b1731c
--- /dev/null
+++ b/src/site/resources/1.0/html/Appendix B - Google App Engine.html
@@ -0,0 +1,83 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : Appendix B - Google App Engine</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : Appendix B - Google App Engine
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Oct 14, 2009 by <font color="#0050B2">michael</font>.
+				    </div>
+
+				    <h2><a name="AppendixB-GoogleAppEngine-GoogleAppEngine"></a>Google App Engine</h2>
+
+<p>Apache Wink can be run using <a href="https://appengine.google.com/">Google App Engine</a> as the core functionality is fully compatible. However, due to some of the App Engine limitations, a number of the additional functions may not work correctly.</p>
+
+<h3><a name="AppendixB-GoogleAppEngine-KnownLimitations"></a>Known Limitations</h3>
+
+<p><b>JAXB</b> &#45; Google App Engine doesn't support JAXB. Therefore, the built-in JAXB, Atom and JSON providers will not work.</p>
+
+<h3><a name="AppendixB-GoogleAppEngine-Logging"></a>Logging</h3>
+
+<p>Google uses java.util.logging, also referred to as the JDK 1.4 logging. Apache Wink uses <a href="http://slf4j.org">slf4j</a>. In order to enable Wink's logging function, replace the <tt>slf4j-simple-&lt;version&gt;.jar</tt> with the <tt>slf4j-jdk14-&lt;version&gt;.jar</tt>.</p>
+
+<p>In order to view all of Wink's messages place the following property in the logging.properties file:</p>
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre>org.apache.wink.level=ALL</pre>
+</div></div>
+
+
+<p>Everything that the servlet writes to the standard output stream (System.out) and standard error stream (System.err) is captured by the App Engine and then recorded in the application logs. </p>
+
+<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Useful Tip</b><br />In order to gain an in depth understanding refer to <a href="http://code.google.com/appengine/docs/java/runtime.html#Logging">Logging</a>.</td></tr></table></div> 
+
+
+
+<div class='panelMacro'><table class='tipMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/check.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>When running with <a href="http://www.springsource.org/">Spring</a>, make sure that you have <tt>jcl-over-slf4j-&lt;version&gt;.jar</tt> in the classpath. This jar is needed, since Spring uses commons-logging.</td></tr></table></div>
+
+<h3><a name="AppendixB-GoogleAppEngine-AdditionalIssues"></a>Additional Issues</h3>
+
+<p>The following section contains "<b>additional Issues</b>" that maybe experience while trying to run custom developer code in the Google App Engine. It is advantageous to read the relevant documentation as it provides important information, that will save valuable developer time that is required to ascertain why the application behaves differently in comparison to a regular servlet container.</p>
+
+<h4><a name="AppendixB-GoogleAppEngine-ContextPath"></a>Context Path</h4>
+
+<p>Usually the URI in a servlet container looks like this:
+<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre>requestURI = contextPath + servletPath + pathInfo</pre>
+</div></div>while in most servlet containers context path is a war name (or it can be configured), in App Engine it's just empty.<br/>
+So if your servlet is mapped to "rest", access <div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+<pre>http://host:port/rest</pre>
+</div></div>.</p>
+
+<h3><a name="AppendixB-GoogleAppEngine-References"></a>References</h3>
+
+<ul>
+	<li><a href="http://code.google.com/appengine/docs/java/overview.html">App Engine Java Overview</a></li>
+	<li><a href="http://groups.google.com/group/google-appengine-java/web/will-it-play-in-app-engine">Will it play in App Engine</a></li>
+</ul>
+
+
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:58</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/JAX-RS Application Configuration.html b/src/site/resources/1.0/html/JAX-RS Application Configuration.html
new file mode 100644
index 0000000..5272350
--- /dev/null
+++ b/src/site/resources/1.0/html/JAX-RS Application Configuration.html
@@ -0,0 +1,49 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : JAX-RS Application Configuration</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : JAX-RS Application Configuration
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Sep 10, 2009 by <font color="#0050B2">michael</font>.
+				    </div>
+
+				    <h2><a name="JAX-RSApplicationConfiguration-Applications"></a>Applications</h2>
+
+<p>A JAX-RS application consists of one or more resources and zero or more providers. A JAX-RS application is packaged as a Web application in a .war file. The Application subclass, resource classes, and providers are packaged in WEB-INF/classes file and the required libraries are packaged in WEB-INF/lib. Included libraries can also contain resource classes and providers as desired.<br/>
+When using a Servlet 3 container, the Application subclass is optional. By default, all root resource classes and providers packaged in the web application must be included in the published JAX-RS application.</p>
+
+<h3><a name="JAX-RSApplicationConfiguration-IncludingSubclasses"></a>Including Subclasses</h3>
+
+<p>An Application subclass can be included in a .war file to override the default behavior. If both getClasses and getSingletons return an empty list then the default "willset" of classes must be used. The implementations should support the Servlet 3 framework pluggability mechanism to enable portability between containers and to avail themselves of container-supplied class scanning facilities.</p>
+
+
+<h3><a name="JAX-RSApplicationConfiguration-ServletContainers"></a>Servlet Containers</h3>
+
+<p>When using a non-JAX-RS aware servlet container, the servlet-class or filter-class element of the web.xml descriptor should name the JAX-RS implementation-supplied Servlet or Filter class respectively. The application-supplied subclass of the application is identified, using an init-param with a param-name of the "javax.ws.rs.application".</p>
+
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/JAX-RS Caching.html b/src/site/resources/1.0/html/JAX-RS Caching.html
new file mode 100644
index 0000000..0639eed
--- /dev/null
+++ b/src/site/resources/1.0/html/JAX-RS Caching.html
@@ -0,0 +1,47 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : JAX-RS Caching</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : JAX-RS Caching
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Oct 11, 2009 by <font color="#0050B2">michael</font>.
+				    </div>
+
+				    <h1><a name="JAX-RSCaching-JAXRSCaching"></a>JAX-RS Caching</h1>
+
+<p>TBD</p>
+
+<h2><a name="JAX-RSCaching-Expires"></a>Expires</h2>
+
+<p>TBD</p>
+
+<h2><a name="JAX-RSCaching-CacheControl"></a>Cache Control</h2>
+
+<p>TBD</p>
+
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/JAX-RS Content Negotiation.html b/src/site/resources/1.0/html/JAX-RS Content Negotiation.html
new file mode 100644
index 0000000..1b5593b
--- /dev/null
+++ b/src/site/resources/1.0/html/JAX-RS Content Negotiation.html
@@ -0,0 +1,206 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : JAX-RS Content Negotiation</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : JAX-RS Content Negotiation
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Sep 22, 2009 by <font color="#0050B2">michael</font>.
+				    </div>
+
+				    <h1><a name="JAX-RSContentNegotiation-WhatisContentNegotiation%3F"></a>What is Content Negotiation?</h1>
+
+<p>One of the more popular features of REST applications is the ability to return different representations of resources.  For instance, data can be in <a href="http://json.org">JSON</a> format or in <a href="http://www.w3.org/XML/">XML</a>.  Or it can even be available in either format depending on the request.  Content negotiation is the way for clients and servers to agree on what content format is sent.</p>
+
+<p>Data is returned in multiple formats because the needs of each client's request can be different.  A browser might prefer JSON format.  Another command line based client might prefer XML format.  A third client might request the same resource as a PNG image.</p>
+
+<p>It is up to the service to determine which formats are supported.</p>
+
+<p>There are many practical ways of performing content negotiation.</p>
+
+<p><a name="JAX-RSContentNegotiation-URL"></a></p>
+
+<h3><a name="JAX-RSContentNegotiation-ContentNegotiationBasedonURL"></a>Content Negotiation Based on URL</h3>
+
+<p>Many popular public REST APIs perform content negotiation based on the URL.  For instance, a resource in XML format might be at <a href="http://example.com/resource.xml">http://example.com/resource.xml</a>.  The same resource could be offered in JSON format but located at <a href="http://example.com/resource.json">http://example.com/resource.json</a>.</p>
+
+<div class="code panel" style="border-style: solid;border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;"><b>ContentNegotiationViaURL.java</b></div><div class="codeContent panelContent">
+<pre class="code-java">@Path(<span class="code-quote">"/resources"</span>)
+<span class="code-keyword">public</span> class Resource {
+
+    @Path(<span class="code-quote">"{resourceID}.xml"</span>)
+    @GET
+    <span class="code-keyword">public</span> Response getResourceInXML(@PathParam(<span class="code-quote">"resourceID"</span>) <span class="code-object">String</span> resourceID) {
+        <span class="code-keyword">return</span> Response.ok(/* entity in XML format */).type(MediaType.APPLICATION_XML).build();
+    }
+
+    @Path(<span class="code-quote">"{resourceID}.json"</span>)
+    @GET
+    <span class="code-keyword">public</span> Response getResourceInJSON(@PathParam(<span class="code-quote">"resourceID"</span>) <span class="code-object">String</span> resourceID) {
+        <span class="code-keyword">return</span> Response.ok(/* entity in JSON format */).type(MediaType.APPLICATION_JSON).build();
+    }
+}
+</pre>
+</div></div>
+<p>In the above code, a request to <b>"/resources/resourceID.myformat"</b> would result in a 404 status code.</p>
+
+<p>Another way of implementing the above is to use a single resource method like below:</p>
+
+<div class="code panel" style="border-style: solid;border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;"><b>ContentNegotiationViaSingleMethod.java</b></div><div class="codeContent panelContent">
+<pre class="code-java">@Path(<span class="code-quote">"/resources"</span>)
+<span class="code-keyword">public</span> class Resource {
+
+    @Path(<span class="code-quote">"{resourceID}.{type}"</span>)
+    @GET
+    <span class="code-keyword">public</span> Response getResource(@PathParam(<span class="code-quote">"resourceID"</span>) <span class="code-object">String</span> resourceID, @PathParam(<span class="code-quote">"type"</span>) <span class="code-object">String</span> type) {
+        <span class="code-keyword">if</span> (<span class="code-quote">"xml"</span>.equals(type)) {
+            <span class="code-keyword">return</span> Response.ok(/* entity in XML format */).type(MediaType.APPLICATION_XML).build();
+        } <span class="code-keyword">else</span> <span class="code-keyword">if</span> (<span class="code-quote">"json"</span>.equals(type)) {
+            <span class="code-keyword">return</span> Response.ok("/* entity in JSON format */).type(MediaType.APPLICATION_JSON).build();
+        }
+
+        <span class="code-keyword">return</span> Response.status(404).build();
+    }
+
+}
+</pre>
+</div></div>
+<p>The previous code excerpt essentially behaves the same as the ContentNegotiationViaURL.java example.</p>
+
+<p><a name="JAX-RSContentNegotiation-Parameter"></a></p>
+
+<h3><a name="JAX-RSContentNegotiation-ContentNegotiationBasedonRequestParameter"></a>Content Negotiation Based on Request Parameter</h3>
+
+<p>Another popular method is for the client to specify the format in a parameter.  For instance, by default, a resource could be offered in XML at <a href="http://example.com/resource">http://example.com/resource</a>.  The JSON version could be retrieved by using a query parameter like <a href="http://example.com/resource?format=json">http://example.com/resource?format=json</a>.</p>
+
+<div class="code panel" style="border-style: solid;border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;"><b>ContentNegotiationViaParameter.java</b></div><div class="codeContent panelContent">
+<pre class="code-java">@Path(<span class="code-quote">"/resources"</span>)
+<span class="code-keyword">public</span> class Resource {
+
+    @Path(<span class="code-quote">"{resourceID}"</span>)
+    @GET
+    <span class="code-keyword">public</span> Response getResource(@PathParam(<span class="code-quote">"resourceID"</span>) <span class="code-object">String</span> resourceID,
+                                 @QueryParam(<span class="code-quote">"format"</span>) <span class="code-object">String</span> format) {
+        <span class="code-keyword">if</span> (format == <span class="code-keyword">null</span> || <span class="code-quote">"xml"</span>.equals(format)) {
+            <span class="code-keyword">return</span> Response.ok(/* entity in XML format */).type(MediaType.APPLICATION_XML).build();
+        } <span class="code-keyword">else</span> <span class="code-keyword">if</span> (<span class="code-quote">"json"</span>.equals(format)) {
+            <span class="code-keyword">return</span> Response.ok(/* entity in JSON format */).type(MediaType.APPLICATION_JSON).build();
+        }
+
+        <span class="code-keyword">return</span> Response.notAcceptable(Variant.mediaTypes(MediaType.APPLICATION_XML_TYPE,
+                                                         MediaType.APPLICATION_JSON_TYPE).add()
+            .build()).build();
+    }
+}
+</pre>
+</div></div>
+<p><a name="JAX-RSContentNegotiation-AcceptHeader"></a></p>
+
+<h3><a name="JAX-RSContentNegotiation-ContentNegotiationBasedonAcceptHeader"></a>Content Negotiation Based on Accept Header</h3>
+
+<p>Perhaps the most powerful form of content negotiation, the HTTP <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html">Accept header</a> is another way of specifying the preferred representation format.</p>
+
+<p>The following excerpt shows sample client code using the Wink RestClient:</p>
+
+<div class="code panel" style="border-style: solid;border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;"><b>RestClientWithAcceptHeader.java</b></div><div class="codeContent panelContent">
+<pre class="code-java">    RestClient client = <span class="code-keyword">new</span> RestClient();
+    ClientResponse response = client.resource(<span class="code-quote">"http:<span class="code-comment">//example.com/resources/resource1"</span>).header(<span class="code-quote">"Accept"</span>, <span class="code-quote">"application/json;q=1.0, application/xml;q=0.8"</span>).get();
+</span>    <span class="code-comment">// find what format was sent back
+</span>    <span class="code-object">String</span> contentType = response.getHeaders().getFirst(<span class="code-quote">"Content-Type"</span>);
+
+    <span class="code-keyword">if</span> (contentType.contains(<span class="code-quote">"application/json"</span>)) {
+        JSONObject entity = response.getEntity(JSONObject.class); /* or use a <span class="code-object">String</span>, InputStream, or other provider that supports the entity media type */
+    } <span class="code-keyword">else</span> <span class="code-keyword">if</span> (contentType.contains(<span class="code-quote">"application/xml"</span>) {
+        <span class="code-object">String</span> entity = response.getEntity(<span class="code-object">String</span>.class); /* or use a JAXB class, InputStream, etc. */
+    }
+</pre>
+</div></div>
+<p>The following example implements sample client code using the <a href="http://hc.apache.org/httpclient-3.x/">Apache HttpClient</a>.</p>
+
+<div class="code panel" style="border-style: solid;border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;"><b>HttpClientWithAcceptHeader.java</b></div><div class="codeContent panelContent">
+<pre class="code-java">    HttpClient client = <span class="code-keyword">new</span> HttpClient();
+    GetMethod getMethod =
+        <span class="code-keyword">new</span> GetMethod(<span class="code-quote">"http:<span class="code-comment">//example.com/resources/resource1"</span>);
+</span>    <span class="code-comment">// prefer JSON over XML but both are acceptable to the client
+</span>    getMethod.setRequestHeader(<span class="code-quote">"Accept"</span>, <span class="code-quote">"application/json;q=1.0, application/xml;q=0.8"</span>);
+    <span class="code-keyword">try</span> {
+        client.executeMethod(getMethod);
+
+        <span class="code-comment">// find what format was sent back
+</span>        getMethod.getResponseHeader(<span class="code-quote">"Content-Type"</span>).getValue();
+
+        <span class="code-comment">// use getMethod.getResponseBodyAsString() or getMethod.getResponseBodyAsStream()
+</span>        <span class="code-comment">// to read the body
+</span>    } <span class="code-keyword">finally</span> {
+        getMethod.releaseConnection();
+    }
+</pre>
+</div></div>
+<p>Using the @Context HttpHeaders injected variable, the client preferred response representation is found.</p>
+
+<div class="code panel" style="border-style: solid;border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;"><b>ContentNegotiationViaAcceptHeaderAndHTTPHeaders.java</b></div><div class="codeContent panelContent">
+<pre class="code-java">@Path(<span class="code-quote">"/resources"</span>)
+<span class="code-keyword">public</span> class Resource {
+
+    @Context
+    <span class="code-keyword">private</span> HttpHeaders headers;
+
+    @Path(<span class="code-quote">"{resourceID}"</span>)
+    @GET
+    <span class="code-keyword">public</span> Response getResource(@PathParam(<span class="code-quote">"resourceID"</span>) <span class="code-object">String</span> resourceID) {
+        List&lt;MediaType&gt; acceptHeaders = headers.getAcceptableMediaTypes();
+        <span class="code-keyword">if</span> (acceptHeaders == <span class="code-keyword">null</span> || acceptHeaders.size() == 0) {
+            <span class="code-keyword">return</span> Response.ok(/* entity in XML format */).type(MediaType.APPLICATION_XML).build();
+        }
+
+        <span class="code-keyword">for</span> (MediaType mt : acceptHeaders) {
+            <span class="code-object">String</span> qValue = mt.getParameters().get(<span class="code-quote">"q"</span>);
+            <span class="code-keyword">if</span>(qValue != <span class="code-keyword">null</span> &amp;&amp; <span class="code-object">Double</span>.valueOf(qValue).doubleValue() == 0.0) {
+                <span class="code-keyword">break</span>;
+            }
+            <span class="code-keyword">if</span>(MediaType.APPLICATION_XML_TYPE.isCompatible(mt)) {
+                <span class="code-keyword">return</span> Response.ok(/* entity in XML format */).type(MediaType.APPLICATION_XML).build();
+            } <span class="code-keyword">else</span> <span class="code-keyword">if</span> (MediaType.APPLICATION_JSON_TYPE.isCompatible(mt)) {
+                <span class="code-keyword">return</span> Response.ok(/* entity in JSON format */).type(MediaType.APPLICATION_JSON).build();
+            }
+        }
+        <span class="code-keyword">return</span> Response.notAcceptable(Variant.mediaTypes(MediaType.APPLICATION_JSON_TYPE,
+                                                         MediaType.APPLICATION_XML_TYPE).add()
+            .build()).build();
+    }
+
+}
+</pre>
+</div></div>
+<p>If the client request does not have an Accept HTTP header, then by default the XML format is returned.  The @Context HttpHeaders.getAcceptableMediaTypes() method returns an ordered list, sorted by the client preference of the representations.</p>
+
+<p>Looping through the acceptable media types, if the preferred media type is compatible with one of the service's available return types, then the preferred media type is used.</p>
+
+<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Note</b><br />Note that the quality factor is checked.  In fairly rare requests, clients can let the service know that a media type should not be sent back (if the quality factor is 0.0).</td></tr></table></div> 
+
+
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/JAX-RS Context Information.html b/src/site/resources/1.0/html/JAX-RS Context Information.html
new file mode 100644
index 0000000..2c2da4a
--- /dev/null
+++ b/src/site/resources/1.0/html/JAX-RS Context Information.html
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : JAX-RS Context Information</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : JAX-RS Context Information
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Aug 24, 2009 by <font color="#0050B2">bluk</font>.
+				    </div>
+
+				    <h1><a name="JAX-RSContextInformation-ContextInformation"></a>Context Information</h1>
+
+<p>In addition to request parameters and entities, there is more request information that can be accessed via request @Context injected variables.</p>
+
+<p>When a resource method is invoked, the runtime injects the @Context variables.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+@Path(<span class="code-quote">"/resource"</span>)
+<span class="code-keyword">public</span> class Resource {
+    @Context
+    <span class="code-keyword">private</span> HttpHeaders headers;
+
+    @GET
+    <span class="code-keyword">public</span> void get(@Context UriInfo uriInfo) {
+       /* use headers or uriInfo variable here */
+    }
+}
+</pre>
+</div></div>
+
+<p><a name="JAX-RSContextInformation-HttpHeaders"></a></p>
+<h3><a name="JAX-RSContextInformation-javax.ws.rs.core.HttpHeaders"></a>javax.ws.rs.core.HttpHeaders</h3>
+
+<p>HttpHeaders provides methods that allow users to access request headers.  A few convenience methods such as #getAcceptableLanguages() and #getAcceptableMediaTypes() provide client preference sorted acceptable responses.</p>
+
+<p><a name="JAX-RSContextInformation-UriInfo"></a></p>
+<h3><a name="JAX-RSContextInformation-javax.ws.rs.core.UriInfo"></a>javax.ws.rs.core.UriInfo</h3>
+
+<p>UriInfo provides methods so developers can find or build URI information of the current request.</p>
+
+<p><a name="JAX-RSContextInformation-SecurityContext"></a></p>
+<h3><a name="JAX-RSContextInformation-javax.ws.rs.core.SecurityContext"></a>javax.ws.rs.core.SecurityContext</h3>
+
+<p>SecurityContext provides access to the security information.</p>
+
+<p><a name="JAX-RSContextInformation-Request"></a></p>
+<h3><a name="JAX-RSContextInformation-javax.ws.rs.core.Request"></a>javax.ws.rs.core.Request</h3>
+
+<p>Request provides methods for evaluating preconditions and for selecting the best response variant based on the request headers.</p>
+
+<p><a name="JAX-RSContextInformation-Providers"></a></p>
+<h3><a name="JAX-RSContextInformation-javax.ws.rs.core.Providers"></a>javax.ws.rs.core.Providers</h3>
+
+<p>Providers allows access to the user and runtime provided MessageBodyReaders, MessageBodyWriters, ContextResolvers, and ExceptionMappers.  It is useful for other providers but can sometimes be useful for resource methods and classes.</p>
+
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/JAX-RS Getting Started.html b/src/site/resources/1.0/html/JAX-RS Getting Started.html
new file mode 100644
index 0000000..9277f6f
--- /dev/null
+++ b/src/site/resources/1.0/html/JAX-RS Getting Started.html
@@ -0,0 +1,180 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : JAX-RS Getting Started</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : JAX-RS Getting Started
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Oct 13, 2009 by <font color="#0050B2">bluk</font>.
+				    </div>
+
+				    <h1><a name="JAX-RSGettingStarted-CreatingaSimple%22HelloWorld%22Application"></a>Creating a Simple "Hello World" Application</h1>
+
+<p>The following example project will produce a simple JAX-RS application that can respond to requests at <b>"/helloworld"</b> with a <b>"Hello world&#33;"</b> plain text resource.  While not entirely RESTful, this example project is to show how to create a simple application and how to package it for consumption in a web container.</p>
+
+
+<p>The application is packaged in a WAR file (which is similar to a JAR/ZIP file, except with special files in certain locations and a defined layout).  It can be deployed in any web container, for example: Jetty, Tomcat and Geronimo. Perform the following steps in order to create the "<b>helloworld</b>" example application.</p>
+
+
+<h2><a name="JAX-RSGettingStarted-Step1CreatingtheRootResource"></a>Step 1 - Creating the Root Resource</h2>
+
+
+<h3><a name="JAX-RSGettingStarted-"></a></h3>
+
+<p>First, create a resource that will be used for HTTP GET requests to "<b>/helloworld</b>".</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+<span class="code-keyword">package</span> org.apache.wink.example.helloworld;
+
+<span class="code-keyword">import</span> javax.ws.rs.GET;
+<span class="code-keyword">import</span> javax.ws.rs.Path;
+
+@Path(<span class="code-quote">"/helloworld"</span>)
+<span class="code-keyword">public</span> class HelloWorldResource {
+
+    @GET
+    <span class="code-keyword">public</span> <span class="code-object">String</span> getMessage() {
+        <span class="code-keyword">return</span> <span class="code-quote">"Hello World!"</span>;
+    }
+}
+</pre>
+</div></div>
+
+<p>As shown above, the Java class is just a plain old Java object that has JAX-RS annotations.</p>
+
+<h2><a name="JAX-RSGettingStarted-Step2Creatingajavax.ws.rs.core.Applicationsubclass"></a>Step 2 - Creating a javax.ws.rs.core.Application sub-class</h2>
+
+
+
+<p>For non-JAX-RS aware web container environments (most environments are currently non JAX-RS aware), a j<b>avax.ws.rs.core.Application</b> sub-class needs to be created which returns sets of JAX-RS root resources and providers.  In the following example, there is only one root resource that will need to be returned.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+<span class="code-keyword">package</span> org.apache.wink.example.helloworld;
+
+<span class="code-keyword">import</span> java.util.HashSet;
+<span class="code-keyword">import</span> java.util.Set;
+
+<span class="code-keyword">import</span> javax.ws.rs.core.Application;
+
+<span class="code-keyword">public</span> class HelloWorldApplication <span class="code-keyword">extends</span> Application {
+
+    @Override
+    <span class="code-keyword">public</span> Set&lt;<span class="code-object">Class</span>&lt;?&gt;&gt; getClasses() {
+        Set&lt;<span class="code-object">Class</span>&lt;?&gt;&gt; classes = <span class="code-keyword">new</span> HashSet&lt;<span class="code-object">Class</span>&lt;?&gt;&gt;();
+        classes.add(HelloWorldResource.class);
+        <span class="code-keyword">return</span> classes;
+    }
+
+}
+</pre>
+</div></div>
+
+<h3><a name="JAX-RSGettingStarted-Compilingtheclasses"></a>Compiling the classes</h3>
+
+
+<p>Using the Apache Wink distribution's JARs in the classpath, compile the two classes from the previous example.</p>
+
+<h2><a name="JAX-RSGettingStarted-Step3Creatingaweb.xmlfile"></a>Step 3 - Creating a web.xml file</h2>
+
+
+
+
+<p>Now create a web.xml deployment descriptor.  The deployment descriptor details information about the web application in the WAR.  In this case, it says that the Apache Wink JAX-RS servlet should be initialized with a HelloWorldApplication instance.</p>
+
+<p>In addition, any requests that begin with /rest/ will be handled by the Apache Wink JAX-RS servlet.  So, the request URL would be "/rest/helloworld" to reach the HelloWorld resource.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+&lt;?xml version=<span class="code-quote">"1.0"</span> encoding=<span class="code-quote">"UTF-8"</span>?&gt;
+&lt;!DOCTYPE web-app PUBLIC
+ <span class="code-quote">"-<span class="code-comment">//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"</span>
+</span> <span class="code-quote">"http:<span class="code-comment">//java.sun.com/dtd/web-app_2_3.dtd"</span> &gt;
+</span>
+&lt;web-app&gt;
+    &lt;display-name&gt;Hello world Web Application&lt;/display-name&gt;
+    &lt;servlet&gt;
+        &lt;servlet-name&gt;HelloWorldApp&lt;/servlet-name&gt;
+        &lt;servlet-class&gt;org.apache.wink.server.internal.servlet.RestServlet&lt;/servlet-class&gt;
+        &lt;init-param&gt;
+            &lt;param-name&gt;javax.ws.rs.Application&lt;/param-name&gt;
+            &lt;param-value&gt;org.apache.wink.example.helloworld.HelloWorldApplication&lt;/param-value&gt;
+        &lt;/init-param&gt;
+        &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;
+    &lt;/servlet&gt;
+    &lt;servlet-mapping&gt;
+        &lt;servlet-name&gt;HelloWorldApp&lt;/servlet-name&gt;
+        &lt;url-pattern&gt;/<span class="code-keyword">rest</span>/*&lt;/url-pattern&gt;
+    &lt;/servlet-mapping&gt;
+&lt;/web-app&gt;
+</pre>
+</div></div>
+
+<h2><a name="JAX-RSGettingStarted-Step4PackagingthewebapplicationintoaWARfile"></a>Step 4 - Packaging the web application into a WAR file</h2>
+
+
+
+
+<p>Layout the application as follows and create a WAR file from the base directory (the one before WEB-INF). Create a WAR by running "jar cvf helloworld-jaxrs.war *" from the base directory.</p>
+
+<p>Not every JAR in the lib directory is necessary for all environments. Read the documentation for more information about the requirements.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">
+WEB-INF/classes/org/apache/wink/example/helloworld/HelloWorldApplication.class
+WEB-INF/classes/org/apache/wink/example/helloworld/HelloWorldResource.class
+WEB-INF/lib/activation-1.1.jar
+WEB-INF/lib/commons-lang-2.3.jar
+WEB-INF/lib/jaxb-api-2.1.jar
+WEB-INF/lib/jaxb-impl-2.1.4.jar
+WEB-INF/lib/json-20080701.jar
+WEB-INF/lib/jsr311-api-1.0.jar
+WEB-INF/lib/slf4j-api-1.5.8.jar
+WEB-INF/lib/slf4j-simple-1.5.8.jar
+WEB-INF/lib/stax-api-1.0-2.jar
+WEB-INF/lib/wink-common-&lt;version #&gt;.jar
+WEB-INF/lib/wink-server-&lt;version #&gt;.jar
+WEB-INF/web.xml
+</pre>
+</div></div>
+
+<h2><a name="JAX-RSGettingStarted-Step5InstallingtheWARfileintoyourenvironment"></a>Step 5 - Installing the WAR file into your environment</h2>
+
+
+
+
+<p>Most web container environments will take a WAR file and deploy it without any further configuration required.  However, note the "<b>Context Root</b>" of the web application, or change it as required.</p>
+
+<p>The context paths combine as follows:<br/>
+http://&lt;hostname&gt;/&lt;web application context root&gt;/&lt;servlet url mapping path&gt;/helloworld</p>
+
+<p>If the environment deployed the WAR file to a context root of "/helloworldapp", then the following URL would be required to reach the HelloWorldResource.</p>
+
+<p>http://&lt;hostname&gt;/helloworldapp/rest/helloworld</p>
+
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/JAX-RS HTTP Headers.html b/src/site/resources/1.0/html/JAX-RS HTTP Headers.html
new file mode 100644
index 0000000..353f348
--- /dev/null
+++ b/src/site/resources/1.0/html/JAX-RS HTTP Headers.html
@@ -0,0 +1,135 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : JAX-RS HTTP Headers</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : JAX-RS HTTP Headers
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Sep 22, 2009 by <font color="#0050B2">michael</font>.
+				    </div>
+
+				    <h1><a name="JAX-RSHTTPHeaders-HTTPHeaders"></a>HTTP Headers</h1>
+
+<p><a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html">HTTP headers</a> generally store metadata and control information.  There are some common headers shared in requests and responses but there are a few specific headers to either a request or a response.  Developers should read the HTTP specification for a complete understanding of HTTP headers.  Some of the more common HTTP headers are mentioned below in cases where JAX-RS provides convenient methods for the header.</p>
+
+<p>Generally, in order to get the request header name and values, developers can use either an injected @HeaderParam annotated with a parameter/field/property or an injected @Context HttpHeaders parameter/field/property.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">@Path(<span class="code-quote">"/example"</span>)
+<span class="code-keyword">public</span> ExampleResource {
+    @Context HttpHeaders requestHeaders;
+
+    @GET
+    <span class="code-keyword">public</span> void getSomething(@HeaderParam(<span class="code-quote">"User-Agent"</span>) <span class="code-object">String</span> theUserAgent) {
+        /* use theUserAgent variable or requestHeader's methods to get more info */
+    }
+}
+</pre>
+</div></div>
+<p>In order to set response headers, developers can set them on a javax.ws.rs.core.Response return object.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">@Path(<span class="code-quote">"/example"</span>)
+<span class="code-keyword">public</span> ExampleResource {
+    @GET
+    <span class="code-keyword">public</span> Response getSomething() {
+        <span class="code-keyword">return</span> Response.ok(/* some entity */).header(<span class="code-quote">"CustomHeader"</span>, <span class="code-quote">"CustomValue"</span>).build();
+    }
+}
+</pre>
+</div></div>
+<p>A response headers can be set when a MessageBodyWriter#writeTo() method is called.</p>
+
+<p><a name="JAX-RSHTTPHeaders-CommonHeaders"></a></p>
+
+<h3><a name="JAX-RSHTTPHeaders-CommonHeaders"></a>Common Headers</h3>
+
+<p>The common header specifies the size and type of a header. Every header must begin with the common header. The common header must not appear by itself.</p>
+
+<h5><a name="JAX-RSHTTPHeaders-ContentType"></a>Content-Type</h5>
+
+<p>The Content-Type signals the media type of the request/response entity. The Content-Type header on requests is read via HttpHeaders#getMediaType() method. The Content-Type is set for responses when doing a javax.ws.rs.core.Response.ResponseBuilder#type() method or a javax.ws.rs.core.Response.ResponseBuilder#variant() method.</p>
+
+<h5><a name="JAX-RSHTTPHeaders-ContentLanguage"></a>Content-Language</h5>
+
+<p>The Content-Language denotes what language the entity is in. In order to receive the request entity language, use the HttpHeaders#getLanguage() method. In order to set the response entity language, use the javax.ws.rs.core.Response.ResponseBuilder#language() method.</p>
+
+<h5><a name="JAX-RSHTTPHeaders-ContentLength"></a>Content-Length</h5>
+
+<p>The Content-Length is useful for determining the entity's length.  If possible, the MessageBodyWriter entity providers will automatically set the Content-Length if possible, and some containers will set the response Content-Length if the entity is small.</p>
+
+<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Reference</b><br />Refer to the HTTP spec for more details on when this header is set and valid.</td></tr></table></div>
+
+<p><a name="JAX-RSHTTPHeaders-RequestHeaders"></a></p>
+
+<h3><a name="JAX-RSHTTPHeaders-CommonRequestHTTPHeaders"></a>Common Request HTTP Headers</h3>
+
+<p>An HTTP Request Header is a line of text that a client software (i.e. Web Browser) sends to a server together with other request data.</p>
+
+<h5><a name="JAX-RSHTTPHeaders-Accept"></a>Accept</h5>
+
+<p>The Accept header is used to determine the possible response representations that the client prefers such as XML over JSON but not plain text.  When a resource method is effectively annotated with a @Produces, any incoming request must have a compatible Accept header value for the resource method to be selected.  Clients can set quality parameters (priority ordering) for the best possible response and services generally try to honor the request.  To get the best representation of a response, use either the HttpHeaders#getAcceptableMediaTypes() or Request#selectVariant() methods.</p>
+
+<h5><a name="JAX-RSHTTPHeaders-AcceptLanguage"></a>Accept-Language</h5>
+
+<p>Like the Accept header, Accept-Language lists the preferred languages. A&nbsp; HttpHeaders#getAcceptableLanguages() method will list the acceptable languages in a preferred order.</p>
+
+<h5><a name="JAX-RSHTTPHeaders-IfMatchandIfNoneMatch"></a>If-Match and If-None-Match</h5>
+
+<p>If a previous response had an ETag header, the client can re-use the ETag value with the If-Match or If-None-Match request header to do conditional requests (if the server application supported the If-Match/If-None-Match headers).  For example, a POST with an If-Match header and an old ETag value should only execute the POST request if the old ETag value is still valid.  javax.ws.rs.core.Request#evaluatePreconditions() may help evaluate the If-Match and If-None-Match headers.</p>
+
+<h5><a name="JAX-RSHTTPHeaders-IfModifiedSinceandIfUnmodifiedSince"></a>If-Modified-Since and If-Unmodified-Since</h5>
+
+<p>Like ETags, If-Modified-Since and If-Unmodified-Since are based on the Last-Modified date.  Using either request header with a date, will set up a conditional request (if the server application supports the headers).  For instance, a GET with an If-Modified-Since header of an old known date would allow the server to send back a response with just a HTTP status code of 304 (Not Modified).  By sending back a HTTP status code of 304, the server is telling the client that the resource has not changed so there is no need to re-download the resource representation.  This could save precious bandwidth for the client.  javax.ws.rs.core.Request#evaluatePreconditions() may help evaluate the If-Modified-Since and If-Unmodified-Since headers.</p>
+
+<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Important Note</b><br />Note that date formats are specified in the HTTP specification.</td></tr></table></div>
+
+<p><a name="JAX-RSHTTPHeaders-ResponseHeaders"></a></p>
+
+<h3><a name="JAX-RSHTTPHeaders-CommonResponseHTTPHeaders"></a>Common Response HTTP Headers</h3>
+
+<p>HTTP Headers form the core of an HTTP request, and are very important in an HTTP response. They define various characteristics of the data that is requested or the data that has been provided. The headers are separated from the request or response body by a blank line</p>
+
+<h5><a name="JAX-RSHTTPHeaders-ETag"></a>ETag</h5>
+
+<p>ETags or entity tags can be set.  Like a hashcode, it is given to the client so a client can use various control request headers such as If-Match and If-None-Match for conditional requests.  javax.ws.rs.core.Response.ResponseBuilder#tag() and javax.ws.rs.core.EntityTag are useful for ETags.</p>
+
+<h5><a name="JAX-RSHTTPHeaders-Expires"></a>Expires</h5>
+
+<p>The Expires response header indicates the amount of time that the response entity should be cached.  It is useful to set the expiration for data that is not going to change for a known time length.  Browsers use this response header to manage their caches among other user agents.The  javax.ws.rs.core.Response.ResponseBuilder#expires() method can be used to set the Expires header.</p>
+
+<h5><a name="JAX-RSHTTPHeaders-LastModified"></a>Last-Modified</h5>
+
+<p>Last-Modified specifies the date when the resource was changed.  A client can use the response value in combination with If-Modified-Since and If-Unmodified-Since request headers to perform conditional requests.The  javax.ws.rs.core.Response.ResponseBuilder#lastModified() method can be used to set the Last-Modified header.</p>
+<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Important Note</b><br />Note that date formats are specified in the HTTP specification.</td></tr></table></div>
+
+
+<h5><a name="JAX-RSHTTPHeaders-Location"></a>Location</h5>
+
+<p>The Location response header usually indicates where the resource is located (in a redirect) or the URI of the new resource (when resources are created and usually in a HTTP 201 response).  The javax.ws.rs.core.Response.ResponseBuilder#location()method can be used to set the Location header.</p>
+
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/JAX-RS Parameters.html b/src/site/resources/1.0/html/JAX-RS Parameters.html
new file mode 100644
index 0000000..b436a85
--- /dev/null
+++ b/src/site/resources/1.0/html/JAX-RS Parameters.html
@@ -0,0 +1,156 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : JAX-RS Parameters</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : JAX-RS Parameters
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Sep 22, 2009 by <font color="#0050B2">michael</font>.
+				    </div>
+
+				    <h1><a name="JAX-RSParameters-Parameters"></a>Parameters</h1>
+
+<p>Parameters are used to pass and add additional information to a request.  Search queries, offsets/pages in a collection, and other information can be used.  While parameters are sometimes used to add more verbs to HTTP, it is advised not to use parameters as a way to create new HTTP methods or to make existing HTTP methods break the generally understood attributes (i.e. idempotent).</p>
+
+<p>Parameters can be any basic Java primitive type including java.lang.String as well as types with a constructor that takes in a single String or a valueOf(String) static method.In addition, List, SortedSet, and Set can be used where the generic type is one of the previously mentioned types such as a <b>Set&lt;String&gt;</b> when a parameter can have multiple values.</p>
+
+<p>When full control is needed for parsing requests, it is generally recommend that developers use a String as the parameter type so that some basic inspection can be performed and developers can customize error path responses.</p>
+
+<p><a name="JAX-RSParameters-QueryParameter"></a></p>
+
+<h3><a name="JAX-RSParameters-QueryParameters%28@QueryParam%29"></a>Query Parameters (@QueryParam)</h3>
+
+<p>Query parameters are one of the better known parameters.  A query string is appended to the request URL with a leading "?" and then name/value pairs.</p>
+
+<div class='panelMacro'><table class='tipMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/check.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Query Parameter Examples</b><br />Refer to the following links:<br/>
+<a href="http://www.google.com/search?q=apache+wink">http://www.google.com/search?q=apache+wink</a><br/>
+<a href="http://www.example.com/users?offset=100&amp;numPerPage=20">http://www.example.com/users?offset=100&amp;numPerPage=20</a>&nbsp;</td></tr></table></div>
+
+<p>In order to enable JAX-RS to read a query parameters, add a parameter to the resource method and annotate with <b>@QueryParam</b>:</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">@Path(<span class="code-quote">"/example"</span>)
+<span class="code-keyword">public</span> class RootResource {
+    @GET
+    <span class="code-keyword">public</span> Response invokeWithParameters(@QueryParam(<span class="code-quote">"q"</span>) <span class="code-object">String</span> searchTerm) {
+        <span class="code-keyword">if</span>(q == <span class="code-keyword">null</span>) {
+            <span class="code-keyword">return</span> Response.status(Status.BAD_REQUEST).build();
+        }
+        /* <span class="code-keyword">do</span> a search */
+        <span class="code-keyword">return</span> Response.ok(/* some entity here */).build();
+    }
+}
+</pre>
+</div></div>
+<p>If a HTTP GET request to "/example?q=abcd" is made, searchTerm will have "abcd" as the value when invoked.</p>
+
+<p><a name="JAX-RSParameters-PathParameter"></a></p>
+
+<h3><a name="JAX-RSParameters-PathParameters%28@PathParam%29"></a>Path Parameters (@PathParam)</h3>
+
+<p>Path parameters take the incoming URL and match parts of the path as a parameter.  By including <em>{name}</em> in a <b>@Path</b> annotation, the resource can later access the matching part of the URI to a path parameter with the corresponding "<b>name</b>".  Path parameters make parts of the request URL as parameters which can be useful in embedding request parameter information to a simple URL.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">@Path(<span class="code-quote">"/books/{bookid}"</span>)
+<span class="code-keyword">public</span> class BookResource {
+    @GET
+    <span class="code-keyword">public</span> Response invokeWithBookId(@PathParam(<span class="code-quote">"bookid"</span>) <span class="code-object">String</span> bookId) {
+        /* get the info <span class="code-keyword">for</span> bookId */
+        <span class="code-keyword">return</span> Response.ok(/* some entity here */).build();
+    }
+
+    @GET
+    @Path(<span class="code-quote">"{language}"</span>)
+    <span class="code-keyword">public</span> Response invokeWithBookIdAndLanguage(@PathParam(<span class="code-quote">"bookid"</span>) <span class="code-object">String</span> bookId, @PathParam(<span class="code-quote">"language"</span>) <span class="code-object">String</span> language) {
+        /* get the info <span class="code-keyword">for</span> bookId */
+        <span class="code-keyword">return</span> Response.ok(/* some entity here */).build();
+    }
+}
+</pre>
+</div></div>
+<p>In the previous example, HTTP GET to /books/1 or to /books/abcd would result in invokeWithBookId being called.  If a HTTP GET request is issued to /books/1/en or /books/1/fr or /books/abcd/jp, then invokeWithBookIdAndLanguage would be invoked with the appropriate parameters.</p>
+
+<p><a name="JAX-RSParameters-MatrixParameter"></a></p>
+
+<h3><a name="JAX-RSParameters-MatrixParameters%28@MatrixParam%29"></a>Matrix Parameters (@MatrixParam)</h3>
+
+<p>Matrix parameters are not as widely used on the Internet today.  However, you can read a MatrixParam just as easily as any other parameter.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">@Path(<span class="code-quote">"/"</span>)
+<span class="code-keyword">public</span> class RootResource {
+    @GET
+    <span class="code-keyword">public</span> Response invokeWithParameters(@MatrixParam(<span class="code-quote">"name"</span>) <span class="code-object">String</span> name) {
+        <span class="code-keyword">if</span>(name == <span class="code-keyword">null</span>) {
+            <span class="code-keyword">return</span> Response.status(Status.BAD_REQUEST).build();
+        }
+        <span class="code-keyword">return</span> Response.ok(/* some entity here */).build();
+    }
+}
+</pre>
+</div></div>
+<p><a name="JAX-RSParameters-HeaderParameter"></a></p>
+
+<h3><a name="JAX-RSParameters-HeaderParameters%28@HeaderParam%29"></a>Header Parameters (@HeaderParam)</h3>
+
+<p>Header parameters are useful especially when there are additional metadata control parameters that need to be passed in for example, security information, cache information, and so forth.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">@Path(<span class="code-quote">"/"</span>)
+<span class="code-keyword">public</span> class RootResource {
+    @GET
+    <span class="code-keyword">public</span> Response invokeWithParameters(@HeaderParam(<span class="code-quote">"controlInfo"</span>) <span class="code-object">String</span> controlInfo) {
+        <span class="code-keyword">if</span>(controlInfo == <span class="code-keyword">null</span>) {
+            <span class="code-keyword">return</span> Response.status(Status.BAD_REQUEST).build();
+        }
+        <span class="code-keyword">return</span> Response.ok(/* some entity here */).build();
+    }
+}
+</pre>
+</div></div>
+
+<p><a name="JAX-RSParameters-CookieParameter"></a></p>
+
+<h3><a name="JAX-RSParameters-CookieParameters%28@CookieParam%29"></a>CookieParameters (@CookieParam)</h3>
+
+<p>In a REST application, requests are stateless although applications sometimes use Cookies for various reasons, such as adding some stateless resource viewing information without embedding it into the URL such as the maximum number of items to retrieve.  The CookieParam annotation is used to easily retrieve the information.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">@Path(<span class="code-quote">"/"</span>)
+<span class="code-keyword">public</span> class RootResource {
+    @GET
+    <span class="code-keyword">public</span> Response invokeWithParameters(@CookieParam(<span class="code-quote">"max"</span>) <span class="code-object">String</span> maximumItems) {
+        <span class="code-keyword">if</span>(userId == <span class="code-keyword">null</span>) {
+            <span class="code-keyword">return</span> Response.status(Status.BAD_REQUEST).build();
+        }
+        <span class="code-keyword">return</span> Response.ok(/* some entity here */).build();
+    }
+}
+</pre>
+</div></div>
+
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/JAX-RS Request and Response Entities.html b/src/site/resources/1.0/html/JAX-RS Request and Response Entities.html
new file mode 100644
index 0000000..0a7e0f2
--- /dev/null
+++ b/src/site/resources/1.0/html/JAX-RS Request and Response Entities.html
@@ -0,0 +1,199 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : JAX-RS Request and Response Entities</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : JAX-RS Request and Response Entities
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Oct 14, 2009 by <font color="#0050B2">michael</font>.
+				    </div>
+
+				    <h1><a name="JAX-RSRequestandResponseEntities-RequestandResponseEntities"></a>Request and Response Entities</h1>
+
+<p>Request and response entities represent the main part of an HTTP request.  Entities are also refered to as the "<b>message body</b>" or "<b>payload</b>".  Entities are sent via a request, usually an HTTP POST and PUT method are used or they are returned in a response, this is relevant for all HTTP methods.</p>
+
+<p>Unlike other distributed systems technologies, there is generally no wrapper around an entity.  For example, if a request is made for a binary PNG image represented here, <a href="http://example.com/user/abcd/portrait.png">http://example.com/user/abcd/portrait.png</a> , the response entity is only the PNG image binary data.</p>
+
+<p>Resource methods have a single entity parameter that represents the main entity body.  It is the <b>only unannotated parameter allowed</b> in a resource method.</p>
+
+<p>When using JAX-RS, request and response entites are mapped to and from Java types by Entity Providers that implement the JAX-RS interfaces, MessageBodyReader and MessageBodyWriter.  Applications may provide their own MessageBodyReaders and MessageBodyWriters that take precedent over the runtime provided ones.</p>
+
+<p><a name="JAX-RSRequestandResponseEntities-MediaType"></a></p>
+
+<h3><a name="JAX-RSRequestandResponseEntities-MediaTypes%28MIME%29andjavax.ws.rs.core.MediaType"></a>Media Types (MIME) and javax.ws.rs.core.MediaType</h3>
+
+<p>The request and response entity can be any form of data, a way of identifying what the entities bits and bytes represent is needed.  In requests and responses, the <b>Content-Type</b> HTTP header is used to indicate the type of entity currently being sent. The Content-Type value comes from a well known <a href="http://www.iana.org/assignments/media-types/">media type as registered in IANA</a>.</p>
+
+<p>Common content types include "text/plain", "text/xml", "text/html", and "application/json".</p>
+
+<p>Correct Content-Type values are essential for clients and servers.  "<b>Unusual</b>" behavior by clients such as browsers can be attributed to wrong content types.</p>
+
+<p>Media Types are also used in a request <b>Accept</b> header to indicate what type of resource representation the client wants to receive.  Clients could indicate a preference as well, such as JSON before XML.</p>
+
+<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Reference</b><br />Refer to the HTTP spec regarding the Accept header and the Content Negotiation topic.</td></tr></table></div>
+
+
+<p>javax.ws.rs.core.MediaType has functionality and representations related to Media Types.</p>
+
+<p><a name="JAX-RSRequestandResponseEntities-ConsumesAndProduces"></a></p>
+
+<h3><a name="JAX-RSRequestandResponseEntities-@Consumesand@ProducesAnnotations"></a>@Consumes and @Produces Annotations</h3>
+
+
+<p>Annotating a class or a resource method with @Consumes and @Produces will help the JAX-RS runtime identify the appropriate methods to invoke for requests.  For example:</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">@Path(<span class="code-quote">"/example"</span>)
+<span class="code-keyword">public</span> RootResource {
+    @POST
+    @Consumes(<span class="code-quote">"text/xml"</span>)
+    @Produces(<span class="code-quote">"text/xml"</span>)
+    <span class="code-keyword">public</span> Response getOnlyXML(<span class="code-object">String</span> incomingXML) {
+        <span class="code-keyword">return</span> Response.ok(<span class="code-quote">"only xml"</span>).type(<span class="code-quote">"text/xml"</span>).build();
+    }
+
+    @GET
+    @Produces(<span class="code-quote">"text/html"</span>, <span class="code-quote">"text/plain"</span>)
+    <span class="code-keyword">public</span> <span class="code-object">String</span> getText() {
+        <span class="code-keyword">return</span> <span class="code-quote">"text representation"</span>;
+    }
+}
+</pre>
+</div></div>
+<p>In the previous code example, if a HTTP POST to "/example" was issued with a Content-Type header of "text/xml" and an Accept header of "text/xml", then the RootResource#getOnlyXML method would be invoked.  If the same POST request was issued with an Accept header of "text/plain", then a 406 Not Acceptable response would be generated by the JAX-RS runtime and the method would not be invoked.</p>
+
+<p>It is a good practice to return a javax.ws.rs.core.Response with a .type() or .variant() call since it would guarantee a return content type.  Notice that the above getText() code supports multiple data types.  A javax.ws.rs.core.Response object returned must have a single concrete Content-Type value.  In orer to select the best acceptable representation in the resource method, use either the <b>@Context HttpHeaders#getAcceptableMediaTypes()</b> or a <b>@Context Request#selectVariant()</b> method.</p>
+<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Reference</b><br />Refer to the Context topic page for more information.</td></tr></table></div>
+
+<p>While resource methods may consume one media type for example XML and produce another such as JSON, most user requests expect the same media type that was sent in the request to be returned in the response.</p>
+
+<p>If the Content-Type header is empty and there is an entity, then the JAX-RS runtime will make the Content-Type be "<b>application/octet-stream</b>".  If an Accept header is empty, then according to the HTTP specification, the Accept header is equivalent to &#42;/&#42; which is a wildcard that matches anything.</p>
+
+<div class='panelMacro'><table class='tipMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/check.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Important Note</b><br />Note that the resource method ultimately has control over the response content. If a javax.ws.rs.core.Response is returned, then the developer can return whatever Content-Type is desired. The @Consumes and @Produces is primarily useful only when processing request information and determining which resource method is possible to invoke. If a specific Response content type is not specified via a returned javax.ws.rs.core.Response object, the response media type is determined by a combination of the @Produces annotation values and the available MessageBodyWriters for the response entity's Java type. This can lead to undesired results if there is no @Produces annotation or if the @Produces annotation has multiple media types listed.</td></tr></table></div>
+<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Reference</b><br />Refer to the JAX-RS specification for the effective algorithm used.</td></tr></table></div>
+
+<p><a name="JAX-RSRequestandResponseEntities-JAXRSStandardEntityProviders"></a></p>
+
+<h3><a name="JAX-RSRequestandResponseEntities-JAXRSStandardEntityParameterTypes"></a>JAX-RS Standard Entity Parameter Types</h3>
+
+<p>JAX-RS requires certain parameters to be supported for virtually any content type.  The following table lists the supported content types:</p>
+
+<table class='confluenceTable'><tbody>
+<tr>
+<th class='confluenceTh'> Java Type </th>
+<th class='confluenceTh'> Content Type Supported </th>
+<th class='confluenceTh'> Special Notes </th>
+</tr>
+<tr>
+<td class='confluenceTd'> java.lang.String </td>
+<td class='confluenceTd'> &#42;/&#42; </td>
+</tr>
+<tr>
+<td class='confluenceTd'> byte[] </td>
+<td class='confluenceTd'> &#42;/&#42; </td>
+</tr>
+<tr>
+<td class='confluenceTd'> java.io.InputStream </td>
+<td class='confluenceTd'> &#42;/&#42; </td>
+</tr>
+<tr>
+<td class='confluenceTd'> java.io.Reader </td>
+<td class='confluenceTd'> &#42;/&#42; </td>
+</tr>
+<tr>
+<td class='confluenceTd'> java.io.File </td>
+<td class='confluenceTd'> &#42;/&#42; </td>
+</tr>
+<tr>
+<td class='confluenceTd'> javax.activation.DataSource </td>
+<td class='confluenceTd'> &#42;/&#42; </td>
+</tr>
+<tr>
+<td class='confluenceTd'> javax.xml.transform.Source </td>
+<td class='confluenceTd'> text/xml, application/xml, application/*+xml </td>
+</tr>
+<tr>
+<td class='confluenceTd'> javax.xml.bind.JAXBElement<br clear="all" />
+ and JAXB classes </td>
+<td class='confluenceTd'> text/xml, application/xml, application/*+xml </td>
+</tr>
+<tr>
+<td class='confluenceTd'> javax.ws.rs.core<br clear="all" />
+ .MultivaluedMap<br clear="all" />
+ &lt;String, String&gt; </td>
+<td class='confluenceTd'> application/x-www-form-urlencoded </td>
+</tr>
+<tr>
+<td class='confluenceTd'> javax.ws.rs<br clear="all" />
+ .core.StreamingOutput </td>
+<td class='confluenceTd'> &#42;/&#42; </td>
+<td class='confluenceTd'> As a writer only </td>
+</tr>
+</tbody></table>
+
+<p>Developers can use the previous Java types as entity parameters for requests and responses.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">@Path(<span class="code-quote">"/example"</span>)
+<span class="code-keyword">public</span> class RootResource {
+
+    @GET
+    @Produces(<span class="code-quote">"text/xml"</span>)
+    <span class="code-keyword">public</span> Response getInfo() {
+        <span class="code-object">byte</span>[] entity = /* get the entity into a <span class="code-object">byte</span> array */
+        <span class="code-keyword">return</span> Response.ok(entity).type(<span class="code-quote">"text/xml"</span>).build();
+    }
+
+    @POST
+    @Consumes(<span class="code-quote">"application/json"</span>)
+    @Produces(<span class="code-quote">"application/json"</span>)
+    <span class="code-keyword">public</span> StreamingOutput createItem(InputStream requestBodyStream) {
+        /* read the requestBodyStream like a normal input stream */
+        <span class="code-keyword">return</span> <span class="code-keyword">new</span> StreamingOutput() {
+
+            <span class="code-keyword">public</span> void write(OutputStream output) <span class="code-keyword">throws</span> IOException, WebApplicationException {
+                <span class="code-object">byte</span>[] out = /* get some bytes to write */
+                output.write(out);
+            }
+        })
+    }
+}
+</pre>
+</div></div>
+<p><a name="JAX-RSRequestandResponseEntities-TransferEncoding"></a></p>
+
+<h3><a name="JAX-RSRequestandResponseEntities-TransferEncoding"></a>Transfer Encoding</h3>
+
+<p>Transfer or "<b>chunked</b>" encoding is handled by the container for incoming requests.  The container or the application must do any transfer encoding for outgoing responses.</p>
+
+<p><a name="JAX-RSRequestandResponseEntities-ContentEncoding"></a></p>
+
+<h3><a name="JAX-RSRequestandResponseEntities-ContentEncoding"></a>Content Encoding</h3>
+
+<p>Content for example "<b>gzip</b>" and or "<b>deflate</b>" encoding is handled by the application.  However, some containers handle content encoding for developers and will uncompress content automatically or will with various configuration set.  Check the  container documentation.</p>
+
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/JAX-RS Resources, HTTP Methods, and Paths.html b/src/site/resources/1.0/html/JAX-RS Resources, HTTP Methods, and Paths.html
new file mode 100644
index 0000000..1a4b536
--- /dev/null
+++ b/src/site/resources/1.0/html/JAX-RS Resources, HTTP Methods, and Paths.html
@@ -0,0 +1,233 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <title>Apache Wink : JAX-RS Resources, HTTP Methods, and Paths</title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <div class="pageheader">
+					    <span class="pagetitle">
+                            Apache Wink : JAX-RS Resources, HTTP Methods, and Paths
+                                                    </span>
+				    </div>
+				    <div class="pagesubheading">
+					    This page last changed on Sep 07, 2009 by <font color="#0050B2">michael</font>.
+				    </div>
+
+				    <h1><a name="JAX-RSResources%2CHTTPMethods%2CandPaths-Resources"></a>Resources</h1>
+
+<p>Resources are one of the fundamental concepts in REST.  REST emphasizes the manipulation of resources rather than issuing function calls.  Resources have unique identifiers.  In HTTP terms, this means associating every resource with at least one URL.</p>
+
+<p>In order to manipulate a resource, requests are made with a specific HTTP method.  For instance, in order to retrieve a representation of a resource, an HTTP GET request to the resource's URL is issued. In order to create a new item in a collection, an HTTP POST can be used with the collection URL.</p>
+
+<p>Application developers define resources and the HTTP methods in order to quickly manipulate them by using regular plain old Java objects and JAX-RS annotations.</p>
+
+<p><a name="JAX-RSResources%2CHTTPMethods%2CandPaths-RootResource"></a></p>
+
+<h3><a name="JAX-RSResources%2CHTTPMethods%2CandPaths-DefiningaRootResource%28@PathonJavaclass%29"></a>Defining a Root Resource (@Path on Java class)</h3>
+
+<p>Developers can use POJOs to define a resource.  Root resources have a <b>@Path</b> annotation at the class declaration level.  JAX-RS matches an incoming request's URL with the <b>@Path</b> annotation on all of an application's root resources in order to determine which initial Java class will handle the request.</p>
+
+<p>Root resources Java class instances are created per request by default.</p>
+
+<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Reference</b><br />Refer to the JAX-RS Application configuration topic for more information.</td></tr></table></div>
+<p>Resource classes have methods that are invoked when specific HTTP method requests are made, referred to as resource methods. In order to create Java methods that will be invoked with specific HTTP methods, a regular Java method must be implemented and annotated with one of the JAX-RS @HttpMethod annotated annotations (namely, @GET, @POST, @PUT, and @DELETE).</p>
+
+<p>For example, if a resource is located at a "/welcome" URL, the following root resource is defined.</p>
+
+<div class="code panel" style="border-style: solid;border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;"><b>WelcomeMessage.java</b></div><div class="codeContent panelContent">
+<pre class="code-java">@Path(<span class="code-quote">"/welcome"</span>)
+<span class="code-keyword">public</span> class WelcomeMessage {
+    <span class="code-keyword">private</span> <span class="code-object">String</span> welcomeMessage = <span class="code-quote">"Hello world!"</span>;
+
+    @GET
+    <span class="code-keyword">public</span> <span class="code-object">String</span> returnWelcomeMessage() {
+        <span class="code-keyword">return</span> welcomeMessage;
+    }
+}
+</pre>
+</div></div>
+<p>Any incoming GET request that has the URL of "/welcome" is handled by WelcomeMessage class's <b>returnWelcomeMessage()</b> method.  A string is returned that represents the response body and is sent as the response payload in a HTTP 200 status response.</p>
+
+<h3><a name="JAX-RSResources%2CHTTPMethods%2CandPaths-Usingajavax.ws.rs.core.Response"></a>Using a javax.ws.rs.core.Response</h3>
+
+<p>In the previous GET resource method example, the response body is returned as a String.  If a more complex response is requiredfor example, additional HTTP response headers or a different status code, a <b>javax.ws.rs.core.Response</b> should be used as the Java method's return type.  By building a Response object, additional information can be returned to the client.</p>
+
+<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
+<pre class="code-java">@Path(<span class="code-quote">"/welcome"</span>)
+<span class="code-keyword">public</span> class WelcomeMessage {
+    <span class="code-keyword">private</span> <span class="code-object">String</span> welcomeMessage = <span class="code-quote">"Hello world!"</span>;
+
+    @GET
+    <span class="code-keyword">public</span> Response returnWelcomeMessage() {
+        <span class="code-object">String</span> responseEntity = welcomeMessage;
+        <span class="code-keyword">return</span> Response.status(299).entity(responseEntity).header(<span class="code-quote">"CustomHeader"</span>, <span class="code-quote">"CustomValue"</span>).build();
+    }
+}
+</pre>
+</div></div>
+<p>The previous example uses 299 as the status code, standard HTTP status codes should be used in order to help clients understand responses.When using Strings as the response entity, different Java types may be used for complex responses.</p>
+
+<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Reference</b><br />Refer to the Request/Response entities page for more details on how request/response entities are handled.</td></tr></table></div>
+
+
+<p><a name="JAX-RSResources%2CHTTPMethods%2CandPaths-HTTPMethods"></a></p>
+
+<h3><a name="JAX-RSResources%2CHTTPMethods%2CandPaths-UsingCommonHTTPMethods%28@GET%2C@POST%2C@PUT%2C@DELETE%29"></a>Using Common HTTP Methods (@GET, @POST, @PUT, @DELETE)</h3>
+
+<p>The four most common HTTP methods are GET, POST, PUT, and DELETE.</p>
+
+<p>As shown in the previous example,  an HTTP GET response to "/welcome" invokes the  returnWelcomeMessage() Java method.In order&nbsp; to add a Java method that would be invoked when a HTTP PUT request is made to "/welcome", the following code should be added:</p>
+
+<div class="code panel" style="border-style: solid;border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;"><b>WelcomeMessageWithPut</b></div><div class="codeContent panelContent">
+<pre class="code-java">@Path(<span class="code-quote">"/welcome"</span>)
+<span class="code-keyword">public</span> class WelcomeMessage {
+    <span class="code-keyword">private</span> <span class="code-object">String</span> welcomeMessage = <span class="code-quote">"Hello world!"</span>;
+
+    @GET
+    <span class="code-keyword">public</span> <span class="code-object">String</span> returnWelcomeMessage() {
+        <span class="code-keyword">return</span> welcomeMessage;
+    }
+
+    @PUT
+    <span class="code-keyword">public</span> <span class="code-object">String</span> updateWelcomeMessage(<span class="code-object">String</span> aNewMessage) {
+        welcomeMessage = aNewMessage;
+    }
+}
+</pre>
+</div></div>
+<p>Notice that the updateWelcomeMessage has an unannotated parameter which represents an incoming request's body.</p>
+
+
+<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Reference</b><br />Refer to the Request/Response entities page for more details on how request/response entities are handled.</td></tr></table></div>
+
+<p><a name="JAX-RSResources%2CHTTPMethods%2CandPaths-SubresourceMethod"></a></p>
+
+<h3><a name="JAX-RSResources%2CHTTPMethods%2CandPaths-SubresourceMethods%28@Pathand@GET%2C@POST%2C@PUT%2C@DELETEonaJavamethod%29"></a>Subresource Methods (@Path and @GET, @POST, @PUT, @DELETE on a Java method)</h3>
+
+<p>Sometimes it is easier having a root resource resolve a generic URL path and to have <b>@Path</b> annotated methods further resolve the request.  For instance, suppose that a HTTP GET to "/administrator" returned generic information about an administrator.  However, sometimes it is better to return smaller bits or more detailed information about the resource using a slightly different URL identifier.  Suppose that a HTTP GET to "/administrator/name" should return the name.  Instead of creating many root resource classes for each URL, you can have the root resource initially resolve the beginning of the URL request and then further resolve the request against subresource methods.</p>
+
+<p>Subresource methods are Java methods with a <b>@Path</b> annotation and a @HttpMethod annotated annotation (@GET, @POST, @PUT, @DELETE).</p>
+
+<div class="code panel" style="border-style: solid;border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;"><b>AdministratorResourceWithSubresourceMethod</b></div><div class="codeContent panelContent">
+<pre class="code-java">@Path(<span class="code-quote">"/administrator"</span>)
+<span class="code-keyword">public</span> class Administrator{
+
+    @GET
+    <span class="code-keyword">public</span> <span class="code-object">String</span> findUserInfo() {
+        <span class="code-object">String</span> userInfo = <span class="code-keyword">null</span>;
+        /* build user info */
+        <span class="code-keyword">return</span> userInfo;
+    }
+
+    @GET
+    @Path(<span class="code-quote">"/name"</span>)
+    <span class="code-keyword">public</span> <span class="code-object">String</span> getJustUserName() {
+        <span class="code-object">String</span> userName = "";
+        /* get the user name */
+        <span class="code-keyword">return</span> userName;
+    }
+
+    @GET
+    @Path(<span class="code-quote">"/id"</span>)
+    <span class="code-keyword">public</span> <span class="code-object">String</span> getUserId() {
+        <span class="code-object">String</span> userId = "";
+        /* get the user id */
+        <span class="code-keyword">return</span> userId;
+    }
+}
+</pre>
+</div></div>
+<p>An HTTP URL request to the <b>"/administrator"</b> would resolve to Administrator#findUserInfo().  A HTTP URL request to "/administrator/name" would invoke the Administrator#getJustUserName() method.  Finally a HTTP URL request to "/administrator/id" would resolve to Administrator#getUserId().</p>
+
+<p><a name="JAX-RSResources%2CHTTPMethods%2CandPaths-SubresourceLocator"></a></p>
+
+<h3><a name="JAX-RSResources%2CHTTPMethods%2CandPaths-UsingSubresourceLocators%28@PathonJavamethod%29"></a>Using Subresource Locators (@Path on Java method)</h3>
+
+
+<p>In more complicated scenarios, subresource locators are needed.  Subresource locators are particularly useful when requests must be further resolved by other objects. Subresource locators are Java methods which have only an <b>@Path</b> annotation.  They are different than subresource methods because they do <b>not</b> have any HTTP method annotation on them.</p>
+
+<p>A subresource locator returns an object that has JAX-RS annotations on its methods (or inherits them).  The object is used to further resolve the incoming requests by dynamically inspecting the object for JAX-RS annotations.</p>
+
+<p>This scenario uses @PathParams which are discussed on the parameters page.</p>
+
+<div class="code panel" style="border-style: solid;border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;"><b>UsersResourcesWithSubresourceLocators</b></div><div class="codeContent panelContent">
+<pre class="code-java">@Path(<span class="code-quote">"/users"</span>)
+<span class="code-keyword">public</span> class UsersCollection {
+
+    @Path(<span class="code-quote">"{userid}"</span>)
+    <span class="code-keyword">public</span> <span class="code-object">Object</span> findUserInfo(@PathParam(<span class="code-quote">"userid"</span>) <span class="code-object">String</span> userId) {
+        <span class="code-keyword">if</span>(userId.equals(<span class="code-quote">"superuser"</span>)) {
+            <span class="code-keyword">return</span> <span class="code-keyword">new</span> SuperUser();
+        }
+        <span class="code-keyword">return</span> User.findUserInDatabase(userId);
+    }
+}
+
+<span class="code-keyword">public</span> class Superuser {
+    @GET
+    <span class="code-keyword">public</span> <span class="code-object">String</span> getUserInfo() {
+       <span class="code-object">String</span> userInfo = /* get the user info */;
+       <span class="code-keyword">return</span> userInfo;
+    }
+
+    @GET
+    @Path(<span class="code-quote">"/contactinfo"</span>)
+    <span class="code-keyword">public</span> <span class="code-object">String</span> getContactInfo() {
+      <span class="code-object">String</span> contactInfo = /* get the user contact info */;
+      <span class="code-keyword">return</span> contactInfo;
+    }
+}
+
+<span class="code-keyword">public</span> class User {
+    <span class="code-keyword">protected</span> <span class="code-object">String</span> name;
+
+    <span class="code-keyword">protected</span> User() {
+        /* subresource locator object lifecycles are controlled by the developer */
+    }
+
+    <span class="code-keyword">public</span> <span class="code-keyword">static</span> User findUserInDatabase(<span class="code-object">String</span> userName) {
+        User u = /* get user from database with assigned field values */
+        <span class="code-keyword">return</span> u;
+    }
+
+    @GET
+    <span class="code-keyword">public</span> <span class="code-object">String</span> getInfo() {
+        <span class="code-object">String</span> info = /* get the user info */;
+        <span class="code-keyword">return</span> info;
+    }
+
+    @GET
+    @Path(<span class="code-quote">"/name"</span>)
+    <span class="code-keyword">public</span> <span class="code-object">String</span> getMyUserName() {
+        <span class="code-keyword">return</span> name;
+    }
+}
+
+</pre>
+</div></div>
+<p>A HTTP GET to "/users/superuser" would result in User#findUserInfo() being invoked first.  The method inspects the "userId" path parameter (which resolves to "superuser" for this request) so a Superuser object is returned.  The request is then further resolved against the Superuser object.  In the simple "/users/superuser" case, the request invokes Superuser#getUserInfo();</p>
+
+<p>If a HTTP GET to "/users/superuser/contactinfo" was made, then User#findUserInfo() is invoked and again returns a Superuser object.  The Superuser object is then used to resolve the "/contactinfo" portion of the request which invokes Superuser#getContactInfo.</p>
+
+<p>If a HTTP GET to "/users/user1/name" was made, then User#findUserInfo() is again invoked but it would go and look up the user from the database and return a User object.  The User object is then used to resolve the "/name" portion and results in the User#getMyUserName() method being invoked on the User object returned.</p>
+
+				    
+                    			    </td>
+		    </tr>
+	    </table>
+	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+		    <tr>
+			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+		    </tr>
+	    </table>
+    </body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/attachments/2328628/2523206.png b/src/site/resources/1.0/html/attachments/2328628/2523206.png
new file mode 100644
index 0000000..a0eb7d7
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2328628/2523206.png
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2328628/2523207.png b/src/site/resources/1.0/html/attachments/2328628/2523207.png
new file mode 100644
index 0000000..ba26719
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2328628/2523207.png
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2328628/2523208.png b/src/site/resources/1.0/html/attachments/2328628/2523208.png
new file mode 100644
index 0000000..e41f331
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2328628/2523208.png
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2328628/2523209.png b/src/site/resources/1.0/html/attachments/2328628/2523209.png
new file mode 100644
index 0000000..34d6c4f
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2328628/2523209.png
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2328628/2523211.jpg b/src/site/resources/1.0/html/attachments/2328628/2523211.jpg
new file mode 100644
index 0000000..76988ba
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2328628/2523211.jpg
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2328628/2523229.pdf b/src/site/resources/1.0/html/attachments/2328628/2523229.pdf
new file mode 100644
index 0000000..3230dbe
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2328628/2523229.pdf
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2328628/2523230.zip b/src/site/resources/1.0/html/attachments/2328628/2523230.zip
new file mode 100644
index 0000000..7b00687
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2328628/2523230.zip
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2328628/2523231.pdf b/src/site/resources/1.0/html/attachments/2328628/2523231.pdf
new file mode 100644
index 0000000..4b33b97
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2328628/2523231.pdf
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2328628/2523232.pdf b/src/site/resources/1.0/html/attachments/2328628/2523232.pdf
new file mode 100644
index 0000000..4b33b97
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2328628/2523232.pdf
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2328628/2523233.zip b/src/site/resources/1.0/html/attachments/2328628/2523233.zip
new file mode 100644
index 0000000..7b00687
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2328628/2523233.zip
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2328642/2523181.jpg b/src/site/resources/1.0/html/attachments/2328642/2523181.jpg
new file mode 100644
index 0000000..45fc9d7
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2328642/2523181.jpg
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2328642/2523182.jpg b/src/site/resources/1.0/html/attachments/2328642/2523182.jpg
new file mode 100644
index 0000000..45fc9d7
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2328642/2523182.jpg
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2329360/2523203.jpg b/src/site/resources/1.0/html/attachments/2329360/2523203.jpg
new file mode 100644
index 0000000..28a96e8
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2329360/2523203.jpg
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2329360/2523204.jpg b/src/site/resources/1.0/html/attachments/2329360/2523204.jpg
new file mode 100644
index 0000000..5bb7e81
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2329360/2523204.jpg
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2329360/2523205.jpg b/src/site/resources/1.0/html/attachments/2329360/2523205.jpg
new file mode 100644
index 0000000..f3371b3
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2329360/2523205.jpg
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2329360/2523210.jpg b/src/site/resources/1.0/html/attachments/2329360/2523210.jpg
new file mode 100644
index 0000000..367e76d
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2329360/2523210.jpg
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2329360/2523212.jpg b/src/site/resources/1.0/html/attachments/2329360/2523212.jpg
new file mode 100644
index 0000000..5b59640
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2329360/2523212.jpg
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2329360/2523213.jpg b/src/site/resources/1.0/html/attachments/2329360/2523213.jpg
new file mode 100644
index 0000000..5b59640
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2329360/2523213.jpg
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2329360/2523214.jpg b/src/site/resources/1.0/html/attachments/2329360/2523214.jpg
new file mode 100644
index 0000000..5b59640
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2329360/2523214.jpg
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2329360/2523215.jpg b/src/site/resources/1.0/html/attachments/2329360/2523215.jpg
new file mode 100644
index 0000000..0bd3db1
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2329360/2523215.jpg
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2329360/2523216.jpg b/src/site/resources/1.0/html/attachments/2329360/2523216.jpg
new file mode 100644
index 0000000..540003d
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2329360/2523216.jpg
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2329360/3113001.jpg b/src/site/resources/1.0/html/attachments/2329360/3113001.jpg
new file mode 100644
index 0000000..1a7a15c
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2329360/3113001.jpg
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2329360/3113002.jpg b/src/site/resources/1.0/html/attachments/2329360/3113002.jpg
new file mode 100644
index 0000000..abdecb0
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2329360/3113002.jpg
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2329360/3113003.jpg b/src/site/resources/1.0/html/attachments/2329360/3113003.jpg
new file mode 100644
index 0000000..946e737
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2329360/3113003.jpg
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2851038/3112966.jpg b/src/site/resources/1.0/html/attachments/2851038/3112966.jpg
new file mode 100644
index 0000000..76988ba
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2851038/3112966.jpg
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2851038/3112967.jpg b/src/site/resources/1.0/html/attachments/2851038/3112967.jpg
new file mode 100644
index 0000000..76988ba
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2851038/3112967.jpg
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2851038/3112968.jpg b/src/site/resources/1.0/html/attachments/2851038/3112968.jpg
new file mode 100644
index 0000000..76988ba
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2851038/3112968.jpg
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2851038/3801097.jpg b/src/site/resources/1.0/html/attachments/2851038/3801097.jpg
new file mode 100644
index 0000000..7d001ea
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2851038/3801097.jpg
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2851038/3801124.jpg b/src/site/resources/1.0/html/attachments/2851038/3801124.jpg
new file mode 100644
index 0000000..7d001ea
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2851038/3801124.jpg
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2851038/3801125.jpg b/src/site/resources/1.0/html/attachments/2851038/3801125.jpg
new file mode 100644
index 0000000..7d001ea
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2851038/3801125.jpg
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2851038/4751370.jpg b/src/site/resources/1.0/html/attachments/2851038/4751370.jpg
new file mode 100644
index 0000000..2b04971
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2851038/4751370.jpg
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2851038/4751371.jpg b/src/site/resources/1.0/html/attachments/2851038/4751371.jpg
new file mode 100644
index 0000000..3061496
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2851038/4751371.jpg
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2851038/4751372.jpg b/src/site/resources/1.0/html/attachments/2851038/4751372.jpg
new file mode 100644
index 0000000..98f5826
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2851038/4751372.jpg
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2851038/4751373.jpg b/src/site/resources/1.0/html/attachments/2851038/4751373.jpg
new file mode 100644
index 0000000..cf5663b
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2851038/4751373.jpg
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2851055/3112970.jpg b/src/site/resources/1.0/html/attachments/2851055/3112970.jpg
new file mode 100644
index 0000000..76988ba
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2851055/3112970.jpg
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2851055/3112983.jpg b/src/site/resources/1.0/html/attachments/2851055/3112983.jpg
new file mode 100644
index 0000000..1a7a15c
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2851055/3112983.jpg
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2851061/4751374.jpg b/src/site/resources/1.0/html/attachments/2851061/4751374.jpg
new file mode 100644
index 0000000..de13ece
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2851061/4751374.jpg
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2851061/4751375.jpg b/src/site/resources/1.0/html/attachments/2851061/4751375.jpg
new file mode 100644
index 0000000..5ce1101
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2851061/4751375.jpg
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2852765/3113127.java b/src/site/resources/1.0/html/attachments/2852765/3113127.java
new file mode 100644
index 0000000..c162c43
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2852765/3113127.java
@@ -0,0 +1,23 @@
+package myPackage;
+
+import javax.ws.rs.core.MediaType;
+
+import org.apache.wink.client.Resource;
+import org.apache.wink.client.RestClient;
+import org.apache.wink.common.model.atom.AtomEntry;
+import org.apache.wink.common.model.atom.AtomFeed;
+
+public class ConsumeAtomUsingWink {
+
+    public static void main(String[] args) {
+        System.out.println("Consuming Atom Documents using Apache Wink...\n");
+        RestClient client = new RestClient();
+        Resource resource = client.resource("http://alexharden.org/blog/atom.xml");
+        AtomFeed feed = resource.accept(MediaType.APPLICATION_ATOM_XML).get(AtomFeed.class);
+        System.out.println(feed.getTitle().getValue());
+        for (AtomEntry entry : feed.getEntries()) {
+            System.out.println("\t" + entry.getTitle().getValue());
+        }
+    }
+
+}
diff --git a/src/site/resources/1.0/html/attachments/2852765/3113128.xml b/src/site/resources/1.0/html/attachments/2852765/3113128.xml
new file mode 100644
index 0000000..8145e48
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2852765/3113128.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
+  <display-name>ProduceAtom_Abdera</display-name>
+  <welcome-file-list>
+    <welcome-file>index.jsp</welcome-file>
+  </welcome-file-list>
+  <servlet>
+    <description></description>
+    <display-name>ProduceAtom</display-name>
+    <servlet-name>ProduceAtom</servlet-name>
+    <servlet-class>myPackage.ProduceAtomUsingAbdera</servlet-class>
+  </servlet>
+  <servlet-mapping>
+    <servlet-name>ProduceAtom</servlet-name>
+    <url-pattern>/ProduceAtom</url-pattern>
+  </servlet-mapping>
+</web-app>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/attachments/2852765/3113129.java b/src/site/resources/1.0/html/attachments/2852765/3113129.java
new file mode 100644
index 0000000..843a849
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2852765/3113129.java
@@ -0,0 +1,28 @@
+package myPackage;
+
+import java.io.IOException;
+import java.net.URL;
+
+import org.apache.abdera.Abdera;
+import org.apache.abdera.model.Document;
+import org.apache.abdera.model.Entry;
+import org.apache.abdera.model.Feed;
+import org.apache.abdera.parser.ParseException;
+import org.apache.abdera.parser.Parser;
+
+public class ConsumeAtomUsingAbdera {
+
+    public static void main(String[] args) throws ParseException, IOException {
+        System.out.println("Consuming Atom Documents using Abdera...\n");
+        Abdera abdera = new Abdera();
+        Parser parser = abdera.getParser();
+        URL url = new URL("http://alexharden.org/blog/atom.xml");
+        Document<Feed> doc = parser.parse(url.openStream());
+        Feed feed = doc.getRoot();
+        System.out.println(feed.getTitle());
+        for (Entry entry : feed.getEntries()) {
+            System.out.println("\t" + entry.getTitle());
+        }
+    }
+
+}
diff --git a/src/site/resources/1.0/html/attachments/2852765/3113130.java b/src/site/resources/1.0/html/attachments/2852765/3113130.java
new file mode 100644
index 0000000..57c7f15
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2852765/3113130.java
@@ -0,0 +1,65 @@
+package myPackage;
+
+import java.io.IOException;
+import java.util.Date;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.abdera.Abdera;
+import org.apache.abdera.model.Entry;
+import org.apache.abdera.model.Feed;
+
+/**
+ * Servlet implementation class ProduceAtom
+ */
+public class ProduceAtomUsingAbdera extends HttpServlet {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @see HttpServlet#HttpServlet()
+     */
+    public ProduceAtomUsingAbdera() {
+        super();
+    }
+
+    /**
+     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
+     *      response)
+     */
+    protected void doGet(HttpServletRequest request, HttpServletResponse response)
+        throws ServletException, IOException {
+        Abdera abdera = new Abdera();
+        Feed feed = abdera.newFeed();
+
+        feed.setId("tag:example.org,2007:/foo");
+        feed.setTitle("Test Feed");
+        feed.setSubtitle("Feed subtitle");
+        feed.setUpdated(new Date());
+        feed.addAuthor("Shiva HR");
+        feed.addLink("http://example.com");
+        feed.addLink("http://example.com/foo", "self");
+
+        Entry entry = feed.addEntry();
+        entry.setId("tag:example.org,2007:/foo/entries/1");
+        entry.setTitle("Entry title");
+        entry.setSummaryAsHtml("<p>This is the entry title</p>");
+        entry.setUpdated(new Date());
+        entry.setPublished(new Date());
+        entry.addLink("http://example.com/foo/entries/1");
+
+        feed.getDocument().writeTo(response.getWriter());
+    }
+
+    /**
+     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
+     *      response)
+     */
+    protected void doPost(HttpServletRequest request, HttpServletResponse response)
+        throws ServletException, IOException {
+        doGet(request, response);
+    }
+
+}
diff --git a/src/site/resources/1.0/html/attachments/2852765/3113131 b/src/site/resources/1.0/html/attachments/2852765/3113131
new file mode 100644
index 0000000..e90d9a9
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2852765/3113131
@@ -0,0 +1 @@
+myPackage.ProduceAtom
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/attachments/2852765/3113132.xml b/src/site/resources/1.0/html/attachments/2852765/3113132.xml
new file mode 100644
index 0000000..5e00ed2
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2852765/3113132.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
+  <display-name>ProduceAtom_Wink</display-name>
+  <welcome-file-list>
+    <welcome-file>index.html</welcome-file>
+    <welcome-file>index.htm</welcome-file>
+    <welcome-file>index.jsp</welcome-file>
+    <welcome-file>default.html</welcome-file>
+    <welcome-file>default.htm</welcome-file>
+    <welcome-file>default.jsp</welcome-file>
+  </welcome-file-list>
+  <servlet>
+    <description></description>
+    <display-name>ProduceAtom</display-name>
+    <servlet-name>ProduceAtom</servlet-name>
+    <servlet-class>myPackage.ProduceAtomUsingWink</servlet-class>
+  </servlet>
+  <servlet-mapping>
+    <servlet-name>ProduceAtom</servlet-name>
+    <url-pattern>/ProduceAtom</url-pattern>
+  </servlet-mapping>
+</web-app>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/attachments/2852765/3113133.xml b/src/site/resources/1.0/html/attachments/2852765/3113133.xml
new file mode 100644
index 0000000..bed8d7f
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2852765/3113133.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
+	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
+	id="WebApp_ID" version="2.5">
+	<display-name>ProduceAtom_Wink_Elegant</display-name>
+	<welcome-file-list>
+		<welcome-file>index.jsp</welcome-file>
+	</welcome-file-list>
+
+	<servlet>
+		<servlet-name>restSdkService</servlet-name>
+		<servlet-class>org.apache.wink.server.internal.servlet.RestServlet</servlet-class>
+		<init-param>
+			<param-name>applicationConfigLocation</param-name>
+			<param-value>/WEB-INF/application</param-value>
+		</init-param>
+	</servlet>
+
+	<servlet-mapping>
+		<servlet-name>restSdkService</servlet-name>
+		<url-pattern>/rest/*</url-pattern>
+	</servlet-mapping>
+</web-app>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/attachments/2852765/3113134.java b/src/site/resources/1.0/html/attachments/2852765/3113134.java
new file mode 100644
index 0000000..7f51893
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2852765/3113134.java
@@ -0,0 +1,86 @@
+package myPackage;
+
+import java.io.IOException;
+import java.util.Date;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.wink.common.model.atom.AtomEntry;
+import org.apache.wink.common.model.atom.AtomFeed;
+import org.apache.wink.common.model.atom.AtomLink;
+import org.apache.wink.common.model.atom.AtomPerson;
+import org.apache.wink.common.model.atom.AtomText;
+import org.apache.wink.common.model.atom.AtomTextType;
+
+/**
+ * Servlet implementation class ProduceAtom
+ */
+public class ProduceAtomUsingWink extends HttpServlet {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @see HttpServlet#HttpServlet()
+     */
+    public ProduceAtomUsingWink() {
+        super();
+    }
+
+    /**
+     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
+     *      response)
+     */
+    protected void doGet(HttpServletRequest request, HttpServletResponse response)
+        throws ServletException, IOException {
+        AtomFeed feed = new AtomFeed();
+        feed.setId("tag:example.org,2007:/foo");
+        feed.setTitle(new AtomText("Test Feed"));
+        feed.setSubtitle(new AtomText("Feed subtitle"));
+        feed.setUpdated(new Date());
+
+        AtomPerson person = new AtomPerson();
+        person.setName("Shiva HR");
+        feed.getAuthors().add(person);
+
+        AtomLink link1 = new AtomLink();
+        link1.setHref("http://example.com");
+        feed.getLinks().add(link1);
+
+        AtomLink link2 = new AtomLink();
+        link2.setHref("http://example.com/foo");
+        link2.setRel("self");
+        feed.getLinks().add(link2);
+
+        AtomEntry entry = new AtomEntry();
+        entry.setId("tag:example.org,2007:/foo/entries/1");
+        entry.setTitle(new AtomText("Entry title"));
+
+        AtomText summary = new AtomText();
+        summary.setType(AtomTextType.html);
+        summary.setValue("<p>This is the entry title</p>");
+        entry.setSummary(summary);
+
+        entry.setUpdated(new Date());
+        entry.setPublished(new Date());
+
+        AtomLink link3 = new AtomLink();
+        link3.setHref("http://example.com/foo/entries/1");
+        entry.getLinks().add(link3);
+
+        feed.getEntries().add(entry);
+
+        AtomFeed.marshal(feed, response.getOutputStream());
+    }
+
+    /**
+     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
+     *      response)
+     */
+    protected void doPost(HttpServletRequest request, HttpServletResponse response)
+        throws ServletException, IOException {
+        doGet(request, response);
+    }
+
+}
diff --git a/src/site/resources/1.0/html/attachments/2852765/3113135.java b/src/site/resources/1.0/html/attachments/2852765/3113135.java
new file mode 100644
index 0000000..4fcba41
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2852765/3113135.java
@@ -0,0 +1,62 @@
+package myPackage;
+
+import java.util.Date;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+import org.apache.wink.common.model.atom.AtomEntry;
+import org.apache.wink.common.model.atom.AtomFeed;
+import org.apache.wink.common.model.atom.AtomLink;
+import org.apache.wink.common.model.atom.AtomPerson;
+import org.apache.wink.common.model.atom.AtomText;
+import org.apache.wink.common.model.atom.AtomTextType;
+
+@Path("/getAtom")
+public class ProduceAtom {
+
+    @GET
+    @Produces(MediaType.APPLICATION_ATOM_XML)
+    public AtomFeed getFeed() {
+        AtomFeed feed = new AtomFeed();
+        feed.setId("tag:example.org,2007:/foo");
+        feed.setTitle(new AtomText("Test Feed"));
+        feed.setSubtitle(new AtomText("Feed subtitle"));
+        feed.setUpdated(new Date());
+
+        AtomPerson person = new AtomPerson();
+        person.setName("Shiva HR");
+        feed.getAuthors().add(person);
+
+        AtomLink link1 = new AtomLink();
+        link1.setHref("http://example.com");
+        feed.getLinks().add(link1);
+
+        AtomLink link2 = new AtomLink();
+        link2.setHref("http://example.com/foo");
+        link2.setRel("self");
+        feed.getLinks().add(link2);
+
+        AtomEntry entry = new AtomEntry();
+        entry.setId("tag:example.org,2007:/foo/entries/1");
+        entry.setTitle(new AtomText("Entry title"));
+
+        AtomText summary = new AtomText();
+        summary.setType(AtomTextType.html);
+        summary.setValue("<p>This is the entry title</p>");
+        entry.setSummary(summary);
+
+        entry.setUpdated(new Date());
+        entry.setPublished(new Date());
+
+        AtomLink link3 = new AtomLink();
+        link3.setHref("http://example.com/foo/entries/1");
+        entry.getLinks().add(link3);
+
+        feed.getEntries().add(entry);
+
+        return feed;
+    }
+}
diff --git a/src/site/resources/1.0/html/attachments/2852765/3113136.java b/src/site/resources/1.0/html/attachments/2852765/3113136.java
new file mode 100644
index 0000000..b7c2997
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2852765/3113136.java
@@ -0,0 +1,33 @@
+package myPackage;
+
+import java.io.IOException;
+import java.net.URL;
+
+import org.apache.abdera.Abdera;
+import org.apache.abdera.contrib.rss.RssFeed;
+import org.apache.abdera.model.Document;
+import org.apache.abdera.model.Entry;
+import org.apache.abdera.parser.ParseException;
+import org.apache.abdera.parser.Parser;
+
+public class ConsumeRssUsingAbdera {
+
+    public static void main(String[] args) throws ParseException, IOException {
+        System.out.println("Consuming RSS Documents using Abdera...\n");
+        Abdera abdera = new Abdera();
+        Parser parser = abdera.getParser();
+        URL url = new URL("http://www.rssboard.org/files/sample-rss-2.xml");
+        Document<RssFeed> doc = parser.parse(url.openStream());
+        RssFeed rssFeed = doc.getRoot();
+        System.out.println("Title: " + rssFeed.getTitle());
+        System.out.println("Description: " + rssFeed.getSubtitle() + "\n");
+        int itemCount = 0;
+        for (Entry entry : rssFeed.getEntries()) {
+            System.out.println("Item " + ++itemCount + ":");
+            System.out.println("\tTitle: " + entry.getTitle());
+            System.out.println("\tPublish Date: " + entry.getPublished());
+            System.out.println("\tDescription: " + entry.getContent());
+        }
+    }
+
+}
diff --git a/src/site/resources/1.0/html/attachments/2852765/3113137.zip b/src/site/resources/1.0/html/attachments/2852765/3113137.zip
new file mode 100644
index 0000000..fb05430
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2852765/3113137.zip
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2852765/3113138.zip b/src/site/resources/1.0/html/attachments/2852765/3113138.zip
new file mode 100644
index 0000000..1129926
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2852765/3113138.zip
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2852765/3113139.java b/src/site/resources/1.0/html/attachments/2852765/3113139.java
new file mode 100644
index 0000000..fdb1dec
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2852765/3113139.java
@@ -0,0 +1,31 @@
+package myPackage;
+
+import javax.ws.rs.core.MediaType;
+
+import org.apache.wink.client.Resource;
+import org.apache.wink.client.RestClient;
+import org.apache.wink.common.model.rss.RssChannel;
+import org.apache.wink.common.model.rss.RssFeed;
+import org.apache.wink.common.model.rss.RssItem;
+
+public class ConsumeRssUsingWink {
+
+    public static void main(String[] args) {
+        System.out.println("Consuming RSS Documents using Apache Wink...\n");
+        RestClient client = new RestClient();
+        String url = "http://www.rssboard.org/files/sample-rss-2.xml";
+        Resource resource = client.resource(url);
+        RssFeed rss = resource.accept(MediaType.APPLICATION_XML).get(RssFeed.class);
+        RssChannel channel = rss.getChannel();
+        System.out.println("Title: " + channel.getTitle());
+        System.out.println("Description: " + channel.getDescription() + "\n");
+        int itemCount = 0;
+        for (RssItem item : channel.getItems()) {
+            System.out.println("Item " + ++itemCount + ":");
+            System.out.println("\tTitle: " + item.getTitle());
+            System.out.println("\tPublish Date: " + item.getPubDate());
+            System.out.println("\tDescription: " + item.getDescription());
+        }
+    }
+
+}
diff --git a/src/site/resources/1.0/html/attachments/2852765/4456452.zip b/src/site/resources/1.0/html/attachments/2852765/4456452.zip
new file mode 100644
index 0000000..53dd08f
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2852765/4456452.zip
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2852765/4456454.zip b/src/site/resources/1.0/html/attachments/2852765/4456454.zip
new file mode 100644
index 0000000..8d58c8b
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2852765/4456454.zip
Binary files differ
diff --git a/src/site/resources/1.0/html/attachments/2852765/4456455.java b/src/site/resources/1.0/html/attachments/2852765/4456455.java
new file mode 100644
index 0000000..c64476b
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2852765/4456455.java
@@ -0,0 +1,41 @@
+package myPackage;
+
+import org.apache.abdera.protocol.server.CollectionAdapter;
+import org.apache.abdera.protocol.server.Provider;
+import org.apache.abdera.protocol.server.RequestContext;
+import org.apache.abdera.protocol.server.TargetType;
+import org.apache.abdera.protocol.server.impl.AbstractWorkspaceProvider;
+import org.apache.abdera.protocol.server.impl.RegexTargetResolver;
+import org.apache.abdera.protocol.server.impl.SimpleWorkspaceInfo;
+import org.apache.abdera.protocol.server.impl.TemplateTargetBuilder;
+
+public class APP_ContentProvider extends AbstractWorkspaceProvider implements Provider {
+    public static String FEED_TAG = "entries";
+
+    private final APP_CollectionAdapter collectionAdapter;
+
+    public APP_ContentProvider() {
+        this.collectionAdapter = new APP_CollectionAdapter();
+
+        super.setTargetResolver(new RegexTargetResolver()
+            .setPattern("/blog(\\?[^#]*)?", TargetType.TYPE_SERVICE)
+            .setPattern("/blog/" + FEED_TAG + "(\\?[^#]*)?", TargetType.TYPE_COLLECTION)
+            .setPattern("/blog/" + FEED_TAG + "/([^/#?]+)(\\?[^#]*)?", TargetType.TYPE_ENTRY));
+
+        setTargetBuilder(new TemplateTargetBuilder()
+            .setTemplate(TargetType.TYPE_SERVICE, "{target_base}/blog")
+            .setTemplate(TargetType.TYPE_COLLECTION, "{target_base}/blog/{collection}{-opt|?|q,c,s,p,l,i,o}{-join|&|q,c,s,p,l,i,o}")
+            .setTemplate(TargetType.TYPE_CATEGORIES, "{target_base}/blog/{collection};categories")
+            .setTemplate(TargetType.TYPE_ENTRY, "{target_base}/blog/{collection}/{entry}"));
+
+        SimpleWorkspaceInfo workspace = new SimpleWorkspaceInfo();
+        workspace.setTitle("IISc MILE Lab Weblog");
+        workspace.addCollection(collectionAdapter);
+        addWorkspace(workspace);
+    }
+
+    public CollectionAdapter getCollectionAdapter(RequestContext request) {
+        return collectionAdapter;
+    }
+
+}
diff --git a/src/site/resources/1.0/html/attachments/2852765/4456456.xml b/src/site/resources/1.0/html/attachments/2852765/4456456.xml
new file mode 100644
index 0000000..2b24339
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2852765/4456456.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
+	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
+	id="WebApp_ID" version="2.5">
+	<display-name>APP_Server_Abdera</display-name>
+	<welcome-file-list>
+		<welcome-file>index.jsp</welcome-file>
+	</welcome-file-list>
+
+	<servlet>
+		<description></description>
+		<display-name>APP_Servlet</display-name>
+		<servlet-name>APP_Servlet</servlet-name>
+		<servlet-class>org.apache.abdera.protocol.server.servlet.AbderaServlet</servlet-class>
+		<init-param>
+			<param-name>org.apache.abdera.protocol.server.Provider</param-name>
+			<param-value>myPackage.APP_ContentProvider</param-value>
+		</init-param>
+		<init-param>
+			<param-name>org.apache.abdera.protocol.server.CollectionAdapter</param-name>
+			<param-value>myPackage.APP_CollectionAdapter</param-value>
+		</init-param>
+	</servlet>
+	<servlet-mapping>
+		<servlet-name>APP_Servlet</servlet-name>
+		<url-pattern>/blog/*</url-pattern>
+	</servlet-mapping>
+</web-app>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/attachments/2852765/4456457.java b/src/site/resources/1.0/html/attachments/2852765/4456457.java
new file mode 100644
index 0000000..a10b826
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2852765/4456457.java
@@ -0,0 +1,240 @@
+package myPackage;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.activation.MimeType;
+
+import org.apache.abdera.Abdera;
+import org.apache.abdera.factory.StreamBuilder;
+import org.apache.abdera.i18n.iri.IRI;
+import org.apache.abdera.model.Document;
+import org.apache.abdera.model.Entry;
+import org.apache.abdera.model.Feed;
+import org.apache.abdera.model.Link;
+import org.apache.abdera.parser.ParseException;
+import org.apache.abdera.protocol.server.ProviderHelper;
+import org.apache.abdera.protocol.server.RequestContext;
+import org.apache.abdera.protocol.server.ResponseContext;
+import org.apache.abdera.protocol.server.TargetType;
+import org.apache.abdera.protocol.server.context.BaseResponseContext;
+import org.apache.abdera.protocol.server.context.EmptyResponseContext;
+import org.apache.abdera.protocol.server.context.ResponseContextException;
+import org.apache.abdera.protocol.server.impl.AbstractCollectionAdapter;
+import org.apache.abdera.util.MimeTypeHelper;
+
+/**
+ * The Collection Adapter is the piece that actually implements the business
+ * logic of the AtomPub server. It bridges the protocol with the backend
+ * persistence.
+ */
+public class APP_CollectionAdapter extends AbstractCollectionAdapter {
+    private static String FEED_TAG = "entries";
+    private Document      feedDocument;
+
+    public ResponseContext getFeed(RequestContext request) {
+        Abdera abdera = request.getAbdera();
+        Document feed = getFeedDocument(abdera);
+        return new BaseResponseContext(feed);
+    }
+
+    public ResponseContext postEntry(RequestContext request) {
+        Abdera abdera = request.getAbdera();
+        try {
+            Document entryDocument = constructEntryDocument(request, abdera);
+            if (entryDocument != null) {
+                Entry entry = (Entry)entryDocument.getRoot();
+                manageAnEntry(entry, null, abdera);
+                BaseResponseContext rc = new BaseResponseContext(entry);
+                IRI baseUri = ProviderHelper.resolveBase(request);
+                rc.setLocation(baseUri.resolve(FEED_TAG + "/" + entry.getId()).toString());
+                rc.setStatus(201); //generate a HTTP 201 response in case of success
+                return rc;
+            } else {
+                return new EmptyResponseContext(400);
+            }
+        } catch (ParseException pe) {
+            return new EmptyResponseContext(415);
+        } catch (ClassCastException cce) {
+            return new EmptyResponseContext(415);
+        } catch (Exception e) {
+            return new EmptyResponseContext(400);
+        }
+    }
+
+    public ResponseContext getEntry(RequestContext request) {
+        Entry entry = (Entry)getAbderaEntry(request);
+        if (entry != null) {
+            Document entryDocument = ((Entry)entry.clone()).getDocument();
+            return new BaseResponseContext(entryDocument);
+        } else {
+            return new EmptyResponseContext(404);
+        }
+    }
+
+    public ResponseContext deleteEntry(RequestContext request) {
+        Entry entry = getAbderaEntry(request);
+        if (entry != null) {
+            entry.discard();
+            return new EmptyResponseContext(204);
+        } else {
+            return new EmptyResponseContext(404);
+        }
+    }
+
+    public ResponseContext putEntry(RequestContext request) {
+        Entry origEntry = getAbderaEntry(request);
+        if (origEntry != null) {
+            try {
+                Abdera abdera = request.getAbdera();
+                Document newEntryDocument = constructEntryDocument(request, abdera);
+                if (newEntryDocument != null) {
+                    Entry newEntry = (Entry)newEntryDocument.getRoot();
+                    manageAnEntry(newEntry, origEntry, abdera);
+                    return new BaseResponseContext(newEntry);
+                } else {
+                    return new EmptyResponseContext(400);
+                }
+            } catch (ParseException pe) {
+                return new EmptyResponseContext(415);
+            } catch (ClassCastException cce) {
+                return new EmptyResponseContext(415);
+            } catch (Exception e) {
+                if ("409".equalsIgnoreCase(e.getMessage())) {
+                    return new EmptyResponseContext(409);
+                } else {
+                    return new EmptyResponseContext(400);
+                }
+            }
+        } else {
+            return new EmptyResponseContext(404);
+        }
+    }
+
+    private synchronized Document getFeedDocument(Abdera abdera) {
+        if (feedDocument == null) {
+            feedDocument = initializeFeedDocument(abdera);
+        }
+        return feedDocument;
+    }
+
+    private Document initializeFeedDocument(Abdera abdera) {
+        StreamBuilder out = (StreamBuilder)abdera.getWriterFactory().newStreamWriter("fom");
+        out.startDocument().startFeed().writeId("http://mile.ee.iisc.ernet.in")
+            .writeTitle("Latest developments at MILE Lab, IISc :")
+            .writeUpdated(new Date())
+            .writeLink(FEED_TAG)
+            .writeCategory("lab-updates");
+
+        out
+            .startEntry()
+            .writeId("tts_demo")
+            .writeTitle("Kannada and Tamil language TTS Web Demo")
+            .writeLink(FEED_TAG + "/tts_demo")
+            .writeUpdated(new Date())
+            .writePublished(new Date())
+            .writeEdited(new Date())
+            .writeSummary("Kannada/Tamil language Text-To-Speech (TTS) Demo by MILE Lab, IISc is " +
+            		"available at http://mile.ee.iisc.ernet.in:8080/tts_demo/ ")
+            .writeAuthor("ShivaHR").endEntry();
+
+        out
+            .startEntry()
+            .writeId("tamil_ocr")
+            .writeTitle("Tamil OCR achieves 94.3% accuracy on 1000 scanned pages")
+            .writeLink(FEED_TAG + "/tamil_ocr")
+            .writeUpdated(new Date())
+            .writePublished(new Date())
+            .writeEdited(new Date())
+            .writeSummary("Tamil OCR (Optical Character Recognizer) being developed at MILE Lab, IISc " +
+            		"achieves an accuracy of 94.3%! The testing was carried out by CDAC-Pune on " +
+            		"1000 pages scanned from books printed between 1950-2000.")
+            .writeAuthor("ShivaHR").endEntry();
+
+        Document doc = (Document)out.endFeed().endDocument().getBase();
+
+        return doc;
+    }
+
+    /**
+     * Create a skeletal entry, to be filled up later
+     */
+    private Document constructEntryDocument(RequestContext request, Abdera abdera) throws Exception {
+        MimeType contentType = request.getContentType();
+        if (contentType != null && !MimeTypeHelper.isAtom(contentType.toString())) {
+            throw new ParseException();
+        }
+        return (Document)request.getDocument(abdera.getParser()).clone();
+    }
+
+    /*
+     * Utility method to manage the creation or update of an entry.
+     */
+    private void manageAnEntry(Entry currentEntry, Entry originalEntry, Abdera abdera)
+        throws Exception {
+        IRI id;
+        if (originalEntry != null) {
+            id = originalEntry.getId();
+            if (!currentEntry.getId().equals(id)) {
+                throw new Exception("409");
+            }
+            originalEntry.discard();
+        } else {
+            id = currentEntry.getId();
+            if (id == null) {
+                id = new IRI(abdera.getFactory().newUuidUri());
+                currentEntry.getIdElement().setValue(id.toString());
+            }
+        }
+        currentEntry.setUpdated(new Date());
+        String hrefValue = FEED_TAG + "/" + id;
+        List<Link> links = currentEntry.getLinks();
+        //links.clear(); //doesn't work - throws a java.lang.UnsupportedOperationException!
+        if (links.size() > 0) {
+            links.get(0).setHref(hrefValue);
+        } else {
+            currentEntry.addLink(hrefValue);
+        }
+        Feed feed = (Feed)getFeedDocument(abdera).getRoot();
+        feed.insertEntry(currentEntry);
+        feed.setUpdated(new Date());
+    }
+
+    private Entry getAbderaEntry(RequestContext request) {
+        Abdera abdera = request.getAbdera();
+        Document feed = getFeedDocument(abdera);
+        try {
+            Feed currentFeed = (Feed)feed.getRoot();
+            return currentFeed.getEntry(getEntryID(request));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    /**
+     * The id of the entry is the last token in the URL. Ugly way of extracting
+     * it, till I find a better mechanism.
+     */
+    private String getEntryID(RequestContext request) {
+        if (request.getTarget().getType() != TargetType.TYPE_ENTRY) {
+            return null;
+        }
+        String path = request.getUri().toString();
+        String[] segments = path.split("/");
+        return segments[segments.length - 1];
+    }
+
+    public String getAuthor(RequestContext request) throws ResponseContextException {
+        return "ShivaHR";
+    }
+
+    public String getId(RequestContext request) {
+        return "blog/entries";
+    }
+
+    public String getTitle(RequestContext request) {
+        return "Entries";
+    }
+
+}
diff --git a/src/site/resources/1.0/html/attachments/2852765/4456458.jsp b/src/site/resources/1.0/html/attachments/2852765/4456458.jsp
new file mode 100644
index 0000000..560ab75
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2852765/4456458.jsp
@@ -0,0 +1,140 @@
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+	pageEncoding="ISO-8859-1"%>
+<!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=ISO-8859-1">
+<title>Atom Publishing Protocol (APP) Server using Apache Abdera</title>
+<STYLE type="text/css">
+body {
+	font-family: "Lucida Grande", "Lucida Sans Unicode", sans-serif;
+	font-size: small;
+	background-color: #A6D2FF;
+	text-align: center;
+}
+
+h1,h2,h3,h4 {
+	font-family: palatino, georgia, serif;
+	margin-bottom: 0px;
+	text-align: left;
+	color: darkblue;
+	font-weight: normal;
+}
+
+h4 {
+	font-family: "Lucida Grande", "Lucida Sans Unicode", sans-serif;
+	font-size: 8pt;
+	text-transform: uppercase;
+	font-weight: bold;
+}
+
+p {
+	margin-top: 0px;
+}
+
+#h3-content {
+	font-variant: small-caps;
+	font-size: small;
+}
+
+#page-container {
+	background-color: white;
+	border-color: black;
+	width: 725px;
+	border-color: black;
+	position: relative;
+	margin: 0pt auto;
+}
+
+#main-content {
+	padding-left: 25px;
+	padding-right: 25px;
+	text-align: left;
+	float: left;
+	position: relative;
+	background-color: white;
+}
+
+#left-content {
+	padding: 0px;
+	text-align: left;
+	float: left;
+	position: relative;
+	background-color: white;
+}
+
+#links-bar {
+	text-align: center;
+	font-family: palatino, georgia, serif;
+	color: gray;
+	background-color: transparent;
+	font-variant: small-caps;
+	padding: 5px;
+}
+
+li {
+	padding-bottom: 5px;
+	list-style-image: none;
+	list-style-position: outside;
+	list-style-type: none;
+	font-size: 9pt;
+}
+</STYLE>
+</head>
+<body>
+<%
+    /*******************************************************************************
+     * Licensed Materials - Property of IBM
+     * (c) Copyright IBM Corporation 2006. All Rights Reserved.
+     * 
+     * Note to U.S. Government Users Restricted Rights:
+     * Use, duplication or disclosure restricted by GSA ADP Schedule
+     * Contract with IBM Corp. 
+     *******************************************************************************/
+    String serviceDocument = "blog";
+    String feedDocument = "blog/entries";
+    String specificEntry = "blog/entries/rail";
+    String IBM_document =
+        "http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.ajax.feed.samples.help/docs/GettingStarted_useage.html";
+%>
+
+<DIV id="page-container">
+<DIV id="main-content">
+<DIV id="left-content">
+<h3>ATOM Publishing Protocol support</h3>
+<p id="h3-content">Demonstrates the ability to create, retrieve,
+update, and delete ATOM content, using the ATOM Publishing Protocol
+(APP) support in Apache Abdera.</p>
+<h4>Read the service document</h4>
+<p id="h4-content">The service document describes the available
+content on the APP Server - currently available feeds, and the URL at
+which they can be accessed. Click <a href="<%=serviceDocument%>"><%=serviceDocument%></a>
+</p>
+<h4>Read the available feed</h4>
+<p id="h4-content">View the feed, and use this operation to check on
+the contents of the feed following a create, update, and delete of
+specific entries in the feed. Click <a href="<%=feedDocument%>"><%=feedDocument%></a>
+</p>
+<h4>Read a specific entry in the feed</h4>
+<p id="h4-content">An operation to view the discrete entries that
+compose a feed. Click <a href="<%=specificEntry%>"><%=specificEntry%></a></p>
+<h4>Create a new entry</h4>
+<p id="h4-content">Use the <a href="http://curl.haxx.se/">curl
+tool</a> to perform the POST action, and view its result. Refer <a
+	href="<%=IBM_document%>">this
+documentation</a> to understand how this can be done</p>
+<h4>Update an existing entry, using Atom Publishing Protocol</h4>
+<p id="h4-content">Use the <a href="http://curl.haxx.se/">curl
+tool</a> to perform the PUT action, and view its result. Refer <a
+	href="<%=IBM_document%>">this
+documentation</a> to understand how this can be done</p>
+<h4>Delete an existing entry</h4>
+<p id="h4-content">Use the <a href="http://curl.haxx.se/">curl
+tool</a> to perform the DELETE action, and view its result. Refer <a
+	href="<%=IBM_document%>">this
+documentation</a> to understand how this can be done</p>
+</DIV>
+</DIV>
+</DIV>
+</BODY>
+</HTML>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/attachments/2852765/4456459.jsp b/src/site/resources/1.0/html/attachments/2852765/4456459.jsp
new file mode 100644
index 0000000..d2e7057
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2852765/4456459.jsp
@@ -0,0 +1,140 @@
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+	pageEncoding="ISO-8859-1"%>
+<!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=ISO-8859-1">
+<title>Atom Publishing Protocol (APP) Server using Apache Wink</title>
+<STYLE type="text/css">
+body {
+	font-family: "Lucida Grande", "Lucida Sans Unicode", sans-serif;
+	font-size: small;
+	background-color: #A6D2FF;
+	text-align: center;
+}
+
+h1,h2,h3,h4 {
+	font-family: palatino, georgia, serif;
+	margin-bottom: 0px;
+	text-align: left;
+	color: darkblue;
+	font-weight: normal;
+}
+
+h4 {
+	font-family: "Lucida Grande", "Lucida Sans Unicode", sans-serif;
+	font-size: 8pt;
+	text-transform: uppercase;
+	font-weight: bold;
+}
+
+p {
+	margin-top: 0px;
+}
+
+#h3-content {
+	font-variant: small-caps;
+	font-size: small;
+}
+
+#page-container {
+	background-color: white;
+	border-color: black;
+	width: 725px;
+	border-color: black;
+	position: relative;
+	margin: 0pt auto;
+}
+
+#main-content {
+	padding-left: 25px;
+	padding-right: 25px;
+	text-align: left;
+	float: left;
+	position: relative;
+	background-color: white;
+}
+
+#left-content {
+	padding: 0px;
+	text-align: left;
+	float: left;
+	position: relative;
+	background-color: white;
+}
+
+#links-bar {
+	text-align: center;
+	font-family: palatino, georgia, serif;
+	color: gray;
+	background-color: transparent;
+	font-variant: small-caps;
+	padding: 5px;
+}
+
+li {
+	padding-bottom: 5px;
+	list-style-image: none;
+	list-style-position: outside;
+	list-style-type: none;
+	font-size: 9pt;
+}
+</STYLE>
+</head>
+<body>
+<%
+    /*******************************************************************************
+     * Licensed Materials - Property of IBM
+     * (c) Copyright IBM Corporation 2006. All Rights Reserved.
+     * 
+     * Note to U.S. Government Users Restricted Rights:
+     * Use, duplication or disclosure restricted by GSA ADP Schedule
+     * Contract with IBM Corp. 
+     *******************************************************************************/
+    String serviceDocument = "blog";
+    String feedDocument = "blog/entries";
+    String specificEntry = "blog/entries/rail";
+    String IBM_document =
+        "http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.ajax.feed.samples.help/docs/GettingStarted_useage.html";
+%>
+
+<DIV id="page-container">
+<DIV id="main-content">
+<DIV id="left-content">
+<h3>ATOM Publishing Protocol support</h3>
+<p id="h3-content">Demonstrates the ability to create, retrieve,
+update, and delete ATOM content, using the ATOM Publishing Protocol
+(APP) support in Apache Wink.</p>
+<h4>Read the service document</h4>
+<p id="h4-content">The service document describes the available
+content on the APP Server - currently available feeds, and the URL at
+which they can be accessed. Click <a href="<%=serviceDocument%>"><%=serviceDocument%></a>
+</p>
+<h4>Read the available feed</h4>
+<p id="h4-content">View the feed, and use this operation to check on
+the contents of the feed following a create, update, and delete of
+specific entries in the feed. Click <a href="<%=feedDocument%>"><%=feedDocument%></a>
+</p>
+<h4>Read a specific entry in the feed</h4>
+<p id="h4-content">An operation to view the discrete entries that
+compose a feed. Click <a href="<%=specificEntry%>"><%=specificEntry%></a></p>
+<h4>Create a new entry</h4>
+<p id="h4-content">Use the <a href="http://curl.haxx.se/">curl
+tool</a> to perform the POST action, and view its result. Refer <a
+	href="<%=IBM_document%>">this
+documentation</a> to understand how this can be done</p>
+<h4>Update an existing entry, using Atom Publishing Protocol</h4>
+<p id="h4-content">Use the <a href="http://curl.haxx.se/">curl
+tool</a> to perform the PUT action, and view its result. Refer <a
+	href="<%=IBM_document%>">this
+documentation</a> to understand how this can be done</p>
+<h4>Delete an existing entry</h4>
+<p id="h4-content">Use the <a href="http://curl.haxx.se/">curl
+tool</a> to perform the DELETE action, and view its result. Refer <a
+	href="<%=IBM_document%>">this
+documentation</a> to understand how this can be done</p>
+</DIV>
+</DIV>
+</DIV>
+</BODY>
+</HTML>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/attachments/2852765/4456460.java b/src/site/resources/1.0/html/attachments/2852765/4456460.java
new file mode 100644
index 0000000..8cb0797
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2852765/4456460.java
@@ -0,0 +1,155 @@
+package myPackage;
+
+import java.net.URI;
+import java.util.Date;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.EntityTag;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriInfo;
+
+import org.apache.wink.common.annotations.Workspace;
+import org.apache.wink.common.model.atom.AtomCategory;
+import org.apache.wink.common.model.atom.AtomEntry;
+import org.apache.wink.common.model.atom.AtomFeed;
+import org.apache.wink.common.model.atom.AtomLink;
+import org.apache.wink.common.model.atom.AtomPerson;
+import org.apache.wink.common.model.atom.AtomText;
+
+@Workspace(workspaceTitle = "IISc MILE Lab Weblog", collectionTitle = "Entries")
+@Path("/entries")
+public class EntriesCollection {
+    private static AtomFeed feed = initializeFeedDocument("entries");
+
+    @GET
+    @Produces(MediaType.APPLICATION_ATOM_XML)
+    public AtomFeed getFeed() {
+        return feed;
+    }
+
+    @POST
+    @Consumes(MediaType.APPLICATION_ATOM_XML)
+    @Produces(MediaType.APPLICATION_ATOM_XML)
+    public Response postEntry(AtomEntry newEntry, @Context UriInfo uriInfo) {
+        if (searchEntry(newEntry.getId()) != null) {
+            throw new WebApplicationException(Response.Status.CONFLICT);
+        }
+
+        URI uri = uriInfo.getAbsolutePathBuilder().segment(newEntry.getId()).build();
+        pruneEntry(newEntry, uri);
+        feed.getEntries().add(0, newEntry);
+        feed.setUpdated(new Date());
+
+        return Response.status(Response.Status.CREATED).entity(newEntry).location(uri)
+            .tag(new EntityTag(newEntry.getId())).build();
+    }
+
+    @GET
+    @Path("{id}")
+    @Produces(MediaType.APPLICATION_ATOM_XML)
+    public AtomEntry getEntry(@PathParam("id") String entryId) {
+        AtomEntry entry = searchEntry(entryId);
+        if (entry == null) {
+            throw new WebApplicationException(Response.Status.NOT_FOUND);
+        } else {
+            return entry;
+        }
+    }
+
+    @PUT
+    @Path("{id}")
+    @Consumes(MediaType.APPLICATION_ATOM_XML)
+    @Produces(MediaType.APPLICATION_ATOM_XML)
+    public AtomEntry putEntry(@PathParam("id") String entryId,
+                              AtomEntry updatedEntry,
+                              @Context UriInfo uriInfo) {
+        AtomEntry oldEntry = getEntry(entryId);
+        feed.getEntries().remove(oldEntry);
+        pruneEntry(updatedEntry, uriInfo.getAbsolutePath());
+        feed.getEntries().add(0, updatedEntry);
+        feed.setUpdated(new Date());
+        return updatedEntry;
+    }
+
+    @DELETE
+    @Path("{id}")
+    public void deleteEntry(@PathParam("id") String entryId) {
+        AtomEntry oldEntry = getEntry(entryId);
+        feed.getEntries().remove(oldEntry);
+        feed.setUpdated(new Date());
+    }
+
+    private static AtomFeed initializeFeedDocument(String basePath) {
+        AtomFeed feed = new AtomFeed();
+        feed.setId("http://mile.ee.iisc.ernet.in");
+        feed.setTitle(new AtomText("Latest developments at MILE Lab, IISc :"));
+        feed.setUpdated(new Date());
+        AtomLink link1 = new AtomLink();
+        link1.setHref(basePath);
+        feed.getLinks().add(link1);
+        AtomCategory category1 = new AtomCategory();
+        category1.setTerm("lab-updates");
+        feed.getCategories().add(category1);
+
+        AtomEntry entry1 = new AtomEntry();
+        entry1.setId("tts_demo");
+        entry1.setTitle(new AtomText("Kannada and Tamil language TTS Web Demo"));
+        AtomLink link2 = new AtomLink();
+        link2.setHref(basePath + "/" + entry1.getId());
+        entry1.getLinks().add(link2);
+        entry1.setUpdated(new Date());
+        entry1.setPublished(new Date());
+        //entry1.setEdited(new Date());
+        entry1.setSummary(new AtomText("Kannada/Tamil language Text-To-Speech (TTS) Demo by MILE Lab, " +
+        		"IISc is available at http://mile.ee.iisc.ernet.in:8080/tts_demo/ "));
+        AtomPerson person1 = new AtomPerson();
+        person1.setName("ShivaHR");
+        entry1.getAuthors().add(person1);
+        feed.getEntries().add(entry1);
+
+        AtomEntry entry2 = new AtomEntry();
+        entry2.setId("tamil_ocr");
+        entry2.setTitle(new AtomText("Tamil OCR achieves 94.3% accuracy on 1000 scanned pages"));
+        AtomLink link3 = new AtomLink();
+        link3.setHref(basePath + "/" + entry2.getId());
+        entry2.getLinks().add(link3);
+        entry2.setUpdated(new Date());
+        entry2.setPublished(new Date());
+        //entry2.setEdited(new Date());
+        entry2.setSummary(new AtomText("Tamil OCR (Optical Character Recognizer) being developed at " +
+        		"MILE Lab, IISc achieves an accuracy of 94.3%! The testing was carried out by " +
+        		"CDAC-Pune on 1000 pages scanned from books printed between 1950-2000."));
+        AtomPerson person2 = new AtomPerson();
+        person2.setName("ShivaHR");
+        entry2.getAuthors().add(person2);
+        feed.getEntries().add(entry2);
+        return feed;
+    }
+
+    private AtomEntry searchEntry(String entryId) {
+        for (AtomEntry entry : feed.getEntries()) {
+            if (entry.getId().equals(entryId)) {
+                return entry;
+            }
+        }
+        return null;
+    }
+
+    private void pruneEntry(AtomEntry newEntry, URI uri) {
+        newEntry.getLinks().clear();
+        AtomLink link = new AtomLink();
+        link.setHref(uri.toString());
+        newEntry.getLinks().add(link);
+        newEntry.setUpdated(new Date());
+    }
+}
diff --git a/src/site/resources/1.0/html/attachments/2852765/4456461 b/src/site/resources/1.0/html/attachments/2852765/4456461
new file mode 100644
index 0000000..b68321f
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2852765/4456461
@@ -0,0 +1 @@
+myPackage.EntriesCollection
diff --git a/src/site/resources/1.0/html/attachments/2852765/4456462.xml b/src/site/resources/1.0/html/attachments/2852765/4456462.xml
new file mode 100644
index 0000000..5045c71
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2852765/4456462.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
+	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
+	id="WebApp_ID" version="2.5">
+	<display-name>APP_Server_Wink</display-name>
+	<welcome-file-list>
+		<welcome-file>index.jsp</welcome-file>
+	</welcome-file-list>
+
+	<servlet>
+		<servlet-name>restSdkService</servlet-name>
+		<servlet-class>org.apache.wink.server.internal.servlet.RestServlet</servlet-class>
+		<init-param>
+			<param-name>applicationConfigLocation</param-name>
+			<param-value>/WEB-INF/application</param-value>
+		</init-param>
+	</servlet>
+
+	<servlet-mapping>
+		<servlet-name>restSdkService</servlet-name>
+		<url-pattern>/blog/*</url-pattern>
+	</servlet-mapping>
+</web-app>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/attachments/2852765/4751361.java b/src/site/resources/1.0/html/attachments/2852765/4751361.java
new file mode 100644
index 0000000..a012952
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2852765/4751361.java
@@ -0,0 +1,155 @@
+package myPackage;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.ws.rs.core.MediaType;
+
+import org.apache.wink.client.ClientResponse;
+import org.apache.wink.client.Resource;
+import org.apache.wink.client.RestClient;
+import org.apache.wink.common.internal.utils.MediaTypeUtils;
+import org.apache.wink.common.model.app.AppCollection;
+import org.apache.wink.common.model.app.AppService;
+import org.apache.wink.common.model.app.AppWorkspace;
+import org.apache.wink.common.model.atom.AtomEntry;
+import org.apache.wink.common.model.atom.AtomFeed;
+import org.apache.wink.common.model.atom.AtomLink;
+import org.apache.wink.common.model.atom.AtomPerson;
+import org.apache.wink.common.model.atom.AtomText;
+
+public class APP_Client_Wink {
+    private static String     SERVICE_URL = "http://localhost:8080/APP_Server_Wink/blog/";
+    private static String     FEED_URL    = "http://localhost:8080/APP_Server_Wink/blog/entries/";
+    private static String     ENTRY_URL   = "http://localhost:8080/APP_Server_Wink/blog/entries/kan_ocr";
+
+    private static RestClient restClient  = new RestClient();
+
+    public static void main(String[] args) {
+        System.out.println("--- I. Contents of Service Document at " + SERVICE_URL + " ---");
+        getServiceDocument();
+
+        System.out.println("--- II. Contents of Feed Document at " + FEED_URL + " ---");
+        getEntries();
+
+        AtomEntry newEntry = createNewEntry();
+        System.out.println("--- III. Posting a new entry into the Feed ---");
+        postEntry(newEntry);
+        System.out.println("--- IV. Contents of Feed Document after Post ---");
+        getEntries();
+
+        AtomEntry changedEntry = changeEntry(newEntry);
+        System.out.println("--- V. Changing the last entry posted ---");
+        putEntry(changedEntry);
+        System.out.println("--- VI. Entry content after change ---");
+        getEntry();
+
+        System.out.println("--- VII. Deleting the last entry posted ---");
+        deleteEntry();
+        System.out.println("--- VIII. Contents of Feed Document after Delete ---");
+        getEntries();
+    }
+
+    private static void getServiceDocument() {
+        Resource resource = restClient.resource(SERVICE_URL);
+        AppService service =
+            resource.accept(MediaTypeUtils.ATOM_SERVICE_DOCUMENT).get(AppService.class);
+        List<AppWorkspace> workspaces = service.getWorkspace();
+        for (AppWorkspace workspace : workspaces) {
+            System.out.println("\t" + workspace.getTitle().getValue());
+            List<AppCollection> collections = workspace.getCollection();
+            for (AppCollection collection : collections) {
+                System.out.println("\t" + collection.getTitle().getValue()
+                    + "\t:\t"
+                    + collection.getHref());
+            }
+            System.out.print("\n");
+        }
+    }
+
+    private static void getEntries() {
+        Resource feedResource = restClient.resource(FEED_URL);
+        AtomFeed feed = feedResource.accept(MediaType.APPLICATION_ATOM_XML).get(AtomFeed.class);
+        int counter = 1;
+        System.out.println("\t" + feed.getTitle().getValue() + "\n");
+        List<AtomEntry> entries = feed.getEntries();
+        for (AtomEntry atomEntry : entries) {
+            System.out.print("\t" + counter++ + ") ");
+            displayEntry(atomEntry);
+        }
+    }
+
+    private static AtomEntry createNewEntry() {
+        AtomEntry entry = new AtomEntry();
+        entry.setId("kan_ocr");
+        entry.setTitle(new AtomText("New algorithm to detect and split merged characters in Kannada OCR"));
+        AtomLink link = new AtomLink();
+        link.setHref(FEED_URL + "/" + entry.getId());
+        entry.getLinks().add(link);
+        entry.setUpdated(new Date());
+        entry.setPublished(new Date());
+        entry.setSummary(new AtomText("The new algorithm to detect and split merged characters in " +
+        		"Kannada OCR is yeilding good results. We will soon be publishing the " +
+        		"algorithm and results in one of the upcoming conferences."));
+        AtomPerson person = new AtomPerson();
+        person.setName("ShivaHR");
+        entry.getAuthors().add(person);
+        return entry;
+    }
+
+    private static AtomEntry changeEntry(AtomEntry curEntry) {
+        curEntry.setTitle(new AtomText("A new algorithm to detect and split merged characters in Kannada OCR will be published soon!"));
+        return curEntry;
+    }
+
+    private static void postEntry(AtomEntry newEntry) {
+        Resource feedResource = restClient.resource(FEED_URL);
+        ClientResponse response =
+            feedResource.contentType(MediaType.APPLICATION_ATOM_XML).post(newEntry);
+        if (response.getStatusCode() == 201) {
+            System.out.println("\t" + "Post successful\n");
+        } else {
+            System.out.println("\t" + "Response code received from server = "
+                + response.getStatusCode()
+                + "\n");
+        }
+    }
+
+    private static void putEntry(AtomEntry changedEntry) {
+        Resource feedResource = restClient.resource(ENTRY_URL);
+        ClientResponse response =
+            feedResource.contentType(MediaType.APPLICATION_ATOM_XML).put(changedEntry);
+        if (response.getStatusCode() == 200) {
+            System.out.println("\t" + "Change successful\n");
+        } else {
+            System.out.println("\t" + "Response code received from server = "
+                + response.getStatusCode()
+                + "\n");
+        }
+    }
+
+    private static void getEntry() {
+        Resource feedResource = restClient.resource(ENTRY_URL);
+        AtomEntry atomEntry = feedResource.accept(MediaType.APPLICATION_ATOM_XML).get(AtomEntry.class);
+        System.out.print("\t");
+        displayEntry(atomEntry);
+    }
+
+    private static void deleteEntry() {
+        Resource feedResource = restClient.resource(ENTRY_URL);
+        ClientResponse response = feedResource.delete();
+        if (response.getStatusCode() == 204) {
+            System.out.println("\t" + "Delete successful\n");
+        } else {
+            System.out.println("\t" + "Response code received from server = "
+                + response.getStatusCode()
+                + "\n");
+        }
+    }
+
+    private static void displayEntry(AtomEntry atomEntry) {
+        System.out.println(atomEntry.getTitle().getValue());
+        System.out.println("\t" + atomEntry.getUpdated().toString());
+        System.out.println("\t" + atomEntry.getSummary().getValue() + "\n");
+    }
+}
diff --git a/src/site/resources/1.0/html/attachments/2852765/4751362.java b/src/site/resources/1.0/html/attachments/2852765/4751362.java
new file mode 100644
index 0000000..58ba2cf
--- /dev/null
+++ b/src/site/resources/1.0/html/attachments/2852765/4751362.java
@@ -0,0 +1,155 @@
+package myPackage;
+
+import java.util.Date;
+import java.util.List;
+
+import org.apache.abdera.Abdera;
+import org.apache.abdera.factory.Factory;
+import org.apache.abdera.model.Collection;
+import org.apache.abdera.model.Document;
+import org.apache.abdera.model.Entry;
+import org.apache.abdera.model.Feed;
+import org.apache.abdera.model.Service;
+import org.apache.abdera.model.Workspace;
+import org.apache.abdera.protocol.client.AbderaClient;
+import org.apache.abdera.protocol.client.ClientResponse;
+import org.apache.abdera.protocol.client.RequestOptions;
+
+public class APP_Client_Abdera {
+    private static String     SERVICE_URL = "http://localhost:8080/APP_Server_Abdera/blog";
+    private static String     FEED_URL    = "http://localhost:8080/APP_Server_Abdera/blog/entries";
+    private static String     ENTRY_URL   = "http://localhost:8080/APP_Server_Abdera/blog/entries/kan_ocr";
+
+    private static Abdera abdera      = new Abdera();
+
+    public static void main(String[] args) {
+        System.out.println("--- I. Contents of Service Document at " + SERVICE_URL + " ---");
+        getServiceDocument();
+
+        System.out.println("--- II. Contents of Feed Document at " + FEED_URL + " ---");
+        getEntries();
+
+        Entry newEntry = createNewEntry();
+        System.out.println("--- III. Posting a new entry into the Feed ---");
+        postEntry(newEntry);
+        System.out.println("--- IV. Contents of Feed Document after Post ---");
+        getEntries();
+
+        Entry changedEntry = changeEntry(newEntry);
+        System.out.println("--- V. Changing the last entry posted ---");
+        putEntry(changedEntry);
+        System.out.println("--- VI. Entry content after change ---");
+        getEntry();
+
+        System.out.println("--- VII. Deleting the last entry posted ---");
+        deleteEntry();
+        System.out.println("--- VIII. Contents of Feed Document after Delete ---");
+        getEntries();
+    }
+
+    private static void getServiceDocument() {
+        AbderaClient abderaClient = new AbderaClient(abdera);
+        Document<Service> introspection = abderaClient.get(SERVICE_URL).getDocument();
+        Service service = introspection.getRoot();
+        List<Workspace> workspaces = service.getWorkspaces();
+        for (Workspace workspace : workspaces) {
+            System.out.println("\t" + workspace.getTitle());
+            List<Collection> collections = workspace.getCollections();
+            for (Collection collection : collections) {
+                System.out.println("\t" + collection.getTitle() + "\t:\t" + collection.getHref());
+            }
+            System.out.print("\n");
+        }
+    }
+
+    private static void getEntries() {
+        AbderaClient abderaClient = new AbderaClient(abdera);
+        RequestOptions opts = new RequestOptions();
+        opts.setContentType("application/atom+xml;type=feed");
+        ClientResponse response = abderaClient.get(FEED_URL, opts);
+        Feed feed = (Feed)response.getDocument().getRoot();
+        int counter = 1;
+        System.out.println("\t" + feed.getTitle() + "\n");
+        List<Entry> entries = feed.getEntries();
+        for (Entry atomEntry : entries) {
+            System.out.print("\t" + counter++ + ") ");
+            displayEntry(atomEntry);
+        }
+    }
+
+    private static Entry createNewEntry() {
+        Factory factory = abdera.getFactory();
+        Entry entry = factory.newEntry();
+        entry.setId("kan_ocr");
+        entry.setTitle("New algorithm to detect and split merged characters in Kannada OCR");
+        entry.addLink(FEED_URL + "/kan_ocr");
+        entry.setUpdated(new Date());
+        entry.setPublished(new Date());
+        entry.setSummary("The new algorithm to detect and split merged characters in " +
+                        "Kannada OCR is yeilding good results. We will soon be publishing the " +
+                        "algorithm and results in one of the upcoming conferences.");
+        entry.addAuthor("ShivaHR");
+        return entry;
+    }
+
+    private static Entry changeEntry(Entry curEntry) {
+        curEntry.setTitle("A new algorithm to detect and split merged characters in Kannada OCR will be published soon!");
+        return curEntry;
+    }
+
+    private static void postEntry(Entry newEntry) {
+        AbderaClient abderaClient = new AbderaClient(abdera);
+        RequestOptions opts = new RequestOptions();
+        opts.setContentType("application/atom+xml;type=entry");
+        ClientResponse response = abderaClient.post(FEED_URL, newEntry, opts);
+        if (response.getStatus() == 201) {
+            System.out.println("\t" + "Post successful\n");
+        } else {
+            System.out.println("\t" + "Response code received from server = "
+                + response.getStatus()
+                + "\n");
+        }
+    }
+
+    private static void putEntry(Entry changedEntry) {
+        AbderaClient abderaClient = new AbderaClient(abdera);
+        RequestOptions opts = new RequestOptions();
+        opts.setContentType("application/atom+xml;type=entry");
+        ClientResponse response = abderaClient.put(ENTRY_URL, changedEntry.getDocument(), opts);
+        if (response.getStatus() == 200) {
+            System.out.println("\t" + "Change successful\n");
+        } else {
+            System.out.println("\t" + "Response code received from server = "
+                + response.getStatus()
+                + "\n");
+        }
+    }
+
+    private static void getEntry() {
+        AbderaClient abderaClient = new AbderaClient(abdera);
+        RequestOptions opts = new RequestOptions();
+        opts.setContentType("application/atom+xml;type=entry");
+        ClientResponse response = abderaClient.get(ENTRY_URL, opts);
+        Entry entry = (Entry)response.getDocument().getRoot();
+        System.out.print("\t");
+        displayEntry(entry);
+    }
+
+    private static void deleteEntry() {
+        AbderaClient abderaClient = new AbderaClient(abdera);
+        ClientResponse response = abderaClient.delete(ENTRY_URL);
+        if (response.getStatus() == 204) {
+            System.out.println("\t" + "Delete successful\n");
+        } else {
+            System.out.println("\t" + "Response code received from server = "
+                + response.getStatus()
+                + "\n");
+        }
+    }
+
+    private static void displayEntry(Entry atomEntry) {
+        System.out.println(atomEntry.getTitle());
+        System.out.println("\t" + atomEntry.getUpdated().toString());
+        System.out.println("\t" + atomEntry.getSummary() + "\n");
+    }
+}
diff --git a/src/site/resources/1.0/html/images/border/spacer.gif b/src/site/resources/1.0/html/images/border/spacer.gif
new file mode 100644
index 0000000..fc25609
--- /dev/null
+++ b/src/site/resources/1.0/html/images/border/spacer.gif
Binary files differ
diff --git a/src/site/resources/1.0/html/images/icons/bullet_blue.gif b/src/site/resources/1.0/html/images/icons/bullet_blue.gif
new file mode 100644
index 0000000..25bfa0c
--- /dev/null
+++ b/src/site/resources/1.0/html/images/icons/bullet_blue.gif
Binary files differ
diff --git a/src/site/resources/1.0/html/images/icons/emoticons/check.gif b/src/site/resources/1.0/html/images/icons/emoticons/check.gif
new file mode 100644
index 0000000..28bb999
--- /dev/null
+++ b/src/site/resources/1.0/html/images/icons/emoticons/check.gif
Binary files differ
diff --git a/src/site/resources/1.0/html/images/icons/emoticons/information.gif b/src/site/resources/1.0/html/images/icons/emoticons/information.gif
new file mode 100644
index 0000000..072ab66
--- /dev/null
+++ b/src/site/resources/1.0/html/images/icons/emoticons/information.gif
Binary files differ
diff --git a/src/site/resources/1.0/html/images/icons/emoticons/warning.gif b/src/site/resources/1.0/html/images/icons/emoticons/warning.gif
new file mode 100644
index 0000000..1c9883b
--- /dev/null
+++ b/src/site/resources/1.0/html/images/icons/emoticons/warning.gif
Binary files differ
diff --git a/src/site/resources/1.0/html/index.html b/src/site/resources/1.0/html/index.html
new file mode 100644
index 0000000..1d92c90
--- /dev/null
+++ b/src/site/resources/1.0/html/index.html
@@ -0,0 +1,347 @@
+
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+	<head>
+		<title>WINK (Apache Wink) Test</title>
+		<link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    </head>
+
+	<body>
+		<table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+			<tr>
+				<td valign="top" class="pagebody">
+					<center>
+						<h1><font color="#0050B2">Space Details:</font></h1>
+					</center>
+					<table class="grid" border="1" cellpadding="0" cellspacing="0" width="100%">
+						<tr>
+							<td width="200">
+								<b>Key:</b>
+							</td>
+							<td>WINK</td>
+						</tr>
+						<tr>
+							<td width="200">
+								<b>Name:</b>
+							</td>
+							<td>Apache Wink</td>
+						</tr>
+						<tr>
+							<td width="200">
+								<b>Description:</b>
+							</td>
+							<td></td>
+						</tr>
+						<tr>
+							<td width="200">
+								<b>Creator (Creation Date):</b>
+							</td>
+							<td>dims (Jun 01, 2009)</td>
+						</tr>
+						<tr>
+							<td width="200">
+								<b>Last Modifier (Mod. Date):</b>
+							</td>
+							<td>dims (Jun 01, 2009)</td>
+						</tr>
+					</table>
+                    <br/>
+                    <br/>
+                    <p>
+                        <h2><font color="#0050B2">Available Pages:</font></h2>
+                            <ul>
+                        <li>
+        
+                    <a href="Apache Wink Developer Guide.html">Apache Wink Developer Guide</a>
+        
+                            <ul>
+                    <li>
+        
+                    <a href="1 Introduction to Apache Wink.html">1 Introduction to Apache Wink</a>
+        
+                    </li>
+            </ul>
+                    <ul>
+                    <li>
+        
+                    <a href="2 Apache Wink Building Blocks.html">2 Apache Wink Building Blocks</a>
+        
+                    </li>
+            </ul>
+                    <ul>
+                    <li>
+        
+                    <a href="3 Getting Started with Apache Wink.html">3 Getting Started with Apache Wink</a>
+        
+                    </li>
+            </ul>
+                    <ul>
+                    <li>
+        
+                    <a href="4 JAX-RS Concepts.html">4 JAX-RS Concepts</a>
+        
+                            <ul>
+                    <li>
+        
+                    <a href="JAX-RS Application Configuration.html">JAX-RS Application Configuration</a>
+        
+                    </li>
+            </ul>
+                    <ul>
+                    <li>
+        
+                    <a href="JAX-RS Caching.html">JAX-RS Caching</a>
+        
+                    </li>
+            </ul>
+                    <ul>
+                    <li>
+        
+                    <a href="JAX-RS Getting Started.html">JAX-RS Getting Started</a>
+        
+                    </li>
+            </ul>
+                    <ul>
+                    <li>
+        
+                    <a href="JAX-RS Resources, HTTP Methods, and Paths.html">JAX-RS Resources, HTTP Methods, and Paths</a>
+        
+                    </li>
+            </ul>
+                    <ul>
+                    <li>
+        
+                    <a href="JAX-RS Request and Response Entities.html">JAX-RS Request and Response Entities</a>
+        
+                    </li>
+            </ul>
+                    <ul>
+                    <li>
+        
+                    <a href="JAX-RS Parameters.html">JAX-RS Parameters</a>
+        
+                    </li>
+            </ul>
+                    <ul>
+                    <li>
+        
+                    <a href="JAX-RS HTTP Headers.html">JAX-RS HTTP Headers</a>
+        
+                    </li>
+            </ul>
+                    <ul>
+                    <li>
+        
+                    <a href="JAX-RS Content Negotiation.html">JAX-RS Content Negotiation</a>
+        
+                    </li>
+            </ul>
+                    <ul>
+                    <li>
+        
+                    <a href="JAX-RS Context Information.html">JAX-RS Context Information</a>
+        
+                    </li>
+            </ul>
+            </li>
+            </ul>
+                    <ul>
+                    <li>
+        
+                    <a href="5 Apache Wink Server.html">5 Apache Wink Server</a>
+        
+                            <ul>
+                    <li>
+        
+                    <a href="5.1 Registration and Configuration.html">5.1 Registration and Configuration</a>
+        
+                    </li>
+            </ul>
+                    <ul>
+                    <li>
+        
+                    <a href="5.2 Annotations.html">5.2 Annotations</a>
+        
+                    </li>
+            </ul>
+                    <ul>
+                    <li>
+        
+                    <a href="5.3 Resource Matching.html">5.3 Resource Matching</a>
+        
+                    </li>
+            </ul>
+                    <ul>
+                    <li>
+        
+                    <a href="5.4 APP Service Document.html">5.4 APP Service Document</a>
+        
+                    </li>
+            </ul>
+                    <ul>
+                    <li>
+        
+                    <a href="5.5 Spring Integration.html">5.5 Spring Integration</a>
+        
+                    </li>
+            </ul>
+                    <ul>
+                    <li>
+        
+                    <a href="5.6 WebDAV Extension.html">5.6 WebDAV Extension</a>
+        
+                    </li>
+            </ul>
+                    <ul>
+                    <li>
+        
+                    <a href="5.7 Handler Chain - Runtime Extension.html">5.7 Handler Chain - Runtime Extension</a>
+        
+                    </li>
+            </ul>
+                    <ul>
+                    <li>
+        
+                    <a href="5.8 Link Builder.html">5.8 Link Builder</a>
+        
+                    </li>
+            </ul>
+                    <ul>
+                    <li>
+        
+                    <a href="5.9 Assets.html">5.9 Assets</a>
+        
+                    </li>
+            </ul>
+                    <ul>
+                    <li>
+        
+                    <a href="5.10 Admin Views.html">5.10 Admin Views</a>
+        
+                    </li>
+            </ul>
+            </li>
+            </ul>
+                    <ul>
+                    <li>
+        
+                    <a href="6 Apache Wink Client.html">6 Apache Wink Client</a>
+        
+                            <ul>
+                    <li>
+        
+                    <a href="6.1 Getting Started with Apache Wink Client.html">6.1 Getting Started with Apache Wink Client</a>
+        
+                    </li>
+            </ul>
+                    <ul>
+                    <li>
+        
+                    <a href="6.2 Configuring the Apache Wink Client.html">6.2 Configuring the Apache Wink Client</a>
+        
+                    </li>
+            </ul>
+                    <ul>
+                    <li>
+        
+                    <a href="6.3 Input and Output Stream Adapters.html">6.3 Input and Output Stream Adapters</a>
+        
+                    </li>
+            </ul>
+            </li>
+            </ul>
+                    <ul>
+                    <li>
+        
+                    <a href="7 Apache Wink Representations.html">7 Apache Wink Representations</a>
+        
+                            <ul>
+                    <li>
+        
+                    <a href="7.1 JSON.html">7.1 JSON</a>
+        
+                    </li>
+            </ul>
+                    <ul>
+                    <li>
+        
+                    <a href="7.2 APP.html">7.2 APP</a>
+        
+                    </li>
+            </ul>
+                    <ul>
+                    <li>
+        
+                    <a href="7.3 Atom.html">7.3 Atom</a>
+        
+                    </li>
+            </ul>
+                    <ul>
+                    <li>
+        
+                    <a href="7.4 RSS.html">7.4 RSS</a>
+        
+                    </li>
+            </ul>
+                    <ul>
+                    <li>
+        
+                    <a href="7.5 HTML.html">7.5 HTML</a>
+        
+                    </li>
+            </ul>
+                    <ul>
+                    <li>
+        
+                    <a href="7.6 CSV.html">7.6 CSV</a>
+        
+                    </li>
+            </ul>
+                    <ul>
+                    <li>
+        
+                    <a href="7.7 OpenSearch.html">7.7 OpenSearch</a>
+        
+                    </li>
+            </ul>
+                    <ul>
+                    <li>
+        
+                    <a href="7.8 MultiPart.html">7.8 MultiPart</a>
+        
+                    </li>
+            </ul>
+            </li>
+            </ul>
+                    <ul>
+                    <li>
+        
+                    <a href="Appendix A - Feeds Support.html">Appendix A - Feeds Support</a>
+        
+                    </li>
+            </ul>
+                    <ul>
+                    <li>
+        
+                    <a href="Appendix B - Google App Engine.html">Appendix B - Google App Engine</a>
+        
+                    </li>
+            </ul>
+            </li>
+            </ul>
+                    </p>
+				</td>
+			</tr>
+		</table>
+		<table border="0" cellpadding="0" cellspacing="0" width="100%">
+			<tr>
+				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
+			</tr>
+			<tr>
+				<td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
+			</tr>
+		</table>
+	</body>
+</html>
\ No newline at end of file
diff --git a/src/site/resources/1.0/html/styles/site.css b/src/site/resources/1.0/html/styles/site.css
new file mode 100644
index 0000000..46bf4d1
--- /dev/null
+++ b/src/site/resources/1.0/html/styles/site.css
@@ -0,0 +1,4316 @@
+
+/* Confluence master stylesheet */
+body {
+    margin: 0;
+    padding: 0;
+    background-color: #f0f0f0;
+}
+body.content-preview {
+    background-color: #fff;
+    border: none;
+}
+
+body, p, td, table, tr, .bodytext, .stepfield {
+    font-size: 10pt;
+    line-height: 1.3;
+    color: #000;
+    font-weight: normal;
+}
+
+#PageContent {
+    text-align: left;
+    background-color: #fff;
+    padding: 0 0 20px 0;
+    margin: 0;
+}
+
+.print-only {
+    display: none;
+}
+
+.monospaceInput {
+    font: 10pt monospace;
+}
+
+pre {
+    padding: 0;
+    margin: 10px 0;
+    text-align: left;
+    overflow: auto;
+}
+
+.helpheading {
+    font-weight: bold;
+    background-color: #d0d9bd;
+    border-bottom-width: 1px;
+    border-bottom-style: solid;
+    padding: 4px;
+    margin: 0;
+    margin-top: 10px;
+}
+.helpcontent {
+    padding: 4px 4px 20px 4px;
+    background-color: #f5f7f1;
+}
+
+.help-section-div .helpheading {
+    margin: 0;
+}
+.help-section-div {
+    margin-bottom: 2em;
+}
+
+#print-friendly-help-toggle {
+    position: absolute;
+    top: 1em;
+    right: 1em;
+    text-indent: -999em;
+    width: 16px;
+    height: 16px;
+    background-image: url("../../../images/icons/print_16.gif");
+    background-repeat: no-repeat;
+    outline: none;
+}
+
+#commentsHide {
+    color: #666;
+    font-weight: normal;
+}
+
+#showingComments {
+    border: none;
+    font-size: 10pt;
+}
+
+.pageSection {
+    margin-top: 10px;
+    clear: both;
+}
+
+
+.pageSectionHeader {
+    margin-bottom: 5px;
+    padding: 2px 0;
+    border-bottom-width: 1px;
+    border-bottom-style: solid;
+}
+
+.pageSectionHeader.summary {
+    border-bottom: none;
+}
+
+.pageSectionBody {
+    margin-top: 4px;
+}
+
+a.grey:link { color: #666; }
+a.grey:visited { color: #666; }
+a.grey:active { color: #666; }
+a.grey:hover { color: #666; }
+
+.more-comments {
+    font-size: 10pt;
+    color: #dde2e6;
+}
+
+.commentBox  {
+    padding: 0;
+    margin: 10px 0;
+    overflow: auto;
+}
+
+.commentBox table.comment {
+    border: 0;
+    border-bottom: #f0f0f0 1px solid;
+    border-top: #f0f0f0 1px solid;
+    margin: 0;
+    padding: 0;
+    width: 100%;
+    border-collapse: collapse;
+}
+
+.commentBox .commentinfo {
+    background-color: #f0f0f0;
+    vertical-align: top;
+    padding: 12px;
+}
+
+.commentBox .commentinfo .smalltext {
+    line-height: 11pt;
+}
+
+.commentBox .commentphoto {
+    background-color: #f0f0f0;
+    text-align: right;
+    vertical-align:top;
+    padding: 12px;
+}
+
+.commentBox .commentphoto img {
+    border: none;
+}
+
+.commentBox .commentname a:hover {
+    text-decoration: underline;
+}
+
+.commentdate {
+    margin-top: 3px;
+}
+
+.commentBox .commentdate, .commentdate a {
+    color: #000;
+    text-decoration: none;
+    font-size: 9pt;
+}
+
+.commentdate a:hover {
+    text-decoration: underline
+}
+
+.commentBox .smalltext {
+    line-height: 10pt;
+}
+
+.commentBox .smalltext a {
+    text-decoration: none;
+}
+
+.commentBox .smalltext a:hover {
+    text-decoration: underline;
+}
+
+.commentBox td.commentdetails {
+    vertical-align: top;
+    padding: 0 10px;
+}
+
+.commentBox td.commentActions {
+    padding: 0 10px 10px 10px;
+    vertical-align: bottom;
+}
+
+.commentThread {
+    clear: both; /* clear both in case there are floats or aligned images in the content that sits above the comment thread */
+}
+
+#replying .commentdetails {
+    padding: 15px 0 15px 25px
+}
+
+#replying .commentinfo {
+    background-color: #a0a0a0;
+    color: #f0f0f0;
+}
+
+#replying .commentdate, #replying .commentdate a {
+    color: #f0f0f0;
+}
+
+#replying .commentname a {
+    color: #f0f0f0;
+}
+
+#replying .commentphoto {
+    background-color: #a0a0a0;
+}
+
+#replying table.comment {
+    border-bottom-color: #a0a0a0;
+    border-top-color: #a0a0a0;
+}
+
+#addition .commentdetails {
+    padding: 15px 30px 10px 30px;
+}
+
+#addition .commentinfo {
+    background-color: #a0a0a0;
+    color: #f0f0f0;
+}
+
+#addition .commentname a {
+    color: #f0f0f0;
+}
+
+#addition .commentdate, #addition .commentdate a {
+    color: #f0f0f0;
+}
+
+#addition .commentphoto {
+    background-color: #a0a0a0;
+}
+
+#addition table.comment {
+    border-bottom-color: #a0a0a0;
+    border-top-color: #a0a0a0;
+}
+
+#focusedComment .commentBox td.commentdetails, #focusedComment td.commentActions {
+    background: #ffffd7;
+}
+
+.anonymousAlert, .lockAlert {
+    background-color: #f0f0f0;
+    border: 1px dashed red;
+    font-size: 11px;
+    padding: 10px 5px;
+    margin: 4px;
+    line-height: 13px;
+}
+
+.lockAlert {
+    width: 50%;
+}
+
+.navmenu {
+    border: 1px solid #ccc;
+}
+
+.menuheading {
+    font-weight: bold;
+    background-color: #f0f0f0;
+    border-bottom-width: 1px;
+    border-bottom-style: solid;
+    padding: 4px 4px 2px 4px;
+}
+
+.menuitems {
+    padding: 4px 4px 20px 4px;
+}
+
+.rightpanel {
+    background: #f0f0f0;
+    -moz-border-radius: 3px; /* Firefox */
+    -webkit-border-radius: 3px; /* Safari */
+    border-radius: 3px; /* CSS3 (Opera?) */
+    padding: .9em;
+}
+
+#helpheading {
+    text-align: left;
+    color: #333;
+    padding: .1em;
+    font-size: 13px;
+    border-bottom: 1px solid #ccc;
+    padding-bottom: .2em;
+    margin: -.1em
+}
+
+#helpcontent {
+    margin-top: .9em;
+}
+
+#helpcontent p {
+    margin-bottom: 0;
+    margin-top: .9em;
+}
+
+#helpcontent ul {
+    padding-left: 1.3em;
+}
+
+#helpcontent dl {
+    margin-top: 0;
+}
+
+#helpcontent dl dd {
+    margin: 0;
+    color: #333;
+    font-size: 90%;
+    margin-bottom: .2em;
+}
+
+#helpcontent dl dd code,
+#helpcontent dl dd pre {
+    color: #666;
+    margin: 0;
+    padding: 0;
+}
+
+#helpcontent dl dd.text-formatting code {
+    display: inline-block;
+    width: 6em;
+}
+
+#helpcontent dl dt {
+    margin-top: 1em;
+}
+#helpcontent dl dt.first {
+    margin-top: 0;
+}
+
+.helptab-unselected {
+    font-weight: bold;
+    padding: 5px;
+    background-color: #f5f7f1;
+}
+.helptab-selected {
+    font-weight: bold;
+    background-color: #d0d9bd;
+    padding: 5px;
+}
+.helptabs {
+    margin: 0;
+    background-color: #f5f7f1;
+    padding: 5px;
+}
+
+#profileSummary h3 {
+    font-weight: bold;
+    font-size: 10pt;
+    margin: 12px 0 4px;
+    padding: 0;
+}
+#profileSummary ul {
+    list-style-type: none;
+    margin: 0;
+    padding: 0;
+}
+
+.pageheader {
+    padding: 5px 5px 5px 0;
+    border-bottom-width: 1px;
+    border-bottom-style: solid;
+}
+
+.pagetitle {
+    font-size: 18pt;
+    line-height: normal;
+    font-weight: bold;
+}
+
+.newpagetitle {
+    color: #ccc !important;
+}
+
+.steptitle {
+    font-size: 18px;
+    font-weight: bold;
+    margin-bottom: 7px;
+}
+
+.substeptitle {
+    font-size: 12px;
+    font-weight: bold;
+    margin: 2px 4px 4px 4px;
+    padding: 2px 4px 1px 4px;
+}
+
+.stepdesc {
+    font-size: 10pt;
+    line-height: 13pt;
+    font-weight: normal;
+    color: #666;
+    margin-top: 7px;
+    margin-bottom: 7px;
+}
+
+.steplabel {
+    font-weight: bold;
+    margin-right: 4px;
+    color: black;
+    float: left;
+    width: 15%;
+    text-align: right;
+}
+
+.stepfield {
+    background: #f0f0f0;
+    padding: 5px;
+}
+
+.submitButtons{
+    margin-top:5px;
+    text-align:right;
+}
+
+.formtitle {
+    font-size: 12px;
+    font-weight: bold;
+}
+
+.sectionbottom {
+    border-bottom-width: 1px;
+    border-bottom-style: solid;
+}
+
+.topRow {
+    border-top-width: 2px;
+    border-top-style: solid;
+}
+
+.tabletitle {
+    font-size: 10pt;
+    font-weight: bold;
+    padding: 3px 0 2px 0;
+    margin: 8px 4px 2px 0;
+    border-bottom-width: 2px;
+    border-bottom-style: solid;
+}
+
+.tabletitleops {
+    float: right;
+}
+.tabletitleops, .tabletitleops a, .tabletitleops img {
+    vertical-align: middle;
+}
+.tabletitleops img {
+    border: none;
+}
+
+.fullWidth {
+    width: 100%;
+}
+
+.pagesubheading {
+    color: #666;
+    font-size: 10px;
+    padding: 0 0 5px 0;
+}
+
+hr {
+    color: #3c78b5;
+    height: 1px;
+}
+
+h1 a:link, h1 a:visited, h1 a:active {
+    text-decoration: none;
+}
+
+.logocell {
+    padding: 10px;
+}
+
+input {
+    font-family: Helvetica, Arial, sans-serif;
+    font-size: 10pt;
+    color: #000;
+}
+
+textarea, textarea.editor {
+    font-family: Arial, Helvetica, sans-serif;
+    font-size: 10pt;
+    color: #333;
+}
+
+.spacenametitle-printable {
+    font: 20px Impact, Arial, Helvetica;
+    font-weight: 100;
+    line-height: 25px;
+    margin: 0;
+}
+
+.spacenametitle-printable a,
+.spacenametitle-printable a:visited {
+    text-decoration: none;
+}
+
+.blogDate {
+    font-weight: bold;
+    text-decoration: none;
+    color: black;
+}
+
+.blogSurtitle {
+    background: #f0f0f0;
+    border: 1px solid #ddd;
+    padding: 3px;
+    margin: 1px 1px 10px 1px;
+}
+
+a.blogHeading {
+    font-size: 20pt;
+    line-height: normal;
+    font-weight: bold;
+    text-decoration: none;
+}
+
+.blogHeading a:hover {
+   text-decoration: underline;
+}
+
+.endsection {
+    text-align: right;
+    color: #666;
+    margin-top: 10px;
+}
+.endsectionleftnav {
+    text-align: right;
+    color: #666;
+    margin-top: 10px;
+}
+
+h1, h2, h3, h4, h5, h6 {
+    line-height: normal;
+    font-weight: bold;
+    padding: 2px;
+}
+
+h1 {
+    font-size: 24px;
+    margin: 36px 0 4px 0;
+}
+
+h2 {
+    font-size: 18px;
+    margin: 27px 0 4px 0;
+}
+
+h3 {
+    font-size: 14px;
+    margin: 21px 0 4px 0;
+}
+
+h4 {
+    font-size: 12px;
+    margin: 18px 0 4px 0;
+}
+
+h5 {
+    font-size: 10px;
+    margin: 14px 0 4px 0;
+}
+
+h6 {
+    font-size: 8px;
+    margin: 14px 0 4px 0;
+}
+
+.smallfont {
+    font-size: 10px;
+}
+.descfont {
+    color: #666;
+    font-size: 10px;
+}
+.smallerfont {
+    font-size: 9px;
+}
+.smalltext {
+    color: #666;
+    font-size: 12px;
+}
+.smalltext a {
+    color: #666;
+}
+.greyText
+{
+    color: #666;
+}
+.smalltext-blue {
+    font-size: 8pt;
+    color: #3c78b5;
+}
+.surtitle {
+    margin-left: 1px;
+    margin-bottom: 5px;
+    font-size: 14px;
+    color: #666;
+}
+
+/* css hack found here:  http://www.fo3nix.pwp.blueyonder.co.uk/tutorials/css/hacks/ */
+.navItemOver {
+    font-size: 10px;
+    font-weight: bold;
+    voice-family: "\'}\'";
+    voice-family: inherit;
+    cursor: pointer;
+}
+
+.navItem {
+    font-size: 10px;
+    font-weight: bold;
+    color: #fff;
+}
+
+.navItemOver a,
+.navItemOver a:visited,
+.navItemOver a:hover,
+.navItem a,
+.navItem a:hover,
+.navItem a:visited {
+    text-decoration: none;
+}
+
+div.padded {
+    padding: 4px;
+}
+
+div.thickPadded {
+    padding: 10px;
+}
+
+h3.macrolibrariestitle {
+    margin: 0;
+}
+
+div.centered {
+    text-align: center;
+    margin: 10px;
+}
+
+div.centered table {
+    margin: 0 auto;
+    text-align: left;
+}
+
+.tableview table {
+    margin: 0;
+}
+
+.tableview tr.alternateRow {
+    background: #f0f0f0;
+}
+
+.tableview th {
+    text-align: left;
+    font-size: 12px;
+    padding: 5px 0 0 5px;
+    border-bottom-width: 2px;
+    border-bottom-style: solid;
+}
+.tableview td {
+    text-align: left;
+    border-color: #ccc;
+    border-width: 0 0 1px 0;
+    border-style: solid;
+    margin: 0;
+    padding: 4px 10px 4px 5px;
+}
+
+.grid {
+    margin: 2px 0 5px 0;
+    border-collapse: collapse;
+}
+.grid th  {
+    border: 1px solid #ccc;
+    padding: 2px 4px 2px 4px;
+    background: #f0f0f0;
+    text-align: center;
+}
+.grid td  {
+    border: 1px solid #ccc;
+    padding: 3px 4px 3px 4px;
+}
+.gridHover {
+    background-color: #f9f9f9;
+}
+
+td.infocell {
+    background-color: #f0f0f0;
+}
+
+.label,
+label {
+    font-weight: bold;
+}
+a.label {
+    font-weight: normal;
+}
+
+.error {
+    background-color: #fcc;
+}
+
+.errorBox {
+    background-color: #fcc;
+    border: 1px solid #c00;
+    padding: 5px;
+    margin: 5px;
+}
+
+.errorMessage {
+    color: #c00;
+}
+
+.success {
+    background-color: #dfd;
+}
+
+.successBox {
+    background-color: #dfd;
+    border: 1px solid #090;
+    padding: 5px;
+    margin-top:5px;
+    margin-bottom:5px;
+}
+
+blockquote {
+    font-style: italic;
+    font-size: 10pt;
+    border-left-width: 1px;
+    border-left-style: solid;
+    padding: 0 20px;
+    margin: 10px 20px;
+}
+
+blockquote p {
+    font-size: 10pt;
+}
+
+blockquote em {
+    font-style: normal;
+}
+
+table.admin
+{
+    margin: 5px;
+    border-collapse: collapse;
+    width: 100%;
+}
+table.admin td, table.admin th
+{
+    width: 50%;
+    border: 1px solid #ccc;
+    padding: 5px;
+    vertical-align: top;
+}
+table.admin th
+{
+    background-color: #f0f0f0;
+    text-align: right;
+    font-weight: bold;
+}
+table.admin td.controls
+{
+    text-align: center;
+}
+
+div.small {
+    font-size: 9px;
+}
+
+h1.pagename {
+    margin-top: 0;
+}
+
+.loginform {
+    margin: 5px;
+    border: 1px solid #ccc;
+}
+
+/* The text how the "This is a preview" comment should be shown. */
+.previewnote {
+    text-align: center;
+    font-size: 11px;
+    color: red;
+}
+
+/* How the preview content should be shown */
+.previewcontent {
+    background: #e0e0e0;
+}
+
+/* How the system messages should be shown (DisplayMessage.jsp) */
+.messagecontent {
+    background: #e0e0e0;
+}
+
+/* How the "This page has been modified..." -comment should be shown. */
+.conflictnote { }
+
+.createlink,
+a.createlink,
+a.createlink:link,
+a.createlink:visited,
+a.createlink:active,
+a.createlink:hover {
+    color: maroon;
+}
+.templateparameter {
+    font-size: 9px;
+    color: #00008b;
+}
+
+.diffadded {
+    background: #dfd;
+    padding: 1px 1px 1px 4px;
+    border-left: 4px solid #006400;
+}
+.diffdeleted {
+    color: #999;
+    background: #fdd;
+    padding: 1px 1px 1px 4px;
+    border-left: 4px solid #8B0000;
+}
+.diffnochange {
+    padding: 1px 1px 1px 4px;
+    border-left: 4px solid #D3D3D3;
+}
+.differror {
+    background: #A52A2A;
+}
+.diff {
+    font-family: "lucida console", "courier new", monospace;
+    font-size: 12px;
+    line-height: 14px;
+}
+.diffaddedchars {
+    background-color:#9f9;
+    font-weight:bolder;
+}
+.diffremovedchars {
+    background-color:#f99;
+    text-decoration: line-through;
+    font-weight:bolder;
+}
+
+.greybackground {
+    background: #f0f0f0
+}
+
+.greybox {
+    border: 1px solid #ddd;
+    padding: 3px;
+    margin: 1px 1px 10px 1px;
+}
+
+.borderedGreyBox {
+    border: 1px solid #ccc;
+    background-color: #f0f0f0;
+    padding: 10px;
+}
+
+.greyboxfilled {
+    border: 1px solid #ddd;
+    background: #f0f0f0;
+    padding: 3px;
+    margin: 1px 1px 10px 1px;
+}
+
+.lightGreyBox {
+    background: #fafafa;
+}
+
+.navBackgroundBox {
+    padding: 5px;
+    font-size: 22px;
+    font-weight: bold;
+    color: white;
+    text-decoration: none;
+}
+
+.previewBoxTop {
+    background-color: #f0f0f0;
+    border-width: 1px 1px 0px 1px;
+    border-style: solid;
+    padding: 5px;
+    margin: 5px 0px 0px 0px;
+    text-align: center;
+}
+.previewContent {
+    background-color: #fff;
+    border-width: 0px 1px 0px 1px;
+    border-style: solid;
+    padding: 10px;
+    margin: 0px;
+}
+.previewBoxBottom {
+    background-color: #f0f0f0;
+    border-width: 0px 1px 1px 1px;
+    border-style: solid;
+    padding: 5px;
+    margin: 0px 0px 5px 0px;
+    text-align: center;
+}
+
+.functionbox {
+    background-color: #f0f0f0;
+    border: 1px solid;
+    padding: 3px;
+    margin: 1px 1px 10px 1px;
+}
+
+.functionbox-greyborder {
+    background-color: #f0f0f0;
+    border: 1px solid #ddd;
+    padding: 3px;
+    margin: 1px 1px 10px 1px;
+}
+
+.rowNormal {
+    background-color: #fff;
+ }
+
+.rowAlternate {
+    background-color: #f7f7f7;
+}
+
+/* used in the list attachments table */
+.rowAlternateNoBottomColor {
+    background-color: #f7f7f7;
+}
+
+.rowAlternateNoBottomColor td,
+.rowAlternateNoBottomNoColor td {
+    border-bottom: 0;
+}
+
+.rowHighlight {
+    background-color: #f0f0f0;
+}
+
+td.greenBar,
+td.greenbar,
+td.graybar,
+td.redbar,
+td.darkredbar {
+    font-size: 1em;
+    border: 1px solid #9c9c9c;
+    padding: 0;
+}
+
+td.greenBar,
+td.greenbar {
+    background: #00df00;
+}
+td.graybar {
+    background: #808080;
+}
+td.redbar {
+    background: #df0000;
+}
+td.darkredbar {
+    background: #af0000;
+}
+
+tr.testpassed {
+    font-size: 2px;
+    background: #dfd;
+    padding: 0;
+}
+tr.testfailed {
+    font-size: 2px;
+    background: #fdd;
+    padding: 0;
+}
+
+.toolbar  {
+    margin: 0;
+    border-collapse: collapse;
+}
+
+.toolbar td  {
+    border: 1px solid #ccc;
+    padding: 2px;
+    color: #ccc;
+}
+
+td.noformatting {
+    border-width: 0;
+    border-style: none;
+    text-align: center;
+    padding: 0;
+}
+
+/*
+ * Divs displaying the license information, if necessary.
+ */
+.license {
+    border-top: 1px solid #bbb;
+    text-align: center;
+    font-size: 10pt;
+    background-color: #ffffe0;
+}
+
+.license-eval, .license-none {
+    background-color: #fcc;
+}
+
+.license-eval b, .license-none b {
+    color: #900;
+}
+
+/*
+ * The shadow at the bottom of the page between the main content and the
+ * "powered by" section.
+ */
+.bottomshadow {
+    height: 12px;
+    background-image: url("../../../images/border/border_bottom.gif");
+    background-repeat: repeat-x;
+}
+
+/*
+ * Styling of the operations box
+ */
+.navmenu .operations li, .navmenu .operations ul {
+    list-style: none;
+    margin-left: 0;
+    padding-left: 0;
+}
+
+.navmenu .operations ul {
+    margin-bottom: 9px;
+}
+
+.navmenu .label {
+    font-weight: inherit;
+}
+
+/*
+ * Styling of ops as a toolbar
+ */
+.toolbar div {
+    display: none;
+}
+
+.toolbar .label {
+    display: none;
+}
+
+.toolbar .operations {
+    display: block;
+}
+
+.toolbar .operations ul {
+    display: inline;
+    list-style: none;
+    margin-left: 10px;
+    padding-left: 0;
+}
+
+.toolbar .operations li {
+    list-style: none;
+    display: inline;
+}
+
+.bold {
+    font-weight: bold;
+}
+
+
+/* space action links */
+.tabnav .spaceActionLinks {
+    float: right;
+    margin: 0;
+    display: block;
+}
+
+.tabnav .spaceActionLinks a span {
+    text-decoration: underline;
+}
+.tabnav .spaceActionLinks a.current {
+    color: black;
+}
+.tabnav .spaceActionLinks a.current span {
+    text-decoration: none;
+}
+
+.tabnav .spaceActionLinks a.current:link {
+    color: black;
+}
+
+.tabnav .spaceActionLinks a.current:visited {
+    color: black;
+}
+
+/* non tabs */
+.tabnav .nontabs {
+    padding: 0;
+    margin: 5px 0 0 3px;
+    display: block;
+    float: left;
+}
+
+/* editor tab customizations of the tabnav */
+#markupTab, #wysiwygTab, #previewTab {
+    font-size: 9pt;
+    padding: 3px 5px 2px; /* tab padding */
+    margin: 8px 0 0 3px; /* margin-top is used to 'push' the tab down to fill in any gaps */
+    font-weight: normal;
+}
+
+/* alphabet list */
+#squaretab {
+    margin-left: 0;
+    padding-left: 0;
+    white-space: nowrap;
+    font-family: Verdana, Helvetica, Arial, sans-serif;
+    font-size: 8pt;
+    line-height: 11pt
+}
+
+#squaretab li {
+    display: inline;
+    list-style-type: none;
+}
+
+#squaretab a {
+    padding: 5px 7px 3px 7px;
+    border-width: 1px;
+    border-style: solid;
+}
+
+#squaretab a:link,
+#squaretab a:visited {
+    color: #fff;
+    text-decoration: none;
+}
+
+#squaretab a:hover {
+    text-decoration: none;
+}
+
+#current {
+    background: #fff;
+    color: #000;
+}
+
+.blogcalendar th,
+.blogcalendar td  {
+    font-size: x-small;
+    font-weight: normal;
+    line-height: 140%;
+    padding: 2px;
+}
+
+table.blogcalendar {
+    border-width: 1px;
+    border-style: solid;
+}
+
+.blogcalendar th.calendarhead,
+a.calendarhead {
+    font-size: x-small;
+    font-weight: bold;
+    padding: 2px;
+    letter-spacing: 0.3em;
+    text-transform: uppercase;
+}
+
+.blogcalendar th.calendarhead,
+.calendarhead,
+.calendarhead:link,
+.calendarhead:visited,
+.calendarhead:active,
+.calendarhead:hover {
+    color: #fff;
+}
+
+.blogcalendar th {
+    font-size: x-small;
+    font-weight: bold;
+    padding: 2px;
+    background-color: #f0f0f0;
+}
+
+.blogcalendar td {
+    font-size: x-small;
+    font-weight: normal;
+}
+
+.searchGroup {
+    padding: 0 0 10px 0;
+    background: #f0f0f0;
+}
+
+.searchGroupHeading {
+    font-size: 10px;
+    font-weight: bold;
+    color: #fff;
+    padding: 2px 4px 1px 4px;
+}
+
+.searchItem {
+    padding: 1px 4px;
+}
+
+.searchItemSelected {
+    padding: 1px 4px;
+    font-weight: bold;
+    background: #ddd;
+}
+
+/* permissions page styles */
+.permissionHeading {
+    border-bottom: #bbb;
+    border-width: 0 0 1px 0;
+    border-style: solid;
+    font-size: 16px;
+    text-align: left;
+}
+
+.permissionTab,
+.permissionSuperTab,
+.permissionCell {
+    border-width: 0 0 0 1px;
+    border-style: solid;
+}
+
+.permissionTab {
+    font-size: 10px;
+}
+
+.permissionCell {
+    border-left: #bbb;
+    white-space: nowrap;
+}
+
+/* side menu highlighting (e.g. space content screen) */
+.optionPadded {
+    padding: 2px;
+}
+
+.optionSelected, .optionPadded.selected {
+    background-color: #ffc;
+    padding: 2px;
+    border: 1px solid #ddd;
+    margin: -1px;
+}
+
+.optionSelected a, .optionPadded.selected a {
+    font-weight: bold;
+    text-decoration: none;
+    color: black;
+}
+
+/* styles for extended operations */
+.greyLinks a:link,
+.greyLinks a:visited,
+.greyLinks a:active,
+.greyLinks a:hover {
+    color: #666;
+    text-decoration: underline;
+}
+
+.greyLinks {
+    color: #666;
+    padding: 10px;
+}
+
+.operation-links {
+    color: #666;
+    margin-bottom: 10px;
+}
+.operation-links a:link,
+.operation-links a:visited,
+.operation-links a:active,
+.operation-links a:hover {
+    color: #666;
+    text-decoration: underline;
+}
+
+.separatorLinks a:link,
+.separatorLinks a:visited,
+.separatorLinks a:active {
+    color: white;
+}
+
+.greynavbar {
+    background-color: #f0f0f0;
+    border-top-width: 1px;
+    border-top-style: solid;
+}
+
+div.headerField {
+    float: left;
+    width: auto;
+    height: 100%;
+}
+
+.headerFloat {
+    margin-left: auto;
+    width: 50%;
+}
+
+.headerFloatLeft {
+    float: left;
+    margin-right: 20px;
+    margin-bottom: 10px;
+}
+
+#headerRow {
+    padding: 10px;
+}
+
+.greyFormBox {
+    border: 1px solid #ccc;
+    padding: 5px;
+}
+
+.openPageHighlight {
+    background-color: #ffc;
+    padding: 2px;
+    border: 1px solid #ddd;
+}
+
+.editPageInsertLinks, .editPageInsertLinks a {
+    color: #666;
+    font-weight: bold;
+    font-size: 10px;
+}
+
+/* Style for label heatmap. */
+.top10 a {
+    font-weight: bold;
+    font-size: 2em;
+    color: #036;
+}
+.top25 a {
+    font-weight: bold;
+    font-size: 1.6em;
+    color: #036;
+}
+.top50 a {
+    font-size: 1.4em;
+    color: #036;
+}
+.top100 a {
+    font-size: 1.2em;
+    color: #036;
+}
+
+.heatmap {
+    list-style: none;
+    width: 95%;
+    margin: 0 auto;
+}
+
+.heatmap a {
+    text-decoration: none;
+}
+
+.heatmap a:hover {
+    text-decoration: underline;
+}
+
+.heatmap li {
+    display: inline;
+}
+
+.minitab {
+    padding: 5px;
+    margin: 1px 0 0 0;
+    border-bottom-width: 1px;
+    border-bottom-style: solid;
+    text-decoration: none;
+    float: none;
+}
+
+.minitab a {
+    padding: 5px 5px;
+    margin-left: 3px;
+    margin-top: 1px;
+    border-top: 1px solid;
+    border-right: 1px solid;
+    border-left: 1px solid;
+}
+
+#makeRichTextDefault, #makeMarkupDefault {
+    border: 0;
+    font-weight: normal;
+    text-decoration: none;
+}
+
+.minitab .selected {
+    background: white;
+    border-bottom: 1px solid white;
+    color: #000;
+    text-decoration: none;
+}
+.minitab .unselected {
+    border-bottom-width: 1px;
+    border-bottom-style: solid;
+    color: #fff;
+    text-decoration: none;
+}
+
+.minitab a.unselected:link,
+.minitab a.unselected:visited {
+    color: white;
+}
+.minitab a.selected:link,
+.minitab a.selected:visited {
+    color: black;
+}
+
+.minitabFont {
+    font-size: 9pt;
+    line-height: 9pt;
+}
+
+.linkerror {
+    background-color: #fcc;
+}
+
+a.labelOperationLink:link,
+a.labelOperationLink:active,
+a.labelOperationLink:visited,
+a.labelOperationLink:hover {
+    text-decoration: underline;
+}
+
+a.newLabel:link,
+a.newLabel:active,
+a.newLabel:visited,
+a.newLabel:hover {
+    background-color: #dfd;
+}
+
+ul.square {
+    list-style-type: square;
+}
+
+/* Label auto complete styles needed until we use requireResource properly in labels-include.vm */
+div.auto_complete {
+    width: 350px;
+    background: #fff;
+}
+div.auto_complete ul {
+    border: 1px solid #888;
+    margin: 0;
+    padding: 0;
+    width: 100%;
+    list-style-type: none;
+}
+div.auto_complete ul li {
+    margin: 0;
+    padding: 3px;
+}
+div.auto_complete ul li.selected {
+    background-color: #ffb;
+}
+div.auto_complete ul strong.highlight {
+    color: #800;
+    margin: 0;
+    padding: 0;
+}
+
+/******* Edit Page Styles *******/
+.toggleFormDiv{
+    border: 1px solid #a7a6aa;
+    background-color: white;
+    margin-top: 5px;
+}
+
+.toogleInfoDiv{
+    border: 1px solid #a7a6aa;
+    background-color: white;
+    display: none;
+    padding: 5px;
+    margin-top: 10px;
+}
+
+.inputSection{
+    margin-bottom: 20px;
+}
+
+#anonymous-warning {
+    padding: 15px 10px;
+}
+
+#editBox{
+   border: 1px solid #d3d3d3;
+   background-color: #f0f0f0;
+}
+
+.tab-navigation .current a {
+    color: #000;
+    background-color: #fff;
+    border-bottom-color: #fff;
+}
+
+.replaced {
+    background-color: #3c6;
+}
+
+.topPadding {
+    margin-top: 20px;
+}
+
+/* new form style */
+.form-block {
+    padding: 6px;
+}
+.form-error-block {
+    background: #fcc;
+    border-top: #f0f0f0 1px solid;
+    border-bottom: #f0f0f0 1px solid;
+    margin-bottom: 6px;
+    padding: 0 12px;
+}
+.form-element-large {
+    font-size: 16px;
+    font-weight: bold;
+}
+
+.form-element-small {
+    font-size: 12px;
+    font-weight: bold;
+}
+
+.form-header {
+    background: #ffffe0;
+    border-top: #f0f0f0 1px solid;
+    border-bottom: #f0f0f0 1px solid;
+    margin-bottom: 6px;
+    padding: 0 12px 0 12px;
+}
+.form-header p, .form-block p, .form-error-block p {
+    line-height: normal;
+    margin: 12px 0;
+}
+.form-example {
+    color: #888;
+    font-size: 11px;
+}
+.form-divider {
+    border-bottom: #ccc 1px solid;
+    margin-bottom: 6px;
+}
+.form-buttons {
+    margin-top: 6px;
+    border-top: #ccc 1px solid;
+    border-bottom: #ccc 1px solid;
+    background: #f0f0f0;
+    padding: 10px;
+    text-align: center;
+}
+.form-buttons input {
+    width: 100px;
+}
+.form-block .error {
+    padding: 6px;
+    margin-bottom: 6px;
+}
+
+form.edit-trust-app fieldset {
+    border: none;
+}
+form.edit-trust-app fieldset div {
+    border: none;
+    border-left: solid 11em #f0f0f0;
+    padding: 0;
+    float: left;
+}
+form.edit-trust-app fieldset label {
+    float: left;
+    width: 10em;
+    padding: 0;
+    margin: 5px 1em 0 -10.5em;
+    text-align: right;
+    clear: left;
+}
+form.edit-trust-app fieldset input,
+form.edit-trust-app fieldset textarea {
+     margin: 5px 0 0 0;
+     float: left;
+}
+form.edit-trust-app fieldset div.buttons {
+     border: none;
+     clear: left;
+     text-align: center;
+     float: none;
+}
+form.edit-trust-app fieldset div.buttons input {
+     float: none;
+}
+
+/*START AtlassianUI Forms*/
+
+form.aui {
+    border:1px solid #ddd;
+    background:#f0f0f0;
+    position:relative;
+    margin:2em 0 0;
+    padding:1em;
+}
+
+form.aui fieldset {
+    border:0;
+    margin:0;
+    padding:0;
+}
+
+form.aui fieldset legend span,form.single fieldset span.legend {
+    font-size:1.1em;
+    font-weight:700;
+    position:absolute;
+    top:-1.3em;
+    left:.5em;
+}
+
+form.aui fieldset label {
+    color:#000;
+    background:#f0f0f0;
+    display:block;
+    margin-bottom:.5em;
+}
+
+form.aui fieldset input {
+    display:block;
+    margin-left:0;
+}
+
+form.aui fieldset.submit input {
+    display:inline;
+    margin-top:.5em;
+}
+
+form.aui fieldset.inline label,form.single fieldset label {
+    width:auto;
+    float:left;
+}
+
+form.aui fieldset.inline a.icon,form.single fieldset a.icon {
+    float:left;
+    outline:0;
+    margin:.3em 1em 0 0;
+}
+
+form.aui fieldset.inline label.legend {
+    width:auto;
+    float:left;
+    margin:0;
+}
+
+form.aui fieldset.inline input,form.single fieldset input {
+    margin-right:.5em;
+}
+
+form.aui fieldset.inline input.inline {
+    display:inline;
+    margin-top:1.5em;
+}
+
+form.aui fieldset.inline fieldset.submit {
+    float:left;
+    width:auto;
+    padding:.7em 0 0;
+}
+
+form.single fieldset.submit input {
+    margin-top:.1em;
+}
+
+form.single fieldset fieldset.submit {
+    float:left;
+    width:auto;
+    padding:0;
+}
+
+form.aui .desc {
+    clear:both;
+    color:#666;
+    font-size:12px;
+    margin:-.2em 0 0;
+    padding:0 0 .3em;
+}
+
+form.aui .error {
+    font-weight:700;
+    color:#c00;
+    background:#f0f0f0;
+    display:inline;
+    margin:0;
+    padding:0;
+}
+
+
+/*END AtlassianUI Forms*/
+
+.status-red {
+    color: #800;
+    font-weight: bold;
+}
+.status-green {
+    color: #080;
+    font-weight: bold;
+}
+
+.person {
+    background-color: white;
+    width: 200px;
+    float: left;
+}
+.person td {
+    white-space: nowrap;
+}
+#viewAttachmentsDiv input.commentTextField {
+    width: 300px;
+}
+#blogcalendar span.fwdArrow {
+    float: right;
+    display: block;
+    width: 16px;
+    height: 16px;
+    background-repeat: no-repeat;
+    background-image: url(/images/icons/forwd_16.gif);
+}
+#blogcalendar span.fwdArrow span {
+    display: none;
+}
+#blogcalendar span.backArrow {
+    float: left;
+    display: block;
+    width: 16px;
+    height: 16px;
+    background-repeat: no-repeat;
+    background-image: url(/images/icons/back_16.gif);
+}
+#blogcalendar span.backArrow span {
+    display: none;
+}
+.pageInfoTable {
+    padding: 0;
+    margin: 0;
+    border: 0;
+    width: 100%;
+    border-collapse: collapse;
+}
+.pageInfoTable td {
+    padding: 3px;
+}
+.pageInfoTable tr.alternateRow {
+    background: #f0f0f0;
+}
+.pageInfoLayoutTable {
+    width: 100%;
+    border-collapse: collapse;
+}
+.pageInfoLayoutTable td {
+    padding: 5px;
+}
+
+.memoryusagebar {
+    width: 100%;
+}
+.memoryusagebar td {
+    border: none !important;
+    vertical-align: middle !important;
+}
+
+input.alignedCheckbox {
+    margin: 0;
+}
+
+div.spacer {
+    clear: both;
+}
+
+span.left {
+    float: left;
+    text-align: left;
+}
+
+span.right {
+    float: right;
+    text-align: right;
+}
+
+#permissionsDiv label {
+    font-weight: bold;
+    color: black;
+}
+
+.pagePermissionsTable {
+    border-collapse: collapse;
+    padding: 2px;
+    border-top: 1px solid #ccc;
+    border-bottom: 1px solid #ccc;
+    width: 100%;
+}
+
+.pagePermissionsTable tr td {
+    padding: 4px
+}
+
+.pagePermissionsErrorDiv {
+    margin: 6px 0 6px 0;
+    background-color: #fcc;
+    border-top: 1px solid #c00;
+    border-bottom: 1px solid #c00;
+    padding: 3px;
+}
+
+.pagePermissionsInput {
+    background-color: #ffffce;
+    padding: 4px;
+    margin-top: 4px;
+}
+
+#inheritedPermissionsBox {
+    margin: 8px 8px 0 8px;
+    padding: 8px;
+}
+
+.nobr {
+    white-space: nowrap;
+}
+
+label.normal {
+    font-weight: normal;
+    color: black
+}
+
+div.leftFloatMargined {
+    float: left;
+    margin-right: 2px
+}
+
+#entitySearchResults {
+    border-collapse: collapse;
+    background-color: #fafafa;
+    text-align: left;
+    width: 100%;
+}
+
+#entitySearchResults td {
+    border-top: 1px solid #ccc;
+    padding: 3px;
+    background-color: white;
+    vertical-align: top;
+}
+
+#entitySearchResults th {
+    color: #666;
+    padding: 3px;
+    white-space:nowrap;
+}
+
+#entitySearchResults .firstColumn {
+    width: 2%;
+    text-align: right;
+}
+
+#entitySearchResults .secondColumn {
+    width: 1px;
+    text-align: right;
+}
+
+a.paddedGreyDisabled {
+    background-color: #f0f0f0;
+    padding: 4px;
+    text-decoration: none;
+    color: #666;
+}
+
+a.grey {
+    color: #666;
+}
+
+div.topBottomMargin {
+    margin: 10px 0 10px 0
+}
+
+div.bottomMargin {
+    margin-bottom: 10px
+}
+
+table.spaceList {
+    border-collapse: collapse;
+}
+
+tr.spaceList td {
+    padding: 5px 0 5px 5px;
+    border-bottom: 1px solid #ccc;
+    vertical-align: top;
+}
+
+.spaceList .spaceDescription {
+    margin-top: 3px;
+    color: #666;
+}
+
+tr.spaceList .operations {
+    vertical-align: top;
+    padding-right: 5px;
+}
+
+.fontSizeBigger {
+    font-size: 11pt;
+    line-height: 14pt;
+}
+
+.fontSizeDefault {
+    line-height: 1.3em;
+}
+
+.fontSizeSmaller {
+    font-size: 10pt;
+    line-height: 13pt;
+}
+
+/* deprecated. TODO - check for use in themes and remove. */
+.fontSizeTiny {
+    font-family: Verdana, Helvetica, Arial, sans-serif;
+    font-size: 8pt;
+    line-height: 11pt;
+}
+
+table.dashboard td.left {
+    padding-right: 16px;
+}
+
+.clearBoth {
+    clear: both;
+}
+
+#labelInputSpan {
+    margin-top: 1px;
+}
+
+form#quickSearch {
+    margin: 2px;
+    padding: 0;
+}
+
+form#quickSearch input {
+    font-size: 10pt;
+    vertical-align: middle;
+}
+
+table.fullWidthBorderless
+{
+    width: 100%;
+    border: 0;
+    border-collapse: collapse;
+}
+
+/* Hacks for YUI menustuff */
+
+#pageMenusMenuBar {
+   padding: 4px;
+}
+
+#notificationFormat {
+    padding: 0;
+    margin: -9px 15px;
+}
+
+#notificationFormat h4 {
+    font-weight: normal;
+}
+
+#notificationFormat h2 {
+    font-weight: normal;
+}
+
+#rssFormat {
+    padding: 0;
+    margin: 6px 15px;
+}
+
+.notificationGreySide {
+    border-top: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+    margin: 0 0 5px 0;
+    padding: 3px 17px;
+}
+
+.notificationDigest {
+    padding: 0 17px;
+}
+
+.darkBlue {
+    color: #036;
+}
+
+.grey {
+    color: #666;
+}
+
+table.attachments {
+    width: 100%;
+    border-collapse: collapse;
+}
+
+table.attachments th {
+    white-space: nowrap;
+    width: 1%;
+}
+
+table.attachments td {
+    white-space: nowrap;
+    vertical-align: top;
+    width: 1%;
+}
+
+table.attachments td.comment, table.attachments th.comment, table.attachments td.attachedto, table.attachments th.attachedto {
+    white-space: normal;
+    width: auto;
+}
+
+table.attachments tr.historicalAttachmentRow {
+    background-color: #f7f7f7;
+}
+
+table.attachments tr.historicalAttachmentRow td,
+table.attachments tr.historicalAttachmentRow td a {
+    color: #666;
+}
+
+#contentOptions {
+    list-style: none;
+    margin: 0;
+    padding: 0;
+}
+
+#exportContentTree {
+    list-style-type: none;
+    margin: 5px 0;
+}
+
+#contentOptionAllNote {
+    color: #666;
+    font-weight: normal;
+}
+
+.hidden,
+li.hidden {
+    display: none;
+    visibility: hidden;
+}
+#main {
+    text-align: left;
+    background-color: #fff;
+}
+#header {
+    min-height: 1.8em;
+    line-height: 1.8;
+    margin: 0;
+    padding: 0;
+}
+#quick-search {
+    margin: 0;
+    padding: 0;
+}
+#quick-search fieldset {
+    float: right;
+    border: none;
+    margin: 0;
+    padding: 0;
+}
+#quick-search legend {
+    display: none;
+}
+#quick-search .placeholded {
+    color: #666;
+}
+#quick-search-query {
+    width: 13em;
+}
+/* default user navigation styles for themes using the old markup */
+#user-control-panel, #page-view-panel, #page-prefs-list {
+    list-style: none;
+    margin: 0;
+    padding: 0;
+}
+#user-control-panel li,
+#page-view-panel li,
+#page-prefs-list li,
+.userNavBar li { /* deprecated styles provided for themes written prior to 2.8 */
+    list-style: none;
+    display: inline;
+    color: #666;
+    font-size: 0.95em;
+    padding: 0 0 0 0.3em;
+}
+#user-control-panel a {
+    color: #666;
+}
+#user-control-panel li.first {
+    border:medium none;
+}
+#user-control-panel li {
+    border-left: 1px solid #666;
+    padding-left: 0.5em;
+}
+#page-view-panel li {
+    float: right;
+}
+
+#breadcrumbs {
+    list-style: none;
+    padding: 0;
+    margin: 0;
+    overflow: auto;
+}
+
+#breadcrumbs li {
+    white-space: nowrap;
+    display: inline;
+    float: left;
+    margin: 0 .2em 0 0;
+    line-height: 1.8em;
+    padding-left: 15px;
+    background: url(../../../images/decoration/white_breadcrumbs_indicator.png);
+    background-repeat: no-repeat;
+    background-position: 3px center;
+}
+
+#breadcrumbs li.first {
+    padding-left: 0;
+    background-image: none;
+}
+
+#breadcrumbs li a {
+    text-decoration: none;
+}
+
+#breadcrumbs li a:hover {
+    text-decoration: underline;
+}
+
+#breadcrumbs li span {
+    display: block;
+}
+
+#ellipsis strong {
+    cursor: pointer;
+    font-weight: normal;
+}
+
+#breadcrumbs li.hidden-crumb {
+    display: none;
+}
+
+/** Links */
+a.icon {
+    display: block;
+    min-height: 16px;
+    text-align: left;
+    text-indent: -9999em;
+    width: 16px;
+}
+
+a.print {
+    background: url(../../../images/icons/print_16.gif) no-repeat 50% 50%;
+}
+a.feed {
+    background: url(../../../images/icons/feed-icon-16x16.png) no-repeat 50% 50%;
+}
+a.pdf {
+    background: url(../../../images/icons/attachments/pdf.gif) no-repeat 50% 50%;
+}
+a.help {
+    background: url(../../../images/icons/help_16.gif) no-repeat 50% 50%;
+}
+a.add-user {
+    background: url(../../../images/icons/classic/16/125.png) no-repeat 50% 50%;
+}
+
+a.remove-user {
+    background: url(../../../images/icons/classic/16/123.png) no-repeat 50% 50%;
+}
+
+a.groups {
+    background: url(../../../images/icons/classic/16/127.png) no-repeat 50% 50%;
+}
+
+a.cancel {
+    background: url(../../../images/icons/emoticons/error.gif) no-repeat 50% 50%;
+}
+
+a.search-icon {
+    background: url(../../../images/icons/srch_16.gif) no-repeat 50% 50%;
+}
+
+a img {
+    border: none;
+}
+
+a.texticon {
+    min-height: 16px;
+    text-align: left;
+    padding:0 10px 0 20px;
+    background-position: 0 50%;
+    outline:0 none;
+}
+
+
+/* // Links **/
+#com-atlassian-confluence h1 {
+    line-height: 2;
+    margin: 0 0 10px 0;
+    padding: 0;
+    width: 100%;
+}
+#com-atlassian-confluence h1 img {
+    float: left;
+    margin: 0 .3em 0 0;
+}
+br.clear {
+    clear: both;
+    height: 1px;
+    overflow: hidden;
+}
+#footer, #footer-warning {
+    background: #f0f0f0;
+    text-align: center;
+}
+#footer p.license, #footer p.license a {
+    background: #036;
+    color: #fff;
+    margin: 0;
+}
+#footer #poweredby {
+    background: #f0f0f0 url("../../../images/border/border_bottom.gif") repeat-x;
+    color: #666;
+    margin: 0;
+    padding: .5em;
+    list-style: none;
+}
+#footer #poweredby a, #footer-warning {
+    color: #666;
+}
+#footer #poweredby li {
+    display: inline;
+}
+#footer #poweredby li.print-only {
+    display: none;
+}
+#footer p.warning {
+    margin: 0 40px 10px 40px;
+    text-align: center;
+}
+#menu-bar, #navigation .space-browse-links {
+    float: right;
+}
+#navigation .space-browse-links ul {
+    list-style: none;
+    margin: 0;
+    padding: 0;
+}
+#menu-bar {
+    margin: 0 .5em;
+}
+table {
+    clear: left;
+}
+.space-browse-links a:link,
+.space-browse-links a:active,
+.space-browse-links a:visited {
+    border: 1px solid #3c78b5;
+    color: #000;
+    display: block;
+    font-weight: bold;
+    line-height: 2;
+    margin: 0.35em 0 -1px 0.5em;
+    padding: 0 0.5em 0 24px;
+    position: relative;
+    text-decoration: none;
+}
+.space-browse-links a:hover {
+    background-color: #036;
+    border: 1px solid #036;
+    color: #fff;
+}
+.space-browse-links a img {
+    float: left;
+    left: 4px;
+    margin: -8px 0 0;
+    position: absolute;
+    top: 50%;
+}
+#tree-div {
+    min-height:300px;
+}
+.mailLabel {
+    color: #666;
+    font-weight: bold;
+}
+
+.unparented {
+    list-style: none;
+    margin: 0;
+    padding: 0;
+}
+
+.parented {
+    list-style-image: url(../../../images/icons/link_out_bot.gif);
+}
+
+.mailthread ul {
+    list-style-image: url(../../../images/icons/link_out_bot.gif);
+}
+.selectedMail {
+  background-color: #ffc;
+  padding: 2px;
+  border: 1px solid #ddd;
+}
+
+.excerpt {
+  margin-top: 0;
+  margin-bottom: 0;
+}
+
+.captcha {
+    padding: 10px;
+}
+.captcha-image {
+    border: 1px solid #000;
+}
+
+.version-info {
+    margin-bottom: 10px;
+}
+
+/* Fix menu focus when selecting with mouse in Firefox */
+li:active, a:active {
+  outline: none;
+}
+
+/* Confluence global/space message styles */
+#messageContainer {
+    background: #fff;
+    list-style: none;
+    margin: 0 -10px;
+    padding: 0;
+}
+
+#messageContainer li {
+    padding: 5px;
+    display: none;
+}
+
+.message-close-button {
+    height: 16px;
+    width: 16px;
+    border: none;
+    float: right;
+    cursor: pointer;
+}
+
+.page-metadata-icons {
+    display: inline;
+    margin: 0;
+    padding: 0;
+    float: left;
+}
+
+.page-metadata-icons li {
+    list-style: none;
+    float: left;
+    padding: 0 5px 0 0;
+    margin: 0;
+}
+
+.page-metadata-icons a {
+	text-decoration: none;
+    vertical-align: middle;
+}
+
+.page-metadata-icons a.page-restrictions span,
+.page-metadata-icons a.action-view-attachments span.page-metadata-attachments-text {
+    float: left;
+	height: 16px;
+	width: 16px;
+    text-indent: -9999em;
+}
+
+.page-metadata-icons a.page-restrictions span {
+    background: url(../../../images/icons/lock_16_grey.gif) no-repeat;
+}
+
+.page-metadata-icons a.action-view-attachments span.page-metadata-attachments-text {
+	background: url(../../../images/icons/attach_16.png) no-repeat;
+}
+
+.on-label, yes-label {
+    color: #009900;
+    font-weight: bold;
+}
+
+.off-label, no-label {
+    color: #990000;
+    font-weight: bold;
+}
+
+.margin-top-zero {
+    margin-top: 0;
+}
+
+.progress-fill-color {
+    background: #00df00;
+}
+
+.progress-background-color {
+    background: #fff;
+}
+
+.vertical-center-aligning-container {
+    display: table;
+    height: 400px;
+    /* position : relative; */
+    overflow: hidden;
+}
+
+.vertical-center-div-outer {
+    /* position : absolute;
+    top : 50%; */
+    display: table-cell;
+    vertical-align: middle;
+}
+
+.vertical-center-div-inner {
+    /* position : relative;
+    top : -50%; */
+    text-align: center;
+}
+
+.dark-grey-background {
+    background-color: #cccccc; 
+}
+
+
+/* End Confluence master stylesheet */
+
+
+
+.wiki-content,
+.wiki-content p,
+.wiki-content table,
+.wiki-content tr,
+.wiki-content td,
+.wiki-content th,
+.wiki-content ol,
+.wiki-content ul,
+.wiki-content li {
+    font-size: 10pt;
+    line-height: 13pt;
+}
+
+.wiki-content p {
+    margin: 10px 0;
+    padding: 0;
+}
+
+.wiki-content li,
+.wiki-content ul p,
+.wiki-content ol p {
+    margin: 0;
+    padding: 0;
+}
+
+.wiki-content ul {
+    list-style-type: disc;
+}
+
+.wiki-content ol,
+.wiki-content ol ol ol ol,
+.wiki-content ol ol ol ol ol ol ol,
+.wiki-content ol ol ol ol ol ol ol ol ol ol {
+    list-style-type: decimal;
+}
+
+.wiki-content ol ol,
+.wiki-content ol ol ol ol ol,
+.wiki-content ol ol ol ol ol ol ol ol,
+.wiki-content ol ol ol ol ol ol ol ol ol ol ol {
+    list-style-type: lower-alpha;
+}
+
+.wiki-content ol ol ol,
+.wiki-content ol ol ol ol ol ol,
+.wiki-content ol ol ol ol ol ol ol ol ol,
+.wiki-content ol ol ol ol ol ol ol ol ol ol ol ol {
+    list-style-type: lower-roman;
+}
+
+/*Needs the id selector because of the
+'#com-atlassian-confluence h1' entry in master.css*/
+#com-atlassian-confluence .wiki-content h1,
+.wiki-content h2,
+.wiki-content h3,
+.wiki-content h4,
+.wiki-content h5,
+.wiki-content h6 {
+    font-weight: bold;
+    line-height: normal;
+    padding: 0;
+}
+
+#com-atlassian-confluence .wiki-content h1
+{
+    font-size: 18pt;
+    margin-top: 32px;
+}
+
+.wiki-content h2 {
+    font-size: 16pt;
+    margin-top: 24px;
+}
+
+.wiki-content h3 {
+    font-size: 14pt;
+    margin-top: 20px;
+}
+
+.wiki-content h4 {
+    font-size: 12pt;
+    margin-top: 14px;
+}
+
+.wiki-content h5 {
+    font-size: 11pt;
+    margin-top: 12px;
+}
+
+.wiki-content h6 {
+    font-size: 10pt;
+    color: black;
+    margin-top: 8px;
+}
+
+.wiki-content .confluenceTable, .grid {
+    margin-left: 0px;
+    margin-right: 0;
+    margin-top: 10px;
+    margin-bottom: 10px;
+    padding: 0;
+}
+
+.wiki-content td.confluenceTd {
+    padding-right: 10px;
+}
+.wiki-content td.confluenceTd,
+.wiki-content th.confluenceTh {
+    margin: 0;
+    padding: 0;
+}
+.wiki-content-preview {
+    padding: 5px;
+    border-left: 1px solid;
+    border-right: 1px solid;
+}
+
+/* Styles for TinyMCE editor content */
+
+.mceContentBody {
+    border: none;
+    padding: 10px;
+    text-align: left;
+    background-color: #fff;
+}
+
+/* IE makes paragraphs in tables, so remove the default margin */
+.mceContentBody .confluenceTable p {
+    margin: 0;
+}
+#tab-navigation {
+    border-bottom: 1px solid;
+    margin: 0 -10px;
+    margin-bottom: 10px;
+    padding: 0 10px;
+}
+
+.tab-navigation {
+    list-style: none;
+    display: block;
+    margin: 0 0 -1px;
+    padding: 0;
+    overflow: hidden;
+}
+.tab-navigation .tab {
+    float: left;
+    display: inline;
+    font-weight: bold;
+    margin: 0 5px -1px 0;
+}
+.tab-navigation .tab a {
+    padding: .3em .4em;
+    text-decoration: none;
+    display: block;
+    -moz-border-radius-topleft: 3px;
+    -moz-border-radius-topright: 3px;
+    -webkit-border-top-left-radius: 3px;
+    -webkit-border-top-right-radius: 3px;
+}
+.tab-navigation .notab {
+    margin: 1px 1px 0 1px;
+    padding: .3em;
+    float: left;
+}
+
+/* Make the following more specific, so they aren't overriden by themes. */
+ul.tab-navigation .current a {
+    color: #000;
+    background-color: #fff;
+    border-bottom-color: #fff; /* IE */
+}
+ul.tab-navigation .current a:hover {
+    color: #000;
+    background-color: #fff;
+    border-bottom-color: #fff; /* IE */
+}
+
+/*
+ * Drop down menu stylesheet
+ */
+
+/* Menu bar layout */
+.ajs-menu-bar {
+    float: right;
+    line-height: 1.5;
+}
+.ajs-menu-bar,
+.ajs-menu-bar .ajs-button,
+.ajs-menu-bar .ajs-button a,
+.ajs-menu-bar .ajs-button span,
+.ajs-menu-bar .ajs-menu-item .ajs-menu-title,
+.ajs-menu-bar .ajs-menu-item .ajs-menu-title span,
+.ajs-menu-bar .ajs-menu-item .ajs-menu-title span span,
+.ajs-menu-bar .ajs-drop-down a,
+.ajs-menu-bar .ajs-drop-down a span,
+.ajs-menu-bar .ajs-drop-down a span span {
+     /* all containers are block-level with no margin or padding by default */
+    display: block;
+    margin: 0;
+    padding: 0;
+}
+.ajs-menu-bar .ajs-button span,
+.ajs-menu-bar .ajs-menu-item .trigger span span {
+    padding-right: 1em; /* gap after menu label, must be wider than indicator image */
+}
+.ajs-menu-bar li.ajs-menu-item,
+.ajs-menu-bar li.ajs-button {
+    float: left;
+    list-style: none;
+}
+.ajs-menu-bar li.ajs-menu-item a,
+.ajs-menu-bar li.ajs-button a {
+    line-height: 1.5;
+    text-decoration: none;
+    white-space: nowrap;
+}
+.ajs-menu-bar .ajs-button {
+    float: left;
+    line-height: 2;
+    list-style: none;
+    position: static;
+}
+#header .ajs-menu-bar li.ajs-menu-item {
+    position: relative;
+}
+
+/* Drop-down indicator icon and on-hover colour changing */
+.ajs-menu-bar .ajs-menu-item .trigger span {
+    background-image: url(../../../images/decoration/menu_indicator.gif);
+}
+.ajs-menu-bar .ajs-menu-item.opened .trigger span {
+    background-image: url(../../../images/decoration/white_menu_indicator.gif);
+}
+.ajs-menu-bar .ajs-menu-item .trigger span span {
+    background: none;
+}
+.ajs-menu-bar .ajs-button a:hover,
+.ajs-menu-bar .ajs-menu-item.opened .trigger span {
+    color: #fff; /* system colour - not derived from colour scheme */
+}
+
+/* Menu bar icons */
+.ajs-menu-bar .ajs-menu-item .trigger span {
+    background-position: 100% 50%;
+    background-repeat: no-repeat;
+}
+.ajs-menu-bar .ajs-button span,
+.ajs-menu-bar .ajs-menu-item .trigger span span {
+    background-position: 0 50%;
+    background-repeat: no-repeat;
+}
+
+/* Drop-down menu layout */
+.ajs-menu-bar li .ajs-drop-down a {
+    background: #fff no-repeat 4px 50%;
+    border: none;
+    display: block;
+    line-height: 1.6;
+    margin: 0;
+    padding: 0 0.5em 0 24px;
+    text-decoration: none;
+}
+.ajs-menu-bar .ajs-drop-down {
+    -moz-border-radius-bottomleft: 3px;
+    -moz-border-radius-bottomright: 3px;
+    -webkit-border-bottom-left-radius: 3px;
+    -webkit-border-bottom-right-radius: 3px;
+    background: #fff; /* system colour - not derived from colour scheme */
+    border: solid 1px #c1c1c1;
+    font-weight: normal;
+    min-width: 10em;
+    padding: 0;
+    position: absolute;
+    white-space: nowrap;
+    z-index: 1000;
+}
+.ajs-menu-bar .ajs-drop-down ul,
+.ajs-menu-bar ul.ajs-drop-down {
+    border-top: solid 1px #e1e1e1;
+    margin: 0;
+    padding: 5px 0;
+    list-style: none;
+}
+.ajs-menu-bar .ajs-drop-down ul.first,
+.ajs-menu-bar ul.ajs-drop-down.first {
+    border-top: none;
+}
+.ajs-menu-bar .ajs-drop-down li {
+    margin: 0;
+    padding: 0;
+}
+.ajs-menu-bar div.ajs-drop-down a {
+    background-position: .5em 50%;
+    background-repeat: no-repeat;
+    border: none;
+    display: block;
+    line-height: 2;
+    margin: 0;
+    padding: 0 1em 0 28px;
+    position: relative;
+    text-decoration: none;
+    white-space: nowrap;
+}
+.ajs-menu-bar .ajs-drop-down a img {
+    float: left;
+    height: 16px;
+    margin: .3em 0 0 -20px;
+    width: 16px;
+}
+
+/* Drop-down menu icons */
+.ajs-menu-bar .ajs-drop-down a.add-comment {
+    background-image: url(../../../images/icons/comment_16.png);
+}
+.ajs-menu-bar .ajs-drop-down a.add-attachment {
+    background-image: url(../../../images/icons/attach_16.png);
+}
+.ajs-menu-bar .ajs-drop-down a.add-page {
+    background-image: url(../../../images/icons/docs_16.gif);
+}
+.ajs-menu-bar .ajs-drop-down a.add-news {
+    background-image: url(../../../images/icons/blogentry_16.gif);
+}
+.ajs-menu-bar .ajs-drop-down a.action-view-history {
+    background-image: url(../../../images/icons/clock_16.png);
+}
+.ajs-menu-bar .ajs-drop-down a.action-view-attachments {
+    background-image: url(../../../images/icons/attach_16.png);
+}
+.ajs-menu-bar .ajs-drop-down a.action-page-favourite {
+    background-image: url(../../../images/icons/fav_off_16.png);
+}
+.ajs-menu-bar .ajs-drop-down a.ie-page-favourite-selected { /* using IE style here to make IE7 not duplicate bg */
+    background-image: url(../../../images/icons/fav_on_16.png);
+}
+.ajs-menu-bar .ajs-drop-down a.action-page-watching-space {
+    background-image: url(../../../images/icons/watching_space_16.png);
+}
+.ajs-menu-bar .ajs-drop-down a.action-page-watching {
+    background-image: url(../../../images/icons/watch_off_16.png);
+}
+.ajs-menu-bar .ajs-drop-down a.ie-page-watching-selected { /* using IE style here to make IE7 not duplicate bg */
+    background-image: url(../../../images/icons/watch_on_16.png);
+}
+.ajs-menu-bar .ajs-drop-down a.waiting {
+    background-image: url(../../../images/icons/wait.gif);
+}
+
+.ajs-menu-bar .section-secondary li a,
+.ajs-menu-bar .section-modify li a {
+    padding-left: 8px;
+    font-size: .9em;
+}
+
+/* Customisations for header menu bar */
+#header-menu-bar {
+    margin-top: 0;
+    margin-right: 5px;
+}
+#header .ajs-menu-item a {
+    float: left;
+    line-height: 1.5;
+    margin: 0;
+    text-decoration: underline;
+}
+#header .ajs-menu-bar li.ajs-menu-item,
+#header .ajs-menu-bar li.ajs-button {
+    margin: 1px 0 0 0;
+    padding: 1px 0;
+}
+#header .ajs-menu-bar li.ajs-menu-item a {
+    padding-left: 0.5em;
+}
+#header .ajs-menu-item .trigger span {
+    background-image: url(../../../images/decoration/white_menu_indicator.gif); /* header menus always use a white indicator */
+}
+#header .ajs-menu-item .trigger span span {
+    background: none;
+}
+#header .ajs-menu-bar li.ajs-menu-item a.trigger:focus {
+    outline: none;
+}
+#header .ajs-menu-bar li.ajs-menu-item a.trigger {
+    float: left;
+    text-decoration: none;
+    padding: 0 0.5em;
+}
+#header .ajs-menu-bar li.ajs-menu-item.opened .ajs-drop-down li,
+#header .ajs-menu-bar li.ajs-menu-item.opened .ajs-drop-down a {
+    background-color: #fff; /* system colour - not derived from colour scheme */
+    background-image: none;
+}
+.ajs-menu-bar .ajs-menu-item.opened,
+.ajs-menu-bar .ajs-button a {
+    -moz-border-radius: 3px;
+    -webkit-border-radius: 3px;
+}
+.ajs-menu-bar li.ajs-menu-item.opened {
+    -moz-border-radius-bottomleft: 0;
+    -moz-border-radius-bottomright: 0;
+    -webkit-border-bottom-left-radius: 0;
+    -webkit-border-bottom-right-radius: 0;
+}
+#header .ajs-menu-bar .ajs-menu-item.opened {
+    border: solid 1px;
+    border-bottom: 0;
+    margin: 1px -1px 0 -1px;
+    padding-top: 0;
+    padding-bottom: 0.1em;
+}
+
+/* Customisations for header menus */
+#header .ajs-drop-down {
+    -moz-border-radius-bottomleft: 3px;
+    -moz-border-radius-bottomright: 3px;
+    -webkit-border-bottom-left-radius: 3px;
+    -webkit-border-bottom-right-radius: 3px;
+    border-top: none;
+    left: 0;
+    margin-top: 0;
+    margin-left: -1px;
+    top: 1.67em;
+    z-index: 9;
+}
+#header .ajs-drop-down a {
+    float: none;
+    text-decoration: none;
+    padding: 2px 2em;
+}
+#header .ajs-menu-item .ajs-drop-down ul,
+#header .ajs-menu-item ul.ajs-drop-down {
+    border-top: 1px solid #cce;
+}
+#header .ajs-menu-bar .ajs-drop-down ul.first,
+#header .ajs-menu-bar ul.ajs-drop-down.first {
+    border: none;
+}
+
+/* Customisations for navigation menu bar */
+#navigation .ajs-menu-bar {
+    margin: 10px 0 0 1em;
+}
+#navigation .ajs-menu-bar .ajs-button span,
+#navigation .ajs-menu-bar .ajs-menu-item .ajs-menu-title span span {
+    padding-left: 25px; /* width of icon + gap before menu label */
+}
+/*#navigation .ajs-menu-bar li.ajs-menu-item,
+#navigation .ajs-menu-bar li.ajs-button {
+    margin-top: -10px;
+}
+*/
+#navigation .ajs-menu-bar li.ajs-menu-item .ajs-menu-title,
+#navigation .ajs-menu-bar li.ajs-button a {
+    -moz-border-radius: 3px;
+    -webkit-border-radius: 3px;
+    color: #535353; /* system colour - not derived from colour scheme */
+    padding: .35em .5em;
+    font-size: 1.1em;
+    line-height: 20px;
+}
+#navigation .ajs-menu-bar li.ajs-menu-item .ajs-menu-title {
+    -moz-border-radius-bottomleft: 0;
+    -moz-border-radius-bottomright: 0;
+    -webkit-border-bottom-left-radius: 0;
+    -webkit-border-bottom-right-radius: 0;
+}
+#navigation .ajs-menu-bar .ajs-button a.edit span {
+    background-image: url(../../../images/icons/edit_20.png);
+}
+#navigation .ajs-menu-bar .ajs-button a.view span {
+    background-image: url(../../../images/icons/view_20.png);
+}
+#navigation .ajs-menu-bar li.ajs-menu-item a.add span span {
+    background-image: url(../../../images/icons/add_20.png);
+}
+#navigation .ajs-menu-bar li.ajs-menu-item a.action span span {
+    background-image: url(../../../images/icons/tools_20.png);
+}
+#header .ajs-menu-item a.ajs-menu-title span { /* Not sure why these styles need to be duplicated for IE, but it works. */
+    background-image: url(../../../images/decoration/white_menu_indicator.gif); /* header menus always use a white indicator */
+    background-repeat: no-repeat;
+    background-position: 100% 60%; /* 60% lines up with middle of lowercase letters in IE */
+}
+#header .ajs-menu-bar .ajs-menu-item.opened {
+    border: none;
+    margin: 1px 0 0 0;
+    padding: 0;
+    padding-top: 1px;
+}
+.ajs-drop-down {
+    clear: both;
+    z-index: 500;
+}
+#header .ajs-drop-down {
+    top: 1.75em;
+}
+.ajs-menu-bar .ajs-drop-down li {
+    display: block;
+    margin: 0;
+    padding: 0;
+}
+#navigation .ajs-menu-bar .ajs-drop-down a {
+    display: block;
+    padding: 0.33em 0.67em;
+    cursor: pointer;    
+}
+#navigation .ajs-menu-bar div.ajs-drop-down a span {
+    padding: 0 0 0 21px;
+    height: 16px;
+    line-height: 16px;
+    zoom: 1;
+}
+#navigation .ajs-menu-bar .section-secondary li a,
+#navigation .ajs-menu-bar .section-modify li a {
+    padding: 0;
+}
+#navigation .ajs-menu-bar .section-secondary li a span,
+#navigation .ajs-menu-bar .section-modify li a span {
+    padding-left: 8px;
+}
+.ajs-menu-bar .ajs-drop-down a img {
+    clear: left;
+    float: none;
+    margin: .3em 0 .3em -20px;
+    vertical-align: middle;
+}
+
+#navigation .ajs-menu-bar .ajs-button a,
+#navigation .ajs-menu-bar .ajs-button a span {
+    background: none;
+    display: inline-block; /* makes the edit button have layout, but doesn't give it enormous width*/
+}
+
+.ajs-menu-bar .ajs-drop-down a.add-page,
+.ajs-menu-bar .ajs-drop-down a.add-news {
+    background: none;
+}
+.ajs-menu-bar .ajs-drop-down a.add-page span {
+    background: url(../../../images/icons/docs_16.gif) no-repeat 0 50%;
+}
+.ajs-menu-bar .ajs-drop-down a.add-news span {
+    background: url(../../../images/icons/blogentry_16.gif) no-repeat 0 50%;
+}
+
+.ajs-menu-bar .ajs-drop-down a.add-comment {
+    background-image: none;
+}
+.ajs-menu-bar .ajs-drop-down a.add-comment span {
+    filter: expression("progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" +
+        document.getElementById('confluence-context-path').content +
+        "/images/icons/comment_16.png', sizingMethod='crop')");
+    zoom: 1;
+}
+.ajs-menu-bar .ajs-drop-down a.add-attachment,
+.ajs-menu-bar .ajs-drop-down a.action-view-attachments,
+.page-metadata-icons a.action-view-attachments span.page-metadata-attachments-text {
+    background-image: none;
+}
+.ajs-menu-bar .ajs-drop-down a.add-attachment span,
+.ajs-menu-bar .ajs-drop-down a.action-view-attachments span,
+.page-metadata-icons a.action-view-attachments span.page-metadata-attachments-text {
+    filter: expression("progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" +
+        document.getElementById('confluence-context-path').content +
+        "/images/icons/attach_16.png', sizingMethod='crop')");
+    zoom: 1;
+}
+* html .page-metadata-icons a.action-view-attachments span.page-metadata-attachments-count {
+    display: inline-block;  /* IE6 */
+    text-indent: 9999em;
+}
+.ajs-menu-bar .ajs-drop-down a.action-view-history {
+    background-image: none;
+}
+.ajs-menu-bar .ajs-drop-down a.action-view-history span {
+    filter: expression("progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" +
+        document.getElementById('confluence-context-path').content +
+        "/images/icons/clock_16.png', sizingMethod='crop')");
+    zoom: 1;
+}
+.ajs-menu-bar .ajs-drop-down a.action-page-favourite {
+    background-image: none;
+}
+.ajs-menu-bar .ajs-drop-down a.action-page-favourite span {
+    filter: expression("progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" +
+        document.getElementById('confluence-context-path').content +
+        "/images/icons/fav_off_16.png', sizingMethod='crop')");
+    zoom: 1;
+}
+.ajs-menu-bar .ajs-drop-down a.ie-page-favourite-selected {
+    background-image: none;
+}
+.ajs-menu-bar .ajs-drop-down a.ie-page-favourite-selected span {
+    filter: expression("progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" +
+        document.getElementById('confluence-context-path').content +
+        "/images/icons/fav_on_16.png', sizingMethod='crop')");
+    zoom: 1;
+}
+.ajs-menu-bar .ajs-drop-down a.action-page-watching-space {
+    background-image: none;
+}
+.ajs-menu-bar .ajs-drop-down a.action-page-watching-space span {
+    filter: expression("progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" +
+        document.getElementById('confluence-context-path').content +
+        "/images/icons/watching_space_16.png', sizingMethod='crop')");
+    zoom: 1;
+}
+.ajs-menu-bar .ajs-drop-down a.action-page-watching {
+    background-image: none;
+}
+.ajs-menu-bar .ajs-drop-down a.action-page-watching span {
+    filter: expression("progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" +
+        document.getElementById('confluence-context-path').content +
+        "/images/icons/watch_off_16.png', sizingMethod='crop')");
+    zoom: 1;
+}
+.ajs-menu-bar div.ajs-drop-down a.ie-page-watching-selected {
+    background-image: none;
+}
+.ajs-menu-bar .ajs-drop-down a.ie-page-watching-selected span {
+    filter: expression("progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" +
+        document.getElementById('confluence-context-path').content +
+        "/images/icons/watch_on_16.png', sizingMethod='crop')");
+    zoom: 1;
+}
+.ajs-menu-bar .ajs-drop-down a.waiting {
+    background-image: none;
+}
+.ajs-menu-bar .ajs-drop-down a.waiting span {
+    background-image: url(../../../images/icons/wait.gif);
+    background-repeat: no-repeat;
+    filter: inherit;
+}
+#navigation .ajs-menu-bar .ajs-button a.edit span {
+    background-image: none;
+    filter: expression("progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" +
+        document.getElementById('confluence-context-path').content +
+        "/images/icons/edit_20.png', sizingMethod='crop')");
+    width: 1%;
+}
+
+#navigation .ajs-menu-bar li.ajs-menu-item a.add span span {
+    background-image: none;
+    filter: expression("progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" +
+        document.getElementById('confluence-context-path').content +
+        "/images/icons/add_20.png', sizingMethod='crop')");
+    width: 1%;
+}
+
+#navigation .ajs-menu-bar li.ajs-menu-item a.action span span {
+    background-image: none;
+    filter: expression("progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" +
+        document.getElementById('confluence-context-path').content +
+        "/images/icons/tools_20.png', sizingMethod='crop')");
+    width: 1%;
+}
+
+#navigation .ajs-menu-bar .ajs-button a.view span {
+    background-image: none;
+    filter: expression("progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" +
+        document.getElementById('confluence-context-path').content +
+        "/images/icons/view_20.png', sizingMethod='crop')");
+    width: 1%;
+}
+
+table.confluenceTable {
+    margin: 5px;
+    border-collapse: collapse;
+}
+
+td.confluenceTd, table.confluenceTable td.confluenceTd {
+    border-width: 1px;
+    border-style: solid;
+    border-color: #ccc;
+    padding: 5px;
+    vertical-align: top;
+}
+
+th.confluenceTh, table.confluenceTable th.confluenceTh {
+    border-width: 1px;
+    border-style: solid;
+    border-color: #ccc;
+    padding: 5px;
+    background-color: #f0f0f0;
+    text-align: left;
+    vertical-align: top;
+}
+
+.panel {
+    color: black;
+    padding: 0;
+    margin: 10px 20px;
+    background: #f0f0f0;
+    border-width: 1px;
+    border-style: solid;
+    overflow: hidden;
+}
+
+.alertPanel {
+    border-color: #c00;
+}
+
+.infoPanel {
+    border-color: #3c78b5;
+}
+
+.alertPanel, .infoPanel {
+    border-style: solid;
+    border-width: 1px;
+    padding: 8px;
+    margin: 10px;
+}
+
+.infopanel-heading {
+    font-weight: bold;
+	padding: 4px 0 2px 0;
+}
+
+/* basic panel (basicpanel.vmd) style */
+.basicPanelContainer {
+    border-width: 1px;
+    border-style: solid;
+    margin-top: 2px;
+    margin-bottom: 8px;
+    width: 100%;
+}
+
+.basicPanelTitle {
+    padding: 5px;
+    margin: 0;
+    background-color: #f0f0f0;
+    color: black;
+    font-weight: bold;
+}
+
+.basicPanelBody {
+    padding: 5px;
+    margin: 0;
+}
+
+.panelHeader {
+    padding: 0 12px;
+    line-height: 2; /* vertical alignment for title */
+    text-align: center;
+    border-bottom-width: 1px;
+    border-bottom-style: solid;
+}
+
+.codeHeader, .panelHeader, .panelContent {
+    background: #f0f0f0;
+}
+
+.preformattedHeader, .codeContent, .preformattedContent {
+    background: #fff;
+}
+
+.panelContent {
+    color: #000;
+    margin: 0;
+    padding: 0 12px;
+    text-align: left;
+    font-size: .95em;
+}
+
+.panelContent,
+.panelContent p, .panelContent th,
+.panelContent td, .panelContent li {
+    text-align: left;
+}
+
+
+#header {
+    width: 100%;
+}
+/*body>#header .ajs-menu-bar li .ajs-drop-down a {
+    width: expression(this.parentNode.offsetWidth - 34 + "px");
+}
+*/
+#breadcrumbs {
+    height: 1%;
+}
+#breadcrumbs li {
+    white-space: nowrap;
+}
+* html #breadcrumbs li {
+    background-image: url(../../../images/decoration/white_breadcrumbs_indicator.gif); /* IE6 */
+}
+#breadcrumbs li {
+    background-position: 3px 8px;
+}
+#wiki-editor .tab-navigation .tab a {
+    float: left;
+}
+#wiki-editor .submit-buttons {
+    display: block;
+    float: none;
+    line-height: 2;
+    text-align: right;
+}
+
+form {
+    margin: 0;
+    padding: 0;
+}
+#linkinserters,
+#preview,
+#wysiwyg {
+    margin-top: -10px;
+}
+#markup {
+    padding: 0;
+}
+#markup textarea {
+    float: right;
+    border: none;
+    width: 99.9%;
+    margin: 0;
+}
+.tab-navigation .tab {
+    float: left;
+    display: inline;
+    font-weight: bold;
+    margin: 0 5px -1px 0;
+    position: relative;
+}
+.tab-navigation .tab a {
+    display: inline-block; /* anchors were making tabs very wide in Clickr theme in IE */
+}
+#wiki-editor .tab-navigation .current a {
+    background-color: #fff;
+    border-bottom: none;
+    color: #000;
+    padding-bottom: 0.4em;
+}
+a.icon {
+    height: 16px;
+}
+#tree-div {
+    min-height: 300px;
+    height: auto !important;
+    height: 300px;
+}
+h1 #content-title {
+    margin: 0;
+    display: block;
+    width: 95%;
+}
+h1 span.title-text {
+    height: 1%;
+}
+#com-atlassian-confluence h1 {
+    width: auto;
+}
+div.editable-title {
+    height: 1%;
+    margin: 0;
+}
+#tab-navigation {
+    zoom: 1;
+}
+ul#editor-tabs {
+    margin-bottom: 10px;
+}
+/*
+    Styles for macros bundled in Renderer.
+*/
+
+.panelMacro {
+    margin: 10px 20px;
+    overflow: hidden; /* fix width next to floated content */
+}
+
+.panelMacro table {
+    text-align: left;
+    padding: 0 20px;
+    width: 100%;
+}
+
+.panelMacro td, .panelMacro p {
+    font-size: 1em;
+    padding: 14px 0;
+}
+
+.searchMacro {
+    font-size: 10pt;
+    margin: 10px 0;
+}
+
+.searchMacro .result {
+    margin-top: 3px;
+    padding: 0 5px 5px 5px;
+    border-bottom: 1px solid #ddd;
+}
+
+.searchMacro .resultSummary {
+    margin-bottom: 7px;
+}
+
+.rssMacro {
+    font-size: 10pt;
+}
+
+.rssMacro table {
+    margin: 10px 0;
+    width: 100%;
+    border-collapse: collapse;
+}
+
+.rssMacro table th,
+.rssMacro table td {
+    border: 1px solid #ccc;
+    padding: 4px;
+}
+
+.rssMacro table th {
+    background: #f0f0f0;
+}
+
+/* Code styles */
+.code {
+    border-width: 1px;
+    border-style: dashed;
+    overflow: auto;
+}
+
+.code, .preformatted {
+    background-color: #fff;
+}
+
+.code pre, .preformatted pre { /* needs 'pre' to override TinyMCE style */
+    font-family:"Courier New", Courier, monospace;
+    line-height: 1.3;
+}
+
+.code-keyword {
+  color: #000091;
+  background-color: inherit;
+}
+
+.code-object {
+  color: #910091;
+  background-color: inherit;
+}
+
+.code-quote {
+  color: #009100;
+  background-color: inherit;
+}
+
+.code-comment {
+  color: #808080;
+  background-color: inherit;
+}
+
+.code-xml .code-keyword {
+  color: inherit;
+  font-weight: bold;
+}
+
+.code-tag {
+  color: #000091;
+  background-color: inherit;
+}
+
+/* Recently Updated Styles */
+.recentlyUpdatedItem {
+	border-bottom: #f0f0f0 1px solid;
+	border-top: #f0f0f0 1px solid;
+	margin: 10px 0 0 0;
+	padding: 0;
+	border-spacing: 0;
+	width: 100%;
+    text-decoration: none;
+    border-collapse: collapse;
+}
+
+.recentlyUpdatedItem td {
+    padding: 10px;
+    border-bottom: #f0f0f0 1px solid;
+    vertical-align: top;
+}
+
+.recentlyUpdatedItem .authorAndDate {
+	background-color: #f0f0f0;
+	width: 25%;
+}
+
+.recentlyUpdatedItem .date {
+    margin-top: 4px;
+    font-size: 90%;
+    color: #666;
+}
+
+.recentlyUpdatedItem .profilePic {
+    float: right;
+    background-color: #f0f0f0;
+    margin: 0 2px;
+}
+
+.recentlyUpdatedItem .twixie {
+    padding: 10px 0 0 4px;
+}
+
+.recentlyUpdatedItem .icon {
+    padding: 8px 0 0 1px;
+}
+
+.recentlyUpdatedItem .details {
+    padding-left: 7px;
+}
+
+.recentlyUpdatedItem .summary, .recentlyUpdatedItem .thumbnail {
+    margin-top: 3px;
+    color: #666;
+}
+
+.moreRecentlyUpdatedItems {
+    text-align: right;
+    margin-top: 10px;
+    font-size: 10pt;
+}
+
+a.content-type-page span {
+    background-image: url(../../../images/icons/docs_16.gif);
+}
+
+a.content-type-blogpost span {
+    background-image: url(../../../images/icons/blogentry_16.gif);
+}
+
+a.content-type-comment span {
+    background-image: url(../../../images/icons/comment_16.gif);
+}
+
+a.content-type-spacedesc span {
+    background-image: url(../../../images/icons/web_16.gif);
+}
+
+a.content-type-personalspacedesc span {
+    background-image: url(../../../images/icons/personal_space_16.gif);
+}
+
+a.content-type-mail span {
+    background-image: url(../../../images/icons/mail_content_16.gif);
+}
+
+a.content-type-attachment span {
+    background-image: url(../../../images/icons/attachments/file.gif);
+}
+
+a.content-type-file span {
+    background-image: url(../../../images/icons/attachments/file.gif);
+}
+
+a.content-type-attachment-application-pdf span {
+    background-image: url(../../../images/icons/attachments/pdf.gif);
+}
+
+a.content-type-attachment-image span {
+    background-image: url(../../../images/icons/attachments/image.gif);
+}
+
+a.content-type-attachment-text-xml span {
+    background-image: url(../../../images/icons/attachments/xml.gif);
+}
+
+a.content-type-attachment-text-html span {
+    background-image: url(../../../images/icons/attachments/html.gif);
+}
+
+a.content-type-attachment-text span {
+    background-image: url(../../../images/icons/attachments/text.gif);
+}
+
+a.content-type-attachment-application-zip span {
+    background-image: url(../../../images/icons/attachments/zip.gif);
+}
+
+a.content-type-attachment-application-excel span {
+    background-image: url(../../../images/icons/attachments/excel.gif);
+}
+
+a.content-type-attachment-application-powerpoint span {
+    background-image: url(../../../images/icons/attachments/powerpoint.gif);
+}
+
+a.content-type-attachment-application-word span {
+    background-image: url(../../../images/icons/attachments/word.gif);
+}
+
+a.content-type-attachment-java span {
+    background-image: url(../../../images/icons/attachments/java.gif);
+}
+
+a.content-type-attachment-file span {
+    background-image: url(../../../images/icons/attachments/file.gif);
+}
+/* Information plugin styles */
+
+.noteMessage, .warningMessage, .infoMessage, .tipMessage {
+    border-style: solid;
+    border-width: 1px;
+    text-align: center;
+    padding: 5px;
+    overflow: hidden; /* fix width next to floated content */
+}
+
+.noteMessage {
+    border-color: #f0c000;
+    background: #ffffce;
+}
+
+.warningMessage {
+    border-color: #c00;
+    background: #fcc;
+}
+
+.infoMessage {
+    border-color: #3c78b5;
+    background: #d8e4f1;
+}
+
+.tipMessage {
+    border-color: #090;
+    background-color: #dfd;
+}
+
+table.infoMacro td, table.warningMacro td, table.tipMacro td, table.noteMacro td {
+    border: none;
+}
+
+.informationMacroPadding {
+    padding: 5px 0 0 5px;
+}
+
+.noteMacro, .warningPanel {
+    background-color: #ffffce;
+}
+#addition .noteMacro {
+    border-style: solid;
+    border-width: 1px;
+    border-color: #f0c000;
+    background-color: #ffffce;
+    text-align:left;
+    padding: 10px;
+    width: 100%;
+    margin: 5px 20px;
+}
+
+#addition .noteMacro td {
+    font-size: 10pt;
+    padding: 2px;
+    padding-right: 15px;
+}
+
+#addition .noteMacro p {
+    font-size: 10pt;
+}
+
+#addition .noteMacro b {
+    font-size: 10pt;
+}
+
+#addition table.noteMacro td {
+    border: none;
+}
+
+#replying .noteMacro {
+    border-style: solid;
+    border-width: 1px;
+    border-color: #f0c000;
+    background-color: #ffffce;
+    text-align:left;
+    padding: 10px;
+    width: 100%;
+    margin: 5px 20px;
+}
+
+#replying .noteMacro td {
+    font-size: 10pt;
+    padding: 2px;
+    padding-right: 15px;
+}
+
+#replying .noteMacro p {
+    font-size: 10pt;
+}
+
+#replying .noteMacro b {
+    font-size: 10pt;
+}
+
+#replying table.noteMacro td {
+    border: none;
+}
+
+.tipMacro {
+    background-color: #dfd;
+}
+
+.warningMacro {
+    background-color: #fcc;
+}
+
+.infoMacro {
+    background-color: #d8e4f1;
+}
+
+.warningPanel {
+    border-style: solid;
+    border-width: 1px;
+    padding: 8px;
+    margin: 10px;
+}
+
+.warningPanel {
+    border-color: #f0c000;
+}
+
+
+
+
+/* Layout plugin styles */
+
+.sectionMacro,
+.sectionMacro p,
+.sectionMacro ul,
+.sectionMacro ol {
+    font-size: 10pt;
+}
+
+table.sectionMacro td {
+    border: none;
+}
+
+table.sectionMacroWithBorder td.columnMacro {
+    border-style: dashed;
+    border-width: 1px;
+    border-color: #ccc;
+}
+
+
+/*
+    Colors for Confluence (included for all themes by default).
+*/
+
+
+h1, h2, h3, h4, h5, h6,
+.wiki-content h1,
+.wiki-content h2,
+.wiki-content h3,
+.wiki-content h4,
+.wiki-content h5,
+.wiki-content h6,
+.pagetitle,
+.steptitle,
+.substeptitle,
+.formtitle,
+a.blogHeading,
+.more-comments a,
+.label,
+label,
+th.confluenceTh,
+table.confluenceTable th.confluenceTh,
+table.admin th,
+.form-element-large,
+.form-element-small,
+#com-atlassian-confluence .mce_h1 span.mceText,
+#com-atlassian-confluence .mce_h2 span.mceText,
+#com-atlassian-confluence .mce_h3 span.mceText,
+#com-atlassian-confluence .mce_h4 span.mceText,
+#com-atlassian-confluence .mce_h5 span.mceText,
+#com-atlassian-confluence .mce_h6 span.mceText {
+    color: #003366;
+}
+
+.wiki-content h1,
+.wiki-content h2 {
+ 	border-bottom-color: #3c78b5;
+}
+
+.wiki-content-preview {
+    border-left-color: #3c78b5;
+    border-right-color: #3c78b5;
+}
+
+.pageSectionHeader {
+    border-bottom-color: #3c78b5;
+}
+
+.panel {
+    border-color: #3c78b5;
+}
+
+.panelHeader,
+.menuheading,
+.pageheader,
+.sectionbottom {
+    border-bottom-color: #3c78b5;
+}
+
+.topRow {
+    border-top-color: #3c78b5;
+}
+
+.tabletitle, .pageSectionHeader, .section-header h2 {
+    color: #003366;
+}
+.tabletitle, .pageSectionHeader {
+	border-bottom-color: #3c78b5;
+}
+
+a:link,
+a:visited,
+a:active,
+a:hover,
+#default-labels-header a.add {
+	color: #003366;
+}
+
+h1 a:hover {
+    border-bottom-color: #003366;
+}
+
+/* use logoSpaceLink instead.
+.spacenametitle,
+.spacenametitle a,
+.spacenametitle a:visited {
+    color: #999999;
+}
+*/
+.spacenametitle-printable,
+.spacenametitle-printable a,
+.spacenametitle-printable a:visited {
+    color: #999999;
+}
+
+.navItemOver,
+.navItemOver a,
+.navItemOver a:visited,
+.navItemOver a:hover {
+    color: #ffffff;
+    background-color: #003366;
+}
+
+.navItem {
+    background-color: #3c78b5;
+}
+
+.navItem a,
+.navItem a:hover,
+.navItem a:visited {
+    color: #ffffff;
+}
+
+.tableview th {
+    color: #003366;
+    border-bottom-color: #3c78b5;
+}
+
+blockquote {
+    border-left-color: #3c78b5;
+}
+
+.navBackgroundBox {
+    background: #3c78b5;
+}
+
+.previewBoxTop,
+.previewContent,
+.previewBoxBottom,
+.functionbox {
+    border-color: #3c78b5;
+}
+
+.smalltext-blue {
+    color: #3c78b5;
+}
+
+.tabnav,
+.comment .tabnav,
+ul.tabnav {
+    border-bottom-color: #3c78b5;
+}
+
+.tabnav .tabs a {
+    border-color: #3c78b5;
+    background: #3c78b5;
+}
+
+.tabnav .tabs a:link, .tabnav .tabs a:visited {
+    color: #ffffff;
+}
+.tabnav .tabs a:hover {
+    color: #ffffff;
+    background: #003366;
+    border-color: #003366;
+}
+
+.tabnav .spaceActionLinks a:link,
+.tabnav .spaceActionLinks a:visited {
+    color: #003366;
+}
+
+.foldertab-box {
+	border-left-color: #3c78b5;
+	border-right-color: #3c78b5;
+	border-bottom-color: #3c78b5;
+}
+
+#squaretab a {
+    border-color: #3c78b5;
+}
+
+#squaretab a:link, #squaretab a:visited {
+    background-color: #3c78b5;
+}
+
+#squaretab a:hover {
+    color: #ffffff;
+    background-color: #003366;
+    border-color: #003366;
+}
+
+table.blogcalendar {
+    border-color: #3c78b5;
+}
+
+.blogcalendar th.calendarhead,
+a.calendarhead,
+a.calendarhead:link,
+a.calendarhead:visited,
+a.calendarhead:hover {
+    background-color: #3c78b5;
+    color: #ffffff;
+}
+
+.searchGroupHeading {
+    background-color: #3c78b5;
+    color: #ffffff;
+}
+
+.permissionTab {
+    background: #3c78b5;
+    color: #ffffff;
+}
+
+.permissionSuperTab {
+    background: #003366;
+    color: #ffffff;
+}
+
+/* styles for links in the top bar */
+.topBarDiv a:link,
+.topBarDiv a:visited,
+.topBarDiv a:active,
+.topBarDiv a:hover,
+.topBarDiv {
+    color: #ffffff;
+}
+
+.topBar {
+    background-color: #003366;
+}
+
+.basicPanelContainer {
+    border-color: #3c78b5;
+}
+
+.greynavbar {
+    border-top-color: #3c78b5
+}
+
+div.license-personal {
+   background-color: #003366;
+   color: #ffffff;
+}
+
+div.license-personal a {
+   color: #ffffff;
+}
+
+.minitab {
+    border-bottom-color: #3c78b5;
+}
+
+.minitab a {
+    border-top-color: #3c78b5;
+    border-right-color: #3c78b5;
+    border-left-color: #3c78b5;
+}
+
+.minitab .unselected {
+    border-bottom-color: #3c78b5;
+    background: #3c78b5;
+}
+
+#header {
+    background-color: #003366;
+}
+#header a,
+#breadcrumbs,
+#header .ajs-menu-bar li.ajs-menu-item a.trigger {
+    color: #ffffff;
+}
+.breadcrumbs {
+ 	border-color: #3c78b5;
+}
+
+#navigation, #tab-navigation {
+    border-bottom-color: #3c78b5;
+}
+
+.ajs-menu-bar li.ajs-menu-item.opened .ajs-drop-down a {
+    color: #535353;
+}
+#header .ajs-menu-bar li.ajs-menu-item.opened .ajs-drop-down a {
+    color: #003366;
+}
+
+#navigation .ajs-menu-bar .ajs-button a:hover,
+/* .ajs-menu-bar li.ajs-menu-item.opened, */
+.ajs-menu-bar .ajs-menu-item li.active a,
+.ajs-menu-bar li.ajs-menu-item.opened .ajs-drop-down li.active a,
+#header .ajs-menu-bar li.ajs-menu-item.opened .ajs-drop-down li.active a {
+    color: #ffffff;
+    background-color: #6699cc;
+}
+#header .ajs-menu-bar li.ajs-menu-item.opened,
+#header .ajs-menu-bar li.ajs-menu-item.opened a.trigger {
+    background-color: #336699;
+    border-color: #336699;
+}
+.ajs-menu-bar li.ajs-menu-item.opened a.trigger {
+    background-color: #6699cc;
+}
+
+#header .ajs-drop-down {
+    border-color: #003366;
+}
+#header .ajs-menu-bar .ajs-drop-down li.separator {
+    border-top-color: #003366;
+}
+
+.tab-navigation .tab a {
+    background-color: #3c78b5;
+    border: 1px solid #3c78b5;
+    color: #ffffff;
+}
+.tab-navigation .tab a:hover {
+    color: #ffffff;
+    background-color: #003366;
+    border-bottom-color: #003366;
+}
+
+
+
+/***** Pre 2.8 markup styles for backwards compatability ******/
+#foldertab {
+    border-bottom-color: #3c78b5;
+}
+
+#foldertab li a {
+    border-color: #3c78b5;
+    background: #3c78b5;
+}
+
+#foldertab li a:link,
+#foldertab li a:visited {
+    color: #ffffff;
+}
+#foldertab li a:hover {
+    color: #ffffff;
+    background: #003366;
+    border-color: #003366;
+}
+
+.logoSpaceLink,
+.logoSpaceLink a:link,
+.logoSpaceLink a:visited,
+.logoSpaceLink a:active {
+    color: #999999;
+}
+
+.logoSpaceLink a:hover {
+    color: #003366;
+}
+
+.selectedminitab {
+    border-color: #3c78b5
+}
+
+.unselectedminitab {
+	border-color: #3c78b5;
+	background: #3c78b5;
+}
+
+.tabletitle, .heading-text-color {
+    color: #003366;
+}
+
+a.unselectedminitab:hover {
+	color: #ffffff;
+	background: #003366;
+	border-color: #003366;
+}
+
+ol.autocompleter li.focused {
+	background: #6699cc;
+	color: #ffffff;
+}
+
+/* End colour styles for Confluence */
+
+/*
+    This stylesheet defines styles that only apply to the Default theme. Styles common to all themes should go in
+    master.css
+*/
+
+body {
+    /* Page-level left and right padding. Internal content that needs to be full-width should use 'margin: 0 -10px'. */
+    margin: 0;
+    border-left: solid #fff 10px;
+    border-right: solid #fff 10px;
+    font-family: Helvetica, Arial, sans-serif;
+    position: relative;
+}
+
+#header {
+    margin: 0 -10px;
+    padding: 0 10px;
+    /*overflow: auto;*/
+}
+
+.email{
+    /* offset the negative margin set by the header for emails only */
+    margin: 10px;
+}
+
+#user-control-panel, #page-view-panel {
+    float: right;
+}
+
+#com-atlassian-confluence h1 img {
+    max-height: 2.5em; /* scale logo image with font size */
+}
+#com-atlassian-confluence h1 img.custom {
+    height: auto;
+}
+
+h1 span.title-text {
+    display: table; /* page title wrapping drops straight down */
+}
+h1 a:hover {
+    color: #369;
+}
+.editable-title {
+    margin: 0 10px 0 58px;
+}
+
+#main {
+    border-top: solid #fff 10px;
+    border-bottom: solid #fff 10px;
+}
+
+#content {
+    clear: left;
+}
+#content.space {
+    margin-top: 10px;
+}
+
+#quick-search-submit {
+    display: none;
+}
+
+#user-control-panel {
+    display: none;   
+}
+
+#user-control-panel li {
+    border-left: solid 1px;
+}
+
+#user-control-panel li.first {
+    border: none;
+}
+
+#user-control-panel li, #page-view-panel li, #page-prefs-list li {
+    color: #666;
+    float: left;
+    font-size: .9em;
+    margin: 0 0 0 .3em;
+    padding: 0 0 0 .3em;
+}
+
+#user-control-panel a {
+    color: #666;
+}
+
+#navigation {
+    display: inline;
+}
+
+.page-actions {
+    float: right;
+    border: solid 1px #ccc;
+    padding: 5px;
+    margin-left: 10px;
+}
+
+.remove-control {
+    display: none;
+}
+
+.page-metadata {
+    color: #666;
+    font-size: 0.9em;
+    margin: 10px 0;
+}
+.page-metadata a:link,
+.page-metadata a:active,
+.page-metadata a:hover,
+.page-metadata a:visited {
+    color: #666;
+    font-style: normal;
+}
+
+.section-header {
+    margin-bottom: 5px;
+    padding: 2px 0;    
+}
+
+/* All links are set to action.linkColor but section header links are grey */
+.section-header a:link,
+.section-header a:active,
+.section-header a:hover,
+.section-header a:visited {
+    color: #666;
+}
+
+h2.section-title,
+.pageSectionTitle {
+    font-size: 12pt;
+    font-weight: bold;
+    color: black;
+    margin-top: 20px;
+    padding: 0;
+    display: inline;
+}
+
+.section-title a:link,
+.section-title a:active,
+.section-title a:hover,
+.section-title a:visited,
+a.pageSectionTitle:link,
+a.pageSectionTitle:active,
+a.pageSectionTitle:hover,
+a.pageSectionTitle:visited {
+    color: black;
+}
+
+#sidebar {
+    clear: right;
+    float: right;
+    width: 16em;
+    margin-left: 10px;
+}
+
+#content.space,
+#content.edit form.markup {
+    margin-right: 17em;
+}
+.sidebar-content {
+    margin: 10px 0 0 1em;
+}
+.blogcalendar {
+    width: 15em;
+}
+.blogcalendar th a.calendarhead,
+.blogcalendar th.calendarhead {
+    font-size: 1em;
+}
+.blogcalendar td,
+.blogcalendar th {
+    font-size: .85em;
+}
+
+/* folder tab link styles */
+.tabnav .tabs a {
+    padding: 5px 5px 4px;
+    margin: 5px 3px 0 0;
+    border-width: 1px;
+    border-style: solid;
+    border-bottom: none;
+    text-decoration: none;
+    display: block;
+    float: left;
+}
+
+.tabnav .tabs a.current {
+    background: white;
+    border-bottom: 1px solid white;
+    color: black;
+}
+.tabnav .tabs a.current:link, .tabnav .tabs a.current:visited {
+    color: black;
+}
+.tabnav .tabs a.current:hover {
+    background: white;
+    border-bottom: 1px solid white;
+    color: black;
+}
+
+/* list page navigational tabs */
+.tabnav, .comment .tabnav {
+    padding: 0;
+    margin: 0;
+    border-bottom-width: 1px;
+    border-bottom-style: solid;
+    float: left;
+    display: inline;
+    list-style-position: outside;
+    width: 100%;
+    font-weight: bold;
+    font-size: 10pt;
+}
+
+.after-tabnav {
+    clear: both;
+}
+
+.tabnav li.tabs {
+    list-style: none;
+    margin: 0 0 -1px 10px;
+    float: left;
+    display: block;
+}
+
+
+/* dashboard customization */
+#spacesLabel {
+    padding: 4px 6px;
+    float: left;
+    margin-top: 5px;
+}
+
+#footer #poweredby {
+    font-size: 0.9em;
+    margin: 0 -10px;
+}
+
+
+
+
