org.jboss.as.console.client.teiid.runtime.VDBSessionsTab.java Source code

Java tutorial

Introduction

Here is the source code for org.jboss.as.console.client.teiid.runtime.VDBSessionsTab.java

Source

/* 
 * JBoss, Home of Professional Open Source 
 * Copyright 2011 Red Hat Inc. and/or its affiliates and other contributors
 * as indicated by the @author tags. All rights reserved. 
 * See the copyright.txt in the distribution for a 
 * full listing of individual contributors.
 *
 * This copyrighted material is made available to anyone wishing to use, 
 * modify, copy, or redistribute it subject to the terms and conditions 
 * of the GNU Lesser General Public License, v. 2.1. 
 * This program is distributed in the hope that it will be useful, but WITHOUT A 
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A 
 * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details. 
 * You should have received a copy of the GNU Lesser General Public License, 
 * v.2.1 along with this distribution; if not, write to the Free Software 
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
 * MA  02110-1301, USA.
 */
package org.jboss.as.console.client.teiid.runtime;

import java.util.Comparator;
import java.util.Date;
import java.util.List;

import org.jboss.as.console.client.teiid.model.Session;
import org.jboss.as.console.client.teiid.model.VDB;
import org.jboss.as.console.client.teiid.runtime.VDBView.TableSelectionCallback;
import org.jboss.ballroom.client.widgets.common.DefaultButton;
import org.jboss.ballroom.client.widgets.forms.Form;
import org.jboss.ballroom.client.widgets.forms.TextItem;
import org.jboss.ballroom.client.widgets.tables.DefaultCellTable;
import org.jboss.ballroom.client.widgets.tables.DefaultPager;

import com.google.gwt.cell.client.ButtonCell;
import com.google.gwt.cell.client.FieldUpdater;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.i18n.client.TimeZone;
import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.cellview.client.ColumnSortEvent.ListHandler;
import com.google.gwt.user.cellview.client.TextColumn;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.view.client.ListDataProvider;
import com.google.gwt.view.client.ProvidesKey;
import com.google.gwt.view.client.SingleSelectionModel;

@SuppressWarnings("nls")
public class VDBSessionsTab extends VDBProvider {
    private VDBPresenter presenter;
    private ListDataProvider<Session> sessionProvider = new ListDataProvider<Session>();
    private DefaultCellTable sessionTable;
    static DateTimeFormat dtf = DateTimeFormat.getFormat("MM/dd/yy HH:mm:ss");

    public VDBSessionsTab(VDBPresenter presenter) {
        this.presenter = presenter;
    }

    @Override
    public VerticalPanel getPanel(DefaultCellTable vdbTable) {
        DefaultButton refreshBtn = new DefaultButton("Refresh", new ClickHandler() {
            @Override
            public void onClick(ClickEvent arg0) {
                refresh();
            }
        });

        ListHandler<Session> sortHandler = new ListHandler<Session>(this.sessionProvider.getList());
        this.sessionTable = getSessionTable(sortHandler);
        this.sessionProvider.addDataDisplay(this.sessionTable);

        VDBView.onTableSectionChange(vdbTable, new TableSelectionCallback<VDB>() {
            @Override
            public void onSelectionChange(VDB selection) {
                if (selection != null && isActive(selection)) {
                    setVdbName(selection.getName());
                    setVdbVersion(selection.getVersion());
                    refresh();
                } else {
                    sessionProvider.getList().clear();
                }
            }
        });
        DefaultPager sessionTablePager = new DefaultPager();
        sessionTablePager.setDisplay(this.sessionTable);

        final Form<Session> form = new Form<Session>(Session.class);
        form.setNumColumns(1);
        form.setEnabled(false);

        TextItem clientHostNameLabel = new TextItem("clientHostName", "Client Host Name");
        TextItem clientHostAddressLabel = new TextItem("clientHardwareAddress", "Client Hardware Address");
        TextItem ipAddressLabel = new TextItem("iPAddress", "IP Address");
        TextItem securityDomainLabel = new TextItem("securityDomain", "Security Domain");

        form.setFields(clientHostNameLabel, clientHostAddressLabel, ipAddressLabel, securityDomainLabel);
        form.bind(this.sessionTable);

        DefaultButton terminateAllBtn = new DefaultButton("Terminate All", new ClickHandler() {
            @Override
            public void onClick(ClickEvent arg0) {
                terminateAll();
            }
        });

        // build overall panel
        VerticalPanel formPanel = new VerticalPanel();
        formPanel.add(refreshBtn);
        formPanel.add(this.sessionTable.asWidget());
        formPanel.add(sessionTablePager);
        formPanel.add(terminateAllBtn);
        formPanel.add(form);
        formPanel.setCellHorizontalAlignment(refreshBtn, HasHorizontalAlignment.ALIGN_RIGHT);
        formPanel.setCellHorizontalAlignment(terminateAllBtn, HasHorizontalAlignment.ALIGN_RIGHT);

        return formPanel;
    }

