<%--
このファイルの中身は、NTT オープンソースライセンス　バージョン 1.0（「本
契約」という）の適用を受けます。
本契約を遵守しない限り、このファイルを使用してはなりません。
本契約のコピーは、次のＵＲＬから入手できます。
【配布サイトのURL】 http://www.oss.ecl.ntt.co.jp/lms/

本契約に基づき頒布されるソフトウェアは、現状のまま、明示又は黙示のあらゆ
る種類の保証なしで、頒布されます。本契約に基づく権利及び制限を律する特定
の文言については、本契約を参照してください。

「オリジナルコード」は、 NTT Cyber Space Laboratories Code です。 
「オリジナルコード」の「初期開発者」は、日本電信電話株式会社です。  
日本電信電話株式会社により創作された部分は、Copyright (C) 2004 
日本電信電話株式会社 です。
全ての権利が留保されます。 
「コントリビュータ」：_____________________________________ 


The contents of this file are subject to the NTT Opensource License
Version 1.0 (the License); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
【配布サイトのURL】 http://www.oss.ecl.ntt.co.jp/lms/

Software distributed under the License is distributed on an AS IS
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing rights and limitations
under the License.

The Original Code is NTT Cyber Space Laboratories Code .

The Initial Developer of the Original Code is NIPPON TELEGRAPH AND 
TELEPHONE CORPORATION.
Portions created by the NIPPON TELEGRAPH AND TELEPHONE CORPORATION 
are Copyright (C) 2004 NIPPON TELEGRAPH AND TELEPHONE CORPORATION. 
All Rights Reserved.

Contributor(s) ______________________________________.
--%>

<%--
//
//
//	sce用extractcp.jsp
//
//	変更履歴  NTTR:JSATOU
//				2005.02.15	新規作成
//				2005.03.03	変更
//				2006.01.20	変更  SCORM.iniファイルよりFTPのパスを取得できるよう修正しました  M.Kitahara
//
//	機能
//  SCEサーバでのSCORMLO-CP展開処理画面
//
--%>

<%@ page contentType="text/html; charset=Windows-31J" pageEncoding="Windows-31J"%>

<%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>
<%@ page import="jp.co.ntt.lms.lo.scorm.ScormContentsExtract" %>
<%@ page import="jp.co.ntt.lms.lo.scorm.ScormLoEnv"%>

<%!


//////////////////////////////////////////////
//ディレクトリ削除再帰メソッド
//ADD START 20041203 NTTR
//param:path(中身を消したいディレクトリのパス)
//param:separator（ファイルシステムのセパレータ）
//return:なし
//////////////////////////////////////////////
	private static void deleteALL(String path,char separator)throws Exception{
		String[] list = new File( path ).list();

		for( int i = 0 ; i < list.length ; i++ ){
			File fileA = new File( path + separator + list[i] );
			if( fileA.isFile() ){
				// ファイル削除
				fileA.delete();
			}else{
				// ディレクトリの場合、再帰する
				String delete_dir = path + separator + list[i];
				deleteALL(delete_dir,separator);
				fileA.delete();
			}
		}
	}
//////////////////////////////////////////////
//ADD END
//////////////////////////////////////////////
%>


<%
	//	使用する変数の定義
	boolean		bRet				= true;
	String		strScePath			= null;	//sceのインストールディレクトリパス
	String		strCPName			= null;	//教材zip名
	String		strMaterialName			= null;	//教材ディレクトリ名
	String		strSceFtpPath			= null;	//sce/ftp/のパス
	String		strSceFtpFilePath		= null;	//sce/ftp/*.zip/パス
	int		intErrorNumber			= 0;	//エラー種別
	String		strSceContentDirPath		= null;	// /sce/contents/ディレクトリのパス
	String		strSceScormCpDirPath		= null;	//SCE教材名ディレクトリのパス
	final char	separator;				//ファイルシステムのセパレータ文字


	//環境ファイル用のオブジェクト生成
	ScormLoEnv ObjEnv = new ScormLoEnv();

	//Scorm.iniファイルからsceのパスを取得します
	strScePath = ObjEnv.getScePath();

	//ファイルシステムのセパレータを取得します
	File dummy = new File(strScePath);
	separator = dummy.separatorChar;

	//Scorm.iniファイルからmaterial_ftpのパスを取得します
	strSceFtpPath = ObjEnv.getFtpMaterialPath();


