Skip to content

Commit

Permalink
Improve Atom feed
Browse files Browse the repository at this point in the history
  • Loading branch information
pvorb committed Jul 5, 2018
1 parent 9b86700 commit 9d0f403
Show file tree
Hide file tree
Showing 17 changed files with 298 additions and 72 deletions.
6 changes: 0 additions & 6 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@
<encoder.version>1.2</encoder.version>
<commonmark.version>0.11.0</commonmark.version>
<rome.version>1.10.0</rome.version>
<jaxb-api.version>2.3.0</jaxb-api.version>
<bootstrap.version>4.1.1</bootstrap.version>

<!-- Testing -->
Expand Down Expand Up @@ -176,11 +175,6 @@
<artifactId>rome</artifactId>
<version>${rome.version}</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>${jaxb-api.version}</version>
</dependency>

<dependency>
<groupId>io.micrometer</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import javax.xml.bind.annotation.XmlType;
import java.net.URI;

@XmlType(propOrder = {"term"})
@XmlType
@XmlAccessorType(XmlAccessType.FIELD)
@Data
@Builder
Expand Down
30 changes: 30 additions & 0 deletions src/main/java/de/vorb/platon/services/feeds/atom/AtomDateTime.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package de.vorb.platon.services.feeds.atom;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.XmlValue;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import java.time.Instant;

@XmlType
@XmlAccessorType(XmlAccessType.FIELD)
@Data
@NoArgsConstructor
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class AtomDateTime {

@XmlValue
@XmlJavaTypeAdapter(InstantAdapter.class)
private Instant dateTime;

public static AtomDateTime of(Instant dateTime) {
return new AtomDateTime(dateTime);
}

}
33 changes: 30 additions & 3 deletions src/main/java/de/vorb/platon/services/feeds/atom/AtomEntry.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,14 @@
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.w3c.dom.Element;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAnyElement;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
import java.util.ArrayList;
import java.util.List;

@XmlType
Expand All @@ -20,13 +23,37 @@
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class AtomEntry {

@XmlElement(name = "id")
@XmlElement(name = "id", required = true)
private String id;

@XmlElement(name = "title", required = true)
private String title;

@XmlElement(name = "published")
private AtomDateTime published;

@XmlElement(name = "updated", required = true)
private AtomDateTime updated;

@XmlElement(name = "author")
private List<AtomPerson> authors;
private List<AtomPerson> authors = new ArrayList<>();

@XmlElement(name = "contributor")
private List<AtomPerson> contributors = new ArrayList<>();

@XmlElement(name = "category")
private List<AtomCategory> categories = new ArrayList<>();

@XmlElement(name = "summary")
private AtomText summary;

@XmlElement(name = "content")
private String content;
private AtomText content;

@XmlElement(name = "link")
private List<AtomLink> links = new ArrayList<>();

@XmlAnyElement
private List<Element> extensionElements;

}
10 changes: 4 additions & 6 deletions src/main/java/de/vorb/platon/services/feeds/atom/AtomFeed.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,7 @@
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;

@XmlRootElement(name = "feed")
Expand All @@ -33,7 +32,7 @@ public class AtomFeed {
private String id;

@XmlElement(name = "link")
private List<AtomLink> links;
private List<AtomLink> links = new ArrayList<>();

@XmlElement(name = "category")
private List<AtomCategory> categories;
Expand All @@ -45,10 +44,9 @@ public class AtomFeed {
private String subtitle;

@XmlElement(name = "updated")
@XmlJavaTypeAdapter(InstantAdapter.class)
private Instant updated;
private AtomDateTime updated;

@XmlElement(name = "entry")
private List<AtomEntry> entries;
private List<AtomEntry> entries = new ArrayList<>();

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package de.vorb.platon.services.feeds.atom;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.XmlValue;

@XmlType
@XmlAccessorType(XmlAccessType.FIELD)
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class AtomGenerator {

@XmlAttribute(name = "uri")
private String uri;

@XmlAttribute(name = "version")
private String version;

@XmlValue
private String value;

}
25 changes: 25 additions & 0 deletions src/main/java/de/vorb/platon/services/feeds/atom/AtomIcon.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package de.vorb.platon.services.feeds.atom;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.XmlValue;

@XmlType
@XmlAccessorType(XmlAccessType.FIELD)
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class AtomIcon {

@XmlValue
private String uri;

}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlType;

@XmlType(propOrder = {"href", "rel", "type", "hreflang", "title", "length"})
@XmlType
@XmlAccessorType(XmlAccessType.FIELD)
@Data
@Builder
Expand Down
25 changes: 25 additions & 0 deletions src/main/java/de/vorb/platon/services/feeds/atom/AtomLogo.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package de.vorb.platon.services.feeds.atom;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.XmlValue;

@XmlType
@XmlAccessorType(XmlAccessType.FIELD)
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class AtomLogo {

@XmlValue
private String uri;

}
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,15 @@
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.w3c.dom.Element;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAnyElement;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
import java.net.URI;
import java.util.List;

@XmlType
@XmlAccessorType(XmlAccessType.FIELD)
Expand All @@ -29,4 +32,7 @@ public class AtomPerson {
@XmlElement(name = "email")
private String email;

@XmlAnyElement
private List<Element> extensionElements;

}
25 changes: 25 additions & 0 deletions src/main/java/de/vorb/platon/services/feeds/atom/AtomRights.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package de.vorb.platon.services.feeds.atom;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.XmlValue;

@XmlType
@XmlAccessorType(XmlAccessType.FIELD)
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class AtomRights {

@XmlValue
private String text;

}
41 changes: 41 additions & 0 deletions src/main/java/de/vorb/platon/services/feeds/atom/AtomText.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package de.vorb.platon.services.feeds.atom;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.XmlValue;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;

@XmlType
@XmlAccessorType(XmlAccessType.FIELD)
@Data
@NoArgsConstructor
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class AtomText {

@XmlAttribute(name = "type")
@XmlJavaTypeAdapter(TextType.Adapter.class)
private TextType type;

@XmlValue
private String text;

public static AtomText of(TextType type, String text) {
return new AtomText(type, text);
}

public static AtomText plainText(String text) {
return AtomText.of(TextType.TEXT, text);
}

public static AtomText html(String html) {
return AtomText.of(TextType.HTML, html);
}

}
25 changes: 25 additions & 0 deletions src/main/java/de/vorb/platon/services/feeds/atom/TextType.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package de.vorb.platon.services.feeds.atom;

import javax.xml.bind.annotation.adapters.XmlAdapter;

public enum TextType {

TEXT,
HTML,
XHTML;

public static class Adapter extends XmlAdapter<String, TextType> {

@Override
public TextType unmarshal(String v) throws Exception {
return TextType.valueOf(v.toUpperCase());
}

@Override
public String marshal(TextType v) throws Exception {
return v.toString().toLowerCase();
}

}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
@XmlSchema(namespace = AtomFeed.NS_ATOM, elementFormDefault = XmlNsForm.QUALIFIED, xmlns = {
@XmlNs(namespaceURI = AtomFeed.NS_ATOM, prefix = "atom")
@XmlNs(namespaceURI = AtomFeed.NS_ATOM, prefix = "")
})
package de.vorb.platon.services.feeds.atom;

Expand Down
Loading

0 comments on commit 9d0f403

Please sign in to comment.