You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2017/09/02 14:10:41 UTC

[19/51] [partial] incubator-juneau git commit: Add project hierarchies, part 1

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/75b0d8ee/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/xml1b/T6.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/xml1b/T6.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/xml1b/T6.java
new file mode 100755
index 0000000..c34126c
--- /dev/null
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/xml1b/T6.java
@@ -0,0 +1,38 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau.xml.xml1b;
+
+import org.apache.juneau.annotation.*;
+import org.apache.juneau.xml.annotation.*;
+
+@Xml(prefix="foo",namespace="http://foo")
+@Bean(sort=true)
+@SuppressWarnings("javadoc")
+public class T6 {
+
+	public int f1 = 1;
+
+	@Xml(prefix="bar",namespace="http://bar") public int f2 = 2;
+
+	private int f3 = 3;
+	public int getF3() { return f3; }
+	public void setF3(int f3) { this.f3 = f3; }
+
+	private int f4 = 4;
+	@Xml(prefix="baz",namespace="http://baz") public int getF4() { return f4; }
+	public void setF4(int f4) { this.f4 = f4; }
+
+	public boolean equals(T6 x) {
+		return x.f1 == f1 && x.f2 == f2 && x.f3 == f3 && x.f4 == f4;
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/75b0d8ee/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/xml1b/T7.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/xml1b/T7.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/xml1b/T7.java
new file mode 100755
index 0000000..f2960aa
--- /dev/null
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/xml1b/T7.java
@@ -0,0 +1,37 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau.xml.xml1b;
+
+import org.apache.juneau.annotation.*;
+import org.apache.juneau.xml.annotation.*;
+
+@Bean(sort=true)
+@SuppressWarnings("javadoc")
+public class T7 {
+
+	@BeanProperty(name="g1") public int f1 = 1;
+
+	@Xml(prefix="bar",namespace="http://bar") @BeanProperty(name="g2") public int f2 = 2;
+
+	private int f3 = 3;
+	@BeanProperty(name="g3") public int getF3() { return f3; }
+	@BeanProperty(name="g3") public void setF3(int f3) { this.f3 = f3; }
+
+	private int f4 = 4;
+	@BeanProperty(name="g4") @Xml(prefix="baz",namespace="http://baz") public int getF4() { return f4; }
+	@BeanProperty(name="g4") public void setF4(int f4) { this.f4 = f4; }
+
+	public boolean equals(T7 x) {
+		return x.f1 == f1 && x.f2 == f2 && x.f3 == f3 && x.f4 == f4;
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/75b0d8ee/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/xml1b/package-info.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/xml1b/package-info.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/xml1b/package-info.java
new file mode 100755
index 0000000..306db1b
--- /dev/null
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/xml1b/package-info.java
@@ -0,0 +1,16 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+@XmlSchema(prefix="p1",namespace="http://p1")
+package org.apache.juneau.xml.xml1b;
+import org.apache.juneau.xml.annotation.*;
+

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/75b0d8ee/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/xml1c/T8.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/xml1c/T8.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/xml1c/T8.java
new file mode 100755
index 0000000..0c383eb
--- /dev/null
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/xml1c/T8.java
@@ -0,0 +1,33 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau.xml.xml1c;
+
+import org.apache.juneau.xml.annotation.*;
+
+@Xml(prefix="p2")
+@SuppressWarnings("javadoc")
+public class T8 {
+
+	public int f1 = 1;
+
+	@Xml(prefix="p1") public int f2 = 2;
+
+	@Xml(prefix="c1") public int f3 = 3;
+
+	@Xml(prefix="f1")
+	public int f4 = 4;
+
+	public boolean equals(T8 x) {
+		return x.f1 == f1 && x.f2 == f2 && x.f3 == f3 && x.f4 == f4;
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/75b0d8ee/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/xml1c/T9.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/xml1c/T9.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/xml1c/T9.java
new file mode 100755
index 0000000..7009626
--- /dev/null
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/xml1c/T9.java
@@ -0,0 +1,23 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau.xml.xml1c;
+
+@SuppressWarnings("javadoc")
+public class T9 {
+
+	public int f1 = 1;
+
+	public boolean equals(T9 x) {
+		return x.f1 == f1;
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/75b0d8ee/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/xml1c/package-info.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/xml1c/package-info.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/xml1c/package-info.java
new file mode 100755
index 0000000..e054388
--- /dev/null
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/xml/xml1c/package-info.java
@@ -0,0 +1,25 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+@XmlSchema(
+	prefix="p1",
+	xmlNs={
+		@XmlNs(prefix="p1",namespaceURI="http://p1"),
+		@XmlNs(prefix="p2",namespaceURI="http://p2"),
+		@XmlNs(prefix="p3",namespaceURI="http://p3(unused)"),
+		@XmlNs(prefix="c1",namespaceURI="http://c1"),
+		@XmlNs(prefix="f1",namespaceURI="http://f1")
+	}
+)
+package org.apache.juneau.xml.xml1c;
+import org.apache.juneau.xml.annotation.*;
+

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/75b0d8ee/juneau-core/juneau-dto/.classpath
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-dto/.classpath b/juneau-core/juneau-dto/.classpath
new file mode 100644
index 0000000..2fd4a04
--- /dev/null
+++ b/juneau-core/juneau-dto/.classpath
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/75b0d8ee/juneau-core/juneau-dto/.gitignore
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-dto/.gitignore b/juneau-core/juneau-dto/.gitignore
new file mode 100644
index 0000000..9dd6a50
--- /dev/null
+++ b/juneau-core/juneau-dto/.gitignore
@@ -0,0 +1,4 @@
+/target/
+/.settings/
+/.DS_Store
+/TODO.txt

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/75b0d8ee/juneau-core/juneau-dto/.project
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-dto/.project b/juneau-core/juneau-dto/.project
new file mode 100644
index 0000000..12cdbf3
--- /dev/null
+++ b/juneau-core/juneau-dto/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>juneau-dto</name>
+	<projects>
+	</projects>
+    <buildSpec>
+        <buildCommand>
+            <name>org.eclipse.jdt.core.javabuilder</name>
+            <arguments>
+            </arguments>
+        </buildCommand>
+        <buildCommand>
+            <name>edu.umd.cs.findbugs.plugin.eclipse.findbugsBuilder</name>
+            <arguments>
+            </arguments>
+        </buildCommand>
+        <buildCommand>
+            <name>org.eclipse.m2e.core.maven2Builder</name>
+            <arguments>
+            </arguments>
+        </buildCommand>
+    </buildSpec>
+    <natures>
+        <nature>org.eclipse.m2e.core.maven2Nature</nature>
+        <nature>org.eclipse.jdt.core.javanature</nature>
+        <nature>edu.umd.cs.findbugs.plugin.eclipse.findbugsNature</nature>
+    </natures>
+</projectDescription>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/75b0d8ee/juneau-core/juneau-dto/pom.xml
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-dto/pom.xml b/juneau-core/juneau-dto/pom.xml
new file mode 100644
index 0000000..f85bd93
--- /dev/null
+++ b/juneau-core/juneau-dto/pom.xml
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+ * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+ * with the License.  You may obtain a copy of the License at                                                              *
+ *                                                                                                                         *
+ *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+ *                                                                                                                         *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+ * specific language governing permissions and limitations under the License.                                              *
+ ***************************************************************************************************************************
+-->
+<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/xsd/maven-4.0.0.xsd">
+
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<groupId>org.apache.juneau</groupId>
+		<artifactId>juneau-core</artifactId>
+		<version>6.3.2-incubating-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>juneau-dto</artifactId>
+	<name>Apache Juneau Data Transfer Objects</name>
+	<description>Data Transfer Objects.</description>
+	<packaging>bundle</packaging>
+
+	<dependencies>
+		<dependency>
+			<groupId>org.apache.juneau</groupId>
+			<artifactId>juneau-marshall</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+	</dependencies>
+
+	<properties>
+		<!-- Skip javadoc generation since we generate them in the aggregate pom -->
+		<maven.javadoc.skip>true</maven.javadoc.skip>
+	</properties>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.felix</groupId>
+				<artifactId>maven-bundle-plugin</artifactId>
+				<version>3.2.0</version>
+				<extensions>true</extensions>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-surefire-plugin</artifactId>
+				<configuration>
+					<includes>
+						<include>**/*Test.class</include>
+					</includes>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-source-plugin</artifactId>
+				<executions>
+					<execution>
+						<id>attach-sources</id>
+						<phase>verify</phase>
+						<goals>
+							<goal>jar-no-fork</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+			<plugin>
+				<groupId>org.jacoco</groupId>
+				<artifactId>jacoco-maven-plugin</artifactId>
+				<version>0.7.2.201409121644</version>
+				<executions>
+					<execution>
+						<id>default-prepare-agent</id>
+						<goals>
+							<goal>prepare-agent</goal>
+						</goals>
+					</execution>
+					<execution>
+						<id>default-report</id>
+						<phase>prepare-package</phase>
+						<goals>
+							<goal>report</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
+</project>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/75b0d8ee/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/Link.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/Link.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/Link.java
new file mode 100644
index 0000000..6677dc0
--- /dev/null
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/Link.java
@@ -0,0 +1,148 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau.dto;
+
+import static org.apache.juneau.internal.StringUtils.*;
+
+import java.text.*;
+
+import org.apache.juneau.*;
+import org.apache.juneau.html.*;
+import org.apache.juneau.urlencoding.*;
+import org.apache.juneau.utils.*;
+
+/**
+ * Simple bean that implements a hyperlink for the HTML serializer.
+ *
+ * <p>
+ * The name and url properties correspond to the following parts of a hyperlink in an HTML document...
+ * <p class='bcode'>
+ * 	<xt>&lt;a</xt> <xa>href</xa>=<xs>'href'</xs><xt>&gt;</xt>name<xt>&lt;/a&gt;</xt>
+ * </p>
+ *
+ * <p>
+ * When encountered by the {@link HtmlSerializer} class, this object gets converted to a hyperlink.
+ * All other serializers simply convert it to a simple bean.
+ */
+@HtmlLink(nameProperty = "name", hrefProperty = "href")
+public class Link implements Comparable<Link> {
+	private String name, href;
+
+	/** No-arg constructor. */
+	public Link() {}
+
+	/**
+	 * Constructor.
+	 *
+	 * @param name Corresponds to the text inside of the <xt>&lt;A&gt;</xt> element.
+	 * @param href Corresponds to the value of the <xa>href</xa> attribute of the <xt>&lt;A&gt;</xt> element.
+	 * @param hrefArgs Optional arguments for {@link MessageFormat} style arguments in the href.
+	 */
+	public Link(String name, String href, Object...hrefArgs) {
+		setName(name);
+		setHref(href, hrefArgs);
+	}
+
+
+	//--------------------------------------------------------------------------------
+	// Bean properties
+	//--------------------------------------------------------------------------------
+
+	/**
+	 * Bean property getter:  <property>name</property>.
+	 *
+	 * <p>
+	 * Corresponds to the text inside of the <xt>&lt;A&gt;</xt> element.
+	 *
+	 * @return The value of the <property>name</property> property on this bean, or <jk>null</jk> if it is not set.
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * Bean property setter:  <property>name</property>.
+	 *
+	 * @param name The new value for the <property>name</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Link setName(String name) {
+		this.name = name;
+		return this;
+	}
+
+	/**
+	 * Bean property getter:  <property>href</property>.
+	 *
+	 * <p>
+	 * Corresponds to the value of the <xa>href</xa> attribute of the <xt>&lt;A&gt;</xt> element.
+	 *
+	 * @return The value of the <property>href</property> property on this bean, or <jk>null</jk> if it is not set.
+	 */
+	public String getHref() {
+		return href;
+	}
+
+	/**
+	 * Bean property setter:  <property>href</property>.
+	 *
+	 * @param href The new value for the <property>href</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Link setHref(String href) {
+		setHref(href, new Object[0]);
+		return this;
+	}
+
+	/**
+	 * Bean property setter:  <property>href</property>.
+	 *
+	 * <p>
+	 * Same as {@link #setHref(String)} except allows for {@link MessageFormat} style arguments.
+	 *
+	 * @param href The new href.
+	 * @param args Optional {@link MessageFormat}-style arguments.
+	 * @return This object (for method chaining).
+	 */
+	public Link setHref(String href, Object...args) {
+		for (int i = 0; i < args.length; i++)
+			args[i] = UrlEncodingSerializer.DEFAULT.serialize(PartType.PATH, args[i]);
+		this.href = format(href, args);
+		return this;
+	}
+
+	/**
+	 * Returns the name so that the {@link PojoQuery} class can search against it.
+	 */
+	@Override /* Object */
+	public String toString() {
+		return name;
+	}
+
+	@Override /* Comparable */
+	public int compareTo(Link o) {
+		return name.compareTo(o.name);
+	}
+
+	@Override /* Object */
+	public boolean equals(Object o) {
+		if (! (o instanceof Link))
+			return false;
+		return (compareTo((Link)o) == 0);
+	}
+
+	@Override /* Object */
+	public int hashCode() {
+		return super.hashCode();
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/75b0d8ee/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/ResultSetList.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/ResultSetList.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/ResultSetList.java
new file mode 100644
index 0000000..8fa21ff
--- /dev/null
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/ResultSetList.java
@@ -0,0 +1,112 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau.dto;
+
+import static org.apache.juneau.internal.IOUtils.*;
+
+import java.sql.*;
+import java.util.*;
+
+import org.apache.juneau.internal.*;
+
+/**
+ * Transforms an SQL {@link ResultSet ResultSet} into a list of maps.
+ * <
+ * p>
+ * Loads the entire result set into an in-memory data structure, and then closes the result set object.
+ */
+public final class ResultSetList extends LinkedList<Map<String,Object>> {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * Constructor.
+	 *
+	 * @param rs The result set to load into this DTO.
+	 * @param pos The start position (zero-indexed).
+	 * @param limit The maximum number of rows to retrieve.
+	 * @param includeRowNums Make the first column be the row number.
+	 * @throws SQLException Database error.
+	 */
+	public ResultSetList(ResultSet rs, int pos, int limit, boolean includeRowNums) throws SQLException {
+		try {
+			int rowNum = pos;
+
+			// Get the column names.
+			ResultSetMetaData rsmd = rs.getMetaData();
+			int offset = (includeRowNums ? 1 : 0);
+			int cc = rsmd.getColumnCount();
+			String[] columns = new String[cc + offset];
+			if (includeRowNums)
+				columns[0] = "ROW";
+			int[] colTypes = new int[cc];
+
+			for (int i = 0; i < cc; i++) {
+				columns[i+offset] = rsmd.getColumnName(i+1);
+				colTypes[i] = rsmd.getColumnType(i+1);
+			}
+
+			while (--pos > 0 && rs.next()) {}
+
+			// Get the rows.
+			while (limit-- > 0 && rs.next()) {
+				Object[] row = new Object[cc + offset];
+				if (includeRowNums)
+					row[0] = rowNum++;
+				for (int i = 0; i < cc; i++) {
+					Object o = readEntry(rs, i+1, colTypes[i]);
+					row[i+offset] = o;
+				}
+				add(new SimpleMap(columns, row));
+			}
+		} finally {
+			rs.close();
+		}
+	}
+
+	/**
+	 * Reads the specified column from the current row in the result set.
+	 *
+	 * <p>
+	 * Subclasses can override this method to handle specific data types in special ways.
+	 *
+	 * @param rs The result set to read from.
+	 * @param col The column number (indexed by 1).
+	 * @param dataType The {@link Types type} of the entry.
+	 * @return The entry as an Object.
+	 */
+	protected static Object readEntry(ResultSet rs, int col, int dataType) {
+		try {
+			switch (dataType) {
+				case Types.BLOB:
+					Blob b = rs.getBlob(col);
+					return "blob["+b.length()+"]";
+				case Types.CLOB:
+					Clob c = rs.getClob(col);
+					return "clob["+c.length()+"]";
+				case Types.LONGVARBINARY:
+					return "longvarbinary["+count(rs.getBinaryStream(col))+"]";
+				case Types.LONGVARCHAR:
+					return "longvarchar["+count(rs.getAsciiStream(col))+"]";
+				case Types.LONGNVARCHAR:
+					return "longnvarchar["+count(rs.getCharacterStream(col))+"]";
+				case Types.TIMESTAMP:
+					return rs.getTimestamp(col);  // Oracle returns com.oracle.TIMESTAMP objects from getObject() which isn't a Timestamp.
+				default:
+					return rs.getObject(col);
+			}
+		} catch (Exception e) {
+			return e.getLocalizedMessage();
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/75b0d8ee/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/AtomBuilder.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/AtomBuilder.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/AtomBuilder.java
new file mode 100644
index 0000000..87c80e5
--- /dev/null
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/AtomBuilder.java
@@ -0,0 +1,242 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau.dto.atom;
+
+import java.net.*;
+import java.util.*;
+
+import org.apache.juneau.*;
+
+/**
+ * Various useful static methods for creating ATOM elements.
+ *
+ * <p>
+ * Typically, you'll want to do a static import on this class and then call the methods like so...
+ * <p class='bcode'>
+ * 	<jk>import static</jk> org.apache.juneau.dto.atom.AtomBuilder.*;
+ *
+ * 	Feed feed =
+ * 		<jsm>feed</jsm>(<js>"tag:juneau.sample.com,2013:1"</js>, <js>"Juneau ATOM specification"</js>,
+ * 			<js>"2013-05-08T12:29:29Z"</js>)
+ * 		.subtitle(<jsm>text</jsm>(<js>"html"</js>)
+ * 			.children(<js>"A &lt;em&gt;lot&lt;/em&gt; of effort went into making this effortless"</js>))
+ * 		.links(
+ * 			<jsm>link</jsm>(<js>"alternate"</js>, <js>"text/html"</js>, <js>"http://www.sample.com/"</js>)
+ * 				.hreflang(<js>"en"</js>),
+ * 			<jsm>link</jsm>(<js>"self"</js>, <js>"application/atom+xml"</js>, <js>"http://www.sample.com/feed.atom"</js>)
+ * 		);
+ * </p>
+ *
+ * <h6 class='topic'>Additional Information</h6>
+ * <ul class='doctree'>
+ * 	<li class='link'>
+ * 		<a class='doclink' href='../../../../../overview-summary.html#DTOs'>Juneau Data Transfer Objects
+ * 		(org.apache.juneau.dto)</a>
+ * 		<ul>
+ * 			<li class='sublink'>
+ * 				<a class='doclink' href='../../../../../overview-summary.html#DTOs.Atom'>Atom</a>
+ * 		</ul>
+ * 	</li>
+ * 	<li class='jp'>
+ * 		<a class='doclink' href='package-summary.html#TOC'>org.apache.juneau.dto.atom</a>
+ * 	</li>
+ * </ul>
+ */
+public class AtomBuilder {
+
+	/**
+	 * Creates a {@link Category} element with the specified {@link Category#term(String)} attribute.
+	 *
+	 * @param term The {@link Category#term(String)} attribute.
+	 * @return The new element.
+	 */
+	public static final Category category(String term) {
+		return new Category(term);
+	}
+
+	/**
+	 * Creates a {@link Content} element with the specified {@link Content#type(String)} attribute.
+	 *
+	 * @return The new element.
+	 */
+	public static final Content content() {
+		return new Content();
+	}
+
+	/**
+	 * Creates a {@link Content} element.
+	 *
+	 * @param type The {@link Content#type(String)} attribute.
+	 * @return The new element.
+	 */
+	public static final Content content(String type) {
+		return new Content(type);
+	}
+
+	/**
+	 * Creates an {@link Entry} element with the specified {@link Entry#id(Id)}, {@link Entry#title(Text)}, and
+	 * {@link Entry#updated(Calendar)} attributes.
+	 *
+	 * @param id The {@link Entry#id(Id)} attribute.
+	 * @param title The {@link Entry#title(Text)} attribute.
+	 * @param updated The {@link Entry#updated(Calendar)} attribute.
+	 * @return The new element.
+	 */
+	public static final Entry entry(Id id, Text title, Calendar updated) {
+		return new Entry(id, title, updated);
+	}
+
+	/**
+	 * Creates an {@link Entry} element with the specified {@link Entry#id(Id)}, {@link Entry#title(Text)}, and
+	 * {@link Entry#updated(Calendar)} attributes.
+	 *
+	 * @param id The {@link Entry#id(Id)} attribute.
+	 * @param title The {@link Entry#title(Text)} attribute.
+	 * @param updated The {@link Entry#updated(Calendar)} attribute.
+	 * @return The new element.
+	 */
+	public static final Entry entry(String id, String title, String updated) {
+		return new Entry(id, title, updated);
+	}
+
+	/**
+	 * Creates a {@link Feed} element with the specified {@link Feed#id(Id)}, {@link Entry#title(Text)}, and
+	 * {@link Feed#updated(Calendar)} attributes.
+	 *
+	 * @param id The {@link Feed#id(Id)} attribute.
+	 * @param title The {@link Feed#title(Text)} attribute.
+	 * @param updated The {@link Feed#updated(Calendar)} attribute.
+	 * @return The new element.
+	 */
+	public static final Feed feed(Id id, Text title, Calendar updated) {
+		return new Feed(id, title, updated);
+	}
+
+	/**
+	 * Creates a {@link Feed} element with the specified {@link Feed#id(Id)}, {@link Entry#title(Text)}, and
+	 * {@link Feed#updated(Calendar)} attributes.
+	 *
+	 * @param id The {@link Feed#id(Id)} attribute.
+	 * @param title The {@link Feed#title(Text)} attribute.
+	 * @param updated The {@link Feed#updated(Calendar)} attribute.
+	 * @return The new element.
+	 */
+	public static final Feed feed(String id, String title, String updated) {
+		return new Feed(id, title, updated);
+	}
+
+	/**
+	 * Creates a {@link Generator} element with the specified {@link Generator#text(String)} child node.
+	 *
+	 * @param text The {@link Generator#text(String)} child node.
+	 * @return The new element.
+	 */
+	public static final Generator generator(String text) {
+		return new Generator(text);
+	}
+
+	/**
+	 * Creates an {@link Icon} element with the specified {@link Icon#uri(Object)} attribute.
+	 *
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 *
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
+	 *
+	 * @param uri The {@link Icon#uri(Object)} attribute.
+	 * @return The new element.
+	 */
+	public static final Icon icon(Object uri) {
+		return new Icon(uri);
+	}
+
+	/**
+	 * Creates an {@link Id} element with the specified {@link Id#text(String)} child node.
+	 *
+	 * @param text The {@link Id#text(String)} child node.
+	 * @return The new element.
+	 */
+	public static final Id id(String text) {
+		return new Id(text);
+	}
+
+	/**
+	 * Creates a {@link Link} element with the specified {@link Link#rel(String)}, {@link Link#type(String)}, and
+	 * {@link Link#href(String)} attributes.
+	 *
+	 * @param rel The {@link Link#rel(String)} attribute.
+	 * @param type The {@link Link#type(String)} attribute.
+	 * @param href The {@link Link#href(String)} attribute.
+	 * @return The new element.
+	 */
+	public static final Link link(String rel, String type, String href) {
+		return new Link(rel, type, href);
+	}
+
+	/**
+	 * Creates a {@link Logo} element with the specified {@link Logo#uri(Object)} attribute.
+	 *
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 *
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
+	 *
+	 * @param uri The {@link Logo#uri(Object)} attribute.
+	 * @return The new element.
+	 */
+	public static final Logo logo(Object uri) {
+		return new Logo(uri);
+	}
+
+	/**
+	 * Creates a {@link Person} element with the specified {@link Person#name(String)} attribute.
+	 *
+	 * @param name The {@link Person#name(String)} attribute.
+	 * @return The new element.
+	 */
+	public static final Person person(String name) {
+		return new Person(name);
+	}
+
+	/**
+	 * Creates a {@link Source} element.
+	 *
+	 * @return The new element.
+	 */
+	public static final Source source() {
+		return new Source();
+	}
+
+	/**
+	 * Creates a {@link Text} element.
+	 *
+	 * @return The new element.
+	 */
+	public static final Text text() {
+		return new Text();
+	}
+
+	/**
+	 * Creates a {@link Text} element with the specified {@link Text#type(String)} attribute.
+	 *
+	 * @param type The {@link Text#type(String)} attribute.
+	 * @return The new element.
+	 */
+	public static final Text text(String type) {
+		return new Text(type);
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/75b0d8ee/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Category.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Category.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Category.java
new file mode 100644
index 0000000..4f0e583
--- /dev/null
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Category.java
@@ -0,0 +1,167 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau.dto.atom;
+
+import static org.apache.juneau.internal.StringUtils.*;
+import static org.apache.juneau.xml.annotation.XmlFormat.*;
+
+import java.net.*;
+import java.net.URI;
+
+import org.apache.juneau.*;
+import org.apache.juneau.annotation.*;
+import org.apache.juneau.xml.annotation.*;
+
+/**
+ * Represents an <code>atomCategory</code> construct in the RFC4287 specification.
+ *
+ * <h6 class='figure'>Schema</h6>
+ * <p class='bcode'>
+ * 	atomCategory =
+ * 		element atom:category {
+ * 			atomCommonAttributes,
+ * 			attribute term { text },
+ * 			attribute scheme { atomUri }?,
+ * 			attribute label { text }?,
+ * 			undefinedContent
+ * 		}
+ * </p>
+ *
+ * <h6 class='topic'>Additional Information</h6>
+ * <ul class='doctree'>
+ * 	<li class='link'>
+ * 		<a class='doclink' href='../../../../../overview-summary.html#DTOs'>Juneau Data Transfer Objects
+ * 		(org.apache.juneau.dto)</a>
+ * 		<ul>
+ * 			<li class='sublink'>
+ * 				<a class='doclink' href='../../../../../overview-summary.html#DTOs.Atom'>Atom</a>
+ * 		</ul>
+ * 	</li>
+ * 	<li class='jp'>
+ * 		<a class='doclink' href='package-summary.html#TOC'>org.apache.juneau.dto.atom</a>
+ * 	</li>
+ * </ul>
+ */
+@Bean(typeName="category")
+@SuppressWarnings("hiding")
+public class Category extends Common {
+
+	private String term;
+	private URI scheme;
+	private String label;
+
+	/**
+	 * Normal constructor.
+	 *
+	 * @param term The category term.
+	 */
+	public Category(String term) {
+		term(term);
+	}
+
+	/** Bean constructor. */
+	public Category() {}
+
+
+	//--------------------------------------------------------------------------------
+	// Bean properties
+	//--------------------------------------------------------------------------------
+
+	/**
+	 * @return The category term.
+	 */
+	@Xml(format=ATTR)
+	public String getTerm() {
+		return term;
+	}
+
+	/**
+	 * Sets the category term.
+	 *
+	 * @param term The category term.
+	 * @return This object (for method chaining).
+	 */
+	@BeanProperty("term")
+	public Category term(String term) {
+		this.term = term;
+		return this;
+	}
+
+	/**
+	 * Returns the category scheme.
+	 *
+	 * @return The category scheme.
+	 */
+	@Xml(format=ATTR)
+	public URI getScheme() {
+		return scheme;
+	}
+
+	/**
+	 * Sets the category scheme.
+	 *
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 *
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
+	 *
+	 * @param scheme The category scheme.
+	 * @return This object (for method chaining).
+	 */
+	@BeanProperty("scheme")
+	public Category scheme(Object scheme) {
+		this.scheme = toURI(scheme);
+		return this;
+	}
+
+	/**
+	 * Returns the category label.
+	 *
+	 * @return The category label.
+	 */
+	@Xml(format=ATTR)
+	public String getLabel() {
+		return label;
+	}
+
+	/**
+	 * Sets the category label.
+	 *
+	 * @param label The category label.
+	 * @return This object (for method chaining).
+	 */
+	@BeanProperty("label")
+	public Category label(String label) {
+		this.label = label;
+		return this;
+	}
+
+
+	//--------------------------------------------------------------------------------
+	// Overridden setters (to simplify method chaining)
+	//--------------------------------------------------------------------------------
+
+	@Override /* Common */
+	public Category base(Object base) {
+		super.base(base);
+		return this;
+	}
+
+	@Override /* Common */
+	public Category lang(String lang) {
+		super.lang(lang);
+		return this;
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/75b0d8ee/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Common.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Common.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Common.java
new file mode 100644
index 0000000..544b8f2
--- /dev/null
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Common.java
@@ -0,0 +1,112 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau.dto.atom;
+
+import static org.apache.juneau.internal.StringUtils.*;
+import static org.apache.juneau.xml.annotation.XmlFormat.*;
+
+import java.net.*;
+import java.net.URI;
+
+import org.apache.juneau.*;
+import org.apache.juneau.annotation.*;
+import org.apache.juneau.xml.annotation.*;
+
+/**
+ * Represents an <code>atomCommonAttributes</code> construct in the RFC4287 specification.
+ *
+ * <h6 class='figure'>Schema</h6>
+ * <p class='bcode'>
+ * 	atomCommonAttributes =
+ * 		attribute xml:base { atomUri }?,
+ * 		attribute xml:lang { atomLanguageTag }?,
+ * 		undefinedAttribute*
+ * </p>
+ *
+ * <h6 class='topic'>Additional Information</h6>
+ * <ul class='doctree'>
+ * 	<li class='link'>
+ * 		<a class='doclink' href='../../../../../overview-summary.html#DTOs'>Juneau Data Transfer Objects
+ * 		(org.apache.juneau.dto)</a>
+ * 		<ul>
+ * 			<li class='sublink'>
+ * 				<a class='doclink' href='../../../../../overview-summary.html#DTOs.Atom'>Atom</a>
+ * 		</ul>
+ * 	</li>
+ * 	<li class='jp'>
+ * 		<a class='doclink' href='package-summary.html#TOC'>org.apache.juneau.dto.atom</a>
+ * 	</li>
+ * </ul>
+ */
+@SuppressWarnings("hiding")
+public abstract class Common {
+
+	private URI base;
+	private String lang;
+
+
+	//--------------------------------------------------------------------------------
+	// Bean properties
+	//--------------------------------------------------------------------------------
+
+	/**
+	 * Returns the uri base of this object.
+	 *
+	 * @return The URI base of this object.
+	 */
+	@Xml(prefix="xml", format=ATTR)
+	public URI getBase() {
+		return base;
+	}
+
+	/**
+	 * Sets the URI base of this object.
+	 *
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 *
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
+	 *
+	 * @param base The URI base of this object.
+	 * @return This object (for method chaining).
+	 */
+	@BeanProperty("base")
+	public Common base(Object base) {
+		this.base = toURI(base);
+		return this;
+	}
+
+	/**
+	 * Returns the language of this object.
+	 *
+	 * @return The language of this object.
+	 */
+	@Xml(prefix="xml", format=ATTR)
+	public String getLang() {
+		return lang;
+	}
+
+	/**
+	 * Sets the language of this object.
+	 *
+	 * @param lang The language of this object.
+	 * @return This object (for method chaining).
+	 */
+	@BeanProperty("lang")
+	public Common lang(String lang) {
+		this.lang = lang;
+		return this;
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/75b0d8ee/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/CommonEntry.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/CommonEntry.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/CommonEntry.java
new file mode 100644
index 0000000..32e34d2
--- /dev/null
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/CommonEntry.java
@@ -0,0 +1,302 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau.dto.atom;
+
+import static org.apache.juneau.dto.atom.Utils.*;
+import static org.apache.juneau.xml.annotation.XmlFormat.*;
+
+import java.util.*;
+
+import org.apache.juneau.annotation.*;
+import org.apache.juneau.transforms.*;
+import org.apache.juneau.xml.annotation.*;
+
+/**
+ * Parent class of {@link Entry}, {@link Feed}, and {@link Source}
+ *
+ * <h6 class='topic'>Additional Information</h6>
+ * <ul class='doctree'>
+ * 	<li class='link'>
+ * 		<a class='doclink' href='../../../../../overview-summary.html#DTOs'>Juneau Data Transfer Objects
+ * 		(org.apache.juneau.dto)</a>
+ * 		<ul>
+ * 			<li class='sublink'>
+ * 				<a class='doclink' href='../../../../../overview-summary.html#DTOs.Atom'>Atom</a>
+ * 		</ul>
+ * 	</li>
+ * 	<li class='jp'>
+ * 		<a class='doclink' href='package-summary.html#TOC'>org.apache.juneau.dto.atom</a>
+ * 	</li>
+ * </ul>
+ */
+@SuppressWarnings("hiding")
+public class CommonEntry extends Common {
+
+	private Person[] authors;
+	private Category[] categories;
+	private Person[] contributors;
+	private Id id;
+	private Link[] links;
+	private Text rights;
+	private Text title;
+	private Calendar updated;
+
+
+	/**
+	 * Normal constructor.
+	 *
+	 * @param id The ID of this object.
+	 * @param title The title of this object.
+	 * @param updated The updated timestamp of this object.
+	 */
+	public CommonEntry(Id id, Text title, Calendar updated) {
+		id(id).title(title).updated(updated);
+	}
+
+	/**
+	 * Normal constructor.
+	 *
+	 * @param id The ID of this object.
+	 * @param title The title of this object.
+	 * @param updated The updated timestamp of this object.
+	 */
+	public CommonEntry(String id, String title, String updated) {
+		id(id).title(title).updated(updated);
+	}
+
+	/** Bean constructor. */
+	public CommonEntry() {}
+
+
+	//--------------------------------------------------------------------------------
+	// Bean properties
+	//--------------------------------------------------------------------------------
+
+	/**
+	 * Returns the list of authors for this object.
+	 *
+	 * @return The list of authors for this object.
+	 */
+	@Xml(format=COLLAPSED, childName="author")
+	public Person[] getAuthors() {
+		return authors;
+	}
+
+	/**
+	 * Sets the list of authors for this object.
+	 *
+	 * @param authors The list of authors for this object.
+	 * @return This object (for method chaining).
+	 */
+	@BeanProperty("authors")
+	public CommonEntry authors(Person...authors) {
+		this.authors = authors;
+		return this;
+	}
+
+	/**
+	 * Returns the list of categories of this object.
+	 *
+	 * @return The list of categories of this object.
+	 */
+	@Xml(format=COLLAPSED, childName="category")
+	public Category[] getCatetories() {
+		return categories;
+	}
+
+	/**
+	 * Sets the list of categories of this object.
+	 *
+	 * @param categories The list of categories of this object.
+	 * @return This object (for method chaining).
+	 */
+	@BeanProperty("categories")
+	public CommonEntry categories(Category...categories) {
+		this.categories = categories;
+		return this;
+	}
+
+	/**
+	 * Returns the list of contributors of this object.
+	 *
+	 * @return The list of contributors of this object.
+	 */
+	@Xml(format=COLLAPSED, childName="contributor")
+	public Person[] getContributors() {
+		return contributors;
+	}
+
+	/**
+	 * Sets the list of contributors of this object.
+	 *
+	 * @param contributors The list of contributors of this object.
+	 * @return This object (for method chaining).
+	 */
+	@BeanProperty("contributors")
+	public CommonEntry contributors(Person...contributors) {
+		this.contributors = contributors;
+		return this;
+	}
+
+	/**
+	 * Returns the ID of this object.
+	 *
+	 * @return The ID of this object.
+	 */
+	public Id getId() {
+		return id;
+	}
+
+	/**
+	 * Sets the ID of this object.
+	 *
+	 * @param id The ID of this object.
+	 * @return This object (for method chaining).
+	 */
+	@BeanProperty("id")
+	public CommonEntry id(Id id) {
+		this.id = id;
+		return this;
+	}
+
+	/**
+	 * Sets the ID of this object.
+	 *
+	 * @param id The ID of this object.
+	 * @return This object (for method chaining).
+	 */
+	public CommonEntry id(String id) {
+		this.id = new Id(id);
+		return this;
+	}
+
+	/**
+	 * Returns the list of links of this object.
+	 *
+	 * @return The list of links of this object.
+	 */
+	@Xml(format=COLLAPSED)
+	public Link[] getLinks() {
+		return links;
+	}
+
+	/**
+	 * Sets the list of links of this object.
+	 *
+	 * @param links The list of links of this object.
+	 * @return This object (for method chaining).
+	 */
+	@BeanProperty("links")
+	public CommonEntry links(Link...links) {
+		this.links = links;
+		return this;
+	}
+
+	/**
+	 * Returns the rights statement of this object.
+	 *
+	 * @return The rights statement of this object.
+	 */
+	public Text getRights() {
+		return rights;
+	}
+
+	/**
+	 * Sets the rights statement of this object.
+	 *
+	 * @param rights The rights statement of this object.
+	 * @return This object (for method chaining).
+	 */
+	@BeanProperty("rights")
+	public CommonEntry rights(Text rights) {
+		this.rights = rights;
+		return this;
+	}
+
+	/**
+	 * Sets the rights statement of this object.
+	 *
+	 * @param rights The rights statement of this object.
+	 * @return This object (for method chaining).
+	 */
+	public CommonEntry rights(String rights) {
+		this.rights = new Text().text(rights);
+		return this;
+	}
+
+	/**
+	 * Returns the title of this object.
+	 *
+	 * @return The title of this object.
+	 */
+	public Text getTitle() {
+		return title;
+	}
+
+	/**
+	 * Sets the title of this object.
+	 *
+	 * @param title The title of this object.
+	 * @return This object (for method chaining).
+	 */
+	@BeanProperty("title")
+	public CommonEntry title(Text title) {
+		this.title = title;
+		return this;
+	}
+
+	/**
+	 * Sets the title of this object.
+	 *
+	 * @param title The title of this object.
+	 * @return This object (for method chaining).
+	 */
+	public CommonEntry title(String title) {
+		this.title = new Text().text(title);
+		return this;
+	}
+
+	/**
+	 * Returns the update timestamp of this object.
+	 *
+	 * @return The update timestamp of this object.
+	 */
+	@BeanProperty(swap=CalendarSwap.ISO8601DT.class)
+	public Calendar getUpdated() {
+		return updated;
+	}
+
+	/**
+	 * Sets the update timestamp of this object.
+	 *
+	 * @param updated The update timestamp of this object.
+	 * @return This object (for method chaining).
+	 */
+	@BeanProperty("updated")
+	public CommonEntry updated(Calendar updated) {
+		this.updated = updated;
+		return this;
+	}
+
+	/**
+	 * Sets the update timestamp of this object.
+	 *
+	 * @param updated The update timestamp of this object in ISO8601 format.
+	 * @return This object (for method chaining).
+	 */
+	@BeanProperty("updated")
+	public CommonEntry updated(String updated) {
+		this.updated = parseDateTime(updated);
+		return this;
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/75b0d8ee/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Content.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Content.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Content.java
new file mode 100644
index 0000000..e90c674
--- /dev/null
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Content.java
@@ -0,0 +1,163 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau.dto.atom;
+
+import static org.apache.juneau.internal.StringUtils.*;
+import static org.apache.juneau.xml.annotation.XmlFormat.*;
+
+import java.net.*;
+import java.net.URI;
+
+import org.apache.juneau.*;
+import org.apache.juneau.annotation.*;
+import org.apache.juneau.xml.annotation.*;
+
+/**
+ * Represents an <code>atomContent</code> construct in the RFC4287 specification.
+ *
+ * <h6 class='figure'>Schema</h6>
+ * <p class='bcode'>
+ * 	atomContent = atomInlineTextContent
+ * 		| atomInlineXHTMLContent
+ * 		| atomInlineOtherContent
+ * 		| atomOutOfLineContent
+ *
+ * 	atomInlineTextContent =
+ * 		element atom:content {
+ * 			atomCommonAttributes,
+ * 			attribute type { "text" | "html" }?,
+ * 			(text)*
+ * 		}
+ *
+ * 	atomInlineXHTMLContent =
+ * 		element atom:content {
+ * 			atomCommonAttributes,
+ * 			attribute type { "xhtml" },
+ * 			xhtmlDiv
+ * 		}
+ *
+ * 	atomInlineOtherContent =
+ * 		element atom:content {
+ * 			atomCommonAttributes,
+ * 			attribute type { atomMediaType }?,
+ * 			(text|anyElement)*
+ * 	}
+ *
+ * 	atomOutOfLineContent =
+ * 		element atom:content {
+ * 			atomCommonAttributes,
+ * 			attribute type { atomMediaType }?,
+ * 			attribute src { atomUri },
+ * 			empty
+ * 	}
+ * </p>
+ *
+ * <h6 class='topic'>Additional Information</h6>
+ * <ul class='doctree'>
+ * 	<li class='link'>
+ * 		<a class='doclink' href='../../../../../overview-summary.html#DTOs'>Juneau Data Transfer Objects
+ * 		(org.apache.juneau.dto)</a>
+ * 		<ul>
+ * 			<li class='sublink'>
+ * 				<a class='doclink' href='../../../../../overview-summary.html#DTOs.Atom'>Atom</a>
+ * 		</ul>
+ * 	</li>
+ * 	<li class='jp'>
+ * 		<a class='doclink' href='package-summary.html#TOC'>org.apache.juneau.dto.atom</a>
+ * 	</li>
+ * </ul>
+ */
+@SuppressWarnings("hiding")
+public class Content extends Text {
+
+	private URI src;
+
+
+	/**
+	 * Normal content.
+	 *
+	 * @param type The content type of this content.
+	 */
+	public Content(String type) {
+		super(type);
+	}
+
+	/**
+	 * Normal content.
+	 */
+	public Content() {
+		super();
+	}
+
+
+	//--------------------------------------------------------------------------------
+	// Bean properties
+	//--------------------------------------------------------------------------------
+
+	/**
+	 * Returns the source URI.
+	 *
+	 * @return the source URI.
+	 */
+	@Xml(format=ATTR)
+	public URI getSrc() {
+		return src;
+	}
+
+	/**
+	 * Sets the source URI.
+	 *
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 *
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
+	 *
+	 * @param src The source URI.
+	 * @return This object (for method chaining).
+	 */
+	@BeanProperty("src")
+	public Content src(Object src) {
+		this.src = toURI(src);
+		return this;
+	}
+
+
+	//--------------------------------------------------------------------------------
+	// Overridden setters (to simplify method chaining)
+	//--------------------------------------------------------------------------------
+
+	@Override /* Text */
+	public Content text(String text) {
+		super.text(text);
+		return this;
+	}
+
+	@Override /* Text */
+	public Content type(String type) {
+		super.type(type);
+		return this;
+	}
+
+	@Override /* Common */
+	public Content base(Object base) {
+		super.base(base);
+		return this;
+	}
+	@Override /* Common */
+	public Content lang(String lang) {
+		super.lang(lang);
+		return this;
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/75b0d8ee/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Entry.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Entry.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Entry.java
new file mode 100644
index 0000000..2bd640b
--- /dev/null
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Entry.java
@@ -0,0 +1,291 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau.dto.atom;
+
+import static org.apache.juneau.dto.atom.Utils.*;
+
+import java.util.*;
+
+import org.apache.juneau.annotation.*;
+import org.apache.juneau.transforms.*;
+
+/**
+ * Represents an <code>atomEntry</code> construct in the RFC4287 specification.
+ *
+ * <h6 class='figure'>Schema</h6>
+ * <p class='bcode'>
+ * 	atomEntry =
+ * 		element atom:entry {
+ * 			atomCommonAttributes,
+ * 			(atomAuthor*
+ * 			&amp; atomCategory*
+ * 			&amp; atomContent?
+ * 			&amp; atomContributor*
+ * 			&amp; atomId
+ * 			&amp; atomLink*
+ * 			&amp; atomPublished?
+ * 			&amp; atomRights?
+ * 			&amp; atomSource?
+ * 			&amp; atomSummary?
+ * 			&amp; atomTitle
+ * 			&amp; atomUpdated
+ * 			&amp; extensionElement*)
+ * 		}
+ * </p>
+ *
+ * <h6 class='topic'>Additional Information</h6>
+ * <ul class='doctree'>
+ * 	<li class='link'>
+ * 		<a class='doclink' href='../../../../../overview-summary.html#DTOs'>Juneau Data Transfer Objects
+ * 		(org.apache.juneau.dto)</a>
+ * 		<ul>
+ * 			<li class='sublink'>
+ * 				<a class='doclink' href='../../../../../overview-summary.html#DTOs.Atom'>Atom</a>
+ * 		</ul>
+ * 	</li>
+ * 	<li class='jp'>
+ * 		<a class='doclink' href='package-summary.html#TOC'>org.apache.juneau.dto.atom</a>
+ * 	</li>
+ * </ul>
+ */
+@Bean(typeName="entry")
+@SuppressWarnings("hiding")
+public class Entry extends CommonEntry {
+
+	private Content content;
+	private Calendar published;
+	private Source source;
+	private Text summary;
+
+	/**
+	 * Normal constructor.
+	 *
+	 * @param id The ID of this entry.
+	 * @param title The title of this entry.
+	 * @param updated The updated timestamp of this entry.
+	 */
+	public Entry(Id id, Text title, Calendar updated) {
+		super(id, title, updated);
+	}
+
+	/**
+	 * Normal constructor.
+	 *
+	 * @param id The ID of this entry.
+	 * @param title The title of this entry.
+	 * @param updated The updated timestamp of this entry.
+	 */
+	public Entry(String id, String title, String updated) {
+		super(id, title, updated);
+	}
+
+	/** Bean constructor. */
+	public Entry() {}
+
+
+	//--------------------------------------------------------------------------------
+	// Bean properties
+	//--------------------------------------------------------------------------------
+
+	/**
+	 * Returns the content of this entry.
+	 *
+	 * @return The content of this entry.
+	 */
+	public Content getContent() {
+		return content;
+	}
+
+	/**
+	 * Sets the content of this entry.
+	 *
+	 * @param content The content of this entry.
+	 * @return This object (for method chaining).
+	 */
+	@BeanProperty("content")
+	public Entry content(Content content) {
+		this.content = content;
+		return this;
+	}
+
+	/**
+	 * Returns the publish timestamp of this entry.
+	 *
+	 * @return The publish timestamp of this entry.
+	 */
+	@BeanProperty(swap=CalendarSwap.ISO8601DT.class)
+	public Calendar getPublished() {
+		return published;
+	}
+
+	/**
+	 * Sets the publish timestamp of this entry.
+	 *
+	 * @param published The publish timestamp of this entry.
+	 * @return This object (for method chaining).
+	 */
+	@BeanProperty("published")
+	public Entry published(Calendar published) {
+		this.published = published;
+		return this;
+	}
+
+	/**
+	 * Sets the publish timestamp of this entry.
+	 *
+	 * @param published The publish timestamp of this entry in ISO8601 format.
+	 * @return This object (for method chaining).
+	 */
+	@BeanProperty("published")
+	public Entry published(String published) {
+		this.published = parseDateTime(published);
+		return this;
+	}
+
+	/**
+	 * Returns the source of this entry.
+	 *
+	 * @return The source of this entry.
+	 */
+	public Source getSource() {
+		return source;
+	}
+
+	/**
+	 * Sets the source of this entry.
+	 *
+	 * @param source The source of this entry.
+	 * @return This object (for method chaining).
+	 */
+	@BeanProperty("source")
+	public Entry source(Source source) {
+		this.source = source;
+		return this;
+	}
+
+	/**
+	 * Returns the summary of this entry.
+	 *
+	 * @return The summary of this entry.
+	 */
+	public Text getSummary() {
+		return summary;
+	}
+
+	/**
+	 * Sets the summary of this entry.
+	 *
+	 * @param summary The summary of this entry.
+	 * @return This object (for method chaining).
+	 */
+	@BeanProperty("summary")
+	public Entry summary(Text summary) {
+		this.summary = summary;
+		return this;
+	}
+
+	/**
+	 * Sets the summary of this entry.
+	 *
+	 * @param summary The summary of this entry.
+	 * @return This object (for method chaining).
+	 */
+	@BeanProperty("summary")
+	public Entry summary(String summary) {
+		this.summary = new Text(summary);
+		return this;
+	}
+
+
+	//--------------------------------------------------------------------------------
+	// Overridden setters (to simplify method chaining)
+	//--------------------------------------------------------------------------------
+
+	@Override /* CommonEntry */
+	public Entry authors(Person...authors) {
+		super.authors(authors);
+		return this;
+	}
+
+	@Override /* CommonEntry */
+	public Entry categories(Category...categories) {
+		super.categories(categories);
+		return this;
+	}
+
+	@Override /* CommonEntry */
+	public Entry contributors(Person...contributors) {
+		super.contributors(contributors);
+		return this;
+	}
+
+	@Override /* CommonEntry */
+	public Entry id(Id id) {
+		super.id(id);
+		return this;
+	}
+
+	@Override /* CommonEntry */
+	public Entry links(Link...links) {
+		super.links(links);
+		return this;
+	}
+
+	@Override /* CommonEntry */
+	public Entry rights(Text rights) {
+		super.rights(rights);
+		return this;
+	}
+
+	@Override /* CommonEntry */
+	public Entry rights(String rights) {
+		super.rights(rights);
+		return this;
+	}
+
+	@Override /* CommonEntry */
+	public Entry title(Text title) {
+		super.title(title);
+		return this;
+	}
+
+	@Override /* CommonEntry */
+	public Entry title(String title) {
+		super.title(title);
+		return this;
+	}
+
+	@Override /* CommonEntry */
+	public Entry updated(Calendar updated) {
+		super.updated(updated);
+		return this;
+	}
+
+	@Override /* CommonEntry */
+	public Entry updated(String updated) {
+		super.updated(updated);
+		return this;
+	}
+
+	@Override /* Common */
+	public Entry base(Object base) {
+		super.base(base);
+		return this;
+	}
+
+	@Override /* Common */
+	public Entry lang(String lang) {
+		super.lang(lang);
+		return this;
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/75b0d8ee/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Feed.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Feed.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Feed.java
new file mode 100644
index 0000000..4c5ca0b
--- /dev/null
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Feed.java
@@ -0,0 +1,305 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau.dto.atom;
+
+import static org.apache.juneau.xml.annotation.XmlFormat.*;
+
+import java.util.*;
+
+import org.apache.juneau.annotation.*;
+import org.apache.juneau.xml.annotation.*;
+
+/**
+ * Top-level ATOM feed object.
+ *
+ * <p>
+ * Represents an <code>atomFeed</code> construct in the RFC4287 specification.
+ *
+ * <h6 class='figure'>Schema</h6>
+ * <p class='bcode'>
+ * 	atomFeed =
+ * 		element atom:feed {
+ * 			atomCommonAttributes,
+ * 			(atomAuthor*
+ * 			 &amp; atomCategory*
+ * 			 &amp; atomContributor*
+ * 			 &amp; atomGenerator?
+ * 			 &amp; atomIcon?
+ * 			 &amp; atomId
+ * 			 &amp; atomLink*
+ * 			 &amp; atomLogo?
+ * 			 &amp; atomRights?
+ * 			 &amp; atomSubtitle?
+ * 			 &amp; atomTitle
+ * 			 &amp; atomUpdated
+ * 			 &amp; extensionElement*),
+ * 			atomEntry*
+ * 		}
+ * </p>
+ *
+ * <h6 class='topic'>Additional Information</h6>
+ * <ul class='doctree'>
+ * 	<li class='link'>
+ * 		<a class='doclink' href='../../../../../overview-summary.html#DTOs'>Juneau Data Transfer Objects
+ * 		(org.apache.juneau.dto)</a>
+ * 		<ul>
+ * 			<li class='sublink'>
+ * 				<a class='doclink' href='../../../../../overview-summary.html#DTOs.Atom'>Atom</a>
+ * 		</ul>
+ * 	</li>
+ * 	<li class='jp'>
+ * 		<a class='doclink' href='package-summary.html#TOC'>org.apache.juneau.dto.atom</a>
+ * 	</li>
+ * </ul>
+ */
+@Bean(typeName="feed")
+@SuppressWarnings("hiding")
+public class Feed extends CommonEntry {
+
+	private Generator generator;  // atomGenerator?
+	private Icon icon;            // atomIcon?
+	private Logo logo;            // atomLogo?
+	private Text subtitle;        // atomSubtitle?
+	private Entry[] entries;      // atomEntry*
+
+	/**
+	 * Normal constructor.
+	 *
+	 * @param id The feed identifier.
+	 * @param title The feed title.
+	 * @param updated The feed updated timestamp.
+	 */
+	public Feed(Id id, Text title, Calendar updated) {
+		super(id, title, updated);
+	}
+
+	/**
+	 * Normal constructor.
+	 *
+	 * @param id The feed identifier.
+	 * @param title The feed title.
+	 * @param updated The feed updated timestamp.
+	 */
+	public Feed(String id, String title, String updated) {
+		super(id, title, updated);
+	}
+
+	/** Bean constructor. */
+	public Feed() {}
+
+
+	//--------------------------------------------------------------------------------
+	// Bean properties
+	//--------------------------------------------------------------------------------
+
+	/**
+	 * Returns generator information on this feed.
+	 *
+	 * @return The generator information on this feed.
+	 */
+	public Generator getGenerator() {
+		return generator;
+	}
+
+	/**
+	 * Sets the generator information on this feed.
+	 *
+	 * @param generator The generator information on this feed.
+	 * @return This object (for method chaining).
+	 */
+	@BeanProperty("generator")
+	public Feed generator(Generator generator) {
+		this.generator = generator;
+		return this;
+	}
+
+	/**
+	 * Returns the feed icon.
+	 *
+	 * @return The feed icon.
+	 */
+	public Icon getIcon() {
+		return icon;
+	}
+
+	/**
+	 * Sets the feed icon.
+	 *
+	 * @param icon The feed icon.
+	 * @return This object (for method chaining).
+	 */
+	@BeanProperty("icon")
+	public Feed icon(Icon icon) {
+		this.icon = icon;
+		return this;
+	}
+
+	/**
+	 * Returns the feed logo.
+	 *
+	 * @return The feed logo.
+	 */
+	public Logo getLogo() {
+		return logo;
+	}
+
+	/**
+	 * Sets the feed logo.
+	 *
+	 * @param logo The feed logo.
+	 * @return This object (for method chaining).
+	 */
+	@BeanProperty("logo")
+	public Feed logo(Logo logo) {
+		this.logo = logo;
+		return this;
+	}
+
+	/**
+	 * Returns the feed subtitle.
+	 *
+	 * @return The feed subtitle.
+	 */
+	@BeanProperty("subtitle")
+	public Text getSubTitle() {
+		return subtitle;
+	}
+
+	/**
+	 * Sets the feed subtitle.
+	 *
+	 * @param subtitle The feed subtitle.
+	 * @return This object (for method chaining).
+	 */
+	@BeanProperty("subtitle")
+	public Feed subtitle(Text subtitle) {
+		this.subtitle = subtitle;
+		return this;
+	}
+
+	/**
+	 * Sets the feed subtitle.
+	 *
+	 * @param subtitle The feed subtitle.
+	 * @return This object (for method chaining).
+	 */
+	public Feed subtitle(String subtitle) {
+		this.subtitle = new Text(subtitle);
+		return this;
+	}
+
+	/**
+	 * Returns the entries in the feed.
+	 *
+	 * @return The entries in the feed.
+	 */
+	@Xml(format=COLLAPSED)
+	public Entry[] getEntries() {
+		return entries;
+	}
+
+	/**
+	 * Sets the entries in the feed.
+	 *
+	 * @param entries The entries in the feed.
+	 * @return This object (for method chaining).
+	 */
+	@BeanProperty("entries")
+	public Feed entries(Entry...entries) {
+		this.entries = entries;
+		return this;
+	}
+
+
+	//--------------------------------------------------------------------------------
+	// Overridden setters (to simplify method chaining)
+	//--------------------------------------------------------------------------------
+
+	@Override /* CommonEntry */
+	public Feed authors(Person...authors) {
+		super.authors(authors);
+		return this;
+	}
+
+	@Override /* CommonEntry */
+	public Feed categories(Category...categories) {
+		super.categories(categories);
+		return this;
+	}
+
+	@Override /* CommonEntry */
+	public Feed contributors(Person...contributors) {
+		super.contributors(contributors);
+		return this;
+	}
+
+	@Override /* CommonEntry */
+	public Feed id(Id id) {
+		super.id(id);
+		return this;
+	}
+
+	@Override /* CommonEntry */
+	public Feed links(Link...links) {
+		super.links(links);
+		return this;
+	}
+
+	@Override /* CommonEntry */
+	public Feed rights(Text rights) {
+		super.rights(rights);
+		return this;
+	}
+
+	@Override /* CommonEntry */
+	public Feed rights(String rights) {
+		super.rights(rights);
+		return this;
+	}
+
+	@Override /* CommonEntry */
+	public Feed title(Text title) {
+		super.title(title);
+		return this;
+	}
+
+	@Override /* CommonEntry */
+	public Feed title(String title) {
+		super.title(title);
+		return this;
+	}
+
+	@Override /* CommonEntry */
+	public Feed updated(Calendar updated) {
+		super.updated(updated);
+		return this;
+	}
+
+	@Override /* CommonEntry */
+	public Feed updated(String updated) {
+		super.updated(updated);
+		return this;
+	}
+
+	@Override /* Common */
+	public Feed base(Object base) {
+		super.base(base);
+		return this;
+	}
+
+	@Override /* Common */
+	public Feed lang(String lang) {
+		super.lang(lang);
+		return this;
+	}
+}