/*
 * @(#)ZFile.java
 *
 * Copyright 2001 by Intelligent Technology Inc. All rights reserved.
 */
package jp.co.iti.fagot.util;

import java.io.File;

import java.text.DateFormat;
import java.util.Date;
/**
 * ファイルユーティリティ
 */
public class ZFile {
	/**
	 * 唯一のコンストラクタです。
	 */
	public ZFile() {
	}

	/**
	 * ファイル名を取得します。
	 * @param szDir  ソースディレクトリ
	 * @param szPath 相対パス名
	 */
//	static public String getPath(String szDir,String szPath ) {
//	return( szDir + File.separator + szPath );
//	}

	/**
	 * 更新日付を取得します。
	 * @param szPath ファイル名
	 */
	static public String getLastModified(String szPath ) {
	File src = new File( szPath ) ;
	// ソースが存在しない場合はfalse
	if ( !src.exists() ) {
		return null;
	}
	Date date = new Date(src.lastModified());
	DateFormat fmt = DateFormat.getDateTimeInstance();
	return fmt.format( date ) ;
	}

	/**
	 * 親ディレクトリを取得します。
	 * @param szPath ファイル名
	 */
	static public String getParent(String szPath ) {
	File file = new File( szPath ) ;
	return( file.getParent() );
	}

	/**
	 * ファイル拡張子を取得します。
	 * @param szPath 相対パス名
	 */
	static public String getExt( String szPath ) {
	String[] szStr = ZString.tokenize(szPath,".");
	if ( szStr.length > 1 ) {
		return ( szStr[szStr.length-1] ) ;
//  int nIndex = szPath.lastIndexOf('.');
//	if(nIndex>0 && nIndex<szPath.length()-1) {
//		return szPath.substring(nIndex+1).toLowerCase();
	}
	return( null );
	}

	/**
	 * ファイル名を取得します。
	 * @param szPath 相対パス名
	 */
	static public String getFName( String szPath ) {
	String[] szStr1 = ZString.tokenize(szPath,File.separator) ;
	return( szStr1[szStr1.length-1] );
	}

	/**
	 * ファイル名を取得します。
	 * 拡張子があれば拡張子を取り除いたファイル名を取得します。
	 * @param szPath 相対パス名
	 */
	static public String getBaseName( String szPath ) {
	String   szBase  = getFName(szPath) ;
	String   szExt   = getExt(szBase) ;
	if ( szExt != null ) {
		szBase = szBase.substring(0,szBase.length()-szExt.length()-1);
	}
	return(szBase);
	}

	/**
	 * パス名をつなげます。
	 *
	 * <ul>
	 * <li>子パスが絶対パスの場合つなげません。
	 * <li>子パスに . .. が含まれていた場合はちゃんと出したいが、まだです。
	 * </ul>
	 *
	 * @param szPPath 親パス
	 * @param szCPath 子パス
	 */
	static public String concatPath(String szPPath,String szCPath ) {
	if ( szCPath == null ) {
		return szPPath;
	}
	String szPath = szCPath;
	File file = new File( szCPath );
	// 相対パスの場合
	if ( !file.isAbsolute() && szPPath != null ) {
		szPath = szPPath + File.separator + szCPath ;
	}
	return( szPath );
	}

	/**
	 * 相対パスを取得します。
	 * szSrc が szDir のサブディレクトリに含まれる場合のみ機能します。
	 * ★★★それ以上は今後...
	 * @param szPPath 基準ディレクトリ
	 * @param szCPath ソースファイルのパス
	 */
	static public String getSPath(String szPPath,String szCPath ) {
	String szRet = szCPath;
	if ( szCPath.startsWith(szPPath) ) {
		szRet = szCPath.substring(szPPath.length()+File.separator.length()) ;
	} else {
		ZDebug.err("!!!!not yet support:"+szPPath+"→"+szCPath);
	}
	return(szRet);
	}

	/**
	 * DOSで使えるパスを取得します。
	 * szSrc が " " を含む場合は、"" でくくります。
	 * @param szPath 元ファイル名
	 */
	static public String getDosPath( String szPath ) {
	int nIndex = szPath.indexOf(" ");
	if ( nIndex != -1 ) {
		return ( "\"" + szPath + "\"" ) ;
	}
	return(szPath);
	}

	/**
	 * DOSで使えるパスを普通のパス名に戻します。
	 * szSrc が "" でくくられている場合は、"" を取ります。
	 * @param szPath 元ファイル名
	 */
	static public String getUnDosPath( String szPath ) {
	if ( szPath.charAt(0) == '\"' &&
		 szPath.charAt(szPath.length()-1) == '\"' ) {
		return ( szPath.substring(1,szPath.length()-1) ) ;
	}
	return(szPath);
	}
}
