de.blizzy.backup.vfs.RemoteLocationDialog.java Source code

Java tutorial

Introduction

Here is the source code for de.blizzy.backup.vfs.RemoteLocationDialog.java

Source

/*
blizzy's Backup - Easy to use personal file backup application
Copyright (C) 2011-2012 Maik Schreiber
    
This program 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.
    
This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
*/
package de.blizzy.backup.vfs;

import org.apache.commons.lang3.StringUtils;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.VerifyEvent;
import org.eclipse.swt.events.VerifyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

import de.blizzy.backup.BackupApplication;
import de.blizzy.backup.Messages;

public abstract class RemoteLocationDialog extends Dialog {
    private String title;
    protected Text hostText;
    protected Text portText;
    protected Text loginText;
    protected Text passwordText;
    protected Text folderText;
    private ILocation location;
    private boolean credentialsOptional;
    private int port = -1;

    public RemoteLocationDialog(Shell parentShell) {
        super(parentShell);
    }

    @Override
    protected void configureShell(Shell newShell) {
        super.configureShell(newShell);
        newShell.setImages(BackupApplication.getWindowImages());
        if (StringUtils.isNotBlank(title)) {
            newShell.setText(title);
        }
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public void setCredentialsOptional(boolean credentialsOptional) {
        this.credentialsOptional = credentialsOptional;
    }

    public void setPort(int port) {
        this.port = port;
    }

    @Override
    protected boolean isResizable() {
        return true;
    }

    @Override
    protected Control createDialogArea(Composite parent) {
        Composite composite = (Composite) super.createDialogArea(parent);
        ((GridLayout) composite.getLayout()).numColumns = 4;
        ((GridLayout) composite.getLayout()).makeColumnsEqualWidth = false;

        Label label = new Label(composite, SWT.NONE);
        label.setText(Messages.Label_Host + ":"); //$NON-NLS-1$
        label.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false));

        hostText = new Text(composite, SWT.BORDER);
        GridData gd = new GridData(SWT.FILL, SWT.CENTER, true, false);
        gd.widthHint = convertWidthInCharsToPixels(40);
        hostText.setLayoutData(gd);

        label = new Label(composite, SWT.NONE);
        label.setText(Messages.Label_Port + ":"); //$NON-NLS-1$
        label.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false));

        portText = new Text(composite, SWT.BORDER);
        gd = new GridData(SWT.FILL, SWT.CENTER, false, false);
        gd.widthHint = convertWidthInCharsToPixels(4);
        portText.setLayoutData(gd);
        if ((port > 0) && (port < 65535)) {
            portText.setText(String.valueOf(port));
        }

        label = new Label(composite, SWT.NONE);
        label.setText(Messages.Label_Login + ":"); //$NON-NLS-1$
        label.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false));

        loginText = new Text(composite, SWT.BORDER);
        gd = new GridData(SWT.FILL, SWT.CENTER, true, false);
        gd.horizontalSpan = 3;
        loginText.setLayoutData(gd);

        label = new Label(composite, SWT.NONE);
        label.setText(Messages.Label_Password + ":"); //$NON-NLS-1$
        label.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false));

        passwordText = new Text(composite, SWT.BORDER | SWT.PASSWORD);
        gd = new GridData(SWT.FILL, SWT.CENTER, true, false);
        gd.horizontalSpan = 3;
        passwordText.setLayoutData(gd);

        label = new Label(composite, SWT.NONE);
        label.setText(Messages.Label_Folder + ":"); //$NON-NLS-1$
        label.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false));

        folderText = new Text(composite, SWT.BORDER);
        gd = new GridData(SWT.FILL, SWT.CENTER, true, false);
        gd.horizontalSpan = 3;
        folderText.setLayoutData(gd);

        hostText.addModifyListener(new ModifyListener() {
            @Override
            public void modifyText(ModifyEvent e) {
                updateOkButton();
            }
        });

        portText.addVerifyListener(new VerifyListener() {
            @Override
            public void verifyText(VerifyEvent e) {
                if (StringUtils.isNotBlank(e.text) && !StringUtils.containsOnly(e.text, "0123456789")) { //$NON-NLS-1$
                    e.doit = false;
                }
            }
        });

        portText.addModifyListener(new ModifyListener() {
            @Override
            public void modifyText(ModifyEvent e) {
                updateOkButton();
            }
        });

        loginText.addModifyListener(new ModifyListener() {
            @Override
            public void modifyText(ModifyEvent e) {
                updateOkButton();
            }
        });

        passwordText.addModifyListener(new ModifyListener() {
            @Override
            public void modifyText(ModifyEvent e) {
                updateOkButton();
            }
        });

        folderText.addModifyListener(new ModifyListener() {
            @Override
            public void modifyText(ModifyEvent e) {
                updateOkButton();
            }
        });

        return composite;
    }

    @Override
    protected void createButtonsForButtonBar(Composite parent) {
        super.createButtonsForButtonBar(parent);
        updateOkButton();
    }

    private void updateOkButton() {
        String portStr = portText.getText();
        boolean ok = StringUtils.isNotBlank(hostText.getText()) && StringUtils.isNotBlank(portStr)
                && (credentialsOptional || (StringUtils.isNotBlank(loginText.getText())
                        && StringUtils.isNotBlank(passwordText.getText())))
                && StringUtils.isNotBlank(folderText.getText());
        if (ok) {
            try {
                long port = Long.parseLong(portStr);
                ok = (port > 0) && (port <= 65535);
            } catch (NumberFormatException e) {
                // ignore
            }
        }
        getButton(IDialogConstants.OK_ID).setEnabled(ok);
    }

    @Override
    protected void buttonPressed(int buttonId) {
        if (buttonId == IDialogConstants.OK_ID) {
            location = createLocation();
        }
        super.buttonPressed(buttonId);
    }

    protected abstract ILocation createLocation();

    public ILocation getLocation() {
        return location;
    }
}