/*
 * LOGICAL-PARADOX.ORG
 * Copyright (C)2005 satoshi akabane(akabane@logical-paradox.org)
 * $Id: NetworkViewPanel.java,v 1.3 2005/03/18 13:55:26 rampil Exp $
 */
package org.logical_paradox.testsite.oln.view;

import java.awt.BorderLayout;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JPanel;

import org.logical_paradox.testsite.oln.model.handler.NetViewCanvasMouseListener;
import org.logical_paradox.testsite.oln.model.handler.NotifyConfigureBtnListener;
import org.logical_paradox.testsite.oln.object.AppContext;
import org.logical_paradox.testsite.oln.object.RequestContext;

/**
 * ネットワークビューフレーム
 * @author satoshi akabane@logical-paradox.org
 * @version $Revision: 1.3 $
 */
public class NetworkViewPanel extends JPanel {
	/** アプリケーションコンテキスト */
	private final AppContext context_;

	/** 最適ノード選択実行通知ボタン */
	private JButton doNotifyConfigure;

	/**
	 * コンストラクタ
	 * @param context アプリケーションコンテキスト
	 */
	private NetworkViewPanel(AppContext context) {
		context_ = context;
	}
	/**
	 * アプリケーションコンテキストを返す
	 * @return アプリケーションコンテキスト
	 */
	protected AppContext getAppContext() {
		return context_;
	}
	/**
	 * ネットワークビューフレームを初期化する
	 * @param topo トポロジー情報
	 * @throws Exception 初期化処理中に発生した例外
	 */
	public static final NetworkViewPanel init(AppContext context) throws Exception {
		NetworkViewPanel panel = new NetworkViewPanel(context);
		panel.setLayout(new BorderLayout());
		// キャンバス
		NetworkViewCanvas canvas = new NetworkViewCanvas(context);
		NetViewCanvasMouseListener mouseListener = new NetViewCanvasMouseListener(context, new RequestContext());
		canvas.addMouseMotionListener(mouseListener);
		canvas.addMouseListener(mouseListener);
		panel.add(canvas, BorderLayout.CENTER);

		// 下部パネル
		JPanel controlPanel = new JPanel();
		controlPanel.setLayout(new GridLayout(1,2));

		// ノード情報表示領域
		controlPanel.add(new NodeInfoPanel(context));
		// 最適ノード選択処理実行ボタン
		panel.doNotifyConfigure = new JButton("Notify configure");
		NotifyConfigureBtnListener notifyButtonListener = new NotifyConfigureBtnListener(context, new RequestContext());
		panel.doNotifyConfigure.addActionListener(notifyButtonListener);
		controlPanel.add(panel.doNotifyConfigure);

		panel.add(controlPanel, BorderLayout.SOUTH);
		return panel;
	}
}
