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

package jp.sourceforge.livez.imode;

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;

import jp.sourceforge.livez.dao.ImodeIappli;

/**
 * Iappli を実装したクラスです。
 * 
 * @author 杉澤 浩二
 */
final class IappliImpl implements Iappli {

	private static final long serialVersionUID = 1L;

	/**
	 * コンストラクタです。
	 * 
	 * @param iappli
	 */
	public IappliImpl(final ImodeIappli iappli) {
		this.version			= iappli.getDoja();
		this.edition			= iappli.isEdition();
		this.maxJarSize			= iappli.getJar() * 1024;
		this.maxScratchPadSize	= iappli.getSp() * 1024;
		this.width				= iappli.getWidth();
		this.height				= iappli.getHeight();
	}

	/**
	 * 対応している DoJa プロファイルのバージョンを保持します。<p>
	 */
	private float version;

	/*
	 * @see jp.sourceforge.livez.imode.Iappli#getVersion()
	 */
	public float getVersion() {
		return version;
	}

	/**
	 * 亜種かどうかを保持します。<p>
	 */
	private boolean edition;

	/*
	 * @see jp.sourceforge.livez.imode.Iappli#getEdition()
	 */
	public boolean getEdition() {
		return edition;
	}

	/**
	 * 使用可能な JAR サイズ容量(バイト単位)を保持します。<p>
	 */
	private int maxJarSize = 0;

	/*
	 * @see jp.sourceforge.livez.imode.Iappli#getMaxJarSize()
	 */
	public int getMaxJarSize() {
		return maxJarSize;
	}

	/**
	 * 使用可能な ScratchPad 容量(バイト単位)を保持します。<p>
	 */
	private int maxScratchPadSize = 0;

	/*
	 * @see jp.sourceforge.livez.imode.Iappli#getMaxScratchPadSize()
	 */
	public int getMaxScratchPadSize() {
		return maxScratchPadSize;
	}

	/**
	 * 描画可能な幅を保持します。<p>
	 */
	private int width = 0;

	/*
	 * @see jp.sourceforge.livez.imode.Iappli#getWidth()
	 */
	public int getWidth() {
		return width;
	}

	/**
	 * 描画可能な高さを保持します。<p>
	 */
	private int height = 0;

	/*
	 * @see jp.sourceforge.livez.imode.Iappli#getHeight()
	 */
	public int getHeight() {
		return height;
	}

	@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);
	}

}
