/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.gui.workflow.editor.documentation;
import java.util.Map;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import de.rcenvironment.core.communication.api.PlatformService;
import de.rcenvironment.core.communication.common.LogicalNodeId;
import de.rcenvironment.core.communication.common.NodeIdentifierUtils;
import de.rcenvironment.core.component.api.DistributedComponentKnowledgeService;
import de.rcenvironment.core.component.integration.ToolIntegrationConstants;
import de.rcenvironment.core.utils.common.StringUtils;
import de.rcenvironment.core.utils.incubator.ServiceRegistry;
import de.rcenvironment.core.utils.incubator.ServiceRegistryPublisherAccess;
/**
* Dialog for choosing a documentation version if there are multiple.
*
* @author Sascha Zur
*/
public class ToolIntegrationDocumentationChooserDialog extends Dialog {
private Map<String, String> componentInstallationsWithDocumentation;
private String selectedHash = null;
private Table table;
private String toolIdentifier;
/**
* Create the dialog.
*
* @param parentShell
* @param componentInstallationsWithDocumentation
* @param toolIdentifier
*/
public ToolIntegrationDocumentationChooserDialog(Shell parentShell,
Map<String, String> componentInstallationsWithDocumentation, String toolIdentifier) {
super(parentShell);
this.componentInstallationsWithDocumentation = componentInstallationsWithDocumentation;
this.toolIdentifier = toolIdentifier;
}
@Override
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
setShellStyle(SWT.MIN | SWT.RESIZE | SWT.TITLE);
if (!toolIdentifier.isEmpty()) {
String[] split = toolIdentifier.split("/");
if (split.length > 1) {
String componentName = split[0].substring(split[0].lastIndexOf(".") + 1);
String componentVersion = "";
for (int i = 1; i < split.length; i++) {
componentVersion += split[i] + "/";
}
componentVersion = componentVersion.substring(0, componentVersion.length() - 1);
newShell.setText(
StringUtils.format("Select Documentation For Component %s (Version %s)", componentName, componentVersion));
}
}
}
/**
* Create contents of the dialog.
*
* @param parent
*/
@Override
protected Control createDialogArea(Composite parent) {
Composite container = (Composite) super.createDialogArea(parent);
container.setLayout(new GridLayout(1, false));
ServiceRegistryPublisherAccess serviceRegistryAccess = ServiceRegistry.createPublisherAccessFor(this);
Label informationLabel = new Label(container, SWT.NONE);
informationLabel
.setText("There is more than one version of the components documentation available.\r\nPlease choose the desired version.");
DistributedComponentKnowledgeService componentKnowledgeService =
serviceRegistryAccess.getService(DistributedComponentKnowledgeService.class);
componentKnowledgeService.getCurrentComponentKnowledge().getAllInstallations();
table = new Table(container, SWT.BORDER | SWT.FULL_SELECTION);
table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
table.setHeaderVisible(true);
table.setLinesVisible(true);
TableColumn tblclmnInstancename = new TableColumn(table, SWT.NONE);
tblclmnInstancename.setText("Instance name");
TableColumn tblclmnLocal = new TableColumn(table, SWT.NONE);
tblclmnLocal.setText("Source");
TableColumn tblclmnHashValue = new TableColumn(table, SWT.NONE);
tblclmnHashValue.setText("Hash value");
String[] items = new String[componentInstallationsWithDocumentation.size()];
componentInstallationsWithDocumentation.keySet().toArray(items);
for (String key : componentInstallationsWithDocumentation.keySet()) {
TableItem item = new TableItem(table, SWT.NULL);
String nodeId = componentInstallationsWithDocumentation.get(key);
boolean cached = false;
if (nodeId.endsWith(ToolIntegrationConstants.DOCUMENTATION_CACHED_SUFFIX)) {
nodeId = nodeId.substring(0, nodeId.length() - 3);
cached = true;
}
LogicalNodeId identifier =
NodeIdentifierUtils.parseArbitraryIdStringToLogicalNodeIdWithExceptionWrapping(nodeId);
item.setText(0, identifier.getAssociatedDisplayName());
boolean localNode = serviceRegistryAccess.getService(PlatformService.class).matchesLocalInstance(identifier);
if (cached) {
item.setText(1, "Cached");
} else {
if (localNode) {
item.setText(1, "Local");
} else {
item.setText(1, "Remote");
}
}
item.setText(2, key);
}
table.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent arg0) {
selectedHash = table.getSelection()[0].getText(2);
}
@Override
public void widgetDefaultSelected(SelectionEvent arg0) {
widgetSelected(arg0);
}
});
selectedHash = items[0];
serviceRegistryAccess.dispose();
tblclmnInstancename.pack();
tblclmnLocal.pack();
tblclmnHashValue.pack();
return container;
}
protected void verify() {
getButton(OK).setEnabled(selectedHash != null);
}
public String getSelectedHash() {
return selectedHash;
}
/**
* Create contents of the button bar.
*
* @param parent
*/
@Override
protected void createButtonsForButtonBar(Composite parent) {
createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
}
}