org.archiviststoolkit.editor.NameFields.java Source code

Java tutorial

Introduction

Here is the source code for org.archiviststoolkit.editor.NameFields.java

Source

/**
 * Archivists' Toolkit(TM) Copyright  2005-2007 Regents of the University of California, New York University, & Five Colleges, Inc.
 * All rights reserved.
 *
 * This software is free. You can redistribute it and / or modify it under the terms of the Educational Community License (ECL)
 * version 1.0 (http://www.opensource.org/licenses/ecl1.php)
 *
 * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ECL license for more details about permissions and limitations.
 *
 *
 * Archivists' Toolkit(TM)
 * http://www.archiviststoolkit.org
 * info@archiviststoolkit.org
 *
 * Created by JFormDesigner on Sat Aug 27 11:09:03 EDT 2005
 */

package org.archiviststoolkit.editor;

import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.HashMap;
import javax.swing.*;

import com.jgoodies.forms.factories.*;
import com.jgoodies.forms.layout.*;
import org.archiviststoolkit.model.*;
import org.archiviststoolkit.mydomain.*;
import org.archiviststoolkit.mydomain.DomainObject;
import org.archiviststoolkit.mydomain.DomainEditorFields;
import org.archiviststoolkit.mydomain.DomainSortableTable;
import org.archiviststoolkit.swing.*;
import org.archiviststoolkit.swing.ATBasicComponentFactory;
import org.archiviststoolkit.structure.ATFieldInfo;
import org.archiviststoolkit.util.SequencedObjectsUtils;
import org.archiviststoolkit.exceptions.DomainEditorCreationException;
import org.archiviststoolkit.exceptions.ObjectNotRemovedException;
import org.archiviststoolkit.dialog.ErrorDialog;
import org.archiviststoolkit.plugin.ATPlugin;
import org.archiviststoolkit.plugin.ATPluginFactory;

public class NameFields extends DomainEditorFields {
    private ArrayList<ATPlugin> plugins = null; // stores any embedded editor plugins

    public NameFields() {
        super();
        initComponents();
        getNameContactNotesTable().setTransferable();
        initAccess();
        currentPrimaryNamePanel = detailsPanel;
        initPlugins();
    }

    private void addNote(String whereString) {

        Names namesModel = (Names) super.getModel();
        NameContactNotes newNote;
        DomainEditor dialog = null;
        try {
            dialog = DomainEditorFactory.getInstance().createDomainEditorWithParent(NameContactNotes.class,
                    this.getParentEditor(), false);
        } catch (DomainEditorCreationException e) {
            new ErrorDialog(getParentEditor(), "Error creating editor for NameContactNotes", e).showDialog();

        }
        dialog.setNewRecord(true);
        Boolean done = false;
        int sequenceNumber = 0;
        Boolean first = true;
        int returnStatus;

        while (!done) {
            newNote = new NameContactNotes(namesModel);
            if (first) {
                sequenceNumber = SequencedObjectsUtils.determineSequenceOfNewItem(whereString,
                        nameContactNotesTable);
                first = false;
            } else {
                sequenceNumber++;
            }
            newNote.setSequenceNumber(sequenceNumber);
            dialog.setModel(newNote, null);
            returnStatus = dialog.showDialog();
            if (returnStatus == javax.swing.JOptionPane.OK_OPTION) {
                namesModel.addNameContactNote(newNote);
                nameContactNotesTable.getEventList().add(newNote);
                done = true;
            } else if (returnStatus == StandardEditor.OK_AND_ANOTHER_OPTION) {
                namesModel.addNameContactNote(newNote);
                nameContactNotesTable.getEventList().add(newNote);
            } else {
                done = true;
            }
        }
        dialog.setNewRecord(false);

    }

    private void removeContactNoteButtonActionPerformed() {
        try {
            removeContactNote();
        } catch (ObjectNotRemovedException e) {
            new ErrorDialog("Contact Note not removed", e).showDialog();
        }
    }

    private void nameContactNotesTableMousePressed(MouseEvent e) {
        if (e.isPopupTrigger()) {
            insertContactNotePopUpMenu.show(e.getComponent(), e.getX(), e.getY());
        }
    }

    private void nameContactNotesTableMouseReleased(MouseEvent e) {
        if (e.isPopupTrigger()) {
            insertContactNotePopUpMenu.show(e.getComponent(), e.getX(), e.getY());
        }
    }

    private void addNoteButtonActionPerformed() {
        if (nameContactNotesTable.getSelectedRow() == -1) {
            addNote(SequencedObjectsUtils.ADD_AT_END);
        } else {
            addNote(SequencedObjectsUtils.ADD_ABOVE_SELECTION);
        }
    }

    public JButton getAddNoteButton() {
        return addNoteButton;
    }

    private void nonPreferredNamesTableMouseClicked(MouseEvent e) {
        handleTableMouseClick(e, nonPreferredNamesTable, NonPreferredNames.class);
    }

    private void nameContactNotesTableMouseClicked(MouseEvent e) {
        handleTableMouseClick(e, nameContactNotesTable, NameContactNotes.class);
    }

