org.jboss.as.console.client.domain.groups.deployment.ContentRepositoryPanel.java Source code

Java tutorial

Introduction

Here is the source code for org.jboss.as.console.client.domain.groups.deployment.ContentRepositoryPanel.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.domain.groups.deployment;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.cellview.client.TextColumn;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.IsWidget;
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.deployment.DeploymentCommand;
import org.jboss.as.console.client.shared.deployment.DeploymentCommandDelegate;
import org.jboss.as.console.client.shared.deployment.DeploymentDataKeyProvider;
import org.jboss.as.console.client.shared.deployment.DeploymentFilter;
import org.jboss.as.console.client.shared.deployment.DeploymentNameColumn;
import org.jboss.as.console.client.shared.deployment.model.ContentRepository;
import org.jboss.as.console.client.shared.deployment.model.DeploymentRecord;
import org.jboss.as.console.client.shared.viewframework.builder.MultipleToOneLayout;
import org.jboss.ballroom.client.widgets.forms.Form;
import org.jboss.ballroom.client.widgets.forms.ListItem;
import org.jboss.ballroom.client.widgets.forms.TextAreaItem;
import org.jboss.ballroom.client.widgets.forms.TextBoxItem;
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 java.util.ArrayList;
import java.util.List;

/**
 * @author Harald Pehl
 * @date 12/12/2012
 */
public class ContentRepositoryPanel implements IsWidget {
    private final Widget widget;
    private final DomainDeploymentPresenter presenter;
    private DeploymentFilter filter;
    private DefaultCellTable<DeploymentRecord> deploymentsTable;
    private ListDataProvider<DeploymentRecord> deploymentData;
    private SingleSelectionModel<DeploymentRecord> deploymentSelection;
    private ContentRepository contentRepository;

    public ContentRepositoryPanel(DomainDeploymentPresenter presenter) {
        this.presenter = presenter;
        this.widget = initUI();
    }

