You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by ra...@apache.org on 2002/03/06 14:53:21 UTC
cvs commit: jakarta-avalon-apps/ftpserver/src/java/org/apache/avalon/ftpserver/gui about.html FtpAboutPanel.java FtpAdmin.java FtpFilePanel.java FtpFileTableModel.java FtpSpyFrame.java SpyPanel.java CommonHandler.java ConfigTableModel.java FtpAdminFrame.java FtpConnectionPanel.java FtpConnectionTableModel.java FtpIpPanel.java FtpRootPanel.java FtpStatisticsPanel.java FtpTreeModel.java FtpUserPanel.java GuiUtils.java
rana_b 02/03/06 05:53:21
Modified: ftpserver/src/java/org/apache/avalon/ftpserver/gui
CommonHandler.java ConfigTableModel.java
FtpAdminFrame.java FtpConnectionPanel.java
FtpConnectionTableModel.java FtpIpPanel.java
FtpRootPanel.java FtpStatisticsPanel.java
FtpTreeModel.java FtpUserPanel.java GuiUtils.java
Added: ftpserver/src/java/org/apache/avalon/ftpserver/gui
about.html FtpAboutPanel.java FtpAdmin.java
FtpFilePanel.java FtpFileTableModel.java
FtpSpyFrame.java SpyPanel.java
Log:
second stage of refactoring
Revision Changes Path
1.5 +43 -20 jakarta-avalon-apps/ftpserver/src/java/org/apache/avalon/ftpserver/gui/CommonHandler.java
Index: CommonHandler.java
===================================================================
RCS file: /home/cvs/jakarta-avalon-apps/ftpserver/src/java/org/apache/avalon/ftpserver/gui/CommonHandler.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- CommonHandler.java 14 Dec 2001 01:22:03 -0000 1.4
+++ CommonHandler.java 6 Mar 2002 13:53:20 -0000 1.5
@@ -1,4 +1,3 @@
-
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
@@ -6,17 +5,21 @@
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
-package org.apache.avalon.ftpserver.gui;
-
+package org.apache.avalon.ftpserver.gui;
-import org.apache.avalon.ftpserver.interfaces.RemoteFtpAdmin;
-import org.apache.avalon.ftpserver.interfaces.RemoteFtpConfig;
-
-import java.awt.*;
+import java.awt.Component;
+import org.apache.avalon.ftpserver.FtpUser;
+import org.apache.avalon.ftpserver.remote.interfaces.RemoteHandlerInterface;
+import org.apache.avalon.ftpserver.remote.interfaces.FtpConfigInterface;
+import org.apache.avalon.ftpserver.remote.interfaces.FtpStatisticsInterface;
+import org.apache.avalon.ftpserver.remote.interfaces.ConnectionServiceInterface;
+import org.apache.avalon.ftpserver.remote.interfaces.IpRestrictorInterface;
+import org.apache.avalon.ftpserver.remote.interfaces.UserManagerInterface;
-/**
+
+/**
* GUI common handler methods.
*
* @author <a href="mailto:rana_b@yahoo.com">Rana Bhattacharyya</a>
@@ -31,30 +34,50 @@
/**
* Terminate application
*/
- void terminate();
-
+ void terminate();
+
/**
* Get admin session
*/
String getSessionId();
-
+
/**
* Get ftp server interface
*/
- RemoteFtpAdmin getServer();
-
+ RemoteHandlerInterface getRemoteHandler();
+
/**
* Get config interface
*/
- RemoteFtpConfig getConfig();
-
+ FtpConfigInterface getConfig();
+
/**
- * Logout admin
+ * Get statistics interface
*/
- void logout();
-
+ FtpStatisticsInterface getStatistics();
+
+ /**
+ * Get connection service
+ */
+ ConnectionServiceInterface getConnectionService();
+
+ /**
+ * Get IP restrictor
+ */
+ IpRestrictorInterface getIpRestrictor();
+
+ /**
+ * Get user manager
+ */
+ UserManagerInterface getUserManager();
+
+ /**
+ * Get user object from the session id
+ */
+ FtpUser getUser(String sessionId);
+
/**
* Get top component
- */
- Component getTopComponent();
+ */
+ Component getTopComponent();
}
1.6 +69 -68 jakarta-avalon-apps/ftpserver/src/java/org/apache/avalon/ftpserver/gui/ConfigTableModel.java
Index: ConfigTableModel.java
===================================================================
RCS file: /home/cvs/jakarta-avalon-apps/ftpserver/src/java/org/apache/avalon/ftpserver/gui/ConfigTableModel.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- ConfigTableModel.java 14 Dec 2001 01:22:03 -0000 1.5
+++ ConfigTableModel.java 6 Mar 2002 13:53:20 -0000 1.6
@@ -1,4 +1,3 @@
-
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
@@ -6,145 +5,147 @@
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
-package org.apache.avalon.ftpserver.gui;
-
+package org.apache.avalon.ftpserver.gui;
import java.util.Vector;
-
import javax.swing.table.AbstractTableModel;
-
import java.rmi.RemoteException;
-
-import org.apache.avalon.ftpserver.interfaces.RemoteFtpConfig;
-
+import org.apache.avalon.ftpserver.remote.interfaces.FtpConfigInterface;
/**
- * This table model is used to display <code>Properties</code>.
+ * This table model is used to display ftp configuration parameters.
*
* @author <a href="mailto:rana_b@yahoo.com">Rana Bhattacharyya</a>
*/
-public class ConfigTableModel extends AbstractTableModel {
-
- private final static String[] COL_NAMES = { "Name", "Value" };
-
- /**
- * Ftp config remote object.
- */
- private RemoteFtpConfig mConfig;
+public
+class ConfigTableModel extends AbstractTableModel {
+
+ private final static String[] COL_NAMES = {"Name", "Value"};
+
+ private FtpConfigInterface mConfig;
private CommonHandler mCommonHandler;
-
+
/**
* All properties key.
*/
- private Vector mTableKeys = new Vector();
+ private Vector mTableKeys = new Vector();
private Vector mTableVals = new Vector();
-
+
+
/**
* Create this <code>TableModel</code>.
*/
public ConfigTableModel(CommonHandler commonHandler) throws RemoteException {
-
mConfig = commonHandler.getConfig();
mCommonHandler = commonHandler;
-
initializeTable();
}
-
+
/**
* Initialize table - populate vector.
*/
private void initializeTable() throws RemoteException {
-
mTableKeys.clear();
mTableVals.clear();
-
- if (mConfig != null) {
+
+ if(mConfig != null) {
mTableKeys.add("Server Address");
mTableVals.add(String.valueOf(mConfig.getServerAddress().getHostAddress()));
+
mTableKeys.add("Server Port");
mTableVals.add(String.valueOf(mConfig.getServerPort()));
+
+ mTableKeys.add("Anonymous Login Supported");
+ mTableVals.add(String.valueOf(mConfig.isAnonymousLoginAllowed()));
+
mTableKeys.add("Maximum Connections");
mTableVals.add(String.valueOf(mConfig.getMaxConnections()));
- mTableKeys.add("Anonymous Login Supported");
- mTableVals.add(String.valueOf(mConfig.isAnonymousLoginSupported()));
+
mTableKeys.add("Maximum Anonymous Connections");
- mTableVals.add(String.valueOf(mConfig.getMaxAnonymousConnections()));
+ mTableVals.add(String.valueOf(mConfig.getMaxAnonymousLogins()));
+
mTableKeys.add("Scheduler Interval (sec)");
mTableVals.add(String.valueOf(mConfig.getSchedulerInterval()));
+
mTableKeys.add("Default Idle Time (sec)");
- mTableVals.add(String.valueOf(mConfig.getMaxIdleTime()));
- mTableKeys.add("Remote Admin Supported");
- mTableVals.add(String.valueOf(mConfig.isRemoteAdminSupported()));
+ mTableVals.add(String.valueOf(mConfig.getDefaultIdleTime()));
+
+ mTableKeys.add("Default Root Directory");
+ mTableVals.add(String.valueOf(mConfig.getDefaultRoot()));
+
mTableKeys.add("Remote Admin Port");
mTableVals.add(String.valueOf(mConfig.getRemoteAdminPort()));
+
+ mTableKeys.add("Remote Admin Allowed");
+ mTableVals.add(String.valueOf(mConfig.isRemoteAdminAllowed()));
+
mTableKeys.add("Base Directory");
- mTableVals.add(String.valueOf(mConfig.getBaseDirectory()));
+ mTableVals.add(mConfig.getBaseDirectory());
}
- }
-
+ }
+
+
/**
* Get column class - always string.
*/
public Class getColumnClass(int index) {
return String.class;
}
-
+
/**
* Get column count.
*/
public int getColumnCount() {
return COL_NAMES.length;
- }
-
+ }
+
/**
* Get column name.
*/
public String getColumnName(int index) {
return COL_NAMES[index];
- }
-
+ }
+
/**
* Get row count.
*/
public int getRowCount() {
return mTableKeys.size();
- }
-
+ }
+
/**
* Get value at.
*/
public Object getValueAt(int row, int col) {
-
- if (col == 0) {
+ if(col == 0) {
return mTableKeys.get(row);
- } else {
- return mTableVals.get(row);
}
- }
-
+ else {
+ return mTableVals.get(row);
+ }
+ }
+
/**
* Is cell editable - currently true.
*/
public boolean isCellEditable(int row, int col) {
return true;
- }
-
- /**
- * Set value at - does not set value - dummy metod.
- */
- public void setValueAt(Object val, int row, int col) {}
-
- /**
- * Clear table model.
- */
- public void clear() {
-
- mTableKeys.clear();
- mTableVals.clear();
-
- mConfig = null;
-
- fireTableDataChanged();
- }
-}
+ }
+
+ /**
+ * Set value at - does not set value - dummy metod.
+ */
+ public void setValueAt(Object val, int row, int col) {
+ }
+
+ /**
+ * Clear table model.
+ */
+ public void clear() {
+ mTableKeys.clear();
+ mTableVals.clear();
+ mConfig = null;
+ fireTableDataChanged();
+ }
+}
1.10 +91 -126 jakarta-avalon-apps/ftpserver/src/java/org/apache/avalon/ftpserver/gui/FtpAdminFrame.java
Index: FtpAdminFrame.java
===================================================================
RCS file: /home/cvs/jakarta-avalon-apps/ftpserver/src/java/org/apache/avalon/ftpserver/gui/FtpAdminFrame.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- FtpAdminFrame.java 14 Dec 2001 01:22:03 -0000 1.9
+++ FtpAdminFrame.java 6 Mar 2002 13:53:20 -0000 1.10
@@ -1,4 +1,3 @@
-
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
@@ -6,194 +5,160 @@
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
-package org.apache.avalon.ftpserver.gui;
-
+package org.apache.avalon.ftpserver.gui;
import java.rmi.RemoteException;
-
import java.awt.*;
import java.awt.event.*;
-
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;
-import org.apache.avalon.ftpserver.interfaces.FtpAdmin;
-import org.apache.avalon.ftpserver.interfaces.RemoteFtpConfig;
+import org.apache.avalon.ftpserver.remote.interfaces.RemoteHandlerInterface;
import org.apache.avalon.ftpserver.FtpException;
-import org.jesktop.frimble.JFrimble;
-import org.jesktop.frimble.FrimbleEvent;
-import org.jesktop.frimble.FrimbleAdapter;
-
/**
- * Ftp server admin user interface.
+ * Ftp server admin user interface.
*
* @author <a href="mailto:rana_b@yahoo.com">Rana Bhattacharyya</a>
*/
-public class FtpAdminFrame extends JFrimble implements TreeSelectionListener {
-
- private JTabbedPane mjTabPane;
- private JTree mjFtpTree = null;
- private JPanel mjFtpPane = null;
- private FtpRootPanel mRootPane = null;
- private RemoteFtpConfig mConfig = null;
- private CommonHandler mCommonHandler = null;
- private FtpAdminPanel mFtpAdminPanel;
-
- /**
- * Creates new form MyServerFrame
- */
- public FtpAdminFrame() {
-
- JMenuBar jmb = new JMenuBar();
- JMenu jm = new JMenu("File");
- JMenuItem jmi = new JMenuItem("Connect..");
-
- jmb.add(jm);
- jm.add(jmi);
- jmi.addActionListener(new ActionListener() {
-
- public void actionPerformed(ActionEvent ae) {
- new FtpAdminDialog(FtpAdminFrame.this);
- }
- });
- super.setJMenuBar(jmb);
-
- mFtpAdminPanel = new FtpAdminPanel();
-
- this.getContentPane().add(mFtpAdminPanel, BorderLayout.CENTER);
- pack();
- setTitle("Ftp Server");
- GuiUtils.setLocation(this.getFrimbleContained());
- }
-
- /**
- * Method setCommonHandler
- *
- *
- * @param commonHandler
- *
- * @throws FtpException
- * @throws RemoteException
- *
+public
+class FtpAdminFrame extends JFrame implements TreeSelectionListener {
+
+ private final static ImageIcon ICON_IMG = GuiUtils.createImageIcon("org/apache/avalon/ftpserver/gui/server.gif");
+
+ private JTabbedPane mjTabPane;
+
+ private JTree mjFtpTree = null;
+ private JPanel mjFtpPane = null;
+
+ private FtpRootPanel mRootPane = null;
+ private CommonHandler mCommonHandler = null;
+
+
+ /**
+ * Creates new form MyServerFrame
*/
- void setCommonHandler(CommonHandler commonHandler) throws RemoteException, FtpException {
-
+ public FtpAdminFrame(CommonHandler commonHandler) throws RemoteException, FtpException {
mCommonHandler = commonHandler;
- mConfig = mCommonHandler.getConfig();
-
- initComponents();
+ initComponents();
}
- /**
+ /**
* This method is called from within the constructor to
* initialize the form.
*/
- private void initComponents() throws RemoteException {
-
+ private void initComponents() throws RemoteException {
mjTabPane = new JTabbedPane();
-
+
// top level
JSplitPane jSplitPane = new JSplitPane();
-
jSplitPane.setDividerSize(2);
-
+
// left pane
mjFtpTree = new JTree(new FtpTreeModel());
-
- JScrollPane custPane = new JScrollPane(mjFtpTree,
+ JScrollPane custPane = new JScrollPane(mjFtpTree,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
-
jSplitPane.setLeftComponent(custPane);
-
+
// right pane
mjFtpPane = new JPanel();
-
jSplitPane.setRightComponent(mjFtpPane);
-
+
mRootPane = new FtpRootPanel(mCommonHandler);
mjFtpPane.add(mRootPane);
+
mjFtpTree.addTreeSelectionListener(this);
- mjFtpTree.setSelectionPath(new TreePath(FtpAdmin.DISPLAY_NAME));
- jSplitPane.setDividerLocation(120);
- mjTabPane.addTab(FtpAdmin.DISPLAY_NAME, jSplitPane);
- mFtpAdminPanel.add(mjTabPane, BorderLayout.CENTER);
- this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
-
- // handle closing of window.
- this.addFrimbleListener(new FrimbleAdapter() {
-
- public void frimbleClosing(FrimbleEvent e) {
-
- if (!GuiUtils.getConfirmation(FtpAdminFrame.this.getFrimbleContained(),
- "Do you really want to exit?")) {
- return;
- }
+ mjFtpTree.setSelectionPath(new TreePath(RemoteHandlerInterface.DISPLAY_NAME));
+ mjFtpTree.putClientProperty("JTree.lineStyle", "Angled");
+
+ DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
+ renderer.setLeafIcon(null);
+ renderer.setOpenIcon(null);
+ renderer.setClosedIcon(null);
+ mjFtpTree.setCellRenderer(renderer);
+
+ jSplitPane.setDividerLocation(100);
+ mjTabPane.addTab(RemoteHandlerInterface.DISPLAY_NAME, jSplitPane);
+
+ getContentPane().add(mjTabPane, BorderLayout.CENTER);
+
+ pack();
+ setTitle("Ftp Server");
+ if (ICON_IMG != null) {
+ setIconImage(ICON_IMG.getImage());
+ }
+ setSize(new Dimension(600, 450));
+ GuiUtils.setLocation(this);
+ }
- mCommonHandler.terminate();
+ /*
+ * Handle window closing event.
+ */
+ protected void processWindowEvent(WindowEvent e) {
+ int id = e.getID();
+ if (id == WindowEvent.WINDOW_CLOSING) {
+ if ( !GuiUtils.getConfirmation(this, "Do you really want to exit?") ) {
+ return;
}
- });
+ super.processWindowEvent(e);
+ mCommonHandler.terminate();
+ } else {
+ super.processWindowEvent(e);
+ }
}
/**
* Handle tree selection
*/
public void valueChanged(TreeSelectionEvent e) {
-
Object node = e.getPath().getLastPathComponent();
TreeModel model = mjFtpTree.getModel();
JPanel dispPane = null;
-
- if (model.getRoot().equals(node)) {
+ if(model.getRoot().equals(node)) {
dispPane = mRootPane;
- } else if (node.equals(FtpTreeModel.CHILDREN[0])) {
+ }
+ else if(node.equals(FtpTreeModel.CHILDREN[0])) {
dispPane = mRootPane.getUserPanel();
- } else if (node.equals(FtpTreeModel.CHILDREN[1])) {
+ }
+ else if(node.equals(FtpTreeModel.CHILDREN[1])) {
dispPane = mRootPane.getConnectionPanel();
- } else if (node.equals(FtpTreeModel.CHILDREN[2])) {
+ }
+ else if(node.equals(FtpTreeModel.CHILDREN[2])) {
dispPane = mRootPane.getIpPanel();
- } else if (node.equals(FtpTreeModel.CHILDREN[3])) {
+ }
+ else if(node.equals(FtpTreeModel.CHILDREN[3])) {
+ dispPane = mRootPane.getUploadPanel();
+ }
+ else if(node.equals(FtpTreeModel.CHILDREN[4])) {
+ dispPane = mRootPane.getDownloadPanel();
+ }
+ else if(node.equals(FtpTreeModel.CHILDREN[5])) {
+ dispPane = mRootPane.getDeletePanel();
+ }
+ else if(node.equals(FtpTreeModel.CHILDREN[6])) {
dispPane = mRootPane.getStatisticsPanel();
}
-
- if (dispPane != null) {
+ else if(node.equals(FtpTreeModel.CHILDREN[7])) {
+ dispPane = mRootPane.getAboutPanel();
+ }
+
+ if(dispPane != null) {
GuiUtils.showNewPanel(mjFtpPane, dispPane);
}
}
-
+
/**
* Release resources
*/
public void close() {
-
- setVisible(false);
-
- if (mRootPane != null) {
- mRootPane.close();
- }
-
+ setVisible(false);
+ mRootPane.close();
dispose();
}
- ////////////////////////////////////////////////////////////////////////
- /////////////////////// Program Starting Point ///////////////////////
- ////////////////////////////////////////////////////////////////////////
-
- /**
- * Remote admin starting point.
- */
- public static void main(String args[]) {
-
- JFrimble f = new FtpAdminFrame();
-
- f.pack();
- f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- f.setSize(new Dimension(600, 450));
- f.setVisible(true);
- }
-}
+}
\ No newline at end of file
1.4 +92 -111 jakarta-avalon-apps/ftpserver/src/java/org/apache/avalon/ftpserver/gui/FtpConnectionPanel.java
Index: FtpConnectionPanel.java
===================================================================
RCS file: /home/cvs/jakarta-avalon-apps/ftpserver/src/java/org/apache/avalon/ftpserver/gui/FtpConnectionPanel.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- FtpConnectionPanel.java 14 Dec 2001 01:22:03 -0000 1.3
+++ FtpConnectionPanel.java 6 Mar 2002 13:53:20 -0000 1.4
@@ -1,4 +1,3 @@
-
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
@@ -6,19 +5,14 @@
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
-package org.apache.avalon.ftpserver.gui;
-
+package org.apache.avalon.ftpserver.gui;
import java.rmi.RemoteException;
-
import java.awt.*;
import java.awt.event.*;
-
import javax.swing.*;
-
import org.apache.avalon.ftpserver.FtpUser;
-import org.apache.avalon.ftpserver.interfaces.UserHandler;
/**
@@ -26,163 +20,150 @@
*
* @author <a href="mailto:rana_b@yahoo.com">Rana Bhattacharyya</a>
*/
-public class FtpConnectionPanel extends JPanel {
-
+public
+class FtpConnectionPanel extends JPanel {
+
private JTable mjConnectionTable;
- private FtpSpyDialog mSpyDlg;
- private UserHandler mUserHandler;
+ private FtpConnectionPanel mSelf;
+
private CommonHandler mCommonHandler;
-
+ private FtpConnectionTableModel mModel;
+ private FtpSpyFrame mSpyFrame;
+
/**
* Instantiate login panel.
*/
public FtpConnectionPanel(CommonHandler commonHandler) throws RemoteException {
-
+ mSelf = this;
mCommonHandler = commonHandler;
- mUserHandler = commonHandler.getConfig().getUserHandler();
- mSpyDlg = new FtpSpyDialog(mCommonHandler);
-
- initComponents();
+ mModel = new FtpConnectionTableModel(mCommonHandler);
+ initComponents();
+ mSpyFrame = new FtpSpyFrame(commonHandler);
}
-
+
/**
* Initialize UI components
*/
- private void initComponents() throws RemoteException {
-
+ private void initComponents() {
+
setLayout(new BorderLayout());
-
- mjConnectionTable = new JTable(new FtpConnectionTableModel(mCommonHandler));
-
- mjConnectionTable.setPreferredScrollableViewportSize(new Dimension(420, 320));
+
+ mjConnectionTable = new JTable(mModel);
+ mjConnectionTable.setPreferredScrollableViewportSize(new Dimension(470, 320));
mjConnectionTable.setColumnSelectionAllowed(false);
-
- JScrollPane bottomPane = new JScrollPane(mjConnectionTable,
- JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
- JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
-
+ JScrollPane bottomPane = new JScrollPane(mjConnectionTable,
+ JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
+ JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
add(bottomPane, BorderLayout.CENTER);
-
+
+
// buttons
JPanel btnPane = new JPanel();
-
btnPane.setLayout(new FlowLayout(FlowLayout.CENTER));
-
- JButton jCloseBtn = new JButton("Close");
-
- btnPane.add(jCloseBtn);
-
+
+ JButton jLogoutBtn = new JButton("Disconnect");
+ btnPane.add(jLogoutBtn);
+
JButton jSpyBtn = new JButton("Spy User");
-
btnPane.add(jSpyBtn);
-
+
JButton jReloadBtn = new JButton("Reload");
-
btnPane.add(jReloadBtn);
+
add(btnPane, BorderLayout.SOUTH);
-
+
// event handlers
- jCloseBtn.addActionListener(new ActionListener() {
-
- public void actionPerformed(ActionEvent evt) {
+ jLogoutBtn.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent evt) {
closeConnection();
- }
+ }
});
+
jSpyBtn.addActionListener(new ActionListener() {
-
- public void actionPerformed(ActionEvent evt) {
+ public void actionPerformed(ActionEvent evt) {
spyUser();
- }
+ }
});
+
jReloadBtn.addActionListener(new ActionListener() {
-
- public void actionPerformed(ActionEvent evt) {
+ public void actionPerformed(ActionEvent evt) {
reload();
- }
+ }
});
+
}
-
+
/**
- * Close this connection.
+ * Logout this user
*/
- public void closeConnection() {
-
+ private void closeConnection() {
+ int indices[] = mjConnectionTable.getSelectedRows();
+ if(indices.length == 0) {
+ GuiUtils.showErrorMessage(mSelf, "Please select connection(s).");
+ return;
+ }
+
+ boolean response = GuiUtils.getConfirmation(mSelf, "Do you really want to close the selected connection(s)?");
+ if(!response) {
+ return;
+ }
+
try {
- FtpConnectionTableModel tableModel =
- (FtpConnectionTableModel) mjConnectionTable.getModel();
- int indices[] = mjConnectionTable.getSelectedRows();
-
- if (indices.length == 0) {
- GuiUtils.showErrorMessage(mCommonHandler.getTopComponent(),
- "Please select user(s).");
-
- return;
- }
-
- boolean response = GuiUtils.getConfirmation(
- mCommonHandler.getTopComponent(),
- "Do you really want to close the selected connection(s)?");
-
- if (!response) {
- return;
- }
-
- for (int i = 0; i < indices.length; i++) {
- FtpUser user = tableModel.getUser(indices[i]);
-
- if (user != null) {
- mUserHandler.closeConnection(user.getSessionId());
+ for(int i=indices.length; --i>=0; ) {
+ FtpUser user = mModel.getUser(indices[i]);
+ if(user != null) {
+ mCommonHandler.getConnectionService().closeConnection(user.getSessionId());
}
}
- } catch (Exception ex) {
+ }
+ catch(Exception ex) {
mCommonHandler.handleException(ex);
}
}
-
+
/**
* Monitor the selected user.
*/
- public void spyUser() {
-
- FtpConnectionTableModel tableModel =
- (FtpConnectionTableModel) mjConnectionTable.getModel();
+ private void spyUser() {
int indices[] = mjConnectionTable.getSelectedRows();
-
- if (indices.length == 0) {
- GuiUtils.showErrorMessage(mCommonHandler.getTopComponent(),
- "Please select a connection.");
-
+ if(indices.length == 0) {
+ GuiUtils.showErrorMessage(mSelf, "Please select connection(s).");
return;
}
-
- FtpUser thisUser = tableModel.getUser(indices[0]);
-
- mSpyDlg.init(thisUser);
+
+ try {
+ for(int i=indices.length; --i>=0; ) {
+ FtpUser thisUser = mModel.getUser(indices[i]);
+ if (thisUser != null) {
+ mSpyFrame.monitorConnection(thisUser);
+ }
+ }
+ mSpyFrame.setVisible(true);
+ }
+ catch(Exception ex) {
+ mCommonHandler.handleException(ex);
+ }
}
-
+
/**
- * Reload logn table
+ * Reload connection table
*/
- public void reload() {
-
+ private void reload() {
try {
- FtpConnectionTableModel model =
- (FtpConnectionTableModel) mjConnectionTable.getModel();
-
- model.reload();
- } catch (Exception ex) {
+ mModel.reload();
+ }
+ catch(Exception ex) {
mCommonHandler.handleException(ex);
}
}
-
+
/**
- * Release resources
+ * Close it
*/
public void close() {
-
- FtpConnectionTableModel model = (FtpConnectionTableModel) mjConnectionTable.getModel();
-
- model.close();
- mSpyDlg.close();
- }
-}
+ mModel.close();
+ mSpyFrame.close();
+ mSpyFrame.dispose();
+ }
+
+}
\ No newline at end of file
1.4 +141 -157 jakarta-avalon-apps/ftpserver/src/java/org/apache/avalon/ftpserver/gui/FtpConnectionTableModel.java
Index: FtpConnectionTableModel.java
===================================================================
RCS file: /home/cvs/jakarta-avalon-apps/ftpserver/src/java/org/apache/avalon/ftpserver/gui/FtpConnectionTableModel.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- FtpConnectionTableModel.java 14 Dec 2001 01:22:03 -0000 1.3
+++ FtpConnectionTableModel.java 6 Mar 2002 13:53:20 -0000 1.4
@@ -1,4 +1,3 @@
-
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
@@ -6,26 +5,23 @@
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
-package org.apache.avalon.ftpserver.gui;
-
+package org.apache.avalon.ftpserver.gui;
import java.rmi.RemoteException;
-import java.rmi.server.UnicastRemoteObject;
-
import java.net.InetAddress;
-
import java.util.Date;
import java.util.List;
-import java.util.ArrayList;
-
+import java.util.Iterator;
+import java.util.Vector;
+import java.util.Hashtable;
import java.text.SimpleDateFormat;
-
import javax.swing.table.AbstractTableModel;
-import org.apache.avalon.ftpserver.interfaces.UserHandler;
-import org.apache.avalon.ftpserver.interfaces.FtpConnectionObserver;
import org.apache.avalon.ftpserver.FtpUser;
+import org.apache.avalon.ftpserver.remote.interfaces.ConnectionServiceInterface;
+import org.apache.avalon.ftpserver.remote.interfaces.FtpConnectionObserver;
+import org.apache.avalon.ftpserver.gui.remote.FtpConnectionObserverAdapter;
/**
@@ -33,229 +29,217 @@
*
* @author <a href="mailto:rana_b@yahoo.com">Rana Bhattacharyya</a>
*/
-public class FtpConnectionTableModel extends AbstractTableModel implements FtpConnectionObserver {
-
- private final static SimpleDateFormat DATE_FMT = new SimpleDateFormat("MM/dd/yy HH:mm:ss");
- private final static String[] COL_NAMES = { "Name", "Login Time", "Last Access Time",
- "Client" };
- private List mConnectedUserList = new ArrayList();
- private UserHandler mUserHandler;
+public
+class FtpConnectionTableModel extends AbstractTableModel
+ implements FtpConnectionObserver {
+
+ private final static SimpleDateFormat DATE_FMT = new SimpleDateFormat("MM/dd HH:mm:ss");
+
+ private final static String[] COL_NAMES = {"Name",
+ "Login Time",
+ "Last Access Time",
+ "Client"};
+
+ private Vector mUserList;
+
+ private ConnectionServiceInterface mConService;
private CommonHandler mCommonHandler;
-
+ private FtpConnectionObserverAdapter mObserver;
+
+
/**
* Constructor - initialize user list
*/
public FtpConnectionTableModel(CommonHandler commonHandler) throws RemoteException {
-
mCommonHandler = commonHandler;
- mUserHandler = mCommonHandler.getConfig().getUserHandler();
- mConnectedUserList = mUserHandler.getAllConnectedUsers();
-
- UnicastRemoteObject.exportObject(this);
- mUserHandler.setObserver(this);
+ mConService = mCommonHandler.getConnectionService();
+ mUserList = new Vector();
+ mObserver = new FtpConnectionObserverAdapter(mConService, this);
+ reload();
}
-
+
+ /**
+ * Get user
+ */
+ public FtpUser getUser(int index) {
+ FtpUser user = null;
+ synchronized(mUserList) {
+ if ( (index >= 0) && (index < mUserList.size()) ) {
+ user = (FtpUser)mUserList.get(index);
+ }
+ }
+ return user;
+ }
+
+
/**
* Get column class - always string
*/
public Class getColumnClass(int index) {
return String.class;
}
-
+
/**
* Get column count.
*/
public int getColumnCount() {
return COL_NAMES.length;
}
-
+
/**
* Get column name.
*/
public String getColumnName(int index) {
return COL_NAMES[index];
- }
-
+ }
+
/**
* Get row count.
*/
- public synchronized int getRowCount() {
- return mConnectedUserList.size();
+ public int getRowCount() {
+ return mUserList.size();
}
-
+
/**
* Is cell editable - currently false.
*/
public boolean isCellEditable(int row, int col) {
return true;
}
-
- /**
- * Set value at - dummy method
- */
- public void setValueAt(Object val, int row, int col) {}
-
- /**
- * Get value at.
- */
- public synchronized Object getValueAt(int row, int col) {
-
+
+ /**
+ * Set value at - dummy method
+ */
+ public void setValueAt(Object val, int row, int col) {
+ }
+
+ /**
+ * Get value at.
+ */
+ public Object getValueAt(int row, int col) {
+
// error check
- String retVal = "";
-
- if (row >= mConnectedUserList.size()) {
+ String retVal = "";
+ FtpUser thisUser = getUser(row);
+ if (thisUser == null) {
return retVal;
}
-
- FtpUser thisUser = (FtpUser) mConnectedUserList.get(row);
-
- switch (col) {
-
- case 0 :
- if (thisUser.getName() != null) {
+
+ switch(col) {
+ case 0:
retVal = thisUser.getName();
- }
- break;
-
- case 1 :
- if (thisUser.getLoginTime() != 0) {
- retVal = DATE_FMT.format(new Date(thisUser.getLoginTime()));
- }
- break;
-
- case 2 :
- if (thisUser.getLastAccessTime() != 0) {
- retVal = DATE_FMT.format(new Date(thisUser.getLastAccessTime()));
- }
- break;
-
- case 3 :
- InetAddress remoteHost = thisUser.getRemoteHost();
-
- if (remoteHost != null) {
- retVal = remoteHost.getHostAddress();
- }
- break;
+ if (retVal == null) {
+ retVal = "";
+ }
+ break;
+
+ case 1:
+ long loginTime = thisUser.getLoginTime();
+ if (loginTime > 0) {
+ retVal = DATE_FMT.format(new Date(loginTime));
+ }
+ break;
+
+ case 2:
+ long accessTime = thisUser.getLastAccessTime();
+ if (accessTime > 0) {
+ retVal = DATE_FMT.format(new Date(accessTime));
+ }
+ break;
+
+ case 3:
+ InetAddress remoteHost = thisUser.getClientAddress();
+ if(remoteHost != null) {
+ retVal = remoteHost.getHostAddress();
+ }
+ break;
}
-
return retVal;
}
-
- /**
- * Get user at an index.
- */
- public synchronized FtpUser getUser(int index) {
-
- if ((index < 0) || (index >= mConnectedUserList.size())) {
- return null;
- }
-
- return (FtpUser) mConnectedUserList.get(index);
- }
-
+
+
/////////////////////////// Observer Methods ///////////////////////////
-
/**
* Add a new user
*/
- public synchronized void newConnection(String sessId) throws RemoteException {
-
- if (sessId == null) {
- return;
- }
-
- FtpUser thisUser = mUserHandler.getConnectedUser(sessId);
-
+ public void newConnection(final FtpUser thisUser) {
if (thisUser == null) {
return;
}
+
+ int sz = -1;
+ synchronized(mUserList) {
+ mUserList.add(thisUser);
+ sz = mUserList.size();
+ }
- mConnectedUserList.add(thisUser);
-
- int sz = mConnectedUserList.size();
-
- fireTableRowsInserted(sz, sz);
- }
-
+ if (sz != -1) {
+ fireTableRowsInserted(sz, sz);
+ }
+ }
+
+
/**
* Close .
*/
- public synchronized void closeConnection(String sessionId) {
-
- if (sessionId == null) {
+ public void removeConnection(final FtpUser user) {
+ if (user == null) {
return;
}
-
+
int index = -1;
-
- for (int i = 0; i < mConnectedUserList.size(); i++) {
- FtpUser currUser = (FtpUser) mConnectedUserList.get(i);
- String currSessId = currUser.getSessionId();
-
- if (currSessId.equals(sessionId)) {
- index = i;
-
- break;
+ synchronized(mUserList) {
+ index = mUserList.indexOf(user);
+ if (index != -1) {
+ mUserList.remove(index);
}
}
-
+
if (index != -1) {
- mConnectedUserList.remove(index);
fireTableRowsDeleted(index, index);
}
}
-
+
/**
* Existing connected user update notification.
*/
- public synchronized void updateConnection(String sessId) throws RemoteException {
-
- if (sessId == null) {
- return;
- }
-
- FtpUser thisUser = mUserHandler.getConnectedUser(sessId);
-
- if (thisUser == null) {
+ public void updateConnection(final FtpUser user) {
+ if (user == null) {
return;
}
-
+
int index = -1;
-
- for (int i = 0; i < mConnectedUserList.size(); i++) {
- FtpUser currUser = (FtpUser) mConnectedUserList.get(i);
-
- if (currUser.getSessionId().equals(sessId)) {
- index = i;
-
- break;
+ synchronized(mUserList) {
+ index = mUserList.indexOf(user);
+ if (index != -1) {
+ mUserList.set(index, user);
}
}
-
+
if (index != -1) {
- mConnectedUserList.set(index, thisUser);
fireTableRowsUpdated(index, index);
}
- }
-
+ }
+
+
/**
* Reload table model
*/
- public synchronized void reload() throws RemoteException {
-
- mConnectedUserList = mUserHandler.getAllConnectedUsers();
-
+ public void reload() throws RemoteException {
+ synchronized(mUserList) {
+ mUserList.clear();
+ mUserList.addAll(mConService.getAllUsers());
+ }
fireTableDataChanged();
- }
-
+ }
+
+
/**
* Close the resource
*/
public void close() {
-
- try {
- mUserHandler.setObserver(null);
- mConnectedUserList.clear();
- } catch (Exception ex) {}
- }
-}
+ mObserver.close();
+ mUserList.clear();
+ }
+
+}
\ No newline at end of file
1.7 +49 -67 jakarta-avalon-apps/ftpserver/src/java/org/apache/avalon/ftpserver/gui/FtpIpPanel.java
Index: FtpIpPanel.java
===================================================================
RCS file: /home/cvs/jakarta-avalon-apps/ftpserver/src/java/org/apache/avalon/ftpserver/gui/FtpIpPanel.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- FtpIpPanel.java 14 Dec 2001 01:22:03 -0000 1.6
+++ FtpIpPanel.java 6 Mar 2002 13:53:20 -0000 1.7
@@ -1,4 +1,3 @@
-
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
@@ -6,139 +5,122 @@
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
-package org.apache.avalon.ftpserver.gui;
-
+package org.apache.avalon.ftpserver.gui;
import java.util.Iterator;
import java.util.StringTokenizer;
-
-import java.rmi.RemoteException;
-
import java.awt.*;
import java.awt.event.*;
-
import javax.swing.*;
import javax.swing.border.*;
-
-import org.apache.avalon.ftpserver.interfaces.RemoteIpRestrictor;
-
+import org.apache.avalon.ftpserver.remote.interfaces.IpRestrictorInterface;
/**
* Ip restrictor panel.
*
* @author <a href="mailto:rana_b@yahoo.com">Rana Bhattacharyya</a>
*/
-public class FtpIpPanel extends JPanel {
-
+public
+class FtpIpPanel extends JPanel {
+
private JTextArea mjIpTxt;
- private RemoteIpRestrictor mRestrictor;
+ private IpRestrictorInterface mRestrictor;
private CommonHandler mCommonHandler;
-
+ private FtpIpPanel mSelf;
+
/**
* Instantiate IP restrictor panel
*/
- public FtpIpPanel(CommonHandler commonHandler) throws RemoteException {
-
+ public FtpIpPanel(CommonHandler commonHandler) {
mCommonHandler = commonHandler;
- mRestrictor = mCommonHandler.getConfig().getRemoteIpRestrictor();
-
+ mRestrictor = mCommonHandler.getIpRestrictor();
initComponents();
refresh();
}
-
+
/**
* Initialize UI components
*/
private void initComponents() {
-
setLayout(new BorderLayout());
-
+
JLabel headerLab = new JLabel("IP Restriction");
-
headerLab.setHorizontalAlignment(JLabel.CENTER);
headerLab.setForeground(Color.black);
add(headerLab, BorderLayout.NORTH);
-
+
mjIpTxt = new JTextArea(18, 15);
-
- JScrollPane txtPane = new JScrollPane(mjIpTxt, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
- JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
-
+ JScrollPane txtPane = new JScrollPane(mjIpTxt,
+ JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
+ JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
add(txtPane, BorderLayout.CENTER);
-
+
// buttons
JPanel btnPane = new JPanel();
-
btnPane.setLayout(new FlowLayout(FlowLayout.CENTER));
-
+
JButton jSaveBtn = new JButton("Save");
-
btnPane.add(jSaveBtn);
-
- JButton jRefreshBtn = new JButton("Refresh");
-
- btnPane.add(jRefreshBtn);
+
+ JButton jResetBtn = new JButton("Reset");
+ btnPane.add(jResetBtn);
+
add(btnPane, BorderLayout.SOUTH);
-
+
// event handlers
jSaveBtn.addActionListener(new ActionListener() {
-
- public void actionPerformed(ActionEvent evt) {
+ public void actionPerformed(ActionEvent evt) {
save();
- }
+ }
});
- jRefreshBtn.addActionListener(new ActionListener() {
-
- public void actionPerformed(ActionEvent evt) {
+
+ jResetBtn.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent evt) {
refresh();
- }
+ }
});
}
-
+
/**
* Save IP data
*/
public void save() {
-
- if (mRestrictor != null) {
+ if(mRestrictor != null) {
try {
mRestrictor.clear();
-
StringTokenizer st = new StringTokenizer(mjIpTxt.getText(), "\r\n");
-
- while (st.hasMoreTokens()) {
+ while(st.hasMoreTokens()) {
mRestrictor.addEntry(st.nextToken());
}
-
mRestrictor.save();
- } catch (Exception ex) {
+ }
+ catch(Exception ex) {
mCommonHandler.handleException(ex);
}
}
}
-
+
/**
* Refresh table data
*/
private void refresh() {
-
- try {
- mjIpTxt.setText("");
-
- Iterator ipRestrictorIt = mRestrictor.getAllEntries().iterator();
-
- while (ipRestrictorIt.hasNext()) {
- mjIpTxt.append(ipRestrictorIt.next().toString());
- mjIpTxt.append("\n");
- }
- } catch (RemoteException ex) {
- mCommonHandler.handleException(ex);
+ try {
+ mjIpTxt.setText("");
+ Iterator ipRestrictorIt = mRestrictor.getAllEntries().iterator();
+ while(ipRestrictorIt.hasNext()) {
+ mjIpTxt.append(ipRestrictorIt.next().toString());
+ mjIpTxt.append("\n");
+ }
+ }
+ catch(Exception ex) {
+ mCommonHandler.handleException(ex);
}
}
-
+
/**
* Close resource
*/
- public void close() {}
-}
+ public void close() {
+ }
+}
1.7 +86 -67 jakarta-avalon-apps/ftpserver/src/java/org/apache/avalon/ftpserver/gui/FtpRootPanel.java
Index: FtpRootPanel.java
===================================================================
RCS file: /home/cvs/jakarta-avalon-apps/ftpserver/src/java/org/apache/avalon/ftpserver/gui/FtpRootPanel.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- FtpRootPanel.java 14 Dec 2001 01:22:03 -0000 1.6
+++ FtpRootPanel.java 6 Mar 2002 13:53:20 -0000 1.7
@@ -1,4 +1,3 @@
-
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
@@ -6,161 +5,181 @@
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
-package org.apache.avalon.ftpserver.gui;
-
-
-
-import java.rmi.*;
-
-import java.util.*;
-import java.io.*;
+package org.apache.avalon.ftpserver.gui;
+import java.rmi.RemoteException;
import java.awt.*;
import java.awt.event.*;
-
import javax.swing.*;
-import org.apache.avalon.ftpserver.interfaces.*;
-
/**
- * FTP user interface root panel. We can stop
- * the server, view comfig parameters using this panel.
+ * FTP user interface root panel. We can view comfig parameters
+ * using this panel.
*
* @author <a href="mailto:rana_b@yahoo.com">Rana Bhattacharyya</a>
*/
-public class FtpRootPanel extends JPanel {
-
+public
+class FtpRootPanel extends JPanel {
+
private JTextField mjHostTxt = null;
- private JTable mjCfgTbl = null;
- private FtpUserPanel mUserPane = null;
+ private JTable mjCfgTbl = null;
+
+ private FtpUserPanel mUserPane = null;
private FtpConnectionPanel mConnectionPane = null;
- private FtpIpPanel mIpPane = null;
- private FtpStatisticsPanel mStatPane = null;
- private FtpRootPanel mSelf = null;
+ private FtpIpPanel mIpPane = null;
+ private FtpStatisticsPanel mStatPane = null;
+ private FtpFilePanel mUploadPane = null;
+ private FtpFilePanel mDownloadPane = null;
+ private FtpFilePanel mDeletePane = null;
+ private FtpAboutPanel mAboutPanel = null;
+
private CommonHandler mCommonHandler = null;
-
- /**
- * Creates new panel for root.
+
+
+ /**
+ * Creates new panel for root.
*/
public FtpRootPanel(CommonHandler commonHandler) throws RemoteException {
-
mCommonHandler = commonHandler;
-
- initComponents();
+ initComponents ();
}
-
- /**
+
+ /**
* This method is called from within the constructor to
* initialize the form.
*/
private void initComponents() throws RemoteException {
-
+
setLayout(new BorderLayout());
-
+
// top panel
JPanel topPane = new JPanel();
-
topPane.setLayout(new GridBagLayout());
-
GridBagConstraints gc;
+
JLabel hostLab = new JLabel("Remote Host");
-
hostLab.setForeground(Color.black);
-
gc = new GridBagConstraints();
gc.gridx = 0;
gc.gridy = 0;
gc.insets = new Insets(0, 0, 0, 10);
-
topPane.add(hostLab, gc);
-
+
mjHostTxt = new JTextField();
-
mjHostTxt.setColumns(15);
mjHostTxt.setEditable(false);
mjHostTxt.setText(mCommonHandler.getConfig().getServerAddress().getHostAddress());
-
gc = new GridBagConstraints();
gc.gridx = 1;
gc.gridy = 0;
gc.gridwidth = 1;
gc.insets = new Insets(0, 0, 0, 10);
-
topPane.add(mjHostTxt, gc);
-
+
JLabel headerLab = new JLabel("Configuration Parameters");
-
headerLab.setHorizontalAlignment(JLabel.CENTER);
headerLab.setForeground(Color.black);
-
gc = new GridBagConstraints();
gc.gridx = 0;
gc.gridy = 1;
gc.gridwidth = 2;
gc.insets = new Insets(30, 0, 0, 0);
-
topPane.add(headerLab, gc);
add(topPane, BorderLayout.NORTH);
-
+
+
// bottom panel - display config parameters
ConfigTableModel cfgModel = new ConfigTableModel(mCommonHandler);
-
mjCfgTbl = new JTable(cfgModel);
-
mjCfgTbl.setPreferredScrollableViewportSize(new Dimension(420, 200));
mjCfgTbl.setColumnSelectionAllowed(false);
-
- JScrollPane bottomPane = new JScrollPane(mjCfgTbl,
- JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
- JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
-
+ JScrollPane bottomPane = new JScrollPane(mjCfgTbl,
+ JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
+ JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
add(bottomPane, BorderLayout.CENTER);
-
+
+
// create other panels
- mUserPane = new FtpUserPanel(mCommonHandler);
+ mUserPane = new FtpUserPanel(mCommonHandler);
mConnectionPane = new FtpConnectionPanel(mCommonHandler);
- mIpPane = new FtpIpPanel(mCommonHandler);
- mStatPane = new FtpStatisticsPanel(mCommonHandler);
+ mIpPane = new FtpIpPanel(mCommonHandler);
+ mStatPane = new FtpStatisticsPanel(mCommonHandler);
+ mUploadPane = new FtpFilePanel(mStatPane.getUploadModel(), "Uploaded Files");
+ mDownloadPane = new FtpFilePanel(mStatPane.getDownloadModel(), "Downloaded Files");
+ mDeletePane = new FtpFilePanel(mStatPane.getDeleteModel(), "Deleted Files");
+ mAboutPanel = new FtpAboutPanel();
}
-
+
/**
* Get user panel.
*/
public JPanel getUserPanel() {
- return mUserPane;
- }
-
+ return mUserPane;
+ }
+
/**
* Get login panel.
*/
public JPanel getConnectionPanel() {
return mConnectionPane;
}
-
+
/**
* Get IP panel.
*/
public JPanel getIpPanel() {
return mIpPane;
}
-
+
/**
* Get statistics panel
*/
public JPanel getStatisticsPanel() {
- return mStatPane;
+ return mStatPane;
+ }
+
+ /**
+ * Get uploaded file panel
+ */
+ public JPanel getUploadPanel() {
+ return mUploadPane;
+ }
+
+ /**
+ * Get downloaded file panel
+ */
+ public JPanel getDownloadPanel() {
+ return mDownloadPane;
+ }
+
+ /**
+ * Get deleted file panel
+ */
+ public JPanel getDeletePanel() {
+ return mDeletePane;
+ }
+
+ /**
+ * Get ftp server about panel.
+ */
+ public JPanel getAboutPanel() {
+ return mAboutPanel;
}
-
+
/**
* Close the resources.
*/
public void close() {
-
mStatPane.close();
mConnectionPane.close();
mUserPane.close();
mIpPane.close();
- }
-}
+ mUploadPane.close();
+ mDownloadPane.close();
+ mDeletePane.close();
+ mAboutPanel.close();
+ }
+
+}
\ No newline at end of file
1.8 +214 -238 jakarta-avalon-apps/ftpserver/src/java/org/apache/avalon/ftpserver/gui/FtpStatisticsPanel.java
Index: FtpStatisticsPanel.java
===================================================================
RCS file: /home/cvs/jakarta-avalon-apps/ftpserver/src/java/org/apache/avalon/ftpserver/gui/FtpStatisticsPanel.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- FtpStatisticsPanel.java 14 Dec 2001 01:22:03 -0000 1.7
+++ FtpStatisticsPanel.java 6 Mar 2002 13:53:20 -0000 1.8
@@ -1,4 +1,3 @@
-
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
@@ -6,550 +5,527 @@
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
-package org.apache.avalon.ftpserver.gui;
-
+package org.apache.avalon.ftpserver.gui;
import java.rmi.RemoteException;
-import java.rmi.server.UnicastRemoteObject;
-
import java.text.SimpleDateFormat;
-
import java.awt.*;
-import java.awt.event.ActionListener;
-import java.awt.event.ActionEvent;
-
-import org.apache.avalon.ftpserver.interfaces.FtpStatisticsListener;
-import org.apache.avalon.ftpserver.interfaces.FtpStatistics;
-import org.apache.avalon.ftpserver.interfaces.RemoteFtpStatistics;
-
+import java.awt.event.*;
import javax.swing.*;
-
+import org.apache.avalon.ftpserver.FtpUser;
+import org.apache.avalon.ftpserver.remote.interfaces.FtpFileListener;
+import org.apache.avalon.ftpserver.remote.interfaces.FtpStatisticsListener;
+import org.apache.avalon.ftpserver.remote.interfaces.FtpStatisticsInterface;
+import org.apache.avalon.ftpserver.gui.remote.FtpFileListenerAdapter;
+import org.apache.avalon.ftpserver.gui.remote.FtpStatisticsListenerAdapter;
/**
* Ftp server global statistics panel. It listenes to the global
* statistics changes.
- *
+ *
* @author <a href="mailto:rana_b@yahoo.com">Rana Bhattacharyya</a>
*/
-public class FtpStatisticsPanel extends JPanel implements FtpStatisticsListener {
+public
+class FtpStatisticsPanel extends JPanel
+ implements FtpStatisticsListener,
+ FtpFileListener {
- private final static SimpleDateFormat DATE_FMT = new SimpleDateFormat("dd,MMM,yyyy HH:mm");
+ private final static SimpleDateFormat DATE_FMT = new SimpleDateFormat("MM/dd HH:mm:ss");
+
private JTextField mjStartTimeTxt;
+
private JTextField mjUploadNbrTxt;
private JTextField mjDownloadNbrTxt;
private JTextField mjDeleteNbrTxt;
+
private JTextField mjUploadBytesTxt;
private JTextField mjDownloadBytesTxt;
+
private JTextField mjLoginNbrTxt;
private JTextField mjAnonLoginNbrTxt;
private JTextField mjConNbrTxt;
+
private JTextField mjTotalLoginNbrTxt;
private JTextField mjTotalAnonLoginNbrTxt;
private JTextField mjTotalConNbrTxt;
+
+ private FtpFileTableModel mUploadModel;
+ private FtpFileTableModel mDownloadModel;
+ private FtpFileTableModel mDeleteModel;
+
private CommonHandler mCommonHandler;
- private RemoteFtpStatistics mStat;
-
- /**
- * Creates new panel to display ftp global statistics.
+ private FtpStatisticsInterface mStat;
+
+ private FtpFileListenerAdapter mFileListener;
+ private FtpStatisticsListenerAdapter mListener;
+
+ /**
+ * Creates new panel to display ftp global statistics.
*/
public FtpStatisticsPanel(CommonHandler commonHandler) throws RemoteException {
-
mCommonHandler = commonHandler;
-
- UnicastRemoteObject.exportObject(this);
-
- mStat = mCommonHandler.getConfig().getStatistics();
-
- mStat.setListener(this);
+ mStat = mCommonHandler.getStatistics();
+
+ mUploadModel = new FtpFileTableModel();
+ mDownloadModel = new FtpFileTableModel();
+ mDeleteModel = new FtpFileTableModel();
initComponents();
-
- try {
- mjStartTimeTxt.setText(DATE_FMT.format(mStat.getStartTime()));
- } catch (Exception ex) {}
-
+
+ mFileListener = new FtpFileListenerAdapter(mStat, this);
+ mListener = new FtpStatisticsListenerAdapter(mStat, this);
+
reload();
+ mjStartTimeTxt.setText(DATE_FMT.format(mStat.getStartTime()));
}
- /**
+ /**
* This method is called from within the constructor to
* initialize the panel.
*/
private void initComponents() {
-
+ setLayout(new BorderLayout());
+
+ JPanel topPane = new JPanel();
GridBagConstraints gc;
-
- setLayout(new GridBagLayout());
-
+ topPane.setLayout(new GridBagLayout());
+
// start time
JLabel jStartTimeLab = new JLabel("Start Time");
-
jStartTimeLab.setHorizontalAlignment(JLabel.RIGHT);
jStartTimeLab.setForeground(Color.black);
-
gc = new GridBagConstraints();
gc.gridx = 0;
gc.gridy = 0;
gc.gridwidth = 1;
gc.anchor = GridBagConstraints.EAST;
- gc.insets = new Insets(5, 0, 0, 5);
-
- add(jStartTimeLab, gc);
-
+ gc.insets = new Insets(15, 0, 0, 5);
+ topPane.add(jStartTimeLab, gc);
+
mjStartTimeTxt = new JTextField();
-
mjStartTimeTxt.setColumns(15);
mjStartTimeTxt.setEditable(false);
-
gc = new GridBagConstraints();
gc.gridx = 1;
gc.gridy = 0;
gc.gridwidth = 2;
gc.anchor = GridBagConstraints.WEST;
- gc.insets = new Insets(5, 0, 0, 5);
-
- add(mjStartTimeTxt, gc);
-
+ gc.insets = new Insets(15, 0, 0, 5);
+ topPane.add(mjStartTimeTxt, gc);
+
// number of uploads
JLabel jUploadNbrLab = new JLabel("Number of uploads");
-
jUploadNbrLab.setHorizontalAlignment(JLabel.RIGHT);
jUploadNbrLab.setForeground(Color.black);
-
gc = new GridBagConstraints();
gc.gridx = 0;
gc.gridy = 1;
gc.gridwidth = 1;
gc.anchor = GridBagConstraints.EAST;
gc.insets = new Insets(5, 0, 0, 5);
-
- add(jUploadNbrLab, gc);
-
+ topPane.add(jUploadNbrLab, gc);
+
mjUploadNbrTxt = new JTextField();
-
mjUploadNbrTxt.setColumns(6);
mjUploadNbrTxt.setEditable(false);
-
gc = new GridBagConstraints();
gc.gridx = 1;
gc.gridy = 1;
gc.gridwidth = 2;
gc.anchor = GridBagConstraints.WEST;
gc.insets = new Insets(5, 0, 0, 5);
-
- add(mjUploadNbrTxt, gc);
-
+ topPane.add(mjUploadNbrTxt, gc);
+
// number of downloads
JLabel jDownloadNbrLab = new JLabel("Number of downloads");
-
jDownloadNbrLab.setHorizontalAlignment(JLabel.RIGHT);
jDownloadNbrLab.setForeground(Color.black);
-
gc = new GridBagConstraints();
gc.gridx = 0;
gc.gridy = 2;
gc.gridwidth = 1;
gc.anchor = GridBagConstraints.EAST;
gc.insets = new Insets(5, 0, 0, 5);
-
- add(jDownloadNbrLab, gc);
-
+ topPane.add(jDownloadNbrLab, gc);
+
mjDownloadNbrTxt = new JTextField();
-
mjDownloadNbrTxt.setColumns(6);
mjDownloadNbrTxt.setEditable(false);
-
gc = new GridBagConstraints();
gc.gridx = 1;
gc.gridy = 2;
gc.gridwidth = 2;
gc.anchor = GridBagConstraints.WEST;
gc.insets = new Insets(5, 0, 0, 5);
-
- add(mjDownloadNbrTxt, gc);
-
+ topPane.add(mjDownloadNbrTxt, gc);
+
// number of downloads
JLabel jDeleteNbrLab = new JLabel("Number of deletes");
-
jDeleteNbrLab.setHorizontalAlignment(JLabel.RIGHT);
jDeleteNbrLab.setForeground(Color.black);
-
gc = new GridBagConstraints();
gc.gridx = 0;
gc.gridy = 3;
gc.gridwidth = 1;
gc.anchor = GridBagConstraints.EAST;
gc.insets = new Insets(5, 0, 0, 5);
-
- add(jDeleteNbrLab, gc);
-
+ topPane.add(jDeleteNbrLab, gc);
+
mjDeleteNbrTxt = new JTextField();
-
mjDeleteNbrTxt.setColumns(6);
mjDeleteNbrTxt.setEditable(false);
-
gc = new GridBagConstraints();
gc.gridx = 1;
gc.gridy = 3;
gc.gridwidth = 2;
gc.anchor = GridBagConstraints.WEST;
gc.insets = new Insets(5, 0, 0, 5);
-
- add(mjDeleteNbrTxt, gc);
-
+ topPane.add(mjDeleteNbrTxt, gc);
+
// number of uploaded bytes
JLabel jUploadBytesLab = new JLabel("Uploaded bytes");
-
jUploadBytesLab.setHorizontalAlignment(JLabel.RIGHT);
jUploadBytesLab.setForeground(Color.black);
-
gc = new GridBagConstraints();
gc.gridx = 0;
gc.gridy = 4;
gc.gridwidth = 1;
gc.anchor = GridBagConstraints.EAST;
gc.insets = new Insets(5, 0, 0, 5);
-
- add(jUploadBytesLab, gc);
-
+ topPane.add(jUploadBytesLab, gc);
+
mjUploadBytesTxt = new JTextField();
-
mjUploadBytesTxt.setColumns(15);
mjUploadBytesTxt.setEditable(false);
-
gc = new GridBagConstraints();
gc.gridx = 1;
gc.gridy = 4;
gc.gridwidth = 2;
gc.anchor = GridBagConstraints.WEST;
gc.insets = new Insets(5, 0, 0, 5);
-
- add(mjUploadBytesTxt, gc);
-
+ topPane.add(mjUploadBytesTxt, gc);
+
// number of uploaded bytes
JLabel jDownloadBytesLab = new JLabel("Downloaded bytes");
-
jDownloadBytesLab.setHorizontalAlignment(JLabel.RIGHT);
jDownloadBytesLab.setForeground(Color.black);
-
gc = new GridBagConstraints();
gc.gridx = 0;
gc.gridy = 5;
gc.gridwidth = 1;
gc.anchor = GridBagConstraints.EAST;
gc.insets = new Insets(5, 0, 0, 5);
-
- add(jDownloadBytesLab, gc);
-
+ topPane.add(jDownloadBytesLab, gc);
+
mjDownloadBytesTxt = new JTextField();
-
mjDownloadBytesTxt.setColumns(15);
- mjDownloadBytesTxt.setEditable(false);
-
+ mjDownloadBytesTxt.setEditable(false);
gc = new GridBagConstraints();
gc.gridx = 1;
gc.gridy = 5;
gc.gridwidth = 2;
gc.anchor = GridBagConstraints.WEST;
gc.insets = new Insets(5, 0, 0, 5);
-
- add(mjDownloadBytesTxt, gc);
-
+ topPane.add(mjDownloadBytesTxt, gc);
+
// number of current logins
JLabel jLoginNbrLab = new JLabel("Current logins");
-
jLoginNbrLab.setHorizontalAlignment(JLabel.RIGHT);
jLoginNbrLab.setForeground(Color.black);
-
gc = new GridBagConstraints();
gc.gridx = 0;
gc.gridy = 6;
gc.gridwidth = 1;
gc.anchor = GridBagConstraints.EAST;
gc.insets = new Insets(5, 0, 0, 5);
-
- add(jLoginNbrLab, gc);
-
+ topPane.add(jLoginNbrLab, gc);
+
mjLoginNbrTxt = new JTextField();
-
mjLoginNbrTxt.setColumns(6);
mjLoginNbrTxt.setEditable(false);
-
gc = new GridBagConstraints();
gc.gridx = 1;
gc.gridy = 6;
gc.gridwidth = 2;
gc.anchor = GridBagConstraints.WEST;
gc.insets = new Insets(5, 0, 0, 5);
-
- add(mjLoginNbrTxt, gc);
-
+ topPane.add(mjLoginNbrTxt, gc);
+
// number of total logins
JLabel jTotalLoginNbrLab = new JLabel("Total logins");
-
jTotalLoginNbrLab.setHorizontalAlignment(JLabel.RIGHT);
jTotalLoginNbrLab.setForeground(Color.black);
-
gc = new GridBagConstraints();
gc.gridx = 0;
gc.gridy = 7;
gc.gridwidth = 1;
gc.anchor = GridBagConstraints.EAST;
gc.insets = new Insets(5, 0, 0, 5);
-
- add(jTotalLoginNbrLab, gc);
-
+ topPane.add(jTotalLoginNbrLab, gc);
+
mjTotalLoginNbrTxt = new JTextField();
-
mjTotalLoginNbrTxt.setColumns(6);
mjTotalLoginNbrTxt.setEditable(false);
-
gc = new GridBagConstraints();
gc.gridx = 1;
gc.gridy = 7;
gc.gridwidth = 2;
gc.anchor = GridBagConstraints.WEST;
gc.insets = new Insets(5, 0, 0, 5);
-
- add(mjTotalLoginNbrTxt, gc);
-
+ topPane.add(mjTotalLoginNbrTxt, gc);
+
// number of current anonymous logins
JLabel jAnonLoginNbrLab = new JLabel("Current anonymous logins");
-
jAnonLoginNbrLab.setHorizontalAlignment(JLabel.RIGHT);
jAnonLoginNbrLab.setForeground(Color.black);
-
gc = new GridBagConstraints();
gc.gridx = 0;
gc.gridy = 8;
gc.gridwidth = 1;
gc.anchor = GridBagConstraints.EAST;
gc.insets = new Insets(5, 0, 0, 5);
-
- add(jAnonLoginNbrLab, gc);
-
+ topPane.add(jAnonLoginNbrLab, gc);
+
mjAnonLoginNbrTxt = new JTextField();
-
mjAnonLoginNbrTxt.setColumns(6);
mjAnonLoginNbrTxt.setEditable(false);
-
gc = new GridBagConstraints();
gc.gridx = 1;
gc.gridy = 8;
gc.gridwidth = 2;
gc.anchor = GridBagConstraints.WEST;
gc.insets = new Insets(5, 0, 0, 5);
-
- add(mjAnonLoginNbrTxt, gc);
-
+ topPane.add(mjAnonLoginNbrTxt, gc);
+
// number of total anonymous logins
JLabel jTotalAnonLoginNbrLab = new JLabel("Total anonymous logins");
-
jTotalAnonLoginNbrLab.setHorizontalAlignment(JLabel.RIGHT);
jTotalAnonLoginNbrLab.setForeground(Color.black);
-
gc = new GridBagConstraints();
gc.gridx = 0;
gc.gridy = 9;
gc.gridwidth = 1;
gc.anchor = GridBagConstraints.EAST;
gc.insets = new Insets(5, 0, 0, 5);
-
- add(jTotalAnonLoginNbrLab, gc);
-
+ topPane.add(jTotalAnonLoginNbrLab, gc);
+
mjTotalAnonLoginNbrTxt = new JTextField();
-
mjTotalAnonLoginNbrTxt.setColumns(6);
mjTotalAnonLoginNbrTxt.setEditable(false);
-
gc = new GridBagConstraints();
gc.gridx = 1;
gc.gridy = 9;
gc.gridwidth = 2;
gc.anchor = GridBagConstraints.WEST;
gc.insets = new Insets(5, 0, 0, 5);
-
- add(mjTotalAnonLoginNbrTxt, gc);
-
+ topPane.add(mjTotalAnonLoginNbrTxt, gc);
+
// number of current connections
JLabel jConNbrLab = new JLabel("Current connections");
-
jConNbrLab.setHorizontalAlignment(JLabel.RIGHT);
jConNbrLab.setForeground(Color.black);
-
gc = new GridBagConstraints();
gc.gridx = 0;
gc.gridy = 10;
gc.gridwidth = 1;
gc.anchor = GridBagConstraints.EAST;
gc.insets = new Insets(5, 0, 0, 5);
-
- add(jConNbrLab, gc);
-
+ topPane.add(jConNbrLab, gc);
+
mjConNbrTxt = new JTextField();
-
mjConNbrTxt.setColumns(6);
mjConNbrTxt.setEditable(false);
-
gc = new GridBagConstraints();
gc.gridx = 1;
gc.gridy = 10;
gc.gridwidth = 2;
gc.anchor = GridBagConstraints.WEST;
gc.insets = new Insets(5, 0, 0, 5);
-
- add(mjConNbrTxt, gc);
-
+ topPane.add(mjConNbrTxt, gc);
+
// number of current connections
JLabel jTotalConNbrLab = new JLabel("Total connections");
-
jTotalConNbrLab.setHorizontalAlignment(JLabel.RIGHT);
jTotalConNbrLab.setForeground(Color.black);
-
gc = new GridBagConstraints();
gc.gridx = 0;
gc.gridy = 11;
gc.gridwidth = 1;
gc.anchor = GridBagConstraints.EAST;
gc.insets = new Insets(5, 0, 0, 5);
-
- add(jTotalConNbrLab, gc);
-
+ topPane.add(jTotalConNbrLab, gc);
+
mjTotalConNbrTxt = new JTextField();
-
mjTotalConNbrTxt.setColumns(6);
mjTotalConNbrTxt.setEditable(false);
-
gc = new GridBagConstraints();
gc.gridx = 1;
gc.gridy = 11;
gc.gridwidth = 2;
gc.anchor = GridBagConstraints.WEST;
gc.insets = new Insets(5, 0, 0, 5);
-
- add(mjTotalConNbrTxt, gc);
-
- // reload button
- JButton reloadBtn = new JButton("Reload");
-
- gc = new GridBagConstraints();
- gc.gridx = 1;
- gc.gridy = 12;
- gc.gridwidth = 1;
- gc.anchor = GridBagConstraints.WEST;
- gc.insets = new Insets(15, 0, 0, 5);
-
- add(reloadBtn, gc);
- reloadBtn.addActionListener(new ActionListener() {
-
- public void actionPerformed(ActionEvent evt) {
+ topPane.add(mjTotalConNbrTxt, gc);
+
+ add(topPane, BorderLayout.CENTER);
+
+ JPanel bottomPane = new JPanel();
+ bottomPane.setLayout(new FlowLayout(FlowLayout.CENTER));
+ JButton jReloadButton = new JButton("Reload");
+ jReloadButton.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent evt) {
reload();
- }
+ }
});
+ bottomPane.add(jReloadButton);
+
+ add(bottomPane, BorderLayout.SOUTH);
}
-
+
+ /**
+ * Get upload file table model.
+ */
+ public FtpFileTableModel getUploadModel() {
+ return mUploadModel;
+ }
+
+ /**
+ * Get download file table model.
+ */
+ public FtpFileTableModel getDownloadModel() {
+ return mDownloadModel;
+ }
+
+ /**
+ * Get delete file table model.
+ */
+ public FtpFileTableModel getDeleteModel() {
+ return mDeleteModel;
+ }
+
+
/**
* Upload notification.
*/
public void notifyUpload() {
-
- if (mStat != null) {
- try {
- mjUploadNbrTxt.setText(String.valueOf(mStat.getFileUploadNbr()));
- mjUploadBytesTxt.setText(String.valueOf(mStat.getFileUploadSize()));
- } catch (Exception ex) {
- mCommonHandler.handleException(ex);
- }
- }
+ try {
+ mjUploadNbrTxt.setText(String.valueOf(mStat.getFileUploadNbr()));
+ mjUploadBytesTxt.setText(String.valueOf(mStat.getFileUploadSize()));
+ }
+ catch(Exception ex) {
+ mCommonHandler.handleException(ex);
+ }
}
-
+
/**
* Download notification.
*/
public void notifyDownload() {
-
- if (mStat != null) {
- try {
- mjDownloadNbrTxt.setText(String.valueOf(mStat.getFileDownloadNbr()));
- mjDownloadBytesTxt.setText(String.valueOf(mStat.getFileDownloadSize()));
- } catch (Exception ex) {
- mCommonHandler.handleException(ex);
- }
- }
+ try {
+ mjDownloadNbrTxt.setText(String.valueOf(mStat.getFileDownloadNbr()));
+ mjDownloadBytesTxt.setText(String.valueOf(mStat.getFileDownloadSize()));
+ }
+ catch(Exception ex) {
+ mCommonHandler.handleException(ex);
+ }
}
-
+
+
/**
* Delete notification.
*/
public void notifyDelete() {
-
- if (mStat != null) {
- try {
- mjDeleteNbrTxt.setText(String.valueOf(mStat.getFileDeleteNbr()));
- } catch (Exception ex) {
- mCommonHandler.handleException(ex);
- }
- }
+ try {
+ mjDeleteNbrTxt.setText(String.valueOf(mStat.getFileDeleteNbr()));
+ }
+ catch(Exception ex) {
+ mCommonHandler.handleException(ex);
+ }
}
-
+
/**
* User login notification.
*/
public void notifyLogin() {
-
- if (mStat != null) {
- try {
- mjLoginNbrTxt.setText(String.valueOf(mStat.getLoginNbr()));
- mjAnonLoginNbrTxt.setText(String.valueOf(mStat.getAnonLoginNbr()));
- mjTotalLoginNbrTxt.setText(String.valueOf(mStat.getTotalLoginNbr()));
- mjTotalAnonLoginNbrTxt.setText(String.valueOf(mStat.getTotalAnonLoginNbr()));
- } catch (Exception ex) {
- mCommonHandler.handleException(ex);
- }
- }
+ try {
+ mjLoginNbrTxt.setText(String.valueOf(mStat.getLoginNbr()));
+ mjAnonLoginNbrTxt.setText(String.valueOf(mStat.getAnonLoginNbr()));
+ mjTotalLoginNbrTxt.setText(String.valueOf(mStat.getTotalLoginNbr()));
+ mjTotalAnonLoginNbrTxt.setText(String.valueOf(mStat.getTotalAnonLoginNbr()));
+ }
+ catch(Exception ex) {
+ mCommonHandler.handleException(ex);
+ }
}
-
+
/**
* User logout notification.
*/
public void notifyLogout() {
notifyLogin();
- }
-
+ }
+
/**
* Notify open/close connection
- */
+ */
public void notifyConnection() {
-
- if (mStat != null) {
- try {
- mjConNbrTxt.setText(String.valueOf(mStat.getConnectionNbr()));
- mjTotalConNbrTxt.setText(String.valueOf(mStat.getTotalConnectionNbr()));
- } catch (Exception ex) {
- mCommonHandler.handleException(ex);
- }
+ try {
+ mjConNbrTxt.setText(String.valueOf(mStat.getConnectionNbr()));
+ mjTotalConNbrTxt.setText(String.valueOf(mStat.getTotalConnectionNbr()));
+ }
+ catch(Exception ex) {
+ mCommonHandler.handleException(ex);
+ }
+ }
+
+ /**
+ * Notify file upload
+ */
+ public void notifyUpload(final String fl, final String sessId) {
+ FtpUser user = mCommonHandler.getUser(sessId);
+ if (user != null) {
+ mUploadModel.newEntry(fl, user);
+ }
+ }
+
+ /**
+ * Notify file download
+ */
+ public void notifyDownload(final String fl, final String sessId) {
+ FtpUser user = mCommonHandler.getUser(sessId);
+ if (user != null) {
+ mDownloadModel.newEntry(fl, user);
}
}
-
+
+ /**
+ * Notify file delete
+ */
+ public void notifyDelete(final String fl, final String sessId) {
+ FtpUser user = mCommonHandler.getUser(sessId);
+ if (user != null) {
+ mDeleteModel.newEntry(fl, user);
+ }
+ }
+
+
/**
* Load all the global statistics parameters
*/
public void reload() {
-
notifyUpload();
notifyDownload();
notifyDelete();
notifyLogin();
notifyConnection();
}
-
+
+
/**
* Close it.
*/
public void close() {
-
- try {
- mStat.setListener(null);
- } catch (RemoteException ex) {}
- }
-}
+ mListener.close();
+ mFileListener.close();
+ }
+
+}
\ No newline at end of file
1.7 +46 -34 jakarta-avalon-apps/ftpserver/src/java/org/apache/avalon/ftpserver/gui/FtpTreeModel.java
Index: FtpTreeModel.java
===================================================================
RCS file: /home/cvs/jakarta-avalon-apps/ftpserver/src/java/org/apache/avalon/ftpserver/gui/FtpTreeModel.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- FtpTreeModel.java 14 Dec 2001 01:22:03 -0000 1.6
+++ FtpTreeModel.java 6 Mar 2002 13:53:20 -0000 1.7
@@ -1,4 +1,3 @@
-
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
@@ -6,19 +5,16 @@
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
-package org.apache.avalon.ftpserver.gui;
+package org.apache.avalon.ftpserver.gui;
import java.util.Vector;
-
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeModel;
import javax.swing.event.TreeModelEvent;
import javax.swing.event.TreeModelListener;
-
-import org.apache.avalon.ftpserver.interfaces.FtpAdmin;
-
+import org.apache.avalon.ftpserver.remote.interfaces.RemoteHandlerInterface;
/**
* This is FTP user interface tree structure. Currently it is very simple.
@@ -26,22 +22,42 @@
* <pre>
* FTP
* |
- * +-- Users (User management)
+ * +-- User (User management)
* |
- * +-- Connection (Connection statistics)
+ * +-- Connection (Connection monitor)
* |
- * +-- Ip (IP restrictions)
+ * +-- IP (IP restriction)
+ * |
+ * +-- Upload (File upload statistics)
+ * |
+ * +-- Download (File download statistics)
+ * |
+ * +-- Delete (File deletion statistics)
* |
* +-- Statistics (Global statistics)
+ * |
+ * +-- About (Ftp server summary)
* </pre>
*
* @author <a href="mailto:rana_b@yahoo.com">Rana Bhattacharyya</a>
*/
-public class FtpTreeModel implements TreeModel {
-
+public
+class FtpTreeModel implements TreeModel {
+
private Vector mListenrList;
- public final static String[] CHILDREN = { "Users", "Connection", "IP", "Statistics" };
-
+
+ public final static String[] CHILDREN = {
+ "Users",
+ "Connection",
+ "IP",
+ "Upload",
+ "Download",
+ "Delete",
+ "Statistics",
+ "About"
+ };
+
+
/**
* create this tree model
*/
@@ -49,29 +65,28 @@
mListenrList = new Vector();
}
+
/**
* get root object
*/
public Object getRoot() {
- return FtpAdmin.DISPLAY_NAME;
+ return RemoteHandlerInterface.DISPLAY_NAME;
}
- /**
+ /**
* get child object
*/
public Object getChild(Object parent, int index) {
return CHILDREN[index];
- }
+ }
/**
* get child count
*/
public int getChildCount(Object parent) {
-
- if (parent.equals(FtpAdmin.DISPLAY_NAME)) {
+ if(parent.equals(RemoteHandlerInterface.DISPLAY_NAME)) {
return CHILDREN.length;
}
-
return 0;
}
@@ -79,31 +94,28 @@
* is a leaf or node
*/
public boolean isLeaf(Object node) {
- return !node.equals(FtpAdmin.DISPLAY_NAME);
+ return !node.equals(RemoteHandlerInterface.DISPLAY_NAME);
}
/**
* get child index
*/
public int getIndexOfChild(Object parent, Object child) {
-
- int childIdx = -1;
-
- for (int i = 0; i < CHILDREN.length; i++) {
- if (CHILDREN[i].equals(child)) {
- childIdx = i;
-
- break;
- }
- }
-
- return childIdx;
+ int childIdx = -1;
+ for(int i=0; i<CHILDREN.length; i++) {
+ if(CHILDREN[i].equals(child)) {
+ childIdx = i;
+ break;
+ }
+ }
+ return childIdx;
}
/**
* Object changed. In our case it is not possible - so ignore it.
*/
- public void valueForPathChanged(TreePath path, Object newValue) {}
+ public void valueForPathChanged(TreePath path, Object newValue) {
+ }
/**
* Add a listener
@@ -118,4 +130,4 @@
public void removeTreeModelListener(TreeModelListener l) {
mListenrList.remove(l);
}
-}
+}
\ No newline at end of file
1.10 +270 -292 jakarta-avalon-apps/ftpserver/src/java/org/apache/avalon/ftpserver/gui/FtpUserPanel.java
Index: FtpUserPanel.java
===================================================================
RCS file: /home/cvs/jakarta-avalon-apps/ftpserver/src/java/org/apache/avalon/ftpserver/gui/FtpUserPanel.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- FtpUserPanel.java 14 Dec 2001 01:22:03 -0000 1.9
+++ FtpUserPanel.java 6 Mar 2002 13:53:20 -0000 1.10
@@ -1,4 +1,3 @@
-
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
@@ -6,247 +5,242 @@
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
-package org.apache.avalon.ftpserver.gui;
-
-
-import java.util.*;
-
-import java.io.*;
-
-import java.awt.*;
-import java.awt.event.*;
+package org.apache.avalon.ftpserver.gui;
-import java.rmi.*;
-import java.rmi.registry.*;
+import java.util.Collections;
+import java.util.Random;
+import java.util.Iterator;
+import java.util.List;
+import java.awt.Color;
+import java.awt.Insets;
+import java.awt.FlowLayout;
+import java.awt.GridBagLayout;
+import java.awt.GridBagConstraints;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.event.*;
-
-import org.apache.avalon.ftpserver.interfaces.UserHandler;
-import org.apache.avalon.ftpserver.FtpUser;
+import org.apache.avalon.ftpserver.usermanager.User;
+import org.apache.avalon.ftpserver.remote.interfaces.UserManagerInterface;
/**
* Ftp server user admin panel. You can create, update,
* delete user using this panel.
- *
+ *
* @author <a href="mailto:rana_b@yahoo.com">Rana Bhattacharyya</a>
*/
-public class FtpUserPanel extends JPanel implements ActionListener {
+public
+class FtpUserPanel extends JPanel
+ implements ActionListener {
+ private final static Random PASS_GEN = new Random(System.currentTimeMillis());
+
private final static Object[] BYTE_RATES = {
- "No limit", new Integer(1200), new Integer(2400), new Integer(4800), new Integer(9600),
- new Integer(14400), new Integer(28800), new Integer(57600), new Integer(115200)
- };
- private final static Object[] IDLE_MINUTES = {
- "No limit", new Integer(1), new Integer(5), new Integer(15), new Integer(30),
- new Integer(60)
+ "No limit",
+ new Integer(1200),
+ new Integer(2400),
+ new Integer(4800),
+ new Integer(9600),
+ new Integer(14400),
+ new Integer(28800),
+ new Integer(57600),
+ new Integer(115200)
+ };
+
+ private final static Object[] IDLE_SECONDS = {
+ "No limit",
+ new Integer(60),
+ new Integer(300),
+ new Integer(900),
+ new Integer(1800),
+ new Integer(3600)
};
- private UserHandler mUserHandler;
+
+ private UserManagerInterface mUserManager;
+
private JComboBox mjUserLst;
private JTextField mjNameTxt;
+
private JPasswordField mjPasswordTxt;
private JPasswordField mjRetypePasswordTxt;
private JCheckBox mjPasswordChkBox;
+
private JTextField mjDirectoryTxt;
private JCheckBox mjEnabledChkBox;
private JCheckBox mjWriteChkBox;
private JComboBox mjIdleLst;
private JComboBox mjUploadLst;
private JComboBox mjDownloadLst;
- private JButton mjDeleteBtn;
- private JButton mjSaveBtn;
+
+ private FtpUserPanel mSelf;
+
private CommonHandler mCommonHandler;
-
- /**
- * Creates new panel.
+
+ /**
+ * Creates new panel.
*/
- public FtpUserPanel(CommonHandler commonHandler) throws RemoteException {
-
+ public FtpUserPanel(CommonHandler commonHandler) {
mCommonHandler = commonHandler;
- mUserHandler = mCommonHandler.getConfig().getUserHandler();
-
- initComponents();
- refresh();
+ mUserManager = mCommonHandler.getUserManager();
+ initComponents ();
+ refresh();
}
- /**
+ /**
* This method is called from within the constructor to
* initialize the form.
*/
private void initComponents() {
-
GridBagConstraints gc;
-
setLayout(new GridBagLayout());
-
+
// user list
mjUserLst = new JComboBox();
-
mjUserLst.addActionListener(this);
-
gc = new GridBagConstraints();
gc.gridx = 0;
gc.gridy = 0;
gc.gridwidth = 3;
- gc.insets = new Insets(5, 0, 0, 10);
-
+ gc.insets = new Insets(10, 0, 10, 10);
add(mjUserLst, gc);
-
+
// user name
JLabel jNameLab = new JLabel("Name");
-
jNameLab.setHorizontalAlignment(JLabel.RIGHT);
jNameLab.setForeground(Color.black);
-
gc = new GridBagConstraints();
gc.gridx = 0;
gc.gridy = 1;
gc.gridwidth = 1;
- gc.anchor = GridBagConstraints.EAST;
gc.insets = new Insets(5, 0, 0, 10);
-
+ gc.anchor = GridBagConstraints.EAST;
add(jNameLab, gc);
-
+
mjNameTxt = new JTextField();
-
mjNameTxt.setColumns(12);
-
gc = new GridBagConstraints();
gc.gridx = 1;
gc.gridy = 1;
gc.gridwidth = 2;
- gc.anchor = GridBagConstraints.WEST;
gc.insets = new Insets(5, 0, 0, 10);
-
+ gc.anchor = GridBagConstraints.WEST;
add(mjNameTxt, gc);
-
+
// password
JLabel jPasswordLab = new JLabel("Password");
-
jPasswordLab.setHorizontalAlignment(JLabel.RIGHT);
jPasswordLab.setForeground(Color.black);
-
gc = new GridBagConstraints();
gc.gridx = 0;
gc.gridy = 2;
gc.gridwidth = 1;
- gc.anchor = GridBagConstraints.EAST;
gc.insets = new Insets(5, 0, 0, 10);
-
- add(jPasswordLab, gc);
-
+ gc.anchor = GridBagConstraints.EAST;
+ add(jPasswordLab, gc);
+
mjPasswordTxt = new JPasswordField();
-
mjPasswordTxt.setColumns(12);
-
gc = new GridBagConstraints();
gc.gridx = 1;
gc.gridy = 2;
gc.gridwidth = 2;
- gc.anchor = GridBagConstraints.WEST;
gc.insets = new Insets(5, 0, 0, 10);
-
+ gc.anchor = GridBagConstraints.WEST;
add(mjPasswordTxt, gc);
+ JButton jGeneratePassBtn = new JButton("Generate");
+ jGeneratePassBtn.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent evt) {
+ generatePassword();
+ }
+ });
+ gc = new GridBagConstraints();
+ gc.gridx = 2;
+ gc.gridy = 2;
+ gc.gridwidth = 1;
+ gc.insets = new Insets(5, 0, 0, 10);
+ gc.anchor = GridBagConstraints.WEST;
+ add(jGeneratePassBtn, gc);
+
// retype password
JLabel jRetypePasswordLab = new JLabel("Retype Password");
-
jRetypePasswordLab.setHorizontalAlignment(JLabel.RIGHT);
jRetypePasswordLab.setForeground(Color.black);
-
gc = new GridBagConstraints();
gc.gridx = 0;
gc.gridy = 3;
gc.gridwidth = 1;
- gc.anchor = GridBagConstraints.EAST;
gc.insets = new Insets(5, 0, 0, 10);
-
+ gc.anchor = GridBagConstraints.EAST;
add(jRetypePasswordLab, gc);
-
+
mjRetypePasswordTxt = new JPasswordField();
-
mjRetypePasswordTxt.setColumns(12);
-
gc = new GridBagConstraints();
gc.gridx = 1;
gc.gridy = 3;
gc.gridwidth = 2;
- gc.anchor = GridBagConstraints.WEST;
gc.insets = new Insets(5, 0, 0, 10);
-
+ gc.anchor = GridBagConstraints.WEST;
add(mjRetypePasswordTxt, gc);
-
+
// set password
JLabel jSetPasswordLab = new JLabel("Set Password");
-
jSetPasswordLab.setHorizontalAlignment(JLabel.RIGHT);
jSetPasswordLab.setForeground(Color.black);
-
gc = new GridBagConstraints();
gc.gridx = 0;
gc.gridy = 4;
gc.gridwidth = 1;
- gc.anchor = GridBagConstraints.EAST;
gc.insets = new Insets(5, 0, 0, 10);
-
+ gc.anchor = GridBagConstraints.EAST;
add(jSetPasswordLab, gc);
-
+
mjPasswordChkBox = new JCheckBox();
-
mjPasswordChkBox.setHorizontalTextPosition(SwingConstants.LEFT);
-
gc = new GridBagConstraints();
gc.gridx = 1;
gc.gridy = 4;
gc.gridwidth = 2;
- gc.anchor = GridBagConstraints.WEST;
gc.insets = new Insets(5, 0, 0, 10);
-
+ gc.anchor = GridBagConstraints.WEST;
add(mjPasswordChkBox, gc);
// root directory
JLabel jDirectoryLab = new JLabel("Root Directory");
-
jDirectoryLab.setHorizontalAlignment(JLabel.RIGHT);
jDirectoryLab.setForeground(Color.black);
-
gc = new GridBagConstraints();
gc.gridx = 0;
gc.gridy = 5;
gc.gridwidth = 1;
gc.anchor = GridBagConstraints.EAST;
gc.insets = new Insets(5, 0, 0, 10);
-
add(jDirectoryLab, gc);
-
+
mjDirectoryTxt = new JTextField();
-
- mjDirectoryTxt.setColumns(18);
-
+ mjDirectoryTxt.setColumns(12);
gc = new GridBagConstraints();
gc.gridx = 1;
gc.gridy = 5;
gc.gridwidth = 1;
gc.anchor = GridBagConstraints.WEST;
gc.insets = new Insets(5, 0, 0, 10);
-
- add(mjDirectoryTxt, gc);
-
+ add(mjDirectoryTxt, gc);
+
// enable/disable
JLabel jEnabledLab = new JLabel("Enabled");
-
jEnabledLab.setHorizontalAlignment(JLabel.RIGHT);
jEnabledLab.setForeground(Color.black);
-
gc = new GridBagConstraints();
gc.gridx = 0;
gc.gridy = 6;
gc.gridwidth = 1;
- gc.anchor = GridBagConstraints.EAST;
gc.insets = new Insets(5, 0, 0, 10);
-
+ gc.anchor = GridBagConstraints.EAST;
add(jEnabledLab, gc);
mjEnabledChkBox = new JCheckBox();
@@ -254,254 +248,230 @@
gc.gridx = 1;
gc.gridy = 6;
gc.gridwidth = 2;
- gc.anchor = GridBagConstraints.WEST;
gc.insets = new Insets(5, 0, 0, 10);
-
+ gc.anchor = GridBagConstraints.WEST;
add(mjEnabledChkBox, gc);
-
+
// write permission
JLabel jWritePermLab = new JLabel("Write Permission");
-
jWritePermLab.setHorizontalAlignment(JLabel.RIGHT);
jWritePermLab.setForeground(Color.black);
-
gc = new GridBagConstraints();
gc.gridx = 0;
gc.gridy = 7;
gc.gridwidth = 1;
- gc.anchor = GridBagConstraints.EAST;
gc.insets = new Insets(5, 0, 0, 10);
-
+ gc.anchor = GridBagConstraints.EAST;
add(jWritePermLab, gc);
-
+
mjWriteChkBox = new JCheckBox();
gc = new GridBagConstraints();
gc.gridx = 1;
gc.gridy = 7;
gc.gridwidth = 2;
- gc.anchor = GridBagConstraints.WEST;
gc.insets = new Insets(5, 0, 0, 10);
-
+ gc.anchor = GridBagConstraints.WEST;
add(mjWriteChkBox, gc);
-
+
// idle time
- JLabel jIdleLab = new JLabel("Max. Idle Time (minutes)");
-
+ JLabel jIdleLab = new JLabel("Max. Idle Time (seconds)");
jIdleLab.setHorizontalAlignment(JLabel.RIGHT);
jIdleLab.setForeground(Color.black);
-
gc = new GridBagConstraints();
gc.gridx = 0;
gc.gridy = 8;
gc.gridwidth = 1;
- gc.anchor = GridBagConstraints.EAST;
gc.insets = new Insets(5, 0, 0, 10);
-
+ gc.anchor = GridBagConstraints.EAST;
add(jIdleLab, gc);
-
- mjIdleLst = new JComboBox(IDLE_MINUTES);
+
+ mjIdleLst = new JComboBox(IDLE_SECONDS);
+ mjIdleLst.setEditable(true);
gc = new GridBagConstraints();
gc.gridx = 1;
gc.gridy = 8;
gc.gridwidth = 2;
- gc.anchor = GridBagConstraints.WEST;
gc.insets = new Insets(5, 0, 0, 10);
-
+ gc.anchor = GridBagConstraints.WEST;
add(mjIdleLst, gc);
-
+
JPanel btnPane = new JPanel();
-
btnPane.setLayout(new FlowLayout(FlowLayout.CENTER));
-
+
// user upload limit
JLabel jUploadLab = new JLabel("Max. Upload (bytes/sec)");
-
jUploadLab.setHorizontalAlignment(JLabel.RIGHT);
jUploadLab.setForeground(Color.black);
-
gc = new GridBagConstraints();
gc.gridx = 0;
gc.gridy = 9;
gc.gridwidth = 1;
- gc.anchor = GridBagConstraints.EAST;
gc.insets = new Insets(5, 0, 0, 10);
-
+ gc.anchor = GridBagConstraints.EAST;
add(jUploadLab, gc);
-
+
mjUploadLst = new JComboBox(BYTE_RATES);
+ mjUploadLst.setEditable(true);
gc = new GridBagConstraints();
gc.gridx = 1;
gc.gridy = 9;
gc.gridwidth = 2;
- gc.anchor = GridBagConstraints.WEST;
gc.insets = new Insets(5, 0, 0, 10);
-
+ gc.anchor = GridBagConstraints.WEST;
add(mjUploadLst, gc);
-
+
// user download limit
JLabel jDownloadLab = new JLabel("Max. Download (bytes/sec)");
-
jDownloadLab.setHorizontalAlignment(JLabel.RIGHT);
jDownloadLab.setForeground(Color.black);
-
gc = new GridBagConstraints();
gc.gridx = 0;
gc.gridy = 10;
gc.gridwidth = 1;
- gc.anchor = GridBagConstraints.EAST;
gc.insets = new Insets(5, 0, 0, 10);
-
+ gc.anchor = GridBagConstraints.EAST;
add(jDownloadLab, gc);
-
+
mjDownloadLst = new JComboBox(BYTE_RATES);
+ mjDownloadLst.setEditable(true);
gc = new GridBagConstraints();
gc.gridx = 1;
gc.gridy = 10;
gc.gridwidth = 2;
- gc.anchor = GridBagConstraints.WEST;
gc.insets = new Insets(5, 0, 0, 10);
-
+ gc.anchor = GridBagConstraints.WEST;
add(mjDownloadLst, gc);
-
+
// save user
- mjSaveBtn = new JButton("Save");
-
- mjSaveBtn.addActionListener(new ActionListener() {
-
- public void actionPerformed(ActionEvent evt) {
- save(evt);
- }
+ JButton jSaveBtn = new JButton("Save");
+ jSaveBtn.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent evt) {
+ save();
+ }
});
- btnPane.add(mjSaveBtn);
-
+ btnPane.add(jSaveBtn);
+
// delete user
- mjDeleteBtn = new JButton("Delete");
-
- mjDeleteBtn.addActionListener(new ActionListener() {
-
- public void actionPerformed(ActionEvent evt) {
- delete(evt);
- }
+ JButton jDeleteBtn = new JButton("Delete");
+ jDeleteBtn.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent evt) {
+ delete();
+ }
});
- btnPane.add(mjDeleteBtn);
-
+ btnPane.add(jDeleteBtn);
+
+ // reload user data
+ JButton jReloadBtn = new JButton("Reload");
+ jReloadBtn.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent evt) {
+ refresh();
+ }
+ });
+ btnPane.add(jReloadBtn);
+
gc = new GridBagConstraints();
gc.gridx = 0;
gc.gridy = 11;
gc.gridwidth = 3;
gc.insets = new Insets(5, 0, 0, 10);
-
- add(btnPane, gc);
+ add(btnPane, gc);
}
-
+
+
/**
* Save the user object
*/
- private void save(ActionEvent evt) {
-
+ private void save() {
+
// check user name field
String userName = mjNameTxt.getText().trim();
-
- if (userName.equals("")) {
- GuiUtils.showErrorMessage(mCommonHandler.getTopComponent(),
- "Please enter an user name");
-
+ if(userName.equals("")) {
+ GuiUtils.showErrorMessage(mCommonHandler.getTopComponent(), "Please enter an user name");
return;
}
-
+
try {
- FtpUser user = new FtpUser(null, null, null);
-
+ User user = new User();
user.setName(userName);
-
- if (setPassword(user)) {
- user.getVirtualDirectory()
- .setRootDirectory(new File(mjDirectoryTxt.getText()).getCanonicalFile());
- user.setEnabled(mjEnabledChkBox.isSelected());
- user.getVirtualDirectory().setWritePermission(mjWriteChkBox.isSelected());
- user.setMaxIdleTime(getMaxIdleTime());
- user.setMaxUploadRate(getBytesTransferRate(mjUploadLst));
- user.setMaxDownloadRate(getBytesTransferRate(mjDownloadLst));
- mUserHandler.save(user);
- refresh();
+ if(setPassword(user)) {
+ user.getVirtualDirectory().setRootDirectory(mjDirectoryTxt.getText());
+ user.setEnabled(mjEnabledChkBox.isSelected());
+ user.getVirtualDirectory().setWritePermission(mjWriteChkBox.isSelected());
+ user.setMaxIdleTime(getMaxIdleTime());
+ user.setMaxUploadRate(getBytesTransferRate(mjUploadLst));
+ user.setMaxDownloadRate(getBytesTransferRate(mjDownloadLst));
+ mUserManager.save(user);
+ refresh();
}
- } catch (Exception ex) {
+ }
+ catch(Exception ex) {
mCommonHandler.handleException(ex);
}
}
-
+
+
/**
* Save the user object
*/
- private void delete(ActionEvent evt) {
-
+ private void delete() {
Object selVal = mjUserLst.getSelectedItem();
-
- if (selVal == null) {
+ if(selVal == null) {
return;
}
-
+
String userName = selVal.toString();
- boolean bConf = GuiUtils.getConfirmation(mCommonHandler.getTopComponent(),
- "Do you really want to delete user " + userName
- + "?");
-
- if (!bConf) {
+ boolean bConf = GuiUtils.getConfirmation(mCommonHandler.getTopComponent(), "Do you really want to delete user " + userName + "?");
+ if(!bConf) {
return;
}
-
try {
- mUserHandler.delete(userName);
+ mUserManager.delete(userName);
refresh();
- } catch (Exception ex) {
+ }
+ catch(Exception ex) {
mCommonHandler.handleException(ex);
}
}
-
+
/**
* Initialize user list.
*/
private void refresh() {
-
try {
mjUserLst.removeAllItems();
-
- java.util.List allUsers = mUserHandler.getAllUserNames();
-
- Collections.sort(allUsers);
-
- for (Iterator userIt = allUsers.iterator(); userIt.hasNext(); ) {
+ List allUsers = mUserManager.getAllUserNames();
+ for(Iterator userIt = allUsers.iterator(); userIt.hasNext(); ) {
mjUserLst.addItem(userIt.next());
}
- } catch (Exception ex) {
+ }
+ catch(Exception ex) {
mCommonHandler.handleException(ex);
}
}
+
+
/**
- * List selection changed.
+ * List selection changed.
*/
public void actionPerformed(ActionEvent e) {
-
Object selVal = mjUserLst.getSelectedItem();
-
try {
- if (selVal != null) {
+ if(selVal != null) {
String userName = selVal.toString();
- FtpUser thisUser = mUserHandler.getUserByName(userName);
-
+ User thisUser = mUserManager.getUserByName(userName);
populateFields(thisUser);
}
- } catch (Exception ex) {
+ }
+ catch(Exception ex) {
mCommonHandler.handleException(ex);
}
- }
-
+ }
+
/**
* Populate user data fields.
*/
- public void populateFields(FtpUser user) {
-
+ public void populateFields(User user) {
mjNameTxt.setText(user.getName());
mjPasswordTxt.setText("");
mjRetypePasswordTxt.setText("");
@@ -512,139 +482,147 @@
setIdleTimeCombo(user.getMaxIdleTime());
setByteRateCombo(mjUploadLst, user.getMaxUploadRate());
setByteRateCombo(mjDownloadLst, user.getMaxDownloadRate());
-
- // admin and anonymous users cannot be deleted
- if (user.getIsAnonymous() || user.getIsAdmin()) {
- mjDeleteBtn.setEnabled(false);
- } else {
- mjDeleteBtn.setEnabled(true);
+ }
+
+ /**
+ * Generate random password.
+ */
+ private void generatePassword() {
+ StringBuffer sb = new StringBuffer(8);
+ for(int i=0; i<8; i++) {
+ int charType = PASS_GEN.nextInt(3);
+ switch (charType) {
+
+ // number
+ case 0:
+ sb.append( (char)('0' + PASS_GEN.nextInt(10)) );
+ break;
+
+ // uppercase character
+ case 1:
+ sb.append( (char)('A' + PASS_GEN.nextInt(26)) );
+ break;
+
+ // lowercase character
+ case 2:
+ sb.append( (char)('a' + PASS_GEN.nextInt(26)) );
+ break;
+ }
}
+ String password = sb.toString();
+ GuiUtils.showInformationMessage(mSelf, "Generated password: " + password);
+ mjPasswordTxt.setText(password);
+ mjRetypePasswordTxt.setText(password);
+ mjPasswordChkBox.setSelected(true);
}
-
+
+
/**
* Set password if necessary.
*/
- private boolean setPassword(FtpUser usr) {
-
+ private boolean setPassword(User usr) {
+
try {
String userName = usr.getName();
- boolean bNewUser = !mUserHandler.doesExist(userName);
+ boolean bNewUser = !mUserManager.doesExist(userName);
boolean bPassSet = mjPasswordChkBox.isSelected();
String password = new String(mjPasswordTxt.getPassword());
- String repassword = new String(mjRetypePasswordTxt.getPassword());
-
- usr.setPassword(null);
-
- // anonymous user - password not required
- if (usr.getIsAnonymous()) {
- return true;
- }
-
- // new user - no password - error
- if (bNewUser && (!bPassSet)) {
- GuiUtils.showErrorMessage(mCommonHandler.getTopComponent(),
- "New user - password required");
-
+ String repassword = new String(mjRetypePasswordTxt.getPassword());
+
+ // new user
+ if( bNewUser && (!bPassSet) && (!usr.getIsAnonymous()) ) {
+ GuiUtils.showErrorMessage(mSelf, "New user - password required");
return false;
}
-
- // password set - two passwords are not same - error
- if (bPassSet && (!password.equals(repassword))) {
- GuiUtils.showErrorMessage(mCommonHandler.getTopComponent(),
- "Password entries are not equal");
-
+
+ // password set
+ if( bPassSet && (!password.equals(repassword)) && (!usr.getIsAnonymous()) ) {
+ GuiUtils.showErrorMessage(mSelf, "Password entries are not equal");
return false;
}
-
- // password set
- if (bPassSet) {
+
+ // set password if necessary
+ if(bPassSet && (!usr.getIsAnonymous())) {
usr.setPassword(password);
}
-
+ else {
+ usr.setPassword(null);
+ }
return true;
- } catch (Exception ex) {
+ }
+ catch(Exception ex) {
mCommonHandler.handleException(ex);
}
-
return false;
- }
-
+ }
+
/**
* Get max bytes/sec.
*/
private int getBytesTransferRate(JComboBox byteLst) {
-
int rate = 0;
- int byteInd = byteLst.getSelectedIndex();
-
- if (byteInd != 0) {
- rate = ((Integer) BYTE_RATES[byteInd]).intValue();
+ Object selObj = byteLst.getSelectedItem();
+ if (!selObj.equals(BYTE_RATES[0])) {
+ try {
+ rate = Integer.parseInt(selObj.toString());
+ }
+ catch(NumberFormatException ex) {
+ GuiUtils.showErrorMessage(mSelf, ex.getMessage());
+ }
}
-
+
return rate;
}
-
+
/**
* Get max idle time in sec.
*/
private int getMaxIdleTime() {
-
int sec = 0;
- int idleInd = mjIdleLst.getSelectedIndex();
-
- if (idleInd != 0) {
- sec = ((Integer) IDLE_MINUTES[idleInd]).intValue() * 60;
+ Object selObj = mjIdleLst.getSelectedItem();
+ if (!selObj.equals(IDLE_SECONDS[0])) {
+ try {
+ sec = Integer.parseInt(selObj.toString());
+ }
+ catch(NumberFormatException ex) {
+ GuiUtils.showErrorMessage(mSelf, ex.getMessage());
+ }
}
-
+
return sec;
}
-
+
/**
* Set byte transfer rate combo.
*/
private void setByteRateCombo(JComboBox combo, int rate) {
-
int index = 0;
-
- if (rate != 0) {
+ if(rate != 0) {
Integer currRate = new Integer(rate);
-
- for (int i = 1; i < BYTE_RATES.length; i++) {
- if (BYTE_RATES[i].equals(currRate)) {
+ for(int i=1; i<BYTE_RATES.length; i++) {
+ if(BYTE_RATES[i].equals(currRate)) {
index = i;
-
break;
}
}
}
-
combo.setSelectedIndex(index);
}
-
+
/**
* Set idle time combo.
*/
private void setIdleTimeCombo(int idle) {
-
- int index = 0;
-
- if (idle != 0) {
- Integer currIdle = new Integer(idle / 60);
-
- for (int i = 0; i < IDLE_MINUTES.length; i++) {
- if (IDLE_MINUTES[i].equals(currIdle)) {
- index = i;
-
- break;
- }
- }
+ Object selItem = new Integer(idle);
+ if (idle == 0){
+ selItem = IDLE_SECONDS[0];
}
-
- mjIdleLst.setSelectedIndex(index);
+ mjIdleLst.setSelectedItem(selItem);
}
-
+
/**
* Close all resources.
*/
- public void close() {}
-}
+ public void close() {
+ }
+}
\ No newline at end of file
1.6 +86 -63 jakarta-avalon-apps/ftpserver/src/java/org/apache/avalon/ftpserver/gui/GuiUtils.java
Index: GuiUtils.java
===================================================================
RCS file: /home/cvs/jakarta-avalon-apps/ftpserver/src/java/org/apache/avalon/ftpserver/gui/GuiUtils.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- GuiUtils.java 14 Dec 2001 01:22:03 -0000 1.5
+++ GuiUtils.java 6 Mar 2002 13:53:20 -0000 1.6
@@ -1,4 +1,3 @@
-
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
@@ -6,83 +5,109 @@
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
-package org.apache.avalon.ftpserver.gui;
-
-
-
-import java.util.*;
-
-import java.io.*;
-import java.net.*;
-
-import java.awt.*;
+package org.apache.avalon.ftpserver.gui;
-import javax.swing.*;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ByteArrayOutputStream;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Toolkit;
+import java.awt.Rectangle;
+import javax.swing.JFileChooser;
+import javax.swing.ImageIcon;
+import javax.swing.JWindow;
+import javax.swing.JPanel;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.SwingUtilities;
+import org.apache.avalon.ftpserver.util.IoUtils;
/**
* This is the GUI utility class.
- *
+ *
* @author <a href="mailto:rana_b@yahoo.com">Rana Bhattacharyya</a>
*/
-public class GuiUtils {
+public
+class GuiUtils {
- private static JFileChooser mDirChoose = null;
- private static JFileChooser mFileChoose = null;
- private static final GuiUtils SELF_REF = new GuiUtils();
+ private static JFileChooser mDirChoose = null;
+ private static JFileChooser mFileChoose = null;
+
+ private static final GuiUtils SELF_REF = new GuiUtils();
/**
* Create image icon.
*/
- public static ImageIcon createImageIcon(String imgFile) {
-
- URL imgUrl = SELF_REF.getClass().getClassLoader().getResource(imgFile);
-
- if (imgUrl == null) {
- return null;
+ public static ImageIcon createImageIcon(String imgResource) {
+ InputStream is = null;
+ ByteArrayOutputStream out = null;
+ try {
+ is = SELF_REF.getClass().getClassLoader().getResourceAsStream(imgResource);
+ if (is != null) {
+ out = new ByteArrayOutputStream();
+ byte buff[] = new byte[1024];
+ int count = 0;
+ while ( -1 != (count = is.read(buff)) ) {
+ out.write(buff, 0, count);
+ }
+ buff = out.toByteArray();
+ if (buff.length != 0){
+ return new ImageIcon(buff);
+ }
+ }
+ }
+ catch(IOException ex) {
+ }
+ finally {
+ IoUtils.close(is);
+ IoUtils.close(out);
}
-
- return new ImageIcon(imgUrl);
+ return null;
}
+
/**
* Create splash window. Returns null if image not found.
*/
- public static JWindow createSplashWindow(String imgFile) {
-
- ImageIcon icon = createImageIcon(imgFile);
+ public static JWindow createSplashWindow(String imgResource) {
+ ImageIcon icon = createImageIcon(imgResource);
if (icon == null) {
return null;
}
JLabel lab = new JLabel();
-
lab.setIcon(icon);
Dimension iDim = new Dimension(icon.getIconWidth(), icon.getIconHeight());
- JWindow splashWin = new JWindow();
+ JWindow splashWin = new JWindow();
splashWin.getContentPane().add(lab);
splashWin.setSize(iDim);
setLocation(splashWin);
-
return splashWin;
}
+
+
/**
* Display error message.
*/
public static void showErrorMessage(Component parent, String str) {
- JOptionPane.showMessageDialog(parent, str, "Error!", JOptionPane.ERROR_MESSAGE);
+ JOptionPane.showMessageDialog(parent, str, "Error!",
+ JOptionPane.ERROR_MESSAGE);
}
+
/**
* Display warning message.
*/
public static void showWarningMessage(Component parent, String str) {
- JOptionPane.showMessageDialog(parent, str, "Warning!", JOptionPane.WARNING_MESSAGE);
+ JOptionPane.showMessageDialog(parent, str, "Warning!",
+ JOptionPane.WARNING_MESSAGE);
}
/**
@@ -90,21 +115,26 @@
*/
public static void showInformationMessage(Component parent, String str) {
JOptionPane.showMessageDialog(parent, str, "Information!",
- JOptionPane.INFORMATION_MESSAGE);
+ JOptionPane.INFORMATION_MESSAGE );
}
+
+
/**
* Get confirmation.
*/
public static boolean getConfirmation(Component parent, String str) {
- int res = JOptionPane.showConfirmDialog(parent, str, "Confirmation",
- JOptionPane.YES_NO_OPTION,
- JOptionPane.QUESTION_MESSAGE);
-
- return (res == JOptionPane.YES_OPTION);
+ int res = JOptionPane.showConfirmDialog(parent,
+ str,
+ "Confirmation",
+ JOptionPane.YES_NO_OPTION,
+ JOptionPane.QUESTION_MESSAGE
+ );
+ return(res == JOptionPane.YES_OPTION);
}
+
/**
* Get file name.
*/
@@ -112,7 +142,6 @@
if (mFileChoose == null) {
mFileChoose = new JFileChooser();
-
mFileChoose.setFileSelectionMode(JFileChooser.FILES_ONLY);
}
@@ -127,12 +156,11 @@
/**
* Get directory name.
- */
+ */
public static String getDirName(Component parent) {
if (mDirChoose == null) {
mDirChoose = new JFileChooser();
-
mDirChoose.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
}
@@ -153,7 +181,6 @@
if (mDirChoose != null) {
SwingUtilities.updateComponentTreeUI(mDirChoose);
}
-
if (mFileChoose != null) {
SwingUtilities.updateComponentTreeUI(mFileChoose);
}
@@ -163,34 +190,30 @@
* Position properly - center.
*/
public static void setLocation(Component comp) {
-
Dimension cDim = comp.getSize();
Dimension wDim = Toolkit.getDefaultToolkit().getScreenSize();
-
- comp.setLocation((wDim.width - cDim.width) / 2, (wDim.height - cDim.height) / 2);
- }
-
- /**
- * Position with respect to the parent component.
- */
- public static void setLocation(Component comp, Component parent) {
-
- Dimension cDim = comp.getSize();
- Rectangle pRect = parent.getBounds();
- int x = pRect.x + (pRect.width - cDim.width) / 2;
- int y = pRect.y + (pRect.height - cDim.height) / 2;
-
- comp.setLocation(x, y);
+ comp.setLocation((wDim.width - cDim.width)/2, (wDim.height - cDim.height)/2);
}
-
+
+ /**
+ * Position with respect to the parent component.
+ */
+ public static void setLocation(Component comp, Component parent) {
+ Dimension cDim = comp.getSize();
+ Rectangle pRect = parent.getBounds();
+ int x = pRect.x + (pRect.width - cDim.width)/2;
+ int y = pRect.y + (pRect.height - cDim.height)/2;
+ comp.setLocation(x, y);
+ }
+
/**
* Display a new panel. First removes all children, then add.
*/
- public static void showNewPanel(JPanel parent, JPanel child) {
-
+ public static void showNewPanel(JPanel parent, JPanel child) {
parent.removeAll();
parent.add(child);
parent.validate();
parent.repaint();
}
-}
+
+}
\ No newline at end of file
1.1 jakarta-avalon-apps/ftpserver/src/java/org/apache/avalon/ftpserver/gui/about.html
Index: about.html
===================================================================
<html>
<head>
<meta http-equiv="Content-Language" content="en-us">
<title>FTP Server</title>
</head>
<body bgcolor="#FFFFFF">
<h1 align="center"><font size="6" face="Arial" color="#663300"><i>FTP Server</i></font></h1>
<p align="center"><font face="Courier" color="#663300"><a href="http://www.apache.org">http://www.apache.org</a></font></p>
<p align="left"><font face="Arial">This is a fully featured FTP server written
in Java. It is an implementation of <a href="http://www.w3.org/Protocols/rfc959/">RFC
959</a>. The design is really modular and the server is fully customizable.
Using it you can share files over the Internet.</font></p>
<p align="left"><b><font face="Arial">Notes:</font></b></p>
<ul>
<li><font face="Arial">100% pure Java, open source resumable FTP server!!!</font></li>
<li><font face="Arial">Multi platform support. It is based on <a href="http://jakarta.apache.org/avalon">Apache Avalon</a> framework.</font></li>
<li><font face="Arial">User virtual directory, write permission, idle time-out and upload/download bandwidth limitation support.</font></li>
<li><font face="Arial">You can monitor all the user activities.</font></li>
<li><font face="Arial">Anonymous login support.</font></li>
<li><font face="Arial">Handles both ASCII and binary data transfers.</font></li>
<li><font face="Arial">IP restriction support. You can use a limited set of regular expressions (*?[^-]) to specify the banned IPs.</font></li>
<li><font face="Arial">The server reloads the user data at a regular interval if necessary.</font></li>
<li><font face="Arial">Database and LDAP can be used to store user data.</font></li>
<li><font face="Arial">Default users <i>admin/admin</i> and <i>anonymous</i> will be created by the server when you start it for the first time.</font></li>
<li><font face="Arial">New user managers can be added very easily by replacing user manager component.</font></li>
<li><font face="Arial">You can encrypt the password in property file based user manager by specifying user manager encrypt key. The encryption algorithm is MD5.</font></li>
<li><font face="Arial">Database based user manager will try to create the user table FTP_USER if not found. You can create it manually by executing apps/ftp/conf/ftp-db.sql file. I have tested it using MySQL and Oracle database.</font></li>
<li><font face="Arial">If you want to use LDAP to store and authenticate user, you need to change the LDAP schema and the config file. The schema file is ftp-db.ldif. I have tested it using Netscape LDAP (version 4.1).</font></li>
<li><font face="Arial">You can start remote admin GUI by executing <code>java -jar ftp-admin.jar</code>.</font></li>
<li><font face="Arial">Tested with different FTP clients like
<a href="http://www.microsoft.com/windows/ie/">Internet Explorer</a>,
<a href="http://www.netscape.com/">Netscape Navigator</a>,
<a href="http://www.globalscape.com/">CuteFTP</a>,
<a href="http://www.smartftp.com/">SmartFTP</a>,
<a href="http://www.ipswitch.com/">WsFtp</a>,
<a href="http://stud.fh-heilbronn.de/~jdebis/leechftp/">LeechFTP</a> etc.</font></li>
<li><font face="Arial" color="red">If you are using property file based user manager, make sure that the user property file is not accesible by the FTP users.
Otherwise it will be a security problem. Keep it below the user virtual root directory.</font></li>
</ul>
</body>
</html>
1.1 jakarta-avalon-apps/ftpserver/src/java/org/apache/avalon/ftpserver/gui/FtpAboutPanel.java
Index: FtpAboutPanel.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
package org.apache.avalon.ftpserver.gui;
import java.io.InputStream;
import java.io.IOException;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JScrollPane;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import javax.swing.text.html.HTMLFrameHyperlinkEvent;
import javax.swing.text.html.HTMLDocument;
import org.apache.avalon.ftpserver.util.IoUtils;
/**
* Displays <a href="about.html">about.html</a> page.
*
* @author <a href="mailto:rana_b@yahoo.com">Rana Bhattacharyya</a>
*/
public
class FtpAboutPanel extends JPanel implements HyperlinkListener {
public final static String ABOUT_PAGE = "org/apache/avalon/ftpserver/gui/about.html";
private JEditorPane mjEditorPane = null;
/**
* Constructor.
*/
public FtpAboutPanel() {
initComponents();
}
/**
* Initialize GUI components.
*/
private void initComponents() {
setLayout(new BorderLayout());
mjEditorPane = new JEditorPane();
mjEditorPane.setEditable(false);
mjEditorPane.setContentType("text/html");
goHome();
mjEditorPane.addHyperlinkListener(this);
JScrollPane editorScrollPane = new JScrollPane(mjEditorPane);
editorScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
editorScrollPane.setPreferredSize(new Dimension(480, 340));
add(editorScrollPane, BorderLayout.CENTER);
JPanel bottomPane = new JPanel();
bottomPane.setLayout(new FlowLayout(FlowLayout.CENTER));
JButton homeButton = new JButton("Home");
homeButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
goHome();
}
});
bottomPane.add(homeButton);
add(bottomPane, BorderLayout.SOUTH);
}
/**
* Handle user mouse click.
*/
public void hyperlinkUpdate(HyperlinkEvent e) {
try {
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
JEditorPane pane = (JEditorPane) e.getSource();
if (e instanceof HTMLFrameHyperlinkEvent) {
HTMLFrameHyperlinkEvent evt = (HTMLFrameHyperlinkEvent)e;
HTMLDocument doc = (HTMLDocument)pane.getDocument();
doc.processHTMLFrameHyperlinkEvent(evt);
}
else {
pane.setPage(e.getURL());
}
}
}
catch(Throwable th) {
}
}
/**
* Display about page
*/
private void goHome() {
InputStream is = null;
try {
is = getClass().getClassLoader().getResourceAsStream(ABOUT_PAGE);
if (is != null) {
mjEditorPane.read(is, null);
}
}
catch(IOException ex) {
}
finally {
IoUtils.close(is);
}
}
/**
* Close panel - does nothing
*/
public void close() {
}
}
1.9 +164 -88 jakarta-avalon-apps/ftpserver/src/java/org/apache/avalon/ftpserver/gui/FtpAdmin.java
1.1 jakarta-avalon-apps/ftpserver/src/java/org/apache/avalon/ftpserver/gui/FtpFilePanel.java
Index: FtpFilePanel.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
package org.apache.avalon.ftpserver.gui;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
* This panel displays all the logged in users.
*/
public
class FtpFilePanel extends JPanel {
private FtpFileTableModel mModel;
private FtpFilePanel mSelf;
private String mstHeader;
/**
* Instantiate login panel.
*/
public FtpFilePanel(FtpFileTableModel model, String header) {
mSelf = this;
mModel = model;
mstHeader = header;
initComponents();
}
/**
* Initialize UI components
*/
private void initComponents() {
setLayout(new BorderLayout());
JPanel topPane = new JPanel();
JLabel headerLab = new JLabel(mstHeader);
headerLab.setForeground(Color.black);
topPane.add(headerLab);
add(topPane, BorderLayout.NORTH);
JTable fileTable = new JTable(mModel);
fileTable.setPreferredScrollableViewportSize(new Dimension(470, 300));
fileTable.setColumnSelectionAllowed(false);
JScrollPane scrollPane = new JScrollPane(fileTable,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
add(scrollPane, BorderLayout.CENTER);
// button
JPanel bottomPanel = new JPanel();
JButton jResetBtn = new JButton("Clear");
bottomPanel.add(jResetBtn);
add(bottomPanel, BorderLayout.SOUTH);
// event handler
jResetBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
mModel.reset();
}
});
}
/**
* Refresh window.
*/
public void refresh() {
mModel.reset();
}
/**
* Close panel
*/
public void close() {
mModel.close();
}
}
1.1 jakarta-avalon-apps/ftpserver/src/java/org/apache/avalon/ftpserver/gui/FtpFileTableModel.java
Index: FtpFileTableModel.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
package org.apache.avalon.ftpserver.gui;
import java.util.Date;
import java.util.Vector;
import java.text.SimpleDateFormat;
import javax.swing.table.AbstractTableModel;
import org.apache.avalon.ftpserver.FtpUser;
/**
* This table model tracks user file related activities.
*
* @author <a href="mailto:rana_b@yahoo.com">Rana Bhattacharyya</a>.
*/
public
class FtpFileTableModel extends AbstractTableModel {
private final static SimpleDateFormat DATE_FMT = new SimpleDateFormat("MM/dd HH:mm:ss");
private final static String[] COL_NAMES = {"File",
"User",
"Time"};
private Vector mEntryList = new Vector();
/**
* Reload the model.
*/
public void reset() {
mEntryList.clear();
fireTableDataChanged();
}
/**
* Get column class - always string
*/
public Class getColumnClass(int index) {
return String.class;
}
/**
* Get column count.
*/
public int getColumnCount() {
return COL_NAMES.length;
}
/**
* Get column name.
*/
public String getColumnName(int index) {
return COL_NAMES[index];
}
/**
* Get row count.
*/
public int getRowCount() {
return mEntryList.size();
}
/**
* Is cell editable - currently false.
*/
public boolean isCellEditable(int row, int col) {
return true;
}
/**
* Set value at - dummy method
*/
public void setValueAt(Object val, int row, int col) {
}
/**
* Get value at.
*/
public Object getValueAt(int row, int col) {
String retVal = "";
TableEntry entry = null;
try {
entry = (TableEntry)mEntryList.get(row);
}
catch(Exception ex) {
}
if (entry == null) {
return retVal;
}
switch(col) {
case 0:
retVal = entry.fileName;
break;
case 1:
retVal = entry.userName;
break;
case 2:
retVal = entry.date;
break;
}
return retVal;
}
/**
* Find column index.
*/
public int findColumn(String columnName) {
int index = -1;
for(int i=COL_NAMES.length; --i>=0; ) {
if (COL_NAMES[i].equals(columnName)) {
index = i;
break;
}
}
return index;
}
/**
* Add a new user
*/
public void newEntry(String file, FtpUser user) {
TableEntry entry = new TableEntry();
entry.fileName = file;
entry.userName = user.getName();
entry.date = DATE_FMT.format(new Date());
int sz = 0;
synchronized(mEntryList) {
mEntryList.add(entry);
sz = mEntryList.size();
}
fireTableRowsInserted(sz, sz);
}
/**
* Remove all entries
*/
public void close() {
mEntryList.clear();
}
//////////////////////////////////////////////////////////
///////////////////////list entry ///////////////////////
public class TableEntry {
String fileName;
String userName;
String date;
}
}
1.1 jakarta-avalon-apps/ftpserver/src/java/org/apache/avalon/ftpserver/gui/FtpSpyFrame.java
Index: FtpSpyFrame.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
package org.apache.avalon.ftpserver.gui;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import org.apache.avalon.ftpserver.FtpUser;
/**
* This frame holds all connection spy frames
*/
public
class FtpSpyFrame extends JFrame {
private final static ImageIcon ICON_IMG = GuiUtils.createImageIcon("org/apache/avalon/ftpserver/gui/spy.gif");
private CommonHandler mCommonHandler = null;
private JTabbedPane mjTabbedPane = null;
private JButton mjClearButton = null;
private JButton mjCloseButton = null;
private JButton mjDisconnectButton = null;
private FtpSpyFrame mSelf = null;
/**
* Constructor - create empty tabbed frame
*/
public FtpSpyFrame(CommonHandler commonHandler) {
mSelf = this;
mCommonHandler = commonHandler;
initComponents();
}
/**
* Initialize all components
*/
private void initComponents() {
getContentPane().setLayout(new BorderLayout());
mjTabbedPane = new JTabbedPane();
getContentPane().add(mjTabbedPane, BorderLayout.CENTER);
JPanel bottomPane = new JPanel();
bottomPane.setLayout(new FlowLayout(FlowLayout.CENTER));
mjClearButton = new JButton("Clear");
bottomPane.add(mjClearButton);
mjClearButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
clearLog();
}
});
mjCloseButton = new JButton("Close");
bottomPane.add(mjCloseButton);
mjCloseButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
closePane();
}
});
mjDisconnectButton = new JButton("Disconnect");
bottomPane.add(mjDisconnectButton);
mjDisconnectButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
disconnectUser();
}
});
getContentPane().add(bottomPane, BorderLayout.SOUTH);
setTitle("Spy User");
if (ICON_IMG != null) {
setIconImage(ICON_IMG.getImage());
}
setSize(new Dimension(500, 400));
GuiUtils.setLocation(this);
}
/*
* Handle window closing event.
*/
protected void processWindowEvent(WindowEvent e) {
int id = e.getID();
if (id == WindowEvent.WINDOW_CLOSING) {
close();
} else {
super.processWindowEvent(e);
}
}
/**
* Close window
*/
public void close() {
int tabCount = mjTabbedPane.getTabCount();
for(int i=0; i<tabCount; i++) {
SpyPanel spyPane = (SpyPanel)mjTabbedPane.getComponentAt(i);
spyPane.closePane();
}
mjTabbedPane.removeAll();
setVisible(false);
}
/**
* Clear user log
*/
private void clearLog() {
SpyPanel spyPane = (SpyPanel)mjTabbedPane.getSelectedComponent();
if (spyPane != null) {
spyPane.clearLog();
}
}
/**
* Close connection spy panel
*/
private void closePane() {
SpyPanel spyPane = (SpyPanel)mjTabbedPane.getSelectedComponent();
if (spyPane != null) {
spyPane.closePane();
mjTabbedPane.remove(spyPane);
}
}
/**
* Disconnected user connection
*/
private void disconnectUser() {
SpyPanel spyPane = (SpyPanel)mjTabbedPane.getSelectedComponent();
if (spyPane == null) {
return;
}
boolean bConf = GuiUtils.getConfirmation(this, "Do you want to close the connection?");
if(bConf) {
spyPane.disconnect();
}
}
/**
* Monitor connection
*/
public void monitorConnection(FtpUser user) {
String userName = getName(user);
// don't add another tab if already being monitored
int tabCount = mjTabbedPane.getTabCount();
for(int i=0; i<tabCount; i++) {
SpyPanel spyPane = (SpyPanel)mjTabbedPane.getComponentAt(i);
FtpUser tabUser = spyPane.getUser();
if (tabUser.equals(user)) {
mjTabbedPane.setTitleAt(i, userName);
mjTabbedPane.setSelectedIndex(i);
return;
}
}
// add new tab
try {
SpyPanel spyPane = new SpyPanel(mCommonHandler, user);
mjTabbedPane.add(userName, spyPane);
mjTabbedPane.setSelectedComponent(spyPane);
}
catch(Exception ex) {
mCommonHandler.handleException(ex);
}
}
/**
* Get name
*/
private String getName(FtpUser user) {
String name = "";
if (user != null) {
name = user.getName();
if (name == null) {
name = "UNKNOWN";
}
}
return name;
}
}
1.1 jakarta-avalon-apps/ftpserver/src/java/org/apache/avalon/ftpserver/gui/SpyPanel.java
Index: SpyPanel.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
package org.apache.avalon.ftpserver.gui;
import java.rmi.RemoteException;
import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import org.apache.avalon.ftpserver.FtpUser;
import org.apache.avalon.ftpserver.remote.interfaces.SpyConnectionInterface;
import org.apache.avalon.ftpserver.gui.remote.SpyConnectionAdapter;
import org.apache.avalon.ftpserver.gui.GuiUtils;
/**
* This panel is used to monitor user activity.
*
* @author <a href="mailto:rana_b@yahoo.com">Rana Bhattacharyya</a>
*/
public
class SpyPanel extends JPanel implements SpyConnectionInterface {
private JTextArea mLogTxt = null;
private SpyConnectionAdapter mSpyAdapter = null;
private CommonHandler mCommonHandler = null;
private FtpUser mUser = null;
/**
* Instantiate this dialog box
*/
public SpyPanel(CommonHandler commonHandler, FtpUser user) throws RemoteException {
mUser = user;
mCommonHandler = commonHandler;
initComponents();
mSpyAdapter = new SpyConnectionAdapter(mCommonHandler.getConnectionService(), mUser.getSessionId(), this);
}
/**
* Initialize the UI components
*/
private void initComponents() throws RemoteException {
setLayout(new BorderLayout());
mLogTxt = new JTextArea();
mLogTxt.setEditable(false);
JScrollPane txtPane = new JScrollPane(mLogTxt,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
add(txtPane, BorderLayout.CENTER);
}
/**
* Get user
*/
public FtpUser getUser() {
return mUser;
}
/**
* Write message
*/
public void write(String msg) {
mLogTxt.append(msg);
}
/**
* Clear log messages
*/
public void clearLog() {
mLogTxt.setText("");
}
/**
* Close pane
*/
public void closePane() {
mSpyAdapter.close();
mLogTxt.setText("");
}
/**
* Disconnect user
*/
public void disconnect() {
try {
mSpyAdapter.close();
mCommonHandler.getConnectionService().closeConnection(mUser.getSessionId());
}
catch(Exception ex) {
mCommonHandler.handleException(ex);
}
}
}
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>