Package loxia.support.excel

Source Code of loxia.support.excel.ExcelKit

package loxia.support.excel;

import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import java.util.Set;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import loxia.support.excel.exception.ExcelManipulateException;

public class ExcelKit {
  public static final String DEFAULT_MESSAGE = "excelkit_message_default";
 
  public static final String READ_STATUS_PREFIX = "readStatus";
  public static final String WRITE_STATUS_PREFIX = "writeStatus";
  public static final String EXCEL_EXCEPTION_PREFIX = "emException";
 
  public static final String XLS = "xls";
  public static final String XLSX = "xlsx";
 
  public static final String DATA_TYPE_INTEGER = "integer";
  public static final String DATA_TYPE_LONG = "long";
  public static final String DATA_TYPE_BIGDECIMAL = "bigdecimal";
  public static final String DATA_TYPE_STRING = "string";
  public static final String DATA_TYPE_DATE = "date";
  public static final String DATA_TYPE_BOOLEAN = "boolean";
   
  private Set<Locale> defaultMissResources = new HashSet<Locale>();
  private Set<Locale> customMissResources = new HashSet<Locale>();
  private Map<MessageFormatKey,MessageFormat> mfMap = new HashMap<MessageFormatKey, MessageFormat>();
 
  private static ExcelKit instance;
  private ExcelKit(){
   
  };
 
  public Workbook createWorkbook(){
    return createWorkbook(null);
  }
 
  public Workbook createWorkbook(String type){
    if(XLSX.equals(type) || type == null){
      return new XSSFWorkbook();
    }else if(XLS.equals(type)){
      return new HSSFWorkbook();
    }else
      throw new IllegalArgumentException();
  }
 
  public static ExcelKit getInstance(){
    if(instance == null)
      instance = new ExcelKit();
    return instance;
  }
 
  private String customResource;
  public void setCustomResource(String resourceName){
    this.customResource = resourceName;
  }
 
  public String getReadStatusMessages(ExcelManipulateException e, Locale locale){
    return getMessage(EXCEL_EXCEPTION_PREFIX + "." + e.getErrorCode(), locale, e.getArgs());
  }
 
  public List<String> getReadStatusMessages(ReadStatus readStatus, Locale locale){
    List<String> result = new ArrayList<String>();
    result.add(getMessage(READ_STATUS_PREFIX + "." + readStatus.getStatus(), locale, null));
    if(readStatus.getStatus() != ReadStatus.STATUS_SUCCESS){
      if(readStatus.getStatus() == ReadStatus.STATUS_DATA_COLLECTION_ERROR){
        for(Exception e : readStatus.getExceptions()){
          if(e instanceof ExcelManipulateException){
            ExcelManipulateException eme = (ExcelManipulateException)e;
            result.add(getMessage(EXCEL_EXCEPTION_PREFIX + "." + eme.getErrorCode(),
                locale, eme.getArgs()));
          }
        }
      }else
        result.add(readStatus.getMessage());
    }
    return result;
  }
 
  public List<String> getWriteStatusMessages(WriteStatus writeStatus, Locale locale){
    List<String> result = new ArrayList<String>();
    result.add(getMessage(WRITE_STATUS_PREFIX + "." + writeStatus.getStatus(), locale, null));
    if(writeStatus.getStatus() != ReadStatus.STATUS_SUCCESS){
      result.add(writeStatus.getMessage());
    }
    return result;
  }
 
  public String getMessage(String key, Locale locale, Object[] params){
    ResourceBundle bundle = getCustomBundle(locale);
    String value = null;
    if(bundle != null){
      try{
        value = bundle.getString(key);
      }catch(MissingResourceException e){}
    }
    if(value == null){
      bundle = getDefaultBundle(locale);
      if(bundle != null){
        try{
          value = bundle.getString(key);
        }catch(MissingResourceException e){}
      }
    }
    if(value == null) return key;
    MessageFormatKey mkey = new MessageFormatKey(value, locale);
    MessageFormat format = mfMap.get(mkey);
    if(format == null){
      format = new MessageFormat(value,locale);
      mfMap.put(mkey, format);
    }
    return format.format(params);
  }
 
  public ResourceBundle getDefaultBundle(Locale locale){
    synchronized (defaultMissResources) {
      try {
        if(!defaultMissResources.contains(locale)){
          return ResourceBundle.getBundle(DEFAULT_MESSAGE, locale,
              Thread.currentThread().getContextClassLoader());
        }
      } catch (MissingResourceException e) {
        defaultMissResources.add(locale);       
      }
    }
    return null;
  }
 
  public ResourceBundle getCustomBundle(Locale locale){
    synchronized (customMissResources) {
      if(customResource == null)
        return null;
      try {
        if(!customMissResources.contains(locale)){
          return ResourceBundle.getBundle(customResource, locale,
              Thread.currentThread().getContextClassLoader());
        }
      } catch (MissingResourceException e) {
        customMissResources.add(locale);       
      }
    }
    return null;
  }
 
  static class MessageFormatKey {
        String pattern;
        Locale locale;

        MessageFormatKey(String pattern, Locale locale) {
            this.pattern = pattern;
            this.locale = locale;
        }

        public boolean equals(Object o) {
            if (this == o) return true;
            if (!(o instanceof MessageFormatKey)) return false;

            final MessageFormatKey messageFormatKey = (MessageFormatKey) o;

            if (locale != null ? !locale.equals(messageFormatKey.locale) : messageFormatKey.locale != null)
                return false;
            if (pattern != null ? !pattern.equals(messageFormatKey.pattern) : messageFormatKey.pattern != null)
                return false;

            return true;
        }

        public int hashCode() {
            int result;
            result = (pattern != null ? pattern.hashCode() : 0);
            result = 29 * result + (locale != null ? locale.hashCode() : 0);
            return result;
        }
    }
}
TOP

Related Classes of loxia.support.excel.ExcelKit

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.