com.hangum.tadpole.manager.core.dialogs.auth.AdminComposite.java Source code

Java tutorial

Introduction

Here is the source code for com.hangum.tadpole.manager.core.dialogs.auth.AdminComposite.java

Source

/*******************************************************************************
 * Copyright (c) 2012 Cho Hyun Jong.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 *     Cho Hyun Jong - initial API and implementation
 ******************************************************************************/
package com.hangum.tadpole.manager.core.dialogs.auth;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.TreeViewerColumn;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
import org.eclipse.swt.widgets.Tree;

import com.hangum.tadpole.dao.system.UserDBDAO;
import com.hangum.tadpole.dao.system.ext.UserGroupAUserDAO;
import com.hangum.tadpole.define.Define;
import com.hangum.tadpole.manager.core.Activator;
import com.hangum.tadpole.manager.core.dialogs.users.ModifyUserDialog;
import com.hangum.tadpole.manager.core.dialogs.users.NewUserDialog;
import com.hangum.tadpole.session.manager.SessionManager;
import com.hangum.tadpole.system.TadpoleSystem_UserDBQuery;
import com.hangum.tadpole.system.TadpoleSystem_UserQuery;
import com.swtdesigner.ResourceManager;

/**
 *   ? ui
 * 
 * @author hangum
 *
 */
public class AdminComposite extends Composite {
    /**
     * Logger for this class
     */
    private static final Logger logger = Logger.getLogger(AdminComposite.class);
    private TreeViewer treeViewerAdmin;
    private Tree treeAdmin;

    private AdminCompFilter filter;
    private Text textSearch;