    private void addNonPreferredNameButtonActionPerformed() {
        Names namesModel = (Names) this.getModel();
        NonPreferredNames newNonPreferredName;
        DomainEditor dialogNonPreferredNames = null;
        try {
            dialogNonPreferredNames = DomainEditorFactory.getInstance()
                    .createDomainEditorWithParent(NonPreferredNames.class, this.getParentEditor(), false);
        } catch (DomainEditorCreationException e) {
            new ErrorDialog(getParentEditor(), "Error creating editor for NonPreferredNames", e).showDialog();

        }
        dialogNonPreferredNames.setNewRecord(true);

        int returnStatus;
        Boolean done = false;
        while (!done) {
            newNonPreferredName = new NonPreferredNames(namesModel);
            newNonPreferredName.setNameType(namesModel.getNameType());
            dialogNonPreferredNames.setModel(newNonPreferredName, null);
            returnStatus = dialogNonPreferredNames.showDialog();
            if (returnStatus == JOptionPane.OK_OPTION) {
                namesModel.addNonPreferredName(newNonPreferredName);
                nonPreferredNamesTable.getEventList().add(newNonPreferredName);
                done = true;
            } else if (returnStatus == StandardEditor.OK_AND_ANOTHER_OPTION) {
                namesModel.addNonPreferredName(newNonPreferredName);
                nonPreferredNamesTable.getEventList().add(newNonPreferredName);
            } else {
                done = true;
            }
        }
    }

    private void removeNonPreferredNameButtonActionPerformed() {
        try {
            this.removeRelatedTableRow(nonPreferredNamesTable, null, super.getModel());
        } catch (ObjectNotRemovedException e) {
            new ErrorDialog("Non-preferred name not removed", e).showDialog();
        }
        nonPreferredNamesTable.updateCollection(((Names) super.getModel()).getNonPreferredNames());
    }

