metabean.java

来自「Weka」· Java 代码 · 共 578 行 · 第 1/2 页

JAVA
578
字号
/* *    This program is free software; you can redistribute it and/or modify *    it under the terms of the GNU General Public License as published by *    the Free Software Foundation; either version 2 of the License, or *    (at your option) any later version. * *    This program is distributed in the hope that it will be useful, *    but WITHOUT ANY WARRANTY; without even the implied warranty of *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *    GNU General Public License for more details. * *    You should have received a copy of the GNU General Public License *    along with this program; if not, write to the Free Software *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *//* *    MetaBean.java *    Copyright (C) 2005 University of Waikato, Hamilton, New Zealand * */package weka.gui.beans;import weka.gui.Logger;import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.Point;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.image.BufferedImage;import java.beans.EventSetDescriptor;import java.beans.IntrospectionException;import java.beans.Introspector;import java.beans.PropertyChangeListener;import java.io.Serializable;import java.util.Enumeration;import java.util.Vector;import javax.swing.ImageIcon;import javax.swing.JComponent;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JWindow;/** * A meta bean that encapsulates several other regular beans, useful for  * grouping large KnowledgeFlows. * * * @author Mark Hall (mhall at cs dot waikato dot ac dot nz) * @version $Revision: 1.9 $ */public class MetaBean  extends JPanel   implements BeanCommon, Visible, EventConstraints,             Serializable, UserRequestAcceptor {  /** for serialization */  private static final long serialVersionUID = -6582768902038027077L;  protected BeanVisual m_visual =     new BeanVisual("Group",		   BeanVisual.ICON_PATH+"DiamondPlain.gif",		   BeanVisual.ICON_PATH+"DiamondPlain.gif");  private transient Logger m_log = null;  private transient JWindow m_previewWindow = null;  private transient javax.swing.Timer m_previewTimer = null;  protected Vector m_subFlow = new Vector();  protected Vector m_inputs = new Vector();  protected Vector m_outputs = new Vector();  // the internal connections for the grouping  protected Vector m_associatedConnections = new Vector();    // Holds a preview image of the encapsulated sub-flow  protected ImageIcon m_subFlowPreview = null;  public MetaBean() {    setLayout(new BorderLayout());    add(m_visual, BorderLayout.CENTER);  }  public void setAssociatedConnections(Vector ac) {    m_associatedConnections = ac;  }  public Vector getAssociatedConnections() {    return m_associatedConnections;  }  public void setSubFlow(Vector sub) {    m_subFlow = sub;  }  public Vector getSubFlow() {    return m_subFlow;  }  public void setInputs(Vector inputs) {    m_inputs = inputs;  }  public Vector getInputs() {    return m_inputs;  }  public void setOutputs(Vector outputs) {    m_outputs = outputs;  }  public Vector getOutputs() {    return m_outputs;  }  private Vector getBeans(Vector beans, int type) {    Vector comps = new Vector();    for (int i = 0; i < beans.size(); i++) {      BeanInstance temp = (BeanInstance)beans.elementAt(i);      // need to check for sub MetaBean!      if (temp.getBean() instanceof MetaBean) {        switch (type) {        case 0 :           comps.addAll(((MetaBean)temp.getBean()).getBeansInSubFlow());          break;        case 1 :           comps.addAll(((MetaBean)temp.getBean()).getBeansInInputs());          break;        case 2:          comps.addAll(((MetaBean)temp.getBean()).getBeansInOutputs());          break;        }      } else {        comps.add(temp);      }    }    return comps;  }  /**   * Return all the beans in the sub flow   *   * @return a Vector of all the beans in the sub flow   */  public Vector getBeansInSubFlow() {    return getBeans(m_subFlow, 0);  }  /**   * Return all the beans in the inputs   *   * @return a Vector of all the beans in the inputs   */  public Vector getBeansInInputs() {    return getBeans(m_inputs, 1);  }  /**   * Return all the beans in the outputs   *   * @return a Vector of all the beans in the outputs   */  public Vector getBeansInOutputs() {    return getBeans(m_outputs, 2);  }  private Vector getBeanInfos(Vector beans, int type) {    Vector infos = new Vector();    for (int i = 0; i < beans.size(); i++) {      BeanInstance temp = (BeanInstance)beans.elementAt(i);      if (temp.getBean() instanceof MetaBean) {        switch (type) {        case 0:           infos.addAll(((MetaBean)temp.getBean()).getBeanInfoSubFlow());          break;        case 1:           infos.addAll(((MetaBean)temp.getBean()).getBeanInfoInputs());          break;        case 2:          infos.addAll(((MetaBean)temp.getBean()).getBeanInfoOutputs());        }      } else {        try {          infos.add(Introspector.getBeanInfo(temp.getBean().getClass()));        } catch (IntrospectionException ex) {          ex.printStackTrace();        }      }    }    return infos;  }  public Vector getBeanInfoSubFlow() {    return getBeanInfos(m_subFlow, 0);  }  public Vector getBeanInfoInputs() {    return getBeanInfos(m_inputs, 1);  }  public Vector getBeanInfoOutputs() {    return getBeanInfos(m_outputs, 2);  }  // stores the original position of the beans   // when this group is created. Used  // to restore their locations if the group is ungrouped.  private Vector m_originalCoords;  /**   * returns the vector containing the original coordinates (instances of class   * Point) for the inputs   * @return the containing the coord Points of the original inputs   */  public Vector getOriginalCoords() {    return m_originalCoords;  }    /**   * sets the vector containing the original coordinates (instances of class   * Point) for the inputs   * @param value the vector containing the points of the coords of the original inputs   */  public void setOriginalCoords(Vector value) {    m_originalCoords = value;  }  /**   * Move coords of all inputs and outputs of this meta bean   * to the coords of the supplied BeanInstance. Typically   * the supplied BeanInstance is the BeanInstance that encapsulates   * this meta bean; the result in this case is that all inputs   * and outputs are shifted so that their coords coincide with   * the meta bean and all connections to them appear (visually) to   * go to/from the meta bean.   *   * @param toShiftTo the BeanInstance whos coordinates will   * be used.   * @param save true if coordinates are to be saved.   */  public void shiftBeans(BeanInstance toShiftTo,                          boolean save) {    if (save) {      m_originalCoords = new Vector();    }    int targetX = toShiftTo.getX();    int targetY = toShiftTo.getY();    for (int i = 0; i < m_subFlow.size(); i++) {      BeanInstance temp = (BeanInstance)m_subFlow.elementAt(i);      if (save) {        Point p = new Point(temp.getX(), temp.getY());        m_originalCoords.add(p);      }      temp.setX(targetX); temp.setY(targetY);    }  }  public void restoreBeans() {    for (int i = 0; i < m_subFlow.size(); i++) {      BeanInstance temp = (BeanInstance)m_subFlow.elementAt(i);      Point p = (Point)m_originalCoords.elementAt(i);      JComponent c = (JComponent)temp.getBean();      Dimension d = c.getPreferredSize();      int dx = (int)(d.getWidth() / 2);      int dy = (int)(d.getHeight() / 2);      temp.setX((int)p.getX()+dx);      temp.setY((int)p.getY()+dy);    }  }  /**   * Returns true, if at the current time, the event described by the   * supplied event descriptor could be generated.   *   * @param esd an <code>EventSetDescriptor</code> value   * @return a <code>boolean</code> value   */  public boolean eventGeneratable(EventSetDescriptor esd) {    String eventName = esd.getName();    return eventGeneratable(eventName);  }  /**   * Returns true, if at the current time, the named event could   * be generated. Assumes that the supplied event name is

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?