de.dal33t.powerfolder.ui.wizard.LoadInvitationPanel.java Source code

Java tutorial

Introduction

Here is the source code for de.dal33t.powerfolder.ui.wizard.LoadInvitationPanel.java

Source

/*
 * Copyright 2004 - 2008 Christian Sprajc. All rights reserved.
 *
 * This file is part of PowerFolder.
 *
 * PowerFolder 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.
 *
 * PowerFolder 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 PowerFolder. If not, see <http://www.gnu.org/licenses/>.
 *
 * $Id: LoadInvitationPanel.java 20999 2013-03-11 13:19:11Z glasgow $
 */
package de.dal33t.powerfolder.ui.wizard;

import static de.dal33t.powerfolder.ui.wizard.WizardContextAttributes.FOLDERINFO_ATTRIBUTE;
import static de.dal33t.powerfolder.ui.wizard.WizardContextAttributes.FOLDER_PERMISSION_ATTRIBUTE;
import static de.dal33t.powerfolder.ui.wizard.WizardContextAttributes.MAKE_FRIEND_AFTER;
import static de.dal33t.powerfolder.ui.wizard.WizardContextAttributes.PREVIEW_FOLDER_ATTIRBUTE;
import static de.dal33t.powerfolder.ui.wizard.WizardContextAttributes.SEND_INVIATION_AFTER_ATTRIBUTE;
import static de.dal33t.powerfolder.ui.wizard.WizardContextAttributes.SYNC_PROFILE_ATTRIBUTE;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.logging.Logger;

import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

import jwf.WizardPanel;

import com.jgoodies.binding.value.ValueHolder;
import com.jgoodies.binding.value.ValueModel;
import com.jgoodies.forms.builder.PanelBuilder;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;

import de.dal33t.powerfolder.Controller;
import de.dal33t.powerfolder.PreferencesEntry;
import de.dal33t.powerfolder.disk.FolderSettings;
import de.dal33t.powerfolder.disk.SyncProfile;
import de.dal33t.powerfolder.message.Invitation;
import de.dal33t.powerfolder.ui.panel.SyncProfileSelectorPanel;
import de.dal33t.powerfolder.ui.util.FileSelectorFactory;
import de.dal33t.powerfolder.ui.util.SimpleComponentFactory;
import de.dal33t.powerfolder.util.Format;
import de.dal33t.powerfolder.util.InvitationUtil;
import de.dal33t.powerfolder.util.PathUtils;
import de.dal33t.powerfolder.util.Translation;

/**
 * Class that selects an invitation then does the folder setup for that invite.
 *
 * @author <a href="mailto:harry@powerfolder.com">Harry Glasgow</a>
 * @version $Revision: 1.11 $
 */
public class LoadInvitationPanel extends PFWizardPanel {

    private static final Logger log = Logger.getLogger(LoadInvitationPanel.class.getName());

    private JComponent locationField;
    private Invitation invitation;
    private JLabel folderHintLabel;
    private JLabel folderNameLabel;
    private JLabel invitorHintLabel;
    private JLabel invitorLabel;
    private JLabel invitationMessageHintLabel;
    private JTextField invitationMessageLabel;
    private JLabel estimatedSizeHintLabel;
    private JLabel estimatedSize;
    private JLabel syncProfileHintLabel;
    private SyncProfileSelectorPanel syncProfileSelectorPanel;
    private JCheckBox previewOnlyCB;

    public LoadInvitationPanel(Controller controller) {
        super(controller);
    }

    /**
     * Can procede if an invitation is selected.
     */

    @Override
    public boolean hasNext() {
        return invitation != null;
    }

