/* Copyright 2003-2012 Dmitry Barashev, GanttProject Team This file is part of GanttProject, an opensource project management tool. GanttProject is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. GanttProject is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GanttProject. If not, see <http://www.gnu.org/licenses/>. */ package net.sourceforge.ganttproject.document; import java.awt.BorderLayout; import java.awt.Component; import java.awt.event.ActionEvent; import java.io.IOException; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.SwingConstants; import javax.swing.border.EmptyBorder; import org.eclipse.core.runtime.IStatus; import biz.ganttproject.core.option.ChangeValueEvent; import biz.ganttproject.core.option.ChangeValueListener; import biz.ganttproject.core.option.DefaultStringOption; import biz.ganttproject.core.option.GPOptionGroup; import net.sourceforge.ganttproject.action.OkAction; import net.sourceforge.ganttproject.export.WebPublisher; import net.sourceforge.ganttproject.gui.options.OptionPageProviderBase; import net.sourceforge.ganttproject.gui.options.OptionsPageBuilder; import net.sourceforge.ganttproject.gui.options.OptionsPageBuilder.I18N; import net.sourceforge.ganttproject.language.GanttLanguage; public class NetworkOptionPageProvider extends OptionPageProviderBase { public NetworkOptionPageProvider() { super("impex.ftp"); } @Override public GPOptionGroup[] getOptionGroups() { return new GPOptionGroup[] {getProject().getDocumentManager().getFTPOptions()}; } @Override public boolean hasCustomComponent() { return true; } @Override public Component buildPageComponent() { OptionsPageBuilder builder = new OptionsPageBuilder(); final GPOptionGroup ftpGroup = getProject().getDocumentManager().getNetworkOptionGroups()[0]; ftpGroup.setTitled(false); I18N i18n = new OptionsPageBuilder.I18N(); final DefaultStringOption usernameOption = (DefaultStringOption) ftpGroup.getOption(DocumentCreator.USERNAME_OPTION_ID); ftpGroup.setI18Nkey(i18n.getCanonicalOptionLabelKey(usernameOption), "ftpuser"); final DefaultStringOption servernameOption = (DefaultStringOption) ftpGroup.getOption(DocumentCreator.SERVERNAME_OPTION_ID); ftpGroup.setI18Nkey(i18n.getCanonicalOptionLabelKey(servernameOption), "ftpserver"); final DefaultStringOption dirnameOption = (DefaultStringOption) ftpGroup.getOption(DocumentCreator.DIRECTORYNAME_OPTION_ID); ftpGroup.setI18Nkey(i18n.getCanonicalOptionLabelKey(dirnameOption), "ftpdirectory"); final DefaultStringOption passwordOption = (DefaultStringOption) ftpGroup.getOption(DocumentCreator.PASSWORD_OPTION_ID); ftpGroup.setI18Nkey(i18n.getCanonicalOptionLabelKey(passwordOption), "ftppwd"); final JComponent optionsPane = builder.buildPage(new GPOptionGroup[] {ftpGroup}, getPageID()); final Action testConnectionAction = new AbstractAction() { { putValue(Action.NAME, GanttLanguage.getInstance().getText("testFTPConnection")); setEnabled(canEnableTestAction(ftpGroup)); } @Override public void actionPerformed(ActionEvent e) { WebPublisher.Ftp ftp = new WebPublisher.Ftp(); try { IStatus status = ftp.loginAndChangedir(getProject().getDocumentManager().getFTPOptions()); if (status.isOK()) { getUiFacade().showOptionDialog(JOptionPane.INFORMATION_MESSAGE, GanttLanguage.getInstance().getText("successFTPConnection"), new Action[] { OkAction.createVoidAction("ok") }); } else { getUiFacade().showErrorDialog(status.getMessage()); } } catch (IOException e1) { getUiFacade().showErrorDialog(e1); } } }; ChangeValueListener listener = new ChangeValueListener() { @Override public void changeValue(ChangeValueEvent event) { testConnectionAction.setEnabled(canEnableTestAction(ftpGroup)); } }; servernameOption.addChangeValueListener(listener); usernameOption.addChangeValueListener(listener); passwordOption.addChangeValueListener(listener); JPanel result = new JPanel(new BorderLayout()); result.setBorder(new EmptyBorder(5, 5, 5, 5)); result.add(optionsPane, BorderLayout.NORTH); JButton testConnectionButton = new JButton(testConnectionAction); testConnectionButton.setAlignmentX(SwingConstants.RIGHT); JPanel connectionWrapper = new JPanel(new BorderLayout()); connectionWrapper.add(testConnectionButton, BorderLayout.NORTH); result.add(connectionWrapper, BorderLayout.CENTER); return result; } private boolean canEnableTestAction(GPOptionGroup ftpGroup) { final DefaultStringOption usernameOption = (DefaultStringOption) ftpGroup.getOption(DocumentCreator.USERNAME_OPTION_ID); final DefaultStringOption servernameOption = (DefaultStringOption) ftpGroup.getOption(DocumentCreator.SERVERNAME_OPTION_ID); final DefaultStringOption passwordOption = (DefaultStringOption) ftpGroup.getOption(DocumentCreator.PASSWORD_OPTION_ID); return servernameOption.getValue() != null && usernameOption.getValue() != null && passwordOption.getValue() != null; } }