/*
 * Copyright (c) 2003, Morpho Project.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice,
 *    this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 *    this list of conditions and the following disclaimer in the documentation
 *    and/or other materials provided with the distribution.
 * 3. Neither the name of the Morpho Project nor the names of its contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package jp.morpho.io;

import java.io.File;
import java.net.URI;

/**
 * <P>
 * アップロードファイルのパス名の抽象表現です。
 * </P>
 * @author Kumiko Hiroi
 */
public class UploadFile
	extends File
{

	/** クライアントが選択したファイルのパス名文字列 */
	private String clientPath = null;

	/** アップロードされたファイルのコンテンツ形式 */
	private String contentType = null;

	/**
	 * <P>
	 * 指定されたパス名文字列を抽象パス名に変換して、新しい UploadFile のインスタンスを生成します。
	 * 指定された文字列が空の文字列の場合、結果は空の抽象パス名になります。
	 * </P>
	 * @param pathname パス名文字列
	 * @exception NullPointerException pathname 引数が null の場合
	 */
	public UploadFile(String pathname)
	{
		super(pathname);
	}

	/**
	 * <P>
	 * 親パス名文字列および子パス名文字列から新しい UploadFile のインスタンスを生成します。
	 * </P>
	 * <P>
	 * parent が null の場合、新しい UploadFile のインスタンスは、指定された child パス名文字列で単一引数の UploadFile コンストラクタを呼び出したように生成されます。
	 * </P>
	 * <P>
	 * そうでない場合、parent パス名文字列はディレクトリを示し、child パス名文字列はディレクトリまたはファイルを示します。
	 * child パス名文字列が絶対の場合、それはシステムに依存する方法で相対パス名に変換されます。
	 * parent が空の文字列の場合、新しい UploadFile のインスタンスは、child を抽象パス名に変換し、その結果をシステムに依存するデフォルトディレクトリを基準に解決することで生成されます。
	 * そうでない場合、各パス名文字列は抽象パス名に変換され、子抽象パス名は親を基準に解決されます。
	 * </P>
	 * @param parent 親パス名文字列
	 * @param child 子パス名文字列
	 * @exception NullPointerException child が null の場合
	 */
	public UploadFile(String parent, String child)
	{
		super(parent, child);
	}

	/**
	 * <P>
	 * 親抽象パス名および子パス名文字列から新しい UploadFile のインスタンスを生成します。
	 * </P>
	 * <P>
	 * parent が null の場合、新しい UploadFile のインスタンスは、指定された child パス名文字列で単一引数の UploadFile コンストラクタを呼び出したように生成されます。
	 * </P>
	 * <P>
	 * そうでない場合、parent 抽象パス名はディレクトリを示し、child パス名文字列はディレクトリまたはファイルを示します。
	 * child パス名文字列が絶対の場合、それはシステムに依存する方法で相対パス名に変換されます。
	 * parent が空の抽象パス名の場合、新しい UploadFile のインスタンスは、child を抽象パス名に変換し、その結果をシステムに依存するデフォルトディレクトリを基準に解決することで生成されます。
	 * そうでない場合、各パス名文字列は抽象パス名に変換され、子抽象パス名は親を基準に解決されます。
	 * </P>
	 * @param parent 親抽象パス名
	 * @param child 子パス名文字列
	 * @exception NullPointerException child が null の場合
	 */
	public UploadFile(File parent, String child)
	{
		super(parent, child);
	}

	/**
	 * <P>
	 * 指定された file: URI を抽象パス名に変換して、新しい UploadFile のインスタンスを生成します。
	 * </P>
	 * <P>
	 * file: URI の形式はシステムに依存するため、このコンストラクタが行う変換もシステムに依存します。
	 * </P>
	 * <P>
	 * 指定された抽象パス名が <I>f</I> の場合は、次のように変換されます。
	 * <BLOCKQUOTE><TT>
	 * new File(<I>f</I>.toURI()).equals(<I>f</I>)
	 * </TT></BLOCKQUOTE>
	 * この例の場合、元の抽象パス名、URI、および新しい抽象パス名は、同じ Java 仮想マシンの複数の呼び出しで作成する必要があります。
	 * ただし、あるオペレーティングシステムの仮想マシンで作成した file: URI を別のオペレーティングシステムの仮想マシンの抽象パス名に変換する場合、通常はこのように変換されません。
	 * </P>
	 * @param uri 階層型の絶対 URI。形式は、"file"、パス、権限、クエリー、フラグメント。パスは必ず指定する。権限、クエリー、およびフラグメントは定義しない
	 * @exception NullPointerException uri が null の場合
	 * @exception IllegalArgumentException 上記のパラメータの前提条件が満たされていない場合
	 */
	public UploadFile(URI uri)
	{
		super(uri);
	}

	/**
	 * <P>
	 * クライアントが選択したファイルのパス名文字列を返します。
	 * </P>
	 * @return クライアントが選択したファイルのパス名文字列
	 */
	public String getClientPath()
	{
		return (clientPath != null) ? clientPath : "";
	}

	/**
	 * <P>
	 * クライアントが選択したファイルのパス名文字列を設定します。
	 * </P>
	 * @param clientPath クライアントが選択したファイルのパス名文字列
	 */
	public void setClientPath(String clientPath)
	{
		this.clientPath = clientPath;
	}

	/**
	 * <P>
	 * アップロードされたファイルのコンテンツ形式を返します。
	 * </P>
	 * @return アップロードされたファイルのコンテンツ形式
	 */
	public String getContentType()
	{
		return (contentType != null) ? contentType : "";
	}

	/**
	 * <P>
	 * アップロードされたファイルのコンテンツ形式を設定します。
	 * </P>
	 * @param contentType アップロードされたファイルのコンテンツ形式
	 */
	public void setContentType(String contentType)
	{
		this.contentType = contentType;
	}

}
