Package org.drools.core.type

Source Code of org.drools.core.type.DateFormatsImpl

/*
* Copyright 2010 JBoss Inc
*
* Licensed 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.drools.core.type;

import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;


public class DateFormatsImpl
    implements
    DateFormats,
    Externalizable {

    private static final long       serialVersionUID = 510l;

    private Map<String, DateFormat> map;
   
    private static ThreadLocal<Map<String, DateFormat>> localMap = new ThreadLocal<Map<String, DateFormat>>() {
        protected Map<String, DateFormat> initialValue() {;
            return new HashMap<String, DateFormat>();
        };
    };
   
    /**
     * This is here for any static classes, such as MVEL DataConverters, to access.
     * It is expected this will be set, before access.
     */
    public static final ThreadLocal<DateFormats> DATE_FORMATS = new ThreadLocal<DateFormats>() {

    };

    public DateFormatsImpl() {
        this.map = new ConcurrentHashMap<String, DateFormat>();
    }

    public void readExternal(ObjectInput in) throws IOException,
                                            ClassNotFoundException {
        map = (Map) in.readObject();
    }

    public void writeExternal(ObjectOutput out) throws IOException {
        out.writeObject( map );
    }

    public DateFormat get(String identifier) {
        return this.map.get( identifier );
    }

    public void set(String identifier,
                    DateFormat calendar) {
        this.map.put( identifier,
                      calendar );
    }

    public Date parse(String identifier,
                      String date) {
       
        // DateFormat's are not thread safe, so always keep a local thread copy
        DateFormat df = this.localMap.get().get( identifier );
        if ( df == null ) {
            df = this.map.get( identifier );
            if ( df == null ) {
                throw new RuntimeException( "Unable to find DateFormat for id '" + identifier + "'" );
            }
            this.localMap.get().put( identifier, ( DateFormat ) df.clone() );
        }
       
        try {
            return df.parse( date );
        } catch ( ParseException e ) {
            throw new IllegalArgumentException("Invalid date input format: ["
                                               + date + "] using the DateFormat: [" + df + "]");
        }
    }

}
TOP

Related Classes of org.drools.core.type.DateFormatsImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.