com.scudata.ide.spl.dialog.DialogFTP Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of esproc Show documentation
Show all versions of esproc Show documentation
SPL(Structured Process Language) A programming language specially for structured data computing.
package com.scudata.ide.spl.dialog;
import java.awt.BorderLayout;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.util.Vector;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import sun.net.ftp.FtpClient;
import com.scudata.common.IntArrayList;
import com.scudata.common.MessageManager;
import com.scudata.ide.common.ConfigFile;
import com.scudata.ide.common.FTPInfo;
import com.scudata.ide.common.GM;
import com.scudata.ide.common.GV;
import com.scudata.ide.common.control.TableSelectName;
import com.scudata.ide.common.swing.VFlowLayout;
import com.scudata.ide.spl.resources.IdeSplMessage;
/**
* ?ϴ???FTP?Ի???
*
*/
public class DialogFTP extends JDialog implements ActionListener {
private static final long serialVersionUID = 1L;
/**
* ????????????Դ
*/
private MessageManager mm = IdeSplMessage.get();
/**
* ???水ť
*/
private JButton jBSave = new JButton();
/**
* ȡ????ť
*/
private JButton jBCancel = new JButton();
/**
* ??????ť
*/
private JButton jBManage = new JButton();
/**
* ???????ؼ?
*/
private TableSelectName tableHost = new TableSelectName(
mm.getMessage("dialoguploadresult.hostname")) {// ??????
private static final long serialVersionUID = 1L;
public void doubleClick(int row, int col) {
if (col == TableSelectName.COL_NAME)
hostManager();
}
};
/**
* ASCII?ؼ?
*/
private JRadioButton jRBAsc = new JRadioButton();
/**
* ?????ƿؼ?
*/
private JRadioButton jRBBinary = new JRadioButton();
/**
* ?˳?ѡ??
*/
private int m_option = JOptionPane.CLOSED_OPTION;
/**
* ?Ƿ?Ͱ汾JDK??1.7???£?
*/
private boolean isLowVersionJDK = false;
/**
* FTP??????Ϣ?б?
*/
private FTPInfo[] ftpInfos = null;
/**
* FTP????ͻ??˶???
*/
private FtpClient ftpClient = null;
/**
* ?ļ?·??
*/
private String filePath;
/**
* ???캯??
*/
public DialogFTP() {
super(GV.appFrame, "???浽FTP", true);
try {
String javaVersion = System.getProperty("java.version");
if (javaVersion.compareTo("1.7") < 0) {
isLowVersionJDK = true;
}
init();
setSize(600, 300);
resetText();
loadFTPInfo();
GM.setDialogDefaultButton(this, jBSave, jBCancel);
} catch (Exception ex) {
GM.showException(ex);
}
}
/**
* ?????ļ?·??
*
* @param filePath
* ?ļ?·??
*/
public void setFilePath(String filePath) {
this.filePath = filePath;
}
/**
* ????FTP??????Ϣ
*/
private void loadFTPInfo() {
try {
ftpInfos = ConfigFile.getConfigFile().loadFTP(ConfigFile.APP_DM);
setFTPInfo();
} catch (Throwable e) {
ftpInfos = null;
}
}
/**
* ????FTP??????Ϣ
*/
private void setFTPInfo() {
if (ftpInfos != null && ftpInfos.length > 0) {
Vector hostNames = new Vector();
Vector existNames = new Vector();
for (int i = 0; i < ftpInfos.length; i++) {
hostNames.add(ftpInfos[i].getHost());
if (ftpInfos[i].isSelected())
existNames.add(ftpInfos[i].getHost());
}
tableHost.setExistColor(false);
tableHost.setExistNames(existNames);
tableHost.setNames(hostNames, false, true);
}
}
/**
* ????FTP??????Ϣ
*/
private void saveFTPInfo() {
if (ftpInfos != null) {
int[] indexes = tableHost.getSelectedIndexes();
IntArrayList selectedIndexes = new IntArrayList();
if (indexes != null)
selectedIndexes.addAll(indexes);
for (int i = 0; i < ftpInfos.length; i++) {
ftpInfos[i].setSelected(selectedIndexes.containsInt(i));
}
}
try {
ConfigFile.getConfigFile().storeFTP(ConfigFile.APP_DM, ftpInfos);
} catch (Throwable e) {
e.printStackTrace();
}
}
/**
* ??????????Դ
*/
private void resetText() {
jBSave.setText(mm.getMessage("button.save"));
jBCancel.setText(mm.getMessage("button.cancel"));
setTitle(mm.getMessage("dialogftp.title")); // ???浽FTP
jBManage.setText(mm.getMessage("dialogftp.manager")); // ????????(M)
jRBBinary.setText(mm.getMessage("dialogftp.binary")); // ??????
}
/**
* ȡ?˳?ѡ??
*
* @return
*/
public int getOption() {
return m_option;
}
/**
* ????
*/
private void save() {
if (ftpInfos == null)
return;
int[] indexes = tableHost.getSelectedIndexes();
if (indexes == null || indexes.length == 0) {
// ??ѡ??Ҫ???浽????????
GM.messageDialog(GV.appFrame, mm.getMessage("dialogftp.savetohost"));
return;
}
boolean[] successed = new boolean[indexes.length];
String[] exceptions = new String[indexes.length];
FTPInfo[] selectedFtps = new FTPInfo[indexes.length];
for (int i = 0; i < indexes.length; i++) {
FTPInfo ftpInfo = ftpInfos[indexes[i]];
selectedFtps[i] = ftpInfo;
String host = ftpInfo.getHost();
int port = ftpInfo.getPort();
try {
String user = ftpInfo.getUser();
String password = ftpInfo.getPassword();
Class clz = Class.forName("sun.net.ftp.FtpClient");
Method m;
// ????JDK?汾?ж?ʹ?????ӿ?
if (isLowVersionJDK) { // 1.7????
Constructor declaredConstructor = clz
.getDeclaredConstructor();
ftpClient = (FtpClient) declaredConstructor.newInstance();
m = clz.getMethod("openServer", String.class, int.class);
m.invoke(ftpClient, host, port);
m = clz.getMethod("login", String.class, String.class);
m.invoke(ftpClient, user, password);
if (jRBAsc.isSelected()) {
m = clz.getMethod("ascii");
m.invoke(ftpClient);
} else if (jRBBinary.isSelected()) {
m = clz.getMethod("binary");
m.invoke(ftpClient);
}
// ftpClient = new FtpClient();
// if (port <= 0) {
// ftpClient.openServer(host);
// } else {
// ftpClient.openServer(host, port);
// }
// ftpClient.login(user, password);
// ftpClient.cd(ftpInfo.getDirectory());
// if (jRBAsc.isSelected()) {
// ftpClient.ascii();
// } else if (jRBBinary.isSelected()) {
// ftpClient.binary();
// }
} else { // 1.7?????ϰ汾
SocketAddress addr = new InetSocketAddress(host, port);
m = clz.getMethod("create");
ftpClient = (FtpClient) m.invoke(clz);
m = clz.getMethod("connect", SocketAddress.class);
m.invoke(ftpClient, addr);
m = clz.getMethod("login", String.class, char[].class);
m.invoke(ftpClient, user, password.toCharArray());
if (jRBAsc.isSelected()) {
m = clz.getMethod("setAsciiType");
m.invoke(ftpClient);
} else if (jRBBinary.isSelected()) {
m = clz.getMethod("setBinaryType");
m.invoke(ftpClient);
}
// ftpClient = FtpClient.create();
// ftpClient.connect(addr);
// ftpClient.login(user, password.toCharArray());
// if (jRBAsc.isSelected()) {
// ftpClient.setAsciiType();
// } else if (jRBBinary.isSelected()) {
// ftpClient.setBinaryType();
// }
}
upload();
successed[i] = true;
} catch (Exception ex) {
successed[i] = false;
exceptions[i] = ex.getMessage();
}
}
if (ftpClient != null) {
try {
Class clz = Class.forName("sun.net.ftp.FtpClient");
Method m;
// ????JDK?汾?ж?ʹ?????ӿ?
if (isLowVersionJDK) {
m = clz.getMethod("closeServer");
m.invoke(ftpClient);
// ftpClient.closeServer();
} else {
m = clz.getMethod("close");
m.invoke(ftpClient);
// ftpClient.close();
}
} catch (Exception e) {
}
}
DialogUploadResult dur = new DialogUploadResult();
dur.setResult(selectedFtps, successed, exceptions);
dur.setVisible(true);
}
/**
* ?ϴ??ļ?
*
* @throws Exception
*/
public void upload() throws Exception {
File file = new File(filePath);
FileInputStream fis = null;
OutputStream tos = null;
try {
fis = new FileInputStream(filePath);
Class clz = Class.forName("sun.net.ftp.FtpClient");
Method m;
// ????JDK?汾?ж?ʹ?????ӿ?
if (isLowVersionJDK) {
m = clz.getMethod("put", String.class);
tos = (OutputStream) m.invoke(ftpClient, file.getName());
// tos = ftpClient.put(file.getName());
} else {
m = clz.getMethod("putFileStream", String.class, boolean.class);
tos = (OutputStream) m.invoke(ftpClient, file.getName(), true);
// tos = ftpClient.putFileStream(file.getName(), true);
}
int readLength = 0;
byte[] buf = new byte[1024];
while ((readLength = fis.read(buf)) != -1) {
tos.write(buf, 0, readLength);
}
tos.flush();
} finally {
if (fis != null)
fis.close();
if (tos != null)
tos.close();
}
}
/**
* ??ʼ???ؼ?
*
* @throws Exception
*/
private void init() throws Exception {
JPanel panelEast = new JPanel(new VFlowLayout());
jBSave.setMnemonic('S');
jBSave.setText("????(S)");
jBSave.addActionListener(this);
jBCancel.setMnemonic('C');
jBCancel.setText("ȡ??(C)");
jBCancel.addActionListener(this);
jBManage.setMnemonic('M');
jBManage.setText("????????(M)"); // ????????(M)
jBManage.addActionListener(this);
JLabel labelOpt = new JLabel(mm.getMessage("dialogftp.sendtype")); // ???????ͣ?
jRBAsc.setText("ASCII");
jRBBinary.setText("??????");
ButtonGroup bgOpt = new ButtonGroup();
bgOpt.add(jRBAsc);
bgOpt.add(jRBBinary);
jRBBinary.setSelected(true);
this.getContentPane().add(panelEast, BorderLayout.EAST);
panelEast.add(jBSave, null);
panelEast.add(jBCancel, null);
panelEast.add(new JPanel());
panelEast.add(jBManage);
JPanel panelCenter = new JPanel(new GridBagLayout());
panelCenter.add(tableHost, GM.getGBC(1, 1, true, true));
JPanel panelOpt = new JPanel(new GridLayout(1, 3));
panelOpt.add(labelOpt);
panelOpt.add(jRBAsc);
panelOpt.add(jRBBinary);
this.getContentPane().add(panelCenter, BorderLayout.CENTER);
this.addWindowListener(new DialogFTP_this_windowAdapter(this));
}
/**
* ???ڹر??¼?
*
* @param e
*/
void this_windowClosing(WindowEvent e) {
saveFTPInfo();
GM.setWindowDimension(this);
dispose();
}
/**
* ?ؼ??¼?
*/
public void actionPerformed(ActionEvent e) {
Object src = e.getSource();
if (jBSave.equals(src)) {
save();
} else if (jBCancel.equals(src)) {
saveFTPInfo();
GM.setWindowDimension(this);
dispose();
} else if (jBManage.equals(src)) {
hostManager();
}
}
/**
* ?????????Ի???
*/
private void hostManager() {
DialogHostManager dhm = new DialogHostManager();
dhm.setFTPInfo(ftpInfos);
dhm.setVisible(true);
if (dhm.getOption() == JOptionPane.OK_OPTION) {
ftpInfos = dhm.getFTPInfo();
setFTPInfo();
}
}
}
class DialogFTP_this_windowAdapter extends java.awt.event.WindowAdapter {
DialogFTP adaptee;
DialogFTP_this_windowAdapter(DialogFTP adaptee) {
this.adaptee = adaptee;
}
public void windowClosing(WindowEvent e) {
adaptee.this_windowClosing(e);
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy