
import com.nttdocomo.ui.*;
import com.nttdocomo.io.*;
import com.nttdocomo.net.*;
import javax.microedition.io.*;
import java.io.*;

public class Cache extends IApplication {
	public void start(){
		Display.setCurrent(new CacheCanvas());
	}
}
class CacheCanvas extends Canvas {

	Image[] image = null;

	int[] fileSize = { 580 , 498 , 888 };

	public CacheCanvas(){
		setSoftLabel(SOFT_KEY_1,"終了");


		// スクラッチパッドから画像ファイルの作成

		if(!loadImage()){

			// スクラッチパッドからの画像作成に失敗した
			// つまり初回起動、あるいはエラーである

			// ネットワークから連結ファイルのダウンロード＆スクラッチパッドへ保存
			downLoadImage();

			// 再度スクラッチパッドから画像ファイルを作成
			loadImage();
		}

		repaint();
	}
	boolean loadImage(){
		try{
			// load images from scratchpad
			image = new Image[gifSize.length];

			int offset = 0; // 最初のオフセット
			for(int i=0;i<fileSize.length;i++){
				MediaImage mi = MediaManager.getImage("scratchpad:///0;pos="+offset);
				mi.use();
				image[i] = mi.getImage();
				offset += fileSize[i];
			}

		}catch(Exception e){
			// イメージの作成に失敗
			return false;
		}

		// イメージの作成に成功
		return true;
	}
	void downLoadImage(){
		try{
			// load images from network
			InputStream input = null;
			OutputStream output = Connector.openOutputStream("scratchpad:///0;pos=0");
			String url = IApplication.getCurrentApp().getSourceURL();

			HttpConnection con = (HttpConnection)Connector.open(url+"binary.dat",Connector.READ,true);
			con.setRequestMethod(HttpConnection.GET);

			con.connect();

			byte[] binary = new byte[ (int)con.getLength() ];
			input = con.openInputStream();

			input.read(binary);
			output.write(binary);

			input.close();
			con.close();
			output.close();
		}catch(ConnectionException ce){
			System.out.println(ce.getStatus());
		}catch(Exception e){
			System.out.println(e.toString());
		}
	}

	public void paint(Graphics g){
		if(image!=null){
			int y = 0;
			for(int i=0;i<image.length;i++){
				g.drawImage(image[i],0,y);
				y += image[i].getHeight();
			}
		}
	}


	public void processEvent(int type,int param){

		if((type==Display.KEY_PRESSED_EVENT)&&(param==Display.KEY_SOFT1)){

			IApplication.getCurrentApp().terminate();

		}

	}
}