    /**
     * Create the composite.
     * @param parent
     * @param style
     */
    public AdminComposite(Composite parent, int style) {
        super(parent, style);
        GridLayout gridLayout = new GridLayout(1, false);
        gridLayout.verticalSpacing = 2;
        gridLayout.horizontalSpacing = 2;
        gridLayout.marginHeight = 2;
        gridLayout.marginWidth = 2;
        setLayout(gridLayout);

        Composite compositeHead = new Composite(this, SWT.NONE);
        GridLayout gl_compositeHead = new GridLayout(2, false);
        gl_compositeHead.verticalSpacing = 2;
        gl_compositeHead.horizontalSpacing = 2;
        gl_compositeHead.marginHeight = 2;
        gl_compositeHead.marginWidth = 2;
        compositeHead.setLayout(gl_compositeHead);
        compositeHead.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));

        ToolBar toolBar = new ToolBar(compositeHead, SWT.FLAT | SWT.RIGHT);
        toolBar.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));

        ToolItem tltmRefresh = new ToolItem(toolBar, SWT.NONE);
        tltmRefresh.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                treeViewerAdmin.setInput(initData());
            }
        });
        tltmRefresh.setText("Refresh");

        final ToolItem tltmAdd = new ToolItem(toolBar, SWT.NONE);
        tltmAdd.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                NewUserDialog dialog = new NewUserDialog(getShell());
                dialog.open();
            }
        });
        tltmAdd.setText("Add");

        ToolItem tltmModify = new ToolItem(toolBar, SWT.NONE);
        tltmModify.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {

                IStructuredSelection ss = (IStructuredSelection) treeViewerAdmin.getSelection();
                if (ss != null) {
                    ModifyUserDialog dialog = new ModifyUserDialog(getShell(),
                            (UserGroupAUserDAO) ss.getFirstElement());
                    if (Dialog.OK == dialog.open())
                        treeViewerAdmin.setInput(initData());
                } // if ss            
            }
        });
        tltmModify.setText("Modify");

        Label lblSearch = new Label(compositeHead, SWT.NONE);
        lblSearch.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
        lblSearch.setText("Search");

        textSearch = new Text(compositeHead, SWT.BORDER);
        textSearch.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
        textSearch.addKeyListener(new KeyAdapter() {
            public void keyReleased(KeyEvent e) {
                filter.setSearchString(textSearch.getText());
                treeViewerAdmin.refresh();
            }
        });

        Composite compositeBody = new Composite(this, SWT.NONE);
        GridLayout gl_compositeBody = new GridLayout(1, false);
        gl_compositeBody.verticalSpacing = 2;
        gl_compositeBody.horizontalSpacing = 2;
        gl_compositeBody.marginHeight = 2;
        gl_compositeBody.marginWidth = 2;
        compositeBody.setLayout(gl_compositeBody);
        compositeBody.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));

        treeViewerAdmin = new TreeViewer(compositeBody, SWT.BORDER | SWT.FULL_SELECTION | SWT.VIRTUAL);
        treeAdmin = treeViewerAdmin.getTree();
        treeAdmin.setLinesVisible(true);
        treeAdmin.setHeaderVisible(true);
        treeAdmin.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));

        TreeViewerColumn colGroupName = new TreeViewerColumn(treeViewerAdmin, SWT.NONE);
        colGroupName.getColumn().setWidth(130);
        colGroupName.getColumn().setText("Group Name");

        TreeViewerColumn colUserType = new TreeViewerColumn(treeViewerAdmin, SWT.NONE);
        colUserType.getColumn().setWidth(100);
        colUserType.getColumn().setText("User/DB Type");

        TreeViewerColumn colEmail = new TreeViewerColumn(treeViewerAdmin, SWT.NONE);
        colEmail.getColumn().setWidth(200);
        colEmail.getColumn().setText("email/DB Name");

        TreeViewerColumn colName = new TreeViewerColumn(treeViewerAdmin, SWT.NONE);
        colName.getColumn().setWidth(150);
        colName.getColumn().setText("Name/DB Info");

        TreeViewerColumn colApproval = new TreeViewerColumn(treeViewerAdmin, SWT.NONE);
        colApproval.getColumn().setWidth(60);
        colApproval.getColumn().setText("Approval");

        TreeViewerColumn colDelete = new TreeViewerColumn(treeViewerAdmin, SWT.NONE);
        colDelete.getColumn().setWidth(60);
        colDelete.getColumn().setText("Delete");

        TreeViewerColumn colCreateTime = new TreeViewerColumn(treeViewerAdmin, SWT.NONE);
        colCreateTime.getColumn().setWidth(120);
        colCreateTime.getColumn().setText("Create tiem");

        treeViewerAdmin.setContentProvider(new AdminUserContentProvider());
        treeViewerAdmin.setLabelProvider(new AdminUserLabelProvider());
        treeViewerAdmin.setInput(initData());
        treeViewerAdmin.expandToLevel(2);

        filter = new AdminCompFilter();
        treeViewerAdmin.addFilter(filter);
    }

    /**
     * ??  .
     * @return
     */
    private UserGroupAUserDAO initData() {
        UserGroupAUserDAO rootUserGroup = new UserGroupAUserDAO();
        Map<Integer, UserGroupAUserDAO> groupHash = new HashMap<Integer, UserGroupAUserDAO>();

        try {
            // ??  
            List<UserGroupAUserDAO> listUserGroup = new ArrayList<UserGroupAUserDAO>();
            // ? ?   
            if (Define.USER_TYPE.MANAGER.toString().equals(SessionManager.getLoginType())) {
                listUserGroup = TadpoleSystem_UserQuery.getUserListPermission(SessionManager.getGroupSeq());
                // admin 
            } else {
                listUserGroup = TadpoleSystem_UserQuery.getUserListPermission();
            }
            // ??           

            // Manager 
            UserGroupAUserDAO managerGroupAUserDAO = null;
            for (UserGroupAUserDAO userGroupAUserDAO : listUserGroup) {
                if (Define.USER_TYPE.MANAGER.toString().equals(userGroupAUserDAO.getUser_type())) {
                    rootUserGroup.child.add(userGroupAUserDAO);
                    groupHash.put(userGroupAUserDAO.getGroup_seq(), userGroupAUserDAO);
                    managerGroupAUserDAO = userGroupAUserDAO;
                }
            }

            // ? ?  .
            List<UserDBDAO> userDBs = TadpoleSystem_UserDBQuery.getSpecificUserDB(managerGroupAUserDAO.getSeq());
            for (UserDBDAO userDBDAO : userDBs) {
                rootUserGroup.child.add(userDBDAO);
            }

            //     .
            if (Define.USER_TYPE.MANAGER.toString().equals(SessionManager.getLoginType())) {
                // use 
                for (UserGroupAUserDAO userGroupAUserDAO : listUserGroup) {
                    if (Define.USER_TYPE.USER.toString().equals(userGroupAUserDAO.getUser_type())) {
                        UserGroupAUserDAO groupUserDAO = groupHash.get(userGroupAUserDAO.getGroup_seq());

                        userGroupAUserDAO.setParent(groupUserDAO);
                        groupUserDAO.child.add(userGroupAUserDAO);
                    }
                }
            }

            return rootUserGroup;
        } catch (Exception e) {
            logger.error("user list", e);
        }

        return null;
    }

    @Override
    protected void checkSubclass() {
        // Disable the check that prevents subclassing of SWT components
    }
}

