@Override
  protected void buildPageWithTypeSelector() {
    GridBagConstraints constraints = new GridBagConstraints();
    Insets offset = BorderFactory.createTitledBorder("m").getBorderInsets(this.mainPanel);
    offset.left += 5;
    offset.right += 5;

    // xml field panel
    AbstractPanel pane = this.buildXmlFieldPanel();
    constraints.gridx = 0;
    constraints.gridy = 0;
    constraints.gridwidth = 1;
    constraints.gridheight = 1;
    constraints.weightx = 1;
    constraints.weighty = 0;
    constraints.fill = GridBagConstraints.HORIZONTAL;
    constraints.anchor = GridBagConstraints.CENTER;
    constraints.insets = new Insets(0, 0, 0, 0);
    this.mainPanel.add(pane, constraints);
    this.addPaneForAlignment(pane);

    // reference descriptor chooser
    Component referenceDescriptorChooser = this.buildReferenceDescriptorPanel();
    constraints.gridx = 0;
    constraints.gridy = 1;
    constraints.gridwidth = 1;
    constraints.gridheight = 1;
    constraints.weightx = 1;
    constraints.weighty = 0;
    constraints.fill = GridBagConstraints.HORIZONTAL;
    constraints.anchor = GridBagConstraints.FIRST_LINE_START;
    constraints.insets = new Insets(5, offset.left, 0, offset.right);
    this.mainPanel.add(referenceDescriptorChooser, constraints);
    this.addHelpTopicId(referenceDescriptorChooser, "mapping.eis.referenceDescriptor");

    // method accessing panel
    pane = this.buildMethodAccessingPanel();
    constraints.gridx = 0;
    constraints.gridy = 2;
    constraints.gridwidth = 1;
    constraints.gridheight = 1;
    constraints.weightx = 1;
    constraints.weighty = 0;
    constraints.fill = GridBagConstraints.HORIZONTAL;
    constraints.anchor = GridBagConstraints.CENTER;
    constraints.insets = new Insets(5, 0, 0, 0);
    this.mainPanel.add(pane, constraints);
    this.addPaneForAlignment(pane);

    // container accessor panel
    pane = this.buildContainerAccessorPanel();
    constraints.gridx = 0;
    constraints.gridy = 3;
    constraints.gridwidth = 1;
    constraints.gridheight = 1;
    constraints.weightx = 1;
    constraints.weighty = 0;
    constraints.fill = GridBagConstraints.HORIZONTAL;
    constraints.anchor = GridBagConstraints.CENTER;
    constraints.insets = new Insets(5, 0, 0, 0);
    this.mainPanel.add(pane, constraints);
    this.addPaneForAlignment(pane);

    // read only check box
    constraints.gridx = 0;
    constraints.gridy = 4;
    constraints.gridwidth = 1;
    constraints.gridheight = 1;
    constraints.weightx = 1;
    constraints.weighty = 0;
    constraints.fill = GridBagConstraints.NONE;
    constraints.anchor = GridBagConstraints.LINE_START;
    constraints.insets = new Insets(5, 5, 0, 0);
    this.mainPanel.add(this.buildReadOnlyCheckBox(), constraints);

    // comment
    JComponent commentPanel =
        SwingComponentFactory.buildCommentPanel(getSelectionHolder(), resourceRepository());
    constraints.gridx = 0;
    constraints.gridy = 5;
    constraints.gridwidth = 1;
    constraints.gridheight = 1;
    constraints.weightx = 1;
    constraints.weighty = 1;
    constraints.fill = GridBagConstraints.HORIZONTAL;
    constraints.anchor = GridBagConstraints.PAGE_START;
    constraints.insets = new Insets(5, offset.left, 0, offset.right);
    this.mainPanel.add(commentPanel, constraints);
    this.addHelpTopicId(commentPanel, "mapping.comment");

    this.addHelpTopicId(this.mainPanel, "mapping.compositeObject");
  }
 protected final JComponent buildCommentPanel() {
   return SwingComponentFactory.buildCommentPanel(
       this.getSelectionHolder(), this.resourceRepository());
 }
  protected Component buildPage() {
    JPanel panel = new JPanel(new GridBagLayout());
    panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));

    GridBagConstraints constraints = new GridBagConstraints();
    Insets offset = BorderFactory.createTitledBorder("m").getBorderInsets(panel);
    offset.left += 5;
    offset.right += 5;

    // Reference Descriptor chooser
    JComponent referenceDescriptorWidgets =
        buildLabeledComponent(
            "REFERENCE_DESCRIPTOR_CHOOSER_LABEL", buildReferenceDescriptorChooser());

    constraints.gridx = 0;
    constraints.gridy = 0;
    constraints.gridwidth = 1;
    constraints.gridheight = 1;
    constraints.weightx = 1;
    constraints.weighty = 0;
    constraints.fill = GridBagConstraints.HORIZONTAL;
    constraints.anchor = GridBagConstraints.CENTER;
    constraints.insets = new Insets(0, offset.left, 0, offset.right);

    panel.add(referenceDescriptorWidgets, constraints);
    addHelpTopicId(referenceDescriptorWidgets, "mapping.referenceDescriptor");

    // Foreign Keys sub-pane
    ForeignKeysSubPane foreignKeysSubPane = new ForeignKeysSubPane();

    constraints.gridx = 0;
    constraints.gridy = 1;
    constraints.gridwidth = 1;
    constraints.gridheight = 1;
    constraints.weightx = 1;
    constraints.weighty = 0;
    constraints.fill = GridBagConstraints.HORIZONTAL;
    constraints.anchor = GridBagConstraints.CENTER;
    constraints.insets = new Insets(5, 0, 0, 0);

    panel.add(foreignKeysSubPane, constraints);
    addPaneForAlignment(foreignKeysSubPane);

    // Maintain Bidirectionality Relationship
    MaintainsBidirectionalRelationshipPanel maintainBidiRelationshipWidget =
        new MaintainsBidirectionalRelationshipPanel(
            getSelectionHolder(), getWorkbenchContextHolder());

    constraints.gridx = 0;
    constraints.gridy = 2;
    constraints.gridwidth = 1;
    constraints.gridheight = 1;
    constraints.weightx = 1;
    constraints.weighty = 0;
    constraints.fill = GridBagConstraints.HORIZONTAL;
    constraints.anchor = GridBagConstraints.CENTER;
    constraints.insets = new Insets(5, 0, 0, 0);

    panel.add(maintainBidiRelationshipWidget, constraints);
    addPaneForAlignment(maintainBidiRelationshipWidget);

    // Use Method accessing widgets
    MethodAccessingPanel methodAccessingPanel =
        new MethodAccessingPanel(getSelectionHolder(), getWorkbenchContextHolder());

    constraints.gridx = 0;
    constraints.gridy = 3;
    constraints.gridwidth = 1;
    constraints.gridheight = 1;
    constraints.weightx = 1;
    constraints.weighty = 0;
    constraints.fill = GridBagConstraints.HORIZONTAL;
    constraints.anchor = GridBagConstraints.CENTER;
    constraints.insets = new Insets(5, 0, 0, 0);
    panel.add(methodAccessingPanel, constraints);
    addPaneForAlignment(methodAccessingPanel);

    // Read Only
    JCheckBox readOnlyCheckBox =
        MappingComponentFactory.buildReadOnlyCheckBox(
            this.getSelectionHolder(), this.getApplicationContext());

    constraints.gridx = 0;
    constraints.gridy = 4;
    constraints.gridwidth = 1;
    constraints.gridheight = 1;
    constraints.weightx = 0;
    constraints.weighty = 0;
    constraints.fill = GridBagConstraints.NONE;
    constraints.anchor = GridBagConstraints.LINE_START;
    constraints.insets = new Insets(5, 5, 0, 0);

    panel.add(readOnlyCheckBox, constraints);

    // Private Owned
    JCheckBox privateOwnedCheckBox =
        MappingComponentFactory.buildPrivateOwnedCheckBox(
            this.getSelectionHolder(), this.resourceRepository(), this.helpManager());
    constraints.gridx = 0;
    constraints.gridy = 5;
    constraints.gridwidth = 1;
    constraints.gridheight = 1;
    constraints.weightx = 0;
    constraints.weighty = 0;
    constraints.fill = GridBagConstraints.NONE;
    constraints.anchor = GridBagConstraints.LINE_START;
    constraints.insets = new Insets(0, 5, 0, 0);
    panel.add(privateOwnedCheckBox, constraints);

    // Indirectable
    IndirectableContainerMappingPanel indirectablePanel =
        new IndirectableContainerMappingPanel(getSelectionHolder(), getApplicationContext());
    constraints.gridx = 0;
    constraints.gridy = 6;
    constraints.gridwidth = 1;
    constraints.gridheight = 1;
    constraints.weightx = 1;
    constraints.weighty = 0;
    constraints.fill = GridBagConstraints.BOTH;
    constraints.anchor = GridBagConstraints.LINE_START;
    constraints.insets = new Insets(0, 0, 0, 0);
    panel.add(indirectablePanel, constraints);

    // Collection Options Advanced button
    JPanel advancedPanel =
        MappingComponentFactory.buildContainerPolicyOptionsBrowser(
            getWorkbenchContextHolder(), getSelectionHolder(), "mapping.collectionOptions");
    constraints.gridx = 0;
    constraints.gridy = 7;
    constraints.gridwidth = 1;
    constraints.gridheight = 1;
    constraints.weightx = 1;
    constraints.weighty = 0;
    constraints.fill = GridBagConstraints.HORIZONTAL;
    constraints.anchor = GridBagConstraints.LINE_START;
    constraints.insets = new Insets(5, 5, 0, 0);
    panel.add(advancedPanel, constraints);

    // comment
    JComponent commentPanel =
        SwingComponentFactory.buildCommentPanel(getSelectionHolder(), resourceRepository());
    constraints.gridx = 0;
    constraints.gridy = 8;
    constraints.gridwidth = 1;
    constraints.gridheight = 1;
    constraints.weightx = 1;
    constraints.weighty = 1;
    constraints.fill = GridBagConstraints.HORIZONTAL;
    constraints.anchor = GridBagConstraints.PAGE_START;
    constraints.insets = new Insets(5, offset.left, 0, offset.right);
    panel.add(commentPanel, constraints);
    this.addHelpTopicId(commentPanel, "mapping.comment");

    addHelpTopicId(panel, "mapping.oneToMany.general");
    return panel;
  }
  protected Component buildPage() {
    GridBagConstraints constraints = new GridBagConstraints();
    Insets offset = BorderFactory.createTitledBorder("m").getBorderInsets(this);
    offset.left += 5;
    offset.right += 5;

    JPanel container = new JPanel(new GridBagLayout());
    container.setBorder(BorderFactory.createEmptyBorder(5, 5, 0, 5));

    // Reference Descriptor chooser
    JComponent referenceDescriptorWidgets =
        buildLabeledComponent(
            "REFERENCE_DESCRIPTOR_CHOOSER_LABEL", buildReferenceDescriptorChooser());
    constraints.gridx = 0;
    constraints.gridy = 0;
    constraints.gridwidth = 1;
    constraints.gridheight = 1;
    constraints.weightx = 1;
    constraints.weighty = 0;
    constraints.fill = GridBagConstraints.HORIZONTAL;
    constraints.anchor = GridBagConstraints.CENTER;
    constraints.insets = new Insets(0, offset.left, 0, offset.right);
    container.add(referenceDescriptorWidgets, constraints);
    addHelpTopicId(referenceDescriptorWidgets, "mapping.referenceDescriptor");

    // Use Method accessing widgets
    MethodAccessingPanel methodAccessingPanel =
        new MethodAccessingPanel(getSelectionHolder(), getWorkbenchContextHolder());
    constraints.gridx = 0;
    constraints.gridy = 2;
    constraints.gridwidth = 1;
    constraints.gridheight = 1;
    constraints.weightx = 1;
    constraints.weighty = 0;
    constraints.fill = GridBagConstraints.HORIZONTAL;
    constraints.anchor = GridBagConstraints.CENTER;
    constraints.insets = new Insets(5, 0, 0, 0);
    container.add(methodAccessingPanel, constraints);
    addPaneForAlignment(methodAccessingPanel);

    // Read Only
    JCheckBox readOnlyCheckBox =
        RelationalMappingComponentFactory.buildReadOnlyCheckBox(
            this.getSelectionHolder(), this.getApplicationContext());
    constraints.gridx = 0;
    constraints.gridy = 3;
    constraints.gridwidth = 1;
    constraints.gridheight = 1;
    constraints.weightx = 0;
    constraints.weighty = 0;
    constraints.fill = GridBagConstraints.NONE;
    constraints.anchor = GridBagConstraints.LINE_START;
    constraints.insets = new Insets(5, 5, 0, 0);
    container.add(readOnlyCheckBox, constraints);

    // Private Owned
    JCheckBox privateOwnedCheckBox =
        RelationalMappingComponentFactory.buildPrivateOwnedCheckBox(
            this.getSelectionHolder(), this.resourceRepository(), this.helpManager());
    constraints.gridx = 0;
    constraints.gridy = 4;
    constraints.gridwidth = 1;
    constraints.gridheight = 1;
    constraints.weightx = 0;
    constraints.weighty = 0;
    constraints.fill = GridBagConstraints.NONE;
    constraints.anchor = GridBagConstraints.LINE_START;
    constraints.insets = new Insets(0, 5, 0, 0);
    container.add(privateOwnedCheckBox, constraints);

    // Use Batch Reading
    JCheckBox useBatchReadingCheckBox =
        RelationalMappingComponentFactory.buildBatchReadingCheckBox(
            getSelectionHolder(), resourceRepository());
    constraints.gridx = 0;
    constraints.gridy = 5;
    constraints.gridwidth = 1;
    constraints.gridheight = 1;
    constraints.weightx = 0;
    constraints.weighty = 0;
    constraints.fill = GridBagConstraints.NONE;
    constraints.anchor = GridBagConstraints.LINE_START;
    constraints.insets = new Insets(0, 5, 0, 0);
    container.add(useBatchReadingCheckBox, constraints);
    addHelpTopicId(useBatchReadingCheckBox, "mapping.useBatchReading");

    // join fetching
    JComponent joinFetchWidgets =
        buildLabeledComponent(
            "JOIN_FETCHING_CHOOSER_LABEL",
            RelationalMappingComponentFactory.buildJoinFetchingCombobox(
                getSelectionHolder(), getWorkbenchContextHolder()));
    constraints.gridx = 0;
    constraints.gridy = 6;
    constraints.gridwidth = 1;
    constraints.gridheight = 1;
    constraints.weightx = 1;
    constraints.weighty = 0;
    constraints.fill = GridBagConstraints.HORIZONTAL;
    constraints.anchor = GridBagConstraints.CENTER;
    constraints.insets = new Insets(0, offset.left, 0, offset.right);
    container.add(joinFetchWidgets, constraints);
    addHelpTopicId(joinFetchWidgets, "mapping.joinFetch");

    // indirection
    ProxyIndirectionPanel indirectionPanel =
        new ProxyIndirectionPanel(getSelectionHolder(), getApplicationContext());
    constraints.gridx = 0;
    constraints.gridy = 7;
    constraints.gridwidth = 1;
    constraints.gridheight = 1;
    constraints.weightx = 1;
    constraints.weighty = 0;
    constraints.fill = GridBagConstraints.HORIZONTAL;
    constraints.anchor = GridBagConstraints.LINE_START;
    constraints.insets = new Insets(0, 0, 0, 0);
    container.add(indirectionPanel, constraints);

    // Maintain Bidirectionality Relationship
    MaintainsBidirectionalRelationshipPanel maintainBidiRelationshipWidget =
        new MaintainsBidirectionalRelationshipPanel(
            getSelectionHolder(), getWorkbenchContextHolder());
    constraints.gridx = 0;
    constraints.gridy = 8;
    constraints.gridwidth = 1;
    constraints.gridheight = 1;
    constraints.weightx = 1;
    constraints.weighty = 0;
    constraints.fill = GridBagConstraints.HORIZONTAL;
    constraints.anchor = GridBagConstraints.CENTER;
    constraints.insets = new Insets(5, 0, 0, 0);
    container.add(maintainBidiRelationshipWidget, constraints);
    addPaneForAlignment(maintainBidiRelationshipWidget);

    // comment
    JComponent commentPanel =
        SwingComponentFactory.buildCommentPanel(
            this.getSelectionHolder(), this.resourceRepository());
    constraints.gridx = 0;
    constraints.gridy = 9;
    constraints.gridwidth = 1;
    constraints.gridheight = 1;
    constraints.weightx = 1;
    constraints.weighty = 1;
    constraints.fill = GridBagConstraints.HORIZONTAL;
    constraints.anchor = GridBagConstraints.FIRST_LINE_START;
    constraints.insets = new Insets(5, 5, 0, 5);
    container.add(commentPanel, constraints);
    addHelpTopicId(commentPanel, "mapping.comment");

    addHelpTopicId(container, "mapping.oneToOne");
    return container;
  }