abdera-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jmsn...@apache.org
Subject svn commit: r414893 [5/11] - in /incubator/abdera/java/trunk: ./ build/ core/ core/src/ core/src/main/ core/src/main/java/ core/src/main/java/org/ core/src/main/java/org/apache/ core/src/main/java/org/apache/abdera/ core/src/main/java/org/apache/abdera...
Date Fri, 16 Jun 2006 20:10:56 GMT
Added: incubator/abdera/java/trunk/dependencies/legal/stax-api-LICENSE.txt
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/dependencies/legal/stax-api-LICENSE.txt?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/dependencies/legal/stax-api-LICENSE.txt (added)
+++ incubator/abdera/java/trunk/dependencies/legal/stax-api-LICENSE.txt Fri Jun 16 13:10:47 2006
@@ -0,0 +1,202 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+

Added: incubator/abdera/java/trunk/docs/index.html
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/docs/index.html?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/docs/index.html (added)
+++ incubator/abdera/java/trunk/docs/index.html Fri Jun 16 13:10:47 2006
@@ -0,0 +1,266 @@
+<html>
+<head>
+<title>Atom Reference Implementation</title>
+<style>
+  pre {
+    border: 1pt solid black;
+    background-color: lightblue;
+    padding: 10pt;
+  }
+</style>
+</head>
+<body>
+<h1>Abdera</h1>
+<hr/>
+<p>Atom Implementation<br />Version 0.1</p>
+<hr/>
+<p>Abdera is an implementation of the <a href="http://www.ietf.org/rfc/rfc4287.txt">Atom Syndication Format</a> 
+and <a href="http://www.ietf.org/internet-drafts/draft-ietf-atompub-protocol-08.txt">Atom Publishing Protocol</a> 
+specifications published by the IETF Atompub working group.  At the core of the implementation is the 
+"Feed Object Model" (<a href="api/index.html">javadoc</a>), a set of interfaces for reading and building 
+Atom documents.</p>
+
+<h2>Parsing Atom Documents</h2>
+
+<p>The Parser interface is used to parse Atom documents.</p>
+
+<pre>
+  Parser parser = Parser.INSTANCE;
+  URI baseUri = {The Base URI of the Document to Parse}
+  InputStream inputStream = {acquire input stream}
+  ParserOptions options = parser.getDefaultParserOptions();
+    // set parser options
+  Document document = Parser.INSTANCE.parse(stream, baseUri, options);
+</pre>
+
+<p>The architecture of Abdera is such that applications may plug in their 
+own parser implementations.  The default parser that ships with Abdera 
+is based on the StAX XML parser and the Apache Axiom object model and is 
+capable of parsing Atom Feed documents, Entry documents and Atom Publishing 
+Protocol Introspection documents.</p>
+
+<pre>
+  // Parsing a feed document
+  Document&lt;Feed> document = 
+    Parser.INSTANCE.parse(stream, baseUri, options);
+  Feed feed = document.getRoot();
+  
+  // Parsing an entry document
+  Document&lt;Entry> document =
+    Parser.INSTANCE.parse(stream, baseUri, options);
+  Entry entry = document.getRoot();
+    
+  // Parsing an introspection document
+  Document&lt;Service> document = 
+    Parser.INSTANCE.parse(stream, baseUri, options);    
+  Service service = document.getRoot();
+</pre>
+
+<h3>Parser Options</h3>
+
+<p>TBD</p>
+
+<h2>Building Atom Documents</h2>
+
+<p>The Factory interface is used to build Atom documents.</p>
+
+<pre>
+  // Build the feed
+  Feed feed = Factory.INSTANCE.newFeed();
+  feed.setId("tag:example.org,2006:/foo", false);
+  feed.setTitleAsText("My Feed);
+  feed.setSubtitleAsText("My Feed Subtitle");
+  feed.setUpdated(new Date());
+  feed.addLink("http://example.org");
+  feed.addLink("self", "http://example.org/atom.xml");
+  feed.addAuthor("John Doe", "jdoe@example.com", "http://example.com");
+  
+  // Build the entry
+  Entry entry = feed.insertEntry();
+  entry.setId("tag:example.org,2006:/foo/1", false);
+  entry.setTitleAsHtml("&lt;b>My Title&lt;/b>");
+  entry.setUpdated(new Date());
+  entry.addLik("http://example.org");
+  entry.setContentAsHtml("This is &lt;i>HTML&lt;/i> content");
+
+  // Serialize the feed document
+  feed.getDocument().writeTo(System.out);
+</pre>
+
+<h2>The Atom Publishing Protocol</h2>
+
+<p>TBD</p>
+
+<h2>Extended Features</h2>
+
+<p>To be completed</p>
+
+<h3>Relative URI References</h3>
+
+<p>Abdera provides full support for Relative URI references through the use
+of xml:base, Content-Location and request URI's.  Every method on the Feed 
+Object Model that is capable of returning a relative URI reference has an
+alternative getResolved___ form that returns the fully qualified form of the 
+URI resolved according to the in-scope base URI.<p>
+
+<pre>
+  &lt;feed xmlns="http://www.w3.org/2005/Atom" xml:base="http://example.org/blog/"&gt;
+  ...
+    &lt;link rel="alternate" href="/index.html" />
+    &lt;link rel="self" href="index.atom" />
+  ...
+  &lt;/feed&gt;
+</pre>
+
+<pre>
+  FeedDocument doc = (FeedDocument)Parser.INSTANCE.parse(inputStream);
+  Feed feed = doc.getFeed();
+  Link alt = feed.getAlternateLink();
+  System.out.println(alt.getHref());         // outputs /index.html
+  System.out.println(alt.getResolvedHref()); // outputs http://example.org/index.html
+  
+  Link self = feed.SelfLink();
+  System.out.println(self.getHref());         // outputs index.atom
+  System.out.println(self.getResolvedHref()); // outputs http://example.org/blog/index.atom    
+</pre>
+
+<h3>XPath Support</h3>
+
+<pre>
+  Feed feed = Factory.INSTANCE.newFeed();
+  feed.setTitleAsText("Foo");
+  
+  Map<String,String> namespaces = XPath.INSTANCE.getDefaultNamespaces();
+  namespaces.put("a", "http://www.w3.org/2005/Atom");
+  String title = XPath.INSTANCE.valueOf("a:title", feed, namespaces);
+  System.out.println(title);  // "Foo"
+</pre>
+
+<h3>Feed Thread Extension Support</h3>
+
+<pre>
+  Entry entry1 = Factory.INSTANCE.newEntry();
+  entry1.setId("tag:example.org,2006:foo:1", false);
+  ...
+  
+  Entry entry2 = Factory.INSTANCE.newEntry();
+  entry2.setId("tag:example.org,2006:foo:2", false);
+  entry2.addInReplyTo(entry1);
+  ...
+</pre>
+
+<p>Produces,</p>
+
+<pre>
+  &lt;entry xmlns="..." xmlns:thr="...">
+    &lt;id>tag:example.org,2006:foo:2&lt;/id>
+    &lt;thr:in-reply-to ref="tag:example.org,2006:foo:1" />
+  &lt;/entry>  
+</pre>
+
+<h3>Extension Elements</h3>
+
+<p>The Feed Object Model provides an API for working with extensions to the Atom
+format. The API allows developers to work with extensions dynamically or via
+static Java classes and custom factories.</p>
+
+<p>Namespaced extension attributes may be added to any Feed Object Model object. 
+For instance, the example below:</p>
+
+<pre>
+  Entry entry = Factory.INSTANCE.newEntry();
+  ...
+  Link link = entry.addLink("replies", "http://www.example.org");
+  link.setAttributeValue(
+    "http://purl.org/syndication/thread/1.0",
+    "count", "thr", "10");
+</pre>
+
+<p>Produces the following,</p>
+
+<pre>
+  &lt;entry xmlns="http://www.w3.org/2005/Atom">
+    ...
+    &lt;link rel="replies" href="http://www.example.org" thr:count="10"
+      xmlns:thr="http://purl.org/syndication/thread/1.0" />
+    ...
+  &lt;/entry>
+</pre>
+
+<p>Namespaced extension elements may be added to any Feed Object Model object
+that implements the ExtensibleElement interface.</p>
+
+<pre>
+  Entry entry = Factory.INSTANCE.newEntry();
+  ...
+  entry.addSimpleExtension("urn:foo", "foo", "f", "bar");
+</pre>
+
+<p>Produces the following,</p>
+
+<pre>
+  &lt;entry xmlns="http://www.w3.org/2005/Atom">
+    ...
+    &lt;f:foo xmlns:f="urn:foo">bar&lt;/f:foo>
+    ...
+  &lt;/entry>
+</pre>
+
+<p>TODO: Complete discussion of static extensions</p>
+
+<h3>XML Digital Signature Support</h3>
+
+<p>Note: XML Digital Signature Support is currently not built by default!</p>
+
+<pre>
+  Signature sig = Signature.INSTANCE;
+  SignatureOptions options = sig.getDefaultSignatureOptions();
+  // set signature options (e.g. signing key)
+  
+  Entry entry = Factory.INSTANCE.newEntry();
+  // set entry data
+  
+  // sign the entry
+  entry = sig.sign(entry, options);
+  
+  // validate the signature
+  boolean valid = sig.verify(entry, options);
+</pre>
+
+<h3>XML Encryption Support</h3>
+
+<p>Note: XML Digital Signature Support is currently not built by default!</p>
+
+<pre>
+  Encryption enc = Encryption.INSTANCE;
+  EncryptionOptions options = enc.getDefaultEncryptionOptions();
+  // set encryption options (e.g. algorithm, key encryption key, etc)
+  
+  Feed feed = Factory.INSTANCE.newFeed();
+  // set feed data
+  
+  // encrypt the feed
+  Document doc = enc.encrypt(feed.getDocument(), options);
+  
+  // decrypt the feed
+  Document doc = enc.decrypt(doc, options);
+</pre>
+
+<h2>Configuation Guide</h2>
+
+<p>TBD</p>
+
+<h2>Developers Guide</h2>
+
+<p>TBD</p>
+
+<h3>Extending Abdera</h3>
+
+<p>TBD</p>
+
+<h3>Writing your own parser implementation?</h3>
+
+<p>TBD</p>
+
+</body>
+</html>
\ No newline at end of file

Added: incubator/abdera/java/trunk/examples/pom.xml
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/examples/pom.xml?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/examples/pom.xml (added)
+++ incubator/abdera/java/trunk/examples/pom.xml Fri Jun 16 13:10:47 2006
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project 
+  xmlns="http://maven.apache.org/POM/4.0.0" 
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <parent>
+    <groupId>org.apache.abdera</groupId>
+    <artifactId>abdera</artifactId>
+    <version>0.1-SNAPSHOT</version>
+  </parent>  
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>abdera-examples</artifactId>
+  <packaging>jar</packaging>
+  <name>Abdera Examples</name>
+  <version>0.1-SNAPSHOT</version>
+  <description>Atom Specification Implementation Examples</description>
+  <inceptionYear>2006</inceptionYear>
+  <dependencies>
+      <dependency>
+        <groupId>junit</groupId>
+        <artifactId>junit</artifactId>
+        <version>3.8.2</version>
+        <scope>test</scope>
+      </dependency>
+    <dependency>
+      <groupId>org.apache.abdera</groupId>
+      <artifactId>abdera-core</artifactId>
+      <version>0.1-SNAPSHOT</version>
+      <scope>compile</scope>
+    </dependency>    
+    <dependency>
+      <groupId>commons-httpclient</groupId>
+      <artifactId>commons-httpclient</artifactId>
+    </dependency>
+  </dependencies>
+</project>

Propchange: incubator/abdera/java/trunk/examples/pom.xml
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/AtomClient.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/AtomClient.java?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/AtomClient.java (added)
+++ incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/AtomClient.java Fri Jun 16 13:10:47 2006
@@ -0,0 +1,665 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements.  The ASF licenses this file to You
+* under the Apache License, Version 2.0 (the "License"); you may not
+* use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.  For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*/
+package org.apache.abdera.examples.appclient;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Date;
+import java.util.zip.GZIPInputStream;
+import java.util.zip.InflaterInputStream;
+import java.util.zip.ZipInputStream;
+
+import javax.activation.MimeType;
+import javax.activation.MimeTypeParseException;
+
+import org.apache.abdera.model.Document;
+import org.apache.abdera.model.Element;
+import org.apache.abdera.model.Entry;
+import org.apache.abdera.parser.Parser;
+import org.apache.abdera.parser.ParserOptions;
+import org.apache.abdera.util.Version;
+import org.apache.commons.httpclient.Header;
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.HttpException;
+import org.apache.commons.httpclient.HttpMethod;
+import org.apache.commons.httpclient.cookie.CookiePolicy;
+import org.apache.commons.httpclient.methods.DeleteMethod;
+import org.apache.commons.httpclient.methods.GetMethod;
+import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
+import org.apache.commons.httpclient.methods.PostMethod;
+import org.apache.commons.httpclient.methods.PutMethod;
+import org.apache.commons.httpclient.methods.RequestEntity;
+import org.apache.commons.httpclient.params.HttpClientParams;
+import org.apache.commons.httpclient.protocol.Protocol;
+import org.apache.commons.httpclient.protocol.ProtocolSocketFactory;
+import org.apache.commons.httpclient.util.DateParseException;
+import org.apache.commons.httpclient.util.DateUtil;
+
+
+/**
+ * This implements a simple Atom Publishing Client based on the Apache
+ * Commons HTTP Client.
+ */
+public class AtomClient {
+
+  private HttpClient client = null;
+  private boolean bufferStream = false;
+  
+  public AtomClient() {
+    this(Version.APP_NAME + " " + Version.VERSION); 
+  }
+  
+  public AtomClient(String userAgent) {
+    init(userAgent);
+  }
+  
+  public HttpClient getClient() {
+    return client;
+  }
+  
+  private void init(String userAgent) {
+    Protocol.registerProtocol(
+      "https", 
+      new Protocol(
+        "https", 
+        (ProtocolSocketFactory)new SimpleSSLProtocolSocketFactory(), 
+        443));
+    client = new HttpClient();
+    client.getParams().setParameter(
+      HttpClientParams.USER_AGENT, 
+      userAgent);
+    client.getParams().setParameter(
+      HttpClientParams.COOKIE_POLICY,
+      CookiePolicy.IGNORE_COOKIES);
+    client.getParams().setParameter(
+      HttpClientParams.HTTP_CONTENT_CHARSET, 
+      "UTF-8");
+  }
+
+  public boolean getUseBuffer() {
+    return bufferStream;
+  }
+  
+  public void setUseBuffer(boolean useBuffer) {
+    this.bufferStream = useBuffer;
+  }
+  
+  public <T extends Element>Document<T> get(
+    String uri) 
+      throws URISyntaxException, 
+             HttpException, 
+             IOException, 
+             ClientException, 
+             ServerException, 
+             MimeTypeParseException, 
+             DateParseException, 
+             NotModifiedException {
+    return get(new URI(uri), null);
+  }
+  
+  public <T extends Element>Document<T> get(
+    URI uri) 
+      throws HttpException, 
+             IOException, 
+             ClientException, 
+             ServerException, 
+             URISyntaxException, 
+             MimeTypeParseException, 
+             DateParseException, 
+             NotModifiedException {
+    return get(uri, null);
+  }
+  
+  public <T extends Element>Document<T> get(
+    String uri, 
+    RequestOptions options) 
+      throws URISyntaxException, 
+             HttpException, 
+             IOException, 
+             ClientException, 
+             ServerException, 
+             MimeTypeParseException, 
+             DateParseException, 
+             NotModifiedException {
+    return get(new URI(uri), options);
+  }
+  
+  public <T extends Element>Document<T> get(
+    URI uri, 
+    RequestOptions options) 
+      throws HttpException, 
+             IOException, 
+             ClientException, 
+             ServerException, 
+             URISyntaxException, 
+             MimeTypeParseException, 
+             DateParseException, 
+             NotModifiedException {
+    GetMethod method = new GetMethod(uri.toASCIIString());                       // account for possible use of IRI's
+    try {
+      int status = _invoke(method, options);
+      if (ClientException.isClientException(status)) 
+        throw new ClientException(status, method.getStatusText());
+      if (ServerException.isServerException(status)) 
+        throw new ServerException(status, method.getStatusText());
+      if (status == 304) throw new NotModifiedException();
+System.out.println(method.getResponseBodyAsString());
+      return _parse(method, new URI(method.getURI().toString()));
+    } finally {
+      if (bufferStream)
+        method.releaseConnection();                                              // this will cause any open streams to be closed
+    }
+  }
+
+  public Document<Entry> post(
+    String uri, 
+    Entry entry) 
+      throws URISyntaxException, 
+             HttpException, 
+             IOException, 
+             ClientException, 
+             ServerException, 
+             MimeTypeParseException, 
+             DateParseException, 
+             NotModifiedException {
+    return post(uri, entry, null);
+  }
+  
+  public Document<Entry> post(
+    URI uri, 
+    Entry entry)
+      throws URISyntaxException, 
+             HttpException, 
+             IOException, 
+             ClientException, 
+             ServerException, 
+             MimeTypeParseException, 
+             DateParseException, 
+             NotModifiedException {
+      return post(uri, entry, null);
+  }
+  
+  public Document<Entry> post(
+    String uri, 
+    Entry entry, 
+    RequestOptions options) 
+      throws URISyntaxException, 
+             HttpException, 
+             IOException, 
+             ClientException, 
+             ServerException, 
+             MimeTypeParseException, 
+             DateParseException, 
+             NotModifiedException {
+    return post(new URI(uri), entry, options);
+  }
+  
+  public Document<Entry> post(
+    URI uri, 
+    Entry entry, 
+    RequestOptions options)
+      throws URISyntaxException, 
+             HttpException, 
+             IOException, 
+             ClientException, 
+             ServerException, 
+             MimeTypeParseException, 
+             DateParseException, 
+             NotModifiedException {
+      Document<Entry> doc = entry.getDocument();
+      String ctype = null;
+      try {
+        MimeType mimeType = new MimeType("application/atom+xml");
+        if (doc.getCharset() != null) 
+          mimeType.setParameter("charset", doc.getCharset());
+        else mimeType.setParameter("charset", "utf-8");
+        ctype = mimeType.toString();
+      } catch (Exception e) {}
+      return _post(uri, new EntryRequestEntity(doc), ctype, options);
+  }
+
+  public Document<Entry> post(
+    String uri, 
+    InputStream in, 
+    MimeType mimeType) 
+      throws URISyntaxException, 
+             HttpException, 
+             IOException, 
+             ClientException, 
+             ServerException, 
+             MimeTypeParseException, 
+             DateParseException, 
+             NotModifiedException {
+    return post(uri, in, mimeType, null);
+  }
+  
+  public Document<Entry> post(
+    URI uri, 
+    InputStream in, 
+    MimeType mimeType)
+      throws URISyntaxException, 
+             HttpException, 
+             IOException, 
+             ClientException, 
+             ServerException, 
+             MimeTypeParseException, 
+             DateParseException, 
+             NotModifiedException {
+      return post(uri, in, mimeType, null);
+  }
+ 
+  public Document<Entry> post(
+    String uri, 
+    InputStream in, 
+    MimeType mimeType, 
+    RequestOptions options) 
+      throws URISyntaxException, 
+             HttpException, 
+             IOException, 
+             ClientException, 
+             ServerException, 
+             MimeTypeParseException, 
+             DateParseException, 
+             NotModifiedException {
+    return post(new URI(uri), in, mimeType, options);
+  }
+  
+  public Document<Entry> post(
+    URI uri, 
+    InputStream in, 
+    MimeType mimeType, 
+    RequestOptions options) 
+      throws HttpException, 
+             IOException, 
+             ClientException, 
+             ServerException, 
+             URISyntaxException, 
+             MimeTypeParseException, 
+             DateParseException, 
+             NotModifiedException {
+      return _post(
+        uri, 
+        new InputStreamRequestEntity(in), 
+        (mimeType != null) ? mimeType.toString() : null, 
+        options);
+  }
+  
+  public Document<Entry> _post(
+    URI uri, 
+    RequestEntity requestEntity, 
+    String contentType, 
+    RequestOptions options) 
+      throws HttpException, 
+             IOException, 
+             ClientException, 
+             ServerException, 
+             URISyntaxException, 
+             MimeTypeParseException, 
+             DateParseException, 
+             NotModifiedException {
+    PostMethod method = new PostMethod(uri.toASCIIString());                     // account for possible use of IRI's
+    method.setRequestEntity(requestEntity);
+    method.setRequestHeader("Content-Type", contentType);
+    try {
+      int status = _invoke(method, options);
+      if (ClientException.isClientException(status)) 
+        throw new ClientException(status, method.getStatusText());
+      if (ServerException.isServerException(status)) 
+        throw new ServerException(status, method.getStatusText());
+      if (status == 304) throw new NotModifiedException();
+      MimeType atomtype = new MimeType("application/atom+xml");
+      String ctype = _getResponseHeader(method, "Content-Type", null);
+      String location = _getResponseHeader(method, "Location", null);
+      URI locationuri = (location != null) ? uri.resolve(location) : null;
+      if (ctype != null && atomtype.match(ctype)) {
+        try {
+          return _parse(method, locationuri );
+        } catch (Exception e) {
+          if (location != null)
+            return get(locationuri);
+        }
+      } else {
+        if (location != null)
+          return get(locationuri);
+      }
+    } finally {
+      if (bufferStream)
+        method.releaseConnection();                                              // this will cause any open streams to be closed
+    }
+    return null;
+  }
+  
+  public void put(
+    String uri, 
+    Entry entry) 
+      throws URISyntaxException, 
+             HttpException, 
+             IOException, 
+             ClientException, 
+             ServerException, 
+             NotModifiedException {
+    put(uri, entry, null);
+  }
+  
+  public void put(
+    URI uri, 
+    Entry entry) 
+      throws HttpException, 
+             IOException, 
+             ClientException, 
+             ServerException, 
+             NotModifiedException {
+      put(uri, entry, null);
+  }
+  
+  public void put(
+    String uri, 
+    Entry entry, 
+    RequestOptions options) 
+      throws URISyntaxException, 
+             HttpException, 
+             IOException, 
+             ClientException, 
+             ServerException, 
+             NotModifiedException {
+    put(new URI(uri), entry, options);
+  }
+  
+  public void put(
+    URI uri, 
+    Entry entry, 
+    RequestOptions options) 
+      throws HttpException, 
+             IOException, 
+             ClientException, 
+             ServerException, 
+             NotModifiedException {
+      Document<Entry> doc = entry.getDocument();
+      String ctype = null;
+      try {
+        MimeType mimeType = new MimeType("application/atom+xml");
+        if (doc.getCharset() != null) 
+          mimeType.setParameter("charset", doc.getCharset());
+        else mimeType.setParameter("charset", "utf-8");
+        ctype = mimeType.toString();
+      } catch (Exception e) {}
+      _put(uri, new EntryRequestEntity(doc), ctype, options);
+  }
+
+  public void put(
+    String uri, 
+    InputStream in, 
+    MimeType mimeType) 
+      throws URISyntaxException, 
+             HttpException, 
+             IOException, 
+             ClientException, 
+             ServerException, 
+             NotModifiedException {
+    put(uri, in, mimeType, null);
+  }
+  
+  public void put(
+    URI uri, 
+    InputStream in, 
+    MimeType mimeType) 
+      throws HttpException, 
+             IOException, 
+             ClientException, 
+             ServerException, 
+             NotModifiedException {
+      put(uri, in, mimeType, null);
+  }
+ 
+  public void put(
+    String uri, 
+    InputStream in, 
+    MimeType mimeType, 
+    RequestOptions options) 
+      throws URISyntaxException, 
+             HttpException, 
+             IOException, 
+             ClientException, 
+             ServerException, 
+             NotModifiedException {
+    put(new URI(uri), in, mimeType, options);
+  }
+  
+  public void put(
+    URI uri, 
+    InputStream in, 
+    MimeType mimeType, 
+    RequestOptions options) 
+      throws HttpException, 
+             IOException, 
+             ClientException, 
+             ServerException, 
+             NotModifiedException {
+      _put(
+        uri, 
+        new InputStreamRequestEntity(in), 
+        (mimeType != null) ? mimeType.toString() : null, 
+        options);
+  }
+  
+  public void _put(
+    URI uri, 
+    RequestEntity requestEntity, 
+    String contentType, 
+    RequestOptions options) 
+      throws HttpException, 
+             IOException, 
+             ClientException, 
+             ServerException, 
+             NotModifiedException{
+    PutMethod method = new PutMethod(uri.toASCIIString());                     // account for possible use of IRI's
+    method.setRequestEntity(requestEntity);
+    method.setRequestHeader("Content-Type", contentType);
+    try {
+      int status = _invoke(method, options);
+      if (ClientException.isClientException(status)) {
+        System.out.println(method.getResponseBodyAsString());
+        throw new ClientException(status, method.getStatusText());
+      }
+      if (ServerException.isServerException(status)) 
+        throw new ServerException(status, method.getStatusText());
+      if (status == 304) throw new NotModifiedException();
+    } finally {
+      if (bufferStream)
+        method.releaseConnection();                                              // this will cause any open streams to be closed
+    }
+  }
+  
+  public void delete(
+      String uri) 
+        throws URISyntaxException, 
+               HttpException, 
+               IOException, 
+               ClientException, 
+               ServerException, 
+               NotModifiedException  {
+      delete(new URI(uri), null);
+    }
+    
+    public void delete(
+      URI uri) 
+        throws HttpException, 
+               IOException, 
+               ClientException, 
+               ServerException, 
+               NotModifiedException {
+      delete(uri, null);
+    }
+    
+    public void delete(
+      String uri, 
+      RequestOptions options) 
+        throws HttpException, 
+               IOException, 
+               ClientException, 
+               ServerException, 
+               URISyntaxException, 
+               NotModifiedException {
+      delete(new URI(uri), options);
+    }
+    
+    public void delete(
+      URI uri, 
+      RequestOptions options) 
+        throws HttpException, 
+               IOException, 
+               ClientException, 
+               ServerException, 
+               NotModifiedException  {
+      DeleteMethod method = new DeleteMethod(uri.toASCIIString());                // account for possible use of IRI's
+      try {
+        int status = _invoke(method, options);
+        if (ClientException.isClientException(status)) 
+          throw new ClientException(status, method.getStatusText());
+        if (ServerException.isServerException(status)) 
+          throw new ServerException(status, method.getStatusText());
+        if (status == 304) throw new NotModifiedException();
+      } finally {
+        if (bufferStream)
+          method.releaseConnection();                                              // this will cause any open streams to be closed
+      }
+    }
+  
+  private <T extends Element>Document<T> _parse(
+    HttpMethod method, URI uri) 
+      throws URISyntaxException, 
+             IOException, 
+             MimeTypeParseException, 
+             DateParseException {
+    String clocation = _getResponseHeader(method, "Content-Location", null);
+    if (clocation != null)
+      uri = new URI(clocation);                                                  // get the content-location
+    InputStream in = _getInputStream(method);
+    Parser parser = Parser.INSTANCE;
+    ParserOptions parserOptions = parser.getDefaultParserOptions();
+    MimeType mimeType = _getContentType(method);
+    if (mimeType != null) {
+      parserOptions.setCharset(
+        _getContentType(method).getParameter(
+          "charset"));
+    }
+    Document<T> doc = parser.parse(in, uri, parserOptions);
+    doc.setContentType(mimeType);
+    doc.setLastModified(_getLastModified(method));
+    return doc;
+  }
+  
+  private int _invoke(
+    HttpMethod method, 
+    RequestOptions options) 
+      throws HttpException, 
+             IOException {
+    if (options != null) {
+      if (!options.getAllowCache())
+        method.setRequestHeader(
+          "Cache-Control", 
+          "no-cache");
+      if (options.getIfMatch() != null)
+        method.setRequestHeader(
+          "If-Match", 
+          _getStringFromArray(
+            options.getIfMatch(), true));
+      if (options.getIfNoneMatch() != null)
+        method.setRequestHeader(
+          "If-None-Match", 
+          _getStringFromArray(
+            options.getIfNoneMatch(), true));
+      if (options.getIfUnmodifiedSince() != null) 
+        method.setRequestHeader(
+          "If-Unmodified-Since", 
+          DateUtil.formatDate(
+            options.getIfUnmodifiedSince()));
+      if (options.getIfModifiedSince() != null) 
+        method.setRequestHeader(
+          "If-Modified-Since", 
+          DateUtil.formatDate(
+            options.getIfModifiedSince()));
+      if (options.getUseDeltaEncoding()) 
+        method.setRequestHeader("A-IM", "feed");
+    }
+    int status = client.executeMethod(method);
+    if (options != null && options.getCaptureResponseHeaders()) {
+      Header[] headers = method.getResponseHeaders();
+      for (Header header : headers) {
+        options.setResponseHeader(
+          header.getName(), 
+          header.getValue());
+      }
+    }    
+    return status;
+  }
+  
+  private String _getStringFromArray(String[] strings, boolean quote) {
+    String s = "";
+    for (String string : strings) {
+      if (s.length() > 0) s += ", ";
+      if (quote && string.charAt(0) != '"') string = "\"" + string;
+      if (quote && string.charAt(string.length()-1) != '"') string += "\"";
+      s += string;
+    }
+    return s;
+  }
+  
+  private String _getResponseHeader(HttpMethod method, String header, String _default) {
+    Header val = method.getResponseHeader(header);
+    return (val != null) ? val.getValue() : _default; 
+  }
+  
+  private InputStream _getInputStream(HttpMethod method) throws IOException {
+    InputStream in = method.getResponseBodyAsStream();
+    if (in != null) {
+      String cencoding = _getResponseHeader(method, "Content-Encoding", null);   // handle content-encoding
+      if ("gzip".equalsIgnoreCase(cencoding))                                    //   GZip
+        in = new GZIPInputStream(in);
+      else if ("compress".equalsIgnoreCase(cencoding))                           //   Compress
+        in = new InflaterInputStream(in);
+      else if ("zip".equalsIgnoreCase(cencoding))                                //   Zip
+        in = new ZipInputStream(in);
+      if (bufferStream) {                                                        // buffer the stream?
+        ByteArrayOutputStream baos = new ByteArrayOutputStream(in.available());
+        int n = -1;
+        while ((n = in.read()) > -1) { baos.write(n); }
+        in = new ByteArrayInputStream(baos.toByteArray());
+      }
+    }
+    return in;
+  }
+  
+  private MimeType _getContentType(
+    HttpMethod method) 
+      throws MimeTypeParseException {
+    String contentType = _getResponseHeader(method, "Content-Type", null);
+    return (contentType != null) ? new MimeType(contentType) : null;
+  }
+  
+  private Date _getLastModified(
+    HttpMethod method) 
+      throws DateParseException {
+    String date = _getResponseHeader(method, "Last-Modified", null);
+    return (date != null) ? DateUtil.parseDate(date) : new Date();
+  }
+}

Added: incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/ClientException.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/ClientException.java?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/ClientException.java (added)
+++ incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/ClientException.java Fri Jun 16 13:10:47 2006
@@ -0,0 +1,41 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements.  The ASF licenses this file to You
+* under the Apache License, Version 2.0 (the "License"); you may not
+* use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.  For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*/
+package org.apache.abdera.examples.appclient;
+
+public class ClientException extends Exception {
+
+  private static final long serialVersionUID = -5346983237731736209L;
+  private int status = 400;
+  
+  public ClientException(String message) {
+    super(message);
+  }
+  
+  public ClientException(int status, String message) {
+    super(message);
+    this.status = status;
+  }
+  
+  public int getStatus() {
+    return status;
+  }
+  
+  public static boolean isClientException(int status) {
+    return (status >= 400 && status < 500);
+  }
+}

Added: incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/EntryRequestEntity.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/EntryRequestEntity.java?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/EntryRequestEntity.java (added)
+++ incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/EntryRequestEntity.java Fri Jun 16 13:10:47 2006
@@ -0,0 +1,62 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements.  The ASF licenses this file to You
+* under the Apache License, Version 2.0 (the "License"); you may not
+* use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.  For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*/
+package org.apache.abdera.examples.appclient;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+import org.apache.abdera.model.Document;
+import org.apache.abdera.model.Entry;
+import org.apache.commons.httpclient.methods.RequestEntity;
+
+/**
+ * Required for the Apache Commons HTTP Client.
+ */
+public class EntryRequestEntity 
+  implements RequestEntity {
+
+  Document<Entry> entryDoc = null;
+  
+  public EntryRequestEntity(Document<Entry> entryDocument) {
+    this.entryDoc = entryDocument;
+  }
+  
+  public boolean isRepeatable() {
+    return true;
+  }
+
+  public void writeRequest(OutputStream out) throws IOException {
+    entryDoc.writeTo(out);
+  }
+
+  public long getContentLength() {
+    int n = 0;
+    try {
+      ByteArrayOutputStream out = new ByteArrayOutputStream();
+      entryDoc.writeTo(out);
+      n = out.size();
+    } catch (Exception e) {}
+    return n;
+  }
+
+  public String getContentType() {
+    return "application/atom+xml; charset=\"utf-8\"";
+  }
+  
+}
\ No newline at end of file

Added: incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/Main.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/Main.java?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/Main.java (added)
+++ incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/Main.java Fri Jun 16 13:10:47 2006
@@ -0,0 +1,130 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements.  The ASF licenses this file to You
+* under the Apache License, Version 2.0 (the "License"); you may not
+* use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.  For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*/
+package org.apache.abdera.examples.appclient;
+
+import java.net.URI;
+import java.util.Date;
+import java.util.List;
+
+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.Link;
+import org.apache.abdera.model.Service;
+
+
+public class Main {
+
+  public static void main(String[] args) throws Exception {
+    
+    AtomClient client = new AtomClient();
+    
+    // Perform introspection.  This is an optional step.  If you already
+    // know the URI of the APP collection to POST to, you can skip it.
+    Document<Service> introspection = 
+      client.get(
+        args[0]);
+    Service service = 
+      introspection.getRoot();
+    Collection collection = 
+      service.getCollection(
+        args[1], 
+        args[2]);
+    report("The Collection Element", collection.toString());
+    
+    // Create the entry to post to the collection
+    Entry entry = Factory.INSTANCE.newEntry();
+    entry.setId("tag:example.org,2006:foo", false);
+    entry.setTitleAsText("This is the title");
+    entry.setUpdated(new Date());
+    entry.addAuthor("James");
+    entry.setContentAsText("This is the content");
+    report("The Entry to Post", entry.toString());
+    
+    // Post the entry. Be sure to grab the resolved HREF of the collection
+    Document<Entry> doc = client.post(collection.getResolvedHref(), entry);
+    
+    // In some implementations (such as Google's GData API, the entry URI is 
+    // distinct from it's edit URI.  To be safe, we should assume it may be 
+    // different
+    URI entryUri = doc.getBaseUri();
+    report("The Created Entry", doc.getRoot().toString());
+    
+    // Grab the Edit URI from the entry.  The entry MAY have more than one 
+    // edit link.  We need to make sure we grab the right one.
+    URI editUri = getEditUri(doc.getRoot());
+    
+    // If there is an Edit Link, we can edit the entry
+    if (editUri != null) {
+      // Before we can edit, we need to grab an "editable" representation
+      doc = client.get(editUri);    
+      
+      // Change whatever you want in the retrieved entry
+      doc.getRoot().getTitleElement().setValue("This is the changed title");
+      
+      // Put it back to the server
+      client.put(editUri, doc.getRoot());
+      
+      // This is just to show that the entry has been modified
+      doc = client.get(entryUri);
+      report("The Modified Entry", doc.getRoot().toString());
+    } else {
+      // Otherwise, the entry cannot be modified (no suitable edit link was found)
+      report("The Entry cannot be modified", null);
+    }
+
+    // Delete the entry.  Again, we need to make sure that we have the current
+    // edit link for the entry
+    doc = client.get(entryUri);
+    editUri = getEditUri(doc.getRoot());
+    if (editUri != null) {
+      client.delete(editUri);
+      report("The Enry has been deleted", null);
+    } else {
+      report("The Entry cannot be deleted", null);
+    }
+  }
+
+  private static URI getEditUri(Entry entry) throws Exception {
+    URI editUri = null;
+    List<Link> editLinks = entry.getLinks("edit");
+    for (Link link : editLinks) {
+      // if there is more than one edit link, we should not automatically
+      // assume that it's always going to point to an Atom document
+      // representation.
+      if (link.getMimeType() != null) {
+        if (link.getMimeType().match("application/atom+xml")) {
+          editUri = link.getResolvedHref();
+          break;
+        }
+      } else {  // assume that an edit link with no type attribute is the right one to use
+        editUri = link.getResolvedHref();
+        break;
+      }
+    }
+    return editUri;
+  }
+  
+  private static void report(String title, String message) {
+    System.out.println("== " + title + " ==");
+    if (message != null) 
+      System.out.println(message);
+    System.out.println();
+  }
+}

Added: incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/NotModifiedException.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/NotModifiedException.java?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/NotModifiedException.java (added)
+++ incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/NotModifiedException.java Fri Jun 16 13:10:47 2006
@@ -0,0 +1,26 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements.  The ASF licenses this file to You
+* under the Apache License, Version 2.0 (the "License"); you may not
+* use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.  For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*/
+package org.apache.abdera.examples.appclient;
+
+public class NotModifiedException extends Exception {
+
+  private static final long serialVersionUID = -8929777553527707483L;
+
+  public NotModifiedException() {}
+  
+}

Added: incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/README
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/README?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/README (added)
+++ incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/README Fri Jun 16 13:10:47 2006
@@ -0,0 +1,6 @@
+A simple APP Client implementation.
+
+To run:
+
+java org.apache.abdera.examples.appclient.Main {Introspection URI} {Workspace Name} {Collection Name}
+

Added: incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/RequestOptions.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/RequestOptions.java?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/RequestOptions.java (added)
+++ incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/RequestOptions.java Fri Jun 16 13:10:47 2006
@@ -0,0 +1,111 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements.  The ASF licenses this file to You
+* under the Apache License, Version 2.0 (the "License"); you may not
+* use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.  For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*/
+package org.apache.abdera.examples.appclient;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+public class RequestOptions {
+
+  private boolean useDelta = false;
+  private Date ifModifiedSince = null;
+  private Date ifUnmodifiedSince = null;
+  private String[] ifMatch = null;
+  private String[] ifNoneMatch = null;
+  private boolean allowCache = true;
+  private Map<String,String> requestHeaders = null;
+  private Map<String,String> responseHeaders = null;
+  private boolean captureResponseHeaders = false;
+  
+  public boolean getUseDeltaEncoding() {
+    return useDelta;
+  }
+  
+  public void setUseDeltaEncoding(boolean useDelta) {
+    this.useDelta = useDelta;
+  }
+  
+  public Date getIfModifiedSince() {
+    return this.ifModifiedSince;
+  }
+  
+  public void setIfModifiedSince(Date ifModifiedSince) {
+    this.ifModifiedSince = ifModifiedSince;
+  }
+  
+  public Date getIfUnmodifiedSince() {
+    return this.ifUnmodifiedSince;
+  }
+  
+  public void setIfUnmodifiedSince(Date ifUnmodifiedSince) {
+    this.ifUnmodifiedSince = ifUnmodifiedSince;
+  }
+  
+  public String[] getIfMatch() {
+    return this.ifMatch;
+  }
+  
+  public void setIfMatch(String[] ifMatch) {
+    this.ifMatch = ifMatch;
+  }
+
+  public String[] getIfNoneMatch() {
+    return this.ifNoneMatch;
+  }
+  
+  public void setIfNoneMatch(String[] ifNoneMatch) {
+    this.ifNoneMatch = ifNoneMatch;
+  }
+  
+  public boolean getAllowCache() {
+    return this.allowCache;
+  }
+  
+  public void setAllowCache(boolean allowCache) {
+    this.allowCache = allowCache;
+  }
+  
+  public String getRequestHeader(String name) {
+    if (requestHeaders == null) requestHeaders = new HashMap<String,String>();
+    return requestHeaders.get(name);
+  }
+  
+  public void setRequestHeader(String name, String value) {
+    if (requestHeaders == null) requestHeaders = new HashMap<String,String>();
+    requestHeaders.put(name, value);
+  }
+  
+  public String getResponseHeader(String name) {
+    if (responseHeaders == null) responseHeaders = new HashMap<String,String>();
+    return responseHeaders.get(name);
+  }
+  
+  public void setResponseHeader(String name, String value) {
+    if (responseHeaders == null) responseHeaders = new HashMap<String,String>();
+    responseHeaders.put(name, value);
+  }  
+  
+  public boolean getCaptureResponseHeaders() {
+    return this.captureResponseHeaders;
+  }
+  
+  public void setCaptureResponseHeaders(boolean capture) {
+    this.captureResponseHeaders = capture;
+  }
+}

Added: incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/ServerException.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/ServerException.java?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/ServerException.java (added)
+++ incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/ServerException.java Fri Jun 16 13:10:47 2006
@@ -0,0 +1,42 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements.  The ASF licenses this file to You
+* under the Apache License, Version 2.0 (the "License"); you may not
+* use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.  For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*/
+package org.apache.abdera.examples.appclient;
+
+public class ServerException extends Exception {
+  
+  private static final long serialVersionUID = 5504210977069968631L;
+  private int status = 500;
+  
+  public ServerException(String message) {
+    super(message);
+  }
+  
+  public ServerException(int status, String message) {
+    super(message);
+    this.status = status;
+  }
+  
+  public int getStatus() {
+    return status;
+  }
+
+  public static boolean isServerException(int status) {
+    return (status >= 500 && status < 600);
+  }
+  
+}

Added: incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/SimpleSSLProtocolSocketFactory.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/SimpleSSLProtocolSocketFactory.java?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/SimpleSSLProtocolSocketFactory.java (added)
+++ incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/appclient/SimpleSSLProtocolSocketFactory.java Fri Jun 16 13:10:47 2006
@@ -0,0 +1,94 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements.  The ASF licenses this file to You
+* under the Apache License, Version 2.0 (the "License"); you may not
+* use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.  For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*/
+package org.apache.abdera.examples.appclient;
+
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.Socket;
+import java.net.UnknownHostException;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+
+import org.apache.commons.httpclient.ConnectTimeoutException;
+import org.apache.commons.httpclient.params.HttpConnectionParams;
+import org.apache.commons.httpclient.protocol.SecureProtocolSocketFactory;
+
+public class SimpleSSLProtocolSocketFactory 
+  implements SecureProtocolSocketFactory {
+
+  private SSLContext context = null;
+  
+  public SimpleSSLProtocolSocketFactory() {
+    try {
+      TrustManager tm = new X509TrustManager() {
+        public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}
+        public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}
+        public X509Certificate[] getAcceptedIssuers() {
+          return null;
+        }
+      };
+      context = SSLContext.getInstance("SSL");
+      context.init(null, new TrustManager[] {tm}, null);
+    } catch (Exception e) {}
+  }
+
+  public Socket createSocket(
+    Socket socket, 
+    String host, 
+    int port, 
+    boolean close) 
+      throws IOException, 
+             UnknownHostException {
+    return context.getSocketFactory().createSocket(socket, host, port, close);
+  }
+
+  public Socket createSocket(
+    String host, 
+    int port, 
+    InetAddress chost, 
+    int cport) 
+      throws IOException, 
+             UnknownHostException {
+    return context.getSocketFactory().createSocket(host, port, chost, cport);
+  }
+
+  public Socket createSocket(
+    String host, 
+    int port, 
+    InetAddress chost, 
+    int cport, 
+    HttpConnectionParams params) 
+      throws IOException, 
+             UnknownHostException, 
+             ConnectTimeoutException {
+    return context.getSocketFactory().createSocket(host, port, chost, cport);
+  }
+
+  public Socket createSocket(
+    String host, 
+    int port) 
+      throws IOException, 
+             UnknownHostException {
+    return context.getSocketFactory().createSocket(host, port);
+  }
+
+}

