You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@abdera.apache.org by jm...@apache.org on 2006/06/16 22:10:56 UTC
svn commit: r414893 [3/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...
Added: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Service.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Service.java?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Service.java (added)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Service.java Fri Jun 16 13:10:47 2006
@@ -0,0 +1,77 @@
+/*
+* 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.model;
+
+import java.util.List;
+
+/**
+ * <p>Represents the root of an Atom Publishing Protocol Introspection Document.</p>
+ *
+ * <p>Per APP Draft-08:</p>
+ *
+ * <pre>
+ * The root of an introspection document is the "app:service" element.
+ *
+ * The "app:service" element is the container for introspection
+ * information associated with one or more workspaces. An app:service
+ * element MUST contain one or more app:workspace elements.
+ *
+ * appService =
+ * element app:service {
+ * appCommonAttributes,
+ * ( appWorkspace+
+ * & extensionElement* )
+ * }
+ * </pre>
+ *
+ * @author James M Snell (jasnell@us.ibm.com)
+ */
+public interface Service
+ extends ExtensibleElement, ExtensionElement {
+
+ /**
+ * Return the complete set of workspaces
+ */
+ List<Workspace> getWorkspaces();
+
+ /**
+ * Return the named workspace
+ */
+ Workspace getWorkspace(String title);
+
+ /**
+ * Set the complete set of workspaces
+ */
+ void setWorkspaces(List<Workspace> workspaces);
+
+ /**
+ * Add an individual workspace
+ */
+ void addWorkspace(Workspace workspace);
+
+ /**
+ * Add an individual workspace
+ */
+ Workspace addWorkspace(String title);
+
+ /**
+ * Returns the named collection
+ */
+ Collection getCollection(String workspace, String collection);
+
+}
Added: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Source.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Source.java?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Source.java (added)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Source.java Fri Jun 16 13:10:47 2006
@@ -0,0 +1,653 @@
+/*
+* 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.model;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+import javax.activation.MimeType;
+import javax.activation.MimeTypeParseException;
+
+/**
+ * <p>Per RFC4287:</p>
+ *
+ * <pre>
+ * If an atom:entry is copied from one feed into another feed, then the
+ * source atom:feed's metadata (all child elements of atom:feed other
+ * than the atom:entry elements) MAY be preserved within the copied
+ * entry by adding an atom:source child element, if it is not already
+ * present in the entry, and including some or all of the source feed's
+ * Metadata elements as the atom:source element's children. Such
+ * metadata SHOULD be preserved if the source atom:feed contains any of
+ * the child elements atom:author, atom:contributor, atom:rights, or
+ * atom:category and those child elements are not present in the source
+ * atom:entry.
+ *
+ * atomSource =
+ * element atom:source {
+ * atomCommonAttributes,
+ * (atomAuthor*
+ * & atomCategory*
+ * & atomContributor*
+ * & atomGenerator?
+ * & atomIcon?
+ * & atomId?
+ * & atomLink*
+ * & atomLogo?
+ * & atomRights?
+ * & atomSubtitle?
+ * & atomTitle?
+ * & atomUpdated?
+ * & extensionElement*)
+ * }
+ *
+ * The atom:source element is designed to allow the aggregation of
+ * entries from different feeds while retaining information about an
+ * entry's source feed. For this reason, Atom Processors that are
+ * performing such aggregation SHOULD include at least the required
+ * feed-level Metadata elements (atom:id, atom:title, and atom:updated)
+ * in the atom:source element.
+ * </pre>
+ *
+ * @author James M Snell (jasnell@us.ibm.com)
+ */
+public interface Source
+ extends ExtensibleElement, ExtensionElement {
+ /**
+ * Returns the first author listed for the entry
+ */
+ Person getAuthor();
+
+ /**
+ * Returns the complete set of authors listed for the entry
+ */
+ List<Person> getAuthors();
+
+ /**
+ * Sets the complete set of authors for the entry
+ */
+ void setAuthors(List<Person> people);
+
+ /**
+ * Adds an individual author to the entry
+ */
+ void addAuthor(Person person);
+
+ /**
+ * Adds an author
+ * @throws URISyntaxException
+ */
+ Person addAuthor(String name);
+
+ /**
+ * Adds an author
+ * @throws URISyntaxException
+ */
+ Person addAuthor(String name, String email, String uri) throws URISyntaxException;
+
+ /**
+ * Adds an author
+ * @throws URISyntaxException
+ */
+ Person addAuthor(String name, String email, URI uri) throws URISyntaxException;
+
+ /**
+ * Lists the complete set of categories listed for the entry
+ */
+ List<Category> getCategories();
+
+ /**
+ * Lists the complete set of categories using the specified scheme
+ * @throws URISyntaxException
+ */
+ List<Category> getCategories(String scheme) throws URISyntaxException;
+
+ /**
+ * Lists the complete set of categories using the specified scheme
+ */
+ List<Category> getCategories(URI scheme);
+
+ /**
+ * Sets the complete set of categories
+ */
+ void setCategories(List<Category> categories);
+
+ /**
+ * Adds an individual category to the entry
+ */
+ void addCategory(Category category);
+
+ /**
+ * Adds a category to the feed
+ */
+ Category addCategory(String term);
+
+ /**
+ * Adds a category to the feed
+ */
+ Category addCategory(URI scheme, String term, String label);
+
+ /**
+ * Adds a category to the feed
+ * @throws URISyntaxException
+ */
+ Category addCategory(String scheme, String term, String label) throws URISyntaxException;
+
+ /**
+ * Lists the complete set of contributors for this entry
+ */
+ List<Person> getContributors();
+
+ /**
+ * Sets the complete list of contributors for this entry
+ */
+ void setContributors(List<Person> people);
+
+ /**
+ * Adds an individual contributor to this entry
+ */
+ void addContributor(Person person);
+
+ /**
+ * Adds an author
+ * @throws URISyntaxException
+ */
+ Person addContributor(String name);
+
+ /**
+ * Adds an author
+ * @throws URISyntaxException
+ */
+ Person addContributor(String name, String email, String uri) throws URISyntaxException;
+
+ /**
+ * Adds an author
+ * @throws URISyntaxException
+ */
+ Person addContributor(String name, String email, URI uri) throws URISyntaxException;
+
+ /**
+ * RFC4287: The "atom:generator" element's content identifies the
+ * agent used to generate a feed, for debugging and other purposes.
+ */
+ Generator getGenerator();
+
+ /**
+ * RFC4287: The "atom:generator" element's content identifies the
+ * agent used to generate a feed, for debugging and other purposes.
+ */
+ void setGenerator(Generator generator);
+
+ /**
+ * RFC4287: The "atom:generator" element's content identifies the
+ * agent used to generate a feed, for debugging and other purposes.
+ */
+ Generator setGenerator(
+ URI uri,
+ String version,
+ String value);
+
+ /**
+ * RFC4287: The "atom:generator" element's content identifies the
+ * agent used to generate a feed, for debugging and other purposes.
+ */
+ Generator setGenerator(
+ String uri,
+ String version,
+ String value)
+ throws URISyntaxException;
+
+ /**
+ * RFC4287: The "atom:icon" element's content is an IRI reference
+ * [RFC3987] that identifies an image that provides iconic visual
+ * identification for a feed... The image SHOULD have an aspect ratio
+ * of one (horizontal) to one (vertical) and SHOULD be suitable for
+ * presentation at a small size.
+ */
+ IRI getIconElement();
+
+ /**
+ * RFC4287: The "atom:icon" element's content is an IRI reference
+ * [RFC3987] that identifies an image that provides iconic visual
+ * identification for a feed... The image SHOULD have an aspect ratio
+ * of one (horizontal) to one (vertical) and SHOULD be suitable for
+ * presentation at a small size.
+ */
+ void setIconElement(IRI iri);
+
+ /**
+ * RFC4287: The "atom:icon" element's content is an IRI reference
+ * [RFC3987] that identifies an image that provides iconic visual
+ * identification for a feed... The image SHOULD have an aspect ratio
+ * of one (horizontal) to one (vertical) and SHOULD be suitable for
+ * presentation at a small size.
+ * @throws URISyntaxException
+ */
+ IRI setIcon(String iri) throws URISyntaxException;
+
+ /**
+ * RFC4287: The "atom:icon" element's content is an IRI reference
+ * [RFC3987] that identifies an image that provides iconic visual
+ * identification for a feed... The image SHOULD have an aspect ratio
+ * of one (horizontal) to one (vertical) and SHOULD be suitable for
+ * presentation at a small size.
+ */
+ IRI setIcon(URI iri);
+
+ /**
+ * RFC4287: The "atom:icon" element's content is an IRI reference
+ * [RFC3987] that identifies an image that provides iconic visual
+ * identification for a feed... The image SHOULD have an aspect ratio
+ * of one (horizontal) to one (vertical) and SHOULD be suitable for
+ * presentation at a small size.
+ * @throws URISyntaxException
+ */
+ URI getIcon() throws URISyntaxException;
+
+ /**
+ * RFC4287: The "atom:id" element conveys a permanent, universally unique
+ * identifier for an entry or feed.
+ */
+ IRI getIdElement();
+
+ /**
+ * RFC4287: The "atom:id" element conveys a permanent, universally unique
+ * identifier for an entry or feed.
+ */
+ void setIdElement(IRI id);
+
+ /**
+ * Returns the universally unique identifier for this feed
+ * @throws URISyntaxException
+ */
+ URI getId() throws URISyntaxException;
+
+ /**
+ * Sets the universally unique identifier for this feed
+ */
+ IRI setId(URI id) throws URISyntaxException;
+
+ /**
+ * Sets the universally unique identifier for this feed
+ * @throws URISyntaxException
+ */
+ IRI setId(String id) throws URISyntaxException;
+
+ /**
+ * Sets the universally unique identifier for this feed
+ */
+ IRI setId(URI id, boolean normalize) throws URISyntaxException;
+
+ /**
+ * Sets the universally unique identifier for this feed
+ * @throws URISyntaxException
+ */
+ IRI setId(String id, boolean normalize) throws URISyntaxException;
+
+ /**
+ * Lists the complete set of links for this entry
+ */
+ List<Link> getLinks();
+
+ /**
+ * Lists the complete set of links using the specified rel attribute value
+ */
+ List<Link> getLinks(String rel);
+
+ /**
+ * Sets the complete set of links for the entry
+ */
+ void setLinks(List<Link> links);
+
+ /**
+ * Adds an individual link to the entry
+ */
+ void addLink(Link link);
+
+ Link addLink(String href) throws URISyntaxException;
+
+ Link addLink(String href, String rel) throws URISyntaxException;
+
+ Link addLink(URI href);
+
+ Link addLink(URI href, String rel);
+
+ Link addLink(URI href, String rel, MimeType type, String title, String hreflang, long length);
+
+ Link addLink(String href, String rel, MimeType type, String title, String hreflang, long length) throws URISyntaxException;
+
+ Link addLink(URI href, String rel, String type, String title, String hreflang, long length) throws MimeTypeParseException;
+
+ Link addLink(String href, String rel, String type, String title, String hreflang, long length) throws URISyntaxException, MimeTypeParseException;
+
+
+ /**
+ * RFC4287: The "atom:logo" element's content is an IRI reference [RFC3987]
+ * that identifies an image that provides visual identification for a feed.
+ * The image SHOULD have an aspect ratio of 2 (horizontal) to 1 (vertical).
+ */
+ IRI getLogoElement();
+
+ /**
+ * RFC4287: The "atom:logo" element's content is an IRI reference [RFC3987]
+ * that identifies an image that provides visual identification for a feed.
+ * The image SHOULD have an aspect ratio of 2 (horizontal) to 1 (vertical).
+ */
+ void setLogoElement(IRI iri);
+
+ /**
+ * RFC4287: The "atom:logo" element's content is an IRI reference [RFC3987]
+ * that identifies an image that provides visual identification for a feed.
+ * The image SHOULD have an aspect ratio of 2 (horizontal) to 1 (vertical).
+ * @throws URISyntaxException
+ */
+ IRI setLogo(String iri) throws URISyntaxException;
+
+ /**
+ * RFC4287: The "atom:logo" element's content is an IRI reference [RFC3987]
+ * that identifies an image that provides visual identification for a feed.
+ * The image SHOULD have an aspect ratio of 2 (horizontal) to 1 (vertical).
+ */
+ IRI setLogo(URI iri);
+
+ /**
+ * RFC4287: The "atom:logo" element's content is an IRI reference [RFC3987]
+ * that identifies an image that provides visual identification for a feed.
+ * The image SHOULD have an aspect ratio of 2 (horizontal) to 1 (vertical).
+ * @throws URISyntaxException
+ */
+ URI getLogo() throws URISyntaxException;
+
+ /**
+ * <p>The rights element is typically used to convey a human readable
+ * copyright (e.g. "<atom:rights>Copyright (c), 2006</atom:rights>).</p>
+ *
+ * <p>RFC4287: The "atom:rights" element is a Text construct that conveys
+ * information about rights held in and over an entry or feed.</p>
+ */
+ Text getRightsElement();
+
+ /**
+ * <p>The rights element is typically used to convey a human readable
+ * copyright (e.g. "<atom:rights>Copyright (c), 2006</atom:rights>).</p>
+ *
+ * <p>RFC4287: The "atom:rights" element is a Text construct that conveys
+ * information about rights held in and over an entry or feed.</p>
+ */
+ void setRightsElement(Text text);
+
+ /**
+ * Sets the text of atom:rights as type="text"
+ */
+ Text setRightsAsText(String value);
+
+ /**
+ * Sets the text of atom:rights as type="html"
+ */
+ Text setRightsAsHtml(String value);
+
+ /**
+ * Sets the content of atom:rights as type="xhtml"
+ */
+ Text setRightsAsXhtml(String value);
+
+ /**
+ * Sets the content of atom:rights as type="xhtml"
+ */
+ Text setRightsAsXhtml(Div value);
+
+ /**
+ * Sets the text of atom:rights as type="html"
+ */
+ Text setRightsAsHtml(String value, URI baseUri);
+
+ /**
+ * Sets the content of atom:rights as type="xhtml"
+ */
+ Text setRightsAsXhtml(String value, URI baseUri);
+
+ /**
+ * Sets the content of atom:rights as type="xhtml"
+ */
+ Text setRightsAsXhtml(Div value, URI baseUri);
+
+ /**
+ * Sets the text of atom:rights as type="html"
+ * @throws URISyntaxException
+ */
+ Text setRightsAsHtml(String value, String baseUri) throws URISyntaxException;
+
+ /**
+ * Sets the content of atom:rights as type="xhtml"
+ * @throws URISyntaxException
+ */
+ Text setRightsAsXhtml(String value, String baseUri) throws URISyntaxException;
+
+ /**
+ * Sets the content of atom:rights as type="xhtml"
+ * @throws URISyntaxException
+ */
+ Text setRightsAsXhtml(Div value, String baseUri) throws URISyntaxException;
+
+ /**
+ * Returns the text of atom:rights
+ */
+ String getRights();
+
+ /**
+ * Returns the type of atom:rights
+ */
+ Text.Type getRightsType();
+
+ /**
+ * RFC4287: The "atom:subtitle" element is a Text construct that
+ * conveys a human-readable description or subtitle for a feed.
+ */
+ Text getSubtitleElement();
+
+ /**
+ * RFC4287: The "atom:subtitle" element is a Text construct that
+ * conveys a human-readable description or subtitle for a feed.
+ */
+ void setSubtitleElement(Text text);
+
+ /**
+ * Sets the value of atom:subtitle as type="text"
+ */
+ Text setSubtitleAsText(String value);
+
+ /**
+ * Sets the value of atom:subtitle as type="html
+ */
+ Text setSubtitleAsHtml(String value);
+
+ /**
+ * Sets the contnt of atom:subtitle as type="xhtml"
+ */
+ Text setSubtitleAsXhtml(String value);
+
+ /**
+ * Sets the content of atom:subtitle as type="xhtml"
+ */
+ Text setSubtitleAsXhtml(Div value);
+
+ /**
+ * Sets the value of atom:subtitle as type="html
+ */
+ Text setSubtitleAsHtml(String value, URI baseUri);
+
+ /**
+ * Sets the contnt of atom:subtitle as type="xhtml"
+ */
+ Text setSubtitleAsXhtml(String value, URI baseUri);
+
+ /**
+ * Sets the content of atom:subtitle as type="xhtml"
+ */
+ Text setSubtitleAsXhtml(Div value, URI baseUri);
+
+ /**
+ * Sets the value of atom:subtitle as type="html
+ * @throws URISyntaxException
+ */
+ Text setSubtitleAsHtml(String value, String baseUri) throws URISyntaxException;
+
+ /**
+ * Sets the contnt of atom:subtitle as type="xhtml"
+ * @throws URISyntaxException
+ */
+ Text setSubtitleAsXhtml(String value, String baseUri) throws URISyntaxException;
+
+ /**
+ * Sets the content of atom:subtitle as type="xhtml"
+ * @throws URISyntaxException
+ */
+ Text setSubtitleAsXhtml(Div value, String baseUri) throws URISyntaxException;
+
+ /**
+ * Returns the text value of atom:subtitle
+ */
+ String getSubtitle();
+
+ /**
+ * Returns the atom:subtitle type
+ */
+ Text.Type getSubtitleType();
+
+ /**
+ * RFC4287: The "atom:title" element is a Text construct that conveys a
+ * human-readable title for an entry or feed.
+ */
+ Text getTitleElement();
+
+ /**
+ * RFC4287: The "atom:title" element is a Text construct that conveys a
+ * human-readable title for an entry or feed.
+ */
+ void setTitleElement(Text text);
+
+ /**
+ * Sets the value of atom:title as type="text"
+ */
+ Text setTitleAsText(String value);
+
+ /**
+ * Sets the value of atom:title as type="html"
+ */
+ Text setTitleAsHtml(String value);
+
+ /**
+ * Sets the content of atom:title as type="xhtml"
+ */
+ Text setTitleAsXhtml(String value);
+
+ /**
+ * Sets the content of atom:title as type="xhtml"
+ */
+ Text setTitleAsXhtml(Div value);
+
+ /**
+ * Sets the value of atom:title as type="html"
+ */
+ Text setTitleAsHtml(String value, URI baseUri);
+
+ /**
+ * Sets the content of atom:title as type="xhtml"
+ */
+ Text setTitleAsXhtml(String value, URI baseUri);
+
+ /**
+ * Sets the content of atom:title as type="xhtml"
+ */
+ Text setTitleAsXhtml(Div value, URI baseUri);
+
+ /**
+ * Sets the value of atom:title as type="html"
+ * @throws URISyntaxException
+ */
+ Text setTitleAsHtml(String value, String baseUri) throws URISyntaxException;
+
+ /**
+ * Sets the content of atom:title as type="xhtml"
+ * @throws URISyntaxException
+ */
+ Text setTitleAsXhtml(String value, String baseUri) throws URISyntaxException;
+
+ /**
+ * Sets the content of atom:title as type="xhtml"
+ * @throws URISyntaxException
+ */
+ Text setTitleAsXhtml(Div value, String baseUri) throws URISyntaxException;
+
+ /**
+ * Returns the text of atom:title
+ */
+ String getTitle();
+
+ /**
+ * Returns the type of atom:title
+ */
+ Text.Type getTitleType();
+
+ /**
+ * RFC4287: The "atom:updated" element is a Date construct indicating
+ * the most recent instant in time when an entry or feed was modified
+ * in a way the publisher considers significant. Therefore, not all
+ * modifications necessarily result in a changed atom:updated value.
+ */
+ DateTime getUpdatedElement();
+
+ /**
+ * RFC4287: The "atom:updated" element is a Date construct indicating
+ * the most recent instant in time when an entry or feed was modified
+ * in a way the publisher considers significant. Therefore, not all
+ * modifications necessarily result in a changed atom:updated value.
+ */
+ void setUpdatedElement(DateTime dateTime);
+
+ String getUpdatedString();
+
+ Date getUpdated();
+
+ DateTime setUpdated(Date value);
+
+ DateTime setUpdated(Calendar value);
+
+ DateTime setUpdated(long value);
+
+ DateTime setUpdated(String value);
+
+ /**
+ * Returns the first link with the specified rel attribute value
+ */
+ Link getLink(String rel);
+
+ /**
+ * Returns the first link using the rel attribute value "self"
+ */
+ Link getSelfLink();
+
+ /**
+ * Returns this entries first alternate link
+ */
+ Link getAlternateLink();
+
+}
Added: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/StringElement.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/StringElement.java?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/StringElement.java (added)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/StringElement.java Fri Jun 16 13:10:47 2006
@@ -0,0 +1,33 @@
+/*
+* 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.model;
+
+/**
+ * <p>The StringElement interface provides a common base for a collection
+ * of elements whose content values may contain text</p>
+ *
+ * @author James M Snell (jasnell@us.ibm.com)
+ */
+public interface StringElement
+ extends ExtensionElement {
+
+ String getValue();
+
+ void setValue(String value);
+
+}
Added: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Text.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Text.java?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Text.java (added)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Text.java Fri Jun 16 13:10:47 2006
@@ -0,0 +1,90 @@
+/*
+* 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.model;
+
+/**
+/**
+ * <p>Represents an Atom Text Contruct.</p>
+ *
+ * <p>Atom allows three kinds of Text constructs:</p>
+ *
+ * <ul>
+ * <li>Text, consisting of content that is to be interpreted as plain text with
+ * no markup. For instance, <code><title type="text">&lt;title&gt;</title></code>
+ * is interpreted as literal characer "<" followed by the word "content",
+ * followed by the literal character ">".</li>
+ * <li>HTML, consisting of content that is to be interpreted as escaped HTML
+ * markup. For instance, <code><title type="html">&lt;b&gt;title&lt;/b&gt;</title></code>
+ * is interpreted as the word "content" surrounded by the HTML <code><b></code>
+ * and <code></b></code> tags.</li>
+ * <li>XHTML, consisting of well-formed XHTML content wrapped in an XHTML div element.
+ * For instance, <code><title type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><b>Title</b></div></title></code>.</li>
+ * </ul>
+ *
+ * <p>Per RFC4287:</p>
+ *
+ * <pre>
+ * A Text construct contains human-readable text, usually in small
+ * quantities. The content of Text constructs is Language-Sensitive.
+ *
+ * atomPlainTextConstruct =
+ * atomCommonAttributes,
+ * attribute type { "text" | "html" }?,
+ * text
+ *
+ * atomXHTMLTextConstruct =
+ * atomCommonAttributes,
+ * attribute type { "xhtml" },
+ * xhtmlDiv
+ *
+ * atomTextConstruct = atomPlainTextConstruct | atomXHTMLTextConstruct
+ * </pre>
+ *
+ * @author James M Snell (jasnell@us.ibm.com)
+ */
+public interface Text
+ extends StringElement {
+
+ public static enum Type {
+ TEXT, HTML, XHTML;
+
+ public static Type typeFromString(String val) {
+ Type type = TEXT;
+ if (val != null) {
+ if (val.equalsIgnoreCase("text"))
+ type = TEXT;
+ else if (val.equalsIgnoreCase("html"))
+ type = HTML;
+ else if (val.equalsIgnoreCase("xhtml"))
+ type = XHTML;
+ else
+ type = null;
+ }
+ return type;
+ }
+
+
+ };
+
+ Type getTextType();
+
+ Div getValueElement();
+
+ void setValueElement(Div value);
+
+}
Added: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Total.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Total.java?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Total.java (added)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Total.java Fri Jun 16 13:10:47 2006
@@ -0,0 +1,13 @@
+package org.apache.abdera.model;
+
+/**
+ * Provides an interface for the Atom Threading Extension total
+ * element.
+ */
+public interface Total extends ExtensionElement {
+
+ int getValue();
+
+ void setValue(int value);
+
+}
Added: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Workspace.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Workspace.java?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Workspace.java (added)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/model/Workspace.java Fri Jun 16 13:10:47 2006
@@ -0,0 +1,98 @@
+/*
+* 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.model;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.List;
+
+/**
+ * <p>An Atom Publishing Protocol Introspection Document workspace element.</p>
+ *
+ * <p>Per APP Draft-08</p>
+ *
+ * <pre>
+ * The "app:workspace" element contains information elements about the
+ * collections of resources available for editing. The app:workspace
+ * element MUST contain one or more app:collection elements.
+ *
+ * appWorkspace =
+ * element app:workspace {
+ * appCommonAttributes,
+ * attribute title { text },
+ * ( appCollection+
+ * & extensionElement* )
+ * }
+ *
+ * </pre>
+ *
+ * @author James M Snell (jasnell@us.ibm.com)
+ */
+public interface Workspace
+ extends ExtensibleElement, ExtensionElement {
+
+ /**
+ * APP Draft-08: The app:workspace element MUST contain a "title"
+ * attribute, which gives a human-readable name for the workspace.
+ * This attribute is Language-Sensitive.
+ */
+ String getTitle();
+
+ /**
+ * APP Draft-08: The app:workspace element MUST contain a "title"
+ * attribute, which gives a human-readable name for the workspace.
+ * This attribute is Language-Sensitive.
+ */
+ void setTitle(String title);
+
+ /**
+ * Returns the full set of collections in this workspace
+ */
+ List<Collection> getCollections();
+
+ /**
+ * Returns the named collection
+ */
+ Collection getCollection(String title);
+
+ /**
+ * Sets the full set of collections for this workspace
+ */
+ void setCollection(List<Collection> collections);
+
+ /**
+ * Adds an individual collection to this workspace
+ */
+ void addCollection(Collection collection);
+
+ /**
+ * Adds an individual collection to this workspace
+ */
+ Collection addCollection(
+ String title,
+ URI href);
+
+ /**
+ * Adds an individual collection to this workspace
+ */
+ Collection addCollection(
+ String title,
+ String href)
+ throws URISyntaxException;
+
+}
Added: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/parser/ParseException.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/parser/ParseException.java?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/parser/ParseException.java (added)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/parser/ParseException.java Fri Jun 16 13:10:47 2006
@@ -0,0 +1,44 @@
+/*
+* 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.parser;
+
+/**
+ * @author James M Snell (jasnell@us.ibm.com)
+ */
+public class ParseException
+ extends RuntimeException {
+
+ private static final long serialVersionUID = -2586758177341912116L;
+
+ public ParseException() {
+ super();
+ }
+
+ public ParseException(String message) {
+ super(message);
+ }
+
+ public ParseException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public ParseException(Throwable cause) {
+ super(cause);
+ }
+
+}
Added: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/parser/Parser.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/parser/Parser.java?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/parser/Parser.java (added)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/parser/Parser.java Fri Jun 16 13:10:47 2006
@@ -0,0 +1,70 @@
+/*
+* 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.parser;
+
+import java.io.InputStream;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import org.apache.abdera.model.Document;
+import org.apache.abdera.model.Element;
+import org.apache.abdera.util.ServiceUtil;
+
+
+/**
+ * @author James M Snell (jasnell@us.ibm.com)
+ *
+ * The Parser is the interface through which developers parse feed documents.
+ *
+ * <code>Document doc = Parser.INSTANCE.parse(inputStream, baseUri, options);</code>
+ */
+public interface Parser {
+
+ /**
+ * The default Parser instance
+ */
+ public static final Parser INSTANCE = ServiceUtil.newParserInstance();
+
+ <T extends Element>Document<T> parse(
+ InputStream in)
+ throws ParseException;
+
+ <T extends Element>Document<T> parse(
+ InputStream in,
+ URI base)
+ throws ParseException;
+
+ <T extends Element>Document<T> parse(
+ InputStream in,
+ URI base,
+ ParserOptions options)
+ throws ParseException;
+
+ <T extends Element>Document<T> parse(
+ InputStream in,
+ String base)
+ throws ParseException, URISyntaxException;
+
+ <T extends Element>Document<T> parse(
+ InputStream in,
+ String base,
+ ParserOptions options)
+ throws ParseException, URISyntaxException;
+
+ ParserOptions getDefaultParserOptions();
+}
Added: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/parser/ParserOptions.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/parser/ParserOptions.java?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/parser/ParserOptions.java (added)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/parser/ParserOptions.java Fri Jun 16 13:10:47 2006
@@ -0,0 +1,79 @@
+/*
+* 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.parser;
+
+import org.apache.abdera.factory.Factory;
+import org.apache.abdera.filter.ParseFilter;
+import org.apache.abdera.filter.TextFilter;
+
+
+/**
+ * @author James M Snell (jasnell@us.ibm.com)
+ *
+ * Parser options are used to modify the behavior of the parser.
+ */
+public interface ParserOptions {
+
+ /**
+ * Returns the factory the parser should use
+ */
+ Factory getFactory();
+
+ /**
+ * Sets the factory the parser should use
+ */
+ void setFactory(Factory factory);
+
+ /**
+ * Returns the default character set to use for the parsed document
+ */
+ String getCharset();
+
+ /**
+ * Sets the character set to use for the parsed document
+ */
+ void setCharset(String charset);
+
+ /**
+ * Returns the Parse Filter. The parse filter is a set of XML QNames that
+ * the parse should watch out for. If the filter is null, the parser will
+ * parse all elements in the document. I the filter is not null, the parser
+ * will only pay attention to elements whose QName's appear in the filter list.
+ */
+ ParseFilter getParseFilter();
+
+ /**
+ * Sets the Parse Filter. The parse filter is a set of XML QNames that
+ * the parse should watch out for. If the filter is null, the parser will
+ * parse all elements in the document. I the filter is not null, the parser
+ * will only pay attention to elements whose QName's appear in the filter list.
+ */
+ void setParseFilter(ParseFilter parseFilter);
+
+ /**
+ * Returns the TextFilter. The text filter provides filtering for all
+ * character strings encountered during the parse process.
+ */
+ TextFilter getTextFilter();
+
+ /**
+ * Sets the TextFilter. The text filter provides filtering for all
+ * character strings encountered during the parse process.
+ */
+ void setTextFilter(TextFilter textFilter);
+}
Added: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/AbstractParser.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/AbstractParser.java?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/AbstractParser.java (added)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/AbstractParser.java Fri Jun 16 13:10:47 2006
@@ -0,0 +1,69 @@
+/*
+* 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.util;
+
+import java.io.InputStream;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import org.apache.abdera.model.Document;
+import org.apache.abdera.model.Element;
+import org.apache.abdera.parser.ParseException;
+import org.apache.abdera.parser.Parser;
+import org.apache.abdera.parser.ParserOptions;
+
+
+/**
+ * @author James M Snell (jasnell@us.ibm.com)
+ */
+public abstract class AbstractParser
+ implements Parser {
+
+ public <T extends Element>Document<T> parse(
+ InputStream in)
+ throws ParseException {
+ return parse(in, (URI)null, getDefaultParserOptions());
+ }
+
+ public <T extends Element>Document<T> parse(
+ InputStream in,
+ URI base)
+ throws ParseException {
+ return parse(in, base, getDefaultParserOptions());
+ }
+
+ public <T extends Element>Document<T> parse(
+ InputStream in,
+ String base)
+ throws ParseException,
+ URISyntaxException {
+ return parse(in, new URI(base), getDefaultParserOptions());
+ }
+
+ public <T extends Element>Document<T> parse(
+ InputStream in,
+ String base,
+ ParserOptions options)
+ throws ParseException,
+ URISyntaxException {
+ return parse(in, new URI(base), options);
+ }
+
+ public abstract ParserOptions getDefaultParserOptions();
+
+}
Added: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/AbstractParserOptions.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/AbstractParserOptions.java?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/AbstractParserOptions.java (added)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/AbstractParserOptions.java Fri Jun 16 13:10:47 2006
@@ -0,0 +1,71 @@
+/*
+* 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.util;
+
+import org.apache.abdera.factory.Factory;
+import org.apache.abdera.filter.ParseFilter;
+import org.apache.abdera.filter.TextFilter;
+import org.apache.abdera.parser.ParserOptions;
+
+/**
+ * @author James M Snell (jasnell@us.ibm.com)
+ */
+public abstract class AbstractParserOptions
+ implements ParserOptions {
+
+ protected Factory factory = null;
+ protected String charset = null;
+ protected ParseFilter parseFilter = null;
+ protected TextFilter textFilter = null;
+
+ protected abstract void initFactory();
+ protected abstract void checkFactory(Factory factory);
+
+ public Factory getFactory() {
+ if (factory == null) initFactory();
+ return factory;
+ }
+
+ public void setFactory(Factory factory) {
+ checkFactory(factory);
+ this.factory = factory;
+ }
+
+ public String getCharset() {
+ return charset;
+ }
+
+ public void setCharset(String charset) {
+ this.charset = charset;
+ }
+
+ public ParseFilter getParseFilter() {
+ return parseFilter;
+ }
+ public void setParseFilter(ParseFilter parseFilter) {
+ this.parseFilter = parseFilter;
+ }
+
+ public TextFilter getTextFilter() {
+ return textFilter;
+ }
+
+ public void setTextFilter(TextFilter textFilter) {
+ this.textFilter = textFilter;
+ }
+}
Added: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/AbstractXPath.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/AbstractXPath.java?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/AbstractXPath.java (added)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/AbstractXPath.java Fri Jun 16 13:10:47 2006
@@ -0,0 +1,71 @@
+/*
+* 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.util;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.abdera.model.Base;
+import org.apache.abdera.xpath.XPath;
+import org.apache.abdera.xpath.XPathException;
+
+public abstract class AbstractXPath
+ implements XPath {
+
+ private Map<String,String> namespaces = null;
+
+ public Map<String, String> getDefaultNamespaces() {
+ if (namespaces == null)
+ namespaces = new HashMap<String,String>();
+ namespaces.put(Constants.PREFIX, Constants.ATOM_NS);
+ namespaces.put(Constants.APP_PREFIX, Constants.APP_NS);
+ namespaces.put(Constants.CONTROL_PREFIX, Constants.CONTROL_NS);
+ namespaces.put(Constants.THR_PREFIX, Constants.THR_NS);
+ return namespaces;
+ }
+
+ public void setDefaultNamespaces(Map<String, String> namespaces) {
+ this.namespaces = namespaces;
+ }
+
+ public List selectNodes(String path, Base base) throws XPathException {
+ return selectNodes(path, base, getDefaultNamespaces());
+ }
+
+ public Object selectSingleNode(String path, Base base) throws XPathException {
+ return selectSingleNode(path, base, getDefaultNamespaces());
+ }
+
+ public Object evaluate(String path, Base base) throws XPathException {
+ return evaluate(path, base, getDefaultNamespaces());
+ }
+
+ public String valueOf(String path, Base base) throws XPathException {
+ return valueOf(path, base, getDefaultNamespaces());
+ }
+
+ public boolean isTrue(String path, Base base) throws XPathException {
+ return isTrue(path, base, getDefaultNamespaces());
+ }
+
+ public Number numericValueOf(String path, Base base) throws XPathException {
+ return numericValueOf(path, base, getDefaultNamespaces());
+ }
+
+}
Added: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/BlackListParseFilter.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/BlackListParseFilter.java?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/BlackListParseFilter.java (added)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/BlackListParseFilter.java Fri Jun 16 13:10:47 2006
@@ -0,0 +1,37 @@
+/*
+* 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.util;
+
+import javax.xml.namespace.QName;
+
+import org.apache.abdera.filter.ParseFilter;
+
+/**
+ * BlackList Implementation of ParseFilter. The
+ * QNames listed will be considered unacceptable
+ */
+public class BlackListParseFilter extends ParseFilter {
+
+ public boolean acceptable(QName qname) {
+ return !contains(qname);
+ }
+
+ public boolean acceptableAttribute(QName qname, QName attribute) {
+ return !containsAttribute(qname, attribute);
+ }
+}
Added: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/ConfigProperties.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/ConfigProperties.java?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/ConfigProperties.java (added)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/ConfigProperties.java Fri Jun 16 13:10:47 2006
@@ -0,0 +1,71 @@
+/*
+* 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.util;
+
+import java.util.ResourceBundle;
+
+/**
+ * @author James M Snell (jasnell@us.ibm.com)
+ */
+public final class ConfigProperties
+ implements Constants {
+
+ ConfigProperties() {}
+
+ private static ResourceBundle BUNDLE = null;
+ private static String parser = null;
+ private static String factory = null;
+ private static String xpath = null;
+
+ private static ResourceBundle getBundle() {
+ if (BUNDLE == null) {
+ try {
+ BUNDLE = ResourceBundle.getBundle("abdera");
+ } catch (Exception e) {}
+ }
+ return BUNDLE;
+ }
+
+ public static String getConfigurationOption(String id) {
+ String option = System.getProperty(id);
+ try {
+ if (getBundle() != null && option == null)
+ option = getBundle().getString(id);
+ } catch (Exception e) {}
+ return option;
+ }
+
+ public static String getDefaultXPath() {
+ if (xpath == null)
+ xpath = getConfigurationOption(CONFIG_XPATH);
+ return (xpath != null) ? xpath : DEFAULT_XPATH;
+ }
+
+ public static String getDefaultParser() {
+ if (parser == null)
+ parser = getConfigurationOption(CONFIG_PARSER);
+ return (parser != null) ? parser : DEFAULT_PARSER;
+ }
+
+ public static String getDefaultFactory() {
+ if (factory == null)
+ factory = getConfigurationOption(CONFIG_FACTORY);
+ return (factory != null) ? factory : DEFAULT_FACTORY;
+ }
+
+}
Added: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/Constants.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/Constants.java?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/Constants.java (added)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/Constants.java Fri Jun 16 13:10:47 2006
@@ -0,0 +1,159 @@
+/*
+* 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.util;
+
+import javax.xml.namespace.QName;
+
+/**
+ * @author James M Snell (jasnell@us.ibm.com)
+ */
+public interface Constants {
+
+ public static final String CONFIG_PARSER = "org.apache.abdera.parser.Parser";
+ public static final String CONFIG_FACTORY = "org.apache.abdera.factory.Factory";
+ public static final String CONFIG_XPATH = "org.apache.abdera.xpath.XPath";
+ public static final String DEFAULT_PARSER = "org.apache.abdera.parser.stax.FOMParser";
+ public static final String DEFAULT_FACTORY = "org.apache.abdera.parser.stax.FOMFactory";
+ public static final String DEFAULT_XPATH = "org.apache.abdera.parser.stax.FOMXPath";
+ public static final String PREFIX = "a";
+ public static final String APP_PREFIX = "app";
+ public static final String CONTROL_PREFIX = "pub";
+
+ public static final String ATOM_MEDIA_TYPE = "application/atom+xml";
+ public static final String MULTIPART_MEDIA_TYPE = "multipart/related";
+
+ public static final String ATOM_NS = "http://www.w3.org/2005/Atom";
+ public static final String APP_NS = "http://purl.org/atom/app#";
+ public static final String CONTROL_NS = "http://example.net/appns/";
+ public static final String XML_NS = "http://www.w3.org/XML/1998/namespace";
+ public static final String XHTML_NS = "http://www.w3.org/1999/xhtml";
+
+ public static final String LN_ACCEPT = "accept";
+ public static final String LN_CLASS = "class";
+ public static final String LN_DIV = "div";
+ public static final String LN_FEED = "feed";
+ public static final String LN_ENTRY = "entry";
+ public static final String LN_SERVICE = "service";
+ public static final String LN_AUTHOR = "author";
+ public static final String LN_CATEGORY = "category";
+ public static final String LN_CONTENT = "content";
+ public static final String LN_CONTRIBUTOR = "contributor";
+ public static final String LN_GENERATOR = "generator";
+ public static final String LN_ICON = "icon";
+ public static final String LN_ID = "id";
+ public static final String LN_LOGO = "logo";
+ public static final String LN_LINK = "link";
+ public static final String LN_PUBLISHED = "published";
+ public static final String LN_RIGHTS = "rights";
+ public static final String LN_SOURCE = "source";
+ public static final String LN_SUBTITLE = "subtitle";
+ public static final String LN_SUMMARY = "summary";
+ public static final String LN_TITLE = "title";
+ public static final String LN_UPDATED = "updated";
+ public static final String LN_TERM = "term";
+ public static final String LN_SCHEME = "scheme";
+ public static final String LN_LABEL = "label";
+ public static final String LN_HREF = "href";
+ public static final String LN_MEMBERTYPE = "member-type";
+ public static final String LN_LANG = "lang";
+ public static final String LN_BASE = "base";
+ public static final String LN_URI = "uri";
+ public static final String LN_VERSION = "version";
+ public static final String LN_REL = "rel";
+ public static final String LN_TYPE = "type";
+ public static final String LN_HREFLANG = "hreflang";
+ public static final String LN_LENGTH = "length";
+ public static final String LN_NAME = "name";
+ public static final String LN_EMAIL = "email";
+ public static final String LN_WORKSPACE = "workspace";
+ public static final String LN_SRC = "src";
+ public static final String LN_COLLECTION = "collection";
+ public static final String LN_CONTROL = "control";
+ public static final String LN_DRAFT = "draft";
+
+ public static final QName DIV = new QName(XHTML_NS, LN_DIV, "xhtml");
+ public static final QName CONTROL = new QName(CONTROL_NS, LN_CONTROL, CONTROL_PREFIX);
+ public static final QName DRAFT = new QName(CONTROL_NS, LN_DRAFT, CONTROL_PREFIX);
+ public static final QName FEED = new QName(ATOM_NS, LN_FEED, PREFIX);
+ public static final QName SERVICE = new QName(APP_NS, LN_SERVICE, "app");
+ public static final QName AUTHOR = new QName(ATOM_NS, LN_AUTHOR, PREFIX);
+ public static final QName CATEGORY = new QName(ATOM_NS, LN_CATEGORY, PREFIX);
+ public static final QName CONTENT = new QName(ATOM_NS, LN_CONTENT, PREFIX);
+ public static final QName CONTRIBUTOR = new QName(ATOM_NS, LN_CONTRIBUTOR, PREFIX);
+ public static final QName GENERATOR = new QName(ATOM_NS, LN_GENERATOR, PREFIX);
+ public static final QName ICON = new QName(ATOM_NS, LN_ICON, PREFIX);
+ public static final QName ID = new QName(ATOM_NS, LN_ID, PREFIX);
+ public static final QName LOGO = new QName(ATOM_NS, LN_LOGO, PREFIX);
+ public static final QName LINK = new QName(ATOM_NS, LN_LINK, PREFIX);
+ public static final QName PUBLISHED = new QName(ATOM_NS, LN_PUBLISHED, PREFIX);
+ public static final QName RIGHTS = new QName(ATOM_NS, LN_RIGHTS, PREFIX);
+ public static final QName SOURCE = new QName(ATOM_NS, LN_SOURCE, PREFIX);
+ public static final QName SUBTITLE = new QName(ATOM_NS, LN_SUBTITLE, PREFIX);
+ public static final QName SUMMARY = new QName(ATOM_NS, LN_SUMMARY, PREFIX);
+ public static final QName TITLE = new QName(ATOM_NS, LN_TITLE, PREFIX);
+ public static final QName UPDATED = new QName(ATOM_NS, LN_UPDATED, PREFIX);
+ public static final QName ENTRY = new QName(ATOM_NS, LN_ENTRY, PREFIX);
+ public static final QName TERM = new QName(LN_TERM);
+ public static final QName SCHEME = new QName(LN_SCHEME);
+ public static final QName LABEL = new QName(LN_LABEL);
+ public static final QName ATITLE = new QName(LN_TITLE);
+ public static final QName HREF = new QName(LN_HREF);
+ public static final QName MEMBER_TYPE = new QName(APP_NS, LN_MEMBERTYPE, APP_PREFIX);
+ public static final QName ACCEPT = new QName(APP_NS, LN_ACCEPT, APP_PREFIX);
+ public static final QName LANG = new QName(XML_NS, LN_LANG, "xml");
+ public static final QName BASE = new QName(XML_NS, LN_BASE, "xml");
+ public static final QName AURI = new QName(LN_URI);
+ public static final QName VERSION = new QName(LN_VERSION);
+ public static final QName REL = new QName(LN_REL);
+ public static final QName TYPE = new QName(LN_TYPE);
+ public static final QName HREFLANG = new QName(LN_HREFLANG);
+ public static final QName LENGTH = new QName(LN_LENGTH);
+ public static final QName NAME = new QName(ATOM_NS, LN_NAME, PREFIX);
+ public static final QName EMAIL = new QName(ATOM_NS, LN_EMAIL, PREFIX);
+ public static final QName URI = new QName(ATOM_NS, LN_URI, PREFIX);
+ public static final QName WORKSPACE = new QName(APP_NS, LN_WORKSPACE, APP_PREFIX);
+ public static final QName SRC = new QName(LN_SRC);
+ public static final QName COLLECTION = new QName(APP_NS, LN_COLLECTION, APP_PREFIX);
+ public static final QName AID = new QName(LN_ID);
+ public static final QName CLASS = new QName(LN_CLASS);
+
+ public static final String TEXT = "text";
+ public static final String HTML = "html";
+ public static final String XHTML = "xhtml";
+ public static final String XML = "xml";
+ public static final String YES = "yes";
+ public static final String NO = "no";
+
+ // Atom Thread Extensions Support
+ public static final String THR_NS = "http://purl.org/syndication/thread/1.0";
+ public static final String LN_INREPLYTO = "in-reply-to";
+ public static final String LN_REF = "ref";
+ public static final String LN_COUNT = "count";
+ public static final String LN_WHEN = "when";
+ public static final String LN_TOTAL = "total";
+ public static final String THR_PREFIX = "thr";
+ public static final QName IN_REPLY_TO = new QName(THR_NS, LN_INREPLYTO, THR_PREFIX);
+ public static final QName THRCOUNT = new QName(THR_NS, LN_COUNT, THR_PREFIX);
+ /** @deprecated Use Constants.THRUPDATED */
+ public static final QName THRWHEN = new QName(THR_NS, LN_WHEN, THR_PREFIX);
+ public static final QName THRUPDATED = new QName(THR_NS, LN_UPDATED, THR_PREFIX);
+ public static final QName THRTOTAL = new QName(THR_NS, LN_TOTAL, THR_PREFIX);
+ public static final QName THRREF = new QName(LN_REF);
+ public static final QName THRSOURCE = new QName(LN_SOURCE);
+
+}
Added: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/MimeTypeHelper.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/MimeTypeHelper.java?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/MimeTypeHelper.java (added)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/MimeTypeHelper.java Fri Jun 16 13:10:47 2006
@@ -0,0 +1,64 @@
+/*
+* 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.util;
+
+import javax.activation.MimeType;
+import javax.activation.MimeTypeParseException;
+
+public class MimeTypeHelper {
+
+ public static boolean isMatch(String a, String b) {
+ boolean answer = false;
+ try {
+ MimeType mta = new MimeType(a);
+ answer = mta.match(b);
+ } catch (Exception e) {}
+ return answer;
+ }
+
+ public static boolean isXml(String a) {
+ boolean answer = isMatch("application/xml", a) || isMatch("text/xml", a);
+ if (!answer) {
+ try {
+ MimeType mta = new MimeType(a);
+ answer =
+ (("application".equalsIgnoreCase(mta.getPrimaryType()) ||
+ "text".equalsIgnoreCase(mta.getPrimaryType())) &&
+ mta.getSubType().equals("xml") ||
+ mta.getSubType().endsWith("+xml"));
+ } catch (Exception e) {}
+ }
+ return answer;
+ }
+
+ public static boolean isText(String a) {
+ boolean answer = isMatch("text/*", a);
+ return answer;
+ }
+
+ public static boolean isMimeType(String a) {
+ boolean answer = false;
+ try {
+ new MimeType(a);
+ answer = true;
+ } catch (MimeTypeParseException e) {
+ answer = false;
+ }
+ return answer;
+ }
+}
Added: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/NonOpTextFilter.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/NonOpTextFilter.java?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/NonOpTextFilter.java (added)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/NonOpTextFilter.java Fri Jun 16 13:10:47 2006
@@ -0,0 +1,24 @@
+/*
+* 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.util;
+
+import org.apache.abdera.filter.TextFilter;
+
+public class NonOpTextFilter extends TextFilter {
+
+}
Added: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/ServiceUtil.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/ServiceUtil.java?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/ServiceUtil.java (added)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/ServiceUtil.java Fri Jun 16 13:10:47 2006
@@ -0,0 +1,155 @@
+/*
+* 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.util;
+
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
+
+import org.apache.abdera.factory.ExtensionFactory;
+import org.apache.abdera.factory.Factory;
+import org.apache.abdera.parser.Parser;
+import org.apache.abdera.xpath.XPath;
+
+
+/**
+ * @author James M Snell (jasnell@us.ibm.com)
+ */
+public final class ServiceUtil
+ implements Constants {
+
+ ServiceUtil() {}
+
+ static private ClassLoader classLoader = null;
+
+ public static Object newInstance(String id, String _default) {
+ return ServiceUtil.locate(id, _default);
+ }
+
+ public static XPath newXPathInstance() {
+ return (XPath) newInstance(
+ CONFIG_XPATH,
+ ConfigProperties.getDefaultXPath());
+ }
+
+ public static Parser newParserInstance() {
+ return (Parser) newInstance(
+ CONFIG_PARSER,
+ ConfigProperties.getDefaultParser());
+ }
+
+ public static Factory newFactoryInstance() {
+ return (Factory) newInstance(
+ CONFIG_FACTORY,
+ ConfigProperties.getDefaultFactory());
+ }
+
+ public static ClassLoader getClassLoader() {
+ if (classLoader == null) {
+ classLoader = Thread.currentThread().getContextClassLoader();
+ }
+ return classLoader;
+ }
+
+ public static void setClassLoader(ClassLoader classLoader) {
+ ServiceUtil.classLoader = classLoader;
+ }
+
+ public static Object locate(String id, String _default) {
+ Object object = locate(id);
+ if (object == null && _default != null) {
+ try {
+ object = getClassLoader().loadClass(_default).newInstance();
+ } catch (Exception e) {}
+ }
+ return object;
+ }
+
+ public static Object locate(String id) {
+ Object service = checkConfigProperties(id);
+ return ((service != null) ? service : checkMetaInfServices(id));
+ }
+
+ static Object checkConfigProperties(String id) {
+ Object object = null;
+ String s = ConfigProperties.getConfigurationOption(id);
+ if (s != null) {
+ try {
+ object = getClassLoader().loadClass(s).newInstance();
+ } catch (Exception e) {}
+ }
+ return object;
+ }
+
+ static Object checkMetaInfServices(String id) {
+ Object object = null;
+ String sid = "META-INF/services/" + id;
+ ClassLoader loader = getClassLoader();
+ try {
+ InputStream is = loader.getResourceAsStream(sid);
+ if (is != null) {
+ BufferedReader buf = new BufferedReader(new InputStreamReader(is));
+ String line = buf.readLine();
+ if (line != null) {
+ String s = line.split("#",2)[0].trim();
+ object = loader.loadClass(s).newInstance();
+ }
+ }
+ } catch (Exception e) {}
+ return object;
+ }
+
+ private static List<ExtensionFactory> factories = null;
+
+ public static List<ExtensionFactory> loadExtensionFactories(String id) {
+ if (factories == null) {
+ factories = new ArrayList<ExtensionFactory>();
+ String sid = "META-INF/services/" + id;
+ ClassLoader loader = getClassLoader();
+ try {
+ Enumeration e = loader.getResources(sid);
+ for (;e.hasMoreElements();) {
+ try {
+ URL url = (URL) e.nextElement();
+ InputStream is = url.openStream();
+ if (is != null) {
+ BufferedReader buf =
+ new BufferedReader(
+ new InputStreamReader(is));
+ String line = null;
+ while ((line = buf.readLine()) != null) {
+ String s = line.split("#",2)[0].trim();
+ if (!"".equals(s)) {
+ ExtensionFactory factory =
+ (ExtensionFactory) loader.loadClass(s).newInstance();
+ factories.add(factory);
+ }
+ }
+ }
+ } catch (Exception ex) {}
+ }
+ } catch (Exception e) {}
+ }
+ return factories;
+ }
+
+}
Added: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/ThreadHelper.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/ThreadHelper.java?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/ThreadHelper.java (added)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/ThreadHelper.java Fri Jun 16 13:10:47 2006
@@ -0,0 +1,63 @@
+/*
+* 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.util;
+
+import java.util.Calendar;
+import java.util.Date;
+
+import org.apache.abdera.model.AtomDate;
+import org.apache.abdera.model.Link;
+
+
+public final class ThreadHelper {
+
+ ThreadHelper() {}
+
+ public static int getCount(Link link) {
+ String val = link.getAttributeValue(Constants.THRCOUNT);
+ return (val != null) ? Integer.parseInt(val) : 0;
+ }
+
+ @SuppressWarnings("deprecation")
+ public static AtomDate getUpdated(Link link) {
+ String val = link.getAttributeValue(Constants.THRUPDATED);
+ if (val == null) // thr:when was updated to thr:updated, some old impls may still be using thr:when
+ val = link.getAttributeValue(Constants.THRWHEN);
+ return (val != null) ? AtomDate.valueOf(val) : null;
+ }
+
+ public void setCount(Link link, int count) {
+ link.setAttributeValue(Constants.THRCOUNT, String.valueOf(count).trim());
+ }
+
+ public void setUpdated(Link link, Date when) {
+ link.setAttributeValue(Constants.THRUPDATED, AtomDate.valueOf(when).getValue());
+ }
+
+ public void setUpdated(Link link, Calendar when) {
+ link.setAttributeValue(Constants.THRUPDATED, AtomDate.valueOf(when).getValue());
+ }
+
+ public void setUpdated(Link link, long when) {
+ link.setAttributeValue(Constants.THRUPDATED, AtomDate.valueOf(when).getValue());
+ }
+
+ public void setUpdated(Link link, String when) {
+ link.setAttributeValue(Constants.THRUPDATED, AtomDate.valueOf(when).getValue());
+ }
+}
Added: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/URIHelper.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/URIHelper.java?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/URIHelper.java (added)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/URIHelper.java Fri Jun 16 13:10:47 2006
@@ -0,0 +1,56 @@
+/*
+* 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.util;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+
+public class URIHelper {
+
+ /**
+ * Normalize a URI as specified by RFC4287 Section 4.2.6
+ */
+ public static URI normalize(
+ URI uri)
+ throws URISyntaxException {
+ if (uri == null) return null;
+ // the normalization built into the URI class only gets us part of the way
+ uri = uri.normalize();
+ String scheme = uri.getScheme().toLowerCase();
+ String host =
+ (uri.getHost() != null) ?
+ uri.getHost().toLowerCase() : "";
+ int port = -1;
+ if ("http".equalsIgnoreCase(scheme) && uri.getPort() != 80)
+ port = uri.getPort();
+ else if ("https".equalsIgnoreCase(scheme) && uri.getPort() != 443)
+ port = uri.getPort();
+ uri = new URI(
+ scheme,
+ uri.getUserInfo(),
+ host, port,
+ uri.getPath(),
+ uri.getQuery(),
+ uri.getFragment());
+ return uri;
+ }
+
+ public static String normalize(String uri) throws URISyntaxException {
+ return normalize(new URI(uri)).toString();
+ }
+}
Added: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/Version.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/Version.java?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/Version.java (added)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/Version.java Fri Jun 16 13:10:47 2006
@@ -0,0 +1,28 @@
+/*
+* 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.util;
+
+/**
+ * @author James M Snell (jasnell@us.ibm.com)
+ */
+public abstract interface Version {
+
+ public static final String APP_NAME = "Abdera";
+ public static final String VERSION = "v0.1";
+
+}
Added: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/WhiteListParseFilter.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/WhiteListParseFilter.java?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/WhiteListParseFilter.java (added)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/util/WhiteListParseFilter.java Fri Jun 16 13:10:47 2006
@@ -0,0 +1,48 @@
+/*
+* 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.util;
+
+import javax.xml.namespace.QName;
+
+import org.apache.abdera.filter.ParseFilter;
+
+/**
+ * WhiteList Implementation of ParseFilter. Only the
+ * QNames listed will be considered acceptable
+ */
+public class WhiteListParseFilter extends ParseFilter {
+
+ boolean listAttributesExplicitly = false;
+
+ public WhiteListParseFilter() {}
+
+ public WhiteListParseFilter(boolean listAttributesExplicitly) {
+ this.listAttributesExplicitly = listAttributesExplicitly;
+ }
+
+ public boolean acceptable(QName qname) {
+ return contains(qname);
+ }
+
+ public boolean acceptableAttribute(QName qname, QName attribute) {
+ return (listAttributesExplicitly) ?
+ containsAttribute(qname, attribute) :
+ containsAttribute(qname, attribute) || acceptable(qname);
+ }
+
+}
Added: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/xpath/XPath.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/xpath/XPath.java?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/xpath/XPath.java (added)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/xpath/XPath.java Fri Jun 16 13:10:47 2006
@@ -0,0 +1,93 @@
+/*
+* 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.xpath;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.abdera.model.Base;
+import org.apache.abdera.util.ServiceUtil;
+
+/**
+ * Used to execute XPath queries over Feed Object Model instances.
+ */
+public interface XPath {
+
+ public static final XPath INSTANCE = ServiceUtil.newXPathInstance();
+
+ Map<String,String> getDefaultNamespaces();
+
+ void setDefaultNamespaces(Map<String,String> namespaces);
+
+ List selectNodes(
+ String path,
+ Base base) throws XPathException;
+
+ Object selectSingleNode(
+ String path,
+ Base base) throws XPathException;
+
+ Object evaluate(
+ String path,
+ Base base) throws XPathException;
+
+ String valueOf(
+ String path,
+ Base base) throws XPathException;
+
+ boolean isTrue(
+ String path,
+ Base base) throws XPathException;
+
+ Number numericValueOf(
+ String path,
+ Base base)
+ throws XPathException;
+
+ List selectNodes(
+ String path,
+ Base base,
+ Map<String,String> namespaces) throws XPathException;
+
+ Object selectSingleNode(
+ String path,
+ Base base,
+ Map<String,String> namespaces) throws XPathException;
+
+ Object evaluate(
+ String path,
+ Base base,
+ Map<String,String> namespaces) throws XPathException;
+
+ String valueOf(
+ String path,
+ Base base,
+ Map<String,String> namespaces) throws XPathException;
+
+ boolean isTrue(
+ String path,
+ Base base,
+ Map<String,String> namespaces) throws XPathException;
+
+ Number numericValueOf(
+ String path,
+ Base base,
+ Map<String, String> namespaces)
+ throws XPathException;
+
+}
Added: incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/xpath/XPathException.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/xpath/XPathException.java?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/xpath/XPathException.java (added)
+++ incubator/abdera/java/trunk/core/src/main/java/org/apache/abdera/xpath/XPathException.java Fri Jun 16 13:10:47 2006
@@ -0,0 +1,40 @@
+/*
+* 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.xpath;
+
+public class XPathException extends Exception {
+
+ private static final long serialVersionUID = 7373747391262088925L;
+
+ public XPathException() {
+ super();
+ }
+
+ public XPathException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public XPathException(String message) {
+ super(message);
+ }
+
+ public XPathException(Throwable cause) {
+ super(cause);
+ }
+
+}
Added: incubator/abdera/java/trunk/core/src/main/resources/META-INF/services/org.apache.abdera.factory.ExtensionFactory.example
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/core/src/main/resources/META-INF/services/org.apache.abdera.factory.ExtensionFactory.example?rev=414893&view=auto
==============================================================================
--- incubator/abdera/java/trunk/core/src/main/resources/META-INF/services/org.apache.abdera.factory.ExtensionFactory.example (added)
+++ incubator/abdera/java/trunk/core/src/main/resources/META-INF/services/org.apache.abdera.factory.ExtensionFactory.example Fri Jun 16 13:10:47 2006
@@ -0,0 +1,5 @@
+# To register Extension factories, rename this file to
+# org.apache.abdera.factory.ExtensionFactory and list
+# each of the Extension Factories below (as illustrated)
+com.foo.factories.MyExtensionFactory
+com.foo.factories.MyOtherExtensionFactory
\ No newline at end of file