blob: e513d838cb9d6d5ab3be7bd1e070c7587ce2dbb6 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2015 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.pde.internal.ui.wizards.target;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.jface.wizard.WizardSelectionPage;
import org.eclipse.pde.core.target.ITargetDefinition;
import org.eclipse.pde.core.target.ITargetPlatformService;
import org.eclipse.pde.internal.core.PDECore;
import org.eclipse.pde.internal.ui.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.PlatformUI;
/**
* First wizard page used to create a target definition. Defines the location where
* the definition will be created and how to seed the definition.
*/
public class TargetCreationPage extends WizardSelectionPage {
protected static final int USE_EMPTY = 0;
protected static final int USE_DEFAULT = 1;
protected static final int USE_CURRENT_TP = 2;
protected static final int USE_EXISTING_TARGET = 3;
private Button fEmptyButton;
private Button fDefaultButton;
private Button fCurrentTPButton;
private Button fExistingTargetButton;
private Combo fTargets;
private String[] fTargetIds;
private String templateTargetId;
private ITargetDefinition[] fTargetDefs = new ITargetDefinition[4];
public TargetCreationPage(String pageName) {
super(pageName);
setTitle(PDEUIMessages.TargetProfileWizardPage_title);
setDescription(PDEUIMessages.TargetProfileWizardPage_description);
}
/**
* Returns the target service or <code>null</code> if none.
*
* @return target service or <code>null</code>
*/
protected ITargetPlatformService getTargetService() {
return (ITargetPlatformService) PDECore.getDefault().acquireService(ITargetPlatformService.class.getName());
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
*/
public void createControl(Composite parent) {
Composite comp = SWTFactory.createComposite(parent, 2, 1, GridData.FILL_BOTH);
SWTFactory.createLabel(comp, PDEUIMessages.TargetCreationPage_0, 3);
fEmptyButton = SWTFactory.createRadioButton(comp, PDEUIMessages.TargetCreationPage_1, 2);
fDefaultButton = SWTFactory.createRadioButton(comp, PDEUIMessages.TargetCreationPage_2, 2);
fCurrentTPButton = SWTFactory.createRadioButton(comp, PDEUIMessages.TargetCreationPage_3, 2);
fExistingTargetButton = SWTFactory.createRadioButton(comp, PDEUIMessages.TargetCreationPage_4, 1);
fExistingTargetButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
boolean enabled = fExistingTargetButton.getSelection();
fTargets.setEnabled(enabled);
}
});
fEmptyButton.setSelection(true);
fTargets = SWTFactory.createCombo(comp, SWT.SINGLE | SWT.READ_ONLY, 1, GridData.BEGINNING, null);
fTargets.setEnabled(false);
initializeTargetCombo();
fTargets.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
templateTargetId = fTargetIds[fTargets.getSelectionIndex()];
}
});
Dialog.applyDialogFont(comp);
setSelectedNode(new EditTargetNode());
setControl(comp);
setPageComplete(true);
PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, IHelpContextIds.NEW_TARGET_WIZARD);
}
protected void initializeTargetCombo() {
IConfigurationElement[] elements = PDECore.getDefault().getTargetProfileManager().getSortedTargets();
fTargetIds = new String[elements.length];
for (int i = 0; i < elements.length; i++) {
String name = elements[i].getAttribute("name"); //$NON-NLS-1$
if (fTargets.indexOf(name) == -1)
fTargets.add(name);
fTargetIds[i] = elements[i].getAttribute("id"); //$NON-NLS-1$
}
if (elements.length > 0) {
fTargets.select(0);
setTargetId(fTargetIds[fTargets.getSelectionIndex()]);
}
}
protected int getInitializationOption() {
if (fEmptyButton.getSelection())
return USE_EMPTY;
if (fDefaultButton.getSelection())
return USE_DEFAULT;
else if (fCurrentTPButton.getSelection())
return USE_CURRENT_TP;
return USE_EXISTING_TARGET;
}
protected String getTargetId() {
return templateTargetId;
}
protected void setTargetId(String targetId) {
templateTargetId = targetId;
}
protected ITargetDefinition createTarget(int targetOption) {
ITargetPlatformService service = getTargetService();
if (service != null) {
ITargetDefinition definition = service.newTarget();
switch (targetOption) {
case USE_EMPTY :
definition.setName(PDEUIMessages.TargetCreationPage_6);
break;
case USE_DEFAULT :
try {
populateBasicTarget(definition);
} catch (CoreException e) {
setErrorMessage(e.getMessage());
return null;
}
break;
case USE_CURRENT_TP :
try {
populateFromCurrentTargetPlatform(definition);
} catch (CoreException e) {
setErrorMessage(e.getMessage());
return null;
}
break;
case USE_EXISTING_TARGET :
try {
populateFromTemplate(definition, getTargetId());
} catch (CoreException e) {
setErrorMessage(e.getMessage());
return null;
}
break;
}
return definition;
}
return null;
}
/**
* Applies basic target settings to the given target definition.
*
* @param definition
* @throws CoreException
*/
private void populateBasicTarget(ITargetDefinition definition) throws CoreException {
ITargetPlatformService service = getTargetService();
if (service != null) {
ITargetDefinition def = service.newDefaultTarget();
service.copyTargetDefinition(def, definition);
}
}
/**
* Populates the given definition from current target platform settings.
*
* @param definition
* @throws CoreException
*/
private void populateFromCurrentTargetPlatform(ITargetDefinition definition) throws CoreException {
ITargetPlatformService service = getTargetService();
if (service != null) {
ITargetDefinition current = service.getWorkspaceTargetDefinition();
service.copyTargetDefinition(current, definition);
}
}
/**
* Populates the given definition from the specified target template.
*
* @param definition
* @param id target extension identifier
* @exception CoreException if unable to complete
*/
private void populateFromTemplate(ITargetDefinition definition, String id) throws CoreException {
ITargetPlatformService service = getTargetService();
if (service != null) {
service.loadTargetDefinition(definition, id);
}
}
/* (non-Javadoc)
* @see org.eclipse.jface.wizard.WizardSelectionPage#getNextPage()
*/
@Override
public IWizardPage getNextPage() {
ITargetDefinition target = null;
int option = getInitializationOption();
if (fTargetDefs[option] == null) {
fTargetDefs[option] = createTarget(option);
} else if (option == USE_EXISTING_TARGET) {
try {
populateFromTemplate(fTargetDefs[option], getTargetId());
} catch (CoreException e) {
setErrorMessage(e.getMessage());
}
}
target = fTargetDefs[option];
if (target != null) {
((NewTargetDefinitionWizard2) getWizard()).setTargetDefinition(target);
((EditTargetNode) getSelectedNode()).setTargetDefinition(target);
return super.getNextPage();
}
return null;
}
}