📄 knowledgeflowapp.java
字号:
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) {
Enumeration req = ((UserRequestAcceptor)bc).enumerateRequests();
if (req.hasMoreElements()) {
beanContextMenu.insert(new JLabel("Actions",
SwingConstants.CENTER),
menuItemCount);
menuItemCount++;
}
while (req.hasMoreElements()) {
String tempS = (String)req.nextElement();
boolean disabled = false;
// check to see if this item is currently disabled
if (tempS.charAt(0) == '$') {
tempS = tempS.substring(1, tempS.length());
disabled = true;
}
final String tempS2 = tempS;
JMenuItem custItem = new JMenuItem(tempS2);
custItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
((UserRequestAcceptor)bc).performRequest(tempS2);
}
});
if (disabled) {
custItem.setEnabled(false);
}
beanContextMenu.add(custItem);
menuItemCount++;
}
}
// System.err.println("Just before showing menu");
// popup the menu
if (menuItemCount > 0) {
beanContextMenu.show(m_beanLayout, x, y);
}
}
/**
* Popup the customizer for this bean
*
* @param custClass the class of the customizer
* @param bc the bean to be customized
*/
private void popupCustomizer(Class custClass, JComponent bc) {
try {
// instantiate
final Object customizer = custClass.newInstance();
((Customizer)customizer).setObject(bc);
final javax.swing.JFrame jf = new javax.swing.JFrame();
jf.getContentPane().setLayout(new BorderLayout());
jf.getContentPane().add((JComponent)customizer, BorderLayout.CENTER);
if (customizer instanceof CustomizerCloseRequester) {
((CustomizerCloseRequester)customizer).setParentFrame(jf);
}
jf.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent e) {
if (customizer instanceof CustomizerClosingListener) {
((CustomizerClosingListener)customizer).customizerClosing();
}
jf.dispose();
}
});
jf.pack();
jf.setVisible(true);
} catch (Exception ex) {
ex.printStackTrace();
}
}
/**
* Handles adding a custom MetaBean to the user toolbar
*
* @param bean the MetaBean
* @param installListener install a listener for window close
* events so as to save the user components
*/
private void addToUserToolBar(MetaBean bean,
boolean installListener) {
if (m_userToolBar == null) {
// need to create the user tab and toolbar
setUpUserToolBar();
}
// Disconnect any beans connected to the inputs or outputs
// of this MetaBean (prevents serialization of the entire
// KnowledgeFlow!!)
Vector tempRemovedConnections = new Vector();
Vector allConnections = BeanConnection.getConnections();
Vector inputs = bean.getInputs();
Vector outputs = bean.getOutputs();
for (int i = 0; i < inputs.size(); i++) {
BeanInstance temp = (BeanInstance)inputs.elementAt(i);
// is this input a target for some event?
for (int j = 0; j < allConnections.size(); j++) {
BeanConnection tempC = (BeanConnection)allConnections.elementAt(j);
if (tempC.getTarget() == temp) {
tempRemovedConnections.add(tempC);
}
}
}
for (int i = 0; i < outputs.size(); i++) {
BeanInstance temp = (BeanInstance)outputs.elementAt(i);
// is this output a source for some target?
for (int j = 0; j < allConnections.size(); j++) {
BeanConnection tempC = (BeanConnection)allConnections.elementAt(j);
if (tempC.getSource() == temp) {
tempRemovedConnections.add(tempC);
}
}
}
for (int i = 0; i < tempRemovedConnections.size(); i++) {
BeanConnection temp =
(BeanConnection)tempRemovedConnections.elementAt(i);
temp.remove();
}
// now add to user tool bar
JPanel tempUser = instantiateToolBarMetaBean(bean);
m_userBoxPanel.add(tempUser);
if (installListener && m_firstUserComponentOpp) {
try {
installWindowListenerForSavingUserBeans();
m_firstUserComponentOpp = false;
} catch (Exception ex) {
ex.printStackTrace();
}
}
// Now reinstate any deleted connections to the original MetaBean
for (int i = 0; i < tempRemovedConnections.size(); i++) {
BeanConnection temp =
(BeanConnection)tempRemovedConnections.elementAt(i);
BeanConnection newC =
new BeanConnection(temp.getSource(), temp.getTarget(),
temp.getSourceEventSetDescriptor());
}
}
/**
* Popup a menu giving choices for connections to delete (if any)
*
* @param closestConnections a vector containing 0 or more BeanConnections
* @param x the x coordinate at which to popup the menu
* @param y the y coordinate at which to popup the menu
*/
private void deleteConnectionPopup(Vector closestConnections,
int x, int y) {
if (closestConnections.size() > 0) {
int menuItemCount = 0;
JPopupMenu deleteConnectionMenu = new JPopupMenu();
deleteConnectionMenu.insert(new JLabel("Delete Connection",
SwingConstants.CENTER),
menuItemCount);
menuItemCount++;
for (int i = 0; i < closestConnections.size(); i++) {
final BeanConnection bc =
(BeanConnection)closestConnections.elementAt(i);
String connName = bc.getSourceEventSetDescriptor().getName();
JMenuItem deleteItem = new JMenuItem(connName);
deleteItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
bc.remove();
m_beanLayout.revalidate();
m_beanLayout.repaint();
}
});
deleteConnectionMenu.add(deleteItem);
menuItemCount++;
}
deleteConnectionMenu.show(m_beanLayout, x, y);
}
}
/**
* Initiates the connection process for two beans
*
* @param esd the EventSetDescriptor for the source bean
* @param bi the source bean
* @param x the x coordinate to start connecting from
* @param y the y coordinate to start connecting from
*/
private void connectComponents(EventSetDescriptor esd,
BeanInstance bi,
int x,
int y) {
// record the event set descriptior for this event
m_sourceEventSetDescriptor = esd;
Class listenerClass = esd.getListenerType(); // class of the listener
JComponent source = (JComponent)bi.getBean();
// now determine which (if any) of the other beans implement this
// listener
int targetCount = 0;
Vector beanInstances = BeanInstance.getBeanInstances();
for (int i = 0; i < beanInstances.size(); i++) {
JComponent bean =
(JComponent)((BeanInstance)beanInstances.elementAt(i)).getBean();
boolean connectable = false;
boolean canContinue = false;
if (bean != source) {
if (bean instanceof MetaBean) {
if (((MetaBean)bean).canAcceptConnection(listenerClass)) {
canContinue = true;
}
} else if (listenerClass.isInstance(bean) && bean != source) {
canContinue = true;
}
}
if (canContinue) {
if (!(bean instanceof BeanCommon)) {
connectable = true; // assume this bean is happy to receive a connection
} else {
// give this bean a chance to veto any proposed connection via
// the listener interface
if (((BeanCommon)bean).
connectionAllowed(esd)) {
connectable = true;
}
}
if (connectable) {
if (bean instanceof Visible) {
targetCount++;
((Visible)bean).getVisual().setDisplayConnectors(true);
}
}
}
}
// have some possible beans to connect to?
if (targetCount > 0) {
// System.err.println("target count "+targetCount);
if (source instanceof Visible) {
((Visible)source).getVisual().setDisplayConnectors(true);
}
m_editElement = bi;
Point closest = ((Visible)source).getVisual().
getClosestConnectorPoint(new Point(x, y));
m_startX = (int)closest.getX();
m_startY = (int)closest.getY();
m_oldX = m_startX;
m_oldY = m_startY;
Graphics2D gx = (Graphics2D)m_beanLayout.getGraphics();
gx.setXORMode(java.awt.Color.white);
gx.drawLine(m_startX, m_startY, m_startX, m_startY);
gx.dispose();
m_mode = CONNECTING;
}
}
private void addComponent(BeanInstance comp, boolean repaint) {
if (comp.getBean() instanceof Visible) {
((Visible)comp.getBean()).getVisual().addPropertyChangeListener(this);
}
if (comp.getBean() instanceof BeanCommon) {
((BeanCommon)comp.getBean()).setLog(m_logPanel);
}
if (comp.getBean() instanceof MetaBean) {
// re-align sub-beans
Vector list;
list = ((MetaBean) comp.getBean()).getInputs();
for (int i = 0; i < list.size(); i++) {
((BeanInstance) list.get(i)).setX(comp.getX());
((BeanInstance) list.get(i)).setY(comp.getY());
}
list = ((MetaBean) comp.getBean()).getOutputs();
for (int i = 0; i < list.size(); i++) {
((BeanInstance) list.get(i)).setX(comp.getX());
((BeanInstance) list.get(i)).setY(comp.getY());
}
}
setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
if (repaint) {
m_beanLayout.repaint();
}
m_pointerB.setSelected(true);
m_mode = NONE;
}
private void addComponent(int x, int y) {
if (m_toolBarBean instanceof MetaBean) {
// need to add the MetaBean's internal connections
// to BeanConnection's vector
Vector associatedConnections =
((MetaBean)m_toolBarBean).getAssociatedConnections();
BeanConnection.getConnections().addAll(associatedConnections);
}
if (m_toolBarBean instanceof BeanContextChild) {
m_bcSupport.add(m_toolBarBean);
}
BeanInstance bi = new BeanInstance(m_beanLayout, m_toolBarBean, x, y);
// addBean((JComponent)bi.getBean());
m_toolBarBean = null;
addComponent(bi, true);
}
/**
* Handles the checking of a selected set of components
* for suitability for grouping. If suitable the user
* is prompted for a name and then a MetaBean is used
* group the components.
*/
private void checkSubFlow(int startX, int startY,
int endX, int endY) {
java.awt.Rectangle r =
new java.awt.Rectangle((startX < endX) ? startX : endX,
(startY < endY) ? startY: endY,
Math.abs(startX - endX),
Math.abs(startY - endY));
Vector selected = BeanInstance.findInstances(r);
// check if sub flow is valid
Vector inputs = BeanConnection.inputs(selected);
Vector outputs = BeanConnection.outputs(selected);
// screen the inputs and outputs
if (inputs.size() == 0 || outputs.size() == 0) {
return;
}
// dissallow MetaBeans in the selected set (for the
// time being).
for (int i = 0; i < selected.size(); i++) {
BeanInstance temp = (BeanInstance)selected.elementAt(i);
if (temp.getBean() instanceof MetaBean) {
return;
}
}
// show connector dots for selected beans
for (int i = 0; i < selected.size(); i++) {
BeanInstance temp = (BeanInstance)selected.elementAt(i);
if (temp.getBean() instanceof Visible) {
((Visible)temp.getBean()).getVisual().setDisplayConnectors(true);
}
}
// show connector dots for input beans
for (int i = 0; i < inputs.size(); i++) {
BeanInstance temp = (BeanInstance)inputs.elementAt(i);
if (temp.getBean() instanceof Visible) {
((Visible)temp.getBean()).getVisual().
setDisplayConnectors(true, java.awt.Color.red);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -