import java.applet.Applet;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.*;
import java.security.AccessControlException;
import org.xml.sax.SAXException;

/**
 * xmlを読み込むアプレットサンプル
 * @author 珠あき
 */

public class AppletTest extends Applet {
	private static final long serialVersionUID = 9143221071140989842L;
	private String c="";
	private int i=0;
	long start, stop, diff;
	/**
	 * 起動時に行われるメソッド
	 */
	public void init() // 画像の読み込み
	{
		start = System.currentTimeMillis();
		c=i+":起動...\n"+c;i++;
		repaint();
		System.out.println("init()");
		System.out.println("このAppletはxmlをDOMで読み込んでそれを元の形式に近い形で表示するというプログラムです。");
		XmlReaderOfDOM r=null;
		String p=null;
		try {
			p=param();
			c=i+":読み込みファイル \""+p+"\"...\n"+c;i++;
			repaint();
			URL url = new URL(getCodeBase(),p);
			c=i+":読み込み完了...\n"+c;i++;
			repaint();
			c=i+":コンソールに展開開始...\n"+c;i++;
			repaint();
			r=new XmlReaderOfDOM(url);
			r.printAllDocument();
			c=i+":完了\n"+c;i++;
			repaint();
		} catch(AccessControlException e){
			c=i+":error:うまくファイルにアクセス出来ません。\n"+c;i++;
			System.out.println("うまくファイルにアクセス出来ません");
		} catch (NullPointerException e){
			c=i+":error:ファイルのURLがnullです。\n"+c;i++;
			System.out.println("パラメータがありません。\n<parame name=\"xmlUrl\" value=\"Filename\" />\nで指定して下さい。");
		} catch (FileNotFoundException e) {
			c=i+":error:URLがありません。\n"+c;i++;
			System.out.println("ファイルが見つからない、もしくはファイルへのURLの指定が間違っています。\n<parame name=\"xmlUrl\" value=\"Filename\" />\nで指定して下さい。");
			e.printStackTrace();
		} catch (SAXException e) {
			c=i+":error:タグに誤りがあります。\n"+c;i++;
			e.printStackTrace();
		} catch (IOException e) {
			c=i+":error:ファイル\""+p+"\"との通信に失敗しました。\n"+c;i++;
			e.printStackTrace();
		}
		stop = System.currentTimeMillis();
		diff=stop-start;
		c="所要時間("+diff+"ms)\n"+c;
		repaint();
	}
	public void start(){
		System.out.println("start()");
	}
	public void stop() {
		System.out.println("stop()");
	}

	public void destroy() {
		System.out.println("destroy()");
	}
	/**
	 * アプレット時にパラメータを取得する 
	 * 
	 * @throws URISyntaxException
	 */
	public String param() {
		String p;
		p = getParameter("xmlUrl");
		return p;
	}

	@SuppressWarnings("static-access")
	public void paint(Graphics g) {
		Dimension size=this.getSize();
		int h=size.height;
		int w=size.width;
		BufferedImage bi = new BufferedImage(h,w,BufferedImage.TYPE_4BYTE_ABGR_PRE);
		Graphics offi = bi.createGraphics();
		Graphics offg = offi;
		offg.setColor(Color.DARK_GRAY);
		offg.fillRect(0,0,w,h);
		offg.setColor(Color.LIGHT_GRAY);
        drawStrings(offi,c,5,15);
        g.drawImage(bi, 0, 0, this);
    }
	public void drawStrings(Graphics g,String str,int x,int y){
		int j=str.length();
		String s="";
		for(int i=0;i<j;i++){
			if(str.charAt(i)=='\n'){
				g.drawString(s,x,y);
				y+=g.getFont().getSize();
				s="";
			}else{
				s+=str.charAt(i);
			}
		}
	}
	/**
	 * ちらつき防止の為、オーバーライド
	 */
	public void update(Graphics g) {
		paint(g);
	}

}
