package com.nifty.cloud.ncs.service;

import java.util.ArrayList;
import java.util.List;

/**
 * バケット内のオブジェクト一覧取得用クラス
 *
 */
public class ObjectListing
{
	private String bucketName = null;
	private List<NcsObjectContents> objectList = new ArrayList<NcsObjectContents>();
	private List<String> commonPrefixes = new ArrayList<String>();
	private String nextMarker = null;
	private String prefix = null;
	private String marker = null;
	private int maxKeys;
	private String delimiter = "/";
	private boolean isTruncated = false;

	public ObjectListing()
	{
	}

    /**
     * オブジェクト一覧取得対象のバケット名を設定します。
     *
     * @param bucketName
     *            オブジェクト一覧取得対象のバケット名
     */
	public void setBucketName(String bucketName)
	{
		this.bucketName = bucketName;
	}

    /**
     * オブジェクト一覧取得対象のバケット名を取得します。
     *
     * @return オブジェクト一覧取得対象のバケット名
     */
	public String getBucketName()
	{
		return (bucketName);
	}

	/**
	 * オブジェクトを追加します。
	 *
	 * @param object
	 *  オブジェクト情報
	 */
	public void addObject(NcsObjectContents object)
	{
		objectList.add(object);
	}

    /**
     * オブジェクト一覧を取得します。
     *
     * @return NcsObjectContentsのリスト
     *
     */
	public List<NcsObjectContents> getObjectList()
	{
		return (objectList);
	}

    /**
     * CommonPrefixを設定します。
     * 要求にdelimiterパラメータが含まれている場合に設定されます。
     *
     * @param commonPrefixes
     *   CommonPrefixesのキー
     */
	public void setCommonPrefixes(List<String> commonPrefixes)
	{
		this.commonPrefixes = commonPrefixes;
	}

    /**
     * CommonPrefixを追加します。
     * 要求にdelimiterパラメータが含まれている場合に設定されます。
     *
     * @param prefix
     *   CommonPrefixのキー
     */
	public void addCommonPrefix(String prefix)
	{
		commonPrefixes.add(prefix);
	}

    /**
     * CommonPrefixesのリストを取得します。
     *
     * @return CommonPrefixesが含まれている場合はCommonPrefixesのリスト、そうでない場合は空のリスト
     */
	public List<String> getCommonPrefixes()
	{
		return (commonPrefixes);
	}

    /**
     * NextMarkerを設定します。
     *
     * @param nextMarker
     *  オブジェクト一覧が切り捨てられた場合に設定され、この値を次回要求時に設定すると
     *  切り捨てられたリストの続きを取得することができます。
     */
	public void setNextMarker(String nextMarker)
	{
		this.nextMarker = nextMarker;
	}

    /**
     * NextMarkerを取得します。NextMarkerは、次回要求時に、次項を参照するためのmarkerです。
     * オブジェクト一覧が切り捨てられていない場合、このメソッドは<code>null</code>を返却します。
     * 切り捨てられた要求の場合、この値は、一覧に含まれるオブジェクトのkey、およびCommonPrefixesのうち
     * 辞書的に見て一番後ろのものになります。
     *
     * @return
     *         NextMarker。この値は、リストに含まれるオブジェクト名、およびCommonPrefixesのうち
     *         辞書的に見て一番後ろのものになります。
     *         オブジェクト一覧が切り捨てられていない場合は<code>null</code>を返却します。
     */
	public String getNextMarker()
	{
		return (nextMarker);
	}

    /**
     * markerパラメータを設定します。
     *
     * @param marker
     *  markerパラメータ
     */
	public void setMarker(String marker)
	{
		this.marker = marker;
	}

    /**
     * markerパラメータを取得します。
     * このパラメータが指定された場合、オブジェクト一覧に含まれるオブジェクト名、およびCommonPrefixesのうち、
     * markerよりもアルファベット順で後にあるものを全てを取得します。
     *
     * @return markerパラメータ。
     *         markerが指定されていない場合<code>null</code>
     */
	public String getMarker()
	{
		return (marker);
	}

    /**
     * max-keysパラメータを設定します。
     *
     * @param maxKeys
     *            max-keysパラメータ。
     */
	public void setMaxKeys(int maxKeys)
	{
		this.maxKeys = maxKeys;
	}

    /**
     * max-keysパラメータを取得します。
     *
     * @return max-keyパラメータ。
     *          値が指定されていない場合、ニフクラストレージで定められるデフォルトのmax-key値
     */
	public int getMaxKeys()
	{
		return (maxKeys);
	}

    /**
     * prefixパラメータを設定します。
     *
     * @param prefix
     *   prefixパラメータ
     *
     */
	public void setPrefix(String prefix)
	{
		this.prefix = prefix;
	}

    /**
     * prefixパラメータを取得します。
     * オブジェクト一覧は指定したprefixから開始されます。
     *
     * @return prefixパラメータ。
     *         prefixが指定されていない場合<code>null</code>
     */
	public String getPrefix()
	{
		return (prefix);
	}

    /**
     * delimiterパラメータを設定します。
     *
     * @param delimiter
     *	delimiterパラメータ
     */
	public void setDelimiter(String delimiter)
	{
		this.delimiter = delimiter;
	}

    /**
     * delimiterパラメータを取得します。
     *
     * @return delimiterパラメータ。
     *         delimiterが指定されていない場合、<code>null</code>
     */
	public String getDelimiter()
	{
		return (delimiter);
	}

    /**
     * isTruncatedプロパティを設定します。
     * isTruncatedプロパティは、一覧が切り捨てられていないかどうかを示す値です。
     *
     * @param isTruncated
     *           オブジェクト一覧が完全な場合は<code>true</code>。
     *           そうでなければ<code>false</code>
     */
	public void setTruncated(boolean isTruncated)
	{
		this.isTruncated = isTruncated;
	}

    /**
     * isTruncatedプロパティ値を取得します。
     *
     * @return オブジェクト一覧が不完全な場合<code>true</code>、そうでなければ<code>false</code>。
     */
	public boolean isTruncated()
	{
		return (isTruncated);
	}
}
