📄 filterbuilder.java
字号:
// HTMLParser Library $Name: v1_6_20060319 $ - A java-based parser for HTML// http://sourceforge.org/projects/htmlparser// Copyright (C) 2005 Derrick Oswald//// Revision Control Information//// $Source: /cvsroot/htmlparser/htmlparser/src/org/htmlparser/parserapplications/filterbuilder/FilterBuilder.java,v $// $Author: derrickoswald $// $Date: 2005/04/12 11:27:42 $// $Revision: 1.5 $//// This library is free software; you can redistribute it and/or// modify it under the terms of the GNU Lesser General Public// License as published by the Free Software Foundation; either// version 2.1 of the License, or (at your option) any later version.//// This library 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// Lesser General Public License for more details.//// You should have received a copy of the GNU Lesser General Public// License along with this library; if not, write to the Free Software// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA// package org.htmlparser.parserapplications.filterbuilder;import java.awt.BorderLayout;import java.awt.Component;import java.awt.Container;import java.awt.Dimension;import java.awt.Event;import java.awt.FileDialog;import java.awt.FlowLayout;import java.awt.Insets;import java.awt.Point;import java.awt.Toolkit;import java.awt.datatransfer.Clipboard;import java.awt.datatransfer.ClipboardOwner;import java.awt.datatransfer.DataFlavor;import java.awt.datatransfer.StringSelection;import java.awt.datatransfer.Transferable;import java.awt.datatransfer.UnsupportedFlavorException;import java.awt.dnd.DnDConstants;import java.awt.dnd.DragGestureEvent;import java.awt.dnd.DragGestureListener;import java.awt.dnd.DragSource;import java.awt.dnd.DragSourceDragEvent;import java.awt.dnd.DragSourceDropEvent;import java.awt.dnd.DragSourceEvent;import java.awt.dnd.DragSourceListener;import java.awt.dnd.DropTarget;import java.awt.dnd.DropTargetContext;import java.awt.dnd.DropTargetDragEvent;import java.awt.dnd.DropTargetDropEvent;import java.awt.dnd.DropTargetEvent;import java.awt.dnd.DropTargetListener;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.InputEvent;import java.awt.event.KeyEvent;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.MouseMotionListener;import java.awt.event.WindowEvent;import java.awt.event.WindowListener;import java.beans.PropertyVetoException;import java.io.File;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.io.LineNumberReader;import java.io.PrintWriter;import java.io.StringWriter;import java.lang.reflect.Method;import java.net.MalformedURLException;import java.net.URL;import java.util.Vector;import javax.swing.Icon;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JDesktopPane;import javax.swing.JFrame;import javax.swing.JInternalFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JPopupMenu;import javax.swing.JScrollPane;import javax.swing.JSeparator;import javax.swing.JSplitPane;import javax.swing.JTextField;//import javax.swing.JTextPane;import javax.swing.JToolBar;import javax.swing.JTree;import javax.swing.KeyStroke;import javax.swing.ScrollPaneConstants;import javax.swing.WindowConstants;import org.htmlparser.Parser;import org.htmlparser.beans.FilterBean;import org.htmlparser.parserapplications.filterbuilder.layouts.NullLayoutManager;import org.htmlparser.util.EncodingChangeException;import org.htmlparser.util.NodeIterator;import org.htmlparser.util.NodeList;import org.htmlparser.util.ParserException;/** * The main program for the FilterBuilder programming system. * <p>ToDo: * <ul> * <li>thread the attribute fetching</li> * <li>CSS selector filter</li> * <li>table row filter</li> * <li>table column filter</li> * <li>trigger filter</li> * <li>undo</li> * <li>handle bad URLs</li> * <li>StringBean type secondary text output</li> * <li>context sensitive menus</li> * </ul> */public class FilterBuilder extends JFrame implements WindowListener, ActionListener, MouseListener, MouseMotionListener, DragGestureListener, DragSourceListener, DropTargetListener, ClipboardOwner{ static final String TITLE = "HTML Parser FilterBuilder"; static final URL mDocumentBase; static { String p; char ps; URL base; p = System.getProperty ("user.dir"); // if the system file separator isn't the URL file separator convert it. try { ps = (System.getProperty ("file.separator")).charAt(0); if ('/' != ps) p.replace (ps, '/'); } catch (StringIndexOutOfBoundsException e) { } try { base = new URL ("file:///" + p + "/"); } catch (MalformedURLException murle) { base = null; } mDocumentBase = base; } static String mHomeDir; static { String dir; File file; dir = System.getProperty ("user.home") + System.getProperty ("file.separator") + ".htmlparser"; file = new File (dir); if (!file.exists ()) if (!file.mkdirs ()) // make the directory if it doesn't exist throw new RuntimeException ( "cannot create directory " + file.getAbsolutePath ()); mHomeDir = file.getAbsolutePath (); } /** * The relative position of the mouse while dragging. */ protected Point mBasePoint; /** * Selected commands. */ protected Vector mSelection; /** * If true selection moved. */ protected boolean mMoved; /** * This component is a drop target. */ protected DropTarget mDropTarget; /** * Enables this component to be a Drag Source. */ protected DragSource mDragSource; /** * Kludge: Used by actionPerformed/filterAction to remember the filter menu item. */ protected Component mCurrentComponent; /** * The main panel GUI component. */ protected JPanel mMainPanel; /** * The main panel scrolling GUI component. */ protected JScrollPane mMainScroller; /** * The URL input GUI component. */ protected JTextField mURLField; /** * The output panel GUI component. */ protected JDesktopPane mOutput; /** * Create an FilterBuilder programming environment. */ public FilterBuilder () { JMenuBar menubar; JToolBar toolbar; JMenu menu; JPanel panel; JScrollPane pane; JSplitPane split; JMenuItem item; // drag and drop support mMainPanel = new JPanel (); mDropTarget = new DropTarget (mMainPanel, this); mDragSource = new DragSource (); // menu and toolbar menubar = new JMenuBar(); toolbar = new JToolBar (); toolbar.setAlignmentY (0.222222F); // file menu menu = new JMenu (); menu.setText ("File"); menu.setActionCommand ("File"); menu.setMnemonic ((int)'F'); makeMenuButton ("New", "Create a new document", "New", 'N', KeyStroke.getKeyStroke (KeyEvent.VK_N, Event.CTRL_MASK), toolbar, menu); makeMenuButton ("Open", "Open an existing document", "Open...", 'O', KeyStroke.getKeyStroke (KeyEvent.VK_O, Event.CTRL_MASK), toolbar, menu); makeMenuButton ("Save", "Save the active document", "Save...", 'S', KeyStroke.getKeyStroke (KeyEvent.VK_S, Event.CTRL_MASK), toolbar, menu); makeMenuButton ("SaveAs", "Save the active document", "Save As...", 'A', KeyStroke.getKeyStroke (KeyEvent.VK_A, Event.CTRL_MASK), null, menu); menu.add (new JSeparator ()); makeMenuButton ("Exit", "Exit the program", "Exit", 'E', KeyStroke.getKeyStroke (KeyEvent.VK_E, Event.CTRL_MASK), null, menu); menubar.add (menu); toolbar.add(new JToolBar.Separator()); // edit menu menu = new JMenu (); menu.setText ("Edit"); menu.setActionCommand ("Edit"); menu.setMnemonic ((int)'E'); makeMenuButton ("Cut", "Cut the selection and put it on the Clipboard", "Cut", 'T', KeyStroke.getKeyStroke (KeyEvent.VK_X, Event.CTRL_MASK), toolbar, menu); makeMenuButton ("Copy", "Copy the selection and put it on the Clipboard", "Copy", 'C', KeyStroke.getKeyStroke (KeyEvent.VK_C, Event.CTRL_MASK), toolbar, menu); makeMenuButton ("Paste", "Insert Clipboard contents", "Paste", 'P', KeyStroke.getKeyStroke (KeyEvent.VK_V, Event.CTRL_MASK), toolbar, menu); makeMenuButton ("Delete", "Delete the selection", "Delete", 'D', KeyStroke.getKeyStroke (KeyEvent.VK_DELETE, 0), toolbar, menu); menubar.add (menu); // filter menu menu = new JMenu (); menu.setText ("Filter"); menu.setActionCommand ("Filter"); menu.setMnemonic ((int)'F'); menubar.add (menu); toolbar.add (new JToolBar.Separator()); // filters menu and filters toolbar addFilter (menu, toolbar, "org.htmlparser.parserapplications.filterbuilder.wrappers.AndFilterWrapper"); addFilter (menu, toolbar, "org.htmlparser.parserapplications.filterbuilder.wrappers.OrFilterWrapper"); addFilter (menu, toolbar, "org.htmlparser.parserapplications.filterbuilder.wrappers.NotFilterWrapper"); menu.addSeparator (); toolbar.add (new JToolBar.Separator ()); addFilter (menu, toolbar, "org.htmlparser.parserapplications.filterbuilder.wrappers.StringFilterWrapper"); addFilter (menu, toolbar, "org.htmlparser.parserapplications.filterbuilder.wrappers.RegexFilterWrapper"); addFilter (menu, toolbar, "org.htmlparser.parserapplications.filterbuilder.wrappers.TagNameFilterWrapper"); addFilter (menu, toolbar, "org.htmlparser.parserapplications.filterbuilder.wrappers.NodeClassFilterWrapper"); addFilter (menu, toolbar, "org.htmlparser.parserapplications.filterbuilder.wrappers.HasAttributeFilterWrapper"); menu.addSeparator (); toolbar.add (new JToolBar.Separator ()); addFilter (menu, toolbar, "org.htmlparser.parserapplications.filterbuilder.wrappers.HasParentFilterWrapper"); addFilter (menu, toolbar, "org.htmlparser.parserapplications.filterbuilder.wrappers.HasChildFilterWrapper"); addFilter (menu, toolbar, "org.htmlparser.parserapplications.filterbuilder.wrappers.HasSiblingFilterWrapper"); menu.addSeparator (); toolbar.add (new JToolBar.Separator ()); // operation menu menu = new JMenu (); menu.setText ("Operation"); menu.setActionCommand ("Operation"); menu.setMnemonic ((int)'r'); item = new JMenuItem (); item.setText ("Expand"); item.setActionCommand ("expandAction"); item.addActionListener (this); menu.add (item); item = new JMenuItem (); item.setText ("Collapse"); item.setActionCommand ("collapseAction"); item.addActionListener (this); menu.add (item); menu.addSeparator (); item = new JMenuItem (); item.setText ("Expand All"); item.setActionCommand ("expandAllAction"); item.addActionListener (this); menu.add (item); item = new JMenuItem (); item.setText ("Collapse All"); item.setActionCommand ("collapseAllAction"); item.addActionListener (this); menu.add (item); menu.addSeparator (); item = new JMenuItem ("Fetch Page"); item.setActionCommand ("fetchAction"); item.addActionListener (this); menu.add (item); item = new JMenuItem ("Execute Filter"); item.setActionCommand ("executeAction"); item.addActionListener (this); menu.add (item); menubar.add (menu); // help menu menu = new JMenu (); menu.setText ("Help"); menu.setActionCommand ("Help"); menu.setMnemonic ((int)'H'); item = new JMenuItem ("Filtering"); item.setActionCommand ("filteringAction"); item.addActionListener (this); menu.add (item); item = new JMenuItem ("Instructions"); item.setActionCommand ("instructionsAction"); item.addActionListener (this); menu.add (item); item = new JMenuItem ("Tutorial"); item.setActionCommand ("tutorialAction"); item.addActionListener (this); menu.add (item); item = new JMenuItem ("Hints"); item.setActionCommand ("hintsAction"); item.addActionListener (this); menu.add (item); makeMenuButton ("About", "Display program information, version number and copyright", "About", 'B', KeyStroke.getKeyStroke (KeyEvent.VK_H, Event.CTRL_MASK), toolbar, menu); menubar.add (menu); setJMenuBar (menubar); // toolbar panel panel = new JPanel (); panel.setLayout (new FlowLayout (FlowLayout.LEFT,0,0));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -