View Javadoc

1   /*****************************************************************
2    * Licensed to the Apache Software Foundation (ASF) under one   *
3    * or more contributor license agreements.  See the NOTICE file *
4    * distributed with this work for additional information        *
5    * regarding copyright ownership.  The ASF licenses this file   *
6    * to you under the Apache License, Version 2.0 (the            *
7    * "License"); you may not use this file except in compliance   *
8    * with the License.  You may obtain a copy of the License at   *
9    *                                                              *
10   *   http://www.apache.org/licenses/LICENSE-2.0                 *
11   *                                                              *
12   * Unless required by applicable law or agreed to in writing,   *
13   * software distributed under the License is distributed on an  *
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
15   * KIND, either express or implied.  See the License for the    *
16   * specific language governing permissions and limitations      *
17   * under the License.                                           *
18   ****************************************************************/
19  
20  package org.apache.james.nntpserver.repository;
21  
22  import java.io.InputStream;
23  import java.io.IOException;
24  import java.util.Date;
25  import java.util.Iterator;
26  
27  /*** 
28   * Contract exposed by a NewsGroup
29   *
30   */
31  public interface NNTPGroup {
32  
33      /***
34       * Gets the name of the newsgroup
35       *
36       * @return the newsgroup name
37       */
38      String getName();
39  
40      /***
41       * Gets the description of the newsgroup
42       *
43       * @return the newsgroup description
44       */
45      String getDescription();
46  
47      /***
48       * Returns whether posting is allowed to this newsgroup
49       *
50       * @return whether posting is allowed to this newsgroup
51       */
52      boolean isPostAllowed();
53  
54      /***
55       * Gets the number of articles in the group.
56       *
57       * @return the number of articles in the group.
58       */
59      int getNumberOfArticles();
60  
61      /***
62       * Gets the first article number in the group.
63       *
64       * @return the first article number in the group.
65       */
66      int getFirstArticleNumber();
67  
68      /***
69       * Gets the last article number in the group.
70       *
71       * @return the last article number in the group.
72       */
73      int getLastArticleNumber();
74  
75      /***
76       * Gets the article with the specified article number.
77       *
78       * @param number the article number
79       *
80       * @return the article
81       */
82      NNTPArticle getArticle(int number);
83  
84      /***
85       * Retrieves an iterator of articles in this newsgroup that were
86       * posted on or after the specified date.
87       *
88       * @param dt the Date that acts as a lower bound for the list of
89       *           articles
90       *
91       * @return the article iterator
92       */
93      Iterator getArticlesSince(Date dt);
94  
95      /***
96       * Retrieves an iterator of all articles in this newsgroup
97       *
98       * @return the article iterator
99       */
100     Iterator getArticles();
101 
102     /***
103      * Retrieves the group information in a format consistent with
104      * a LIST or LIST ACTIVE return line
105      *
106      * @return the properly formatted string
107      */
108     String getListFormat();
109 
110     /***
111      * Retrieves the group information in a format consistent with
112      * a LIST NEWSGROUPS return line
113      *
114      * @return the properly formatted string
115      */
116     String getListNewsgroupsFormat();
117 
118     /***
119      * Adds an article to the group based on the data in the
120      * stream.
121      *
122      * @param newsStream the InputStream containing the article data
123      *
124      * @return the newly created article
125      */
126     NNTPArticle addArticle(InputStream newsStream) throws IOException;
127 }