package net.i2p.router.news; import java.util.List; import net.i2p.data.DataHelper; import net.i2p.util.VersionComparator; /** * The update metadata. * Any String or List fields may be null. * * @since 0.9.17 */ public class NewsMetadata { // Standard Atom feed metadata public String feedTitle; public String feedSubtitle; public String feedID; public long feedUpdated; /** I2P metadata */ public List<Release> releases; public static class Release implements Comparable<Release> { public long date; public String minVersion; public String minJavaVersion; public String i2pVersion; public List<Update> updates; @Override public int compareTo(Release other) { // Sort latest version first. return VersionComparator.comp(other.i2pVersion, i2pVersion); } /** * For findbugs. * Warning, not a complete comparison. * Must be enhanced before using in a Map or Set. * @since 0.9.21 */ @Override public boolean equals(Object o) { if (o == null) return false; if (!(o instanceof Release)) return false; Release r = (Release) o; return DataHelper.eq(i2pVersion, r.i2pVersion); } /** * For findbugs. * @since 0.9.21 */ @Override public int hashCode() { return DataHelper.hashCode(i2pVersion); } } public static class Update implements Comparable<Update> { public String type; public String torrent; public List<String> clearnet; public List<String> ssl; @Override public int compareTo(Update other) { return getTypeOrder() - other.getTypeOrder(); } /** lower is preferred */ protected int getTypeOrder() { if ("su3".equalsIgnoreCase(type)) return 1; else if ("su2".equalsIgnoreCase(type)) return 2; else return 3; } /** * For findbugs. * Warning, not a complete comparison. * Must be enhanced before using in a Map or Set. * @since 0.9.21 */ @Override public boolean equals(Object o) { if (o == null) return false; if (!(o instanceof Update)) return false; Update u = (Update) o; return getTypeOrder() == u.getTypeOrder(); } /** * For findbugs. * @since 0.9.21 */ @Override public int hashCode() { return getTypeOrder(); } } }