// ftpファイル名の取得///////////////////////////////////////
// 教材ID文字列をリクエストより取得する
//	取得成功	bRetをtrue
//			strMaterialName   manifest用ディレクトリ名
//			strCPName         zipファイル名
//
//	取得失敗	bRetをfalse
/////////////////////////////////////////////////////////////

	strCPName = request.getParameter("CPFILE");

	if(strCPName == null || strCPName.equals("")){
		bRet = false;
		intErrorNumber = 0;
	}else{
		if(strCPName.lastIndexOf(".") == -1){
			strCPName += ".zip";
		}

			int intSep		= strCPName.lastIndexOf(".");
			strMaterialName = strCPName.substring(0,intSep);

			if(strMaterialName == null){
					bRet = false;
			}else{
					bRet = true;
			}

	}


	//strMaterialNameがnullでなければ
	if(bRet == true){
		// SCORMエンジンが同一サーバなら以下の処理を行う。
		//dummyオブジェクトはsceのインストールディレクトリ
		if(dummy.exists() && dummy.isDirectory()){

			//(/ftp)のオブジェクト化	//パスの渡し方を変更	2006/1/20 M.kitahara
			File objSceFtpDir = new File(strSceFtpPath);

			//ZIPファイル(/sce/ftp/***.zip)のオブジェクト化
			strSceFtpFilePath = strSceFtpPath + separator + strCPName;
			File objCPFile = new File(strSceFtpFilePath);

			//存在チェック
			//zipファイルがftpディレクトリに存在する
			//ftpディレクトリが存在する
			//ftpがディレクトリである

			if(objCPFile.exists() && objSceFtpDir.exists() && objSceFtpDir.isDirectory()){

				//作成しようとする名前のディレクトリが（/sce/contents/）存在するか確認
				strSceContentDirPath = strScePath + separator + "contents";
				strSceScormCpDirPath = strSceContentDirPath + separator + strMaterialName;
				File objSceTempPath = new File(strSceScormCpDirPath);


				if(objSceTempPath.exists()){
				//作成しようとする名前(ZIPファイル名)のディレクトリが存在すれば
					//deleteALL()メソッドのコール
					//作成しようとするディレクトリと同じディレクトリ配下のファイル/ディレクトリ削除
					deleteALL(strSceScormCpDirPath,separator);

					//作成しようとするディレクトリ(ZIPファイル名)と同じディレクトリを削除
					bRet = objSceTempPath.delete();
	
					//ディレクトリの削除に成功すれば
					//取得した教材ID文字列でディレクトリを作成
					if(bRet == true){
							bRet = objSceTempPath.mkdir();

					}else{
							//ディレクトリ削除エラー
							intErrorNumber = 1;
					}
					if(bRet == false){
							//ディレクトリ作成エラー
							intErrorNumber = 2;
					}
					
			}else{
			//作成しようとする名前(ZIPファイル名)のディレクトリがなければ
			//取得した教材ID文字列でディレクトリを作成
				if(bRet == true){
						bRet = objSceTempPath.mkdir();
				}
				if(bRet == false){
							//ディレクトリ作成エラー
							intErrorNumber = 2;
				}
			}

			//作成しようとする名前(ZIPファイル名)のディレクトリが作成できたら
			//解凍を実施する。
			if(bRet == true){
				//解凍用オブジェクト生成
				ScormContentsExtract cpext = new ScormContentsExtract();

				//圧縮ファイルを解凍する
				bRet = cpext.saveAllEntries(strSceFtpFilePath, strSceScormCpDirPath);

					if(bRet == false){
						//圧縮ファイルの展開エラー
						intErrorNumber = 3;
					}
				}
			}else{
				bRet = false;
			}
		}
	}
%>

<html>
<head>
	<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=Shift_JIS">
	<META HTTP-EQUIV="Pragma" CONTENT="No-Cache"> 
	<META HTTP-EQUIV="Cache-Control" CONTENT="No-Cache"> 

	<title>zip-Extract</title>

	<script language="JavaScript">

		//	CP選択に戻るボタンクリック時
		function onReturn()
		{
			URL = "selectcp.jsp";
			window.location = URL;
		}
		//	閉じるボタンクリック時
		function onSyuryou()
		{
			//	一覧画面を閉じる
			parent.window.close();
		}


	</script>

</head>

<body>
	<BR>
	<p>
	<center>
<%= strCPName %>
<%
	//	正常に圧縮ファイルの展開終了
	if (bRet == true)
	{
%>
	の展開が完了しました。

<%
	}
	//	エラーが発生しました
	else
	{
		if (intErrorNumber == 0)
		{
%>
			
			のコンテンツパッケージの展開に失敗しました。<br>
			パッケージ名が取得できません。
			不正なコンテンツパッケージの可能性があります。
<%
		}
		//	ディレクトリ削除に失敗
		else if (intErrorNumber == 1)
		{
%>
			の教材名：<%= strMaterialName %><br>
			ディレクトリの削除に失敗しました。
			<br>同じ教材IDのコンテンツが存在する可能性があります。
						
<%
		}
		//	ディレクトリの作成に失敗
		else if (intErrorNumber == 2)
		{
%>
			の教材名：<%= strMaterialName %><br>
			ディレクトリの作成に失敗しました。
			<br>同じ教材IDのコンテンツが存在する可能性があります。
<%
		}
		//	圧縮ファイルの展開に失敗
		else if (intErrorNumber == 3)
		{
%>
			のファイルの解凍に失敗しました。<br>
			圧縮形式がzipであることを確認してください。
<%
		}
	}
%>

	<br>
	<br>
	<input type="button" value="CP選択に戻る" onClick="onReturn()">
	<input type="button" value="終了する" onClick="onSyuryou()">
	</center>
</body>	
</html>