Added: incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/simple/Create.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/simple/Create.java?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/simple/Create.java (added)
+++ incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/simple/Create.java Fri Jun 16 13:10:47 2006
@@ -0,0 +1,61 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements.  The ASF licenses this file to You
+* under the Apache License, Version 2.0 (the "License"); you may not
+* use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.  For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*/
+package org.apache.abdera.examples.simple;
+
+import java.util.Date;
+
+import org.apache.abdera.factory.Factory;
+import org.apache.abdera.model.Entry;
+import org.apache.abdera.model.Feed;
+
+
+public class Create {
+
+  public static void main(String[] args) throws Exception {
+    
+    Feed feed = Factory.INSTANCE.newFeed();
+    feed.setLanguage("en-US");
+    feed.setBaseUri("http://example.org");
+    
+    feed.setTitleAsText("Example Feed");
+    feed.addLink("http://example.org/");
+    feed.setUpdated(new Date());
+    feed.addAuthor("John Doe");
+    feed.setId("urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6", false);
+    feed.addContributor("Bob Jones");
+    feed.addCategory("example");
+    
+    Entry entry = feed.insertEntry();
+    entry.setTitleAsText("Atom-Powered Robots Run Amok");
+    entry.addLink("http://example.org/2003/12/13/atom03");
+    entry.setId("urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a", false);
+    entry.setUpdated(new Date());
+    entry.setSummaryAsText("Some text.");
+    
+    Entry entry2 = feed.insertEntry();
+    entry2.setTitleAsText("re: Atom-Powered Robots Run Amok");
+    entry2.addLink("/2003/12/13/atom03/1");
+    entry2.setId("urn:uuid:1225c695-cfb8-4ebb-aaaa-80cb323feb5b", false);
+    entry2.setUpdated(new Date());
+    entry2.setSummaryAsText("A response");
+    entry2.addInReplyTo(entry);
+    
+    feed.getDocument().writeTo(System.out);
+  }
+
+}

