summaryrefslogtreecommitdiff
path: root/org/apache/commons/net/nntp/NewGroupsOrNewsQuery.java
diff options
context:
space:
mode:
Diffstat (limited to 'org/apache/commons/net/nntp/NewGroupsOrNewsQuery.java')
-rw-r--r--org/apache/commons/net/nntp/NewGroupsOrNewsQuery.java283
1 files changed, 283 insertions, 0 deletions
diff --git a/org/apache/commons/net/nntp/NewGroupsOrNewsQuery.java b/org/apache/commons/net/nntp/NewGroupsOrNewsQuery.java
new file mode 100644
index 0000000..a0d9aeb
--- /dev/null
+++ b/org/apache/commons/net/nntp/NewGroupsOrNewsQuery.java
@@ -0,0 +1,283 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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());
+ }
+}