beanContextMenu.insert(edit, menuItemCount);
menuItemCount++;
if (m_mainKFPerspective.getSelectedBeans().size() > 0) {
MenuItem copyItem = new MenuItem("Copy");
copyItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
copyToClipboard();
m_mainKFPerspective.setSelectedBeans(new Vector());
}
});
beanContextMenu.add(copyItem);
menuItemCount++;
}
if (bc instanceof MetaBean) {
//JMenuItem ungroupItem = new JMenuItem("Ungroup");
MenuItem ungroupItem = new MenuItem("Ungroup");
ungroupItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// ungroup
bi.removeBean(m_beanLayout, m_mainKFPerspective.getCurrentTabIndex());
Vector group = ((MetaBean) bc).getBeansInSubFlow();
Vector associatedConnections = ((MetaBean) bc).getAssociatedConnections();
((MetaBean) bc).restoreBeans(xx, yy);
for (int i = 0; i < group.size(); i++) {
BeanInstance tbi = (BeanInstance) group.elementAt(i);
addComponent(tbi, false);
tbi.addBean(m_beanLayout, m_mainKFPerspective.getCurrentTabIndex());
}
for (int i = 0; i < associatedConnections.size(); i++) {
BeanConnection tbc = (BeanConnection) associatedConnections.elementAt(i);
tbc.setHidden(false);
}
m_beanLayout.repaint();
m_mainKFPerspective.setEditedStatus(true);
notifyIsDirty();
}
});
beanContextMenu.add(ungroupItem);
menuItemCount++;
// Add to user tab
//JMenuItem addToUserTabItem = new JMenuItem("Add to user tab");
MenuItem addToUserTabItem = new MenuItem("Add to user tab");
addToUserTabItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//addToUserToolBar((MetaBean) bi.getBean(), true);
//addToUserTreeNode((MetaBean) bi.getBean(), true);
addToUserTreeNode(bi, true);
notifyIsDirty();
}
});
beanContextMenu.add(addToUserTabItem);
menuItemCount++;
}
//JMenuItem deleteItem = new JMenuItem("Delete");
MenuItem deleteItem = new MenuItem("Delete");
deleteItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
BeanConnection.removeConnections(bi, m_mainKFPerspective.getCurrentTabIndex());
bi.removeBean(m_beanLayout, m_mainKFPerspective.getCurrentTabIndex());
if (bc instanceof BeanCommon) {
String key = ((BeanCommon)bc).getCustomName()
+ "$" + bc.hashCode();
m_logPanel.statusMessage(key + "|remove");
}
// delete any that have been actively selected
if (m_mainKFPerspective.getSelectedBeans().size() > 0) {
deleteSelectedBeans();
}
revalidate();
m_mainKFPerspective.setEditedStatus(true);
notifyIsDirty();
m_selectAllB.setEnabled(BeanInstance.
getBeanInstances(m_mainKFPerspective.getCurrentTabIndex()).size() > 0);
}
});
if (bc instanceof BeanCommon) {
if (((BeanCommon)bc).isBusy()) {
deleteItem.setEnabled(false);
}
}
beanContextMenu.add(deleteItem);
menuItemCount++;
if (bc instanceof BeanCommon) {
MenuItem nameItem = new MenuItem("Set name");
nameItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String oldName = ((BeanCommon)bc).getCustomName();
String name = JOptionPane.showInputDialog(KnowledgeFlowApp.this,
"Enter a name for this component",
oldName);
if (name != null) {
((BeanCommon)bc).setCustomName(name);
m_mainKFPerspective.setEditedStatus(true);
}
}
});
if (bc instanceof BeanCommon) {
if (((BeanCommon)bc).isBusy()) {
nameItem.setEnabled(false);
}
}
beanContextMenu.add(nameItem);
menuItemCount++;
}
try {
//BeanInfo [] compInfo = null;
//JComponent [] associatedBeans = null;
Vector compInfo = new Vector(1);
Vector associatedBeans = null;
Vector outputBeans = null;
Vector compInfoOutputs = null;
if (bc instanceof MetaBean) {
compInfo = ((MetaBean) bc).getBeanInfoSubFlow();
associatedBeans = ((MetaBean) bc).getBeansInSubFlow();
outputBeans = ((MetaBean) bc).getBeansInOutputs();
compInfoOutputs = ((MetaBean) bc).getBeanInfoOutputs();
} else {
compInfo.add(Introspector.getBeanInfo(bc.getClass()));
compInfoOutputs = compInfo;
}
final Vector tempAssociatedBeans = associatedBeans;
if (compInfo == null) {
System.err.println("[KnowledgeFlow] Error in doPopup()");
} else {
// System.err.println("Got bean info");
for (int zz = 0; zz < compInfo.size(); zz++) {
final int tt = zz;
final Class custClass = ((BeanInfo) compInfo.elementAt(zz)).getBeanDescriptor()
.getCustomizerClass();
if (custClass != null) {
// System.err.println("Got customizer class");
// popupCustomizer(custClass, bc);
//JMenuItem custItem = null;
MenuItem custItem = null;
boolean customizationEnabled = true;
if (!(bc instanceof MetaBean)) {
//custItem = new JMenuItem("Configure...");
custItem = new MenuItem("Configure...");
if (bc instanceof BeanCommon) {
customizationEnabled =
!((BeanCommon)bc).isBusy();
}
} else {
String custName = custClass.getName();
BeanInstance tbi = (BeanInstance) associatedBeans.elementAt(zz);
if (tbi.getBean() instanceof BeanCommon) {
custName = ((BeanCommon)tbi.getBean()).getCustomName();
} else {
if (tbi.getBean() instanceof WekaWrapper) {
custName = ((WekaWrapper) tbi.getBean()).getWrappedAlgorithm()
.getClass().getName();
} else {
custName = custName.substring(0, custName.indexOf("Customizer"));
}
custName = custName.substring(custName.lastIndexOf('.') + 1,
custName.length());
}
//custItem = new JMenuItem("Configure: "+ custName);
custItem = new MenuItem("Configure: " + custName);
if (tbi.getBean() instanceof BeanCommon) {
customizationEnabled =
!((BeanCommon)tbi.getBean()).isBusy();
}
}
custItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (bc instanceof MetaBean) {
popupCustomizer(custClass,
(JComponent) ((BeanInstance) tempAssociatedBeans.
elementAt(tt)).getBean());
} else {
popupCustomizer(custClass, bc);
}
notifyIsDirty();
}
});
custItem.setEnabled(customizationEnabled);
beanContextMenu.add(custItem);
menuItemCount++;
} else {
System.err.println("[KnowledgeFlow] No customizer class");
}
}
Vector esdV = new Vector();
//for (int i = 0; i < compInfoOutputs.size(); i++) {
for (int i = 0; i < compInfo.size(); i++) {
EventSetDescriptor[] temp =
// ((BeanInfo) compInfoOutputs.elementAt(i)).getEventSetDescriptors();
((BeanInfo) compInfo.elementAt(i)).getEventSetDescriptors();
if ((temp != null) && (temp.length > 0)) {
esdV.add(temp);
}
}
// EventSetDescriptor [] esds = compInfo.getEventSetDescriptors();
// if (esds != null && esds.length > 0) {
if (esdV.size() > 0) {
// beanContextMenu.insert(new JLabel("Connections",
// SwingConstants.CENTER),
// menuItemCount);
MenuItem connections = new MenuItem("Connections:");
connections.setEnabled(false);
beanContextMenu.insert(connections, menuItemCount);
menuItemCount++;
}
//final Vector finalOutputs = outputBeans;
final Vector finalOutputs = associatedBeans;
for (int j = 0; j < esdV.size(); j++) {
final int fj = j;
String sourceBeanName = "";
if (bc instanceof MetaBean) {
//Object sourceBean = ((BeanInstance) outputBeans.elementAt(j)).getBean();
Object sourceBean = ((BeanInstance) associatedBeans.elementAt(j)).getBean();
if (sourceBean instanceof BeanCommon) {
sourceBeanName = ((BeanCommon)sourceBean).getCustomName();
} else {
if (sourceBean instanceof WekaWrapper) {
sourceBeanName = ((WekaWrapper) sourceBean).getWrappedAlgorithm()
.getClass().getName();
} else {
sourceBeanName = sourceBean.getClass().getName();
}
sourceBeanName =
sourceBeanName.substring(sourceBeanName.lastIndexOf('.') + 1,
sourceBeanName.length());
}
sourceBeanName += ": ";
}
EventSetDescriptor[] esds = (EventSetDescriptor[]) esdV.elementAt(j);
for (int i = 0; i < esds.length; i++) {
// System.err.println(esds[i].getName());
// add each event name to the menu
// JMenuItem evntItem = new JMenuItem(sourceBeanName
// +esds[i].getName());
MenuItem evntItem = new MenuItem(sourceBeanName +
esds[i].getName());
final EventSetDescriptor esd = esds[i];
// Check EventConstraints (if any) here
boolean ok = true;
if (bc instanceof EventConstraints) {
ok = ((EventConstraints) bc).eventGeneratable(esd.getName());
}
if (ok) {
evntItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
connectComponents(esd,
(bc instanceof MetaBean)
? ((BeanInstance) finalOutputs.elementAt(fj)) : bi, xx, yy);
notifyIsDirty();
}
});
} else {
evntItem.setEnabled(false);
}
beanContextMenu.add(evntItem);
menuItemCount++;
}
}
}
} catch (IntrospectionException ie) {
ie.printStackTrace();
}
// System.err.println("Just before look for other options");
// now look for other options for this bean
if (bc instanceof UserRequestAcceptor || bc instanceof Startable) {
Enumeration req = null;
if (bc instanceof UserRequestAcceptor) {
req = ((UserRequestAcceptor) bc).enumerateRequests();
}
if (/*(bc instanceof Startable) ||*/ (req !=null && req.hasMoreElements())) {
// beanContextMenu.insert(new JLabel("Actions",
// SwingConstants.CENTER),
// menuItemCount);
MenuItem actions = new MenuItem("Actions:");
actions.setEnabled(false);
beanContextMenu.insert(actions, menuItemCount);
menuItemCount++;
}
/*if (bc instanceof Startable) {
String tempS = ((Startable)bc).getStartMessage();
insertUserOrStartableMenuItem(bc, true, tempS, beanContextMenu);
}*/
while (req != null && req.hasMoreElements()) {
String tempS = (String) req.nextElement();
insertUserOrStartableMenuItem(bc, false, tempS, beanContextMenu);
menuItemCount++;
}
}
// Send to perspective menu item?
if (bc instanceof weka.gui.beans.Loader && m_perspectives.size() > 1 &&
m_perspectiveDataLoadThread == null) {
final weka.core.converters.Loader theLoader =
((weka.gui.beans.Loader)bc).getLoader();
boolean ok = true;
if (theLoader instanceof FileSourcedConverter) {
String fileName = ((FileSourcedConverter)theLoader).
retrieveFile().getPath();
Environment env = m_mainKFPerspective.getEnvironmentSettings();
try {
fileName = env.substitute(fileName);
} catch (Exception ex) {
}
File tempF = new File(fileName);
if (!tempF.isFile()) {
ok = false;
}
}
if (ok) {
beanContextMenu.addSeparator();
menuItemCount++;
if (m_perspectives.size() > 2) {
MenuItem sendToAllPerspectives = new MenuItem("Send to all perspectives");
menuItemCount++;
sendToAllPerspectives.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
loadDataAndSendToPerspective(theLoader, 0, true);
}
});
beanContextMenu.add(sendToAllPerspectives);
}
Menu sendToPerspective = new Menu("Send to perspective...");
beanContextMenu.add(sendToPerspective);
menuItemCount++;
for (int i = 1; i < m_perspectives.size(); i++) {
final int pIndex = i;
if (m_perspectives.get(i).acceptsInstances()) {
String pName = m_perspectives.get(i).getPerspectiveTitle();
MenuItem pI = new MenuItem(pName);
pI.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
loadDataAndSendToPerspective(theLoader, pIndex, false);
}
});
sendToPerspective.add(pI);