Added: incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/simple/Parse.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/simple/Parse.java?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/simple/Parse.java (added)
+++ incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/simple/Parse.java Fri Jun 16 13:10:47 2006
@@ -0,0 +1,55 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements.  The ASF licenses this file to You
+* under the Apache License, Version 2.0 (the "License"); you may not
+* use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.  For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*/
+package org.apache.abdera.examples.simple;
+
+import java.io.InputStream;
+
+import org.apache.abdera.model.Document;
+import org.apache.abdera.model.Entry;
+import org.apache.abdera.model.Feed;
+import org.apache.abdera.parser.Parser;
+
+
+public class Parse {
+
+  public static void main(String[] args) throws Exception {
+    
+    InputStream in = Parse.class.getResourceAsStream("/simple.xml");
+    Document<Feed> doc = Parser.INSTANCE.parse(in);
+    Feed feed = doc.getRoot();
+    
+    System.out.println(feed.getTitle());
+    System.out.println(feed.getTitleType());
+    System.out.println(feed.getAlternateLink().getResolvedHref());
+    System.out.println(feed.getUpdated());
+    System.out.println(feed.getAuthor().getName());
+    System.out.println(feed.getId());
+    
+    Entry entry = feed.getEntries().get(0);
+
+    System.out.println(entry.getTitle());
+    System.out.println(entry.getTitleType());
+    System.out.println(entry.getAlternateLink().getResolvedHref());
+    System.out.println(entry.getId());
+    System.out.println(entry.getUpdated());
+    System.out.println(entry.getSummary());
+    System.out.println(entry.getSummaryType());
+    
+  }
+  
+}

