Errai 2.2.0.Final
by Michael Anstis
Hello,
I'd like to move the errai verison from 2.2.0-SNAPSHOT used in
droolsjbpm-parent/pom.xml to 2.2.0.Final.
If your UberFire application inherits from this parent pom you shouldn't
have any problems... but if for some reason you have your own parent you
would need to make similar changes.
Please confirm you don't have issues and I'll do the update next week.
Thanks,
Mike
11 years, 11 months
Fwd: [rules-users] Is it posibble to keep two date formats in drools like 'dd-MMM-yyyy' and 'dd-MMM-yyyy HH:mm'
by Wolfgang Laun
OP's problem statement is indeed valid. Given the wide range of
possible date formats, a generic solution that tolerates the omission
of times so that a single format might be used for both, date+time and
date alone, isn't feasible.
org.drools.core.util.DateUtils contains traces of an idea to have
multiple formats, but this doesn't seem to be supported (or is
absolutely undocumented).
I guess my hack (see code below) is an improvement over the current state.
-W
---------- Forwarded message ----------
From: Wolfgang Laun <wolfgang.laun(a)gmail.com>
Date: Thu, 31 Jan 2013 10:33:18 +0100
Subject: Re: [rules-users] Is it posibble to keep two date formats in
drools like 'dd-MMM-yyyy' and 'dd-MMM-yyyy HH:mm'
To: Rules Users List <rules-users(a)lists.jboss.org>
Not without a hack: replace org.drools.core.util.DateUtils by the
modified code given below. Specify drools.dateformat as a list of date
formats separated by a newline, e.g.:
System.setProperty( "drools.dateformat", "dd-MMM-yyyy HH:mm\ndd-MMM-yyyy" );
Make sure that a more comprehensive format is first, they are tried in
the given order, and a longer String is accepted for a shorter format.
The very first format is used for printing (whenever Drools feels like
doing so). On error, you may see a message such as
Invalid date input format: [1-5-1985] it should follow one of:
[dd-MMM-yyyy HH:mm] or [dd-MMM-yyyy]
And the default format is dd-MMM-yyyy - NOT dd-mmm-yyyy as "Expert"
would have it.
-W
package org.drools.core.util;
import java.text.DateFormat;
import java.text.DateFormatSymbols;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import org.drools.type.DateFormats;
public class DateUtils {
private static final long serialVersionUID = 510l;
private static final String DEFAULT_FORMAT_MASK = "dd-MMM-yyyy";
private static final String DATE_FORMAT_MASK = getDateFormatMask();
private static final String DEFAULT_COUNTRY = Locale.getDefault()
.getCountry();
private static final String DEFINE_COUNTRY = getDefaultContry();
private static final String DEFAULT_LANGUAGE = Locale.getDefault()
.getLanguage();
private static final String DEFINE_LANGUAGE = getDefaultLanguage();
private static ThreadLocal<SimpleDateFormat[]> df = new
ThreadLocal<SimpleDateFormat[]>() {
protected SimpleDateFormat[] initialValue() {
DateFormatSymbols dateSymbol = new DateFormatSymbols(new Locale(
DEFINE_LANGUAGE, DEFINE_COUNTRY));
String[] masks = getDateFormatMask().split( "\\n" );
SimpleDateFormat[] dateFormats = new SimpleDateFormat[masks.length];
for( int i = 0; i < masks.length; i++ ){
dateFormats[i] = new SimpleDateFormat(masks[i], dateSymbol);
}
return dateFormats;
};
};
private static String getDefaultLanguage() {
String fmt = System.getProperty("drools.defaultlanguage");
if (fmt == null) {
fmt = DEFAULT_LANGUAGE;
}
return fmt;
}
private static String getDefaultContry() {
String fmt = System.getProperty("drools.defaultcountry");
if (fmt == null) {
fmt = DEFAULT_COUNTRY;
}
return fmt;
}
/** Use the simple date formatter to read the date from a string */
public static Date parseDate(final String input, DateFormats dateFormats) {
for( SimpleDateFormat dateFormat: df.get() ){
try {
Date date = dateFormat.parse( input );
return date;
} catch (final ParseException e) {
}
}
String valids = DATE_FORMAT_MASK.replace( "\n", "] or [" );
throw new IllegalArgumentException("Invalid date input format: ["
+ input + "] it should follow one of: [" + valids + "]");
}
/** Use the simple date formatter to convert the Date into a String */
public static String format(final Date input) {
return df.get()[0].format( input );
}
/** Converts the right hand side date as appropriate */
public static Date getRightDate(final Object object2, DateFormats
dateFormats) {
if (object2 == null) {
return null;
}
if (object2 instanceof String) {
return parseDate((String) object2, dateFormats);
} else if (object2 instanceof Date) {
return (Date) object2;
} else {
throw new IllegalArgumentException("Unable to convert "
+ object2.getClass() + " to a Date.");
}
}
/** Check for the system property override, if it exists */
public static String getDateFormatMask() {
String fmt = System.getProperty("drools.dateformat");
if (fmt == null) {
fmt = DEFAULT_FORMAT_MASK;
}
return fmt;
}
}
On 31/01/2013, richie <haoruiqian(a)gmail.com> wrote:
> Hi,
>
> The default date format in drools is 'dd-MMM-yyyy', but in the definition
> of
> rule attribute date-effective, it says it contain a date and time
> definition, so if I set date-effective to "30-Jan-2013 08:00", then the
> time
> set in date-effective will be ignored, so I changed the date format to
> 'dd-MMM-yyyy HH:mm', now the effective date works correctly, but then we
> got
> problem here, if user input a date like "30-Jan-2013" the drools will
> failed
> to execute, so must force user to input a date like this "30-Jan-2013
> 00:00", this is not user friendly and the string "00:00" is meaningless.
>
> What I want to know is, if it's possible to keep this two formats both?
>
> Thanks.
>
>
>
> --
> View this message in context:
> http://drools.46999.n3.nabble.com/Is-it-posibble-to-keep-two-date-formats...
> Sent from the Drools: User forum mailing list archive at Nabble.com.
> _______________________________________________
> rules-users mailing list
> rules-users(a)lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
11 years, 11 months