Package net.sf.jasperreports.engine.util

Source Code of net.sf.jasperreports.engine.util.DefaultFormatFactory

/*
* JasperReports - Free Java Reporting Library.
* Copyright (C) 2001 - 2009 Jaspersoft Corporation. All rights reserved.
* http://www.jaspersoft.com
*
* Unless you have purchased a commercial license agreement from Jaspersoft,
* the following license terms apply:
*
* This program is part of JasperReports.
*
* JasperReports 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 3 of the License, or
* (at your option) any later version.
*
* JasperReports 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 JasperReports. If not, see <http://www.gnu.org/licenses/>.
*/
package net.sf.jasperreports.engine.util;

import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Locale;
import java.util.TimeZone;

import net.sf.jasperreports.engine.JRRuntimeException;


/**
* @author Teodor Danciu (teodord@users.sourceforge.net)
* @version $Id: DefaultFormatFactory.java 3034 2009-08-27 11:58:04Z teodord $
*/
public class DefaultFormatFactory implements FormatFactory
{

  /**
   * Used in the date pattern to specify the default style.
   * @see java.text.DateFormat#DEFAULT
   */
  public static final String STANDARD_DATE_FORMAT_DEFAULT = "default";

  /**
   * Used in the date pattern to specify the short style.
   * @see java.text.DateFormat#SHORT
   */
  public static final String STANDARD_DATE_FORMAT_SHORT = "short";

  /**
   * Used in the date pattern to specify the medium style.
   * @see java.text.DateFormat#MEDIUM
   */
  public static final String STANDARD_DATE_FORMAT_MEDIUM = "medium";

  /**
   * Used in the date pattern to specify the long style.
   * @see java.text.DateFormat#LONG
   */
  public static final String STANDARD_DATE_FORMAT_LONG = "long";

  /**
   * Used in the date pattern to specify the full style.
   * @see java.text.DateFormat#FULL
   */
  public static final String STANDARD_DATE_FORMAT_FULL = "full";

  /**
   * Used in the date pattern to specify that the date or time should not be included.
   */
  public static final String STANDARD_DATE_FORMAT_HIDE = "hide";

  /**
   * Used in the date format pattern to separate the date and time styles.
   */
  public static final String STANDARD_DATE_FORMAT_SEPARATOR = ",";


  public DateFormat createDateFormat(String pattern, Locale locale, TimeZone tz)
  {
    int[] dateStyle = null;
    int[] timeStyle = null;
    if (pattern != null && pattern.trim().length() > 0)
    {     
      int sepIdx = pattern.indexOf(STANDARD_DATE_FORMAT_SEPARATOR);
      String dateTok = sepIdx < 0 ? pattern : pattern.substring(0, sepIdx);
      dateStyle = getDateStyle(dateTok);
      if (dateStyle != null)
      {
        if (sepIdx >= 0)
        {
          String timeTok = pattern.substring(sepIdx + STANDARD_DATE_FORMAT_SEPARATOR.length());
          timeStyle = getDateStyle(timeTok);
        }
        else
        {
          timeStyle = dateStyle;
        }
      }
    }
   
    DateFormat format;
    if (dateStyle != null && timeStyle != null)
    {
      format = getDateFormat(dateStyle, timeStyle, locale);
    }
    else
    {     
      if (locale == null)
      {
        format = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
      }
      else
      {
        format = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, locale);
      }
      if (
        pattern != null && pattern.trim().length() > 0
        && format instanceof SimpleDateFormat
        )
      {
        ((SimpleDateFormat) format).applyPattern(pattern);
      }
    }
   
    if (tz != null)
    {
      format.setTimeZone(tz);
    }

    return format;
  }


  protected static int[] getDateStyle(String pattern)
  {
    if (pattern.equalsIgnoreCase(STANDARD_DATE_FORMAT_DEFAULT))
    {
      return new int[]{DateFormat.DEFAULT};
    }
    else if (pattern.equalsIgnoreCase(STANDARD_DATE_FORMAT_SHORT))
    {
      return new int[]{DateFormat.SHORT};
    }
    else if (pattern.equalsIgnoreCase(STANDARD_DATE_FORMAT_MEDIUM))
    {
      return new int[]{DateFormat.MEDIUM};
    }
    else if (pattern.equalsIgnoreCase(STANDARD_DATE_FORMAT_LONG))
    {
      return new int[]{DateFormat.LONG};
    }
    else if (pattern.equalsIgnoreCase(STANDARD_DATE_FORMAT_FULL))
    {
      return new int[]{DateFormat.FULL};
    }
    else if (pattern.equalsIgnoreCase(STANDARD_DATE_FORMAT_HIDE))
    {
      return new int[0];
    }
    else
    {
      return null;
    }
  }

 
  protected static DateFormat getDateFormat(int[] dateStyle, int[] timeStyle, Locale locale)
  {
    if (dateStyle.length == 0)
    {
      if (timeStyle.length == 0)
      {
        return new SimpleDateFormat("");
      }

      return locale == null ?
          DateFormat.getTimeInstance(timeStyle[0]) :
            DateFormat.getTimeInstance(timeStyle[0], locale);
    }

    if (timeStyle.length == 0)
    {
      return locale == null ?
          DateFormat.getDateInstance(dateStyle[0]) :
          DateFormat.getDateInstance(dateStyle[0], locale);
    }

    return locale == null ?
        DateFormat.getDateTimeInstance(dateStyle[0], timeStyle[0]) :
        DateFormat.getDateTimeInstance(dateStyle[0], timeStyle[0], locale);
  }
 
 
  public NumberFormat createNumberFormat(String pattern, Locale locale)
  {
    NumberFormat format = null;
    if (pattern != null && pattern.trim().length() > 0)
    {
      if (locale == null)
      {
        format = NumberFormat.getNumberInstance();
      }
      else
      {
        format = NumberFormat.getNumberInstance(locale);
      }
     
      if (format instanceof DecimalFormat)
      {
        ((DecimalFormat) format).applyPattern(pattern);
      }
    }
    return format;
  }
 
 
  public static FormatFactory createFormatFactory(String formatFactoryClassName)
  {
    FormatFactory formatFactory = null;
   
    if (formatFactoryClassName != null)
    {
      try
      {
        Class formatFactoryClass = JRClassLoader.loadClassForName(formatFactoryClassName)
        formatFactory = (FormatFactory) formatFactoryClass.newInstance();
      }
      catch (ClassNotFoundException e)
      {
        throw new JRRuntimeException("Error loading format factory class : " + formatFactoryClassName, e);
      }
      catch (Exception e)
      {
        throw new JRRuntimeException("Error creating format factory instance : " + formatFactoryClassName, e);
      }
    }
    else
    {
      formatFactory = new DefaultFormatFactory();
    }
   
    return formatFactory;
  }


}
TOP

Related Classes of net.sf.jasperreports.engine.util.DefaultFormatFactory

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.