blob: 8b577b7e480861f935aeac380d5843ab75e1d0a1 [file] [log] [blame]
/*
* Copyright (c) 2014, 2015 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.setup.doc.user.wizard;
import org.eclipse.oomph.internal.ui.AccessUtil;
import org.eclipse.oomph.internal.ui.Capture;
import org.eclipse.oomph.setup.CompoundTask;
import org.eclipse.oomph.setup.ProductVersion;
import org.eclipse.oomph.setup.Project;
import org.eclipse.oomph.setup.ProjectCatalog;
import org.eclipse.oomph.setup.SetupTask;
import org.eclipse.oomph.setup.VariableTask;
import org.eclipse.oomph.setup.internal.core.SetupContext;
import org.eclipse.oomph.setup.internal.core.SetupTaskPerformer;
import org.eclipse.oomph.setup.p2.P2Task;
import org.eclipse.oomph.setup.ui.wizards.SetupWizard;
import org.eclipse.oomph.setup.ui.wizards.SetupWizardPage;
import org.eclipse.oomph.util.ReflectUtil;
import org.eclipse.emf.common.util.TreeIterator;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;
import org.eclipse.jface.viewers.CheckboxTreeViewer;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Link;
import org.eclipse.swt.widgets.Text;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* @ignore
*/
public abstract class CaptureSetupWizard extends Capture.Window<WizardDialog>
{
protected SetupWizard getSetupWizard(WizardDialog wizardDialog)
{
return (SetupWizard)wizardDialog.getCurrentPage().getWizard();
}
protected SetupContext getSetupContext(WizardDialog wizardDialog)
{
return getSetupWizard(wizardDialog).getSetupContext();
}
protected ResourceSet getResourceSet(WizardDialog wizardDialog)
{
return getSetupWizard(wizardDialog).getResourceSet();
}
protected SetupTaskPerformer getPerformer(WizardDialog wizardDialog)
{
return getSetupWizard(wizardDialog).getPerformer();
}
protected void advanceToNextPage(WizardDialog wizardDialog)
{
((SetupWizardPage)wizardDialog.getCurrentPage()).gotoNextPage();
}
protected void regressToPreviousPage(WizardDialog wizardDialog)
{
ReflectUtil.invokeMethod("backPressed", wizardDialog);
}
@SuppressWarnings("unchecked")
protected <T extends Viewer> T getViewer(WizardDialog wizardDialog, String fieldName)
{
return (T)ReflectUtil.getValue(fieldName, wizardDialog.getCurrentPage());
}
@SuppressWarnings("unchecked")
protected <T extends Control> T getViewerControl(WizardDialog wizardDialog, String fieldName)
{
return (T)getViewer(wizardDialog, fieldName).getControl();
}
protected void postProcessProductPage(WizardDialog wizardDialog)
{
getViewerControl(wizardDialog, "productViewer").setFocus();
ResourceSet resourceSet = getResourceSet(wizardDialog);
ProductVersion luna = (ProductVersion)resourceSet.getEObject(
URI.createURI("index:/org.eclipse.setup#//@productCatalogs[name='org.eclipse.products']/@products[name='epp.package.standard']/@versions[name='luna']"),
false);
TreeViewer productViewer = getViewer(wizardDialog, "productViewer");
productViewer.setSelection(new StructuredSelection(luna.getProduct()));
AccessUtil.busyWait(10);
ComboViewer versionComboViewer = getViewer(wizardDialog, "versionComboViewer");
versionComboViewer.setSelection(new StructuredSelection(luna));
ComboViewer poolComboViewer = getViewer(wizardDialog, "poolComboViewer");
poolComboViewer.getCombo().select(0);
Link link = getWidget(wizardDialog, "version");
link.setText("<a>1.0.0 Build 1234</a>");
link.getParent().layout(true);
}
protected void postProcessProjectPage(WizardDialog wizardDialog)
{
ResourceSet resourceSet = getResourceSet(wizardDialog);
ProjectCatalog projectCatalog = (ProjectCatalog)resourceSet.getResource(URI.createURI("index:/org.eclipse.projects.setup"), false).getContents().get(0);
TreeViewer projectViewer = getViewer(wizardDialog, "projectViewer");
projectViewer.getControl().setFocus();
for (Iterator<Project> it = projectCatalog.getProjects().iterator(); it.hasNext();)
{
Project project = it.next();
String label = project.getLabel();
if (!"Oomph".equals(label))
{
if (!"<User>".equals(label))
{
it.remove();
}
}
else
{
projectViewer.setSelection(new StructuredSelection(project));
}
}
ReflectUtil.invokeMethod(ReflectUtil.getMethod(projectViewer, "fireDoubleClick", DoubleClickEvent.class), projectViewer, (Object)null);
}
protected void postProcessUser(WizardDialog wizardDialog)
{
List<EObject> objectsToRemove = new ArrayList<EObject>();
for (TreeIterator<EObject> it = getSetupContext(wizardDialog).getUser().eAllContents(); it.hasNext();)
{
EObject eObject = it.next();
if (eObject instanceof SetupTask && !(eObject instanceof CompoundTask || eObject instanceof VariableTask))
{
objectsToRemove.add(eObject);
it.prune();
}
}
for (EObject eObject : objectsToRemove)
{
EcoreUtil.remove(eObject);
}
}
protected void postProcessVariablePage(WizardDialog wizardDialog, String installationID)
{
postProcessUser(wizardDialog);
ReflectUtil.setValue("save", wizardDialog.getCurrentPage(), false);
Button showAllButton = getWidget(wizardDialog, "showAll");
showAllButton.setSelection(true);
showAllButton.notifyListeners(SWT.Selection, new Event());
AccessUtil.busyWait(300);
Text text = getWidget(wizardDialog, "installation.id.control");
text.setText(installationID);
text.notifyListeners(SWT.Modify, null);
Combo combo = getWidget(wizardDialog, "git.clone.oomph.remoteURI.control");
combo.setText("ssh://${git.user.id}@git.eclipse.org:29418/oomph/org.eclipse.oomph");
combo.notifyListeners(SWT.Modify, null);
AccessUtil.busyWait(100);
}
protected void postProcessConfirmationPage(WizardDialog wizardDialog, boolean all)
{
AccessUtil.busyWait(100);
CheckboxTreeViewer taskViewer = getViewer(wizardDialog, "viewer");
taskViewer.getControl().setFocus();
if (all)
{
Button showAll = getWidget(wizardDialog, "showAllTasks");
showAll.setSelection(true);
showAll.notifyListeners(SWT.Selection, new Event());
}
Button overwrite = getWidget(wizardDialog, "overwrite");
if (overwrite != null)
{
overwrite.setSelection(true);
overwrite.notifyListeners(SWT.Selection, new Event());
AccessUtil.busyWait(10);
}
{
ITreeContentProvider provider = (ITreeContentProvider)taskViewer.getContentProvider();
Object[] children = provider.getChildren(taskViewer.getInput());
for (Object object : provider.getChildren(children[0]))
{
if (object instanceof P2Task)
{
taskViewer.setSelection(new StructuredSelection(object));
break;
}
}
}
AccessUtil.busyWait(10);
TreeViewer childrenViewer = getViewer(wizardDialog, "childrenViewer");
childrenViewer.getControl().setFocus();
{
ITreeContentProvider provider = (ITreeContentProvider)childrenViewer.getContentProvider();
Object[] children = provider.getChildren(childrenViewer.getInput());
childrenViewer.setSelection(new StructuredSelection(children[0]));
}
SashForm hsash = getWidget(wizardDialog, "hsash");
hsash.setWeights(new int[] { 12, 9 });
SashForm vsash = getWidget(wizardDialog, "vsash");
vsash.setWeights(new int[] { 2, 1 });
AccessUtil.busyWait(10);
}
protected Image getCalloutImage(int index)
{
Image image = ExtendedImageRegistry.INSTANCE.getImage(URI.createPlatformPluginURI("org.eclipse.oomph.setup.doc/images/callout-" + index + ".png", false));
return new Image(image.getDevice(), image.getImageData());
}
}