From 063284837c8c366e5502b1b0264b8eb807b61732 Mon Sep 17 00:00:00 2001 From: Joe Robinson Date: Wed, 27 Oct 2010 14:21:09 +0100 Subject: Basic upload functionality to predifined location, with basic file browser --- .../commons/net/nntp/NewGroupsOrNewsQuery.java | 283 +++++++++++++++++++++ 1 file changed, 283 insertions(+) create mode 100644 org/apache/commons/net/nntp/NewGroupsOrNewsQuery.java (limited to 'org/apache/commons/net/nntp/NewGroupsOrNewsQuery.java') 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. + *

+ * You might use the class as follows: + *

+ * query = new NewsGroupsOrNewsQuery(new GregorianCalendar(97, 11, 15), false);
+ * query.addDistribution("comp");
+ * NewsgroupInfo[] newsgroups = client.listNewgroups(query);
+ * 
+ * This will retrieve the list of newsgroups starting with the comp. + * distribution prefix created since midnight 11/15/97. + *

+ *

+ * @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. + *

+ * @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 * wildcard, as in + * comp.lang.* or comp.lang.java.* . Adding + * at least one newsgroup is mandatory for the NEWNEWS command. + *

+ * @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 * wildcard, as in + * comp.lang.* or comp.lang.java.* . + *

+ * The following would create a query that searched for new news in + * all comp.lang.java newsgroups except for comp.lang.java.advocacy. + *

+     * query.addNewsgroup("comp.lang.java.*");
+     * query.omitNewsgroup("comp.lang.java.advocacy");
+     * 
+ *

+ * @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. + *

+ * @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. + *

+ * @return The NNTP query formatted date. + ***/ + public String getDate() + { + return __date; + } + + /*** + * Return the NNTP query formatted time (hour, minutes, seconds in the form + * HHMMSS. + *

+ * @return The NNTP query formatted time. + ***/ + public String getTime() + { + return __time; + } + + /*** + * Return whether or not the query date should be treated as GMT. + *

+ * @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. + *

+ * @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 + *

+ * @return The list of newsgroups, which may be null if no newsgroups + * have been specified. + ***/ + public String getNewsgroups() + { + return (__newsgroups == null ? null : __newsgroups.toString()); + } +} -- cgit v1.2.3