/*
* 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.KeyEvent;
import java.util.ResourceBundle;
import javax.swing.KeyStroke;
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.ChangeRemoteDirectoryAction;
import com.myjavaworld.jftp.actions.DeleteRemoteFileAction;
import com.myjavaworld.jftp.actions.EditRemoteFileAction;
import com.myjavaworld.jftp.actions.NewRemoteDirectoryAction;
import com.myjavaworld.jftp.actions.NewRemoteFileAction;
import com.myjavaworld.jftp.actions.OpenRemoteFileAction;
import com.myjavaworld.jftp.actions.PrintRemoteFileAction;
import com.myjavaworld.jftp.actions.RenameRemoteFileAction;
import com.myjavaworld.util.ResourceLoader;
/**
* Remote system menu
*
* @author Sai Pullabhotla, psai [at] jMethods [dot] com
* @version 2.0
*/
public class RemoteSystemMenu extends MMenu implements MenuListener {
private static final ResourceBundle resources = ResourceLoader
.getBundle("com.myjavaworld.jftp.RemoteSystemMenu");
private static final ResourceBundle ftpMenuResources = ResourceLoader
.getBundle("com.myjavaworld.jftp.FTPMenu");
private JFTP jftp = null;
private MMenuItem miFile = null;
private MMenuItem miDirectory = null;
private MMenuItem miChangeDirectory = null;
private MMenuItem miRename = null;
private MMenuItem miDelete = null;
private MMenuItem miOpenFile;
private MMenuItem miEditFile;
private MMenuItem miPrintFile;
private MMenu menuNew;
private MMenu menuExecute;
private MMenuItem miHelp;
private MMenuItem miStat;
private MMenuItem miSyst;
private MMenuItem miNoop;
private MMenuItem miOther;
private MMenuItem miApplyFilter;
private MMenuItem miClearFilter;
private MMenuItem miRefresh;
private MMenuItem miProperties;
private MMenuItem miSelectAll = null;
private MMenuItem miInvertSelection = null;
public RemoteSystemMenu(JFTP jftp) {
super();
this.jftp = jftp;
setText(resources.getString("text.remoteSystem"));
setMnemonic(resources.getString("mnemonic.remoteSystem"),
resources.getString("mnemonicIndex.remoteSystem"));
prepareMenuItems();
addMenuListener(this);
}
private void prepareMenuItems() {
miOpenFile = new MMenuItem(resources.getString("text.open"));
miOpenFile.setActionCommand("cmd.openRemoteFile");
miOpenFile.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,
GUIUtil.ACCELERATOR_MASK));
miOpenFile.setMnemonic(resources.getString("mnemonic.open"),
resources.getString("mnemonicIndex.open"));
miOpenFile.addActionListener(OpenRemoteFileAction.getInstance(jftp));
add(miOpenFile);
miEditFile = new MMenuItem(resources.getString("text.edit"));
miEditFile.setActionCommand("cmd.editRemoteFile");
miEditFile.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E,
GUIUtil.ACCELERATOR_MASK));
miEditFile.setMnemonic(resources.getString("mnemonic.edit"),
resources.getString("mnemonicIndex.edit"));
miEditFile.addActionListener(EditRemoteFileAction.getInstance(jftp));
add(miEditFile);
miPrintFile = new MMenuItem(resources.getString("text.print"));
miPrintFile.setActionCommand("cmd.printRemoteFile");
miPrintFile.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,
GUIUtil.ACCELERATOR_MASK));
miPrintFile.setMnemonic(resources.getString("mnemonic.print"),
resources.getString("mnemonicIndex.print"));
miPrintFile.addActionListener(PrintRemoteFileAction.getInstance(jftp));
add(miPrintFile);
addSeparator();
menuNew = new MMenu(resources.getString("text.new"), true);
menuNew.setMnemonic(resources.getString("mnemonic.new"),
resources.getString("mnemonicIndex.new"));
add(menuNew);
miFile = new MMenuItem(resources.getString("text.file"));
miFile.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,
GUIUtil.ACCELERATOR_MASK));
miFile.setMnemonic(resources.getString("mnemonic.file"),
resources.getString("mnemonicIndex.file"));
miFile.addActionListener(NewRemoteFileAction.getInstance(jftp));
menuNew.add(miFile);
miDirectory = new MMenuItem(resources.getString("text.directory"));
miDirectory.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D,
GUIUtil.ACCELERATOR_MASK));
miDirectory.setMnemonic(resources.getString("mnemonic.directory"),
resources.getString("mnemonicIndex.directory"));
miDirectory.addActionListener(NewRemoteDirectoryAction
.getInstance(jftp));
menuNew.add(miDirectory);
miChangeDirectory = new MMenuItem(
resources.getString("text.changeDirectory"));
miChangeDirectory.setMnemonic(
resources.getString("mnemonic.changeDirectory"),
resources.getString("mnemonicIndex.changeDirectory"));
miChangeDirectory.addActionListener(ChangeRemoteDirectoryAction
.getInstance(jftp));
add(miChangeDirectory);
miRename = new MMenuItem(resources.getString("text.rename"));
miRename.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R,
GUIUtil.ACCELERATOR_MASK));
miRename.setMnemonic(resources.getString("mnemonic.rename"),
resources.getString("mnemonicIndex.rename"));
miRename.addActionListener(RenameRemoteFileAction.getInstance(jftp));
add(miRename);
miDelete = new MMenuItem(resources.getString("text.delete"));
miDelete.setAccelerator(KeyStroke.getKeyStroke(GUIUtil.getDeleteKey(),
GUIUtil.ACCELERATOR_MASK));
miDelete.setMnemonic(resources.getString("mnemonic.delete"),
resources.getString("mnemonicIndex.delete"));
miDelete.addActionListener(DeleteRemoteFileAction.getInstance(jftp));
add(miDelete);
addSeparator();
menuExecute = new MMenu(resources.getString("text.execute"), true);
menuExecute.setMnemonic(resources.getString("mnemonic.execute"),
resources.getString("mnemonicIndex.execute"));
add(menuExecute);
miHelp = new MMenuItem(resources.getString("text.help"));
miHelp.setMnemonic(resources.getString("mnemonic.help"),
resources.getString("mnemonicIndex.help"));
miHelp.setActionCommand("cmd.help");
miHelp.addActionListener(jftp);
menuExecute.add(miHelp);
miStat = new MMenuItem(resources.getString("text.stat"));
miStat.setMnemonic(resources.getString("mnemonic.stat"),
resources.getString("mnemonicIndex.stat"));
miStat.setActionCommand("cmd.stat");
miStat.addActionListener(jftp);
menuExecute.add(miStat);
miSyst = new MMenuItem(resources.getString("text.syst"));
miSyst.setMnemonic(resources.getString("mnemonic.syst"),
resources.getString("mnemonicIndex.syst"));
miSyst.setActionCommand("cmd.syst");
miSyst.addActionListener(jftp);
menuExecute.add(miSyst);
miNoop = new MMenuItem(resources.getString("text.noop"));
miNoop.setMnemonic(resources.getString("mnemonic.noop"),
resources.getString("mnemonicIndex.noop"));
miNoop.setActionCommand("cmd.noop");
miNoop.addActionListener(jftp);
menuExecute.add(miNoop);
miOther = new MMenuItem(resources.getString("text.other"));
miOther.setMnemonic(resources.getString("mnemonic.other"),
resources.getString("mnemonicIndex.other"));
miOther.setActionCommand("cmd.other");
miOther.addActionListener(jftp);
menuExecute.add(miOther);
addSeparator();
miApplyFilter = new MMenuItem(resources.getString("text.applyFilter"));
miApplyFilter.setMnemonic(resources.getString("mnemonic.applyFilter"),
resources.getString("mnemonicIndex.applyFilter"));
miApplyFilter.setActionCommand("cmd.applyRemoteFileFilter");
miApplyFilter.addActionListener(jftp);
add(miApplyFilter);
miClearFilter = new MMenuItem(resources.getString("text.clearFilter"));
miClearFilter.setMnemonic(resources.getString("mnemonic.clearFilter"),
resources.getString("mnemonicIndex.clearFilter"));
miApplyFilter.setActionCommand("cmd.applyRemoteFileFilter");
miClearFilter.setActionCommand("cmd.clearRemoteFileFilter");
miClearFilter.addActionListener(jftp);
add(miClearFilter);
addSeparator();
miRefresh = new MMenuItem(resources.getString("text.refresh"));
miRefresh.setMnemonic(resources.getString("mnemonic.refresh"),
resources.getString("mnemonicIndex.refresh"));
miRefresh.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5,
GUIUtil.ACCELERATOR_MASK));
miRefresh.setActionCommand("cmd.refreshRemotePane");
miRefresh.addActionListener(jftp);
add(miRefresh);
addSeparator();
miProperties = new MMenuItem(resources.getString("text.properties"));
miProperties.setMnemonic(resources.getString("mnemonic.properties"),
resources.getString("mnemonicIndex.properties"));
miProperties.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_I,
GUIUtil.ACCELERATOR_MASK));
miProperties.setActionCommand("cmd.remoteFileProperties");
miProperties.addActionListener(jftp);
add(miProperties);
addSeparator();
miSelectAll = new MMenuItem();
miSelectAll.setText(resources.getString("text.selectAll"));
miSelectAll.setMnemonic(resources.getString("mnemonic.selectAll"),
resources.getString("mnemonicIndex.selectAll"));
miSelectAll.setActionCommand("cmd.remoteSelectAll");
miSelectAll.addActionListener(jftp);
add(miSelectAll);
miInvertSelection = new MMenuItem();
miInvertSelection.setText(resources.getString("text.invertSelection"));
miInvertSelection.setMnemonic(
resources.getString("mnemonic.invertSelection"),
resources.getString("mnemonicIndex.invertSelection"));
miInvertSelection.setActionCommand("cmd.remoteInvertSelection");
miInvertSelection.addActionListener(jftp);
add(miInvertSelection);
}
public void menuCanceled(javax.swing.event.MenuEvent menuEvent) {
miOpenFile.setEnabled(true);
miEditFile.setEnabled(true);
miPrintFile.setEnabled(true);
menuNew.setEnabled(true);
miChangeDirectory.setEnabled(true);
miRename.setEnabled(true);
miDelete.setEnabled(true);
menuExecute.setEnabled(true);
miApplyFilter.setEnabled(true);
miClearFilter.setEnabled(true);
miRefresh.setEnabled(true);
miProperties.setEnabled(true);
miSelectAll.setEnabled(true);
miInvertSelection.setEnabled(true);
}
public void menuDeselected(javax.swing.event.MenuEvent menuEvent) {
miOpenFile.setEnabled(true);
miEditFile.setEnabled(true);
miPrintFile.setEnabled(true);
menuNew.setEnabled(true);
miChangeDirectory.setEnabled(true);
miRename.setEnabled(true);
miDelete.setEnabled(true);
menuExecute.setEnabled(true);
miApplyFilter.setEnabled(true);
miClearFilter.setEnabled(true);
miRefresh.setEnabled(true);
miProperties.setEnabled(true);
miSelectAll.setEnabled(true);
miInvertSelection.setEnabled(true);
}
public void menuSelected(javax.swing.event.MenuEvent menuEvent) {
FTPSession session = jftp.getCurrentSession();
boolean nullSession = session == null;
boolean connected = !nullSession && session.isConnected();
int selectionCount = 0;
if (connected) {
selectionCount = session.getRemoteFileSelectionCount();
}
boolean isFile = false;
RemoteFile selectedFile = null;
if (selectionCount == 1) {
selectedFile = session.getSelectedRemoteFile();
isFile = selectedFile.isFile();
}
miOpenFile.setEnabled(connected && selectionCount == 1);
miEditFile.setEnabled(connected && selectionCount == 1 && isFile);
miPrintFile.setEnabled(connected && selectionCount == 1 && isFile);
menuNew.setEnabled(connected);
miChangeDirectory.setEnabled(connected);
miRename.setEnabled(connected && selectionCount == 1);
miDelete.setEnabled(connected && selectionCount > 0);
menuExecute.setEnabled(connected);
miApplyFilter.setEnabled(connected);
miClearFilter.setEnabled(connected
&& session.getRemoteFileFilter() != null);
miRefresh.setEnabled(connected);
miProperties.setEnabled(connected && selectionCount == 1);
miSelectAll.setEnabled(connected);
miInvertSelection.setEnabled(connected);
}
private boolean isZipFile(RemoteFile file) {
String ext = file.getExtension();
return "ZIP".equalsIgnoreCase(ext);
}
}