package op.settings.subpanels; import com.enterprisedt.net.ftp.FileTransferClient; import entity.files.SYSFilesTools; import entity.system.SYSPropsTools; import gui.PnlBeanEditor; import gui.interfaces.DefaultPanel; import op.OPDE; import op.settings.databeans.FTPConfigBean; import op.threads.DisplayMessage; import op.tools.LocalMachine; import op.tools.SYSTools; import org.apache.commons.io.FileUtils; import org.apache.log4j.Logger; import javax.swing.*; import java.io.File; import java.io.FileWriter; import java.lang.reflect.InvocationTargetException; import java.sql.SQLIntegrityConstraintViolationException; import java.util.Properties; import java.util.concurrent.ExecutionException; /** * Created by tloehr on 02.07.15. */ public class PnlFTP extends DefaultPanel { boolean checkInProgress = false; boolean lastCheckOk = false; Logger logger = Logger.getLogger(getClass()); public PnlFTP() { super("opde.settings.ftp"); setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); try { final PnlBeanEditor<FTPConfigBean> pbe = new PnlBeanEditor<>(() -> new FTPConfigBean(OPDE.getProps()), FTPConfigBean.class, PnlBeanEditor.SAVE_MODE_CUSTOM); // SAVE_MODE_CUSTOM -> fixes #25 pbe.setCustomPanel(getButtonPanel(pbe)); pbe.addDataChangeListener(evt -> SYSPropsTools.storeProps(evt.getData().toProperties(new Properties()))); add(pbe); } catch (Exception e) { OPDE.fatal(logger, e); } } private JPanel getButtonPanel(PnlBeanEditor<FTPConfigBean> pbe) { final JButton btnFTPTest = new JButton(SYSTools.xx("opde.settings.ftp.test")); btnFTPTest.addActionListener(e -> { if (checkInProgress) return; // fixes #25 try { pbe.broadcast(); } catch (Exception e1) { logger.warn(e1); return; } SwingWorker worker = new SwingWorker() { @Override protected Object doInBackground() { boolean success = false; try { FileTransferClient ftp = SYSFilesTools.getFTPClient(OPDE.getProps()); OPDE.getDisplayManager().addSubMessage(new DisplayMessage("opde.settings.ftp.creating.testfile", 1)); // creating a testfile for the ftp test File file = File.createTempFile("opde", ".txt"); file.createNewFile(); FileWriter writer = new FileWriter(file); for (int length = 0; length <= 1e+7; length += 39) { writer.write("abcdefghijkl"); writer.write("\n"); writer.write("abcdefghijkl"); writer.write("\n"); writer.write("abcdefghijkl"); writer.write("\n"); } writer.flush(); writer.close(); file.deleteOnExit(); // File file = new File(OPDE.getOPWD() + File.separator + "opdestart.jar"); String md5a = SYSTools.getMD5Checksum(file); ftp.uploadFile(file.getPath(), "ftptest.file"); OPDE.getDisplayManager().addSubMessage(new DisplayMessage("opde.settings.ftp.msg.upload", 1)); ftp.downloadFile(LocalMachine.getAppDataPath() + File.separator + "ftptest.file", "ftptest.file"); OPDE.getDisplayManager().addSubMessage(new DisplayMessage("opde.settings.ftp.msg.download", 1)); File file2 = new File(LocalMachine.getAppDataPath() + File.separator + "ftptest.file"); String md5b = SYSTools.getMD5Checksum(file2); if (md5b.equalsIgnoreCase(md5a)) { success = true; OPDE.getDisplayManager().addSubMessage(new DisplayMessage("opde.settings.ftp.msg.files.equal", 1)); } else { success = false; OPDE.getDisplayManager().addSubMessage(new DisplayMessage("opde.settings.ftp.msg.files.differ", DisplayMessage.WARNING)); throw new Exception("MD5 error"); } FileUtils.deleteQuietly(file2); ftp.deleteFile("ftptest.file"); ftp.disconnect(); OPDE.getDisplayManager().addSubMessage(new DisplayMessage("opde.settings.ftp.msg.test.ok", 2)); SYSPropsTools.storeProp(SYSPropsTools.KEY_FTP_IS_WORKING, "true"); } catch (Exception ftpEx) { // OPDE.fatal(ftpEx); logger.error(ftpEx); // ftpEx.printStackTrace(); OPDE.getDisplayManager().addSubMessage(new DisplayMessage(ftpEx.getMessage(), DisplayMessage.WARNING)); SYSPropsTools.storeProp(SYSPropsTools.KEY_FTP_IS_WORKING, "false"); } return success; } @Override protected void done() { checkInProgress = false; try { lastCheckOk = (Boolean) get(); } catch (InterruptedException e) { logger.debug(e); } catch (ExecutionException e) { OPDE.fatal(logger, e); } } }; worker.execute(); reload(); }); JPanel content = new JPanel(); content.setLayout(new BoxLayout(content, BoxLayout.LINE_AXIS)); content.add(btnFTPTest); return content; } }