    @Override
    public WizardPanel next() {

        // Set sync profile
        getWizardContext().setAttribute(SYNC_PROFILE_ATTRIBUTE, syncProfileSelectorPanel.getSyncProfile());

        // Set folder info
        getWizardContext().setAttribute(FOLDERINFO_ATTRIBUTE, invitation.folder);

        // Set folder permissions
        getWizardContext().setAttribute(FOLDER_PERMISSION_ATTRIBUTE, invitation.getPermission());

        // Do not prompt for send invitation afterwards
        getWizardContext().setAttribute(SEND_INVIATION_AFTER_ATTRIBUTE, false);

        // Whether to load as preview
        getWizardContext().setAttribute(PREVIEW_FOLDER_ATTIRBUTE, previewOnlyCB.isSelected());

        // If preview, validateNext has created the folder, so all done.
        if (previewOnlyCB.isSelected()) {
            return (WizardPanel) getWizardContext().getAttribute(PFWizard.SUCCESS_PANEL);
        } else {

            // Make the invitor a friend.
            getWizardContext().setAttribute(MAKE_FRIEND_AFTER, invitation.getInvitor());

            Path base = invitation.getSuggestedLocalBase(getController());
            if (base == null) {
                base = getController().getFolderRepository().getFoldersBasedir()
                        .resolve(PathUtils.removeInvalidFilenameChars(invitation.folder.getName()));
            }

            return new ChooseDiskLocationPanel(getController(), base.toAbsolutePath().toString(),
                    new FolderCreatePanel(getController()));
        }
    }

    @Override
    public boolean validateNext() {
        return !previewOnlyCB.isSelected() || createPreviewFolder();
    }

    private boolean createPreviewFolder() {

        FolderSettings folderSettings = new FolderSettings(
                PathUtils.removeInvalidFilenameChars(invitation.getSuggestedLocalBase(getController())),
                syncProfileSelectorPanel.getSyncProfile(), null, 0, true);

        getController().getFolderRepository().createFolder(invitation.folder, folderSettings);
        return true;
    }

    @Override
    protected JPanel buildContent() {
        FormLayout layout = new FormLayout("pref, 3dlu, 140dlu, pref:grow",
                "pref, 3dlu, pref, 3dlu, pref, 3dlu, pref, 3dlu, pref, " + "3dlu, pref, 3dlu, pref, 3dlu, pref");

        PanelBuilder builder = new PanelBuilder(layout);
        CellConstraints cc = new CellConstraints();

        // Please select invite...
        builder.addLabel(Translation.getTranslation("exp.wizard.load_invitation.select_file"), cc.xy(3, 1));

        // Invite selector
        builder.add(locationField, cc.xyw(3, 3, 2));

        // Folder
        builder.add(folderHintLabel, cc.xy(1, 5));
        builder.add(folderNameLabel, cc.xyw(3, 5, 2));

        // From
        builder.add(invitorHintLabel, cc.xy(1, 7));
        builder.add(invitorLabel, cc.xy(3, 7));

        // Message
        builder.add(invitationMessageHintLabel, cc.xy(1, 9));
        builder.add(invitationMessageLabel, cc.xy(3, 9));

        // Est size
        builder.add(estimatedSizeHintLabel, cc.xy(1, 11));
        builder.add(estimatedSize, cc.xy(3, 11));

        // Sync
        if (PreferencesEntry.EXPERT_MODE.getValueBoolean(getController())) {
            builder.add(syncProfileHintLabel, cc.xy(1, 13));
            JPanel p = (JPanel) syncProfileSelectorPanel.getUIComponent();
            p.setOpaque(false);

            FormLayout layout2 = new FormLayout("pref, pref:grow", "pref");
            PanelBuilder builder2 = new PanelBuilder(layout2);
            builder2.add(p, cc.xy(1, 1));

            JPanel panel = builder2.getPanel();
            builder.add(panel, cc.xyw(3, 13, 2));
            panel.setOpaque(false);
        }

        // Preview
        builder.add(previewOnlyCB, cc.xy(3, 15));

        return builder.getPanel();
    }

