/*
 * @(#)MapperResource.java
 *
 * RID-X : Mapper
 *
 * @author  Intelligent Technology Inc.
 * @version 1.01 2002/02/15
 *
 * Copyright 2001 Nomura Research Institute, LTD. All rights reserved.
 */

package jp.co.nri.rid.mapper;

import org.w3c.dom.*;
import java.io.File;
import java.util.Vector;

import jp.co.iti.fagot.doc.DocManager;
import jp.co.iti.fagot.util.ZProperties;
import jp.co.iti.fagot.util.ZString;

import jp.co.nri.rid.snapshot.xcopy;



/**
 * Mapper Resource<br>
 * リソースファイルをコピーする
 */
public class MapperResource extends MapperBase {

    /** エラーメッセージ **/
    private static String pr_errorString;

/**
  * コンストラクタ
  *
  */
    public MapperResource() {
        //クリア
        pr_errorString = "";
    }

/*******************************************************************************/

/**
  * イメージファイルをコピーする
  *
  * @param  String      in_file         入力ファイル名
  * @param  String      out_file        出力ファイル名
  * @return void
  */
    public void imageFileCopy(String in_file, String out_file) throws Exception {

        // リソースファイルの拡張子一覧を取得
        ZProperties prop  = DocManager.loadProperty( DocManager.ELEMENT );
        String[] extensions = ZString.tokenize(prop.getProperty("import.resource.extensions"));

        // 検索するﾀｸﾞ名と属性名
        String[] TagName  = { "IMG", "INPUT", "EMBED", "BODY", "TABEL", "TR", "TD"};
        String[] AttrName = { "SRC", "BACKGROUND"};

        //HTML FILE Parser
        Vector img_lst = new Vector();
        Vector tag_lst = new Vector();
        htmlParser(in_file, tag_lst);

        // HTMLタグの配列から、MapItemのsrcTagタグを抜出す
        for (int n = 0; n < tag_lst.size(); n ++ ) {
            // HTMLタグ情報の取得
            TagItem htmlTag = (TagItem)tag_lst.elementAt(n);

            //全て大文字で判断する　大文字に変換
            String tagStringUp  = htmlTag.tagString.toUpperCase();

            // 検索するﾀｸﾞ名 LOOP
            for ( int i = 0 ; i < TagName.length ; i++ ) {
                // ﾀｸﾞ名
                String srcTagUp = "<" + TagName[i];

                // ﾀｸﾞ名の判断
                if (tagStringUp.indexOf(srcTagUp) != -1) {
                    // ﾀｸﾞ名が一致した場合 検索する属性名 LOOP
                    for ( int m = 0 ; m < AttrName.length ; m++ ) {
                        //srcKeyの取得
                        String imgSrc = "";
                        imgSrc = getAttrValue(htmlTag.tagString, AttrName[m]);

                        // imgSrcが設定されていれば登録
                        if (imgSrc != "" && IsExtensions(extensions, imgSrc)){
                            htmlTag.tagName = "Resource";
                            htmlTag.keyName = imgSrc;
                            // 登録されてない場合登録
                            if (-1 == img_lst.indexOf(htmlTag))
                                img_lst.add((htmlTag));
                        }
                    }
                }
            }
        }

        // コピー元のディレクトリを取得
        String buff;
        buff = replaceWebSeparator(in_file);
        String source_dir = buff.substring(0, buff.lastIndexOf("/"));

        // コピー先のディレクトリを取得
        buff = replaceWebSeparator(out_file);
        String dest_dir   = buff.substring(0, buff.lastIndexOf("/"));

        // リソースファイルのコピー ***
        resourceFileCopy(source_dir, dest_dir, img_lst);
    }


/**
  * 指定された拡張子か判断
  *
  * @param  String[]    ext_lst         拡張子のリスト
  * @param  String      filename        ファイル名
  * @return boolean     true / false
  */
    private boolean IsExtensions(String[] ext_lst, String filename) throws Exception {

        boolean ret = false;

        // リソースファイルを拡張子だけにする
        String buff = replaceWebSeparator(filename);
        String extensions = buff.substring(Math.min(buff.lastIndexOf(".")+1, buff.length()));

        // 拡張子がリストに一致するか判断
        for (int n = 0 ; n < ext_lst.length ; n++) {
            if (extensions.equalsIgnoreCase(ext_lst[n])){
                ret = true;
                break;
            }
        }
        return ret;
    }


/**
  * リソースファイルをコピーする
  *
  * @param  String      source_dir      コピー元ディレクトリ
  * @param  String      dest_dir        コピー先ディレクトリ
  * @param  Vector      img_lst         リソースファイルリスト
  * @return void
  */
    private void resourceFileCopy(String source_dir, String dest_dir, Vector img_lst) throws Exception {

        xcopy xc = new xcopy();
        
        for (int n = 0; n < img_lst.size(); n ++ ) {
            // HTMLタグ情報の取得
            TagItem imgTag = (TagItem)img_lst.elementAt(n);

            // ディレクトリが存在しなければ作成
            String dir_buff = replaceWebSeparator(imgTag.keyName);
            String dir  = dir_buff.substring(0, dir_buff.lastIndexOf("/"));
            xc.makeDir(replaceWebSeparator(dest_dir +  File.separator + dir));

            // copy source --> dest
            String source_name = replaceWebSeparator(source_dir + File.separator + imgTag.keyName);
            String dest_name = replaceWebSeparator(dest_dir + File.separator + imgTag.keyName);
            xc.file(source_name, dest_name);
        }
    }


/**
  * エラーメッセージの設定
  *
  * @param  String      errorString     エラーメッセージ
  * @return void
  */
    private void setErrorString(String errorString) {
        pr_errorString = errorString;
    }

/**
  * エラーメッセージの取得
  *
  * @return String      エラーメッセージ
  */
    public String getErrorString() {
        return pr_errorString;
    }

/****************************************************************************************************************/




}