Package com.siemens.ct.osgi.vaadin.pm.main

Source Code of com.siemens.ct.osgi.vaadin.pm.main.MainApplication$SmallText

/*******************************************************************************
* Copyright (c) 2010 Kai Toedter and Siemens AG
*
* 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:
*    Kai Toedter - initial API and implementation
*******************************************************************************/

package com.siemens.ct.osgi.vaadin.pm.main;

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

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.siemens.ct.osgi.vaadin.pm.main.service.IActionContribution;
import com.siemens.ct.osgi.vaadin.pm.main.service.IViewContribution;
import com.vaadin.Application;
import com.vaadin.terminal.ThemeResource;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.CssLayout;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.Layout;
import com.vaadin.ui.MenuBar;
import com.vaadin.ui.MenuBar.Command;
import com.vaadin.ui.MenuBar.MenuItem;
import com.vaadin.ui.ProgressIndicator;
import com.vaadin.ui.TabSheet;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window;
import com.vaadin.ui.themes.Reindeer;

public class MainApplication extends Application {

  private static final long serialVersionUID = 1L;
  private final Logger logger = LoggerFactory.getLogger(MainApplication.class);

  private final List<IViewContribution> viewContributions = Collections
      .synchronizedList(new ArrayList<IViewContribution>());
  private final List<IActionContribution> actionContributions = Collections
      .synchronizedList(new ArrayList<IActionContribution>());
  private final Map<IActionContribution, Button> buttonActionMap = Collections
      .synchronizedMap(new HashMap<IActionContribution, Button>());
  private final Map<IActionContribution, MenuItem> menuActionMap = Collections
      .synchronizedMap(new HashMap<IActionContribution, MenuItem>());

  private Window main;
  private VerticalLayout mainLayout;
  private TabSheet tabSheet;
  private Window aboutWindow;

  private volatile boolean initialized = false;

  private HorizontalLayout toolbar;

  private MenuBar.MenuItem actionMenu;

  @Override
  public void init() {
    logger.info("Dynamic Vaadin OSGi demo init...");
    setTheme(Reindeer.THEME_NAME);
    // setTheme(Runo.THEME_NAME);
    // setTheme("demo");
    main = new Window("Dynamic Vaadin OSGi Demo");
    mainLayout = (VerticalLayout) main.getContent();
    mainLayout.setMargin(false);
    mainLayout.setStyleName("blue");
    setMainWindow(main);

    mainLayout.setSizeFull();
    mainLayout.addComponent(getMenu());

    HorizontalLayout header = new HorizontalLayout();

    header.addComponent(getHeader());
    header.addComponent(getToolbar());
    mainLayout.addComponent(header);

    CssLayout margin = new CssLayout();
    margin.setMargin(false, true, true, true);
    margin.setSizeFull();
    tabSheet = new TabSheet();
    tabSheet.setSizeFull();
    margin.addComponent(tabSheet);
    mainLayout.addComponent(margin);
    mainLayout.setExpandRatio(margin, 1);

    for (IViewContribution viewContribution : viewContributions) {
      tabSheet.addTab(viewContribution.getView(this), viewContribution.getName(), new ThemeResource(
          viewContribution.getIcon()));
    }

    for (IActionContribution actionContribution : actionContributions) {
      addActionContribution(actionContribution);
    }

    // Create the indicator
    // this is used for a simple poll mechanism
    // so that manual server-side starting/stopping of bundles has a direct
    // effect on the client UI
    ProgressIndicator indicator = new ProgressIndicator();
    // Set polling frequency to 1 seconds.
    indicator.setPollingInterval(1000);
    // Add it to Application's main window
    main.addComponent(indicator);
    // Hide the component does not work...
    indicator.setWidth("1px");
    indicator.setHeight("1px");
    indicator.setVisible(true);

    initialized = true;
  }

  @SuppressWarnings("serial")
  private MenuBar getMenu() {
    MenuBar menubar = new MenuBar();
    menubar.setWidth("100%");
    actionMenu = menubar.addItem("Action", null);

    actionMenu.addItem("Built-in Action...", new Command() {
      @Override
      public void menuSelected(MenuItem selectedItem) {
        main.showNotification("Built-in Action executed!");
      }
    });
    actionMenu.addSeparator();

    final MenuBar.MenuItem viewMenu = menubar.addItem("Help", null);
    viewMenu.addItem("About...", new Command() {
      @Override
      public void menuSelected(MenuItem selectedItem) {
        main.addWindow(getAboutDialog());
      }
    });

    return menubar;
  }

  private Layout getHeader() {
    HorizontalLayout header = new HorizontalLayout();
    header.setWidth("100%");
    header.setMargin(true);
    header.setSpacing(true);
    // header.setStyleName(Reindeer.LAYOUT_BLACK);

    CssLayout titleLayout = new CssLayout();
    H2 title = new H2("Dynamic Vaadin OSGi Demo");
    titleLayout.addComponent(title);
    SmallText description = new SmallText(
        "Select the \"Bundle View\" tab and activate/stop OSGi bundles dynamically.");
    description.setSizeUndefined();
    titleLayout.addComponent(description);

    header.addComponent(titleLayout);

    return header;
  }

