Package org.jboss.as.console.client.shared.homepage

Source Code of org.jboss.as.console.client.shared.homepage.HomepageView

/*
* JBoss, Home of Professional Open Source
* Copyright 2013 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.shared.homepage;

import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.AnchorElement;
import com.google.gwt.dom.client.Document;
import com.google.gwt.safehtml.client.SafeHtmlTemplates;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.user.client.ui.DockLayoutPanel;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.inject.Inject;
import com.gwtplatform.mvp.client.ViewImpl;
import org.jboss.as.console.client.Console;
import org.jboss.as.console.client.ProductConfig;

import java.util.Iterator;
import java.util.List;
import java.util.Map;

import static com.google.gwt.dom.client.Style.Unit.PCT;

/**
* @author Harald Pehl
*/
public class HomepageView extends ViewImpl implements HomepagePresenter.MyView {

    interface Templates extends SafeHtmlTemplates {

        @Template("<header><h1 class=\"homepage-primary-header\">{0}</h1></header>")
        SafeHtml header(String title);

        @Template("<h2 class=\"homepage-secondary-header\">{0}</h2>")
        SafeHtml secondaryHeader(String title);

        @Template("<h3 class=\"homepage-sidebar-section-header\">{0}</h3>")
        SafeHtml sidebarSectionHeader(String title);
    }


    private static final Templates TEMPLATES = GWT.create(Templates.class);
    private final ProductConfig productConfig;
    private HorizontalPanel infoBoxes;
    private HorizontalPanel contentBoxes;
    private FlowPanel sidebarSections;

    @Inject
    public HomepageView(final ProductConfig productConfig) {
        this.productConfig = productConfig;
        initWidget(createWidget());
    }

    private Widget createWidget() {

        FlowPanel main = new FlowPanel();
        main.addStyleName("homepage-main");
        if (productConfig.getProfile() == ProductConfig.Profile.COMMUNITY) {
            main.add(new HTML(TEMPLATES.header(Console.CONSTANTS.homepage_header_community())));
        } else {
            main.add(new HTML(TEMPLATES.header(Console.CONSTANTS.homepage_header_product())));
        }

        main.add(new HTML(TEMPLATES.secondaryHeader(Console.CONSTANTS.homepage_view_and_manage())));
        infoBoxes = new HorizontalPanel();
        infoBoxes.addStyleName("homepage-info-boxes");
        main.add(infoBoxes);

        main.add(new HTML(TEMPLATES.secondaryHeader(Console.CONSTANTS.homepage_common_tasks())));
        contentBoxes = new HorizontalPanel();
        contentBoxes.addStyleName("homepage-content-boxes");
        main.add(contentBoxes);

        FlowPanel sidebar = new FlowPanel();
        sidebar.addStyleName("homepage-sidebar");
        sidebar.add(new HTML(TEMPLATES.secondaryHeader(Console.CONSTANTS.homepage_sidebar_header())));
        sidebarSections = new FlowPanel();
        sidebarSections.addStyleName("homepage-sidebar-sections");
        sidebar.add(sidebarSections);

        DockLayoutPanel root = new DockLayoutPanel(PCT);
        ScrollPanel sp = new ScrollPanel(sidebar);
        root.addEast(sp, 25);
        sp.getElement().getParentElement().addClassName("homepage-sidebar-root");
        sp = new ScrollPanel(main);
        root.add(sp);
        sp.getElement().getParentElement().addClassName("homepage-main-root");
        return root;
    }

    @Override
    public void addInfoBoxes(final List<InfoBox> boxes) {
        InfoBox[][] table = new InfoBox[calculateRows(boxes)][2];
        fillTable(table, boxes);
        addBoxes(table, infoBoxes);
    }

    @Override
    public void addContentBoxes(final List<ContentBox> boxes) {
        ContentBox[][] table = new ContentBox[calculateRows(boxes)][2];
        fillTable(table, boxes);
        addBoxes(table, contentBoxes);
    }

    private <T extends IsWidget> int calculateRows(final List<T> boxes) {
        int rows = boxes.size();
        return rows % 2 == 0 ? rows / 2 : rows / 2 + 1;
    }

    private <T extends IsWidget> void fillTable(final IsWidget[][] table, final List<T> boxes) {
        int columnCounter = 0;
        int rowCounter = -1;
        for (Iterator<T> iterator = boxes.iterator(); iterator.hasNext(); columnCounter++) {
            columnCounter %= 2;
            if (columnCounter == 0) { rowCounter++; }
            table[rowCounter][columnCounter] = iterator.next();
        }
    }

    private void addBoxes(final Widget[][] widgets, final Panel panel) {
        FlowPanel left = new FlowPanel();
        FlowPanel right = new FlowPanel();
        panel.add(left);
        panel.add(right);
        left.getElement().getParentElement().addClassName("column");
        left.getElement().getParentElement().addClassName("left");
        right.getElement().getParentElement().addClassName("column");
        right.getElement().getParentElement().addClassName("right");

        for (Widget[] row : widgets) {
            left.add(row[0]);
            if (row[1] != null) {
                right.add(row[1]);
            }
        }
    }

    @Override
    public void addSidebarSections(final List<SidebarSection> sections) {
        for (SidebarSection section : sections) {
            FlowPanel sidebarSection = new FlowPanel();
            sidebarSection.addStyleName("homepage-sidebar-section");
            sidebarSection.add(new HTML(TEMPLATES.sidebarSectionHeader(section.getTitle())));
            FlowPanel links = new FlowPanel();
            links.addStyleName("homepage-sidebar-links");
            sidebarSection.add(links);
            for (Map.Entry<String, String> linkText : section.getLinks().entrySet()) {
                String href = linkText.getKey();
                String text = linkText.getValue();

                // No template / new HTML() here. We don't want nested divs. Otherwise :last-child rules won't work!
                AnchorElement link = Document.get().createAnchorElement();
                link.setHref(href);
                link.setTarget("_blank");
                link.setClassName("homepage-link");
                link.setInnerText(text);
                links.getElement().appendChild(link);
            }
            sidebarSections.add(sidebarSection);
        }
    }

    @Override
    public void addToSlot(final Object slot, final IsWidget content) {
        if (slot == HomepagePresenter.SECTION_INFO_SLOT) {
            infoBoxes.add(content);
        } else if (slot == HomepagePresenter.CONTENT_BOX_SLOT) {
            contentBoxes.add(content);
        } else if (slot == HomepagePresenter.SIDEBAR_SLOT) {
            sidebarSections.add(content);
        } else {
            super.addToSlot(slot, content);
        }
    }
}
TOP

Related Classes of org.jboss.as.console.client.shared.homepage.HomepageView

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.