/*
 * step1.java
 *
 * DATE : 2005/11/23 15:46
 *
 * ウェブサーバを経由しての文字・画像を取得し
 * スクラッチパッドに保存するテスト
 *
 * リソースからの画像表示もテスト
 */
import com.nttdocomo.ui.*;
import com.nttdocomo.io.*;
import java.io.*;
import javax.microedition.io.*;
/**
 * step1
 *
 * @author NAME
 */
public class step1 extends IApplication {

	public void start() {
		/*
		 * The program of IApplication is written here.
		 */
		Display.setCurrent(new MainCanvas());
	}
}

class MainCanvas extends Canvas {

	Image		imgMain;				//メインイメージ：最終形態（キャンバス）
	Image		imgLoadResouce;			//リソースからの読み込みイメージ：作業域
	Image		imgLoadScratchPad;		//スクラッチパッドからの読み込みイメージ：作業域
	Graphics	graMain;				//グラフィックオブジェクト
	String		strGetData;				//サーバから取得した文字列

	int intWidth;						//キャンバスの幅
	int intHeight;						//キャンバスの高さ

	int intAdjustHeight;				//エミュレーターの座標0と実機の座標0との差

	MainCanvas() 
	{
		//キャンバスのサイズをセット
		intWidth = 240;
		intHeight = 240;

		//エミュレーターより実機は上に2pixcelほど不可視領域がある。
		//でもなぜか画像は調整の必要がない。
		intAdjustHeight = 2;

		//画像が取得できないときヌルポになるので初期化
		imgMain = Image.createImage(intWidth, intHeight);
		imgLoadResouce = Image.createImage(intWidth, intHeight);
		imgLoadScratchPad = Image.createImage(intWidth, intHeight);
		graMain = imgMain.getGraphics();

		//文字も取得できないとヌルポになるので初期化
		strGetData = "";

		//リソースからの読み込み
		try
		{
			MediaImage mediaImg = MediaManager.getImage("resource:///koneko01.gif");
			mediaImg.use();
			imgLoadResouce = mediaImg.getImage();
		}
		catch( ConnectionException e)
		{}
		catch(IOException e)
		{}

		//ウェブサーバからの読み込み、スクラッチパッドへ
		subGetServerData();

		//スクラッチパッドから読み込み
		try
		{
			MediaImage mediaImg = MediaManager.getImage("scratchpad:///0;pos=0");
			mediaImg.use();
			imgLoadScratchPad = mediaImg.getImage();
		}
		catch( ConnectionException e)
		{}
		catch(IOException e)
		{}

		graMain.lock();
		//キャンバスをクリア
		graMain.clearRect(0, 0, intWidth, intHeight);

		//文字を描画　　指定する座標はフォントの左下、デフォルトは
		//　　　　　　　上限マージン１ずつで合計高さ12pixcel
		graMain.drawString("リソースイメージ", 0, 10 + intAdjustHeight);
		graMain.drawImage(imgLoadResouce, 0, 12);

		//リソースイメージが69pixcelなので69+12+10=91pixcelに文字を
		graMain.drawString("スクラッチパッドイメージ", 0, 93 + intAdjustHeight);
		graMain.drawImage(imgLoadScratchPad, 0, 93);

		//ウェブのイメージが50pixcelなので93+50+10=153pixcel
		graMain.drawString(strGetData, 0, 155 + intAdjustHeight);

		graMain.unlock(true);

		// ソフトキーラベル「back」を作成する。
		setSoftLabel(Frame.SOFT_KEY_1, "Back");

	}

	/**
	* キャンバス領域に描画する。
	*/
	public void paint(Graphics g) 
	{
		g.drawImage(imgMain, 0, 0);
	}

	//サーバから文字と画像を取得する
	synchronized void subGetServerData()
	{
		HttpConnection	httpConn;		//HTTP接続オブジェクト
		InputStream		objInStream;	//入力オブジェクト
		OutputStream	objOutStream;	//出力オブジェクト

		int				intChar;		//取得したデータ
		StringBuffer	strbGetBuffer;	//取得した文字バッファを格納

		strbGetBuffer = new StringBuffer();
		strGetData = "";

		byte[]			bytData;		//読み込みデータ
		int				intLength;		//データの長さ

		try
		{
			// HTTP 接続（HttpConnection）オブジェクトを取得する。
			httpConn = (HttpConnection)Connector.open("http://machtype.com/~flesh_gogo/cgi-bin/remote_addr.cgi",Connector.READ_WRITE,true);

			// リクエストメソッドを設定する。
			httpConn.setRequestMethod(HttpConnection.GET);

			// リモート資源に接続する。
			httpConn.connect();

			//データをInputStreamに
			objInStream = httpConn.openInputStream();

			//データを文字列にするために、バッファに入れる
			while ((intChar = objInStream.read()) != -1)
			{
				strbGetBuffer.append((char)intChar);
			}

			//文字列に変換
			strGetData = (String)strbGetBuffer.toString();

			// 入力ストリームをクローズする。
			objInStream.close();
			// HTTP 接続をクローズする。
			httpConn.close();

			httpConn = (HttpConnection)(Connector.open("http://machtype.com/~flesh_gogo/mobile-appli/koneko02.gif",Connector.READ));
			httpConn.setRequestMethod(HttpConnection.GET);
			httpConn.connect();
			objInStream=httpConn.openInputStream();

			//スクラッチパットに接続し、出力するオブジェクトを取得
			objOutStream=Connector.openOutputStream("scratchpad:///0;pos=0");
			bytData=new byte[128];
			//データが終わるまでスクラッチパッドに書き込む
			while ((intLength=objInStream.read(bytData)) != -1 )
			{
				objOutStream.write(bytData,0,intLength);
			}

			objInStream.close();
			objOutStream.close();
			httpConn.close();

		}
		catch (ConnectionNotFoundException e)
		{}
		catch(ConnectionException e)
		{}
		catch(IOException e)
		{}
	}
}

