/*
Copyright (C) 2006 EBI
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the itmplied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.biomart.builder.view.gui;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.event.MenuEvent;
import javax.swing.event.MenuListener;
import javax.swing.undo.UndoManager;
import org.biomart.builder.model.DataSet;
import org.biomart.builder.model.Mart;
import org.biomart.builder.model.Schema;
import org.biomart.builder.model.DataSet.DataSetOptimiserType;
import org.biomart.builder.view.gui.MartTabSet.MartTab;
import org.biomart.common.resources.Resources;
import org.biomart.common.resources.Settings;
import org.biomart.common.view.gui.BioMartGUI;
/**
* The main window housing the MartBuilder GUI. The {@link #main(String[])}
* method starts the GUI and opens this window.
*
* @author Richard Holland <holland@ebi.ac.uk>
* @version $Revision: 1.80 $, $Date: 2008-03-05 13:00:28 $, modified by
* $Author: rh4 $
* @since 0.5
*/
public class MartBuilder extends BioMartGUI {
private static final long serialVersionUID = 1L;
/**
* Run this application and open the main window. The window stays open and
* the application keeps running until the window is closed.
*
* @param args
* any command line arguments that the user specified will be in
* this array.
*/
public static void main(final String[] args) {
// Initialise resources.
Settings.setApplication(Settings.MARTBUILDER);
Resources.setResourceLocation("org/biomart/builder/resources");
// Start the application.
new MartBuilder().launch();
}
private MartTabSet martTabSet;
protected void initComponents() {
// Make a menu bar and add it.
this.setJMenuBar(new MartBuilderMenuBar(this));
// Set up the set of tabs to hold the various marts.
this.martTabSet = new MartTabSet(this);
this.getContentPane().add(this.martTabSet, BorderLayout.CENTER);
this.martTabSet.setOpaque(true);
this.setBackground(this.martTabSet.getBackground());
// Go straight to the 'New' page.
this.martTabSet.requestNewMart();
}
/**
* Exits the application, but only with permission from the mart tabset.
*/
public boolean confirmExitApp() {
return this.martTabSet.requestCloseAllMarts();
}
// This is the main menu bar.
private static class MartBuilderMenuBar extends BioMartMenuBar {
private static final long serialVersionUID = 1;
private JMenuItem closeMart;
private JMenuItem newMart;
private JMenuItem openMart;
private JMenuItem saveDDL;
private JMenuItem saveMart;
private JMenuItem saveMartAs;
private JMenuItem monitorHost;
private JMenuItem addSchema;
private JMenuItem updateAllSchemas;
private JMenuItem removeAllSchemaPartitions;
private JMenuItem maskAllDataSets;
private JMenuItem createDatasets;
private JMenuItem removeAllDatasets;
private JMenuItem keyguessingSchema;
private JMenuItem updateSchema;
private JMenuItem renameSchema;
private JMenuItem removeSchema;
private JMenuItem invisibleDataset;
private JMenuItem maskedDataset;
private JMenuItem explainDataset;
private JMenuItem saveDatasetDDL;
private JMenuItem renameDataset;
private JMenuItem removeDataset;
private JMenuItem extendDataset;
private JMenu optimiseDatasetSubmenu;
private JMenuItem indexOptimiser;
private JMenuItem convertPartitionTable;
private JMenuItem datasetAcceptAll;
private JMenuItem datasetRejectAll;
private JMenuItem datasetReplicate;
private JMenuItem schemaAcceptAll;
private JMenuItem schemaRejectAll;
private JMenuItem updatePartitionCounts;
private JMenuItem updateAllPartitionCounts;
private JMenu nameCaseSubmenu;
private JRadioButtonMenuItem nameCaseMixed;
private JRadioButtonMenuItem nameCaseUpper;
private JRadioButtonMenuItem nameCaseLower;
private JMenuItem partitionDSWizard;
/**
* Constructor calls super then sets up our menu items.
*
* @param martBuilder
* the mart builder gui to which we are attached.
*/
public MartBuilderMenuBar(final MartBuilder martBuilder) {
super(martBuilder);
}
protected void buildMenus(final JMenuItem exit) {
// New mart.
this.newMart = new JMenuItem(Resources.get("newMartTitle"),
new ImageIcon(Resources.getResourceAsURL("new.gif")));
this.newMart
.setMnemonic(Resources.get("newMartMnemonic").charAt(0));
this.newMart.addActionListener(this);
// Open existing mart.
this.openMart = new JMenuItem(Resources.get("openMartTitle"),
new ImageIcon(Resources.getResourceAsURL("open.gif")));
this.openMart.setMnemonic(Resources.get("openMartMnemonic").charAt(
0));
this.openMart.addActionListener(this);
// Save current mart.
this.saveMart = new JMenuItem(Resources.get("saveMartTitle"),
new ImageIcon(Resources.getResourceAsURL("save.gif")));
this.saveMart.setMnemonic(Resources.get("saveMartMnemonic").charAt(
0));
this.saveMart.addActionListener(this);
// Save current mart as.
this.saveMartAs = new JMenuItem(Resources.get("saveMartAsTitle"),
new ImageIcon(Resources.getResourceAsURL("save.gif")));
this.saveMartAs.setMnemonic(Resources.get("saveMartAsMnemonic")
.charAt(0));
this.saveMartAs.addActionListener(this);
// Create DDL for current mart.
this.saveDDL = new JMenuItem(Resources.get("saveDDLTitle"),
new ImageIcon(Resources.getResourceAsURL("saveText.gif")));
this.saveDDL
.setMnemonic(Resources.get("saveDDLMnemonic").charAt(0));
this.saveDDL.addActionListener(this);
// Monitor remote host.
this.monitorHost = new JMenuItem(Resources.get("monitorHostTitle"));
this.monitorHost.setMnemonic(Resources.get("monitorHostMnemonic")
.charAt(0));
this.monitorHost.addActionListener(this);
// Close current mart.
this.closeMart = new JMenuItem(Resources.get("closeMartTitle"));
this.closeMart.setMnemonic(Resources.get("closeMartMnemonic")
.charAt(0));
this.closeMart.addActionListener(this);
// Make a submenu for the name case type.
this.nameCaseSubmenu = new JMenu(Resources.get("caseTitle"));
this.nameCaseSubmenu.setMnemonic(Resources.get("caseMnemonic")
.charAt(0));
final ButtonGroup optGroupNC = new ButtonGroup();
// Loop through the case types to create the submenu.
// Mixed
this.nameCaseMixed = new JRadioButtonMenuItem(Resources
.get("caseMixedTitle"));
this.nameCaseMixed.setMnemonic(Resources.get("caseMixedMnemonic")
.charAt(0));
this.nameCaseMixed.addActionListener(this);
optGroupNC.add(this.nameCaseMixed);
this.nameCaseSubmenu.add(this.nameCaseMixed);
// Upper
this.nameCaseUpper = new JRadioButtonMenuItem(Resources
.get("caseUpperTitle"));
this.nameCaseUpper.setMnemonic(Resources.get("caseUpperMnemonic")
.charAt(0));
this.nameCaseUpper.addActionListener(this);
optGroupNC.add(this.nameCaseUpper);
this.nameCaseSubmenu.add(this.nameCaseUpper);
// Lower
this.nameCaseLower = new JRadioButtonMenuItem(Resources
.get("caseLowerTitle"));
this.nameCaseLower.setMnemonic(Resources.get("caseLowerMnemonic")
.charAt(0));
this.nameCaseLower.addActionListener(this);
optGroupNC.add(this.nameCaseLower);
this.nameCaseSubmenu.add(this.nameCaseLower);
// Add new schema.
this.addSchema = new JMenuItem(Resources.get("addSchemaTitle"),
new ImageIcon(Resources.getResourceAsURL("add.gif")));
this.addSchema.setMnemonic(Resources.get("closeMartMnemonic")
.charAt(0));
this.addSchema.addActionListener(this);
// Sync all schemas.
this.updateAllSchemas = new JMenuItem(Resources
.get("synchroniseAllSchemasTitle"), new ImageIcon(Resources
.getResourceAsURL("refresh.gif")));
this.updateAllSchemas.setMnemonic(Resources.get(
"synchroniseAllSchemasMnemonic").charAt(0));
this.updateAllSchemas.addActionListener(this);
// Remove all schema partitions.
this.removeAllSchemaPartitions = new JMenuItem(Resources
.get("removeAllSchemaPartitionsTitle"));
this.removeAllSchemaPartitions.setMnemonic(Resources.get(
"removeAllSchemaPartitionsMnemonic").charAt(0));
this.removeAllSchemaPartitions.addActionListener(this);
// Mask all datasets.
this.maskAllDataSets = new JMenuItem(Resources
.get("maskAllDataSetsTitle"));
this.maskAllDataSets.setMnemonic(Resources.get(
"maskAllDataSetsMnemonic").charAt(0));
this.maskAllDataSets.addActionListener(this);
// Create datasets.
this.createDatasets = new JMenuItem(Resources
.get("suggestDataSetsTitle"), new ImageIcon(Resources
.getResourceAsURL("add.gif")));
this.createDatasets.setMnemonic(Resources.get(
"suggestDataSetsMnemonic").charAt(0));
this.createDatasets.addActionListener(this);
// Remove all datasets.
this.removeAllDatasets = new JMenuItem(Resources
.get("removeAllDataSetsTitle"), new ImageIcon(Resources
.getResourceAsURL("cut.gif")));
this.removeAllDatasets.setMnemonic(Resources.get(
"removeAllDataSetsMnemonic").charAt(0));
this.removeAllDatasets.addActionListener(this);
// Keyguessing.
this.keyguessingSchema = new JCheckBoxMenuItem(Resources
.get("enableKeyGuessingTitle"));
this.keyguessingSchema.setMnemonic(Resources.get(
"enableKeyGuessingMnemonic").charAt(0));
this.keyguessingSchema.addActionListener(this);
// Update schema.
this.updateSchema = new JMenuItem(Resources
.get("updateSchemaTitle"), new ImageIcon(Resources
.getResourceAsURL("refresh.gif")));
this.updateSchema.setMnemonic(Resources.get("updateSchemaMnemonic")
.charAt(0));
this.updateSchema.addActionListener(this);
// Rename schema.
this.renameSchema = new JMenuItem(Resources
.get("renameSchemaTitle"));
this.renameSchema.setMnemonic(Resources.get("renameSchemaMnemonic")
.charAt(0));
this.renameSchema.addActionListener(this);
// Remove schema.
this.removeSchema = new JMenuItem(Resources
.get("removeSchemaTitle"), new ImageIcon(Resources
.getResourceAsURL("cut.gif")));
this.removeSchema.setMnemonic(Resources.get("removeSchemaMnemonic")
.charAt(0));
this.removeSchema.addActionListener(this);
// Accept all changes.
this.schemaAcceptAll = new JMenuItem(Resources
.get("acceptChangesTitle"));
this.schemaAcceptAll.setMnemonic(Resources.get(
"acceptChangesMnemonic").charAt(0));
this.schemaAcceptAll.addActionListener(this);
// Reject all changes.
this.schemaRejectAll = new JMenuItem(Resources
.get("rejectChangesTitle"));
this.schemaRejectAll.setMnemonic(Resources.get(
"rejectChangesMnemonic").charAt(0));
this.schemaRejectAll.addActionListener(this);
// Invisible.
this.invisibleDataset = new JCheckBoxMenuItem(Resources
.get("invisibleDataSetTitle"));
this.invisibleDataset.setMnemonic(Resources.get(
"invisibleDataSetMnemonic").charAt(0));
this.invisibleDataset.addActionListener(this);
// Masked.
this.maskedDataset = new JCheckBoxMenuItem(Resources
.get("maskedDataSetTitle"));
this.maskedDataset.setMnemonic(Resources.get(
"maskedDataSetMnemonic").charAt(0));
this.maskedDataset.addActionListener(this);
// Partition dataset.
this.partitionDSWizard = new JCheckBoxMenuItem(Resources
.get("partitionWizardDataSetTitle"));
this.partitionDSWizard.setMnemonic(Resources.get(
"partitionWizardDataSetMnemonic").charAt(0));
this.partitionDSWizard.addActionListener(this);
// Update counts.
this.updateAllPartitionCounts = new JMenuItem(Resources
.get("updateAllPartitionCountsTitle"), new ImageIcon(
Resources.getResourceAsURL("refresh.gif")));
this.updateAllPartitionCounts.setMnemonic(Resources.get(
"updateAllPartitionCountsMnemonic").charAt(0));
this.updateAllPartitionCounts.addActionListener(this);
// Update counts.
this.updatePartitionCounts = new JMenuItem(Resources
.get("updatePartitionCountsTitle"), new ImageIcon(Resources
.getResourceAsURL("refresh.gif")));
this.updatePartitionCounts.setMnemonic(Resources.get(
"updatePartitionCountsMnemonic").charAt(0));
this.updatePartitionCounts.addActionListener(this);
// Explain dataset.
this.explainDataset = new JMenuItem(Resources
.get("explainDataSetTitle"), new ImageIcon(Resources
.getResourceAsURL("help.gif")));
this.explainDataset.setMnemonic(Resources.get(
"explainDataSetMnemonic").charAt(0));
this.explainDataset.addActionListener(this);
// Save dataset DDL.
this.saveDatasetDDL = new JMenuItem(Resources.get("saveDDLTitle"),
new ImageIcon(Resources.getResourceAsURL("saveText.gif")));
this.saveDatasetDDL.setMnemonic(Resources.get("saveDDLMnemonic")
.charAt(0));
this.saveDatasetDDL.addActionListener(this);
// Rename dataset.
this.renameDataset = new JMenuItem(Resources
.get("renameDataSetTitle"));
this.renameDataset.setMnemonic(Resources.get(
"renameDataSetMnemonic").charAt(0));
this.renameDataset.addActionListener(this);
// Remove dataset.
this.removeDataset = new JMenuItem(Resources
.get("removeDataSetTitle"), new ImageIcon(Resources
.getResourceAsURL("cut.gif")));
this.removeDataset.setMnemonic(Resources.get(
"removeDataSetMnemonic").charAt(0));
this.removeDataset.addActionListener(this);
// Extend dataset.
this.extendDataset = new JMenuItem(Resources
.get("suggestInvisibleDatasetsTitle"), new ImageIcon(
Resources.getResourceAsURL("add.gif")));
this.extendDataset.setMnemonic(Resources.get(
"suggestInvisibleDatasetsMnemonic").charAt(0));
this.extendDataset.addActionListener(this);
// Convert dataset.
this.convertPartitionTable = new JCheckBoxMenuItem(Resources
.get("convertPartitionTableTitle"));
this.convertPartitionTable.setMnemonic(Resources.get(
"convertPartitionTableMnemonic").charAt(0));
this.convertPartitionTable.addActionListener(this);
// Accept all changes.
this.datasetAcceptAll = new JMenuItem(Resources
.get("acceptChangesTitle"));
this.datasetAcceptAll.setMnemonic(Resources.get(
"acceptChangesMnemonic").charAt(0));
this.datasetAcceptAll.addActionListener(this);
// Reject all changes.
this.datasetRejectAll = new JMenuItem(Resources
.get("rejectChangesTitle"));
this.datasetRejectAll.setMnemonic(Resources.get(
"rejectChangesMnemonic").charAt(0));
this.datasetRejectAll.addActionListener(this);
// Replicate.
this.datasetReplicate = new JMenuItem(Resources
.get("replicateDataSetTitle"));
this.datasetReplicate.setMnemonic(Resources.get(
"replicateDataSetMnemonic").charAt(0));
this.datasetReplicate.addActionListener(this);
// Make a submenu for the optimiser type.
this.optimiseDatasetSubmenu = new JMenu(Resources
.get("optimiserTitle"));
this.optimiseDatasetSubmenu.setMnemonic(Resources.get(
"optimiserMnemonic").charAt(0));
final ButtonGroup optGroup = new ButtonGroup();
// Loop through the map to create the submenu.
for (final Iterator i = DataSetOptimiserType.getTypes().entrySet()
.iterator(); i.hasNext();) {
final Map.Entry entry = (Map.Entry) i.next();
final String name = (String) entry.getKey();
final DataSetOptimiserType value = (DataSetOptimiserType) entry
.getValue();
final JRadioButtonMenuItem opt = new JRadioButtonMenuItem(
Resources.get("optimiser" + name + "Title"));
opt.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent evt) {
final DataSet ds = MartBuilderMenuBar.this
.getMartBuilder().martTabSet
.getSelectedMartTab().getDataSetTabSet()
.getSelectedDataSet();
MartBuilderMenuBar.this.getMartBuilder().martTabSet
.getSelectedMartTab().getDataSetTabSet()
.requestChangeOptimiserType(ds, value);
}
});
optGroup.add(opt);
this.optimiseDatasetSubmenu.add(opt);
}
this.optimiseDatasetSubmenu.addSeparator();
this.indexOptimiser = new JCheckBoxMenuItem(Resources
.get("indexOptimiserTitle"));
this.indexOptimiser.setMnemonic(Resources.get(
"indexOptimiserMnemonic").charAt(0));
this.indexOptimiser.addActionListener(this);
this.optimiseDatasetSubmenu.add(this.indexOptimiser);
// Construct the file menu.
final JMenu fileMenu = new JMenu(Resources.get("fileMenuTitle"));
fileMenu.setMnemonic(Resources.get("fileMenuMnemonic").charAt(0));
fileMenu.add(this.newMart);
fileMenu.addSeparator();
fileMenu.add(this.openMart);
fileMenu.add(this.closeMart);
fileMenu.addSeparator();
fileMenu.add(this.saveMart);
fileMenu.add(this.saveMartAs);
// Add Quit option (only for non-Macs)
if (exit != null) {
fileMenu.addSeparator();
fileMenu.add(exit);
}
final int firstRecentFileEntry = fileMenu.getMenuComponentCount();
// Construct the edit menu.
final JMenu editMenu = new JMenu(Resources.get("editMenuTitle"));
editMenu.setMnemonic(Resources.get("editMenuMnemonic").charAt(0));
// Construct the mart menu.
final JMenu martMenu = new JMenu(Resources.get("martMenuTitle"));
martMenu.setMnemonic(Resources.get("martMenuMnemonic").charAt(0));
martMenu.add(this.saveDDL);
martMenu.addSeparator();
martMenu.add(this.nameCaseSubmenu);
martMenu.addSeparator();
martMenu.add(this.updateAllSchemas);
martMenu.add(this.updateAllPartitionCounts);
martMenu.add(this.removeAllSchemaPartitions);
martMenu.addSeparator();
martMenu.add(this.maskAllDataSets);
martMenu.add(this.removeAllDatasets);
martMenu.addSeparator();
martMenu.add(this.monitorHost);
// Construct the schema menu.
final JMenu schemaMenu = new JMenu(Resources.get("schemaMenuTitle"));
schemaMenu.setMnemonic(Resources.get("schemaMenuMnemonic")
.charAt(0));
schemaMenu.add(this.addSchema);
schemaMenu.add(this.updateSchema);
schemaMenu.addSeparator();
schemaMenu.add(this.keyguessingSchema);
schemaMenu.addSeparator();
schemaMenu.add(this.renameSchema);
schemaMenu.add(this.removeSchema);
schemaMenu.addSeparator();
schemaMenu.add(this.schemaAcceptAll);
schemaMenu.add(this.schemaRejectAll);
// Construct the dataset menu.
final JMenu datasetMenu = new JMenu(Resources
.get("datasetMenuTitle"));
datasetMenu.setMnemonic(Resources.get("datasetMenuMnemonic")
.charAt(0));
datasetMenu.add(this.createDatasets);
datasetMenu.addSeparator();
datasetMenu.add(this.convertPartitionTable);
datasetMenu.add(this.updatePartitionCounts);
datasetMenu.addSeparator();
datasetMenu.add(this.invisibleDataset);
datasetMenu.add(this.maskedDataset);
datasetMenu.add(this.partitionDSWizard);
datasetMenu.add(this.optimiseDatasetSubmenu);
datasetMenu.addSeparator();
datasetMenu.add(this.saveDatasetDDL);
datasetMenu.add(this.explainDataset);
datasetMenu.addSeparator();
datasetMenu.add(this.renameDataset);
datasetMenu.add(this.removeDataset);
datasetMenu.addSeparator();
datasetMenu.add(this.datasetAcceptAll);
datasetMenu.add(this.datasetRejectAll);
datasetMenu.addSeparator();
datasetMenu.add(this.datasetReplicate);
datasetMenu.addSeparator();
datasetMenu.add(this.extendDataset);
// Add a listener which checks which options to enable each time the
// menu is opened. This mean that if no mart is currently selected,
// save and close will be disabled, and if the current mart is not
// modified, save will be disabled, etc.
martMenu.addMenuListener(new MenuListener() {
public void menuCanceled(final MenuEvent e) {
} // Interface requirement.
public void menuDeselected(final MenuEvent e) {
} // Interface requirement.
public void menuSelected(final MenuEvent e) {
final boolean hasMart = MartBuilderMenuBar.this
.getMartBuilder().martTabSet.getSelectedMartTab() != null;
MartBuilderMenuBar.this.saveDDL
.setEnabled(hasMart
&& MartBuilderMenuBar.this.getMartBuilder().martTabSet
.getSelectedMartTab().getMart()
.getDataSets().size() > 0);
}
});
this.nameCaseSubmenu.addMenuListener(new MenuListener() {
public void menuCanceled(final MenuEvent e) {
} // Interface requirement.
public void menuDeselected(final MenuEvent e) {
} // Interface requirement.
public void menuSelected(final MenuEvent e) {
final MartTab martTab = MartBuilderMenuBar.this
.getMartBuilder().martTabSet.getSelectedMartTab();
if (martTab != null)
switch (martTab.getMart().getCase()) {
case Mart.USE_UPPER_CASE:
MartBuilderMenuBar.this.nameCaseUpper
.setSelected(true);
break;
case Mart.USE_LOWER_CASE:
MartBuilderMenuBar.this.nameCaseLower
.setSelected(true);
break;
default:
MartBuilderMenuBar.this.nameCaseMixed
.setSelected(true);
break;
}
}
});
fileMenu.addMenuListener(new MenuListener() {
public void menuCanceled(final MenuEvent e) {
} // Interface requirement.
public void menuDeselected(final MenuEvent e) {
} // Interface requirement.
public void menuSelected(final MenuEvent e) {
final boolean hasMart = MartBuilderMenuBar.this
.getMartBuilder().martTabSet.getSelectedMartTab() != null;
MartBuilderMenuBar.this.saveMart
.setEnabled(hasMart
&& MartBuilderMenuBar.this.getMartBuilder().martTabSet
.getModifiedStatus());
MartBuilderMenuBar.this.saveMartAs.setEnabled(hasMart);
MartBuilderMenuBar.this.closeMart.setEnabled(hasMart);
MartBuilderMenuBar.this.nameCaseSubmenu.setEnabled(hasMart);
// Wipe from the separator to the last non-separator/
// non-numbered entry.
// Then, insert after the separator a numbered list
// of recent files, followed by another separator if
// the list was not empty.
while (fileMenu.getMenuComponentCount() > firstRecentFileEntry)
fileMenu.remove(fileMenu
.getMenuComponent(firstRecentFileEntry));
final List names = Settings
.getHistoryNamesForClass(MartTabSet.class);
// We have to build this and reverse it separately
// else the action of getting properties moves each
// item to the top of the recently-accessed list, and
// therefore flips the entire list at each menu request.
final List newItems = new ArrayList();
int position = names.size();
for (final Iterator i = names.iterator(); i.hasNext(); position--) {
final String name = (String) i.next();
final File location = new File((String) Settings
.getHistoryProperties(MartTabSet.class, name)
.get("location"));
final JMenuItem file = new JMenuItem(position + " "
+ name);
file.setMnemonic(("" + position).charAt(0));
file.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent evt) {
MartBuilderMenuBar.this.getMartBuilder().martTabSet
.requestLoadMart(location);
}
});
newItems.add(file);
}
if (newItems.size() > 0) {
fileMenu.addSeparator();
Collections.reverse(newItems);
for (final Iterator i = newItems.iterator(); i
.hasNext();)
fileMenu.add((JMenuItem) i.next());
}
}
});
editMenu.addMenuListener(new MenuListener() {
public void menuCanceled(final MenuEvent e) {
} // Interface requirement.
public void menuDeselected(final MenuEvent e) {
} // Interface requirement.
public void menuSelected(final MenuEvent e) {
// Wipe the existing undo+redo entries.
editMenu.removeAll();
// Then, re-insert them based on the current undo manager
// entries.
final UndoManager undoManager = MartBuilderMenuBar.this
.getMartBuilder().martTabSet.getUndoManager();
final JMenuItem undo = new JMenuItem(undoManager
.getUndoPresentationName());
undo.setMnemonic(undoManager.getUndoPresentationName()
.charAt(0));
undo.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent e) {
undoManager.undo();
}
});
undo.setEnabled(undoManager.canUndo());
editMenu.add(undo);
final JMenuItem redo = new JMenuItem(undoManager
.getRedoPresentationName());
redo.setMnemonic(undoManager.getRedoPresentationName()
.charAt(0));
redo.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent e) {
undoManager.redo();
}
});
redo.setEnabled(undoManager.canRedo());
editMenu.add(redo);
}
});
martMenu.addMenuListener(new MenuListener() {
public void menuCanceled(final MenuEvent e) {
} // Interface requirement.
public void menuDeselected(final MenuEvent e) {
} // Interface requirement.
public void menuSelected(final MenuEvent e) {
final boolean hasMart = MartBuilderMenuBar.this
.getMartBuilder().martTabSet.getSelectedMartTab() != null;
MartBuilderMenuBar.this.updateAllSchemas
.setEnabled(hasMart
&& MartBuilderMenuBar.this.getMartBuilder().martTabSet
.getSelectedMartTab().getMart()
.getSchemas().size() > 0);
MartBuilderMenuBar.this.removeAllDatasets
.setEnabled(hasMart
&& MartBuilderMenuBar.this.getMartBuilder().martTabSet
.getSelectedMartTab().getMart()
.getDataSets().size() > 0);
MartBuilderMenuBar.this.removeAllSchemaPartitions
.setEnabled(hasMart
&& MartBuilderMenuBar.this.getMartBuilder().martTabSet
.getSelectedMartTab().getMart()
.getSchemas().size() > 0);
MartBuilderMenuBar.this.maskAllDataSets
.setEnabled(hasMart
&& MartBuilderMenuBar.this.getMartBuilder().martTabSet
.getSelectedMartTab().getMart()
.getDataSets().size() > 0);
MartBuilderMenuBar.this.updateAllPartitionCounts
.setEnabled(hasMart
&& MartBuilderMenuBar.this.getMartBuilder().martTabSet
.getSelectedMartTab().getMart()
.getPartitionTables().size() > 0);
}
});
schemaMenu.addMenuListener(new MenuListener() {
public void menuCanceled(final MenuEvent e) {
} // Interface requirement.
public void menuDeselected(final MenuEvent e) {
} // Interface requirement.
public void menuSelected(final MenuEvent e) {
final boolean hasMart = MartBuilderMenuBar.this
.getMartBuilder().martTabSet.getSelectedMartTab() != null;
final Schema schema;
if (hasMart)
schema = MartBuilderMenuBar.this.getMartBuilder().martTabSet
.getSelectedMartTab().getSchemaTabSet()
.getSelectedSchema();
else
schema = null;
MartBuilderMenuBar.this.addSchema.setEnabled(hasMart);
MartBuilderMenuBar.this.keyguessingSchema
.setEnabled(schema != null);
MartBuilderMenuBar.this.keyguessingSchema
.setSelected(schema != null
&& schema.isKeyGuessing());
MartBuilderMenuBar.this.updateSchema
.setEnabled(schema != null);
MartBuilderMenuBar.this.renameSchema
.setEnabled(schema != null);
MartBuilderMenuBar.this.removeSchema
.setEnabled(schema != null);
MartBuilderMenuBar.this.schemaAcceptAll
.setEnabled(schema != null
&& schema.isVisibleModified());
MartBuilderMenuBar.this.schemaRejectAll
.setEnabled(schema != null
&& schema.isVisibleModified());
}
});
datasetMenu.addMenuListener(new MenuListener() {
public void menuCanceled(final MenuEvent e) {
} // Interface requirement.
public void menuDeselected(final MenuEvent e) {
} // Interface requirement.
public void menuSelected(final MenuEvent e) {
final boolean hasMart = MartBuilderMenuBar.this
.getMartBuilder().martTabSet.getSelectedMartTab() != null;
MartBuilderMenuBar.this.createDatasets
.setEnabled(hasMart
&& MartBuilderMenuBar.this.getMartBuilder().martTabSet
.getSelectedMartTab()
.getSchemaTabSet()
.getComponentCount() > 1);
final DataSet ds;
if (hasMart)
ds = MartBuilderMenuBar.this.getMartBuilder().martTabSet
.getSelectedMartTab().getDataSetTabSet()
.getSelectedDataSet();
else
ds = null;
MartBuilderMenuBar.this.invisibleDataset
.setEnabled(ds != null);
MartBuilderMenuBar.this.invisibleDataset
.setSelected(ds != null && ds.isInvisible());
MartBuilderMenuBar.this.maskedDataset
.setEnabled(ds != null);
MartBuilderMenuBar.this.maskedDataset
.setSelected(ds != null && ds.isMasked());
MartBuilderMenuBar.this.partitionDSWizard
.setEnabled(ds != null);
MartBuilderMenuBar.this.partitionDSWizard
.setSelected(ds != null
&& ds.getPartitionTableApplication() != null);
MartBuilderMenuBar.this.explainDataset
.setEnabled(ds != null);
MartBuilderMenuBar.this.saveDatasetDDL
.setEnabled(ds != null);
MartBuilderMenuBar.this.renameDataset
.setEnabled(ds != null);
MartBuilderMenuBar.this.removeDataset
.setEnabled(ds != null);
MartBuilderMenuBar.this.extendDataset
.setEnabled(ds != null);
MartBuilderMenuBar.this.optimiseDatasetSubmenu
.setEnabled(ds != null);
MartBuilderMenuBar.this.convertPartitionTable
.setEnabled(ds != null);
MartBuilderMenuBar.this.convertPartitionTable
.setSelected(ds != null && ds.isPartitionTable());
MartBuilderMenuBar.this.updatePartitionCounts
.setEnabled(ds != null && ds.isPartitionTable());
MartBuilderMenuBar.this.datasetAcceptAll
.setEnabled(ds != null && ds.isVisibleModified());
MartBuilderMenuBar.this.datasetRejectAll
.setEnabled(ds != null && ds.isVisibleModified());
MartBuilderMenuBar.this.datasetReplicate
.setEnabled(ds != null);
}
});
this.optimiseDatasetSubmenu.addMenuListener(new MenuListener() {
public void menuCanceled(final MenuEvent e) {
} // Interface requirement.
public void menuDeselected(final MenuEvent e) {
} // Interface requirement.
public void menuSelected(final MenuEvent e) {
final DataSet ds;
if (MartBuilderMenuBar.this.getMartBuilder().martTabSet
.getSelectedMartTab() != null)
ds = MartBuilderMenuBar.this.getMartBuilder().martTabSet
.getSelectedMartTab().getDataSetTabSet()
.getSelectedDataSet();
else
ds = null;
MartBuilderMenuBar.this.indexOptimiser
.setEnabled(ds != null);
MartBuilderMenuBar.this.indexOptimiser
.setSelected(ds != null && ds.isIndexOptimiser());
int index = 0;
for (final Iterator i = DataSetOptimiserType.getTypes()
.values().iterator(); i.hasNext(); index++) {
final DataSetOptimiserType value = (DataSetOptimiserType) i
.next();
if (ds.getDataSetOptimiserType().equals(value))
((JMenuItem) MartBuilderMenuBar.this.optimiseDatasetSubmenu
.getMenuComponent(index)).setSelected(true);
}
}
});
// Adds the menus to the menu bar.
this.add(fileMenu);
// this.add(editMenu); // FIXME Uncomment this when implemented.
this.add(martMenu);
this.add(schemaMenu);
this.add(datasetMenu);
}
private MartBuilder getMartBuilder() {
return (MartBuilder) this.getBioMartGUI();
}
public void actionPerformed(final ActionEvent e) {
// Mart menu.
if (e.getSource() == this.newMart)
this.getMartBuilder().martTabSet.requestNewMart();
else if (e.getSource() == this.openMart)
this.getMartBuilder().martTabSet.requestLoadMart();
else if (e.getSource() == this.saveMart)
this.getMartBuilder().martTabSet.requestSaveMart();
else if (e.getSource() == this.saveMartAs)
this.getMartBuilder().martTabSet.requestSaveMartAs();
else if (e.getSource() == this.closeMart)
this.getMartBuilder().martTabSet.requestCloseMart();
else if (e.getSource() == this.saveDDL)
this.getMartBuilder().martTabSet.requestCreateDDL();
else if (e.getSource() == this.monitorHost)
this.getMartBuilder().martTabSet.requestMonitorRemoteHost();
else if (e.getSource() == this.nameCaseLower)
this.getMartBuilder().martTabSet
.requestChangeNameCase(Mart.USE_LOWER_CASE);
else if (e.getSource() == this.nameCaseUpper)
this.getMartBuilder().martTabSet
.requestChangeNameCase(Mart.USE_UPPER_CASE);
else if (e.getSource() == this.nameCaseMixed)
this.getMartBuilder().martTabSet
.requestChangeNameCase(Mart.USE_MIXED_CASE);
// Schema menu.
else if (e.getSource() == this.addSchema)
this.getMartBuilder().martTabSet.getSelectedMartTab()
.getSchemaTabSet().requestAddSchema();
else if (e.getSource() == this.updateAllSchemas)
this.getMartBuilder().martTabSet.getSelectedMartTab()
.getSchemaTabSet().requestSynchroniseAllSchemas();
else if (e.getSource() == this.removeAllSchemaPartitions)
this.getMartBuilder().martTabSet.getSelectedMartTab()
.getSchemaTabSet().requestRemoveAllSchemaPartitions();
else if (e.getSource() == this.maskAllDataSets)
this.getMartBuilder().martTabSet.getSelectedMartTab()
.getDataSetTabSet().requestMaskAllDataSets(true);
else if (e.getSource() == this.createDatasets)
this.getMartBuilder().martTabSet.getSelectedMartTab()
.getDataSetTabSet().requestSuggestDataSets(null);
else if (e.getSource() == this.removeAllDatasets)
this.getMartBuilder().martTabSet.getSelectedMartTab()
.getDataSetTabSet().requestRemoveAllDataSets();
else if (e.getSource() == this.keyguessingSchema) {
final Schema schema = this.getMartBuilder().martTabSet
.getSelectedMartTab().getSchemaTabSet()
.getSelectedSchema();
this.getMartBuilder().martTabSet.getSelectedMartTab()
.getSchemaTabSet().requestKeyGuessing(schema,
this.keyguessingSchema.isSelected());
} else if (e.getSource() == this.updateSchema) {
final Schema schema = this.getMartBuilder().martTabSet
.getSelectedMartTab().getSchemaTabSet()
.getSelectedSchema();
this.getMartBuilder().martTabSet.getSelectedMartTab()
.getSchemaTabSet().requestModifySchema(schema);
} else if (e.getSource() == this.renameSchema) {
final Schema schema = this.getMartBuilder().martTabSet
.getSelectedMartTab().getSchemaTabSet()
.getSelectedSchema();
this.getMartBuilder().martTabSet.getSelectedMartTab()
.getSchemaTabSet().requestRenameSchema(schema);
} else if (e.getSource() == this.removeSchema) {
final Schema schema = this.getMartBuilder().martTabSet
.getSelectedMartTab().getSchemaTabSet()
.getSelectedSchema();
this.getMartBuilder().martTabSet.getSelectedMartTab()
.getSchemaTabSet().requestRemoveSchema(schema);
} else if (e.getSource() == this.schemaAcceptAll) {
final Schema schema = this.getMartBuilder().martTabSet
.getSelectedMartTab().getSchemaTabSet()
.getSelectedSchema();
this.getMartBuilder().martTabSet.getSelectedMartTab()
.getSchemaTabSet().requestAcceptAll(schema);
} else if (e.getSource() == this.schemaRejectAll) {
final Schema schema = this.getMartBuilder().martTabSet
.getSelectedMartTab().getSchemaTabSet()
.getSelectedSchema();
this.getMartBuilder().martTabSet.getSelectedMartTab()
.getSchemaTabSet().requestRejectAll(schema);
}
// Dataset menu.
else if (e.getSource() == this.invisibleDataset) {
final DataSet ds = this.getMartBuilder().martTabSet
.getSelectedMartTab().getDataSetTabSet()
.getSelectedDataSet();
this.getMartBuilder().martTabSet.getSelectedMartTab()
.getDataSetTabSet().requestInvisibleDataSet(ds,
this.invisibleDataset.isSelected());
} else if (e.getSource() == this.maskedDataset) {
final DataSet ds = this.getMartBuilder().martTabSet
.getSelectedMartTab().getDataSetTabSet()
.getSelectedDataSet();
this.getMartBuilder().martTabSet.getSelectedMartTab()
.getDataSetTabSet().requestMaskDataSet(ds,
this.maskedDataset.isSelected());
} else if (e.getSource() == this.partitionDSWizard) {
final DataSet ds = this.getMartBuilder().martTabSet
.getSelectedMartTab().getDataSetTabSet()
.getSelectedDataSet();
this.getMartBuilder().martTabSet.getSelectedMartTab()
.getDataSetTabSet().requestDataSetPartitionWizard(ds);
} else if (e.getSource() == this.convertPartitionTable) {
final DataSet ds = this.getMartBuilder().martTabSet
.getSelectedMartTab().getDataSetTabSet()
.getSelectedDataSet();
this.getMartBuilder().martTabSet.getSelectedMartTab()
.getDataSetTabSet().requestConvertPartitionTable(ds);
} else if (e.getSource() == this.updatePartitionCounts) {
final DataSet ds = this.getMartBuilder().martTabSet
.getSelectedMartTab().getDataSetTabSet()
.getSelectedDataSet();
this.getMartBuilder().martTabSet.getSelectedMartTab()
.getDataSetTabSet().requestUpdatePTCounts(
ds.asPartitionTable());
} else if (e.getSource() == this.updateAllPartitionCounts) {
this.getMartBuilder().martTabSet.getSelectedMartTab()
.getDataSetTabSet().requestUpdateAllPTCounts();
} else if (e.getSource() == this.explainDataset) {
final DataSet ds = this.getMartBuilder().martTabSet
.getSelectedMartTab().getDataSetTabSet()
.getSelectedDataSet();
this.getMartBuilder().martTabSet.getSelectedMartTab()
.getDataSetTabSet().requestExplainDataSet(ds);
} else if (e.getSource() == this.saveDatasetDDL) {
final DataSet ds = this.getMartBuilder().martTabSet
.getSelectedMartTab().getDataSetTabSet()
.getSelectedDataSet();
this.getMartBuilder().martTabSet.getSelectedMartTab()
.getDataSetTabSet().requestCreateDDL(ds);
} else if (e.getSource() == this.renameDataset) {
final DataSet ds = this.getMartBuilder().martTabSet
.getSelectedMartTab().getDataSetTabSet()
.getSelectedDataSet();
this.getMartBuilder().martTabSet.getSelectedMartTab()
.getDataSetTabSet().requestRenameDataSet(ds);
} else if (e.getSource() == this.removeDataset) {
final DataSet ds = this.getMartBuilder().martTabSet
.getSelectedMartTab().getDataSetTabSet()
.getSelectedDataSet();
this.getMartBuilder().martTabSet.getSelectedMartTab()
.getDataSetTabSet().requestRemoveDataSet(ds);
} else if (e.getSource() == this.extendDataset) {
final DataSet ds = this.getMartBuilder().martTabSet
.getSelectedMartTab().getDataSetTabSet()
.getSelectedDataSet();
this.getMartBuilder().martTabSet.getSelectedMartTab()
.getDataSetTabSet().requestSuggestInvisibleDatasets(ds,
ds.getMainTable());
} else if (e.getSource() == this.indexOptimiser) {
final DataSet ds = this.getMartBuilder().martTabSet
.getSelectedMartTab().getDataSetTabSet()
.getSelectedDataSet();
this.getMartBuilder().martTabSet.getSelectedMartTab()
.getDataSetTabSet().requestIndexOptimiser(ds,
this.indexOptimiser.isSelected());
} else if (e.getSource() == this.datasetAcceptAll) {
final DataSet ds = this.getMartBuilder().martTabSet
.getSelectedMartTab().getDataSetTabSet()
.getSelectedDataSet();
this.getMartBuilder().martTabSet.getSelectedMartTab()
.getDataSetTabSet().requestAcceptAll(ds, null);
} else if (e.getSource() == this.datasetRejectAll) {
final DataSet ds = this.getMartBuilder().martTabSet
.getSelectedMartTab().getDataSetTabSet()
.getSelectedDataSet();
this.getMartBuilder().martTabSet.getSelectedMartTab()
.getDataSetTabSet().requestRejectAll(ds, null);
} else if (e.getSource() == this.datasetReplicate) {
final DataSet ds = this.getMartBuilder().martTabSet
.getSelectedMartTab().getDataSetTabSet()
.getSelectedDataSet();
this.getMartBuilder().martTabSet.getSelectedMartTab()
.getDataSetTabSet().requestReplicateDataSet(ds);
}
// Others
else
super.actionPerformed(e);
}
}
}