5 Replies Latest reply on Apr 8, 2006 6:35 AM by Dimitris Andreadis

    JBAS-2774 - Date Property Editor

    Adrian Brock Master

      The user is correct that Date.toString() returns the date in "English".

      The user's solution looks like a kludge on top of another kludge.

      The whole basis of the DateEditor looks flawed to me.
      It wants to treat the Date as a piece of Text.

      A more "normal" editor would looks like this, where it converts the
      String to a Date during setAsText() and it uses DateFormat.format()
      to format using the current Locale.

      /*
       * JBoss, Home of Professional Open Source
       * Copyright 2005, JBoss Inc., and individual contributors as indicated
       * by the @authors tag. See the copyright.txt in the distribution for a
       * full listing of individual contributors.
       *
       * This is free software; you can redistribute it and/or modify it
       * under the terms of the GNU Lesser General Public License as
       * published by the Free Software Foundation; either version 2.1 of
       * the License, or (at your option) any later version.
       *
       * This software is distributed in the hope that it will be useful,
       * but WITHOUT ANY WARRANTY; without even the implied warranty of
       * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
       * Lesser General Public License for more details.
       *
       * You should have received a copy of the GNU Lesser General Public
       * License along with this software; if not, write to the Free
       * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
       * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
       */
      package org.jboss.util.propertyeditor;
      
      import java.beans.PropertyEditorSupport;
      import java.security.AccessController;
      import java.security.PrivilegedAction;
      import java.text.DateFormat;
      import java.text.ParseException;
      import java.text.SimpleDateFormat;
      import java.util.Date;
      
      import org.jboss.util.NestedRuntimeException;
      
      /**
       * A property editor for {@link java.util.Date}.
       *
       * @version <tt>$Revision: 1.8 $</tt>
       * @author <a href="mailto:jason@planet57.com">Jason Dillon</a>
       * @author <a href="mailto:d_jencks@users.sourceforge.net">David Jencks</a>
       * @author Scott.Stark@jboss.org
       */
      public class DateEditor2 extends PropertyEditorSupport
      {
       static DateFormat[] formats;
      
       /** The text version of the date */
       private String text;
      
       static
       {
       PrivilegedAction action = new PrivilegedAction()
       {
       public Object run()
       {
       String defaultFormat = System.getProperty("org.jboss.util.propertyeditor.DateEditor.format",
       "MMM d, yyyy");
       formats = new DateFormat[]
       {
       new SimpleDateFormat(defaultFormat),
       // Tue Jan 04 00:00:00 PST 2005
       new SimpleDateFormat("EEE MMM d HH:mm:ss z yyyy"),
       // Wed, 4 Jul 2001 12:08:56 -0700
       new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z")
       };
       return null;
       }
       };
       AccessController.doPrivileged(action);
       }
      
       public void setAsText(String text)
       {
       int n = 0;
       ParseException ex = null;
       do
       {
       try
       {
       DateFormat df = formats[n];
       Date date = df.parse(text);
       this.text = text;
       setValue(date);
       return;
       }
       catch (ParseException e)
       {
       ex = e;
       }
       n ++;
       } while( n < formats.length );
       throw new NestedRuntimeException(ex);
       }
      
       public void setValue(Object value)
       {
       text = null;
       super.setValue(value);
       }
      
       public String getAsText()
       {
       if (text != null)
       return text;
      
       DateFormat df = formats[2];
       Date date = (Date) getValue();
       return df.format(date);
       }
      }