class AdminUserContentProvider implements ITreeContentProvider {
    private static final Logger logger = Logger.getLogger(AdminUserContentProvider.class);

    @Override
    public void dispose() {
    }

    @Override
    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
    }

    @Override
    public Object[] getElements(Object inputElement) {

        if (inputElement instanceof UserDBDAO) {
            return ((List<UserDBDAO>) inputElement).toArray();
        } else if (inputElement instanceof UserGroupAUserDAO) {
            return ((UserGroupAUserDAO) inputElement).child.toArray();
        }

        return null;
    }

    @Override
    public Object[] getChildren(Object parentElement) {
        return getElements(parentElement);
    }

    @Override
    public Object getParent(Object element) {
        if (element == null) {
            return null;
        }

        return ((UserGroupAUserDAO) element).parent;
    }

    @Override
    public boolean hasChildren(Object element) {
        if (element instanceof ArrayList) {
            return ((ArrayList) element).size() > 0;
        } else if (element instanceof UserGroupAUserDAO) {
            return ((UserGroupAUserDAO) element).child.size() > 0;
        }

        return false;
    }

}

/**
 *   ? 
 * 
 * @author hangum
 *
 */
class AdminUserLabelProvider extends LabelProvider implements ITableLabelProvider {
    private static final Logger logger = Logger.getLogger(AdminUserLabelProvider.class);

    @Override
    public Image getColumnImage(Object element, int columnIndex) {
        if (element instanceof UserDBDAO) {
            if (columnIndex == 0)
                return ResourceManager.getPluginImage(Activator.PLUGIN_ID, "resources/icons/db.png"); //$NON-NLS-1$
        } else {
            if (columnIndex == 0)
                return ResourceManager.getPluginImage(Activator.PLUGIN_ID, "resources/icons/user.png"); //$NON-NLS-1$
        }
        return null;
    }

    @Override
    public String getColumnText(Object element, int columnIndex) {

        if (element instanceof UserDBDAO) {

            UserDBDAO userDB = (UserDBDAO) element;
            switch (columnIndex) {
            case 0:
                return "";
            case 1:
                return userDB.getTypes();
            case 2:
                return userDB.getDisplay_name();
            case 3:
                if (userDB.getHost() == null)
                    return "";
                return userDB.getHost() + ":" + userDB.getPort();
            case 4:
                return "";
            case 5:
                return "";
            case 6:
                return "";
            }

        } else if (element instanceof UserGroupAUserDAO) {

            UserGroupAUserDAO user = (UserGroupAUserDAO) element;

            switch (columnIndex) {
            case 0:
                if (Define.USER_TYPE.MANAGER.toString().equals(user.getUser_type())) {
                    return user.getUser_group_name();
                } else {
                    return "";
                }

            case 1:
                return user.getUser_type();
            case 2:
                return user.getEmail();
            case 3:
                return user.getName();
            case 4:
                return user.getApproval_yn();
            case 5:
                return user.getDelYn();
            case 6:
                return user.getCreate_time();
            }
        }

        return "*** not set column ***";
    }

}

/**
 * admin composite filter
 * 
 * @author hangum
 *
 */
class AdminCompFilter extends ViewerFilter {
    String searchString;

    public void setSearchString(String s) {
        this.searchString = ".*" + s + ".*";
    }

    @Override
    public boolean select(Viewer viewer, Object parentElement, Object element) {

        if (searchString == null || searchString.length() == 0) {
            return true;
        }

        if (element instanceof UserDBDAO) {
            UserDBDAO userDB = (UserDBDAO) element;
            if (userDB.getTypes().matches(searchString))
                return true;
            if (userDB.getDisplay_name().matches(searchString))
                return true;
            if (userDB.getHost() != null)
                if (userDB.getHost().matches(searchString))
                    return true;
            if (userDB.getPort() != null)
                if (userDB.getPort().matches(searchString))
                    return true;

        } else if (element instanceof UserGroupAUserDAO) {

            UserGroupAUserDAO user = (UserGroupAUserDAO) element;
            if (user.getUser_group_name().matches(searchString))
                return true;
            if (user.getUser_type().matches(searchString))
                return true;

            if (user.getUser_type().matches(searchString))
                return true;
            if (user.getEmail().matches(searchString))
                return true;
            if (user.getName().matches(searchString))
                return true;
            if (user.getApproval_yn().matches(searchString))
                return true;
        }

        return false;
    }

}