// Sample code file: CreateFieldTypeDlg.java

// Warning: This code has been marked up for HTML

/***************************************************************************
$name: CreateFieldTypeDlg.java 
$version: 1.0 
$date_modified: 210104 
$description:  
$owner: Beans for Novell Services Team 
Copyright (c) 1998 Novell, Inc. All Rights Reserved.

THIS WORK IS SUBJECT TO U.S. AND INTERNATIONAL COPYRIGHT LAWS AND TREATIES.
USE AND REDISTRIBUTION OF THIS WORK IS SUBJECT TO THE LICENSE AGREEMENT
ACCOMPANYING THE SOFTWARE DEVELOPMENT KIT (SDK) THAT CONTAINS THIS WORK.
PURSUANT TO THE SDK LICENSE AGREEMENT, NOVELL HEREBY GRANTS TO DEVELOPER A
ROYALTY-FREE, NON-EXCLUSIVE LICENSE TO INCLUDE NOVELL'S SAMPLE CODE IN ITS
PRODUCT. NOVELL GRANTS DEVELOPER WORLDWIDE DISTRIBUTION RIGHTS TO MARKET,
DISTRIBUTE, OR SELL NOVELL'S SAMPLE CODE AS A COMPONENT OF DEVELOPER'S
PRODUCTS. NOVELL SHALL HAVE NO OBLIGATIONS TO DEVELOPER OR DEVELOPER'S
CUSTOMERS WITH RESPECT TO THIS CODE.
****************************************************************************/
import java.awt.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JTextField;
import javax.swing.JComboBox;
import javax.swing.JCheckBox;
import com.novell.beans.NWDir.*;
import com.novell.beans.util.*;

public class CreateFieldTypeDlg extends JDialog
{
  JPanel contentPanel = new JPanel();
  NWDir theDirBean = null;
  JButton createBtn = new JButton();
  JButton closeBtn = new JButton();
  JLabel nameLabel = new JLabel();
  JTextField nameTextField = new JTextField();
  JLabel syntaxLabel = new JLabel();
  JLabel lowerLimitLabel = new JLabel();
  JTextField lowerLimitTextField = new JTextField();
  JLabel upperLimitLabel = new JLabel();
  JTextField upperLimitTextField = new JTextField();
  JLabel asn1Label = new JLabel();
  JTextField asn1TextField = new JTextField();
  NWFieldTypes fldTypes = null;
  NWSyntaxes syntaxes = null;
  JComboBox syntaxComboBox = new JComboBox();
  JCheckBox multiValueChkbox = new JCheckBox();

  public CreateFieldTypeDlg(JFrame frame,
                             NWDir aDirBean,
                             String title,
                             boolean modal)
  {
    super(frame, title, modal);

    theDirBean = aDirBean;
    fldTypes = theDirBean.getFieldTypes();
    syntaxes = theDirBean.getSyntaxes();

    try {
      initialize();
      setContentPane(contentPanel);
      pack();
    }
    catch (Exception e) {
      e.printStackTrace();
    }

    // center in window
    //
    Dimension  scrnSize = Toolkit.getDefaultToolkit().getScreenSize();
    setLocation((scrnSize.width / 2) - 250, (scrnSize.height / 2) - 150);
  }

  public CreateFieldTypeDlg(JFrame frame, NWDir aDirBean)
  {
    this(frame, aDirBean, "Creating NWFieldType", false);
  }

  public CreateFieldTypeDlg(JFrame frame, NWDir aDirBean, boolean modal)
  {
    this(frame, aDirBean, "Creating NWFieldType", modal);
  }

  public CreateFieldTypeDlg(JFrame frame, NWDir aDirBean, String title)
  {
    this(frame, aDirBean, title, false);
  }

