/*
!=======================================================================
!
!  PROGRAM  PHASE-Viewer  (PHASE-Viewer 2014.01 ver.3.3.0)
!
!  Created on 2006/01/11, 16:13
!  AUTHOR(S): KOGA, Junichiro
!  File : BshExecScript.java
!  
!  Contact address :  Phase System Consortium
!                     E-mail: phase_system@nims.go.jp URL https://azuma.nims.go.jp
!
!
!   Since 2002, this program set had been intensively developed as a part of the following 
!  national projects supported by the Ministry of Education, Culture, Sports, Science and
!  Technology (MEXT) of Japan; "Frontier Simulation Software for Industrial Science
!  (FSIS)" from 2002 to 2005, "Revolutionary Simulation Software (RSS21)" from 2006 to
!  2008. "Research and Development of Innovative Simulation Software (RISS)" from 2008
!  to 2013. These projects is lead by the Center for Research on Innovative Simulation 
!  Software (CISS), the Institute of Industrial Science (IIS), the University of Tokyo.
!   Since 2013, this program set has been further developed centering on PHASE System
!  Consortium. 
!   The activity of development of this program set has been supervised by Takahisa Ohno.
!
!=======================================================================
 */

package ciss.phase_viewer.scripting.scriptexecscripts;

import org.apache.log4j.Logger;

import ciss.phase_viewer.scripting.scriptreplace.ScriptKeywordsReplacer;
import ciss.phase_viewer.settings.GlobalProperties;
import ciss.phase_viewer.settings.PropertiesManager;
import ciss.phase_viewer.ssh.hosts.HostInfo;

/**
 * beanshell scriptを実行するスクリプトを作成
 * 
 * @author
 */
public class BshExecScript implements ScriptExecScript {
    private Logger logger = Logger.getLogger(BshExecScript.class.getName());
    private GlobalProperties props = PropertiesManager
            .getGlobalProperties(PropertiesManager.PROPERTIES_PVIEWER);

    /** Creates a new instance of BshExecScript */
    public BshExecScript() {
    }

    public String getScriptExecScriptName(HostInfo hostInfo) {
        if (hostInfo.isLocalHost()
                && System.getProperty("os.name").toLowerCase()
                        .startsWith("windows")) {
            return "script_exec.bat";
        } else {
            return "script_exec.sh";
        }
    }

    public String createScriptExecScript(String[] execScripts, HostInfo hostInfo) {
        if (execScripts == null || execScripts.length == 0) {
            return "";
        }

        if (hostInfo.isLocalHost()
                && System.getProperty("os.name").toLowerCase()
                        .startsWith("windows")) {
            return getBat(execScripts);
        } else {
            return getSh(execScripts);
        }

    }

    private String getBat(String[] execScripts) {
        String[] tmpscripts = new String[execScripts.length];
        for (int i = 0; i < tmpscripts.length; i++) {
            tmpscripts[i] = ScriptKeywordsReplacer.REPLACED_FILE_PREFIX
                    + execScripts[i];
        }

        String ret = "cd __TARGETDIR__" + System.getProperty("line.separator");
        ret += "\"__JAVA__\" -Dpviewer.home=\"__CHASEDIR__\" -jar \"__CHASEJAR__\" interpreter_mode ";
        for (int i = 0; i < tmpscripts.length; i++) {
            ret += " " + tmpscripts[i];
        }
        ret += System.getProperty("line.separator");

        String remove = props.getProperty("scripting_remove_tmpfiles");
        boolean rem = new Boolean(remove).booleanValue();
        if (rem) {
            java.util.Vector unique = ciss.phase_viewer.common.Utils
                    .removeDupli(tmpscripts);
            if (unique != null) {
                for (int i = 0; i < unique.size(); i++) {
                    ret += "del " + (String) unique.get(i)
                            + System.getProperty("line.separator");
                }
            }
            ret += "del script_exec.bat" + System.getProperty("line.separator");
        }
        return ret;
    }

    private String getSh(String[] execScripts) {

        String[] tmpscripts = new String[execScripts.length];
        for (int i = 0; i < tmpscripts.length; i++) {
            tmpscripts[i] = ScriptKeywordsReplacer.REPLACED_FILE_PREFIX
                    + execScripts[i];
        }

        String ret = "#!/bin/sh\n";
        ret += "cd __TARGETDIR__\n";
        ret += "\"__JAVA__\" -Dpviewer.home=\"__CHASEDIR__\" -jar \"__CHASEJAR__\" interpreter_mode ";
        for (int i = 0; i < tmpscripts.length; i++) {
            ret += " " + tmpscripts[i];
        }
        ret += "\n";

        String remove = props.getProperty("scripting_remove_tmpfiles");
        boolean rem = new Boolean(remove).booleanValue();
        if (rem) {
            java.util.Vector unique = ciss.phase_viewer.common.Utils
                    .removeDupli(tmpscripts);
            if (unique != null) {
                for (int i = 0; i < unique.size(); i++) {
                    ret += "rm -f ./" + (String) unique.get(i) + "\n";
                }
            }
            ret += "rm -f ./script_exec.sh\n";
        }

        return ret;
    }

    public String getScriptExecScriptExecString(String scriptExecScript,
            HostInfo hostInfo) {
        if (hostInfo.isLocalHost()
                && System.getProperty("os.name").toLowerCase()
                        .startsWith("windows")) {
            return "\"" + scriptExecScript + "\">Log";
            // return "\""+scriptExecScript+"\"";
        } else {
            return scriptExecScript;
        }
    }

}
