Package pl.net.bluesoft.rnd.processtool.ui.plugins

Source Code of pl.net.bluesoft.rnd.processtool.ui.plugins.PluginsManagerPane

package pl.net.bluesoft.rnd.processtool.ui.plugins;

import com.vaadin.Application;
import com.vaadin.terminal.ExternalResource;
import com.vaadin.ui.*;
import pl.net.bluesoft.rnd.processtool.ProcessToolContext;
import pl.net.bluesoft.rnd.processtool.plugins.PluginManager;
import pl.net.bluesoft.rnd.processtool.plugins.PluginMetadata;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import static org.aperteworkflow.util.vaadin.VaadinUtility.*;
/**
* @author tlipski@bluesoft.net.pl
*/
public class PluginsManagerPane extends VerticalLayout {

    //    TextField filterField = new TextField();
    Upload upload = new Upload();

    VerticalLayout bundleList = new VerticalLayout();

    public PluginsManagerPane(Application application) {

        setWidth("100%");
        setSpacing(true);

//        filterField.setWidth("100%");
//        filterField.setInputPrompt(getLocalizedMessage("plugins.console.filter.prompt"));

        upload.setButtonCaption(getLocalizedMessage("plugins.console.upload"));
        upload.setReceiver(new Upload.Receiver() {
            @Override
            public OutputStream receiveUpload(final String filename, String mimeType) {
                return new ByteArrayOutputStream() {
                    @Override
                    public void close() throws IOException {
                        super.close();
                        final byte[] bytes = toByteArray();
                        PluginManager pluginManager = ProcessToolContext.Util.getThreadProcessToolContext().getRegistry().getPluginManager();
                        pluginManager.registerPlugin(filename,
                                new ByteArrayInputStream(bytes));
                        displayBundleList();
                        String msg = getLocalizedMessage("plugins.console.upload.success");
                        Window.Notification n = new Window.Notification(msg);
                        n.setDelayMsec(-1);
                        getApplication().getMainWindow().showNotification(n);
                    }
                };
            }
        });
        upload.setImmediate(true);


        addComponent(new Label(getLocalizedMessage("plugins.console.info"), Label.CONTENT_XHTML));


        addComponent(upload);
        setComponentAlignment(upload, Alignment.BOTTOM_RIGHT);

        bundleList.setSpacing(true);

        addComponent(width(horizontalLayout(
                refreshIcon(application, new Refreshable() {
                    @Override
                    public void refreshData() {
                        displayBundleList();
                    }
                }),
                styled(new Label(getLocalizedMessage("plugins.console.title")), "h2")),
                null));

        addComponent(bundleList);
        displayBundleList();

    }

    private void displayBundleList() {
        bundleList.removeAllComponents();
        final PluginManager pluginManager = ProcessToolContext.Util.getThreadProcessToolContext().getRegistry().getPluginManager();
        List<PluginMetadata> registeredPlugins = new ArrayList<PluginMetadata>(pluginManager.getRegisteredPlugins());
        Collections.sort(registeredPlugins);

        for (final PluginMetadata metadata : registeredPlugins) {
            HorizontalLayout buttonLayout = new HorizontalLayout();
            buttonLayout.setSpacing(true);

            if (metadata.isCanEnable()) {
                buttonLayout.addComponent(linkButton(getLocalizedMessage("plugins.console.enable"), new Runnable() {
                    @Override
                    public void run() {
                        ProcessToolContext.Util.getThreadProcessToolContext().getRegistry().getPluginManager().enablePlugin(metadata);
                        String msg = getLocalizedMessage("plugins.console.enable.success");
                                                Window.Notification n = new Window.Notification(msg);
                                                n.setDelayMsec(-1);
                                                getApplication().getMainWindow().showNotification(n);
                        displayBundleList();
                    }
                }));
            }
            if (metadata.isCanDisable()) {
                buttonLayout.addComponent(linkButton(getLocalizedMessage("plugins.console.disable"), new Runnable() {
                    @Override
                    public void run() {
                        ProcessToolContext.Util.getThreadProcessToolContext().getRegistry().getPluginManager().disablePlugin(metadata);
                        String msg = getLocalizedMessage("plugins.console.disable.success");
                        Window.Notification n = new Window.Notification(msg);
                        n.setDelayMsec(-1);
                        getApplication().getMainWindow().showNotification(n);
                        displayBundleList();

                    }
                }));
            }
            if (metadata.isCanUninstall()) {
                buttonLayout.addComponent(linkButton(getLocalizedMessage("plugins.console.uninstall"), new Runnable() {
                    @Override
                    public void run() {
                        ProcessToolContext.Util.getThreadProcessToolContext().getRegistry().getPluginManager().uninstallPlugin(metadata);
                        String msg = getLocalizedMessage("plugins.console.uninstall.success");
                        Window.Notification n = new Window.Notification(msg);
                        n.setDelayMsec(-1);
                        getApplication().getMainWindow().showNotification(n);                       
                        displayBundleList();
                    }
                }));
            }

//            for (int i =0; i < buttonLayout.getComponentCount(); i++) {
//                buttonLayout.setComponentAlignment(buttonLayout.getComponent(i), Alignment.BOTTOM_LEFT);
//            }
            if (metadata.getHomepageUrl() != null) {
                Link c = new Link(getLocalizedMessage("plugins.console.plugin.homepage"), new ExternalResource( metadata.getHomepageUrl()));
                c.setTargetName("_blank");
                buttonLayout.addComponent(c);
            }
            if (metadata.getDocumentationUrl() != null) {
                Link c = new Link(getLocalizedMessage("plugins.console.plugin.documentation"),
                        new ExternalResource( metadata.getDocumentationUrl()));
                c.setTargetName("_blank");
                buttonLayout.addComponent(c);
            }
            bundleList.addComponent(verticalLayout(
                    styled(new Label(metadata.getId() + ": " + metadata.getName() + " (" + metadata.getVersion() + ")"), "h2"),
                    styled(new Label(getLocalizedMessage("plugins.console.status") +
                            " " +
                            getLocalizedMessage(metadata.getStateDescription())), "small"),
                    new Label(metadata.getDescription()),
                    buttonLayout
            ));
        }
    }
}
TOP

Related Classes of pl.net.bluesoft.rnd.processtool.ui.plugins.PluginsManagerPane

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.