blob: 7f08a673b0860663b8055c69ac629257bef35e5f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011 WindRiver 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:
* WindRiver Corporation - initial API and implementation
* Ericsson AB (Pascal Rapicault) - Bug 387115 - Allow to export everything
*******************************************************************************/
package org.eclipse.equinox.internal.p2.importexport.internal.wizard;
import java.io.*;
import org.eclipse.core.runtime.*;
import org.eclipse.equinox.internal.p2.importexport.internal.Messages;
import org.eclipse.equinox.internal.p2.ui.ProvUI;
import org.eclipse.equinox.internal.p2.ui.model.ProfileElement;
import org.eclipse.equinox.p2.metadata.IInstallableUnit;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.PlatformUI;
public class ExportPage extends AbstractPage {
public ExportPage(String pageName) {
super(pageName);
setTitle(Messages.ExportPage_Title);
setDescription(Messages.ExportPage_Description);
}
@Override
protected void createContents(Composite composite) {
Label label = new Label(composite, SWT.NONE);
label.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false));
if (getSelfProfile() == null) {
label.setText(Messages.ExportPage_ERROR_CONFIG);
} else {
label.setText(Messages.ExportPage_Label);
createInstallationTable(composite);
createDestinationGroup(composite, true);
}
}
@Override
public void doFinish() throws Exception {
finishException = null;
if (viewer == null)
return;
// about to invoke the operation so save our state
saveWidgetValues();
final Object[] checked = viewer.getCheckedElements();
final boolean includeAllEntries = includeAllButton.getSelection();
OutputStream stream = null;
try {
File target = new File(ExportPage.this.destinationNameField.getText());
if (!target.exists())
target.createNewFile();
stream = new BufferedOutputStream(new FileOutputStream(target));
final OutputStream out = stream;
getContainer().run(true, true, new IRunnableWithProgress() {
public void run(IProgressMonitor monitor) throws InterruptedException {
try {
IInstallableUnit[] units = new IInstallableUnit[checked.length];
for (int i = 0; i < units.length; i++)
units[i] = ProvUI.getAdapter(checked[i], IInstallableUnit.class);
IStatus status = importexportService.exportP2F(out, units, includeAllEntries, monitor);
if (status.isMultiStatus()) {
final StringBuilder sb = new StringBuilder();
for (IStatus child : status.getChildren()) {
if (child.isMultiStatus()) {
for (IStatus grandchild : child.getChildren())
sb.append("<li>").append(grandchild.getMessage()).append("</li>"); //$NON-NLS-1$ //$NON-NLS-2$
} else if (child.isOK())
sb.insert(0, Messages.ExportPage_SuccessWithProblems);
else {
sb.insert(0, Messages.ExportPage_Fail);
sb.append(status.getMessage());
}
}
sb.append(Messages.ExportPage_FixSuggestion);
sb.append(Messages.ExportPage_TryAgainQuestion);
Runnable runnable = new Runnable() {
public void run() {
String title = Messages.ExportPage_Title;
tryAgain = StyledErrorDialog.openQuestion(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), title, sb.toString());
}
};
Display.getDefault().syncExec(runnable);
if (tryAgain)
throw new OperationCanceledException("User chosed try again."); //$NON-NLS-1$
}
} catch (OperationCanceledException e) {
throw new InterruptedException(e.getMessage());
} catch (Exception e) {
e.printStackTrace();
}
}
boolean tryAgain = false;
});
} finally {
if (stream != null) {
try {
stream.close();
} catch (IOException e) {
// do nothing
}
}
if (finishException != null)
throw finishException;
}
}
@Override
protected String getDialogTitle() {
return Messages.ExportPage_FILEDIALOG_TITLE;
}
@Override
protected Object getInput() {
ProfileElement element = new ProfileElement(null, getSelfProfile().getProfileId());
return element;
}
@Override
protected String getInvalidDestinationMessage() {
return Messages.ExportPage_DEST_ERRORMESSAGE;
}
@Override
protected void giveFocusToDestination() {
if (viewer != null)
viewer.getControl().setFocus();
}
@Override
protected String getDestinationLabel() {
return Messages.ExportPage_LABEL_EXPORTFILE;
}
@Override
protected int getBrowseDialogStyle() {
return SWT.SAVE;
}
}