Newsgroup.java
上传用户:huihesys
上传日期:2007-01-04
资源大小:3877k
文件大小:6k
源码类别:

WEB邮件程序

开发平台:

C/C++

  1. /*
  2.  * Newsgroup.java
  3.  * Copyright (C) 1999 dog <dog@dog.net.uk>
  4.  * 
  5.  * This library is free software; you can redistribute it and/or
  6.  * modify it under the terms of the GNU Lesser General Public
  7.  * License as published by the Free Software Foundation; either
  8.  * version 2 of the License, or (at your option) any later version.
  9.  * 
  10.  * This library is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.  * Lesser General Public License for more details.
  14.  * 
  15.  * You should have received a copy of the GNU Lesser General Public
  16.  * License along with this library; if not, write to the Free Software
  17.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  18.  * 
  19.  * You may retrieve the latest version of this library from
  20.  * http://www.dog.net.uk/knife/
  21.  */
  22. package dog.mail.nntp;
  23. import java.io.*;
  24. import java.util.*;
  25. import javax.mail.*;
  26. import javax.mail.event.*;
  27. /**
  28.  * The folder class implementing the NNTP mail protocol.
  29.  *
  30.  * @author dog@dog.net.uk
  31.  * @version 1.2
  32.  */
  33. public class Newsgroup extends Folder {
  34. String name;
  35. int count = -1;
  36. int first = -1;
  37. int last = -1;
  38. boolean postingAllowed = false;
  39. boolean subscribed = false;
  40. String newsrcline;
  41. boolean open = false;
  42. Article[] articles;
  43. Date checkpoint;
  44. /**
  45.  * Constructor.
  46.  */
  47. protected Newsgroup(Store store, String name) {
  48. super(store);
  49. this.name = name;
  50. }
  51. /**
  52.  * Constructor.
  53.  */
  54. protected Newsgroup(Store store, String name, int count, int first, int last) {
  55. super(store);
  56. this.name = name;
  57. this.count = count;
  58. this.first = first;
  59. this.last = last;
  60. }
  61. /**
  62.  * Returns the name of this folder.
  63.  */
  64. public String getName() {
  65. return name;
  66. }
  67. /**
  68.  * Returns the full name of this folder.
  69.  */
  70. public String getFullName() {
  71. return getName();
  72. }
  73. /**
  74.  * Returns the type of this folder.
  75.  */
  76. public int getType() throws MessagingException {
  77. return HOLDS_MESSAGES;
  78. }
  79. /**
  80.  * Indicates whether this folder exists.
  81.  */
  82. public boolean exists() throws MessagingException {
  83. if (open) return true;
  84. try {
  85. open(READ_ONLY);
  86. close(false);
  87. return true;
  88. } catch (MessagingException e) {
  89. return false;
  90. }
  91. }
  92. /**
  93.  * Indicates whether this folder contains any new articles.
  94.  */
  95. public boolean hasNewMessages() throws MessagingException {
  96. return getNewMessageCount()>0;
  97. }
  98. /**
  99.  * Opens this folder.
  100.  */
  101. public void open(int mode) throws MessagingException {
  102. if (open)
  103. throw new MessagingException("Newsgroup is already open");
  104. if (mode!=READ_ONLY)
  105. throw new MessagingException("Newsgroup is read-only");
  106. ((NNTPStore)store).open(this);
  107. open = true;
  108. notifyConnectionListeners(ConnectionEvent.OPENED);
  109. }
  110. /**
  111.  * Closes this folder.
  112.  */
  113. public void close(boolean expunge) throws MessagingException {
  114. if (!open)
  115. throw new MessagingException("Newsgroup is not open");
  116.         if (expunge) expunge();
  117. ((NNTPStore)store).close(this);
  118. open = false;
  119. notifyConnectionListeners(ConnectionEvent.CLOSED);
  120. }
  121. /**
  122.  * Expunges this folder.
  123.  */
  124. public Message[] expunge() throws MessagingException {
  125.         throw new MessagingException("Newsgroup is read-only");
  126. }
  127. /**
  128.  * Indicates whether this folder is open.
  129.  */
  130. public boolean isOpen() {
  131. return open;
  132. }
  133. /**
  134.  * Indicates whether this folder is subscribed.
  135.  */
  136. public boolean isSubscribed() {
  137. return subscribed;
  138. }
  139. /**
  140.  * Returns the permanent flags for this folder.
  141.  */
  142. public Flags getPermanentFlags() { return new Flags(); }
  143. /**
  144.  * Returns the number of articles in this folder.
  145.  */
  146. public int getMessageCount() throws MessagingException {
  147. return getMessages().length;
  148. }
  149. /**
  150.  * Returns the articles in this folder.
  151.  */
  152. public Message[] getMessages() throws MessagingException {
  153. if (!open)
  154. throw new MessagingException("Newsgroup is not open");
  155.         NNTPStore s = (NNTPStore)store;
  156. if (articles==null)
  157. articles = s.getArticles(this);
  158. else { // check for new articles
  159. Article[] nm = s.getNewArticles(this, checkpoint);
  160. if (nm.length>0) {
  161. Article[] m2 = new Article[articles.length+nm.length];
  162. System.arraycopy(articles, 0, m2, 0, articles.length);
  163. System.arraycopy(nm, 0, m2, articles.length, nm.length);
  164. articles = m2;
  165. }
  166. }
  167. checkpoint = new Date();
  168.         return articles;
  169. }
  170. /**
  171.  * Returns the specified article in this folder.
  172.  * Since NNTP articles are not stored in sequential order,
  173.  * the effect is just to reference articles returned by getMessages().
  174.  */
  175. public Message getMessage(int msgnum) throws MessagingException {
  176. return getMessages()[msgnum-1];
  177. }
  178. /**
  179.  * NNTP folders are read-only.
  180.  */
  181. public void appendMessages(Message articles[]) throws MessagingException {
  182. throw new MessagingException("Folder is read-only");
  183. }
  184. /**
  185.  * Does nothing.
  186.  */
  187. public void fetch(Message articles[], FetchProfile fetchprofile) throws MessagingException {
  188. }
  189. // -- These must be overridden to throw exceptions --
  190. /**
  191.  * NNTP folders can't have parents.
  192.  */
  193. public Folder getParent() throws MessagingException {
  194. throw new MessagingException("Newsgroup can't have a parent");
  195. }
  196. /**
  197.  * NNTP folders can't contain subfolders.
  198.  */
  199. public Folder[] list(String s) throws MessagingException {
  200. throw new MessagingException("Newsgroups can't contain subfolders");
  201. }
  202. /**
  203.  * NNTP folders can't contain subfolders.
  204.  */
  205. public Folder getFolder(String s) throws MessagingException {
  206. throw new MessagingException("Newsgroups can't contain subfolders");
  207. }
  208. /**
  209.  * NNTP folders can't contain subfolders.
  210.  */
  211. public char getSeparator() throws MessagingException {
  212. throw new MessagingException("Newsgroups can't contain subfolders");
  213. }
  214. /**
  215.  * NNTP folders can't be created, deleted, or renamed.
  216.  */
  217. public boolean create(int i) throws MessagingException {
  218. throw new MessagingException("Newsgroups can't be created");
  219. }
  220. /**
  221.  * NNTP folders can't be created, deleted, or renamed.
  222.  */
  223. public boolean delete(boolean flag) throws MessagingException {
  224. throw new MessagingException("Newsgroups can't be deleted");
  225. }
  226. /**
  227.  * NNTP folders can't be created, deleted, or renamed.
  228.  */
  229. public boolean renameTo(Folder folder) throws MessagingException {
  230. throw new MessagingException("Newsgroups can't be renamed");
  231. }
  232. }