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
));
}
}
}