com.maydesk.base.gui.user.DlgAddFriend.java Source code

Java tutorial

Introduction

Here is the source code for com.maydesk.base.gui.user.DlgAddFriend.java

Source

/* This file is part of the MayDesk project.
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. 
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.*/

package com.maydesk.base.gui.user;

import static com.maydesk.base.util.SopletsResourceBundle.nls;

import java.util.ArrayList;
import java.util.List;

import nextapp.echo.app.Component;
import nextapp.echo.app.Extent;
import nextapp.echo.app.ImageReference;
import nextapp.echo.app.Label;
import nextapp.echo.app.SplitPane;
import nextapp.echo.app.Table;
import nextapp.echo.app.event.ActionEvent;
import nextapp.echo.app.event.ActionListener;
import nextapp.echo.app.list.DefaultListSelectionModel;
import nextapp.echo.app.list.ListSelectionModel;
import nextapp.echo.app.table.DefaultTableColumnModel;
import nextapp.echo.app.table.TableCellRenderer;
import nextapp.echo.app.table.TableColumn;

import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;
import org.jivesoftware.smackx.packet.VCard;

import com.maydesk.base.PDApplicationInstance;
import com.maydesk.base.PDDesktop;
import com.maydesk.base.PDHibernateFactory;
import com.maydesk.base.PDUserSession;
import com.maydesk.base.gui.PDOkCancelDialog;
import com.maydesk.base.model.MAvatar;
import com.maydesk.base.model.MUser;
import com.maydesk.base.sop.gui.PDBeanTerms;
import com.maydesk.base.sop.logical.SopUser;
import com.maydesk.base.table.BaseTableModel;
import com.maydesk.base.table.PDTable;
import com.maydesk.base.util.PDUtil;
import com.maydesk.base.widgets.PDButton;
import com.maydesk.base.widgets.PDGrid;
import com.maydesk.base.widgets.PDTextField;

/**
 * @author Alejandro Salas <br>
 *         Created on Oct 11, 2012
 */
public class DlgAddFriend extends PDOkCancelDialog {

    private PDTextField txtJabberId;
    private PDTextField txtFirstName;
    private PDTextField txtLastName;
    private PDButton btnSearch;
    private PDTable tblFriends;

    public DlgAddFriend() {
        super(PDBeanTerms.Add_friend, 350, 410);
        initGUI();
    }

    private void initGUI() {
        PDGrid grid = new PDGrid(2);
        pnlMainContainer.add(grid);

        ActionListener listener = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent evt) {
                btnSearchClicked();
            }
        };

        grid.addLabel(SopUser.jabberId);
        txtJabberId = new PDTextField();
        PDApplicationInstance.getActivePD().setFocusedComponent(txtJabberId);
        txtJabberId.addActionListener(listener);
        grid.addFill(txtJabberId);

        grid.addLabel(SopUser.firstName);
        txtFirstName = new PDTextField();
        txtFirstName.addActionListener(listener);
        grid.addFill(txtFirstName);

        grid.addLabel(SopUser.lastName);
        txtLastName = new PDTextField();
        txtLastName.addActionListener(listener);
        grid.addFill(txtLastName);

        grid.addLabel("");
        btnSearch = new PDButton(nls(PDBeanTerms.Search));
        btnSearch.addActionListener(listener);
        grid.addFill(btnSearch);

        UserTableModel userTableModel = new UserTableModel();
        tblFriends = new PDTable(userTableModel, userTableModel.getColumnModel());
        tblFriends.setSelectionEnabled(true);

        DefaultListSelectionModel selectionModel = new DefaultListSelectionModel();
        selectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        tblFriends.setSelectionModel(selectionModel);
        pnlMainContainer.add(tblFriends);
    }

    @Override
    protected Component getMainContainer() {
        SplitPane splitPane = new SplitPane(SplitPane.ORIENTATION_VERTICAL_TOP_BOTTOM);
        splitPane.setSeparatorPosition(new Extent(100));
        return splitPane;
    }

    private void btnSearchClicked() {
        Criteria criteria = PDHibernateFactory.getSession().createCriteria(MUser.class);

        if (!PDUtil.isEmpty(txtJabberId.getText())) {
            criteria.add(Restrictions.like("jabberId", ("%" + txtJabberId.getText() + "%")));
        }

        List<MUser> userList = criteria.list();
        List<UserEntry> entryList = new ArrayList<UserEntry>();
        for (MUser user : userList) {
            VCard vCard = PDUserSession.getInstance().getVCard(user.getJabberId());

            String txt = txtFirstName.getText();
            if (!PDUtil.isEmpty(txt) && !vCard.getFirstName().contains(txt)) {
                continue;
            }

            txt = txtLastName.getText();
            if (!PDUtil.isEmpty(txt) && !vCard.getLastName().contains(txt)) {
                continue;
            }

            entryList.add(new UserEntry(user, vCard));
        }
        ((UserTableModel) tblFriends.getModel()).setItemList(entryList);
    }

    @Override
    protected boolean onOkClicked() {
        if (tblFriends.getSelectionModel().isSelectionEmpty()) {
            return true;
        }

        int selectedIndex = tblFriends.getSelectionModel().getMinSelectedIndex();
        UserEntry entry = ((UserTableModel) tblFriends.getModel()).getItem(selectedIndex);

        MAvatar avatar = new MAvatar();
        avatar.setPositionX(350);
        avatar.setPositionY(40);
        avatar.setPerson(entry.user);
        avatar.setOwner(PDUserSession.getInstance().getUser());
        PDHibernateFactory.getSession().save(avatar);
        PDDesktop.getInstance().addAvatar(avatar);

        return true;
    }

    class UserEntry {
        private MUser user;
        private VCard vCard;

        private UserEntry(MUser user, VCard vCard) {
            this.user = user;
            this.vCard = vCard;
        }
    }

    class UserTableModel extends BaseTableModel<UserEntry> {

        @Override
        protected void initColumnModel() {
            columnModel = new DefaultTableColumnModel();
            TableColumn column;

            int i = -1;

            column = new TableColumn(++i);
            column.setHeaderValue("");
            column.setWidth(new Extent(100, Extent.PERCENT));
            column.setCellRenderer(new TableCellRenderer() {

                @Override
                public Component getTableCellRendererComponent(Table arg0, Object obj, int arg2, int arg3) {
                    VCard vCard = ((UserEntry) obj).vCard;
                    String txt = null;
                    if (PDUtil.isEmpty(vCard.getFirstName())) {
                        txt = vCard.getJabberId();
                    } else {
                        txt = vCard.getFirstName();
                        txt += !PDUtil.isEmpty(vCard.getLastName()) ? " " + vCard.getLastName() : "";
                        txt += !PDUtil.isEmpty(vCard.getJabberId()) ? "/" + vCard.getJabberId() : "";
                    }

                    ImageReference img = PDUserSession.getInstance().getImage(vCard, vCard.getJabberId(), 60);
                    return new Label(txt, img);
                }
            });
            columnModel.addColumn(column);
        }

        @Override
        public Object getValueAt(int col, int row) {
            return itemList.get(row);
        }
    }
}