#!/bin/sh
# ---------------------------------------------- #

# Installer directory
INST_HOME=/home/smxd/ver-3_3_0
export INST_HOME

##### Function 呼び出し ##########################
. ${INST_HOME}/function.sh

##### param ######################################
VER_RET=0   # 現在の Version を取得

##### Function ###################################
#----- バージョンチェック -----------------------#
version_check(){    # args : check_type
  ${INST_HOME}/version_check.sh "$1"
  VER_RET=$?
  if [ ${VER_RET} -eq 1 ] ; then
    # 中断
    quit "install"
  fi
}

#----- サービス状態チェック ---------------------#
service_check(){
  ${INST_HOME}/service_check.sh "install"
  if [ $? -eq 1 ] ; then
    # 中断
    quit "install"
  fi
}

#----- モジュールインストール実行 -------------------#
deploy(){
  ${INST_HOME}/deploy.sh
  if [ $? -eq 1 ] ; then
    # モジュール戻し
    back_module
    # ISB プロミスキャス設定戻し
    isbpromisc_back
    # 中断
    quit "install"
  fi
}

#----- jsch パッチインストール実行 ------#
jsch_patch_install(){
  ${INST_HOME}/jsch_patch_install.sh
  if [ $? -eq 1 ] ; then
    # EasySetup モジュール戻し
    jsch_restore "error"
    # ファイルの書き戻し
    reverse_param ${1}
    # モジュール戻し
    back_module
    # ISB プロミスキャス設定戻し
    isbpromisc_back
    # 中断
    quit "install"
  fi
}

#----- パッチミドルウェア(rpm)インストール実行 --#
rpm_install(){
  ${INST_HOME}/rpm_install.sh
  if [ $? -eq 1 ] ; then
    # 中断
    quit "install"
  fi
}

#----- パラメータ設定 --------------------------------------#
parse_param(){
  ## param $1=Version , $2=1st_web.xml_keepValue , $3=2nd_web.xml_keepValue
  ${INST_HOME}/parse_param.sh ${1} ${2} ${3}
  if [ $? -eq 1 ] ; then
    # ファイルの書き戻し
    reverse_param ${1}
    # モジュール戻し
    back_module
    # ISB プロミスキャス設定戻し
    isbpromisc_back
    # 中断
    quit "install"
  fi
}

#----- SMXVer-3.2.1 cluster 対応 cron のパラメータ処理 -----#
cron_param(){
  ${INST_HOME}/cron_param.sh
  if [ $? -eq 1 ] ; then
    # EasySetup モジュール戻し
    jsch_restore "error"
    # ファイルの書き戻し
    reverse_param ${1}
    # モジュール戻し
    back_module
    # ISB プロミスキャス設定戻し
    isbpromisc_back
    # 中断
    quit "install"
  fi
}

#----- 不要ファイル削除 -----#
delete(){
  # param Version
  ${INST_HOME}/delete.sh ${1}
  if [ $? -eq 1 ] ; then
    # モジュール戻し
    back_module
    # ISB プロミスキャス設定戻し
    isbpromisc_back
    # 中断
    quit "install"
  fi
}

#----- DB backup 実行 ---------------------------#
db_backup(){
  ${INST_HOME}/db_backup.sh
  if [ $? -eq 1 ] ; then
    # EasySetup モジュール戻し
    jsch_restore "error"
    # ファイルの書き戻し
    reverse_param ${1}
    # モジュール戻し
    back_module
    # ISB プロミスキャス設定戻し
    isbpromisc_back
    # 中断
    quit "install"
  fi
}

