Mercurial Hosting > nabble
view src/nabble/model/Node.java @ 47:72765b66e2c3
remove mailing list code
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Fri, 18 Jun 2021 17:44:24 -0600 |
parents | 7ecd1a4ef557 |
children |
line wrap: on
line source
package nabble.model; import fschmidt.db.DbObject; import fschmidt.db.LongKey; import fschmidt.util.java.Filter; import nabble.model.export.NodeData; import java.util.Collection; import java.util.Comparator; import java.util.Date; import java.util.Map; // for both posts and apps public interface Node extends Message.Source, DbObject<LongKey,NodeImpl> { public long getId(); public Person getOwner(); public void setOwner(User user); public Node getParent(); public void changeParent(Node parent) throws ModelException; public Site getSite(); public boolean isRoot(); public NodeIterator<? extends Node> getChildren(); public NodeIterator<? extends Node> getChildren(String cnd); public int getChildCount(); public Kind getKind(); public NodeIterator<? extends Node> getAncestors(); // starting with self public NodeIterator<? extends Node> getDescendants(); public NodeIterator<? extends Node> getDescendantApps(); public int getDescendantCount(); public int getDescendantAppCount(); public int getDescendantPostCount(); public NodeIterator<? extends Node> getPostsByDate(Filter<Node> filter); public NodeIterator<? extends Node> getPostsByDateAscending(Filter<Node> filter); public NodeIterator<? extends Node> getTopicsByLastNodeDate(String cnd,Filter<Node> filter); public NodeIterator<? extends Node> getTopicsBySubject(String cnd,Filter<Node> filter); public NodeIterator<? extends Node> getTopicsByPinnedAndLastNodeDate(String cnd,Filter<Node> filter); public NodeIterator<? extends Node> getTopicsByPinnedAndRootNodeDate(String cnd,Filter<Node> filter); public NodeIterator<? extends Node> getTopicsByPopularity(String cnd,Filter<Node> filter); public int getTopicCount(String cnd,Filter<Node> filter); public Node getLastNode(); public Date getLastNodeDate(); public String getSubject(); public void setSubject(String subject) throws ModelException.RequiredSubject; public String getSubjectHtml(); public Message getMessage(); public void setMessage(String message,Message.Format msgFmt); public void deleteMessageOrNode(); public void deleteRecursively(); public Date getWhenCreated(); public void setWhenCreated(Date whenCreated); public Date getWhenUpdated(); public Node getGoodCopy(); public Node getApp(); public Node getTopic(); public void update(); public void insert(boolean isDoneByOwner) throws ModelException.TooManyPosts; public boolean isInDb(); public Collection<Subscription> getSubscriptions(int i, int n); public int getSubscriptionCount(); public Map<User,Subscription> getSubscribersToNotify(); public String getType(); public void setType(String type); public boolean isPinned(); public void pin(Node[] children); public long getExportedNodeId(); public void setExportedNodeId(long id); public NodeData getData(); public void export(String permalink,String email); public String getEmbeddingUrl(); public void setEmbeddingUrl(String url); public Map<ExtensionFactory<Node, ?>, Object> getExtensionMap(); public boolean hasPreviousTopic(); public Node getPreviousTopic(); public boolean hasNextTopic(); public Node getNextTopic(); public boolean hasChildApps(); public boolean hasChildTopics(); public boolean hasPinnedApps(); public boolean hasPinnedTopics(); public NodeIterator<? extends Node> getChildApps(); public NodeIterator<? extends Node> getChildApps(String cnd); public enum Kind { APP, POST } public static final class Type { // apps public static final String FORUM = "forum"; public static final String MIXED = "mixed"; public static final String BOARD = "board"; public static final String CATEGORY = "category"; public static final String NEWS = "news"; public static final String GALLERY = "gallery"; public static final String BLOG = "blog"; // posts public static final String BLOG_ENTRY = "blog_entry"; public static final String GALLERY_ENTRY = "gallery_entry"; public static final String NEWS_ENTRY = "news_entry"; public static final String COMMENT = "comment"; } public Comparator<Node> dateComparator = new Comparator<Node>(){ public int compare(Node n1,Node n2) { return n1.getWhenCreated().compareTo(n2.getWhenCreated()); } }; public Comparator<Node> subjectComparator = new Comparator<Node>(){ public int compare(Node o1,Node o2) { NodeImpl n1 = (NodeImpl)o1; NodeImpl n2 = (NodeImpl)o2; return n1.getCollationKey().compareTo(n2.getCollationKey()); } }; public <T> T getExtension(ExtensionFactory<Node,T> factory); public String getProperty(String key); public void setProperty(String key,String value); public interface Order { public String sqlOrder(); public Comparable getComparable(Node node); public Comparable getPostComparable(Node node); public abstract class BasicOrder implements Order { public Comparable getPostComparable(Node node) { return getComparable(node); } } public static final Order BY_LAST_NODE_DATE_DESC = new BasicOrder() { public String sqlOrder() { return "last_node_date desc, node_id desc"; } public Comparable getComparable(Node node) { return -node.getLastNodeDate().getTime(); } }; public static final Order BY_WHEN_CREATED = new BasicOrder() { public String sqlOrder() { return "when_created, node_id"; } public Comparable getComparable(Node node) { return node.getWhenCreated(); } }; public static final Order BY_SUBJECT = new BasicOrder() { public String sqlOrder() { return "is_app, lower(subject), node_id"; } public Comparable getComparable(Node node) { return node.getKind()==Kind.APP ? "" : node.getSubject().toLowerCase(); } }; public static final Order BY_DATE_DESC = new Order() { public String sqlOrder() { return "last_node_date desc, node_id desc"; } public Comparable getComparable(Node node) { return -node.getLastNodeDate().getTime(); } public Comparable getPostComparable(Node node) { return -node.getWhenCreated().getTime(); } }; } }