newgroupsornewsquery.java

来自「apache推出的net包」· Java 代码 · 共 282 行

JAVA
282
字号
/* * Copyright 2001-2005 The Apache Software Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * *     http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package org.apache.commons.net.nntp;import java.util.Calendar;/*** * The NewGroupsOrNewsQuery class.  This is used to issue NNTP NEWGROUPS and * NEWNEWS queries, implemented by * {@link org.apache.commons.net.nntp.NNTPClient#listNewNewsgroups listNewNewsGroups } *  and * {@link org.apache.commons.net.nntp.NNTPClient#listNewNews listNewNews } *  respectively.  It prevents you from having to format * date, time, distribution, and newgroup arguments. * <p> * You might use the class as follows: * <pre> * query = new NewsGroupsOrNewsQuery(new GregorianCalendar(97, 11, 15), false); * query.addDistribution("comp"); * NewsgroupInfo[] newsgroups = client.listNewgroups(query); * </pre> * This will retrieve the list of newsgroups starting with the comp. * distribution prefix created since midnight 11/15/97. * <p> * <p> * @author Daniel F. Savarese * @see NNTPClient ***/public final class NewGroupsOrNewsQuery{    private String __date, __time;    private StringBuffer __distributions;    private StringBuffer __newsgroups;    private boolean __isGMT;    /***     * Creates a new query using the given time as a reference point.     * <p>     * @param date  The date since which new groups or news have arrived.     * @param gmt   True if the date should be considered as GMT, false if not.     ***/    public NewGroupsOrNewsQuery(Calendar date, boolean gmt)    {        int num;        String str;        StringBuffer buffer;        __distributions = null;        __newsgroups = null;        __isGMT = gmt;        buffer = new StringBuffer();        // Get year        num = date.get(Calendar.YEAR);        str = Integer.toString(num);        num = str.length();        if (num >= 2)            buffer.append(str.substring(num - 2));        else            buffer.append("00");        // Get month        num = date.get(Calendar.MONTH) + 1;        str = Integer.toString(num);        num = str.length();        if (num == 1)        {            buffer.append('0');            buffer.append(str);        }        else if (num == 2)            buffer.append(str);        else            buffer.append("01");        // Get day        num = date.get(Calendar.DAY_OF_MONTH);        str = Integer.toString(num);        num = str.length();        if (num == 1)        {            buffer.append('0');            buffer.append(str);        }        else if (num == 2)            buffer.append(str);        else            buffer.append("01");        __date = buffer.toString();        buffer.setLength(0);        // Get hour        num = date.get(Calendar.HOUR_OF_DAY);        str = Integer.toString(num);        num = str.length();        if (num == 1)        {            buffer.append('0');            buffer.append(str);        }        else if (num == 2)            buffer.append(str);        else            buffer.append("00");        // Get minutes        num = date.get(Calendar.MINUTE);        str = Integer.toString(num);        num = str.length();        if (num == 1)        {            buffer.append('0');            buffer.append(str);        }        else if (num == 2)            buffer.append(str);        else            buffer.append("00");        // Get seconds        num = date.get(Calendar.SECOND);        str = Integer.toString(num);        num = str.length();        if (num == 1)        {            buffer.append('0');            buffer.append(str);        }        else if (num == 2)            buffer.append(str);        else            buffer.append("00");        __time = buffer.toString();    }    /***     * Add a newsgroup to the list of newsgroups being queried.  Newsgroups     * added this way are only meaningful to the NEWNEWS command.  Newsgroup     * names may include the <code> * </code> wildcard, as in     * <code>comp.lang.* </code> or <code> comp.lang.java.* </code>.  Adding     * at least one newsgroup is mandatory for the NEWNEWS command.     * <p>     * @param newsgroup  The newsgroup to add to the list of groups to be     *                   checked for new news.     ***/    public void addNewsgroup(String newsgroup)    {        if (__newsgroups != null)            __newsgroups.append(',');        else            __newsgroups = new StringBuffer();        __newsgroups.append(newsgroup);    }    /***     * Add a newsgroup to the list of newsgroups being queried, but indicate     * that group should not be checked for new news.  Newsgroups     * added this way are only meaningful to the NEWNEWS command.     * Newsgroup names may include the <code> * </code> wildcard, as in     * <code>comp.lang.* </code> or <code> comp.lang.java.* </code>.     * <p>     * The following would create a query that searched for new news in     * all comp.lang.java newsgroups except for comp.lang.java.advocacy.     * <pre>     * query.addNewsgroup("comp.lang.java.*");     * query.omitNewsgroup("comp.lang.java.advocacy");     * </pre>     * <p>     * @param newsgroup  The newsgroup to add to the list of groups to be     *                   checked for new news, but which should be omitted from     *                   the search for new news..     ***/    public void omitNewsgroup(String newsgroup)    {        addNewsgroup("!" + newsgroup);    }    /***     * Add a distribution group to the query.  The distribution part of a     * newsgroup is the segment of the name preceding the first dot (e.g.,     * comp, alt, rec).  Only those newsgroups matching one of the     * distributions or, in the case of NEWNEWS, an article in a newsgroup     * matching one of the distributions, will be reported as a query result.     * Adding distributions is purely optional.     * <p>     * @param distribution A distribution to add to the query.     ***/    public void addDistribution(String distribution)    {        if (__distributions != null)            __distributions.append(',');        else            __distributions = new StringBuffer();        __distributions.append(distribution);    }    /***     * Return the NNTP query formatted date (year, month, day in the form     * YYMMDD.     * <p>     * @return The NNTP query formatted date.     ***/    public String getDate()    {        return __date;    }    /***     * Return the NNTP query formatted time (hour, minutes, seconds in the form     * HHMMSS.     * <p>     * @return The NNTP query formatted time.     ***/    public String getTime()    {        return __time;    }    /***     * Return whether or not the query date should be treated as GMT.     * <p>     * @return True if the query date is to be treated as GMT, false if not.     ***/    public boolean isGMT()    {        return __isGMT;    }    /***     * Return the comma separated list of distributions.  This may be null     * if there are no distributions.     * <p>     * @return The list of distributions, which may be null if no distributions     *         have been specified.     ***/    public String getDistributions()    {        return (__distributions == null ? null : __distributions.toString());    }    /***     * Return the comma separated list of newsgroups.  This may be null     * if there are no newsgroups     * <p>     * @return The list of newsgroups, which may be null if no newsgroups     *         have been specified.     ***/    public String getNewsgroups()    {        return (__newsgroups == null ? null : __newsgroups.toString());    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?