    /**
     * Initalizes all nessesary components
     */
    @Override
    protected void initComponents() {

        ValueModel locationModel = new ValueHolder();

        // Invite behavior
        locationModel.addValueChangeListener(new PropertyChangeListener() {
            public void propertyChange(PropertyChangeEvent evt) {
                loadInvitation((String) evt.getNewValue());
                updateButtons();
            }
        });

        // Invite selector
        locationField = FileSelectorFactory.createFileSelectionField(
                Translation.getTranslation("exp.wizard.load_invitation.choose_file"), locationModel,
                JFileChooser.FILES_AND_DIRECTORIES, InvitationUtil.createInvitationsFilefilter(), true);
        locationField.setOpaque(false);

        // Folder name label
        folderHintLabel = new JLabel(Translation.getTranslation("general.folder"));
        folderHintLabel.setEnabled(false);
        folderNameLabel = SimpleComponentFactory.createLabel();

        // Invitor label
        invitorHintLabel = new JLabel(Translation.getTranslation("general.inviter"));
        invitorHintLabel.setEnabled(false);
        invitorLabel = SimpleComponentFactory.createLabel();

        // Invitation messages
        invitationMessageHintLabel = new JLabel(Translation.getTranslation("general.message"));
        invitationMessageHintLabel.setEnabled(false);
        invitationMessageLabel = new JTextField();
        invitationMessageLabel.setEditable(false);

        // Estimated size
        estimatedSizeHintLabel = new JLabel(Translation.getTranslation("general.estimated_size"));
        estimatedSizeHintLabel.setEnabled(false);
        estimatedSize = SimpleComponentFactory.createLabel();

        // Sync profile
        syncProfileHintLabel = new JLabel(Translation.getTranslation("general.transfer_mode"));
        syncProfileHintLabel.setEnabled(false);
        syncProfileSelectorPanel = new SyncProfileSelectorPanel(getController());
        syncProfileSelectorPanel.setEnabled(false);

        // Preview
        previewOnlyCB = SimpleComponentFactory.createCheckBox(Translation.getTranslation("general.preview_folder"));
        previewOnlyCB.setOpaque(false);
        previewOnlyCB.setEnabled(false);

        // Do not let user select profile if preview.
        previewOnlyCB.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                syncProfileSelectorPanel.setEnabled(!previewOnlyCB.isSelected());
            }
        });
    }

    @Override
    protected String getTitle() {
        return Translation.getTranslation("exp.wizard.load_invitation.select");
    }

    private void loadInvitation(String file) {
        if (file == null) {
            return;
        }
        invitation = InvitationUtil.load(Paths.get(file));
        log.info("Loaded invitation " + invitation);
        if (invitation != null) {
            folderHintLabel.setEnabled(true);
            folderNameLabel.setText(invitation.folder.getName());

            invitorHintLabel.setEnabled(true);
            invitorLabel.setText(invitation.getInvitorUsername());

            invitationMessageHintLabel.setEnabled(true);
            invitationMessageLabel
                    .setText(invitation.getInvitationText() == null ? "" : invitation.getInvitationText());

            estimatedSizeHintLabel.setEnabled(true);
            estimatedSize.setText(Format.formatBytes(invitation.getSize()) + " (" + invitation.getFilesCount() + ' '
                    + Translation.getTranslation("general.files") + ')');

            syncProfileHintLabel.setEnabled(true);
            syncProfileSelectorPanel.setEnabled(true);
            SyncProfile suggestedProfile = invitation.getSuggestedSyncProfile();
            syncProfileSelectorPanel.setSyncProfile(suggestedProfile, false);

            previewOnlyCB.setEnabled(true);
        } else {
            folderHintLabel.setEnabled(false);
            folderNameLabel.setText("");
            invitorHintLabel.setEnabled(false);
            invitorLabel.setText("");
            invitationMessageHintLabel.setEnabled(false);
            invitationMessageLabel.setText("");
            estimatedSizeHintLabel.setEnabled(false);
            estimatedSize.setText("");
            syncProfileHintLabel.setEnabled(false);
            syncProfileSelectorPanel.setEnabled(false);
            previewOnlyCB.setEnabled(false);
        }
    }
}