/**
 * Copyright (C) 2006-2007  NTT DATA CORPORATION
 * 
 * Version: 1.0.0 2007/04/01
 *  
 */
package net.cellcomputing.himawari.display;

import java.awt.image.BufferedImage;

import javax.swing.ImageIcon;

import net.cellcomputing.himawari.util.HimawariLogger;

/**
 * @author NTT DATA Corporation
 * レンダリング画面を表示する命令を持つクラス。
 * レンダリングしている画像を表示するWindowを持つ。
 * 
 * openRequestで初期化を行い、
 * display()にてWindowに再描画命令を出す。
 * 
 * 
 */
public strictfp class FrameBufferRequest extends DisplayRequest {
	/**
	 * レンダリング画像を表示するWindow
	 */
	private FrameBuffer frameBuffer;

	/**
	 * コンストラクタ
	 * @param name 名前
	 * @param type ディスプレイタイプ(FrameBuffer)
	 * @param mode カラーモード
	 * @param modeID
	 * @param dataOffset
	 * @param dataSize
	 * @param imageData 画像データを管理するクラス
	 */
	public FrameBufferRequest(String name, final String type,final String mode,
			int modeID, int dataOffset, int dataSize ,ImageData imageData){
		super(name,type,mode,modeID,dataOffset,dataSize,imageData);

	}

	/**
	 * DisplayBucketを呼び出す前に必ず呼ばれるメソッド。
	 * Windowを作成し、表示する。
	 */
	public void openRequest() {
		Object image = imageData.getImage();
		
		if(!(image instanceof BufferedImage)){
			//Error処理を行う
			HimawariLogger.getLogger().error("Can't open framebuffer");
			
		}
		frameBuffer = new FrameBuffer((BufferedImage)imageData.getImage(),name);
		frameBuffer.init();
		frameBuffer.setVisible(true);
		//icon
		ImageIcon Icon;
        String file = "himawarilogo.png";
        if( getClass().getResource("/"+file)!= null ){
            Icon = new ImageIcon(getClass().getResource("/"+file)) ;
        }
        else{
        	Icon =  new ImageIcon(file);
        }
		frameBuffer.setIconImage(Icon.getImage());
	}
	
	/**
	 * 再描画の命令をwindowに対し行う。
	 */
	public void display() {
		frameBuffer.repaint();

	}

	/**
	 * 何もしない
	 */
	public void closeRequest() {
		imageData = null;
		frameBuffer = null;
	}

}
