001/*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements.  See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License.  You may obtain a copy of the License at
008 *
009 *      https://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017
018package org.apache.commons.net.nntp;
019
020/**
021 * NewsgroupInfo stores information pertaining to a newsgroup returned by the NNTP GROUP, LIST, and NEWGROUPS commands, implemented by
022 * {@link org.apache.commons.net.nntp.NNTPClient#selectNewsgroup selectNewsgroup} , {@link org.apache.commons.net.nntp.NNTPClient#listNewsgroups listNewsgroups
023 * } , and {@link org.apache.commons.net.nntp.NNTPClient#listNewNewsgroups listNewNewsgroups} respectively.
024 *
025 * @see NNTPClient
026 */
027
028public final class NewsgroupInfo {
029
030    /**
031     * A constant indicating that the posting permission of a newsgroup is unknown. For example, the NNTP GROUP command does not return posting information, so
032     * NewsgroupInfo instances obtained from that command will have an UNKNOWN_POSTING_PERMISSION.
033     */
034    public static final int UNKNOWN_POSTING_PERMISSION = 0;
035
036    /** A constant indicating that a newsgroup is moderated. */
037    public static final int MODERATED_POSTING_PERMISSION = 1;
038
039    /** A constant indicating that a newsgroup is public and unmoderated. */
040    public static final int PERMITTED_POSTING_PERMISSION = 2;
041
042    /**
043     * A constant indicating that a newsgroup is closed for general posting.
044     */
045    public static final int PROHIBITED_POSTING_PERMISSION = 3;
046
047    /**
048     * The empty array of this type.
049     */
050    static final NewsgroupInfo[] EMPTY_ARRAY = {};
051
052    private String newsgroup;
053    private long estimatedArticleCount;
054    private long firstArticle;
055    private long lastArticle;
056    private int postingPermission;
057
058    /**
059     * Constructs a new instance.
060     */
061    public NewsgroupInfo() {
062        // empty
063    }
064
065    /**
066     * Gets the estimated number of articles in the newsgroup. The accuracy of this value will depend on the server implementation.
067     *
068     * @return The estimated number of articles in the newsgroup.
069     */
070    @Deprecated
071    public int getArticleCount() {
072        return (int) estimatedArticleCount;
073    }
074
075    /**
076     * Gets the estimated number of articles in the newsgroup. The accuracy of this value will depend on the server implementation.
077     *
078     * @return The estimated number of articles in the newsgroup.
079     */
080    public long getArticleCountLong() {
081        return estimatedArticleCount;
082    }
083
084    /**
085     * Gets the number of the first article in the newsgroup.
086     *
087     * @return The number of the first article in the newsgroup.
088     */
089    @Deprecated
090    public int getFirstArticle() {
091        return (int) firstArticle;
092    }
093
094    /**
095     * Gets the number of the first article in the newsgroup.
096     *
097     * @return The number of the first article in the newsgroup.
098     */
099    public long getFirstArticleLong() {
100        return firstArticle;
101    }
102
103    /**
104     * Gets the number of the last article in the newsgroup.
105     *
106     * @return The number of the last article in the newsgroup.
107     */
108    @Deprecated
109    public int getLastArticle() {
110        return (int) lastArticle;
111    }
112
113    /**
114     * Gets the number of the last article in the newsgroup.
115     *
116     * @return The number of the last article in the newsgroup.
117     */
118    public long getLastArticleLong() {
119        return lastArticle;
120    }
121
122    /**
123     * Gets the newsgroup name.
124     *
125     * @return The name of the newsgroup.
126     */
127    public String getNewsgroup() {
128        return newsgroup;
129    }
130
131    /**
132     * Gets the posting permission of the newsgroup. This will be one of the {@code POSTING_PERMISSION} constants.
133     *
134     * @return The posting permission status of the newsgroup.
135     */
136    public int getPostingPermission() {
137        return postingPermission;
138    }
139
140    void setArticleCount(final long count) {
141        estimatedArticleCount = count;
142    }
143
144    void setFirstArticle(final long first) {
145        firstArticle = first;
146    }
147
148    /*
149     * public String toString() { StringBuilder buffer = new StringBuilder(); buffer.append(__newsgroup); buffer.append(' '); buffer.append(__lastArticle);
150     * buffer.append(' '); buffer.append(__firstArticle); buffer.append(' '); switch(__postingPermission) { case 1: buffer.append('m'); break; case 2:
151     * buffer.append('y'); break; case 3: buffer.append('n'); break; } return buffer.toString(); }
152     */
153
154    // DEPRECATED METHODS - for API compatibility only - DO NOT USE
155
156    void setLastArticle(final long last) {
157        lastArticle = last;
158    }
159
160    void setNewsgroup(final String newsgroup) {
161        this.newsgroup = newsgroup;
162    }
163
164    void setPostingPermission(final int permission) {
165        postingPermission = permission;
166    }
167}