import java.lang.reflect.Constructor;
import java.text.Format;
import java.util.Date;

/**
 * 汎用フォーマットクラスの雛形
 */
public class FormatUtil {

	public static String format(Object data, String pattern){

		String format;
		Class clazz = data.getClass();

		if(Date.class.isAssignableFrom(clazz)){
			format = "java.text.SimpleDateFormat";
		}else if(Integer.class.isAssignableFrom(clazz)){
			format = "java.text.DecimalFormat";

			//対象を増やして設定ファイルなどにする？

		}else{
			System.out.println("invalid date type : " + clazz);
			return "";
		}

		return format(format, data, pattern);
	}



	public static String format(String className, Object data, String pattern){

		if(data == null){
			return "";
		}

		Class clazz;		
		try {
			clazz = Class.forName(className);

			if(!Format.class.isAssignableFrom(clazz)){
				System.out.println("not Format class : " + className);
				return "";
			}

		} catch (ClassNotFoundException e) {
			System.out.println(e.toString());
			return "";
		}



		Format format;
		try {
			if(pattern != null){
				Constructor constructor = clazz.getConstructor(new Class[]{String.class});
				format =(Format) constructor.newInstance(new Object[]{ pattern });
			}else{
				format = (Format)clazz.newInstance();
			}
			
		} catch(Exception e){
			System.out.println(e.toString());			
			return "";
		}

		return format(format, data);
	}


	public static String format(Format format, Object data){

		return format.format(data);
	}


	public static void main(String[] args){
		
		String text = format(new Date(), "yyyy/M/d ");
		System.out.println(text);

		text = format(new Integer(123), "000000");
		System.out.println(text);

	}
}