    private void initComponents() {
        // JFormDesigner - Component initialization - DO NOT MODIFY  //GEN-BEGIN:initComponents
        // Generated using JFormDesigner non-commercial license
        sortNameDisplay = ATBasicComponentFactory
                .createTextField(detailsModel.getModel(Names.PROPERTYNAME_SORT_NAME));
        tabbedPane = new JTabbedPane();
        detailsContainer = new JPanel();
        detailsPanel = new JPanel();
        separator3 = new JSeparator();
        descriptionPanel = new JPanel();
        label_nameDescriptionNote2 = new JLabel();
        nameDescriptionType = ATBasicComponentFactory.createComboBox(detailsModel,
                Names.PROPERTYNAME_DESCRIPTION_TYPE, Names.class);
        label_nameDescriptionNote = new JLabel();
        scrollPane2 = new JScrollPane();
        nameDescriptionNote = ATBasicComponentFactory
                .createTextArea(detailsModel.getModel(Names.PROPERTYNAME_DESCRIPTION_NOTE));
        label_nameCitation = new JLabel();
        scrollPane23 = new JScrollPane();
        nameCitation = ATBasicComponentFactory.createTextArea(detailsModel.getModel(Names.PROPERTYNAME_CITATION));
        nonPreferredNamePanel = new JPanel();
        label_subjectScopeNote4 = new JLabel();
        scrollPane1 = new JScrollPane();
        nonPreferredNamesTable = new DomainSortableTable(NonPreferredNames.class,
                NonPreferredNames.PROPERTYNAME_SORT_NAME);
        panel1 = new JPanel();
        addNonPreferredNameButton = new JButton();
        removeNonPreferredNameButton = new JButton();
        separator1 = new JSeparator();
        label_subjectScopeNote3 = new JLabel();
        scrollPane5 = new JScrollPane();
        accessionsTable = new DomainSortableTable(Accessions.class, Accessions.PROPERTYNAME_ACCESSION_NUMBER);
        separator2 = new JSeparator();
        label_subjectScopeNote2 = new JLabel();
        scrollPane4 = new JScrollPane();
        resourcesTable = new ResourceAndComponentLinkTable(Resources.class,
                Resources.PROPERTYNAME_RESOURCE_IDENTIFIER);
        label1 = new JLabel();
        separator4 = new JSeparator();
        label_subjectScopeNote5 = new JLabel();
        scrollPane6 = new JScrollPane();
        digitalObjectsTable = new DomainSortableTable(DigitalObjects.class,
                DigitalObjects.PROPERTYNAME_METS_IDENTIFIER);
        contactInfoPanel = new JPanel();
        label_nameContactAddress3 = new JLabel();
        salutation = ATBasicComponentFactory.createTextField(detailsModel.getModel(Names.PROPERTYNAME_SALUTATION));
        label_nameContactAddress1 = new JLabel();
        nameContactAddress1 = ATBasicComponentFactory
                .createTextField(detailsModel.getModel(Names.PROPERTYNAME_CONTACT_ADDRESS_1));
        label_nameContactAddress2 = new JLabel();
        nameContactAddress2 = ATBasicComponentFactory
                .createTextField(detailsModel.getModel(Names.PROPERTYNAME_CONTACT_ADDRESS_2));
        label_nameContactCity = new JLabel();
        nameContactCity = ATBasicComponentFactory
                .createTextField(detailsModel.getModel(Names.PROPERTYNAME_CONTACT_CITY));
        label_nameContactRegion = new JLabel();
        nameContactRegion = ATBasicComponentFactory
                .createTextField(detailsModel.getModel(Names.PROPERTYNAME_CONTACT_REGION));
        label_nameContactMailCode = new JLabel();
        nameContactMailCode = ATBasicComponentFactory
                .createTextField(detailsModel.getModel(Names.PROPERTYNAME_CONTACT_MAIL_CODE));
        label_nameContactCountry = new JLabel();
        nameContactCountry = ATBasicComponentFactory
                .createTextField(detailsModel.getModel(Names.PROPERTYNAME_CONTACT_COUNTRY));
        label_nameContactPhone = new JLabel();
        nameContactPhone = ATBasicComponentFactory
                .createTextField(detailsModel.getModel(Names.PROPERTYNAME_CONTACT_PHONE));
        label_nameContactFax = new JLabel();
        nameContactFax = ATBasicComponentFactory
                .createTextField(detailsModel.getModel(Names.PROPERTYNAME_CONTACT_FAX));
        label_nameContactEmail = new JLabel();
        nameContactEmail = ATBasicComponentFactory
                .createTextField(detailsModel.getModel(Names.PROPERTYNAME_CONTACT_EMAIL));
        label_nameContactName = new JLabel();
        nameContactName = ATBasicComponentFactory
                .createTextField(detailsModel.getModel(Names.PROPERTYNAME_CONTACT_NAME));
        label_nameContactNotes = new JLabel();
        scrollPane3 = new JScrollPane();
        nameContactNotesTable = new DomainSortedTable(NameContactNotes.class);
        panel2 = new JPanel();
        addNoteButton = new JButton();
        removeContactNoteButton = new JButton();
        CellConstraints cc = new CellConstraints();

        //======== this ========
        setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
        setBackground(new Color(200, 205, 232));
        setPreferredSize(new Dimension(900, 500));
        setBorder(Borders.DLU4_BORDER);
        setLayout(new FormLayout("default:grow", "default, fill:default:grow"));

        //---- sortNameDisplay ----
        sortNameDisplay.setEditable(false);
        sortNameDisplay.setBorder(null);
        sortNameDisplay.setForeground(new Color(0, 0, 102));
        sortNameDisplay.setSelectionColor(new Color(204, 0, 51));
        sortNameDisplay.setOpaque(false);
        add(sortNameDisplay, cc.xy(1, 1));

        //======== tabbedPane ========
        {
            tabbedPane.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
            tabbedPane.setBackground(new Color(200, 205, 232));
            tabbedPane.setOpaque(true);

            //======== detailsContainer ========
            {
                detailsContainer.setBackground(new Color(200, 205, 232));
                detailsContainer.setLayout(new FormLayout(ColumnSpec.decodeSpecs("default:grow"),
                        new RowSpec[] { FormFactory.DEFAULT_ROWSPEC, FormFactory.LINE_GAP_ROWSPEC,
                                FormFactory.DEFAULT_ROWSPEC, FormFactory.LINE_GAP_ROWSPEC,
                                FormFactory.DEFAULT_ROWSPEC }));

                //======== detailsPanel ========
                {
                    detailsPanel.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
                    detailsPanel.setBackground(new Color(200, 205, 232));
                    detailsPanel.setLayout(new FormLayout(
                            new ColumnSpec[] { new ColumnSpec(ColumnSpec.RIGHT, Sizes.DEFAULT, FormSpec.NO_GROW),
                                    FormFactory.LABEL_COMPONENT_GAP_COLSPEC,
                                    new ColumnSpec("max(default;300px):grow"),
                                    FormFactory.LABEL_COMPONENT_GAP_COLSPEC, FormFactory.DEFAULT_COLSPEC },
                            new RowSpec[] { FormFactory.DEFAULT_ROWSPEC, FormFactory.LINE_GAP_ROWSPEC,
                                    FormFactory.DEFAULT_ROWSPEC, FormFactory.LINE_GAP_ROWSPEC,
                                    FormFactory.DEFAULT_ROWSPEC, FormFactory.LINE_GAP_ROWSPEC,
                                    FormFactory.DEFAULT_ROWSPEC, FormFactory.LINE_GAP_ROWSPEC,
                                    FormFactory.DEFAULT_ROWSPEC, FormFactory.LINE_GAP_ROWSPEC,
                                    FormFactory.DEFAULT_ROWSPEC, FormFactory.LINE_GAP_ROWSPEC,
                                    FormFactory.DEFAULT_ROWSPEC, FormFactory.LINE_GAP_ROWSPEC,
                                    FormFactory.DEFAULT_ROWSPEC, FormFactory.LINE_GAP_ROWSPEC,
                                    FormFactory.DEFAULT_ROWSPEC, FormFactory.LINE_GAP_ROWSPEC,
                                    FormFactory.DEFAULT_ROWSPEC, FormFactory.LINE_GAP_ROWSPEC,
                                    FormFactory.DEFAULT_ROWSPEC, FormFactory.LINE_GAP_ROWSPEC,
                                    FormFactory.DEFAULT_ROWSPEC }));
                }
                detailsContainer.add(detailsPanel, cc.xy(1, 1));

                //---- separator3 ----
                separator3.setBackground(new Color(220, 220, 232));
                separator3.setForeground(new Color(147, 131, 86));
                separator3.setMinimumSize(new Dimension(1, 10));
                separator3.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
                detailsContainer.add(separator3, cc.xy(1, 3));

                //======== descriptionPanel ========
                {
                    descriptionPanel.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
                    descriptionPanel.setBackground(new Color(200, 205, 232));
                    descriptionPanel.setLayout(new FormLayout(
                            new ColumnSpec[] { FormFactory.DEFAULT_COLSPEC, FormFactory.LABEL_COMPONENT_GAP_COLSPEC,
                                    new ColumnSpec(ColumnSpec.FILL, Sizes.DEFAULT, FormSpec.DEFAULT_GROW) },
                            new RowSpec[] { new RowSpec(RowSpec.TOP, Sizes.DEFAULT, FormSpec.NO_GROW),
                                    FormFactory.LINE_GAP_ROWSPEC,
                                    new RowSpec(RowSpec.TOP, Sizes.DEFAULT, FormSpec.NO_GROW),
                                    FormFactory.LINE_GAP_ROWSPEC,
                                    new RowSpec(RowSpec.TOP, Sizes.DEFAULT, FormSpec.NO_GROW) }));

                    //---- label_nameDescriptionNote2 ----
                    label_nameDescriptionNote2.setText("Name Description Type");
                    label_nameDescriptionNote2.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
                    ATFieldInfo.assignLabelInfo(label_nameDescriptionNote2, Names.class,
                            Names.PROPERTYNAME_DESCRIPTION_TYPE);
                    descriptionPanel.add(label_nameDescriptionNote2, cc.xy(1, 1));

                    //---- nameDescriptionType ----
                    nameDescriptionType.setOpaque(false);
                    nameDescriptionType.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
                    descriptionPanel.add(nameDescriptionType,
                            cc.xywh(3, 1, 1, 1, CellConstraints.LEFT, CellConstraints.DEFAULT));

                    //---- label_nameDescriptionNote ----
                    label_nameDescriptionNote.setText("Description Note");
                    label_nameDescriptionNote.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
                    ATFieldInfo.assignLabelInfo(label_nameDescriptionNote, Names.class,
                            Names.PROPERTYNAME_DESCRIPTION_NOTE);
                    descriptionPanel.add(label_nameDescriptionNote, cc.xy(1, 3));

                    //======== scrollPane2 ========
                    {
                        scrollPane2.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
                        scrollPane2.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));

                        //---- nameDescriptionNote ----
                        nameDescriptionNote.setRows(8);
                        nameDescriptionNote.setLineWrap(true);
                        nameDescriptionNote.setWrapStyleWord(true);
                        scrollPane2.setViewportView(nameDescriptionNote);
                    }
                    descriptionPanel.add(scrollPane2, cc.xy(3, 3));

                    //---- label_nameCitation ----
                    label_nameCitation.setText("Citation(s)");
                    label_nameCitation.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
                    ATFieldInfo.assignLabelInfo(label_nameCitation, Names.class, Names.PROPERTYNAME_CITATION);
                    descriptionPanel.add(label_nameCitation, cc.xy(1, 5));

                    //======== scrollPane23 ========
                    {
                        scrollPane23.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
                        scrollPane23.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));

                        //---- nameCitation ----
                        nameCitation.setRows(8);
                        nameCitation.setLineWrap(true);
                        nameCitation.setWrapStyleWord(true);
                        scrollPane23.setViewportView(nameCitation);
                    }
                    descriptionPanel.add(scrollPane23, cc.xy(3, 5));
                }
                detailsContainer.add(descriptionPanel, cc.xy(1, 5));
            }
            tabbedPane.addTab("Details", detailsContainer);

            //======== nonPreferredNamePanel ========
            {
                nonPreferredNamePanel.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
                nonPreferredNamePanel.setBackground(new Color(200, 205, 232));
                nonPreferredNamePanel.setLayout(new FormLayout(ColumnSpec.decodeSpecs("default:grow"),
                        new RowSpec[] { FormFactory.DEFAULT_ROWSPEC, FormFactory.LINE_GAP_ROWSPEC,
                                new RowSpec(RowSpec.CENTER, Sizes.DEFAULT, FormSpec.DEFAULT_GROW),
                                FormFactory.LINE_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC,
                                FormFactory.LINE_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC,
                                FormFactory.LINE_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC,
                                FormFactory.LINE_GAP_ROWSPEC,
                                new RowSpec(RowSpec.CENTER, Sizes.DEFAULT, FormSpec.DEFAULT_GROW),
                                FormFactory.LINE_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC,
                                FormFactory.LINE_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC,
                                FormFactory.LINE_GAP_ROWSPEC,
                                new RowSpec(RowSpec.CENTER, Sizes.DEFAULT, FormSpec.DEFAULT_GROW),
                                FormFactory.LINE_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC,
                                FormFactory.LINE_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC,
                                FormFactory.LINE_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC,
                                FormFactory.LINE_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC }));

                //---- label_subjectScopeNote4 ----
                label_subjectScopeNote4.setText("Non-Preferred Forms");
                label_subjectScopeNote4.setVerticalAlignment(SwingConstants.TOP);
                label_subjectScopeNote4.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
                nonPreferredNamePanel.add(label_subjectScopeNote4,
                        cc.xywh(1, 1, 1, 1, CellConstraints.DEFAULT, CellConstraints.TOP));

                //======== scrollPane1 ========
                {
                    scrollPane1.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
                    scrollPane1.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));

                    //---- nonPreferredNamesTable ----
                    nonPreferredNamesTable.setPreferredScrollableViewportSize(new Dimension(450, 120));
                    nonPreferredNamesTable.addMouseListener(new MouseAdapter() {
                        @Override
                        public void mouseClicked(MouseEvent e) {
                            nonPreferredNamesTableMouseClicked(e);
                        }
                    });
                    scrollPane1.setViewportView(nonPreferredNamesTable);
                }
                nonPreferredNamePanel.add(scrollPane1,
                        cc.xywh(1, 3, 1, 1, CellConstraints.DEFAULT, CellConstraints.FILL));

                //======== panel1 ========
                {
                    panel1.setBackground(new Color(231, 188, 251));
                    panel1.setOpaque(false);
                    panel1.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
                    panel1.setLayout(
                            new FormLayout(
                                    new ColumnSpec[] { FormFactory.DEFAULT_COLSPEC,
                                            FormFactory.LABEL_COMPONENT_GAP_COLSPEC, FormFactory.DEFAULT_COLSPEC },
                                    RowSpec.decodeSpecs("default")));

                    //---- addNonPreferredNameButton ----
                    addNonPreferredNameButton.setText("Add Non-Preferred Form");
                    addNonPreferredNameButton.setOpaque(false);
                    addNonPreferredNameButton.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
                    addNonPreferredNameButton.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                            addNonPreferredNameButtonActionPerformed();
                        }
                    });
                    panel1.add(addNonPreferredNameButton, cc.xy(1, 1));

                    //---- removeNonPreferredNameButton ----
                    removeNonPreferredNameButton.setText("Remove Non-Preferred Form");
                    removeNonPreferredNameButton.setOpaque(false);
                    removeNonPreferredNameButton.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
                    removeNonPreferredNameButton.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                            removeNonPreferredNameButtonActionPerformed();
                        }
                    });
                    panel1.add(removeNonPreferredNameButton, cc.xy(3, 1));
                }
                nonPreferredNamePanel.add(panel1,
                        cc.xywh(1, 5, 1, 1, CellConstraints.CENTER, CellConstraints.DEFAULT));

                //---- separator1 ----
                separator1.setBackground(new Color(220, 220, 232));
                separator1.setForeground(new Color(147, 131, 86));
                separator1.setMinimumSize(new Dimension(1, 10));
                separator1.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
                nonPreferredNamePanel.add(separator1, cc.xy(1, 7));

                //---- label_subjectScopeNote3 ----
                label_subjectScopeNote3.setText("Accessions");
                label_subjectScopeNote3.setVerticalAlignment(SwingConstants.TOP);
                label_subjectScopeNote3.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
                nonPreferredNamePanel.add(label_subjectScopeNote3,
                        cc.xywh(1, 9, 1, 1, CellConstraints.DEFAULT, CellConstraints.TOP));

                //======== scrollPane5 ========
                {
                    scrollPane5.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
                    scrollPane5.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));

                    //---- accessionsTable ----
                    accessionsTable.setPreferredScrollableViewportSize(new Dimension(450, 120));
                    scrollPane5.setViewportView(accessionsTable);
                }
                nonPreferredNamePanel.add(scrollPane5, cc.xy(1, 11));

                //---- separator2 ----
                separator2.setBackground(new Color(220, 220, 232));
                separator2.setForeground(new Color(147, 131, 86));
                separator2.setMinimumSize(new Dimension(1, 10));
                separator2.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
                nonPreferredNamePanel.add(separator2, cc.xy(1, 13));

                //---- label_subjectScopeNote2 ----
                label_subjectScopeNote2.setText("Resources");
                label_subjectScopeNote2.setVerticalAlignment(SwingConstants.TOP);
                label_subjectScopeNote2.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
                nonPreferredNamePanel.add(label_subjectScopeNote2, cc.xy(1, 15));

                //======== scrollPane4 ========
                {
                    scrollPane4.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
                    scrollPane4.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));

                    //---- resourcesTable ----
                    resourcesTable.setPreferredScrollableViewportSize(new Dimension(450, 120));
                    scrollPane4.setViewportView(resourcesTable);
                }
                nonPreferredNamePanel.add(scrollPane4, cc.xy(1, 17));

                //---- label1 ----
                label1.setText("Resources in Red have the subject term linked at the component level");
                label1.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
                nonPreferredNamePanel.add(label1, cc.xy(1, 19));

                //---- separator4 ----
                separator4.setBackground(new Color(220, 220, 232));
                separator4.setForeground(new Color(147, 131, 86));
                separator4.setMinimumSize(new Dimension(1, 10));
                separator4.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
                nonPreferredNamePanel.add(separator4, cc.xy(1, 21));

                //---- label_subjectScopeNote5 ----
                label_subjectScopeNote5.setText("Digital Objects");
                label_subjectScopeNote5.setVerticalAlignment(SwingConstants.TOP);
                label_subjectScopeNote5.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
                nonPreferredNamePanel.add(label_subjectScopeNote5, cc.xy(1, 23));

                //======== scrollPane6 ========
                {
                    scrollPane6.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
                    scrollPane6.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));

                    //---- digitalObjectsTable ----
                    digitalObjectsTable.setPreferredScrollableViewportSize(new Dimension(450, 120));
                    scrollPane6.setViewportView(digitalObjectsTable);
                }
                nonPreferredNamePanel.add(scrollPane6, cc.xy(1, 25));
            }
            tabbedPane.addTab("Non-Preferred Forms, Accessions, Resources & Digital Objects",
                    nonPreferredNamePanel);

            //======== contactInfoPanel ========
            {
                contactInfoPanel.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
                contactInfoPanel.setBackground(new Color(200, 205, 232));
                contactInfoPanel.setBorder(Borders.DLU2_BORDER);
                contactInfoPanel.setLayout(new FormLayout(
                        new ColumnSpec[] { FormFactory.DEFAULT_COLSPEC, FormFactory.LABEL_COMPONENT_GAP_COLSPEC,
                                new ColumnSpec("max(default;100px):grow"), FormFactory.LABEL_COMPONENT_GAP_COLSPEC,
                                FormFactory.DEFAULT_COLSPEC, FormFactory.LABEL_COMPONENT_GAP_COLSPEC,
                                new ColumnSpec(ColumnSpec.FILL, Sizes.DEFAULT, FormSpec.DEFAULT_GROW),
                                FormFactory.LABEL_COMPONENT_GAP_COLSPEC, FormFactory.DEFAULT_COLSPEC,
                                FormFactory.LABEL_COMPONENT_GAP_COLSPEC,
                                new ColumnSpec(ColumnSpec.FILL, Sizes.DEFAULT, FormSpec.DEFAULT_GROW) },
                        new RowSpec[] { FormFactory.DEFAULT_ROWSPEC, FormFactory.LINE_GAP_ROWSPEC,
                                FormFactory.DEFAULT_ROWSPEC, FormFactory.LINE_GAP_ROWSPEC,
                                FormFactory.DEFAULT_ROWSPEC, FormFactory.LINE_GAP_ROWSPEC,
                                FormFactory.DEFAULT_ROWSPEC, FormFactory.LINE_GAP_ROWSPEC,
                                FormFactory.DEFAULT_ROWSPEC, FormFactory.LINE_GAP_ROWSPEC,
                                FormFactory.DEFAULT_ROWSPEC, FormFactory.LINE_GAP_ROWSPEC,
                                FormFactory.DEFAULT_ROWSPEC, FormFactory.LINE_GAP_ROWSPEC,
                                FormFactory.DEFAULT_ROWSPEC, FormFactory.LINE_GAP_ROWSPEC,
                                new RowSpec(RowSpec.FILL, Sizes.DEFAULT, FormSpec.DEFAULT_GROW),
                                FormFactory.LINE_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC }));

                //---- label_nameContactAddress3 ----
                label_nameContactAddress3.setText("Salutation");
                label_nameContactAddress3.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
                ATFieldInfo.assignLabelInfo(label_nameContactAddress3, Names.class, Names.PROPERTYNAME_SALUTATION);
                contactInfoPanel.add(label_nameContactAddress3, cc.xy(1, 1));
                contactInfoPanel.add(salutation, cc.xywh(3, 1, 9, 1));

                //---- label_nameContactAddress1 ----
                label_nameContactAddress1.setText("Address");
                label_nameContactAddress1.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
                ATFieldInfo.assignLabelInfo(label_nameContactAddress1, Names.class,
                        Names.PROPERTYNAME_CONTACT_ADDRESS_1);
                contactInfoPanel.add(label_nameContactAddress1, cc.xy(1, 3));
                contactInfoPanel.add(nameContactAddress1, cc.xywh(3, 3, 9, 1));

                //---- label_nameContactAddress2 ----
                label_nameContactAddress2.setText("Address");
                label_nameContactAddress2.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
                ATFieldInfo.assignLabelInfo(label_nameContactAddress2, Names.class,
                        Names.PROPERTYNAME_CONTACT_ADDRESS_2);
                contactInfoPanel.add(label_nameContactAddress2, cc.xy(1, 5));
                contactInfoPanel.add(nameContactAddress2, cc.xywh(3, 5, 9, 1));

                //---- label_nameContactCity ----
                label_nameContactCity.setText("City");
                label_nameContactCity.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
                ATFieldInfo.assignLabelInfo(label_nameContactCity, Names.class, Names.PROPERTYNAME_CONTACT_CITY);
                contactInfoPanel.add(label_nameContactCity, cc.xy(1, 7));
                contactInfoPanel.add(nameContactCity, cc.xy(3, 7));

                //---- label_nameContactRegion ----
                label_nameContactRegion.setText("Region");
                label_nameContactRegion.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
                ATFieldInfo.assignLabelInfo(label_nameContactRegion, Names.class,
                        Names.PROPERTYNAME_CONTACT_REGION);
                contactInfoPanel.add(label_nameContactRegion, cc.xy(5, 7));
                contactInfoPanel.add(nameContactRegion, cc.xy(7, 7));

                //---- label_nameContactMailCode ----
                label_nameContactMailCode.setText("Mail Code");
                label_nameContactMailCode.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
                ATFieldInfo.assignLabelInfo(label_nameContactMailCode, Names.class,
                        Names.PROPERTYNAME_CONTACT_MAIL_CODE);
                contactInfoPanel.add(label_nameContactMailCode, cc.xy(9, 7));
                contactInfoPanel.add(nameContactMailCode, cc.xy(11, 7));

                //---- label_nameContactCountry ----
                label_nameContactCountry.setText("Country");
                label_nameContactCountry.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
                ATFieldInfo.assignLabelInfo(label_nameContactCountry, Names.class,
                        Names.PROPERTYNAME_CONTACT_COUNTRY);
                contactInfoPanel.add(label_nameContactCountry, cc.xy(1, 9));
                contactInfoPanel.add(nameContactCountry, cc.xywh(3, 9, 9, 1));

                //---- label_nameContactPhone ----
                label_nameContactPhone.setText("Telephone");
                label_nameContactPhone.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
                ATFieldInfo.assignLabelInfo(label_nameContactPhone, Names.class, Names.PROPERTYNAME_CONTACT_PHONE);
                contactInfoPanel.add(label_nameContactPhone, cc.xy(1, 11));
                contactInfoPanel.add(nameContactPhone, cc.xywh(3, 11, 5, 1));

                //---- label_nameContactFax ----
                label_nameContactFax.setText("FAX");
                label_nameContactFax.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
                ATFieldInfo.assignLabelInfo(label_nameContactFax, Names.class, Names.PROPERTYNAME_CONTACT_FAX);
                contactInfoPanel.add(label_nameContactFax, cc.xy(9, 11));
                contactInfoPanel.add(nameContactFax, cc.xy(11, 11));

                //---- label_nameContactEmail ----
                label_nameContactEmail.setText("e-mail");
                label_nameContactEmail.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
                ATFieldInfo.assignLabelInfo(label_nameContactEmail, Names.class, Names.PROPERTYNAME_CONTACT_EMAIL);
                contactInfoPanel.add(label_nameContactEmail, cc.xy(1, 13));
                contactInfoPanel.add(nameContactEmail, cc.xywh(3, 13, 9, 1));

                //---- label_nameContactName ----
                label_nameContactName.setText("Contact");
                label_nameContactName.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
                ATFieldInfo.assignLabelInfo(label_nameContactName, Names.class, Names.PROPERTYNAME_CONTACT_NAME);
                contactInfoPanel.add(label_nameContactName, cc.xy(1, 15));
                contactInfoPanel.add(nameContactName, cc.xywh(3, 15, 9, 1));

                //---- label_nameContactNotes ----
                label_nameContactNotes.setText("Notes");
                label_nameContactNotes.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
                contactInfoPanel.add(label_nameContactNotes,
                        cc.xywh(1, 17, 1, 1, CellConstraints.DEFAULT, CellConstraints.TOP));

                //======== scrollPane3 ========
                {
                    scrollPane3.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
                    scrollPane3.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));

                    //---- nameContactNotesTable ----
                    nameContactNotesTable.setPreferredScrollableViewportSize(new Dimension(450, 150));
                    nameContactNotesTable.addMouseListener(new MouseAdapter() {
                        @Override
                        public void mousePressed(MouseEvent e) {
                            nameContactNotesTableMousePressed(e);
                        }

                        @Override
                        public void mouseReleased(MouseEvent e) {
                            nameContactNotesTableMouseReleased(e);
                        }

                        @Override
                        public void mouseClicked(MouseEvent e) {
                            nameContactNotesTableMouseClicked(e);
                        }
                    });
                    scrollPane3.setViewportView(nameContactNotesTable);
                }
                contactInfoPanel.add(scrollPane3, cc.xywh(3, 17, 9, 1));

                //======== panel2 ========
                {
                    panel2.setBackground(new Color(231, 188, 251));
                    panel2.setOpaque(false);
                    panel2.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
                    panel2.setLayout(
                            new FormLayout(
                                    new ColumnSpec[] { FormFactory.DEFAULT_COLSPEC,
                                            FormFactory.LABEL_COMPONENT_GAP_COLSPEC, FormFactory.DEFAULT_COLSPEC },
                                    RowSpec.decodeSpecs("default")));

                    //---- addNoteButton ----
                    addNoteButton.setText("Add Note");
                    addNoteButton.setOpaque(false);
                    addNoteButton.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
                    addNoteButton.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                            addNoteButtonActionPerformed();
                        }
                    });
                    panel2.add(addNoteButton, cc.xy(1, 1));

                    //---- removeContactNoteButton ----
                    removeContactNoteButton.setText("Remove Contact Note");
                    removeContactNoteButton.setOpaque(false);
                    removeContactNoteButton.setFont(new Font("Trebuchet MS", Font.PLAIN, 13));
                    removeContactNoteButton.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                            removeContactNoteButtonActionPerformed();
                        }
                    });
                    panel2.add(removeContactNoteButton, cc.xy(3, 1));
                }
                contactInfoPanel.add(panel2, cc.xywh(3, 19, 9, 1, CellConstraints.CENTER, CellConstraints.DEFAULT));
            }
            tabbedPane.addTab("Contact Info", contactInfoPanel);

        }
        add(tabbedPane, cc.xy(1, 2));
        // JFormDesigner - End of component initialization  //GEN-END:initComponents
    }

    // JFormDesigner - Variables declaration - DO NOT MODIFY  //GEN-BEGIN:variables
    // Generated using JFormDesigner non-commercial license
    private JTextField sortNameDisplay;
    private JTabbedPane tabbedPane;
    private JPanel detailsContainer;
    private JPanel detailsPanel;
    private JSeparator separator3;
    private JPanel descriptionPanel;
    private JLabel label_nameDescriptionNote2;
    public JComboBox nameDescriptionType;
    private JLabel label_nameDescriptionNote;
    private JScrollPane scrollPane2;
    public JTextArea nameDescriptionNote;
    private JLabel label_nameCitation;
    private JScrollPane scrollPane23;
    public JTextArea nameCitation;
    private JPanel nonPreferredNamePanel;
    private JLabel label_subjectScopeNote4;
    private JScrollPane scrollPane1;
    private DomainSortableTable nonPreferredNamesTable;
    private JPanel panel1;
    private JButton addNonPreferredNameButton;
    private JButton removeNonPreferredNameButton;
    private JSeparator separator1;
    private JLabel label_subjectScopeNote3;
    private JScrollPane scrollPane5;
    private DomainSortableTable accessionsTable;
    private JSeparator separator2;
    private JLabel label_subjectScopeNote2;
    private JScrollPane scrollPane4;
    private ResourceAndComponentLinkTable resourcesTable;
    private JLabel label1;
    private JSeparator separator4;
    private JLabel label_subjectScopeNote5;
    private JScrollPane scrollPane6;
    private DomainSortableTable digitalObjectsTable;
    private JPanel contactInfoPanel;
    private JLabel label_nameContactAddress3;
    public JTextField salutation;
    private JLabel label_nameContactAddress1;
    public JTextField nameContactAddress1;
    private JLabel label_nameContactAddress2;
    public JTextField nameContactAddress2;
    private JLabel label_nameContactCity;
    public JTextField nameContactCity;
    private JLabel label_nameContactRegion;
    public JTextField nameContactRegion;
    private JLabel label_nameContactMailCode;
    public JTextField nameContactMailCode;
    private JLabel label_nameContactCountry;
    public JTextField nameContactCountry;
    private JLabel label_nameContactPhone;
    public JTextField nameContactPhone;
    private JLabel label_nameContactFax;
    public JTextField nameContactFax;
    private JLabel label_nameContactEmail;
    public JTextField nameContactEmail;
    private JLabel label_nameContactName;
    public JTextField nameContactName;
    private JLabel label_nameContactNotes;
    private JScrollPane scrollPane3;
    private DomainSortedTable nameContactNotesTable;
    private JPanel panel2;
    private JButton addNoteButton;
    private JButton removeContactNoteButton;
    // JFormDesigner - End of variables declaration  //GEN-END:variables

    private ActionListener menuListener = new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            JMenuItem selectedItem = (JMenuItem) e.getSource();
            addNote(selectedItem.getText());
        }
    };

    protected ActionListener menuDeleteListener = new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try {
                removeContactNote();
            } catch (ObjectNotRemovedException e1) {
                new ErrorDialog("Contact Note not removed", e1).showDialog();
            }
        }
    };

    protected void removeContactNote() throws ObjectNotRemovedException {
        this.removeRelatedTableRow(getNameContactNotesTable(), null, super.getModel());
        getNameContactNotesTable().updateCollection(((Names) super.getModel()).getContactNotes());
    }

    protected JPopupMenu insertContactNotePopUpMenu = new JPopupMenu();
    private Component currentPrimaryNamePanel;

    public void setDetailsPanel(String nameType) {

        CellConstraints cc = new CellConstraints();
        detailsContainer.remove(currentPrimaryNamePanel);

        if (nameType.equalsIgnoreCase(Names.PERSON_TYPE)) {
            currentPrimaryNamePanel = new NamePersonalFields(this.detailsModel);
        } else if (nameType.equalsIgnoreCase(Names.FAMILY_TYPE)) {
            currentPrimaryNamePanel = new NameFamilyFields(this.detailsModel);
        } else if (nameType.equalsIgnoreCase(Names.CORPORATE_BODY_TYPE)) {
            currentPrimaryNamePanel = new NameCorpFields(this.detailsModel);
        }
        detailsContainer.add(currentPrimaryNamePanel, cc.xy(1, 1));
        if (currentPrimaryNamePanel instanceof NamePrimaryNameFields) {
            ((NamePrimaryNameFields) currentPrimaryNamePanel).setModel(super.getModel(), null);
        }
    }

    /**
     * Sets the model for this editor.
     *
     * @param model the model to be used
     */

    public final void setModel(final DomainObject model, InfiniteProgressPanel progressPanel) {
        super.setModel(model, progressPanel);

        Names namesModel = (Names) model;
        resourcesTable.updateCollection(namesModel.getResources());
        accessionsTable.updateCollection(namesModel.getAccessions());
        digitalObjectsTable.updateCollection(namesModel.getDigitalObjects());
        nameContactNotesTable.updateCollection(namesModel.getRelatedCollection(NameContactNotes.class));
        nonPreferredNamesTable.updateCollection(namesModel.getRelatedCollection(NonPreferredNames.class));

        setPluginModel(); // update any plugins with this new domain object
    }

    public Component getInitialFocusComponent() {
        if (currentPrimaryNamePanel instanceof DomainEditorFields) {
            return ((DomainEditorFields) currentPrimaryNamePanel).getInitialFocusComponent();
        } else {
            return null;
        }
    }

    public DomainSortedTable getNameContactNotesTable() {
        return nameContactNotesTable;
    }

    public DomainSortableTable getNonPreferredNamesTable() {
        return nonPreferredNamesTable;
    }

    public void setNonPreferredNamesTable(DomainSortableTable nonPreferredNamesTable) {
        this.nonPreferredNamesTable = nonPreferredNamesTable;
    }

    public JButton getAddNonPreferredNameButton() {
        return addNonPreferredNameButton;
    }

    public void setAddNonPreferredNameButton(JButton addNonPreferredNameButton) {
        this.addNonPreferredNameButton = addNonPreferredNameButton;
    }

    public JButton getRemoveNonPreferredNameButton() {
        return removeNonPreferredNameButton;
    }

    public void setRemoveNonPreferredNameButton(JButton removeNonPreferredNameButton) {
        this.removeNonPreferredNameButton = removeNonPreferredNameButton;
    }

    public JButton getRemoveContactNoteButton() {
        return removeContactNoteButton;
    }

    public void setRemoveContactNoteButton(JButton remoeContactNoteButton) {
        this.removeContactNoteButton = remoeContactNoteButton;
    }

    private void initAccess() {
        //hide repository popup if necessary
        if (!Users.doesCurrentUserHaveAccess(Users.ACCESS_CLASS_PROJECT_MANAGER)) {
            tabbedPane.removeTabAt(2);

        }
        //if user is not at least advanced data entry set the record to read only
        if (!Users.doesCurrentUserHaveAccess(Users.ACCESS_CLASS_ADVANCED_DATA_ENTRY)) {
            setFormToReadOnly();
            this.getAddNonPreferredNameButton().setVisible(false);
            this.getRemoveNonPreferredNameButton().setVisible(false);
            nameDescriptionType.setEnabled(false);
        }
    }

    protected void setDisplayToFirstTab() {
        this.tabbedPane.setSelectedIndex(0);
    }

    /**
     * Method that initializes any embedded plugins that would add an editor
     */
    private void initPlugins() {
        plugins = ATPluginFactory.getInstance().getEmbeddedNameEditorPlugins();
        if (plugins != null) {
            for (ATPlugin plugin : plugins) {
                plugin.setEditorField(this);
                HashMap pluginPanels = plugin.getEmbeddedPanels();
                for (Object key : pluginPanels.keySet()) {
                    String panelName = (String) key;
                    JPanel pluginPanel = (JPanel) pluginPanels.get(key);
                    tabbedPane.addTab(panelName, pluginPanel);
                }
            }
        }
    }

    /**
     * Method set the model for any plugins loaded
     */
    private void setPluginModel() {
        if (plugins != null) {
            for (ATPlugin plugin : plugins) {
                plugin.setModel(getModel(), null);
            }
        }
    }
}