/*
 * @(#)DocumentTypeDialog.java
 *
 * Copyright 2001 Nomura Research Institute, LTD. All rights reserved.
 *
 * RID-X ：ドキュメントタイプダイアログ
 *
 * @author  Intelligent Technology Inc.
 * @version 1.01 2001/05/08
 */
package jp.co.nri.rid.environment;

import java.io.*;
import java.util.*;
import java.text.*;
import java.net.URL;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.io.File;

import jp.co.iti.fagot.ZApp;
import jp.co.iti.fagot.doc.DocDocument;
import jp.co.iti.fagot.doc.DocManager;
import jp.co.iti.fagot.util.ZDebug;
import jp.co.iti.fagot.util.ZResource;
import jp.co.iti.fagot.util.ZProperties;
import jp.co.iti.fagot.util.ZString;


/**
 * ドキュメントタイプダイアログ
 */

public class DocumentTypeDialog {

    /** メインパネル        **/
    protected JPanel      mPanel  = null;
    /** Application         **/
    protected JTextField  mTApp   = null;
    /** Command             **/
    protected JTextField  mTCmd   = null;
    /** Command fileChooser **/
    protected JButton     mBCmd   = null;
    /** Extension           **/
    protected JTextField  mTExt   = null;
    /** View Extension      **/
    protected JTextField  mTVext  = null;

    /**
      * デフォルトコンストラクタ
      */
      public DocumentTypeDialog() {  }

    /**
      * 新規ダイアログ
      *
      * @param  DocumentType    label     DocumentTypeクラス
      * @return boolean     ボタンの状態true(OK)/false(Cancel)
      */
    public boolean newDocument(DocumentType dt) {

        JFrame frame = (JFrame)ZApp.getTheApp().getFrame();
        EnvDialog gdlg = new EnvDialog(frame, "Document Type (New)");

        //メインコンポーネント
        mPanel = crtPanel();
        // [メインコンポーネント]と[OK][CENCEL]
        gdlg.setControlPanel(mPanel);

        //ダイアログを表示する（モーダル）
        gdlg.doModal();

        // [生成]ボタンが押された場合に変更する
        boolean ret = gdlg.isOK();
        if (ret){
            //データ設定
            setDocumentType(dt);
        }   
        return ret;
    }


    /**
      * 編集ダイアログ
      *
      * @param  DocumentType    label     DocumentTypeクラス
      * @return boolean     ボタンの状態true(OK)/false(Cancel)
      */
    public boolean editDocument(DocumentType dt) {

        String app,cmd,ext,view;
        JFrame frame = (JFrame)ZApp.getTheApp().getFrame();
        EnvDialog gdlg = new EnvDialog(frame, "Document Type (Edit)");

        if (dt.app  != null) app  = dt.app;  else app  = "";
        if (dt.cmd  != null) cmd  = dt.cmd;  else cmd  = "";
        if (dt.ext  != null) ext  = dt.ext;  else ext  = "";
        if (dt.view != null) view = dt.view; else view = "";

        //メインコンポーネント
        mPanel = crtPanel();

        //データ設定
        mTApp.setText(app);
        mTApp.setColumns(Math.max(20, app.length()));
        
        mTCmd.setText(cmd); 
        mTCmd.setColumns(Math.max(20, cmd.length()));
        
        mTExt.setText(ext);
        mTExt.setColumns(Math.max(20, ext.length()));
        
        mTVext.setText(view);
        mTVext.setColumns(Math.max(20, view.length()));

        // [メインコンポーネント]と[OK][CENCEL]
        gdlg.setControlPanel(mPanel);

        //ダイアログを表示する（モーダル）
        gdlg.doModal();

        // [生成]ボタンが押された場合に変更する
        boolean ret = gdlg.isOK();
        if (ret){
            //データ設定
            setDocumentType(dt);
        }   
        return ret;
    }

