// first construct the toolbar for saving, loading etc
if (m_showFileMenu) {
JToolBar fixedTools = new JToolBar();
fixedTools.setOrientation(JToolBar.HORIZONTAL);
m_cutB = new JButton(new ImageIcon(loadImage(BeanVisual.ICON_PATH +
"cut.png")));
m_cutB.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 0));
m_cutB.setToolTipText("Cut selected");
m_copyB = new JButton(new ImageIcon(loadImage(BeanVisual.ICON_PATH +
"page_copy.png")));
m_copyB.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 0));
m_copyB.setToolTipText("Copy selected");
m_pasteB = new JButton(new ImageIcon(loadImage(BeanVisual.ICON_PATH +
"paste_plain.png")));
m_pasteB.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 0));
m_pasteB.setToolTipText("Paste from clipboard");
m_deleteB = new JButton(new ImageIcon(loadImage(BeanVisual.ICON_PATH +
"delete.png")));
m_deleteB.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 0));
m_deleteB.setToolTipText("Delete selected");
m_snapToGridB = new JToggleButton(new ImageIcon(loadImage(BeanVisual.ICON_PATH +
"shape_handles.png")));
//m_snapToGridB.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 0));
m_snapToGridB.setToolTipText("Snap to grid");
/*Dimension d = m_snapToGridB.getPreferredSize();
d = new Dimension((int)d.getWidth() * 8, (int)d.getHeight()*8);
m_snapToGridB.setPreferredSize(d);*/
m_saveB = new JButton(new ImageIcon(loadImage(BeanVisual.ICON_PATH +
"disk.png")));
m_saveB.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 0));
m_saveB.setToolTipText("Save layout");
m_saveBB = new JButton(new ImageIcon(loadImage(BeanVisual.ICON_PATH +
"disk_multiple.png")));
m_saveBB.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 0));
m_saveBB.setToolTipText("Save layout with new name");
m_loadB = new JButton(new ImageIcon(loadImage(BeanVisual.ICON_PATH +
"folder_add.png")));
m_loadB.setToolTipText("Load layout");
m_loadB.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 0));
m_newB = new JButton(new ImageIcon(loadImage(BeanVisual.ICON_PATH +
"page_add.png")));
m_newB.setToolTipText("New layout");
m_newB.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 0));
m_newB.setEnabled(getAllowMultipleTabs());
m_helpB = new JButton(new ImageIcon(loadImage(BeanVisual.ICON_PATH +
"help.png")));
m_helpB.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 0));
m_helpB.setToolTipText("Display help");
m_togglePerspectivesB = new JButton(new ImageIcon(loadImage(BeanVisual.ICON_PATH +
"cog_go.png")));
m_togglePerspectivesB.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 0));
m_togglePerspectivesB.setToolTipText("Show/hide perspectives toolbar");
m_templatesB = new JButton(new ImageIcon(loadImage(BeanVisual.ICON_PATH +
"application_view_tile.png")));
m_templatesB.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 0));
m_templatesB.setToolTipText("Load a template layout");
m_noteB = new JButton(new ImageIcon(loadImage(BeanVisual.ICON_PATH +
"note_add.png")));
m_noteB.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 0));
m_noteB.setToolTipText("Add a note to the layout");
m_selectAllB = new JButton(new ImageIcon(loadImage(BeanVisual.ICON_PATH +
"shape_group.png")));
m_selectAllB.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 0));
m_selectAllB.setToolTipText("Select all");
m_undoB = new JButton(new ImageIcon(loadImage(BeanVisual.ICON_PATH +
"arrow_undo.png")));
m_undoB.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 0));
m_undoB.setToolTipText("Undo");
fixedTools.add(m_selectAllB);
fixedTools.add(m_cutB);
fixedTools.add(m_copyB);
fixedTools.add(m_deleteB);
fixedTools.add(m_pasteB);
fixedTools.add(m_undoB);
fixedTools.add(m_noteB);
fixedTools.addSeparator();
fixedTools.add(m_snapToGridB);
fixedTools.addSeparator();
fixedTools.add(m_newB);
fixedTools.add(m_saveB);
fixedTools.add(m_saveBB);
fixedTools.add(m_loadB);
fixedTools.add(m_templatesB);
fixedTools.addSeparator();
fixedTools.add(m_togglePerspectivesB);
fixedTools.add(m_helpB);
Dimension d = m_undoB.getPreferredSize();
Dimension d2 = fixedTools.getMinimumSize();
Dimension d3 = new Dimension(d2.width, d.height + 4);
fixedTools.setPreferredSize(d3);
fixedTools.setMaximumSize(d3);
m_saveB.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
saveLayout(m_mainKFPerspective.getCurrentTabIndex(), false);
}
});
m_saveBB.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
saveLayout(m_mainKFPerspective.getCurrentTabIndex(), true);
}
});
m_loadB.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
m_flowEnvironment = new Environment();
loadLayout();
}
});
m_newB.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
clearLayout();
}
});
m_selectAllB.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (BeanInstance.
getBeanInstances(m_mainKFPerspective.getCurrentTabIndex()).size() > 0) {
// select all beans
Vector allBeans = BeanInstance.
getBeanInstances(m_mainKFPerspective.getCurrentTabIndex());
Vector newSelected = new Vector();
for (int i = 0; i < allBeans.size(); i++) {
newSelected.add(allBeans.get(i));
}
// toggle
if (newSelected.size() ==
m_mainKFPerspective.getSelectedBeans().size()) {
// unselect all beans
m_mainKFPerspective.setSelectedBeans(new Vector());
} else {
// select all beans
m_mainKFPerspective.setSelectedBeans(newSelected);
}
}
}
});
m_cutB.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// only delete if our copy was successful!
if (copyToClipboard()) {
deleteSelectedBeans();
}
}
});
m_deleteB.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
deleteSelectedBeans();
}
});
m_copyB.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
copyToClipboard();
m_mainKFPerspective.setSelectedBeans(new Vector());
}
});
m_pasteB.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
KnowledgeFlowApp.this.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
m_mode = PASTING;
/* pasteFromClipboard(10, 10);
if (m_mainKFPerspective.getSelectedBeans().size() > 0) {
m_mainKFPerspective.setSelectedBeans(new Vector());
} */
}
});
m_snapToGridB.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (m_snapToGridB.isSelected()) {
snapSelectedToGrid();
}
}
});
fixedTools.setFloatable(false);
toolBarPanel.add(fixedTools, BorderLayout.EAST);
}
m_noteB.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Note n = new Note();
m_toolBarBean = n;
KnowledgeFlowApp.this.setCursor(Cursor.
getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
m_mode = ADDING;
}
});
m_undoB.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Stack<File> undo = m_mainKFPerspective.getUndoBuffer();
if (undo.size() > 0) {
File undoF = undo.pop();
if (undo.size() == 0) {
m_undoB.setEnabled(false);
}
loadLayout(undoF, false, true);
}
}
});
m_playB = new JButton(new ImageIcon(loadImage(BeanVisual.ICON_PATH +
"resultset_next.png")));
m_playB.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0));
m_playB.setToolTipText("Run this flow (all start points launched in parallel)");
m_playB.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (BeanInstance.getBeanInstances(m_mainKFPerspective.
getCurrentTabIndex()).size() == 0) {
return;
}
runFlow(false);
}
});
m_playBB = new JButton(new ImageIcon(loadImage(BeanVisual.ICON_PATH +
"resultset_last.png")));
m_playBB.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0));
m_playBB.setToolTipText("Run this flow (start points launched sequentially)");
m_playBB.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (BeanInstance.getBeanInstances(m_mainKFPerspective.
getCurrentTabIndex()).size() == 0) {
return;
}
if (!Utils.getDontShowDialog("weka.gui.beans.KnowledgeFlow.SequentialRunInfo")) {
JCheckBox dontShow = new JCheckBox("Do not show this message again");
Object[] stuff = new Object[2];
stuff[0] = "The order that data sources are launched in can be\n" +
"specified by setting a custom name for each data source that\n" +
"that includes a number. E.g. \"1:MyArffLoader\". To set a name,\n" +
"right-click over a data source and select \"Set name\"\n\n" +
"If the prefix is not specified, then the order of execution\n" +
"will correspond to the order that the components were added\n" +
"to the layout. Note that it is also possible to prevent a data\n" +
"source from executing by prefixing its name with a \"!\". E.g\n" +
"\"!:MyArffLoader\"";
stuff[1] = dontShow;
JOptionPane.showMessageDialog(KnowledgeFlowApp.this, stuff,
"Sequential execution information", JOptionPane.OK_OPTION);
if (dontShow.isSelected()) {
try {
Utils.setDontShowDialog("weka.gui.beans.KnowledgeFlow.SequentialRunInfo");
} catch (Exception ex) {
// quietly ignore
}
}
}
runFlow(true);
}
});
m_stopB = new JButton(new ImageIcon(loadImage(BeanVisual.ICON_PATH +
"shape_square.png")));
m_stopB.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 0));
m_stopB.setToolTipText("Stop all execution");
Image tempI = loadImage(BeanVisual.ICON_PATH + "cursor.png");
m_pointerB = new JButton(new ImageIcon(tempI));
m_pointerB.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0));
m_pointerB.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
m_toolBarBean = null;
m_mode = NONE;
KnowledgeFlowApp.this.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
m_componentTree.clearSelection();
}
});
// Dimension dP = m_saveB.getPreferredSize();
// Dimension dM = m_saveB.getMaximumSize();
// Dimension dP = m_stopB.getPreferredSize();
// Dimension dM = m_stopB.getMaximumSize();
// m_pointerB.setPreferredSize(dP);
// m_pointerB.setMaximumSize(dM);
//m_toolBarGroup.add(m_pointerB);
JToolBar fixedTools2 = new JToolBar();
fixedTools2.setOrientation(JToolBar.HORIZONTAL);
fixedTools2.setFloatable(false);
fixedTools2.add(m_pointerB);
fixedTools2.add(m_playB);
fixedTools2.add(m_playBB);
fixedTools2.add(m_stopB);
Dimension d = m_playB.getPreferredSize();
Dimension d2 = fixedTools2.getMinimumSize();
Dimension d3 = new Dimension(d2.width, d.height + 4);
fixedTools2.setPreferredSize(d3);
fixedTools2.setMaximumSize(d3);
// m_helpB.setPreferredSize(dP);
// m_helpB.setMaximumSize(dP);
//m_helpB.setSize(m_pointerB.getSize().width, m_pointerB.getSize().height);
toolBarPanel.add(fixedTools2, BorderLayout.WEST);
// end modifications by Zerbetto
m_stopB.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
m_logPanel.statusMessage("[KnowledgeFlow]|Attempting to stop all components...");
stopFlow();
m_logPanel.statusMessage("[KnowledgeFlow]|OK.");
}
});
m_helpB.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
popupHelp();
}
});
m_templatesB.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
createTemplateMenuPopup();
}
});
m_templatesB.setEnabled(TEMPLATE_PATHS.size() > 0);
m_togglePerspectivesB.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (m_firstUserComponentOpp) {
installWindowListenerForSavingUserStuff();
m_firstUserComponentOpp = false;
}
if (!Utils.getDontShowDialog("weka.gui.beans.KnowledgeFlow.PerspectiveInfo")) {
JCheckBox dontShow = new JCheckBox("Do not show this message again");
Object[] stuff = new Object[2];
stuff[0] = "Perspectives are environments that take over the\n" +
"Knowledge Flow UI and provide major additional functionality.\n" +
"Many perspectives will operate on a set of instances. Instances\n" +
"Can be sent to a perspective by placing a DataSource on the\n" +
"layout canvas, configuring it and then selecting \"Send to perspective\"\n" +
"from the contextual popup menu that appears when you right-click on\n" +
"it. Several perspectives are built in to the Knowledge Flow, others\n" +
"can be installed via the package manager.\n";
stuff[1] = dontShow;
JOptionPane.showMessageDialog(KnowledgeFlowApp.this, stuff,
"Perspective information", JOptionPane.OK_OPTION);
if (dontShow.isSelected()) {
try {
Utils.setDontShowDialog("weka.gui.beans.KnowledgeFlow.PerspectiveInfo");
} catch (Exception ex) {
// quietly ignore
}
}
}
if (m_configAndPerspectivesVisible) {
KnowledgeFlowApp.this.remove(m_configAndPerspectives);
m_configAndPerspectivesVisible = false;
} else {
KnowledgeFlowApp.this.add(m_configAndPerspectives, BorderLayout.NORTH);
m_configAndPerspectivesVisible = true;
}
revalidate();
repaint();
notifyIsDirty();
}
});
final int standard_toolset = 0;
final int wrapper_toolset = 1;
int toolBarType = standard_toolset;
DefaultMutableTreeNode jtreeRoot = new DefaultMutableTreeNode("Weka");
// set up wrapper toolsets
for (int i = 0; i < TOOLBARS.size(); i++) {
Vector tempBarSpecs = (Vector) TOOLBARS.elementAt(i);
// name for the tool bar
String tempToolSetName = (String) tempBarSpecs.elementAt(0);
DefaultMutableTreeNode subTreeNode = new DefaultMutableTreeNode(tempToolSetName);
jtreeRoot.add(subTreeNode);
// Used for weka leaf packages
// Box singletonHolderPanel = null;
// name of the bean component to handle this class of weka algorithms
String tempBeanCompName = (String) tempBarSpecs.elementAt(1);
// a JPanel holding an instantiated bean + label ready to be added
// to the current toolbar
JPanel tempBean;
// the root package for weka algorithms
String rootPackage = "";
weka.gui.HierarchyPropertyParser hpp = null;
Hashtable hpps = null;
// Is this a wrapper toolbar?
if (tempBeanCompName.compareTo("null") != 0) {
tempBean = null;
toolBarType = wrapper_toolset;
rootPackage = (String) tempBarSpecs.elementAt(2);
// hpp = (weka.gui.HierarchyPropertyParser)tempBarSpecs.elementAt(3);
hpps = (Hashtable) tempBarSpecs.elementAt(3);
try {
// modifications by Zerbetto
// Beans.instantiate(null, tempBeanCompName);
Beans.instantiate(this.getClass().getClassLoader(), tempBeanCompName);
// end modifications by Zerbetto
} catch (Exception ex) {
// ignore
System.err.println("[KnowledgeFlow] Failed to instantiate: " + tempBeanCompName);
break;
}
} else {
toolBarType = standard_toolset;
}
// a toolbar to hold buttons---one for each algorithm
// JToolBar tempToolBar = new JToolBar();
// System.err.println(tempToolBar.getLayout());
// tempToolBar.setLayout(new FlowLayout());
int z = 2;
if (toolBarType == wrapper_toolset) {
Enumeration enm = hpps.keys();
while (enm.hasMoreElements()) {
String root = (String) enm.nextElement();
String userPrefix = "";
hpp = (HierarchyPropertyParser) hpps.get(root);
if (!hpp.goTo(rootPackage)) {
System.out.println("[KnowledgeFlow] Processing user package... ");
// System.exit(1);
userPrefix = root + ".";
}
String[] primaryPackages = hpp.childrenValues();
for (int kk = 0; kk < primaryPackages.length; kk++) {
hpp.goToChild(primaryPackages[kk]);
// check to see if this is a leaf - if so then there are no
// sub packages
if (hpp.isLeafReached()) {
/* if (singletonHolderPanel == null) {
singletonHolderPanel = Box.createHorizontalBox();
singletonHolderPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(
tempToolSetName));
} */
String algName = hpp.fullValue();
// -- tempBean = instantiateToolBarBean(true, tempBeanCompName, algName);
Object visibleCheck = instantiateBean((toolBarType == wrapper_toolset),
tempBeanCompName, algName);
//if (tempBean != null) {
if (visibleCheck != null) {
// tempToolBar.add(tempBean);
// singletonHolderPanel.add(tempBean);
/*Object visibleCheck = instantiateBean((toolBarType == wrapper_toolset),
tempBeanCompName, algName); */
if (visibleCheck instanceof BeanContextChild) {
m_bcSupport.add(visibleCheck);
}
ImageIcon scaledForTree = null;
if (visibleCheck instanceof Visible) {
BeanVisual bv = ((Visible)visibleCheck).getVisual();
if (bv != null) {
scaledForTree = new ImageIcon(bv.scale(0.33));
// m_iconLookup.put(algName, scaledForTree);
}
}
JTreeLeafDetails leafData = new JTreeLeafDetails(tempBeanCompName, algName,
scaledForTree);
DefaultMutableTreeNode leafAlgo =
new DefaultMutableTreeNode(leafData);
subTreeNode.add(leafAlgo);
}
hpp.goToParent();
} else {
// make a titledborder JPanel to hold all the schemes in this
// package
// JPanel holderPanel = new JPanel();
/* Box holderPanel = Box.createHorizontalBox();
holderPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(userPrefix +
primaryPackages[kk])); */
DefaultMutableTreeNode firstLevelOfMainAlgoType =
new DefaultMutableTreeNode(primaryPackages[kk]);
subTreeNode.add(firstLevelOfMainAlgoType);
//processPackage(holderPanel, tempBeanCompName, hpp, firstLevelOfMainAlgoType);
processPackage(tempBeanCompName, hpp, firstLevelOfMainAlgoType);
// tempToolBar.add(holderPanel);
}
}
/* if (singletonHolderPanel != null) {
tempToolBar.add(singletonHolderPanel);
singletonHolderPanel = null;
} */
}
} else {
/* Box holderPanel = Box.createHorizontalBox();
holderPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(
tempToolSetName)); */
for (int j = z; j < tempBarSpecs.size(); j++) {
tempBean = null;
tempBeanCompName = (String) tempBarSpecs.elementAt(j);
Object visibleCheck = instantiateBean((toolBarType == wrapper_toolset),
tempBeanCompName, "");
/* -- tempBean = instantiateToolBarBean((toolBarType == wrapper_toolset),
tempBeanCompName, ""); */
//if (tempBean != null) {
if (visibleCheck != null) {
// set tool tip text (if any)
// setToolTipText(tempBean)
// holderPanel.add(tempBean);
String treeName = tempBeanCompName;
if (treeName.lastIndexOf('.') > 0) {
treeName = treeName.substring(treeName.lastIndexOf('.') + 1,
treeName.length());
}
/*Object visibleCheck = instantiateBean((toolBarType == wrapper_toolset),
tempBeanCompName, ""); */
if (visibleCheck instanceof BeanContextChild) {
m_bcSupport.add(visibleCheck);
}
ImageIcon scaledForTree = null;
if (visibleCheck instanceof Visible) {
BeanVisual bv = ((Visible)visibleCheck).getVisual();
if (bv != null) {
scaledForTree = new ImageIcon(bv.scale(0.33));
//m_iconLookup.put(treeName, scaledForTree);
}
}
JTreeLeafDetails leafData = new JTreeLeafDetails(tempBeanCompName, "",
scaledForTree);
DefaultMutableTreeNode fixedLeafNode = new DefaultMutableTreeNode(leafData);
subTreeNode.add(fixedLeafNode);
}
}
// tempToolBar.add(holderPanel);
}
// JScrollPane tempJScrollPane = createScrollPaneForToolBar(tempToolBar);
// ok, now create tabbed pane to hold this toolbar
// m_toolBars.addTab(tempToolSetName, null, tempJScrollPane, tempToolSetName);
}
/// ----
// TODO Prescan for bean plugins and only create user tree node if there
// are actually some beans (rather than just all perspectives)
// Any plugin components to process?
if (BEAN_PLUGINS_PROPERTIES != null &&
BEAN_PLUGINS_PROPERTIES.size() > 0) {
boolean pluginBeans = false;
DefaultMutableTreeNode userSubTree = null;
for (int i = 0; i < BEAN_PLUGINS_PROPERTIES.size(); i++) {
Properties tempP = BEAN_PLUGINS_PROPERTIES.get(i);
JPanel tempBean = null;
String components =
tempP.getProperty("weka.gui.beans.KnowledgeFlow.Plugins");
if (components != null && components.length() > 0) {
if (!pluginBeans) {
// make the Plugins tree node entry
userSubTree = new DefaultMutableTreeNode("Plugins");
jtreeRoot.add(userSubTree);
pluginBeans = true;
}
StringTokenizer st2 = new StringTokenizer(components, ", ");
while (st2.hasMoreTokens()) {
String tempBeanCompName = st2.nextToken().trim();
String treeName = tempBeanCompName;
if (treeName.lastIndexOf('.') > 0) {
treeName = treeName.substring(treeName.lastIndexOf('.') + 1,
treeName.length());
}
// tempBean = instantiateToolBarBean(false, tempBeanCompName, "");
/* if (m_pluginsToolBar == null) {
// need to create the plugins tab and toolbar
setUpPluginsToolBar();
}
m_pluginsBoxPanel.add(tempBean); */
Object visibleCheck = instantiateBean((toolBarType == wrapper_toolset),
tempBeanCompName, "");
if (visibleCheck instanceof BeanContextChild) {
m_bcSupport.add(visibleCheck);
}
ImageIcon scaledForTree = null;
if (visibleCheck instanceof Visible) {
BeanVisual bv = ((Visible)visibleCheck).getVisual();
if (bv != null) {
scaledForTree = new ImageIcon(bv.scale(0.33));
//m_iconLookup.put(tempBeanCompName, scaledForTree);
}
}
JTreeLeafDetails leafData = new JTreeLeafDetails(tempBeanCompName, "",
scaledForTree);