com.siemens.ct.osgi.vaadin.pm.bundleview.BundleView.java Source code

Java tutorial

Introduction

Here is the source code for com.siemens.ct.osgi.vaadin.pm.bundleview.BundleView.java

Source

/*******************************************************************************
 * 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.bundleview;

import java.util.ArrayList;

import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleException;

import com.siemens.ct.osgi.vaadin.pm.main.service.IViewContribution;
import com.vaadin.Application;
import com.vaadin.data.Property.ValueChangeListener;
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.CheckBox;
import com.vaadin.ui.Component;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Table;
import com.vaadin.ui.VerticalLayout;

public class BundleView implements IViewContribution {

    private Component view;
    private Table table;
    private BundleContext bundleContext;
    private Bundle[] bundles;

    @Override
    public String getIcon() {
        return "icons/package.png";
    }

    @Override
    public String getName() {
        return "Bundle View";
    }

    public void init() {
        Bundle[] allBundles = bundleContext.getBundles();
        ArrayList<Bundle> bundleList = new ArrayList<Bundle>();

        // Hack for adding only our relevant bundles to the list
        for (Bundle bundle : allBundles) {
            String symbolicName = bundle.getSymbolicName();
            if ((symbolicName.startsWith("com.siemens.ct.osgi.vaadin.pm")
                    || symbolicName.startsWith("com.siemens.ct.pm.model."))
                    && !((symbolicName.contains("main") || symbolicName.contains("theme")
                            || symbolicName.contains("bundleview") || symbolicName.contains("logback")))) {
                bundleList.add(bundle);
            }
        }
        bundles = bundleList.toArray(new Bundle[] {});
    }

    @SuppressWarnings("serial")
    @Override
    public Component getView(Application application) {
        if (view == null) {
            VerticalLayout verticalLayout = new VerticalLayout();
            verticalLayout.setMargin(true);
            verticalLayout.setSpacing(true);

            table = new Table();
            table.addContainerProperty("Bundle Symbolic Name", String.class, new ThemeResource("icons/bundle.png"));
            table.addContainerProperty("Version", String.class, null);
            table.addContainerProperty("State", String.class, null);
            table.addContainerProperty("Active", CheckBox.class, null);
            table.setWidth("100%");
            table.setPageLength(8);
            table.setSortContainerPropertyId("Bundle Symbolic Name");
            table.setSortAscending(true);
            table.setImmediate(true);

            refreshTable();
            verticalLayout.addComponent(table);

            HorizontalLayout horizontalLayout = new HorizontalLayout();
            horizontalLayout.setSpacing(true);

            Button refreshButton = new Button("Refresh Table");
            refreshButton.addListener(new ClickListener() {

                @Override
                public void buttonClick(ClickEvent event) {
                    refreshTable();
                }
            });
            horizontalLayout.addComponent(refreshButton);

            Button selectAllButton = new Button("Select All");
            selectAllButton.addListener(new ClickListener() {

                @Override
                public void buttonClick(ClickEvent event) {
                    for (Bundle bundle : bundles) {
                        try {
                            bundle.start();
                        } catch (BundleException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        refreshTable();
                    }
                }
            });
            horizontalLayout.addComponent(selectAllButton);

            Button deselectAllButton = new Button("Deselect All");
            deselectAllButton.addListener(new ClickListener() {

                @Override
                public void buttonClick(ClickEvent event) {
                    for (Bundle bundle : bundles) {
                        try {
                            bundle.stop();
                        } catch (BundleException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        refreshTable();
                    }
                }
            });
            horizontalLayout.addComponent(deselectAllButton);

            verticalLayout.addComponent(horizontalLayout);
            view = verticalLayout;
        }
        return view;
    }

    private void refreshTable() {
        table.removeAllItems();

        int i = 1;
        for (Bundle bundle : bundles) {
            final Bundle selectedBundle = bundle;
            CheckBox checkBox = new CheckBox();
            checkBox.setImmediate(true);
            checkBox.setValue(bundle.getState() == Bundle.ACTIVE);
            checkBox.addListener(new ValueChangeListener() {
                private static final long serialVersionUID = 1L;

                @Override
                public void valueChange(com.vaadin.data.Property.ValueChangeEvent event) {
                    if (selectedBundle.getState() == Bundle.ACTIVE) {
                        try {
                            selectedBundle.stop();
                            refreshTable();
                        } catch (BundleException e1) {
                            e1.printStackTrace();
                        }
                    } else if (selectedBundle.getState() == Bundle.RESOLVED) {
                        try {
                            selectedBundle.start();
                            refreshTable();
                        } catch (BundleException e1) {
                            e1.printStackTrace();
                        }
                    }
                }
            });
            table.addItem(new Object[] { bundle.getSymbolicName(), bundle.getVersion(), getStateString(bundle),
                    checkBox }, i++);
        }
        table.sort();
    }

    String getStateString(Bundle bundle) {
        switch (bundle.getState()) {
        case Bundle.ACTIVE:
            return "ACTIVE";
        case Bundle.INSTALLED:
            return "INSTALLED";
        case Bundle.RESOLVED:
            return "RESOLVED";
        case Bundle.UNINSTALLED:
            return "UNINSTALLED";
        default:
            return "UNKNOWN";
        }
    }

    public BundleContext getBundleContext() {
        return bundleContext;
    }

    public void setBundleContext(BundleContext bundleContext) {
        this.bundleContext = bundleContext;
    }
}