1 package org.apache.maven.plugin.multichanges.util;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.text.ParseException;
23 import java.text.SimpleDateFormat;
24 import java.util.Locale;
25
26 import org.apache.commons.logging.Log;
27 import org.apache.commons.logging.LogFactory;
28
29 /**
30 * This class provides a method to convert a date in the changes plugin format
31 * (yyyy-MM-dd) to a date in RSS format (RFC 822).
32 *
33 */
34 public class DateFormatter {
35 /**
36 * The date format used in changes report file (changes.xml used in
37 * maven-changes-plugin).
38 */
39 private final static SimpleDateFormat changesSDF = new SimpleDateFormat(
40 "yyyy-MM-dd");
41
42 /**
43 * The date format defined in RFC 822 and used in RSS feeds.
44 */
45 private final static SimpleDateFormat rfc822DF = new SimpleDateFormat(
46 "EEE, dd MMM yyyy HH:mm:ss Z", Locale.ENGLISH);
47
48 /**
49 * Log for debug output
50 */
51 private static Log log = LogFactory.getLog(DateFormatter.class);
52
53 /**
54 * Converts a date in the changes plugin format (yyyy-MM-dd) to a date in
55 * RSS format (RFC 822).
56 *
57 * @param changesDate
58 * the date to convert
59 * @return the date in the RFC 822 format. An empty String if an exception
60 * occurs.
61 */
62 public static final String convertDate(final String changesDate) {
63 try {
64 return rfc822DF.format(changesSDF.parse(changesDate));
65 } catch (ParseException e) {
66 if (log.isDebugEnabled())
67 log
68 .error("Unable to convert the date [" + changesDate
69 + "]", e);
70 else
71 log.error("Unable to convert the date [" + changesDate + "] : "
72 + e.getMessage());
73 return "";
74 }
75 }
76
77 /**
78 * Test if a String is a date in the changes plugin format (yyyy-MM-dd).
79 *
80 * @param aString
81 * the string to test
82 * @return true if the String can be parsed as a Date in the format
83 * yyyy-MM-dd.
84 */
85 public static final boolean isChangesDate(final String aString) {
86 try {
87 changesSDF.parse(aString);
88 return true;
89 } catch (ParseException e) {
90 return false;
91 }
92 }
93 }