<!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>