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