    @SuppressWarnings("unchecked")
    private Widget initUI() {
        String[] columnHeaders = new String[] { Console.CONSTANTS.common_label_name(),
                Console.CONSTANTS.common_label_runtimeName() };
        List<Column> columns = makeNameAndRuntimeColumns();

        DeploymentDataKeyProvider<DeploymentRecord> keyProvider = new DeploymentDataKeyProvider<DeploymentRecord>();
        deploymentsTable = new DefaultCellTable<DeploymentRecord>(8, keyProvider);
        for (int i = 0; i < columnHeaders.length; i++) {
            deploymentsTable.addColumn(columns.get(i), columnHeaders[i]);
        }
        deploymentsTable.addColumn(new TextColumn<DeploymentRecord>() {
            @Override
            public String getValue(DeploymentRecord deployment) {
                return String.valueOf(contentRepository.getNumberOfAssignments(deployment));
            }
        }, "Assignments");

        deploymentSelection = new SingleSelectionModel<DeploymentRecord>(keyProvider);
        deploymentsTable.setSelectionModel(deploymentSelection);

        deploymentData = new ListDataProvider<DeploymentRecord>();
        deploymentData.addDataDisplay(deploymentsTable);

        SafeHtmlBuilder tableFooter = new SafeHtmlBuilder();
        tableFooter.appendHtmlConstant(
                "<span style='font-size:10px;color:#A7ABB4;'>[1] File System Deployment</span>");

        Form<DeploymentRecord> form = new Form<DeploymentRecord>(DeploymentRecord.class);
        form.setNumColumns(2);
        form.setEnabled(true);
        TextAreaItem name = new TextAreaItem("name", "Name");
        TextAreaItem runtimeName = new TextAreaItem("runtimeName", "Runtime Name");
        final ListItem groups = new ListItem("assignments", "Assigned Groups");
        form.setFields(name, runtimeName, groups);
        form.bind(deploymentsTable);

        deploymentSelection.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
            @Override
            public void onSelectionChange(SelectionChangeEvent event) {
                DeploymentRecord selection = deploymentSelection.getSelectedObject();
                if (selection != null) {
                    List<String> serverGroups = contentRepository.getServerGroups(selection);
                    groups.setValue(serverGroups);
                }
            }
        });

        final ToolStrip toolStrip = new ToolStrip();
        filter = new DeploymentFilter(deploymentData);
        toolStrip.addToolWidget(filter.asWidget());

        ToolButton addContentBtn = new ToolButton(Console.CONSTANTS.common_label_add(), new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {
                presenter.launchNewDeploymentDialoge(null, false);
            }
        });
        addContentBtn.ensureDebugId(Console.DEBUG_CONSTANTS.debug_label_addContent_deploymentsOverview());
        toolStrip.addToolButtonRight(addContentBtn);

        toolStrip.addToolButtonRight(new ToolButton(Console.CONSTANTS.common_label_remove(), new ClickHandler() {
            @Override
            public void onClick(ClickEvent clickEvent) {
                final DeploymentRecord selection = deploymentSelection.getSelectedObject();
                if (selection != null) {
                    new DeploymentCommandDelegate(ContentRepositoryPanel.this.presenter,
                            DeploymentCommand.REMOVE_FROM_DOMAIN).execute(selection);
                }
            }
        }));

        toolStrip.addToolButtonRight(new ToolButton("Assign", new ClickHandler() {
            @Override
            public void onClick(ClickEvent clickEvent) {
                final DeploymentRecord selection = deploymentSelection.getSelectedObject();
                if (selection != null) {
                    new DeploymentCommandDelegate(ContentRepositoryPanel.this.presenter,
                            DeploymentCommand.ADD_TO_GROUP).execute(selection);
                }
            }
        }));

        toolStrip.addToolButtonRight(new ToolButton("Replace", new ClickHandler() {
            @Override
            public void onClick(ClickEvent clickEvent) {

                final DeploymentRecord selection = deploymentSelection.getSelectedObject();
                if (selection != null) {
                    new DeploymentCommandDelegate(ContentRepositoryPanel.this.presenter,
                            DeploymentCommand.UPDATE_CONTENT).execute(selection);
                }
            }
        }));

        Form<DeploymentRecord> form2 = new Form<DeploymentRecord>(DeploymentRecord.class);
        form2.setNumColumns(2);
        form2.setEnabled(true);
        TextAreaItem path = new TextAreaItem("path", "Path");
        TextBoxItem relative = new TextBoxItem("relativeTo", "Relative To");
        form2.setFields(path, relative);
        form2.bind(deploymentsTable);

        MultipleToOneLayout layout = new MultipleToOneLayout().setPlain(true)
                .setHeadline(Console.CONSTANTS.common_label_contentRepository())
                .setMaster(Console.MESSAGES.available("Deployment Content"), deploymentsTable)
                .setMasterTools(toolStrip).setMasterFooter(new HTML(tableFooter.toSafeHtml()))
                .setDescription(
                        "The content repository contains all deployed content. Contents need to be assigned to sever groups in order to become effective.")
                .addDetail(Console.CONSTANTS.common_label_attributes(), form.asWidget())
                .addDetail("Path", form2.asWidget());
        return layout.build();
    }

    private List<Column> makeNameAndRuntimeColumns() {
        List<Column> columns = new ArrayList<Column>(2);
        columns.add(new DeploymentNameColumn());

        TextColumn<DeploymentRecord> dplRuntimeColumn = new TextColumn<DeploymentRecord>() {
            @Override
            public String getValue(DeploymentRecord record) {
                String title;
                if (record.getRuntimeName().length() > 27) {
                    title = record.getRuntimeName().substring(0, 26) + "...";
                } else {
                    title = record.getRuntimeName();
                }
                return title;
            }
        };
        columns.add(dplRuntimeColumn);
        return columns;
    }

    @Override
    public Widget asWidget() {
        return widget;
    }

    void reset(final ContentRepository contentRepository) {
        this.contentRepository = contentRepository;
        this.deploymentData.setList(contentRepository.getDeployments());
        this.deploymentsTable.selectDefaultEntity();
        this.filter.reset(true);
    }
}