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

package jp.sourceforge.livez.dao;

import java.io.Serializable;
import java.util.List;

import org.apache.commons.lang.StringUtils;
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;

/**
 * EZweb 端末情報を提供します。
 * 
 * @author 杉澤 浩二
 */
public class EZweb implements Serializable {

	private static final long serialVersionUID = 1L;

	/**
	 * デフォルトコンストラクタです。
	 */
	public EZweb() {}

	/**
	 * デバイスIDを保持します。
	 */
	private String deviceType;

	/**
	 * デバイスIDを取得します。
	 * 
	 * @return デバイスID
	 */
	public String getDeviceType() {
		return deviceType;
	}

	/**
	 * デバイスIDを設定します。
	 * 
	 * @param deviceType デバイスID
	 */
	public void setDeviceType(final String deviceType) {
		this.deviceType = StringUtils.defaultIfEmpty(deviceType, null);
	}

	/**
	 * 機種名称を保持します。
	 */
	private String productName;

	/**
	 * 機種名称を返します。
	 * 
	 * @return 機種名称
	 */
	public String getProductName() {
		return productName;
	}

	/**
	 * 機種名称を設定します。
	 * 
	 * @param name 機種名称
	 */
	public void setProductName(final String name) {
		this.productName = StringUtils.defaultIfEmpty(name, null);
	}

	/**
	 * シリーズ名を保持します。
	 */
	private String seriesName;

	/**
	 * シリーズ名を返します。
	 * 
	 * @return シリーズ名
	 */
	public String getSeriesName() {
		return seriesName;
	}

	/**
	 * シリーズ名を設定します。
	 * 
	 * @param seriesName シリーズ名
	 */
	public void setSeriesName(final String seriesName) {
		this.seriesName = StringUtils.defaultIfEmpty(seriesName, null);
	}

	/**
	 * 待受け画面の幅を保持します。
	 */
	private Integer screenWidth;

	/**
	 * 待受け画面の幅を返します。
	 * 
	 * @return 待受け画面の幅
	 */
	public Integer getScreenWidth() {
		return screenWidth;
	}

	/**
	 * 待受け画面の幅を設定します。
	 * 
	 * @param screenWidth 待受け画面の幅
	 */
	public void setScreenWidth(final Integer screenWidth) {
		if (screenWidth == null || screenWidth <= 0)
			this.screenWidth = null;
		else
			this.screenWidth = screenWidth;
	}

	/**
	 * 待受け画面の高さを保持します。
	 */
	private Integer screenHeight;

	/**
	 * 待受け画面の高さを返します。
	 * 
	 * @return 待受け画面の高さ
	 */
	public Integer getScreenHeight() {
		return screenHeight;
	}

	/**
	 * 待受け画面の高さを返します。
	 * 
	 * @param screenHeight 待受け画面の高さ
	 */
	public void setScreenHeight(final Integer screenHeight) {
		if (screenHeight == null || screenHeight <= 0)
			this.screenHeight = null;
		else
			this.screenHeight = screenHeight;
	}

	/**
	 * GIF 画像対応状況を保持します。
	 */
	private boolean gif;

	/**
	 * GIF 画像対応状況を返します。
	 * 
	 * @return GIF 画像対応状況
	 */
	public boolean isGif() {
		return gif;
	}

	/**
	 * GIF 画像対応状況を設定します。
	 * 
	 * @param gif GIF 画像対応状況
	 */
	public void setGif(final boolean gif) {
		this.gif = gif;
	}

	/**
	 * JPEG 画像対応状況を保持します。
	 */
	private boolean jpeg;

	/**
	 * JPEG 画像対応状況を返します。
	 * 
	 * @return JPEG 画像対応状況
	 */
	public boolean isJpeg() {
		return jpeg;
	}

	/**
	 * JPEG 画像対応状況を設定します。
	 * 
	 * @param jpeg JPEG 画像対応状況
	 */
	public void setJpeg(final boolean jpeg) {
		this.jpeg = jpeg;
	}

	/**
	 * 256色 PNG 画像対応状況を保持します。
	 */
	private boolean png8bit;

	/**
	 * 256色 PNG 画像対応状況を返します。
	 * 
	 * @return 256色 PNG 画像対応状況
	 */
	public boolean isPng8bit() {
		return png8bit;
	}

	/**
	 * 256色 PNG 画像対応状況を設定します。
	 * 
	 * @param png8bit 256色 PNG 画像対応状況
	 */
	public void setPng8bit(final boolean png8bit) {
		this.png8bit = png8bit;
	}

	/**
	 * カラー BMP 画像対応状況を保持します。
	 */
	private boolean bmp2bit;

	/**
	 * カラー BMP 画像対応状況を返します。
	 * 
	 * @return カラー BMP 画像対応状況
	 */
	public boolean isBmp2bit() {
		return bmp2bit;
	}

	/**
	 * カラー BMP 画像対応状況を設定します。
	 * 
	 * @param bmp2bit カラー BMP 画像対応状況
	 */
	public void setBmp2bit(final boolean bmp2bit) {
		this.bmp2bit = bmp2bit;
	}

	/**
	 * 白黒 BMP 画像対応状況を保持します。
	 */
	private boolean bmp1bit;

	/**
	 * 白黒 BMP 画像対応状況を返します。
	 * 
	 * @return 白黒 BMP 画像対応状況
	 */
	public boolean isBmp1bit() {
		return bmp1bit;
	}

	/**
	 * 白黒 BMP 画像対応状況を設定します。
	 * 
	 * @param bmp1bit 白黒 BMP 画像対応状況
	 */
	public void setBmp1bit(final boolean bmp1bit) {
		this.bmp1bit = bmp1bit;
	}

	/**
	 * 写真フレーム情報のリストを保持します。
	 */
	private List<EZwebFrame> frames;

	/**
	 * 写真フレーム情報のリストを返します。
	 * 
	 * @return 写真フレーム情報のリスト
	 */
	public List<EZwebFrame> getFrames() {
		return frames;
	}

	/**
	 * 写真フレーム情報のリストを設定します。
	 * 
	 * @param frames 写真フレーム情報のリスト
	 */
	public void setFrames(final List<EZwebFrame> frames) {
		this.frames = frames;
	}

	/**
	 * 写真スタンプ情報を保持します。
	 */
	private EZwebStamp stamp;

	/**
	 * 写真スタンプ情報を返します。
	 * 
	 * @return 写真スタンプ情報
	 */
	public EZwebStamp getStamp() {
		return stamp;
	}

	/**
	 * 写真スタンプ情報を設定します。
	 * @param stamp
	 */
	public void setStamp(final EZwebStamp stamp) {
		this.stamp = stamp;
	}

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

}