    /**
      * ダイアログ生成
      *
      * @return JPanel
      */
    public JPanel crtPanel() {

        //メインコンポーネント
        mPanel = new JPanel();

        // Layoutを「GridBagLayout」にする
        GridBagLayout mLayout = new GridBagLayout();
        mPanel.setLayout(mLayout);

        // Layout制約の作成
        GridBagConstraints lgbc = createLabelConstraints();
        GridBagConstraints cgbc = createComponentConstraints();

        //ラベル
        lgbc.gridx      = 0;
        lgbc.gridy      = 0;
        JLabel label = new JLabel("Application");
        mLayout.setConstraints(label, lgbc);
        mPanel.add( label );

        //Application
        cgbc.gridx      = 1;
        cgbc.gridy      = 0;
        mTApp = new JTextField("",20);
        mLayout.setConstraints(mTApp, cgbc);
        mPanel.add( mTApp );

        //ラベル
        lgbc.gridx      = 0;
        lgbc.gridy      = 1;
        label = new JLabel("Command");
        mLayout.setConstraints(label, lgbc);
        mPanel.add( label );

        //Command
        cgbc.gridx      = 1;
        cgbc.gridy      = 1;
        mTCmd = new JTextField("",20);
        mLayout.setConstraints(mTCmd, cgbc);
        mPanel.add( mTCmd );

        //ラベル
        lgbc.gridx      = 0;
        lgbc.gridy      = 2;
        label = new JLabel("Extension");
        mLayout.setConstraints(label, lgbc);
        mPanel.add( label );

        //Command fileChooser
        cgbc.gridx      = 2;
        cgbc.gridy      = 1;
        cgbc.weightx = 0.0 ;
        mBCmd = new JButton("...");
        mLayout.setConstraints(mBCmd, cgbc);
        mPanel.add( mBCmd );
        mBCmd.addActionListener(
            new ActionListener() {
                public void actionPerformed(ActionEvent e) { fileChooser(); }
            }
        );

        //Extension
        cgbc.gridx      = 1;
        cgbc.gridy      = 2;
        mTExt = new JTextField("",20);
        mLayout.setConstraints(mTExt, cgbc);
        mPanel.add( mTExt );

        //ラベル
        lgbc.gridx      = 0;
        lgbc.gridy      = 3;
        label = new JLabel("View Extension");
        mLayout.setConstraints(label, lgbc);
        mPanel.add( label );

        //View Extension
        cgbc.gridx      = 1;
        cgbc.gridy      = 3;
        mTVext = new JTextField("",20);
        mLayout.setConstraints(mTVext, cgbc);
        mPanel.add( mTVext );

        return mPanel;
    }


    /**
      * ドキュメントタイプの設定
      *
      * @param  DocumentType    label     DocumentTypeクラス
      * @return boolean     ボタンの状態true(OK)/false(Cancel)
      */
    public void setDocumentType(DocumentType dt) {
        dt.app  = getAppText();    //Applicationの文字列を取得
        dt.cmd  = getCmdText();    //Commandの文字列を取得
        dt.ext  = getExtText();    //Extensionの文字列を取得
        dt.view = getVExtText();   //View Extensionの文字列を取得
    }

    /**
      * ラベル用レイアウト制約の作成
      *
      * @return GridBagConstraints
      */
    private GridBagConstraints createLabelConstraints() {
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.anchor  = GridBagConstraints.NORTHWEST;
        gbc.weightx = 0.0 ;
        gbc.insets  = new Insets(0,10,0,10) ;
        return gbc;
    }


    /**
      * コンポーネント用レイアウト制約の作成
      *
      * @return GridBagConstraints
      */
    private GridBagConstraints createComponentConstraints() {
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.fill    = GridBagConstraints.BOTH;
        gbc.weightx = 1.0 ;
        gbc.insets    = new Insets(0,0,0,10) ;
        return gbc;
    }

    /**
      * fileChooser
      *
      * @return void
      */
    public void fileChooser() {
        // FileChooser
        EnvFileChooser fileChooser = new EnvFileChooser();
        String szFile = fileChooser.show(ZApp.getTheApp().getFrame(), getCmdText(), JFileChooser.FILES_AND_DIRECTORIES);
        // [OK]ボタンの場合、
        if (szFile != null) mTCmd.setText(szFile);
    }

    /**
      * Applicationの文字列を取得
      *
      * @return String
      */
    private String getAppText(){
        String szTmp = mTApp.getText();
        if ( szTmp == null || szTmp.equals("") ) {  return null;  }
        return szTmp;
    }

    /**
      * Commandの文字列を取得
      *
      * @return String
      */
    private String getCmdText(){
        String szTmp = mTCmd.getText();
        if ( szTmp == null || szTmp.equals("") ) {  return null;  }
        return szTmp;
    }

    /**
      * Extensionの文字列を取得
      *
      * @return String
      */
    private String getExtText(){
        String szTmp = mTExt.getText();
        if ( szTmp == null || szTmp.equals("") ) {  return null;  }
        return szTmp;
    }

    /**
      * View Extensionの文字列を取得
      *
      * @return String
      */
    private String getVExtText(){
        String szTmp = mTVext.getText();
        if ( szTmp == null || szTmp.equals("") ) {  return null;  }
        return szTmp;
    }
}
