blob: 731e2168a8b80ae8d45457b849cf43bf280905fd [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2015 Ericsson
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License 2.0 which
* accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Bernd Hufmann - Initial API and implementation
*******************************************************************************/
package org.eclipse.tracecompass.internal.tmf.remote.ui.wizards.fetch;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.preference.PreferenceDialog;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.window.Window;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ControlAdapter;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.tracecompass.internal.tmf.remote.ui.Activator;
import org.eclipse.tracecompass.internal.tmf.remote.ui.messages.RemoteMessages;
import org.eclipse.tracecompass.internal.tmf.remote.ui.wizards.fetch.model.RemoteImportConnectionNodeElement;
import org.eclipse.tracecompass.internal.tmf.remote.ui.wizards.fetch.model.RemoteImportProfileElement;
import org.eclipse.tracecompass.internal.tmf.remote.ui.wizards.fetch.preferences.RemoteProfilesPreferencePage;
import org.eclipse.tracecompass.internal.tmf.ui.project.wizards.importtrace.ImportTraceWizardPage;
import org.eclipse.tracecompass.internal.tmf.ui.project.wizards.importtrace.Messages;
import org.eclipse.tracecompass.internal.tmf.ui.project.wizards.tracepkg.TracePackageElement;
import org.eclipse.ui.dialogs.PreferencesUtil;
import org.eclipse.ui.plugin.AbstractUIPlugin;
/**
* Wizard page for selection and managing remote profiles.
*/
public class RemoteFetchLogWizardPage extends ImportTraceWizardPage {
// ------------------------------------------------------------------------
// Constant(s)
// ------------------------------------------------------------------------
private static final String PAGE_NAME = "org.eclipse.tracecompass.internal.tmf.remote.ui.wizards.fetch.RemoteFetchLogWizardPage"; //$NON-NLS-1$
private static final String ICON_PATH = "icons/elcl16/fetch_log_wiz.gif"; //$NON-NLS-1$
// ------------------------------------------------------------------------
// Attributes
// ------------------------------------------------------------------------
private Combo fProfileNameCombo;
private Text fNodesText;
// Button to overwrite existing resources or not
private Button fOverwriteExistingResourcesCheckbox;
private List<RemoteImportProfileElement> fProfiles = new ArrayList<>();
private RemoteImportProfileElement fProfile;
// ------------------------------------------------------------------------
// Constructor(s)
// ------------------------------------------------------------------------
/**
* Constructor
*
* @param title
* Name of page
* @param selection
* Current selection
*/
public RemoteFetchLogWizardPage(String title, IStructuredSelection selection) {
super(PAGE_NAME, selection);
setTitle(title);
setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(Activator.PLUGIN_ID, ICON_PATH));
setDescription(RemoteMessages.RemoteFetchLogWizardPage_Description);
}
// ------------------------------------------------------------------------
// Operations
// ------------------------------------------------------------------------
@Override
public boolean finish() {
// Nothing to do for this page
return true;
}
@Override
public boolean canFlipToNextPage() {
return fProfile != null;
}
// ------------------------------------------------------------------------
// Source Group
// ------------------------------------------------------------------------
@Override
protected void createSourceGroup(final Composite parent) {
Composite directoryContainerGroup = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
layout.numColumns = 3;
directoryContainerGroup.setLayout(layout);
directoryContainerGroup.setFont(parent.getFont());
directoryContainerGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
Label profileLabel = new Label(directoryContainerGroup, SWT.NONE);
profileLabel.setText(RemoteMessages.RemoteProfilesPreferencePage_ProfileNameLabel);
profileLabel.setFont(parent.getFont());
fProfileNameCombo = new Combo(directoryContainerGroup, SWT.BORDER | SWT.READ_ONLY);
GridData pdata = new GridData(SWT.FILL, SWT.FILL, true, false);
pdata.widthHint = SIZING_TEXT_FIELD_WIDTH;
fProfileNameCombo.setLayoutData(pdata);
fProfileNameCombo.setFont(parent.getFont());
Button manageProfilesButton = new Button(directoryContainerGroup, SWT.NONE);
manageProfilesButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
PreferenceDialog dialog = PreferencesUtil.createPreferenceDialogOn(parent.getShell(),
RemoteProfilesPreferencePage.ID,
new String[] { RemoteProfilesPreferencePage.ID },
null);
RemoteProfilesPreferencePage page = (RemoteProfilesPreferencePage) dialog.getSelectedPage();
page.setSelectedProfile(fProfileNameCombo.getText());
if (dialog.open() == Window.OK) {
fProfiles.clear();
fProfile = null;
updateProfileData();
if (page.getSelectedProfile() != null) {
int index = fProfileNameCombo.indexOf(page.getSelectedProfile());
fProfileNameCombo.select(index);
}
updateFromSourceField();
}
}
});
manageProfilesButton.setText(RemoteMessages.RemoteFetchLogWizardPage_ManageProfileLabel);
Label nodesLabel = new Label(directoryContainerGroup, SWT.NONE);
nodesLabel.setText(RemoteMessages.RemoteFetchLogWizardPage_NodesLabel);
nodesLabel.setFont(parent.getFont());
fNodesText = new Text(directoryContainerGroup, SWT.NONE);
GridData gd_nodeText = new GridData(SWT.FILL, SWT.FILL, true, false);
gd_nodeText.horizontalSpan = 2;
gd_nodeText.widthHint = 0;
fNodesText.setLayoutData(gd_nodeText);
fNodesText.setEditable(false);
fNodesText.addControlListener(new ControlAdapter() {
@Override
public void controlResized(ControlEvent e) {
updateNodesText();
}
});
updateProfileData();
updateFromSourceField();
fProfileNameCombo.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
updateFromSourceField();
}
});
setErrorMessage(null);
setPageComplete(true);
}
@Override
public boolean validateSourceGroup() {
return true;
}
// ------------------------------------------------------------------------
// Options
// ------------------------------------------------------------------------
@Override
protected void createOptionsGroupButtons(Group optionsGroup) {
// Overwrite checkbox
fOverwriteExistingResourcesCheckbox = new Button(optionsGroup, SWT.CHECK);
fOverwriteExistingResourcesCheckbox.setFont(optionsGroup.getFont());
fOverwriteExistingResourcesCheckbox.setText(Messages.ImportTraceWizard_OverwriteExistingTrace);
fOverwriteExistingResourcesCheckbox.setSelection(false);
fOverwriteExistingResourcesCheckbox.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
updateNextPage();
setPageComplete(fProfile != null);
}
});
updateWidgetEnablements();
}
// ------------------------------------------------------------------------
// Helper methods
// ------------------------------------------------------------------------
private void updateProfileData() {
fProfileNameCombo.removeAll();
fProfiles = RemoteProfilesPreferencePage.getRemoteProfiles(new NullProgressMonitor());
int i = 0;
for (RemoteImportProfileElement profile : fProfiles) {
fProfileNameCombo.add(profile.getProfileName(), i++);
}
if (i > 0) {
fProfileNameCombo.select(0);
}
}
private void updateFromSourceField() {
int index = fProfileNameCombo.getSelectionIndex();
if (index < 0) {
updateNodesText();
updateNextPage();
setPageComplete(false);
return;
}
fProfile = fProfiles.get(index);
updateNodesText();
updateNextPage();
setPageComplete(true);
}
private void updateNodesText() {
if (fProfile == null) {
fNodesText.setText(""); //$NON-NLS-1$
fNodesText.setToolTipText(null);
return;
}
StringBuilder text = new StringBuilder();
StringBuilder tooltip = new StringBuilder();
for (TracePackageElement element : fProfile.getChildren()) {
if (element instanceof RemoteImportConnectionNodeElement) {
RemoteImportConnectionNodeElement node = (RemoteImportConnectionNodeElement) element;
if (text.length() != 0) {
text.append(", "); //$NON-NLS-1$
tooltip.append('\n');
}
String nodeInfo = node.getName() + " (" + //$NON-NLS-1$
node.getURI().toString()+ ')';
text.append(nodeInfo);
tooltip.append(nodeInfo);
}
}
fNodesText.setText(text.toString());
fNodesText.setToolTipText(null);
while (fNodesText.computeSize(SWT.DEFAULT, SWT.DEFAULT).x > fNodesText.getSize().x && text.length() > 0) {
text.deleteCharAt(text.length() - 1);
fNodesText.setText(text.toString() + "..."); //$NON-NLS-1$
fNodesText.setToolTipText(tooltip.toString());
}
}
private void updateNextPage() {
IWizardPage nextPage = getNextPage();
if (nextPage instanceof RemoteFetchLogWizardRemotePage) {
((RemoteFetchLogWizardRemotePage) nextPage).setPageData(
fProfile,
fOverwriteExistingResourcesCheckbox != null ?
fOverwriteExistingResourcesCheckbox.getSelection() : false);
}
}
}