Added: incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/simple/PrintTitles.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/simple/PrintTitles.java?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/simple/PrintTitles.java (added)
+++ incubator/abdera/java/trunk/examples/src/main/java/org/apache/abdera/examples/simple/PrintTitles.java Fri Jun 16 13:10:47 2006
@@ -0,0 +1,75 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements.  The ASF licenses this file to You
+* under the Apache License, Version 2.0 (the "License"); you may not
+* use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.  For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*/
+package org.apache.abdera.examples.simple;
+
+import java.io.InputStream;
+import java.net.URL;
+import java.util.List;
+
+import org.apache.abdera.filter.ParseFilter;
+import org.apache.abdera.model.Document;
+import org.apache.abdera.model.Entry;
+import org.apache.abdera.model.Feed;
+import org.apache.abdera.parser.Parser;
+import org.apache.abdera.parser.ParserOptions;
+import org.apache.abdera.util.Constants;
+import org.apache.abdera.util.WhiteListParseFilter;
+
+/**
+ * Illustrates the use of optimized-parsing using the WhiteListParseFilter.
+ * Using this mechanism, only the elements added to the ParseFilter will
+ * be parsed and added to the Feed Object Model instance.  The resulting
+ * savings in memory and CPU costs is significant.
+ */
+public class PrintTitles {
+  public static void main(String args[]) {
+    InputStream input;
+
+    try {
+      input = new URL(args[0]).openStream();
+    } catch (Exception e) {
+      e.printStackTrace();
+      return;
+    }
+
+    ParserOptions opts = Parser.INSTANCE.getDefaultParserOptions();
+
+    ParseFilter filter = new WhiteListParseFilter();
+    filter.add(Constants.FEED);
+    filter.add(Constants.ENTRY);
+    filter.add(Constants.TITLE);
+    opts.setParseFilter(filter);
+
+    Document<Feed> doc;
+
+    try { 
+      doc = Parser.INSTANCE.parse(input, "", opts);
+    } catch (Exception e) {
+      e.printStackTrace();
+      return;
+    }
+
+    Feed feed = doc.getRoot();
+
+    List<Entry> entries = feed.getEntries();
+
+    for (Entry e : entries) {
+      System.out.println(e.getTitle());
+    }
+  }
+}

