/*
* Copyright 2012 jMethods, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.myjavaworld.jftp;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.util.ResourceBundle;
import javax.swing.KeyStroke;
import javax.swing.event.MenuEvent;
import javax.swing.event.MenuListener;
import com.myjavaworld.ftp.RemoteFile;
import com.myjavaworld.gui.GUIUtil;
import com.myjavaworld.gui.MMenu;
import com.myjavaworld.gui.MMenuItem;
import com.myjavaworld.jftp.actions.AbortAction;
import com.myjavaworld.jftp.actions.ConnectAction;
import com.myjavaworld.jftp.actions.DisconnectAction;
import com.myjavaworld.jftp.actions.DownloadAction;
import com.myjavaworld.jftp.actions.DownloadAndUnzipAction;
import com.myjavaworld.jftp.actions.DownloadAsAction;
import com.myjavaworld.jftp.actions.NewSessionAction;
import com.myjavaworld.jftp.actions.ReconnectAction;
import com.myjavaworld.jftp.actions.UploadAction;
import com.myjavaworld.jftp.actions.UploadAsAction;
import com.myjavaworld.jftp.actions.ZipAndUploadAction;
import com.myjavaworld.util.ResourceLoader;
import com.myjavaworld.util.SystemUtil;
/**
* FTP Menu
*
* @author Sai Pullabhotla, psai [at] jMethods [dot] com
* @version 2.0
*
*/
public class FTPMenu extends MMenu implements MenuListener {
private static final ResourceBundle resources = ResourceLoader
.getBundle("com.myjavaworld.jftp.FTPMenu");
private JFTP jftp = null;
private MMenuItem miNewSession = null;
private MMenuItem miCloseSession = null;
private MMenuItem miConnect = null;
private MMenuItem miDisconnect = null;
private MMenuItem miReconnect = null;
private MMenuItem miDownload1 = null;
private MMenuItem miDownloadAs1 = null;
private MMenuItem miDownloadAndUnzip1 = null;
private MMenuItem miUpload1 = null;
private MMenuItem miUploadAs1 = null;
private MMenuItem miZipAndUpload1 = null;
private MMenuItem miAbort = null;
private MMenuItem miExit = null;
public FTPMenu(JFTP jftp) {
super();
this.jftp = jftp;
setText(resources.getString("text.ftp"));
setMnemonic(resources.getString("mnemonic.ftp"),
resources.getString("mnemonicIndex.ftp"));
prepareMenuItems();
addMenuListener(this);
}
private void prepareMenuItems() {
miNewSession = new MMenuItem();
miNewSession.setText(resources.getString("text.newSession"));
miNewSession.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,
GUIUtil.ACCELERATOR_MASK));
miNewSession.setMnemonic(resources.getString("mnemonic.newSession"),
resources.getString("mnemonicIndex.newSession"));
miNewSession.addActionListener(NewSessionAction.getInstance(jftp));
add(miNewSession);
miCloseSession = new MMenuItem(resources.getString("text.closeSession"));
miCloseSession.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,
GUIUtil.ACCELERATOR_MASK + InputEvent.SHIFT_MASK));
miCloseSession.setMnemonic(
resources.getString("mnemonic.closeSession"),
resources.getString("mnemonicIndex.closeSession"));
miCloseSession.setActionCommand("cmd.closeSession");
miCloseSession.addActionListener(jftp);
add(miCloseSession);
addSeparator();
miConnect = new MMenuItem();
miConnect.setText(resources.getString("text.connect"));
miConnect.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F3, 0));
miConnect.setMnemonic(resources.getString("mnemonic.connect"),
resources.getString("mnemonicIndex.connect"));
miConnect.addActionListener(ConnectAction.getInstance(jftp));
add(miConnect);
miDisconnect = new MMenuItem();
miDisconnect.setText(resources.getString("text.disconnect"));
miDisconnect.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4, 0));
miDisconnect.setMnemonic(resources.getString("mnemonic.disconnect"),
resources.getString("mnemonicIndex.disconnect"));
miDisconnect.addActionListener(DisconnectAction.getInstance(jftp));
add(miDisconnect);
miReconnect = new MMenuItem();
miReconnect.setText(resources.getString("text.reconnect"));
miReconnect.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F3,
GUIUtil.ACCELERATOR_MASK));
miReconnect.setMnemonic(resources.getString("mnemonic.reconnect"),
resources.getString("mnemonicIndex.reconnect"));
miReconnect.addActionListener(ReconnectAction.getInstance(jftp));
add(miReconnect);
addSeparator();
miDownload1 = new MMenuItem();
miDownload1.setText(resources.getString("text.download"));
miDownload1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F7, 0));
miDownload1.setMnemonic(resources.getString("mnemonic.download"),
resources.getString("mnemonicIndex.download"));
miDownload1.addActionListener(DownloadAction.getInstance(jftp));
add(miDownload1);
miDownloadAs1 = new MMenuItem(resources.getString("text.downloadAs"));
miDownloadAs1.setActionCommand("cmd.downloadAs");
miDownloadAs1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F7,
GUIUtil.ACCELERATOR_MASK));
miDownloadAs1.setMnemonic(resources.getString("mnemonic.downloadAs"),
resources.getString("mnemonicIndex.downloadAs"));
miDownloadAs1.addActionListener(DownloadAsAction.getInstance(jftp));
add(miDownloadAs1);
miDownloadAndUnzip1 = new MMenuItem(
resources.getString("text.downloadAndUnzip"));
miDownloadAndUnzip1.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_F7, GUIUtil.ACCELERATOR_MASK
+ InputEvent.SHIFT_MASK));
miDownloadAndUnzip1.setMnemonic(
resources.getString("mnemonic.downloadAndUnzip"),
resources.getString("mnemonicIndex.downloadAndUnzip"));
miDownloadAndUnzip1.addActionListener(DownloadAndUnzipAction
.getInstance(jftp));
add(miDownloadAndUnzip1);
addSeparator();
miUpload1 = new MMenuItem();
miUpload1.setText(resources.getString("text.upload"));
miUpload1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F9, 0));
miUpload1.setMnemonic(resources.getString("mnemonic.upload"),
resources.getString("mnemonicIndex.upload"));
miUpload1.addActionListener(UploadAction.getInstance(jftp));
add(miUpload1);
miUploadAs1 = new MMenuItem();
miUploadAs1.setText(resources.getString("text.uploadAs"));
miUploadAs1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F9,
GUIUtil.ACCELERATOR_MASK));
miUploadAs1.setMnemonic(resources.getString("mnemonic.uploadAs"),
resources.getString("mnemonicIndex.uploadAs"));
miUploadAs1.addActionListener(UploadAsAction.getInstance(jftp));
add(miUploadAs1);
miZipAndUpload1 = new MMenuItem();
miZipAndUpload1.setText(resources.getString("text.zipAndUpload"));
miZipAndUpload1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F9,
GUIUtil.ACCELERATOR_MASK + InputEvent.SHIFT_MASK));
miZipAndUpload1.setMnemonic(
resources.getString("mnemonic.zipAndUpload"),
resources.getString("mnemonicIndex.zipAndUpload"));
miZipAndUpload1.addActionListener(ZipAndUploadAction.getInstance(jftp));
add(miZipAndUpload1);
addSeparator();
miAbort = new MMenuItem();
miAbort.setText(resources.getString("text.abort"));
miAbort.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F12, 0));
miAbort.setMnemonic(resources.getString("mnemonic.abort"),
resources.getString("mnemonicIndex.abort"));
miAbort.addActionListener(AbortAction.getInstance(jftp));
add(miAbort);
miExit = new MMenuItem(resources.getString("text.exit"));
miExit.setActionCommand("cmd.exit");
miExit.setMnemonic(resources.getString("mnemonic.exit"),
resources.getString("mnemonicIndex.exit"));
miExit.addActionListener(jftp);
if (!SystemUtil.isMac()) {
addSeparator();
add(miExit);
}
}
public void menuSelected(MenuEvent e) {
FTPSession session = jftp.getCurrentSession();
boolean nullSession = session == null;
boolean connected = !nullSession && session.isConnected();
int selectionCount1 = 0;
boolean isFile1 = false;
if (!nullSession) {
selectionCount1 = session.getLocalFileSelectionCount();
if (selectionCount1 == 1) {
LocalFile selectedFile = session.getSelectedLocalFile();
isFile1 = selectedFile.isFile();
}
}
int selectionCount2 = 0;
if (connected) {
selectionCount2 = session.getRemoteFileSelectionCount();
}
boolean isFile2 = false;
RemoteFile selectedFile2 = null;
if (selectionCount2 == 1) {
selectedFile2 = session.getSelectedRemoteFile();
isFile2 = selectedFile2.isFile();
}
miCloseSession.setEnabled(!nullSession);
miConnect.setEnabled(!nullSession);
miDisconnect.setEnabled(connected);
miReconnect.setEnabled(!nullSession && session.getRemoteHost() != null);
miDownload1.setEnabled(connected && selectionCount2 > 0);
miDownloadAs1.setEnabled(connected && selectionCount2 == 1);
miDownloadAndUnzip1.setEnabled(connected && selectionCount2 == 1
&& isFile2 && isZipFile(selectedFile2));
miUpload1.setEnabled(connected && selectionCount1 > 0);
miUploadAs1.setEnabled(connected && selectionCount1 == 1);
miZipAndUpload1.setEnabled(connected && selectionCount1 > 0);
miAbort.setEnabled(connected);
}
public void menuDeselected(MenuEvent e) {
miCloseSession.setEnabled(true);
miConnect.setEnabled(true);
miDisconnect.setEnabled(true);
miReconnect.setEnabled(true);
miDownload1.setEnabled(true);
miDownloadAs1.setEnabled(true);
miDownloadAndUnzip1.setEnabled(true);
miUpload1.setEnabled(true);
miUploadAs1.setEnabled(true);
miZipAndUpload1.setEnabled(true);
miAbort.setEnabled(true);
}
public void menuCanceled(MenuEvent e) {
miCloseSession.setEnabled(true);
miConnect.setEnabled(true);
miDisconnect.setEnabled(true);
miReconnect.setEnabled(true);
miDownload1.setEnabled(true);
miDownloadAs1.setEnabled(true);
miDownloadAndUnzip1.setEnabled(true);
miUpload1.setEnabled(true);
miUploadAs1.setEnabled(true);
miZipAndUpload1.setEnabled(true);
miAbort.setEnabled(true);
}
private boolean isZipFile(RemoteFile file) {
String ext = file.getExtension();
return "ZIP".equalsIgnoreCase(ext);
}
}