#----- JSP コンパイルファイル削除 --------------#
jsp_compile_delete(){
  write_log "JSP コンパイル削除"
  $rm -rf ${ISB_JSP}/* > /dev/null 2>&1
  if [ $? -ne 0 ] ; then
    msg_err "${SECUREMATRIX} コンパイルファイル削除に失敗しました。" \
            "処理を中断します。" \
            " " \
            "<!> 予期せぬエラーです。サポートに連絡してください。"
    arize_err "dmy" "${SECUREMATRIX} コンパイルファイル削除に失敗しました。"
    # EasySetup モジュール戻し
    jsch_restore "error"
    # ファイルの書き戻し
    reverse_param ${1}
    # モジュール戻し
    back_module
    # ISB プロミスキャス設定戻し
    isbpromisc_back
    # 中断
    quit "install"
  fi
}

#----- Auth Server かチェックする -------------------------#
server_check(){
  ${INST_HOME}/server_check.sh "ISB"
  if [ $? -eq 1 ] ; then
    # 中断
    quit "install"
  fi
}

#----- 最終処理 -------------------------#
finalize(){
  ${INST_HOME}/finalize.sh "install"
  if [ $? -eq 1 ] ; then
    # 中断 ※ ここまで来てからのエラーでは戻しを発生させない
    quit "install"
  fi
}

##### Main routine ###############################

# 初期処理
initialize

# root権限チェック
check_root


# 更新範囲の生成
SCOPE_VER_VIEW_STR=`get_patch_scope 'アップデート可能バージョン：' ''`
#debug#echo "[$SCOPE_VER_VIEW_STR]"

# インストールの開始
write_log "--- ${SECUREMATRIX} Update START [ to Ver-$TO_VER ] ---"

# Server チェック
server_check "install"

# バージョンチェック
version_check "install"

IFS=' '

CLEAR
msg_info  "${SECUREMATRIX} のアップデートを開始します。" \
          " " \
          "アップデート展開後バージョン　：Ver-$TO_VER" \
          " " \
          "${SCOPE_VER_VIEW_STR}" \
          " " \
          "対象サーバ：ISBサーバ" \
          " " \
          "アップデートを開始してよろしいですか？"

response="hoge"
while [ ! -z "$response" -a "$response" != y  -a "$response" != n ]
do
  echo_sp "開始する [y]es / 中断する (n)o : "
  read response
done

if [ -z "$response" -o "$response" = y ]; then
  
  # 稼動状態チェック
  service_check

  # パッチミドルウェア(rpm)インストール
  # Ver-3.2.0 の場合のみ実施
  if [ $VER_RET -eq 20 ] ; then
    rpm_install
  fi

  # Ver-3.3 専用 ISB プロミスキャスモード設定
  isbpromisc

  # DB バックアップ用のコマンドを退避
  file_swap

  # モジュール配布
  deploy
  
  # 不要モジュールの削除
  delete $VER_RET

  # プロパティの不要行削除(parse_param では出来ない)
  #props_line_delete ${GSB_PROPERTIES_FILE} "/servlet/#Check,\\"
  
  #----- 汎用性のない Ver-3.3.0 専用特殊処理 -----#
  #----- web.xml 等の行削除に使用 (ADMIN不要)-----#
  session_timeout_keep "$ISB_WEBXML"
  ISB_STK=$STK

  # パラメータ設定  replace.xml に値保持変数を記載(ex.<VALUE>${ADMIN_STK}</VALUE>)
  # parse_param $VER_RET "値保持１" "値保持２"
  parse_param $VER_RET "${ISB_STK}"
  
  ## SMXVer-3.2.1 cluster 対応 cron のパラメータ処理
  # multi_gsb_set.sh の配布していない件もあるので、全バージョン対象
  cron_param $VER_RET

  # jsch パッチインストール
  jsch_patch_install $VER_RET

  # JSP コンパイルファイル削除
  jsp_compile_delete $VER_RET

  # DB backup 実行
  db_backup $VER_RET

  # 最終処理
  finalize

  CLEAR
  msg_info  "${SECUREMATRIX} のアップデートが完了しました。" \
            " " \
            "${SECUREMATRIX} を起動してください。" \
            "（起動コマンドは、root権限で実行してください。）" \
            " " \
            "起動対象：ISBサーバ [ $ISB_START ]" \
            "　　　　　EasySetup [ $EZS_START ]" \
            "　　　　　Cron      [ $CRON_START ]"

elif [ "$response" = n ]; then
  quit "install"
fi
