⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ruleeditor.java

📁 sifi-0.1.6.tar.gz 出自http://www.ifi.unizh.ch/ikm/SINUS/firewall/ 一个linux的防火墙工具。
💻 JAVA
字号:
/* ----------------------------------------------------------------------   The SINUS Firewall -- a TCP/IP packet filter for Linux   Written within the SINUS project at the University of Zurich,   SWITCH, Telekurs Payserv AG, ETH Zurich.   originally based on the sf Firewall Software (C) 1996 by Robert   Muchsel and Roland Schmid.   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.   SINUS Firewall resources:   SINUS Homepage: http://www.ifi.unizh.ch/ikm/SINUS/   Firewall Homepage: http://www.ifi.unizh.ch/ikm/SINUS/firewall.html   Frequently asked questions: http://www.ifi.unizh.ch/ikm/SINUS/sf_faq.html   Mailing list for comments, questions, bug reports: firewall@ifi.unizh.ch   ----------------------------------------------------------------------  */package sfclasses;import java.awt.*;import java.awt.event.*;import java.net.*;import java.util.*;import com.sun.java.swing.*;/** * The rule editor class implements a frame that contains a rule panel * in its client area and offers functions for creating, editing and * deleting rules in the menu bar.<br> * The edit functions are executed in a separate thread. * @version 1.0 10 Jan 1997 * @author Roland E. Schmid */public class RuleEditor	extends Frame	implements ActionListener, MouseListener {  /**   * Initialize the frame and create the menu bar and rule panel.   * @param mgDomain Manage domain object holding the global configuration data.   */  public RuleEditor(ManageDomain md) {    mgDomain = md;    setTitle("Domain "+mgDomain.DomainName);    setLayout(new BorderLayout());    // create menus    mbar = new MenuBar();    FileMenu = new Menu("File");    FileMenu.add(FileClose = new MenuItem("Close"));    mbar.add(FileMenu);    EditMenu = new Menu("Edit");    EditMenu.add(EditAdd = new MenuItem("Add rule"));    EditMenu.add(EditInsert = new MenuItem("Insert rule"));    EditMenu.add(EditDelete = new MenuItem("Delete rule"));    EditMenu.add(EditChange = new MenuItem("Change rule"));    EditMenu.add(EditActivate = new MenuItem("(De)activate rule"));    mbar.add(EditMenu);    HelpMenu = new Menu("Help");    HelpMenu.add(HelpGuide = new MenuItem("User's Guide"));    HelpMenu.add(HelpAbout = new MenuItem("About"));    mbar.add(HelpMenu);    mbar.setHelpMenu(HelpMenu);    setMenuBar(mbar); 		FileClose.addActionListener(this);		EditAdd.addActionListener(this);		EditInsert.addActionListener(this);		EditDelete.addActionListener(this);		EditChange.addActionListener(this);		EditActivate.addActionListener(this);		HelpGuide.addActionListener(this);		HelpAbout.addActionListener(this);    ruleCanvas = new RuleCanvas(mgDomain.Rules, mgDomain);		ruleCanvas.addMouseListener(this);    ruleHeader = new RuleHeader(ruleCanvas);    rulePanel = new ListPanel(ruleCanvas, ruleHeader);    add("Center", rulePanel);		addWindowListener(new REWindowAdapter());		waitCursor = new Cursor(Cursor.WAIT_CURSOR);    validate();  } // RuleEditorclass REWindowAdapter extends WindowAdapter {	public void WindowClosing(WindowEvent we) {		if (isEnabled())			setVisible(false);		return;	}} // class REWindowAdapter	public void mousePressed(MouseEvent me) { }	public void mouseReleased(MouseEvent me) { }	public void mouseEntered(MouseEvent me) { }	public void mouseExited(MouseEvent me) { }	public void mouseClicked(MouseEvent me) {		if (me.getClickCount() > 1) { // double click			Rule r = (Rule)ruleCanvas.getSelectedEntry();			if (r == null)				return;			RuleEditThread ret = new RuleEditThread(mgDomain, rulePanel,																		r, RuleEditThread.A_CHANGE, this); 			setEnabled(false);			setCursor(waitCursor);			ret.start();		}		return;	} // mouseClicked  /**   * Action event handler   */  public void actionPerformed(ActionEvent ae) {	Object source = ae.getSource();		// Process "Close"      if (source == FileClose) {        setVisible(false);        return;      }						// Process "Add rule"      if (source == EditAdd) {        RuleEditThread ret = new RuleEditThread(mgDomain, rulePanel,																				null, RuleEditThread.A_ADD, this);         setEnabled(false);        setCursor(waitCursor);        ret.start();        return;      }			// Process "Insert rule"      if (source == EditInsert) {        Rule r = (Rule)ruleCanvas.getSelectedEntry();        if (r == null) {          UserDialog.ErrorBox("No rule selected!");          return;        }         RuleEditThread ret = new RuleEditThread(mgDomain, rulePanel,																				r, RuleEditThread.A_INSERT, this);         setEnabled(false);        setCursor(waitCursor);        ret.start();        return;      }			// Process "Delete rule"      if (source == EditDelete) {        Rule r = (Rule)ruleCanvas.getSelectedEntry();        if (r == null) {          UserDialog.ErrorBox("No rule selected!");          return;        }         RuleEditThread ret = new RuleEditThread(mgDomain, rulePanel,																						r, RuleEditThread.A_DELETE, this);         setEnabled(false);        setCursor(waitCursor);        ret.start();        return;      }			// Process "Change rule"      if (source == EditChange) {        Rule r = (Rule)ruleCanvas.getSelectedEntry();        if (r == null) {          UserDialog.ErrorBox("No rule selected!");          return;        }         RuleEditThread ret = new RuleEditThread(mgDomain, rulePanel,																						r, RuleEditThread.A_CHANGE, this);         setEnabled(false);        setCursor(waitCursor);        ret.start();        return;      }			// Process "(De)activate rule"      if (source == EditActivate) {        Rule r = (Rule)ruleCanvas.getSelectedEntry();        if (r == null) {          UserDialog.ErrorBox("No rule selected!");          return;        }         r.active = !r.active;        rulePanel.deselect();        rulePanel.refresh();        return;      }			// Process "About"      else if (source == HelpAbout) {        AboutDialog ab = new AboutDialog(this);        ab.setVisible(true);        return;      }			// Process "User's Guide"      else if (source == HelpGuide) {				UserDialog.NoticeBox("Documentation only available as a PostScript file.");				return;			}	  } //actionPerformed  /**   * Show the rule panel again after a previous call to setVisible(false). As the   * rules may have changed, the scroll offset is reset to zero.   */  public synchronized void showAgain() {    setVisible(true);    rulePanel.resetScrollOffset();  }  // private data  // GUI data  private MenuBar mbar;  private Menu FileMenu;  private Menu EditMenu;  private Menu HelpMenu;	private	MenuItem FileClose;	private MenuItem EditAdd, EditInsert, EditDelete, EditChange, EditActivate;	private	MenuItem HelpGuide, HelpAbout;  private ListPanel rulePanel;  private RuleCanvas ruleCanvas;  private RuleHeader ruleHeader;	private Cursor waitCursor;  // application data  ManageDomain mgDomain;} // RuleEditor/** * Use a separate thread to perform editing functions, because * we can't get results from dialog boxes in the event loop */class RuleEditThread extends Thread {  public RuleEditThread(ManageDomain md, Refreshable rp, Rule r, int a, Frame p ) {    mgDomain = md;    rulePanel = rp;    rule = r;    action = a;    parent = p;  }  public void run() {    Rule r;    switch (action) {      case A_ADD:        r = new Rule();        mgDomain.Rules.addElement(r);        r.validFor = new boolean[mgDomain.Firewalls.size()];        for (int i=0; i < r.validFor.length; i++)          r.validFor[i] = true;        r.editDialog(parent, mgDomain, rulePanel, true);        break;      case A_INSERT:        r = new Rule();        try {          mgDomain.Rules.insertElementAt(r, mgDomain.Rules.indexOf(rule));        }        catch (ArrayIndexOutOfBoundsException ignore) {}        r.validFor = new boolean[mgDomain.Firewalls.size()];        for (int i=0; i < r.validFor.length; i++)          r.validFor[i] = true;        r.editDialog(parent, mgDomain, rulePanel, true);        break;      case A_DELETE:				int answer = JOptionPane.showConfirmDialog(null, "Deleting rule "+(mgDomain.Rules.indexOf(rule)+1)+".", "User Information", JOptionPane.YES_NO_OPTION);        if (answer == JOptionPane.OK_OPTION) { // delete rule          mgDomain.Rules.removeElement(rule);          rulePanel.refresh();        }        break;      case A_CHANGE:        rule.editDialog(parent, mgDomain, rulePanel, false);        break;    }    parent.setEnabled(true);    parent.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));  }  protected final static int A_ADD = 1;  protected final static int A_INSERT = 2;  protected final static int A_DELETE = 3;  protected final static int A_CHANGE = 4;  private ManageDomain mgDomain;  private Refreshable rulePanel;  private Rule rule;  private int action;  private Frame parent;} // RuleEditThreadclass RuleCanvas extends ListCanvas {  public RuleCanvas(Vector rules, ManageDomain md) {    super(rules);    mgDomain = md;    column_no = 7;    column_share = new int[column_no];    column_share[0] = 10;    column_share[1] = 15;    column_share[2] = 16;    column_share[3] = 20;    column_share[4] = 20;    column_share[5] = 11;    column_share[6] =  8;    column_size = new int[column_no];    column_pos = new int[column_no];  }  protected int drawColumn(Graphics g, Object listObj, int col,    int ypos, FontMetrics fm, int fontheight, int maxascent) {    String str[];    Rule r = (Rule)listObj;    int objIdx = listEntries.indexOf(listObj);    if (col >= 0) { // draw column          if (g == null) {        if (objIdx == 0 && col == 0)          listText = new String[listEntries.size()][][];        if (col == 0)          listText[objIdx] = new String[column_no][];        str = r.getString(col, null, mgDomain);        if (col == 0)          str[0] += String.valueOf(objIdx+1);        listText[objIdx][col] = str;        return str.length;      }      else        str = listText[objIdx][col];      if (ypos + str.length*fontheight - offset_y < 0)        return str.length;      int start = 0;      if (col==0) { // add rule number        start = 1;        int imageWidth;        if (r.active) {          imageWidth = greenBallImage.getWidth(null);          if (column_size[0] > imageWidth)            g.drawImage(greenBallImage, column_pos[col]+1, ypos-offset_y+1, null);        }        else {          imageWidth = redBallImage.getWidth(null);          g.drawImage(redBallImage, column_pos[col]+1, ypos-offset_y+1, null);        }        g.drawString(clipString(str[0], column_size[col]-3-imageWidth, fm),           column_pos[col]+imageWidth+2,           ypos + maxascent - offset_y);      }      for (int i=start; i < str.length; i++)         g.drawString(clipString(str[i], column_size[col]-3, fm),           column_pos[col]+1, (ypos + maxascent + i*fontheight) - offset_y);      return str.length;    }    else { // draw multi column text      if (r.comment != null && r.comment.length() > 0) {        if (g == null)           return 1;        String cs = clipString("Description: "+r.comment,           canvas_width-column_size[0]-4, fm);        g.clearRect(column_pos[1]+1, ypos - offset_y,          fm.stringWidth(cs), fontheight);        g.drawString(cs, column_pos[1]+1,           ypos + maxascent - offset_y);        return 1;      }      else         return 0;    }  }  private ManageDomain mgDomain;  private String listText[][][];	private Cursor waitCursor;  private static Image greenBallImage = Utils.greenBall();  private static Image redBallImage = Utils.redBall();} // RuleCanvasclass RuleHeader extends ListHeader {  public RuleHeader(ListCanvas listCanvas) {    super(listCanvas);    header = new String[listCanvas.column_no];    header[0] = "Rule";    header[1] = "Action";    header[2] = "Protocol";    header[3] = "From";    header[4] = "To";    header[5] = "Notification";    header[6] = "Valid for";  }} // RuleHeader

⌨️ 快捷键说明

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