  public void initialize() throws Exception
  {
    setSize(300, 200);

    contentPanel.setPreferredSize(new Dimension(300, 200));
    contentPanel.setSize(300, 200);
    contentPanel.setLayout(null);

    multiValueChkbox.setText("MultiValue");
    multiValueChkbox.setPreferredSize(new Dimension(96, 20));
    contentPanel.add(multiValueChkbox);
    multiValueChkbox.setBounds(6, 2, 96, 20);

    nameLabel.setText("FieldType Name:");
    nameLabel.setPreferredSize(new Dimension(96, 20));
    contentPanel.add(nameLabel);
    nameLabel.setBounds(6, 24, 96, 20);
     
    nameTextField.setPreferredSize(new Dimension(190, 20));
    contentPanel.add(nameTextField);
    nameTextField.setBounds(106, 24, 190, 20);
     
    syntaxLabel.setText("Syntax:");
    syntaxLabel.setPreferredSize(new Dimension(96, 20));
    contentPanel.add(syntaxLabel);
    syntaxLabel.setBounds(6, 46, 96, 20);
     
    syntaxComboBox.addItemListener(new CreateFieldTypeDlg_syntaxComboBox_itemAdapter(this));
    syntaxComboBox.setPreferredSize(new Dimension(190, 20));
    contentPanel.add(syntaxComboBox);
    syntaxComboBox.setBounds(106, 46, 190, 20);
     
    lowerLimitLabel.setText("Lower Limit:");
    lowerLimitLabel.setPreferredSize(new Dimension(96, 20));
    contentPanel.add(lowerLimitLabel);
    lowerLimitLabel.setBounds(6, 68, 96, 20);
     
    lowerLimitTextField.setPreferredSize(new Dimension(190, 20));
    contentPanel.add(lowerLimitTextField);
    lowerLimitTextField.setBounds(106, 68, 190, 20);
     
    upperLimitLabel.setText("Upper Limit:");
    upperLimitLabel.setPreferredSize(new Dimension(96, 20));
    contentPanel.add(upperLimitLabel);
    upperLimitLabel.setBounds(6, 90, 96, 20);
     
    upperLimitTextField.setPreferredSize(new Dimension(190, 20));
    contentPanel.add(upperLimitTextField);
    upperLimitTextField.setBounds(106, 90, 190, 20);
     
    asn1Label.setText("ASN1 Name:");
    asn1Label.setPreferredSize(new Dimension(96, 20));
    contentPanel.add(asn1Label);
    asn1Label.setBounds(6, 112, 96, 20);
     
    asn1TextField.setPreferredSize(new Dimension(190, 20));
    contentPanel.add(asn1TextField);
    asn1TextField.setBounds(106, 112, 190, 20);
     
    createBtn.setText("Create FieldType");
    createBtn.addActionListener(new CreateFieldTypeDlg_createBtn_actionAdapter(this));
    createBtn.setPreferredSize(new Dimension(106, 20));
    createBtn.setMargin(new Insets(2, 2, 2, 2));
    contentPanel.add(createBtn);
    createBtn.setBounds(46, 144, 106, 20);
     
    closeBtn.setText("Close");
    closeBtn.addActionListener(new CreateFieldTypeDlg_closeBtn_actionAdapter(this));
    closeBtn.setPreferredSize(new Dimension(106, 20));
    closeBtn.setMargin(new Insets(2, 2, 2, 2));
    contentPanel.add(closeBtn);
    closeBtn.setBounds(176, 144, 106, 20);

    addWindowListener(new CreateFieldTypeDlgCloser(this));

    loadSyntaxes();
  }

  protected void loadSyntaxes()
  {
       Cursor  savedCursor = this.getCursor();
       this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
       
       syntaxComboBox.setVisible(false);
       if (syntaxComboBox.getItemCount() > 0) {
          syntaxComboBox.removeAllItems();
       }

       if (syntaxes != null) {
           while (syntaxes.hasMoreElements()) {
               NWSyntax  syntax = syntaxes.next();
               String  syntaxName = syntax.getName();
               syntaxComboBox.addItem(syntaxName);
           }
       }

       syntaxComboBox.setVisible(true);
       syntaxComboBox.validate();
       
       this.setCursor(savedCursor);
  }

