aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Tstamp.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Tstamp.java')
-rw-r--r--framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Tstamp.java341
1 files changed, 341 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Tstamp.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Tstamp.java
new file mode 100644
index 00000000..805427ab
--- /dev/null
+++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Tstamp.java
@@ -0,0 +1,341 @@
+/*
+ * 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.tools.ant.taskdefs;
+
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.StringTokenizer;
+import java.util.TimeZone;
+import java.util.Vector;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Location;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.types.EnumeratedAttribute;
+
+/**
+ * Sets properties to the current time, or offsets from the current time.
+ * The default properties are TSTAMP, DSTAMP and TODAY;
+ *
+ * @since Ant 1.1
+ * @ant.task category="utility"
+ */
+public class Tstamp extends Task {
+
+ private Vector customFormats = new Vector();
+ private String prefix = "";
+
+ /**
+ * Set a prefix for the properties. If the prefix does not end with a "."
+ * one is automatically added.
+ * @param prefix the prefix to use.
+ * @since Ant 1.5
+ */
+ public void setPrefix(String prefix) {
+ this.prefix = prefix;
+ if (!this.prefix.endsWith(".")) {
+ this.prefix += ".";
+ }
+ }
+
+ /**
+ * create the timestamps. Custom ones are done before
+ * the standard ones, to get their retaliation in early.
+ * @throws BuildException on error.
+ */
+ public void execute() throws BuildException {
+ try {
+ Date d = new Date();
+
+ Enumeration i = customFormats.elements();
+ while (i.hasMoreElements()) {
+ CustomFormat cts = (CustomFormat) i.nextElement();
+ cts.execute(getProject(), d, getLocation());
+ }
+
+ SimpleDateFormat dstamp = new SimpleDateFormat ("yyyyMMdd");
+ setProperty("DSTAMP", dstamp.format(d));
+
+ SimpleDateFormat tstamp = new SimpleDateFormat ("HHmm");
+ setProperty("TSTAMP", tstamp.format(d));
+
+ SimpleDateFormat today
+ = new SimpleDateFormat ("MMMM d yyyy", Locale.US);
+ setProperty("TODAY", today.format(d));
+
+ } catch (Exception e) {
+ throw new BuildException(e);
+ }
+ }
+
+ /**
+ * create a custom format with the current prefix.
+ * @return a ready to fill-in format
+ */
+ public CustomFormat createFormat() {
+ CustomFormat cts = new CustomFormat();
+ customFormats.addElement(cts);
+ return cts;
+ }
+
+ /**
+ * helper that encapsulates prefix logic and property setting
+ * policy (i.e. we use setNewProperty instead of setProperty).
+ */
+ private void setProperty(String name, String value) {
+ getProject().setNewProperty(prefix + name, value);
+ }
+
+ /**
+ * This nested element that allows a property to be set
+ * to the current date and time in a given format.
+ * The date/time patterns are as defined in the
+ * Java SimpleDateFormat class.
+ * The format element also allows offsets to be applied to
+ * the time to generate different time values.
+ * @todo consider refactoring out into a re-usable element.
+ */
+ public class CustomFormat {
+ private TimeZone timeZone;
+ private String propertyName;
+ private String pattern;
+ private String language;
+ private String country;
+ private String variant;
+ private int offset = 0;
+ private int field = Calendar.DATE;
+
+ /**
+ * Create a format
+ */
+ public CustomFormat() {
+ }
+
+ /**
+ * The property to receive the date/time string in the given pattern
+ * @param propertyName the name of the property.
+ */
+ public void setProperty(String propertyName) {
+ this.propertyName = propertyName;
+ }
+
+ /**
+ * The date/time pattern to be used. The values are as
+ * defined by the Java SimpleDateFormat class.
+ * @param pattern the pattern to use.
+ * @see java.text.SimpleDateFormat
+ */
+ public void setPattern(String pattern) {
+ this.pattern = pattern;
+ }
+
+ /**
+ * The locale used to create date/time string.
+ * The general form is "language, country, variant" but
+ * either variant or variant and country may be omitted.
+ * For more information please refer to documentation
+ * for the java.util.Locale class.
+ * @param locale the locale to use.
+ * @see java.util.Locale
+ */
+ public void setLocale(String locale) {
+ StringTokenizer st = new StringTokenizer(locale, " \t\n\r\f,");
+ try {
+ language = st.nextToken();
+ if (st.hasMoreElements()) {
+ country = st.nextToken();
+ if (st.hasMoreElements()) {
+ variant = st.nextToken();
+ if (st.hasMoreElements()) {
+ throw new BuildException("bad locale format",
+ getLocation());
+ }
+ }
+ } else {
+ country = "";
+ }
+ } catch (NoSuchElementException e) {
+ throw new BuildException("bad locale format", e,
+ getLocation());
+ }
+ }
+
+ /**
+ * The timezone to use for displaying time.
+ * The values are as defined by the Java TimeZone class.
+ * @param id the timezone value.
+ * @see java.util.TimeZone
+ */
+ public void setTimezone(String id) {
+ timeZone = TimeZone.getTimeZone(id);
+ }
+
+ /**
+ * The numeric offset to the current time.
+ * @param offset the offset to use.
+ */
+ public void setOffset(int offset) {
+ this.offset = offset;
+ }
+
+ /**
+ * Set the unit type (using String).
+ * @param unit the unit to use.
+ * @deprecated since 1.5.x.
+ * setUnit(String) is deprecated and is replaced with
+ * setUnit(Tstamp.Unit) to make Ant's
+ * Introspection mechanism do the work and also to
+ * encapsulate operations on the unit in its own
+ * class.
+ */
+ public void setUnit(String unit) {
+ log("DEPRECATED - The setUnit(String) method has been deprecated."
+ + " Use setUnit(Tstamp.Unit) instead.");
+ Unit u = new Unit();
+ u.setValue(unit);
+ field = u.getCalendarField();
+ }
+
+ /**
+ * The unit of the offset to be applied to the current time.
+ * Valid Values are
+ * <ul>
+ * <li>millisecond</li>
+ * <li>second</li>
+ * <li>minute</li>
+ * <li>hour</li>
+ * <li>day</li>
+ * <li>week</li>
+ * <li>month</li>
+ * <li>year</li>
+ * </ul>
+ * The default unit is day.
+ * @param unit the unit to use.
+ */
+ public void setUnit(Unit unit) {
+ field = unit.getCalendarField();
+ }
+
+ /**
+ * validate parameter and execute the format.
+ * @param project project to set property in.
+ * @param date date to use as a starting point.
+ * @param location line in file (for errors)
+ */
+ public void execute(Project project, Date date, Location location) {
+ if (propertyName == null) {
+ throw new BuildException("property attribute must be provided",
+ location);
+ }
+
+ if (pattern == null) {
+ throw new BuildException("pattern attribute must be provided",
+ location);
+ }
+
+ SimpleDateFormat sdf;
+ if (language == null) {
+ sdf = new SimpleDateFormat(pattern);
+ } else if (variant == null) {
+ sdf = new SimpleDateFormat(pattern,
+ new Locale(language, country));
+ } else {
+ sdf = new SimpleDateFormat(pattern,
+ new Locale(language, country,
+ variant));
+ }
+ if (offset != 0) {
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(date);
+ calendar.add(field, offset);
+ date = calendar.getTime();
+ }
+ if (timeZone != null) {
+ sdf.setTimeZone(timeZone);
+ }
+ Tstamp.this.setProperty(propertyName, sdf.format(date));
+ }
+ }
+
+ /**
+ * set of valid units to use for time offsets.
+ */
+ public static class Unit extends EnumeratedAttribute {
+
+ private static final String MILLISECOND = "millisecond";
+ private static final String SECOND = "second";
+ private static final String MINUTE = "minute";
+ private static final String HOUR = "hour";
+ private static final String DAY = "day";
+ private static final String WEEK = "week";
+ private static final String MONTH = "month";
+ private static final String YEAR = "year";
+
+ private static final String[] UNITS = {
+ MILLISECOND,
+ SECOND,
+ MINUTE,
+ HOUR,
+ DAY,
+ WEEK,
+ MONTH,
+ YEAR
+ };
+
+ private Map calendarFields = new HashMap();
+
+ /** Constructor for Unit enumerated type. */
+ public Unit() {
+ calendarFields.put(MILLISECOND,
+ new Integer(Calendar.MILLISECOND));
+ calendarFields.put(SECOND, new Integer(Calendar.SECOND));
+ calendarFields.put(MINUTE, new Integer(Calendar.MINUTE));
+ calendarFields.put(HOUR, new Integer(Calendar.HOUR_OF_DAY));
+ calendarFields.put(DAY, new Integer(Calendar.DATE));
+ calendarFields.put(WEEK, new Integer(Calendar.WEEK_OF_YEAR));
+ calendarFields.put(MONTH, new Integer(Calendar.MONTH));
+ calendarFields.put(YEAR, new Integer(Calendar.YEAR));
+ }
+
+ /**
+ * Convert the value to int unit value.
+ * @return an int value.
+ */
+ public int getCalendarField() {
+ String key = getValue().toLowerCase(Locale.ENGLISH);
+ Integer i = (Integer) calendarFields.get(key);
+ return i.intValue();
+ }
+
+ /**
+ * Get the valid values.
+ * @return the value values.
+ */
+ public String[] getValues() {
+ return UNITS;
+ }
+ }
+}