  private Layout getToolbar() {
    if (toolbar == null) {
      toolbar = new HorizontalLayout();
      toolbar.setMargin(true);
      toolbar.setSpacing(true);
    }
    return toolbar;
  }

  private Window getAboutDialog() {
    if (aboutWindow == null) {
      aboutWindow = new Window("About...");
      aboutWindow.setModal(true);
      aboutWindow.setWidth("400px");

      VerticalLayout layout = (VerticalLayout) aboutWindow.getContent();
      layout.setMargin(true);
      layout.setSpacing(true);
      layout.setStyleName("blue");

      CssLayout titleLayout = new CssLayout();
      H2 title = new H2("Dynamic Vaadin OSGi Demo");
      titleLayout.addComponent(title);
      SmallText description = new SmallText(
          "<br>Copyright (c) Siemens AG, Kai Tödter and others.<br>"
              + "Licensed under Eclipse Public License (EPL).<br><br>"
              + "This software contains modules licenced under<br>"
              + " the Apache Software Foundation 2.0 license (ASF) and EPL<br><br>"
              + "Many thanks to Chris Brind, Neil Bartlett and<br>"
              + " Petter Holmström for their OSGi and Vaadin<br>"
              + " related work, blogs, and bundles.<br><br>"
              + "The icons are from the Silk icon set by Mark James<br>"
              + "<a href=\"http://www.famfamfam.com/lab/icons/silk/\">http://www.famfamfam.com/lab/icons/silk/</a>");
      description.setSizeUndefined();
      description.setContentMode(Label.CONTENT_XHTML);

      titleLayout.addComponent(description);
      aboutWindow.addComponent(titleLayout);

      @SuppressWarnings("serial")
      Button close = new Button("Close", new Button.ClickListener() {
        @Override
        public void buttonClick(ClickEvent event) {
          (aboutWindow.getParent()).removeWindow(aboutWindow);
        }

      });
      layout.addComponent(close);
      layout.setComponentAlignment(close, "right");
    }
    return aboutWindow;
  }

  public void bindViewContribution(IViewContribution viewContribution) {
    logger.debug("bindViewContribution()");
    viewContributions.add(viewContribution);
    if (initialized) {
      tabSheet.addTab(viewContribution.getView(this), viewContribution.getName(), new ThemeResource(
          viewContribution.getIcon()));
    }
  }

  public void unbindViewContribution(IViewContribution viewContribution) {
    logger.debug("unbindViewContribution()");
    viewContributions.remove(viewContribution);
    if (initialized) {
      tabSheet.removeComponent(viewContribution.getView(this));
    }
  }

  public void bindActionContribution(final IActionContribution actionContribution) {
    logger.debug("bindActionContribution()");
    if (initialized) {
      addActionContribution(actionContribution);
    }
    actionContributions.add(actionContribution);
  }

  private void addActionContribution(final IActionContribution actionContribution) {
    final Application application = this;
    Button button = new Button(actionContribution.getText());
    button.setIcon(new ThemeResource(actionContribution.getIcon()));
    button.addListener(new ClickListener() {
      private static final long serialVersionUID = 1L;

      @Override
      public void buttonClick(ClickEvent event) {
        actionContribution.execute(application);
      }
    });
    getToolbar().addComponent(button);
    buttonActionMap.put(actionContribution, button);

    @SuppressWarnings("serial")
    MenuItem menuItem = actionMenu.addItem(actionContribution.getText(), new Command() {
      @Override
      public void menuSelected(MenuItem selectedItem) {
        actionContribution.execute(application);
      }
    });
    menuItem.setIcon(new ThemeResource(actionContribution.getIcon()));
    menuActionMap.put(actionContribution, menuItem);
  }

  public void unbindActionContribution(IActionContribution actionContribution) {
    logger.debug("unbindActionContribution()");
    Button button = buttonActionMap.get(actionContribution);
    toolbar.removeComponent(button);
    buttonActionMap.remove(actionContribution);

    MenuItem menuItem = menuActionMap.get(actionContribution);
    actionMenu.removeChild(menuItem);
    menuActionMap.remove(actionContribution);

    actionContributions.remove(actionContribution);
  }

  @SuppressWarnings("serial")
  class H1 extends Label {
    public H1(String caption) {
      super(caption);
      setSizeUndefined();
      setStyleName(Reindeer.LABEL_H1);
    }
  }

  @SuppressWarnings("serial")
  class H2 extends Label {
    public H2(String caption) {
      super(caption);
      setSizeUndefined();
      setStyleName(Reindeer.LABEL_H2);
    }
  }

  @SuppressWarnings("serial")
  class SmallText extends Label {
    public SmallText(String caption) {
      super(caption);
      setStyleName(Reindeer.LABEL_SMALL);
    }
  }

}
TOP

Related Classes of com.siemens.ct.osgi.vaadin.pm.main.MainApplication$SmallText

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.