content: package weka.gui.beans;
  
  import java.awt.BorderLayout;
  import java.io.BufferedReader;
  import java.io.FileReader;
  import java.util.Vector;
  
  import javax.swing.JFrame;
  import javax.swing.JPanel;
  import javax.swing.Icon;
  
  import weka.core.Instances;
  import weka.classifiers.timeseries.gui.ForecastingPanel;
  
  /**
   * KnowledgeFlow perspective provides the time series environment. 
   * 
   * @author Mark Hall (mhall{[at]}pentaho{[dot]}com)
   * @version $Revision: 49983 $
   */
  public class TimeSeriesForecastingKFPerspective extends JPanel implements KnowledgeFlowApp.KFPerspective {
  
    /**
     * For serialization
     */
    private static final long serialVersionUID = -2653395123580895862L;
    
    /** The forecasting panel to wrap */
    protected ForecastingPanel m_forecastingPanel;
  
    /**
     * Constructor
     */
    public TimeSeriesForecastingKFPerspective() {
      setLayout(new BorderLayout());
  
      m_forecastingPanel = new ForecastingPanel(null, false, false, true);
      add(m_forecastingPanel, BorderLayout.CENTER);
    }
    
    /**
     * Sets the knowledge flow's paste buffer equal to the 
     * supplied configured TimeSeriesForecasting component. 
     * 
     * @param component the TimeSerieseForecasting component to make pasteable
     * @throws Exception if a problem occurs
     */
    public static void setClipboard(TimeSeriesForecasting component) throws Exception {
      // adds us to the first tab
      BeanInstance beanI = 
        new BeanInstance(null, component, 50, 50);
      
      // remove us. TODO add a BeanInstance constructor that doesn't
      // add the newly constructed bean to any list!!
      beanI.removeBean(null);
      Vector beans = new Vector();
      beans.add(beanI);
      
      KnowledgeFlowApp singleton = KnowledgeFlowApp.getSingleton();
      StringBuffer serialized = singleton.copyToBuffer(beans);
      singleton.m_pasteBuffer = serialized;
      
      singleton.setActivePerspective(0);
      
      // Another hack to make the paste button enabled until we make
      // all toolbar buttons protected...
      singleton.m_mainKFPerspective.
        setActiveTab(singleton.m_mainKFPerspective.getCurrentTabIndex());
    }  
  
    /**
     * Get the title of this perspective
     * 
     * @return the title of this perspective
     */
    public String getPerspectiveTitle() {
      return "Time series forecasting";
    }
  
    /**
     * Get the tool tip text for this perspective.
     * 
     * @return the tool tip text for this perspective
     */
    public String getPerspectiveTipText() {
      return "Time series forecasting environment";
    }
  
    /**
     * Get the icon for this perspective.
     * 
     * @return the Icon for this perspective (or null if the
     * perspective does not have an icon)
     */
    public Icon getPerspectiveIcon() {
      java.awt.Image pic = null;
      java.net.URL imageURL = this.getClass().getClassLoader().
      getResource("weka/gui/beans/icons/chart_line.png");
  
      if (imageURL == null) {
      } else {
        pic = java.awt.Toolkit.getDefaultToolkit().
        getImage(imageURL);
      }
      return new javax.swing.ImageIcon(pic);
    }
  
    /**
     * Make this perspective the active (visible) one in the KF
     *
     * @param active true if this perspective is the currently active
     * one
     */
    public void setActive(boolean active) {
    }
  
    /**
     * Tell this perspective whether or not it is part of the users
     * perspectives toolbar in the KnowledgeFlow. If not part of
     * the current set of perspectives, then we can free some resources.
     *
     * @param loaded true if this perspective is part of the user-selected
     * perspectives in the KnowledgeFlow
     */
    public void setLoaded(boolean loaded) {
    }
  
    /**
     * Set a reference to the main KnowledgeFlow perspective - i.e.
     * the perspective that manages flow layouts.
     * 
     * @param main the main KnowledgeFlow perspective.
     */
    public void setMainKFPerspective(KnowledgeFlowApp.MainKFPerspective main) {
      // don't need this
    }
  
    /**
     * Set instances (if the perspective accepts them)
     * 
     * @param insts the instances
     */
    public void setInstances(Instances inst) {
      if (m_forecastingPanel != null) {
        try {
          m_forecastingPanel.setInstances(inst);
        } catch (Exception ex) {
          ex.printStackTrace();
        }
      }
    }
  
    /**
     * Returns true if this perspective accepts instances
     * 
     * @return true if this perspective can accept instances
     */
    public boolean acceptsInstances() {
      return true;
    }
  
    /**
     * Main method for testing this class
     * 
     * @param args
     */
    public static void main(String[] args) {
      try {
        Instances insts = new Instances(new BufferedReader(new FileReader(args[0])));
        
        final TimeSeriesForecastingKFPerspective p = new TimeSeriesForecastingKFPerspective();
        p.setInstances(insts);
        
        final JFrame frame = new JFrame("Time series forecasting");
  
        frame.setSize(800, 600);
        frame.setContentPane(p);
        frame.setVisible(true);      
      } catch (Exception ex) {
        ex.printStackTrace();
      }
    }
  }
  