001: package org.tigris.scarab.attribute;
002:
003: import java.text.ParseException;
004: import java.text.SimpleDateFormat;
005: import java.util.Collection;
006: import java.util.Iterator;
007:
008: import org.apache.torque.TorqueException;
009: import org.tigris.scarab.om.AttributeValue;
010:
011: /* ================================================================
012: * Copyright (c) 2000-2002 CollabNet. All rights reserved.
013: *
014: * Redistribution and use in source and binary forms, with or without
015: * modification, are permitted provided that the following conditions are
016: * met:
017: *
018: * 1. Redistributions of source code must retain the above copyright
019: * notice, this list of conditions and the following disclaimer.
020: *
021: * 2. Redistributions in binary form must reproduce the above copyright
022: * notice, this list of conditions and the following disclaimer in the
023: * documentation and/or other materials provided with the distribution.
024: *
025: * 3. The end-user documentation included with the redistribution, if
026: * any, must include the following acknowlegement: "This product includes
027: * software developed by Collab.Net <http://www.Collab.Net/>."
028: * Alternately, this acknowlegement may appear in the software itself, if
029: * and wherever such third-party acknowlegements normally appear.
030: *
031: * 4. The hosted project names must not be used to endorse or promote
032: * products derived from this software without prior written
033: * permission. For written permission, please contact info@collab.net.
034: *
035: * 5. Products derived from this software may not use the "Tigris" or
036: * "Scarab" names nor may "Tigris" or "Scarab" appear in their names without
037: * prior written permission of Collab.Net.
038: *
039: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
040: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
041: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
042: * IN NO EVENT SHALL COLLAB.NET OR ITS CONTRIBUTORS BE LIABLE FOR ANY
043: * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
044: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
045: * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
046: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
047: * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
048: * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
049: * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
050: *
051: * ====================================================================
052: *
053: * This software consists of voluntary contributions made by many
054: * individuals on behalf of Collab.Net.
055: */
056:
057: /**
058: *
059: * @author <a href="mailto:fedor.karpelevitch@home.com">Fedor</a>
060: * @version $Revision: 9902 $ $Date: 2005-10-25 22:54:19 +0200 (Tue, 25 Oct 2005) $
061: */
062: public class DateAttribute extends StringAttribute {
063: private static SimpleDateFormat internalFormat = new SimpleDateFormat(
064: "yyyyMMddHHmmssSS");
065:
066: /**
067: * Receives the value in yyyyMMddHHmmssSS format and returns it
068: * formatted according to the mask parameter.
069: * If the value is not parseable, it will be returned unchanged.
070: * @param value
071: * @param mask
072: * @return
073: */
074: public static String dateFormat(String value, String mask) {
075: SimpleDateFormat sdf = new SimpleDateFormat(mask);
076: String val = value;
077: try {
078: if (val == null)
079: val = "";
080: else
081: val = sdf.format(internalFormat.parse(value));
082: } catch (ParseException e) {
083: // Will return the same value
084: }
085: return val;
086: }
087:
088: /**
089: * Receives the value in the format defined by 'mask' and
090: * returns it formatted in internal (yyyyMMddHHmmssSS) format.
091: * If the value is not parseable, it will be returned unchanged.
092: * @param value
093: * @param mask
094: * @return
095: */
096: public static String internalDateFormat(String value, String mask) {
097: SimpleDateFormat sdf = new SimpleDateFormat(mask);
098: String val = value;
099: try {
100: if (val == null)
101: val = "";
102: else
103: val = internalFormat.format(sdf.parse(value));
104: } catch (ParseException e) {
105: // Will return the same value
106: }
107: return val;
108: }
109:
110: /**
111: * Utility method that will convert every DateAttribute in a list from the user's
112: * locale format to the internal (yyyyMMddHHmmssSS) format.
113: * @param issue
114: * @param mask
115: * @throws TorqueException
116: */
117: public static void convertDateAttributes(
118: Collection attributeValues, String mask)
119: throws TorqueException {
120: for (Iterator iter = attributeValues.iterator(); iter.hasNext();) {
121: AttributeValue av = (AttributeValue) iter.next();
122: if (av instanceof DateAttribute) {
123: av.setValue(internalDateFormat(av.getValue(), mask));
124: }
125: }
126: }
127: }
|