    private DefaultCellTable getSessionTable(ListHandler<Session> sortHandler) {
        ProvidesKey<Session> keyProvider = new ProvidesKey<Session>() {
            @Override
            public Object getKey(Session item) {
                return item.getSessionId();
            }
        };

        final DefaultCellTable table = new DefaultCellTable<Session>(20, keyProvider);
        table.addColumnSortHandler(sortHandler);

        TextColumn<Session> idColumn = new TextColumn<Session>() {
            @Override
            public String getValue(Session record) {
                return record.getSessionId();
            }
        };
        idColumn.setSortable(true);
        sortHandler.setComparator(idColumn, new Comparator<Session>() {
            @Override
            public int compare(Session o1, Session o2) {
                return o1.getSessionId().compareTo(o2.getSessionId());
            }
        });

        TextColumn<Session> userNameColumn = new TextColumn<Session>() {
            @Override
            public String getValue(Session record) {
                return String.valueOf(record.getUserName());
            }
        };
        userNameColumn.setSortable(true);
        sortHandler.setComparator(userNameColumn, new Comparator<Session>() {
            @Override
            public int compare(Session o1, Session o2) {
                return o1.getUserName().compareTo(o2.getUserName());
            }
        });

        TextColumn<Session> createdColumn = new TextColumn<Session>() {
            @Override
            public String getValue(Session record) {
                return dtf.format(new Date(record.getCreatedTime()), TimeZone.createTimeZone(0));
            }
        };
        createdColumn.setSortable(true);
        sortHandler.setComparator(createdColumn, new Comparator<Session>() {
            @Override
            public int compare(Session o1, Session o2) {
                return o1.getCreatedTime().compareTo(o2.getCreatedTime());
            }
        });

        TextColumn<Session> lastPingColumn = new TextColumn<Session>() {
            @Override
            public String getValue(Session record) {
                return dtf.format(new Date(Long.parseLong(record.getLastPingTime())), TimeZone.createTimeZone(0));
            }
        };
        lastPingColumn.setSortable(true);
        sortHandler.setComparator(lastPingColumn, new Comparator<Session>() {
            @Override
            public int compare(Session o1, Session o2) {
                return o1.getLastPingTime().compareTo(o2.getLastPingTime());
            }
        });

        TextColumn<Session> applicationNameColumn = new TextColumn<Session>() {
            @Override
            public String getValue(Session record) {
                return record.getApplicationName();
            }
        };
        applicationNameColumn.setSortable(true);
        sortHandler.setComparator(applicationNameColumn, new Comparator<Session>() {
            @Override
            public int compare(Session o1, Session o2) {
                return o1.getApplicationName().compareTo(o2.getApplicationName());
            }
        });

        Column<Session, String> terminateBtn = new Column<Session, String>(new ButtonCell()) {
            @Override
            public String getValue(Session record) {
                return "Terminate";
            }
        };
        terminateBtn.setFieldUpdater(new FieldUpdater<Session, String>() {
            @Override
            public void update(int index, Session session, String value) {
                terminate(session);
            }
        });

        table.setSelectionModel(new SingleSelectionModel<Session>(keyProvider));

        table.setTitle("Sessions");
        table.addColumn(idColumn, "Session Id");
        table.addColumn(userNameColumn, "User");
        table.addColumn(createdColumn, "Created");
        table.addColumn(lastPingColumn, "Last Ping");
        table.addColumn(applicationNameColumn, "Application");
        table.addColumn(terminateBtn, "Terminate");

        // sets initial sorting
        table.getColumnSortList().push(idColumn);

        return table;
    }

    public void setSessions(List<Session> sessions) {
        if (sessions != null && !sessions.isEmpty()) {
            this.sessionProvider.getList().clear();
            this.sessionProvider.getList().addAll(sessions);
            this.sessionTable.getSelectionModel().setSelected(sessions.get(0), true);
        } else {
            this.sessionProvider.getList().clear();
        }
    }

    private void refresh() {
        presenter.getSessions(getVdbName(), getVdbVersion());
    }

    private void terminate(Session session) {
        presenter.terminateSession(session);
    }

    public void terminateSubmitted(Session session) {
        refresh();
    }

    private void terminateAll() {
        for (Session s : this.sessionProvider.getList()) {
            terminate(s);
        }
    }
}