blob: 6d6de153feb6ae1950a400cdd92a09d9ddebbf03 [file] [log] [blame]
/*
* Copyright (c) 2016 Eike Stepper (Loehne, Germany) and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
*
* Contributors:
* Eike Stepper - initial API and implementation
*/
package org.eclipse.oomph.targlets.internal.ui.wizards;
import org.eclipse.oomph.targlets.internal.ui.TargletsUIPlugin;
import org.eclipse.oomph.ui.UIUtil;
import org.eclipse.oomph.util.IOUtil;
import org.eclipse.oomph.util.pde.TargetPlatformUtil;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.IFontProvider;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.pde.core.target.ITargetDefinition;
import org.eclipse.pde.core.target.ITargetHandle;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.DirectoryDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import java.io.File;
/**
* @author Eike Stepper
*/
public class TargetDefinitionExportWizardPage extends WizardPage
{
private static final String DEFAULT_MESSAGE = "Select a target definition and enter a folder to which to export.";
private TableViewer targetDefinitionViewer;
private ITargetDefinition targetDefinition;
private ITargetHandle activeTargetHandle;
private Text exportFolderText;
private File exportFolder;
public TargetDefinitionExportWizardPage()
{
super("page");
}
public ITargetDefinition getTargetDefinition()
{
return targetDefinition;
}
public File getExportFolder()
{
return exportFolder;
}
public void createControl(Composite parent)
{
setTitle(TargetDefinitionExportWizard.TITLE);
setMessage(DEFAULT_MESSAGE);
Composite container = new Composite(parent, SWT.NULL);
setControl(container);
container.setLayout(new GridLayout(1, false));
Label targetPlatformLabel = new Label(container, SWT.NONE);
targetPlatformLabel.setText("Target platform:");
targetDefinitionViewer = new TableViewer(container, SWT.BORDER | SWT.V_SCROLL);
targetDefinitionViewer.getTable().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
targetDefinitionViewer.setContentProvider(new ArrayContentProvider());
targetDefinitionViewer.setLabelProvider(new TargetLabelProvider());
targetDefinitionViewer.addSelectionChangedListener(new ISelectionChangedListener()
{
public void selectionChanged(SelectionChangedEvent event)
{
validatePage();
}
});
Label exportFolderLabel = new Label(container, SWT.NONE);
exportFolderLabel.setText("Export folder:");
GridLayout compositeGridLayout = new GridLayout(2, false);
compositeGridLayout.marginHeight = 0;
compositeGridLayout.marginWidth = 0;
Composite composite = new Composite(container, SWT.NONE);
composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
composite.setLayout(compositeGridLayout);
exportFolderText = new Text(composite, SWT.BORDER);
exportFolderText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
exportFolderText.addModifyListener(new ModifyListener()
{
public void modifyText(ModifyEvent e)
{
validatePage();
}
});
Button browseButton = new Button(composite, SWT.NONE);
browseButton.setText("Browse...");
browseButton.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(SelectionEvent e)
{
DirectoryDialog dialog = new DirectoryDialog(getShell());
dialog.setText("Export Folder");
dialog.setMessage("Select a folder to which to export:");
String value = exportFolderText.getText();
if (value.length() != 0)
{
try
{
File existingFolder = IOUtil.getExistingFolder(new File(value));
if (existingFolder != null)
{
dialog.setFilterPath(existingFolder.getAbsolutePath());
}
}
catch (Exception ex)
{
TargletsUIPlugin.INSTANCE.log(ex, IStatus.WARNING);
}
}
String dir = dialog.open();
if (dir != null)
{
exportFolderText.setText(dir);
validatePage();
}
}
});
setPageComplete(false);
new Job("Determine Target Definitions")
{
@Override
protected IStatus run(IProgressMonitor monitor)
{
try
{
final ITargetDefinition[] targetDefinitions = TargetPlatformUtil.getTargetDefinitions(monitor);
if (targetDefinitions.length != 0)
{
ITargetDefinition activeTargetDefinition = TargetPlatformUtil.getActiveTargetDefinition();
if (activeTargetDefinition != null)
{
activeTargetHandle = activeTargetDefinition.getHandle();
boolean found = false;
for (ITargetDefinition targetDefinition : targetDefinitions)
{
if (targetDefinition.getHandle().equals(activeTargetHandle))
{
activeTargetDefinition = targetDefinition;
found = true;
break;
}
}
if (!found)
{
activeTargetDefinition = null;
}
}
UIUtil.syncExec(getShell(), new Runnable()
{
public void run()
{
targetDefinitionViewer.setInput(targetDefinitions);
}
});
final ITargetDefinition defaultTargetDefinition = activeTargetDefinition != null ? activeTargetDefinition : targetDefinitions[0];
if (defaultTargetDefinition != null)
{
UIUtil.syncExec(getShell(), new Runnable()
{
public void run()
{
targetDefinitionViewer.setSelection(new StructuredSelection(defaultTargetDefinition));
}
});
}
}
}
catch (final Exception ex)
{
UIUtil.syncExec(getShell(), new Runnable()
{
public void run()
{
setErrorMessage(ex.getMessage());
}
});
return TargletsUIPlugin.INSTANCE.getStatus(ex);
}
UIUtil.syncExec(getShell(), new Runnable()
{
public void run()
{
validatePage();
}
});
return Status.OK_STATUS;
}
}.schedule();
}
protected void validatePage()
{
IStructuredSelection selection = (IStructuredSelection)targetDefinitionViewer.getSelection();
targetDefinition = (ITargetDefinition)selection.getFirstElement();
if (targetDefinition == null)
{
setMessage("Select a target definition to export.");
setPageComplete(false);
return;
}
String path = exportFolderText.getText();
if (path.length() == 0)
{
setMessage("Enter a folder to which to export.");
setPageComplete(false);
return;
}
try
{
exportFolder = new File(path);
}
catch (Exception ex)
{
setErrorMessage(ex.getMessage());
setPageComplete(false);
return;
}
setMessage(DEFAULT_MESSAGE);
setPageComplete(true);
}
/**
* @author Eike Stepper
*/
private final class TargetLabelProvider extends LabelProvider implements IFontProvider
{
private final Font baseFont = targetDefinitionViewer.getControl().getFont();
@Override
public Image getImage(Object element)
{
if (element instanceof ITargetDefinition)
{
return TargletsUIPlugin.INSTANCE.getSWTImage("target_obj");
}
return null;
}
@Override
public String getText(Object element)
{
if (element instanceof ITargetDefinition)
{
ITargetDefinition targetDefinition = (ITargetDefinition)element;
String text = targetDefinition.getName();
if (targetDefinition.getHandle().equals(activeTargetHandle))
{
text += " (Active)";
}
return text;
}
return "";
}
public Font getFont(Object element)
{
if (element instanceof ITargetDefinition)
{
ITargetDefinition targetDefinition = (ITargetDefinition)element;
if (targetDefinition.getHandle().equals(activeTargetHandle))
{
return TargletsUIPlugin.getBoldFont(baseFont);
}
}
return null;
}
}
}