package org.itscool.commons.request;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * リクエストパラメータから取得したアップロードファイルクラスです
 * @author KANO
 */
public class UploadFile {
    private String path;
    private String savePath;
    private String fileName;
    private byte[] data;
    private int size;
    
    /**
     * クライアントから転送されてきたファイルを保存します
     * @param dir 保存先ディレクトリ
     * @throws IOException
     */
    public void saveData(String dir) throws IOException {
        this.setSavePath(dir);
        String fileName = this.getFileName();
        byte[] data = this.getData();
    
        File f=null;
    
        if(dir==null) {
            f = new File(fileName);
        } else {
            f = new File(dir,fileName);
        }
        
//        FileWriter fw = new FileWriter(f);
//        fw.write(new String(data));
//        fw.close();
        
        FileOutputStream fo = new FileOutputStream(f);
        fo.write(data);
        fo.close();
    }
    
    /**
     * Disposition記述からディレクトリ名を取得します
     * @param disposition マルチパート形式のフォームデータから取得したdisposition記述
     * @return 転送元のディレクトリ名を取得
     */
    public static String getDir(String disposition){
        int idx=disposition.indexOf("filename=");
        int fIdx=disposition.lastIndexOf(System.getProperty("file.separator"));
        if(idx == -1 || fIdx == -1){
            return null;
        }
        String dir=disposition.substring(idx+("filename=").length()+1,fIdx);
        
        return dir;
    }
    
    /**
     * Disposition記述からファイル名を取得します
     * @param disposition マルチパート形式のフォームデータから取得したdisposition記述
     * @return 転送元のファイル名を取得
     */
    public static String getFileName(String disposition){
        int idx=disposition.lastIndexOf(System.getProperty("file.separator"));
        if(idx == -1){
            return null;
        }
        String fileName=disposition.substring(idx+1,disposition.length()-1);
        
        return fileName;
    }
    
	/**
     * 転送データを取得
	 * @return 転送されてきたファイル
	 */
	public byte[] getData() {
		return data;
	}

	/**
     * 転送元ファイルパス取得
	 * @return 転送元ファイルパス
	 */
	public String getPath() {
		return path;
	}

	/**
     * ファイル名取得
	 * @return ファイル名
	 */
	public String getFileName() {
		return fileName;
	}

	/**
     * ファイルサイズ取得
	 * @return ファイルサイズ
	 */
	public int getSize() {
		return size;
	}

	/**
     * 転送データをセット
	 * @param bs 転送データ
	 */
	public void setData(byte[] bs) {
		data = bs;
	}

	/**
     * 転送元ファイルパスをセット
	 * @param string 転送元ファイルパス
	 */
	public void setPath(String string) {
		path = string;
	}

	/**
     * ファイル名をセット
	 * @param string ファイル名
	 */
	public void setFileName(String string) {
		fileName = string;
	}

	/**
     * ファイルサイズをセット
	 * @param i ファイルサイズ
	 */
	public void setSize(int i) {
		size = i;
	}

	/**
     * 保存先パスを取得
	 * @return 保存先パス
	 */
	public String getSavePath() {
		return savePath;
	}

	/**
     * 保存先パスをセット
	 * @param string 保存先パス
	 */
	public void setSavePath(String string) {
		savePath = string;
	}

}
