Package org.jboss.as.console.client.shared.subsys.jca

Source Code of org.jboss.as.console.client.shared.subsys.jca.ThreadPoolEditor

package org.jboss.as.console.client.shared.subsys.jca;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.cellview.client.TextColumn;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.view.client.ListDataProvider;
import com.google.gwt.view.client.SelectionChangeEvent;
import com.google.gwt.view.client.SingleSelectionModel;
import org.jboss.as.console.client.Console;
import org.jboss.as.console.client.shared.properties.PropertyEditor;
import org.jboss.as.console.client.shared.subsys.jca.model.JcaWorkmanager;
import org.jboss.as.console.client.shared.subsys.jca.model.WorkmanagerPool;
import org.jboss.as.console.client.shared.viewframework.builder.FormLayout;
import org.jboss.as.console.client.shared.viewframework.builder.MultipleToOneLayout;
import org.jboss.as.console.client.widgets.forms.FormToolStrip;
import org.jboss.ballroom.client.widgets.forms.CheckBoxItem;
import org.jboss.ballroom.client.widgets.forms.Form;
import org.jboss.ballroom.client.widgets.forms.NumberBoxItem;
import org.jboss.ballroom.client.widgets.forms.TextBoxItem;
import org.jboss.ballroom.client.widgets.forms.TextItem;
import org.jboss.ballroom.client.widgets.tables.DefaultCellTable;
import org.jboss.ballroom.client.widgets.tools.ToolButton;
import org.jboss.ballroom.client.widgets.tools.ToolStrip;
import org.jboss.ballroom.client.widgets.window.Feedback;

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


/**
* @author Heiko Braun
* @date 11/30/11
*/
public class ThreadPoolEditor {

    private DefaultCellTable<WorkmanagerPool> table;
    private ListDataProvider<WorkmanagerPool> dataProvider;
    private Form<WorkmanagerPool> sizingForm;
    private Form<WorkmanagerPool> attributesForm;
    private PropertyEditor propertyEditor;

    private JcaPresenter presenter;
    private String contextName;
    private Label headline;

    private JcaWorkmanager currentManager;

    private ToolButton add,remove;

    public ThreadPoolEditor(JcaPresenter presenter) {
        this.presenter = presenter;
    }

    Widget asWidget() {
        table = new DefaultCellTable<WorkmanagerPool>(10);

        dataProvider = new ListDataProvider<WorkmanagerPool>();
        dataProvider.addDataDisplay(table);

        TextColumn<WorkmanagerPool> name = new TextColumn<WorkmanagerPool>() {
            @Override
            public String getValue(WorkmanagerPool record) {
                return record.getName();
            }
        };

        TextColumn<WorkmanagerPool> type = new TextColumn<WorkmanagerPool>() {
            @Override
            public String getValue(WorkmanagerPool record) {

                String type = record.isShortRunning() ? "short-running" : "long-runnig";
                return type;
            }
        };

        TextColumn<WorkmanagerPool> size = new TextColumn<WorkmanagerPool>() {
                   @Override
                   public String getValue(WorkmanagerPool record) {
                       return String.valueOf(record.getMaxThreadsCount());
                   }
               };


        table.addColumn(name, "Name");
        table.addColumn(type, "Type");
        table.addColumn(size, "Max Threads");

        ToolStrip topLevelTools = new ToolStrip();
        add = new ToolButton("Add", new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {

                presenter.launchNewPoolDialoge(currentManager);
            }
        });
        topLevelTools.addToolButtonRight(add);

