Package net.matuschek.jobo

Source Code of net.matuschek.jobo.RobotConfigFrame

package net.matuschek.jobo;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

import net.matuschek.http.HttpException;
import net.matuschek.spider.WebRobot;
import net.matuschek.swing.JHideFrame;
import net.matuschek.swing.OptionPanel;
import net.matuschek.swing.SwingHelper;
/*********************************************
    Copyright (c) 2001 by Daniel Matuschek
*********************************************/



/**
* Configuration dialog for the robot
*
* @author Daniel Matuschek
* @version $Id: RobotConfigFrame.java,v 1.20 2004/08/09 13:06:56 matuschd Exp $
*/
public class RobotConfigFrame extends JHideFrame {

  private static final long serialVersionUID = 8977779246579784214L;

  public RobotConfigFrame(JoBoBase jobobase) {   
    super("Robot configuration");
    this.robot = jobobase.getRobot();
    this.jobobase = jobobase;
    initComponents();
  }


  protected void initComponents() {
    JPanel mainPanel = new JPanel();
    mainPanel.setLayout(new BoxLayout(mainPanel,BoxLayout.Y_AXIS));
    setContentPane(mainPanel);

    OptionPanel dialogPanel = new OptionPanel(2);

    JPanel buttonPanel = new JPanel();
    buttonPanel.setLayout(new BoxLayout(buttonPanel,BoxLayout.X_AXIS));

    mainPanel.add(dialogPanel);
    mainPanel.add(buttonPanel);

    /**
       Input fields
     **/
    agentNameField = SwingHelper.createInputField(25);
    dialogPanel.add("Agent name:",agentNameField);

    startRefererField = SwingHelper.createInputField(25);
    dialogPanel.add("Start referer:",startRefererField);

    proxyField = SwingHelper.createInputField(25);
    dialogPanel.add("Proxy (host:port or empty):",proxyField);

    maxDepthField = SwingHelper.createInputField(5);
    dialogPanel.add("Maximal search depth:",maxDepthField);

    sleepField = SwingHelper.createInputField(5);
    dialogPanel.add("Sleep time (in seconds)",sleepField);

    bandwidthField = SwingHelper.createInputField(5);
    dialogPanel.add("Bandwidth limit in Bytes/s (0 to disable)",
        bandwidthField);

    maxAgeField = SwingHelper.createInputField(5);
    dialogPanel.add("Maximum age in days (leave empty to disable)",
        maxAgeField);

    cookiesEnabled = new JCheckBox();
    dialogPanel.add("Enable cookies",cookiesEnabled);

    allowWholeHost = new JCheckBox();
    dialogPanel.add("Allow all URLs on start host",allowWholeHost);

    allowWholeDomain = new JCheckBox();
    dialogPanel.add("Allow all URLs in the same domain",allowWholeDomain);

    flexibleHostCheck = new JCheckBox();
    dialogPanel.add("Do flexible host checking",flexibleHostCheck);

    ignoreRobotsTxt = new JCheckBox();
    dialogPanel.add("Ignore robots.txt",ignoreRobotsTxt);

    localizeLinks = new JCheckBox();
    dialogPanel.add("Localize links",localizeLinks);

    storeCGI = new JCheckBox();
    dialogPanel.add("Save dynamic pages",storeCGI);

    allowCaching = new JCheckBox();
    dialogPanel.add("Don't retrieve pages that are already on disk "
        +"(resume download)",
        allowCaching);

    /** End of input fields */

    /** Button panel */
    JButton okButton = new JButton();
    okButton.setText("OK");
    okButton.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        updateAndHide();
      }
    });
    buttonPanel.add(okButton);

    JButton closeButton = new JButton();
    closeButton.setText("Cancel");
    closeButton.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        exitForm();
      }
    });
    buttonPanel.add(closeButton);

    /** End of button panel */

    pack ();
    updateFormFromRobot();
  }


  /**
   * update the robot settings from the form contents and hide window
   */
  protected void updateAndHide() {
    if (updateRobotFromForm()) {
      this.setVisible(false);
    }
  }


  /**
   * update the content of the form field from the current robot
   * settings
   */
  protected void updateFormFromRobot() {
    agentNameField.setText(robot.getAgentName());
    startRefererField.setText(robot.getStartReferer());
    proxyField.setText(robot.getProxy());
    maxDepthField.setText(String.valueOf(robot.getMaxDepth()));
    sleepField.setText(String.valueOf(robot.getSleepTime()));
    bandwidthField.setText(String.valueOf(robot.getBandwidth()));

    // a day has 86400 seconds
    long maxAge=robot.getMaxDocumentAge();
    if (maxAge>0) {
      maxAgeField.setText(Long.toString(maxAge/86400));
    } else {
      maxAgeField.setText("");
    }

    cookiesEnabled.setSelected(robot.getEnableCookies());
    allowWholeHost.setSelected(robot.getAllowWholeHost());
    allowWholeDomain.setSelected(robot.getAllowWholeDomain());
    flexibleHostCheck.setSelected(robot.getFlexibleHostCheck());
    ignoreRobotsTxt.setSelected(robot.getIgnoreRobotsTxt());
    localizeLinks.setSelected(jobobase.getLocalizeLinks());
    storeCGI.setSelected(jobobase.getStoreCGI());
    allowCaching.setSelected(robot.getAllowCaching());
  }


  /**
   * update the robot settings from the current fields
   * @return true if everything is okay, false otherwise
   */
  protected boolean updateRobotFromForm() {
    robot.setAgentName(agentNameField.getText());
    robot.setStartReferer(startRefererField.getText());
    try {
      robot.setProxy(proxyField.getText());
    } catch (HttpException e) {}

    try {
      robot.setMaxDepth(Integer.parseInt(maxDepthField.getText()));
    } catch (NumberFormatException e) {
      JOptionPane.showMessageDialog(this,
          "Maximal depth must be a number",
          "Error",
          JOptionPane.ERROR_MESSAGE);
      return false;
    }

    try {
      robot.setSleepTime(Integer.parseInt(sleepField.getText()));
    } catch (NumberFormatException e) {
      JOptionPane.showMessageDialog(this,
          "Sleep time must be a number",
          "Error",
          JOptionPane.ERROR_MESSAGE);
      return false;
    }

    // bandwidth limitation
    try {
      robot.setBandwidth(Integer.parseInt(bandwidthField.getText()));
    } catch (NumberFormatException e) {
      JOptionPane.showMessageDialog(this,
          "Bandwidth must be an integer",
          "Error",
          JOptionPane.ERROR_MESSAGE);
      return false;
    }

    // maximum age of files to download
    if (! maxAgeField.getText().equals("")) {
      try {
        int age = Integer.parseInt(maxAgeField.getText());
        // a day has 86400 seconds
        robot.setMaxDocumentAge(age*86400);
      } catch (NumberFormatException e) {
        JOptionPane.showMessageDialog(this,
            "Age must be an integer",
            "Error",
            JOptionPane.ERROR_MESSAGE);
        return false;
      }
    } else {
      robot.setMaxDocumentAge(-1);
    }


    robot.setEnableCookies(cookiesEnabled.isSelected());
    robot.setAllowWholeHost(allowWholeHost.isSelected());
    robot.setAllowWholeDomain(allowWholeDomain.isSelected());
    robot.setFlexibleHostCheck(flexibleHostCheck.isSelected());
    robot.setIgnoreRobotsTxt(ignoreRobotsTxt.isSelected());
    robot.setAllowCaching(allowCaching.isSelected());

    jobobase.setLocalizeLinks(localizeLinks.isSelected());
    jobobase.setStoreCGI(storeCGI.isSelected());

    return true;
  }

  /**********************************************************************/
  /**********************************************************************/
  /**********************************************************************/

  /** the web robot to configure */
  WebRobot robot = null;

  /** jobobase to configure */
  JoBoBase jobobase = null;


  // input fields
  JTextField agentNameField = null;
  JTextField startRefererField = null;
  JTextField proxyField = null;
  JTextField maxDepthField = null;
  JTextField sleepField = null;
  JTextField bandwidthField = null;
  JTextField maxAgeField = null;
  JCheckBox cookiesEnabled = null;
  JCheckBox allowWholeHost = null;
  JCheckBox allowWholeDomain = null;
  JCheckBox flexibleHostCheck = null;
  JCheckBox ignoreRobotsTxt = null;
  JCheckBox localizeLinks = null;
  JCheckBox storeCGI = null;
  JCheckBox allowCaching = null;
  //

} // RobotConfigFrame
TOP

Related Classes of net.matuschek.jobo.RobotConfigFrame

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.