de.dal33t.powerfolder.ui.information.folder.members.MembersSimpleTab.java Source code

Java tutorial

Introduction

Here is the source code for de.dal33t.powerfolder.ui.information.folder.members.MembersSimpleTab.java

Source

/*
 * Copyright 2004 - 2012 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: MembersTab.java 5457 2008-10-17 14:25:41Z harry $
 */
package de.dal33t.powerfolder.ui.information.folder.members;

import java.awt.Component;
import java.awt.event.ActionEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

import javax.swing.DefaultListCellRenderer;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

import com.jgoodies.binding.adapter.BasicComponentFactory;
import com.jgoodies.binding.list.SelectionInList;
import com.jgoodies.forms.builder.ButtonBarBuilder;
import com.jgoodies.forms.builder.PanelBuilder;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;

import de.dal33t.powerfolder.ConfigurationEntry;
import de.dal33t.powerfolder.Controller;
import de.dal33t.powerfolder.light.FolderInfo;
import de.dal33t.powerfolder.security.FolderPermission;
import de.dal33t.powerfolder.ui.PFUIComponent;
import de.dal33t.powerfolder.ui.WikiLinks;
import de.dal33t.powerfolder.ui.action.BaseAction;
import de.dal33t.powerfolder.ui.util.Help;
import de.dal33t.powerfolder.ui.util.UIUtil;
import de.dal33t.powerfolder.ui.wizard.PFWizard;
import de.dal33t.powerfolder.util.Translation;

/**
 * UI component for the members information tab
 */
public class MembersSimpleTab extends PFUIComponent implements MembersTab {

    private JPanel uiComponent;
    private MembersSimpleTableModel model;
    private JScrollPane scrollPane;
    private BaseAction inviteAction;
    private MembersSimpleTable membersTable;

    /**
     * Constructor
     *
     * @param controller
     */
    public MembersSimpleTab(Controller controller) {
        super(controller);
        model = new MembersSimpleTableModel(getController());
        model.sortBy(MembersSimpleTableModel.COL_USERNAME);
    }

    /*
     * (non-Javadoc)
     * @see
     * de.dal33t.powerfolder.ui.information.folder.members.MembersTab#setFolderInfo
     * (de.dal33t.powerfolder.light.FolderInfo)
     */
    public void setFolderInfo(FolderInfo folderInfo) {
        model.setFolderInfo(folderInfo);
        inviteAction.allowWith(FolderPermission.admin(folderInfo));
    }

    /*
     * (non-Javadoc)
     * @see
     * de.dal33t.powerfolder.ui.information.folder.members.MembersTab#getUIComponent
     * ()
     */
    public JPanel getUIComponent() {
        if (uiComponent == null) {
            initialize();
            buildUIComponent();
        }
        return uiComponent;
    }

    public void initialize() {
        inviteAction = new MyInviteAction();

        membersTable = new MembersSimpleTable(model);
        membersTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        membersTable.getSelectionModel().addListSelectionListener(new MySelectionListener());
        scrollPane = new JScrollPane(membersTable);

        // Whitestrip
        UIUtil.whiteStripTable(membersTable);
        UIUtil.removeBorder(scrollPane);
        UIUtil.setZeroHeight(scrollPane);

        enableOnSelection();

        model.getRefreshingModel().addValueChangeListener(new PropertyChangeListener() {
            public void propertyChange(PropertyChangeEvent evt) {
                boolean refreshing = (Boolean) evt.getNewValue();
                boolean permissionsRetrieved = model.isPermissionsRetrieved();
                // Cancel edit of current cell
                membersTable.cancelCellEditing();
                boolean enabled = !refreshing && permissionsRetrieved;
                FolderInfo folderInfo = model.getFolderInfo();
                if (folderInfo != null) {
                    boolean admin = getController().getOSClient().getAccount().hasAdminPermission(folderInfo);
                    enabled = enabled && admin;
                }
            }
        });
    }

    /**
     * Bulds the ui component.
     */
    private void buildUIComponent() {
        FormLayout layout = new FormLayout("3dlu, fill:pref:grow, 3dlu",
                "3dlu, pref, 3dlu, pref , 3dlu, fill:0:grow, 3dlu, pref");
        PanelBuilder builder = new PanelBuilder(layout);
        CellConstraints cc = new CellConstraints();
        builder.add(createToolBar(), cc.xy(2, 2));
        builder.addSeparator(null, cc.xyw(1, 4, 3));
        builder.add(scrollPane, cc.xy(2, 6));
        uiComponent = builder.getPanel();
    }

    /**
     * @return the toolbar
     */
    private JPanel createToolBar() {
        JButton inviteButton = new JButton(inviteAction);

        FormLayout layout = new FormLayout("0:grow", "pref");
        PanelBuilder builder = new PanelBuilder(layout);
        CellConstraints cc = new CellConstraints();

        enableOnSelection();

        ButtonBarBuilder bar = ButtonBarBuilder.createLeftToRightBuilder();
        if (ConfigurationEntry.SERVER_INVITE_ENABLED.getValueBoolean(getController())) {
            bar.addGridded(inviteButton);
        }
        JPanel buttonBarPanel = bar.getPanel();

        layout = new FormLayout("pref, 0:grow, pref", "pref");
        builder = new PanelBuilder(layout);
        cc = new CellConstraints();
        builder.add(buttonBarPanel, cc.xy(1, 1));
        builder.add(Help.createWikiLinkButton(getController(), WikiLinks.SECURITY_PERMISSION), cc.xy(3, 1));

        return builder.getPanel();
    }

    /**
     * Enable the invite action on the table selection.
     */
    private void enableOnSelection() {
    }

    private static JComboBox createdEditComboBox(SelectionInList<FolderPermission> folderPermissions) {
        return BasicComponentFactory.createComboBox(folderPermissions, new DefaultListCellRenderer() {
            @Override
            public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
                    boolean cellHasFocus) {
                Component comp = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
                if (value instanceof FolderPermission) {
                    setText(((FolderPermission) value).getName());
                } else {
                    setText(Translation.getTranslation("permissions.folder.no_access"));
                }
                return comp;
            }
        });
    }

    // /////////////////
    // Inner Classes //
    // /////////////////

    /**
     * Class to detect table selection changes.
     */
    private class MySelectionListener implements ListSelectionListener {
        public void valueChanged(ListSelectionEvent e) {
            enableOnSelection();
        }
    }

    // Action to invite friend.
    private class MyInviteAction extends BaseAction {

        private MyInviteAction() {
            super("action_invite_friend", MembersSimpleTab.this.getController());
            setIcon(null);
        }

        public void actionPerformed(ActionEvent e) {
            PFWizard.openSendInvitationWizard(getController(), model.getFolderInfo());
            model.refreshModel();
        }
    }
}