  void createFieldTypeDlg_WindowClosing(WindowEvent e)
  {
       this.dispose();
  }

  void createBtn_actionPerformed(ActionEvent evt)
  {
       String  newFldTypeName = nameTextField.getText();
       if ((newFldTypeName == null) || (newFldTypeName.length() <= 0)) {
           return;
       }

       String  syntaxName = (String)syntaxComboBox.getSelectedItem();
       if ((syntaxName == null) || (syntaxName.length() <= 0)) {
           return;
       }

       // create the new fieldType template
       //
       NWFieldType newFldType = null;
       try {
           newFldType = theDirBean.createFieldType(newFldTypeName,
                                                   NWSyntax.mapStringToId(syntaxName));

           if (multiValueChkbox != null) {
               newFldType.setSingleValued(multiValueChkbox.isSelected());
           }

           String  lowerLimitStr = lowerLimitTextField.getText();
           if ((lowerLimitStr != null) && (lowerLimitStr.length() > 0)) {
               newFldType.setLowerLimit(new Integer(lowerLimitStr).intValue());
           }

           String  upperLimitStr = upperLimitTextField.getText();
           if ((upperLimitStr != null) && (upperLimitStr.length() > 0)) {
               newFldType.setUpperLimit(new Integer(upperLimitStr).intValue());
           }

           String  asn1Str = asn1TextField.getText();
           if ((asn1Str != null) && (asn1Str.length() > 0)) {
               newFldType.setAsn1Name(asn1Str.getBytes());
           }
   
           // add the new fieldType
           //
           fldTypes.addElement(newFldType);
       } catch(NWBeanException e) {
           ((DSAdmin)getParent()).showMessage(e.getMessage()
                                                   +"  -  " +e.getErrorMessage());
       }

       nameTextField.setText("");
       lowerLimitTextField.setText("");
       upperLimitTextField.setText("");
       asn1TextField.setText("");
       multiValueChkbox.setSelected(false);
  }

  void syntaxComboBox_itemStateChanged(ItemEvent e)
  {
  }

  void closeBtn_actionPerformed(ActionEvent e)
  {
       this.dispose();
  }
}

class CreateFieldTypeDlgCloser extends WindowAdapter
{
   CreateFieldTypeDlg    theDlg = null;

   public CreateFieldTypeDlgCloser(CreateFieldTypeDlg aDlg)
   {
      theDlg = aDlg;
   }

   public void windowClosing(WindowEvent e)
   {
      theDlg.createFieldTypeDlg_WindowClosing(e);
   }
}

class CreateFieldTypeDlg_createBtn_actionAdapter implements java.awt.event.ActionListener
{
  CreateFieldTypeDlg adaptee;

  CreateFieldTypeDlg_createBtn_actionAdapter(CreateFieldTypeDlg adaptee)
  {
    this.adaptee = adaptee;
  }

  public void actionPerformed(ActionEvent e)
  {
    adaptee.createBtn_actionPerformed(e);
  }
}

class CreateFieldTypeDlg_closeBtn_actionAdapter implements java.awt.event.ActionListener
{
  CreateFieldTypeDlg adaptee;

  CreateFieldTypeDlg_closeBtn_actionAdapter(CreateFieldTypeDlg adaptee)
  {
    this.adaptee = adaptee;
  }

  public void actionPerformed(ActionEvent e)
  {
    adaptee.closeBtn_actionPerformed(e);
  }
}

class CreateFieldTypeDlg_syntaxComboBox_itemAdapter implements java.awt.event.ItemListener
{
  CreateFieldTypeDlg adaptee;

  CreateFieldTypeDlg_syntaxComboBox_itemAdapter(CreateFieldTypeDlg adaptee)
  {
    this.adaptee = adaptee;
  }

  public void itemStateChanged(ItemEvent e)
  {
    adaptee.syntaxComboBox_itemStateChanged(e);
  }
}