/**
* Kandata
* Copyright (C) 2003. Yoshinori Watanabe
* 
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
* 
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
* 
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/
package kandata.server;

import java.util.HashMap;

/**
 * サーバが管理する、クライアントごとのコンテキスト.
 */
public class KandataClientContext {

	/** クライアントIDを生成するための種. */
	private static int idSeed = 0;

	/** クライアントID. */
	private final String id;	// 生成時にしか設定できない

	/** 接続された日時. */
	private long connectTimeMillis;

	/** 最後にアクセスした日時. */
	private long lastAccessTimeMillis;

	/** クライアントコンテキストを生成します. */
	public KandataClientContext(long millis) {
		id = "" + idSeed;
		idSeed++;
		connectTimeMillis = lastAccessTimeMillis = millis;
	}
	/** クライアントIDを返します. */
	public String getId() { return id; }

	/** 最終アクセス日時を更新します. */
	public void setLastAccessTimeMillis(long millis) {
		lastAccessTimeMillis = millis;
	}
	/** 最終アクセス日時を取得します. */
	public long getLastAccessTimeMillis() {
		return lastAccessTimeMillis;
	}
	/** 接続日時を取得します. */
	public long getConnectTimeMillis() {
		return connectTimeMillis;
	}

	/** アプリケーション用のプロパティ */
	private HashMap applicationProperties = new HashMap();

	/** アプリケーションが利用可能なプロパティを取得します. */
	public Object getApplicationProperty(Object key) {
		return applicationProperties.get(key);
	}
	/** アプリケーションが利用可能なプロパティを設定します. */
	public void setApplicationProperty(Object key, Object value) {
		applicationProperties.put(key ,value);
	}
	/** アプリケーションが利用可能なプロパティを削除します. */
	public Object removeApplicationProperty(Object key) {
		return applicationProperties.remove(key);
	}
	/** アプリケーションが利用可能なプロパティをすべて削除します. */
	public void clearApplicationProperty() {
		applicationProperties.clear();
	}
	/** アプリケーションが利用可能なプロパティをすべて削除します. */
	public int getApplicationPropertySize() {
		return applicationProperties.size();
	}
}
/*
	アプリケーションプロパティはWebアプリに比べて、利用する機会は少ないような気がする。
*/
