/*
 * Copyright (C) 2005-2006 Kouji Sugisawa. All rights reserved.
 */

package jp.sourceforge.livez.vodafone;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

/**
 * 3GC端末のアプリケーション情報を提供します。
 * 
 * @author 杉澤 浩二
 */
final class ApplicationImpl implements Application {

	/**
	 * アプリケーションの種類を指定してこのクラスを構築します。
	 * 
	 * @param type アプリケーションの種類
	 */
	public ApplicationImpl(final ApplicationType type) {
		this.type = type;
	}

	/**
	 * 全てのフィールドを指定してこのクラスを構築します。
	 * 
	 * @param type アプリケーションの種類
	 * @param name アプリケーション名
	 * @param version アプリケーションのバージョン情報
	 */
	public ApplicationImpl(final ApplicationType type, final String name, final Float version) {
		this.type = type;
		this.name = name;
		this.version = version;
	}

	/**
	 * アプリケーションの種類を保持します。
	 */
	private ApplicationType type;

	/*
	 * @see jp.sourceforge.livez.vodafone.Application#getType()
	 */
	public ApplicationType getType() {
		return type;
	}

	/**
	 * アプリケーションの名前を保持します。
	 */
	private String name = null;

	/*
	 * @see jp.sourceforge.livez.vodafone.Application#getName()
	 */
	public String getName() {
		return name;
	}

	/**
	 * アプリケーションのバージョン情報を保持します。
	 */
	private Float version = null;

	/*
	 * @see jp.sourceforge.livez.vodafone.Application#getVersion()
	 */
	public Float getVersion() {
		return version;
	}

	@Override
	public int hashCode() {
		return HashCodeBuilder.reflectionHashCode(this);
	}

	@Override
	public boolean equals(final Object obj) {
		return EqualsBuilder.reflectionEquals(this, obj);
	}

	@Override
	public String toString() {
		return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
	}

}