        remove = new ToolButton("Remove", new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {

                final SingleSelectionModel<WorkmanagerPool> selectionModel = (SingleSelectionModel<WorkmanagerPool>) table.getSelectionModel();
                final WorkmanagerPool pool = selectionModel.getSelectedObject();

                if (pool.isShortRunning()) {
                    Console.error("Pool cannot be removed", "A short running pool is mandatory!");
                } else {

                    Feedback.confirm(
                            "Remove Pool Configuration",
                            "Really remove this pool configuration?",
                            new Feedback.ConfirmationHandler() {
                                @Override
                                public void onConfirmation(boolean isConfirmed) {
                                    if (isConfirmed) {
                                        presenter.onRemovePoolConfig(
                                                contextName, pool
                                        );
                                    }
                                }
                            });
                }
            }
        });
        topLevelTools.addToolButtonRight(remove);

        // ---

        attributesForm = new Form<WorkmanagerPool>(WorkmanagerPool.class);
        attributesForm.setNumColumns(2);
        attributesForm.setEnabled(false);

        TextItem nameItem = new TextItem("name", "Name");
        CheckBoxItem blocking = new CheckBoxItem ("blocking", "Is Blocking?");
        CheckBoxItem allowCore = new CheckBoxItem ("allowCoreTimeout", "Allow Core Timeout?");
        NumberBoxItem keepAliveTimeout = new NumberBoxItem("keepaliveTimeout", "Keep Alive Timeout (ms)") {
            {
                isRequired = false;
            }
        };
        TextBoxItem threadFactory = new TextBoxItem("threadFactory", "Thread Factory") {
            {
                isRequired = false;
            }
        };
        TextBoxItem handoff = new TextBoxItem("handoffExecutor", "Handoff Executor") {
            {
                isRequired = false;
            }
        };

        attributesForm.setFields(nameItem, keepAliveTimeout, blocking, allowCore, threadFactory, handoff);

        // ---


        sizingForm = new Form<WorkmanagerPool>(WorkmanagerPool.class);
        sizingForm.setNumColumns(2);
        sizingForm.setEnabled(false);

        NumberBoxItem maxThreads = new NumberBoxItem("maxThreadsCount", "Max Threads");
        NumberBoxItem maxThreadsPerCPU = new NumberBoxItem("maxThreadsPerCPU", "Max Threads/CPU");
        NumberBoxItem queueLength = new NumberBoxItem("queueLengthCount", "Queue Length");
        NumberBoxItem queueLengthPerCPU = new NumberBoxItem("queueLengthPerCPU", "Queue Length/CPU");

        sizingForm.setFields(nameItem, maxThreads, maxThreadsPerCPU, queueLength, queueLengthPerCPU);

        attributesForm.bind(table);
        sizingForm.bind(table);

        FormToolStrip<WorkmanagerPool> sizingTools = new FormToolStrip<WorkmanagerPool>(
                sizingForm,
                new FormToolStrip.FormCallback<WorkmanagerPool>() {
                    @Override
                    public void onSave(Map<String, Object> changeset) {
                        presenter.onSavePoolConfig(
                                contextName,
                                attributesForm.getEditedEntity(),
                                changeset
                        );
                    }

                    @Override
                    public void onDelete(WorkmanagerPool entity) {

                    }
                }
        );
        sizingTools.providesDeleteOp(false);

        FormToolStrip<WorkmanagerPool> attributesTools = new FormToolStrip<WorkmanagerPool>(
                attributesForm,
                new FormToolStrip.FormCallback<WorkmanagerPool>() {
                    @Override
                    public void onSave(Map<String, Object> changeset) {
                        presenter.onSavePoolConfig(
                                contextName,
                                attributesForm.getEditedEntity(),
                                changeset
                        );
                    }

                    @Override
                    public void onDelete(WorkmanagerPool entity) {

                    }
                }
        );
        attributesTools.providesDeleteOp(false);

        Widget attributesPanel = new FormLayout()
                .setForm(attributesForm)
                .setSetTools(attributesTools)
                .build();


        Widget sizingPanel = new FormLayout()
                .setForm(sizingForm)
                .setSetTools(sizingTools)
                .build();


        // ---

        propertyEditor = new PropertyEditor(presenter);

        headline = new Label("HEADLINE");
        headline.setStyleName("content-header-label");

        // ---
        Widget panel = new MultipleToOneLayout()
                .setPlain(true)
                .setHeadlineWidget(headline)
                .setTitle("Thread Pool")
                .setDescription("Thread pool configurations used by a JCA workmanager.")
                .setMaster("Configured Thread Pools", table)
                .setMasterTools(topLevelTools.asWidget())
                .addDetail("Attributes", attributesPanel)
                .addDetail("Sizing", sizingPanel)
                .addDetail("Properties", propertyEditor.asWidget())
                .build();


        table.getSelectionModel().addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
            @Override
            public void onSelectionChange(SelectionChangeEvent event) {
                WorkmanagerPool pool = ((SingleSelectionModel<WorkmanagerPool>) table.getSelectionModel()).getSelectedObject();

                String ref = createReferenceToken(pool);
                propertyEditor.setProperties(ref, pool.getProperties());
            }
        });
        return panel;
    }

    private String createReferenceToken(WorkmanagerPool pool) {
        String type = pool.isShortRunning() ? "short-running-threads":"long-running-threads";
        return contextName+"/"+type+"/"+pool.getName();
    }

    public void setContextName(String contextName) {
        this.contextName = contextName;
        this.headline.setText("Workmanager: " +contextName);
    }

    public void setWorkManager(JcaWorkmanager manager) {

        this.currentManager = manager;

        // don't mess with the default managers
        boolean enabled = !manager.getName().equals("default");
        add.setVisible(enabled);
        remove.setVisible(enabled);

        List<WorkmanagerPool> pools = new ArrayList<WorkmanagerPool>(2);

        pools.addAll(manager.getShortRunning());
        pools.addAll(manager.getLongRunning());

        dataProvider.setList(pools);
        if(!pools.isEmpty())
            table.getSelectionModel().setSelected(pools.get(0), true);

    }
}
TOP

Related Classes of org.jboss.as.console.client.shared.subsys.jca.ThreadPoolEditor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.