Added: incubator/abdera/java/trunk/examples/src/main/resources/simple.xml
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/examples/src/main/resources/simple.xml?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/examples/src/main/resources/simple.xml (added)
+++ incubator/abdera/java/trunk/examples/src/main/resources/simple.xml Fri Jun 16 13:10:47 2006
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+  
+  <title>Example Feed</title>
+  <link href="http://example.org/"/>
+  <updated>2003-12-13T18:30:02Z</updated>
+  <author>
+    <name>John Doe</name>
+  </author>
+  <id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id>
+
+  <entry>
+    <title>Atom-Powered Robots Run Amok</title>
+    <link href="http://example.org/2003/12/13/atom03"/>
+    <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
+    <updated>2003-12-13T18:30:02Z</updated>
+    <summary>Some text.</summary>
+  </entry>
+
+</feed>
\ No newline at end of file

Added: incubator/abdera/java/trunk/parser/pom.xml
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/parser/pom.xml?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/parser/pom.xml (added)
+++ incubator/abdera/java/trunk/parser/pom.xml Fri Jun 16 13:10:47 2006
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project 
+  xmlns="http://maven.apache.org/POM/4.0.0" 
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <parent>
+    <groupId>org.apache.abdera</groupId>
+    <artifactId>abdera</artifactId>
+    <version>0.1-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>abdera-parser</artifactId>
+  <packaging>jar</packaging>
+  <name>Abdera Parser</name>
+  <version>0.1-SNAPSHOT</version>
+  <description>Atom Specification Implementation Parser</description>
+  <inceptionYear>2006</inceptionYear>
+  <dependencies>
+      <dependency>
+        <groupId>junit</groupId>
+        <artifactId>junit</artifactId>
+        <version>3.8.2</version>
+        <scope>test</scope>
+      </dependency>
+    <dependency>
+      <groupId>org.apache.abdera</groupId>
+      <artifactId>abdera-core</artifactId>
+      <version>0.1-SNAPSHOT</version>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>ws-commons</groupId>
+      <artifactId>axiom-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>ws-commons</groupId>
+      <artifactId>axiom-impl</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>stax</groupId>
+      <artifactId>stax-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>stax</groupId>
+      <artifactId>stax</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>jaxen</groupId>
+      <artifactId>jaxen</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>commons-logging</groupId>
+      <artifactId>commons-logging</artifactId>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+</project>

Propchange: incubator/abdera/java/trunk/parser/pom.xml
------------------------------------------------------------------------------
    svn:executable = *



Mime
View raw message