blob: 353bec9656ae20e950ee195990c1b00933ad3a39 [file] [log] [blame]
/**
* Copyright (c) 2013, 2019 Mia-Software 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:
* Gregoire Dupe (Mia-Software) - Bug 406570 - Handlers to Save and SaveAs EMF resources
*/
package org.eclipse.modisco.facet.util.emf.ui.internal;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.Collections;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.modisco.facet.util.core.Logger;
import org.eclipse.modisco.facet.util.emf.ui.internal.dialogs.SaveAsDialog;
import org.eclipse.modisco.facet.util.ui.internal.exported.dialog.IDialogCallback;
import org.eclipse.modisco.facet.util.ui.internal.exported.dialog.IOkDialog;
import org.eclipse.modisco.facet.util.ui.internal.exported.dialog.IOkDialogFactory;
import org.eclipse.modisco.facet.util.ui.internal.exported.dialog.IWithResultDialogCallback;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.widgets.Shell;
public final class ResourceUiUtils {
private ResourceUiUtils() {
// Must no be used
}
public static IOkDialog save(final Resource resource, final Shell shell) {
IOkDialog dialog = null;
try {
resource.save(Collections.EMPTY_MAP);
} catch (MalformedURLException e) {
ResourceUiUtils.openSaveAsDialog(resource, shell);
} catch (IOException e) {
final IDialogCallback<Void> callBack = new IDialogCallback<Void>() {
public void committed(final Void result2) {
// Nothing to do.
}
};
dialog = savingFailed(e, shell, callBack);
}
return dialog;
}
private static IOkDialog savingFailed(final IOException exception,
final Shell shell, final IDialogCallback<Void> callBack) {
Logger.logError(exception, Activator.getDefault());
final String errorMessage = NLS.bind(
Messages.ResourceUiUtils_TheResourceSavingFailed,
exception.getMessage());
return IOkDialogFactory.DEFAULT.openErrorDialog(shell,
Messages.ResourceUiUtils_SavingFailed, errorMessage, callBack);
}
public static SaveAsDialog openSaveAsDialog(final Resource resource,
final Shell shell) {
final IWithResultDialogCallback<String> callBack = new IWithResultDialogCallback<String>() {
public void commited(final String result) {
ResourceUiUtils.saveAs(resource, result, shell);
}
public void canceled(final String result) {
// Nothing to do
}
};
final SaveAsDialog dialog = new SaveAsDialog(shell, resource.getURI()
.toString(), callBack);
dialog.open();
return dialog;
}
protected static IOkDialog saveAs(final Resource resource,
final String result, final Shell shell) {
IOkDialog dialog = null;
try {
resource.setURI(URI.createURI(result));
resource.save(Collections.EMPTY_MAP);
} catch (IOException e) {
final IDialogCallback<Void> callBack = new IDialogCallback<Void>() {
public void committed(final Void result2) {
ResourceUiUtils.openSaveAsDialog(resource, shell);
}
};
dialog = savingFailed(e, shell, callBack);
}
return dialog;
}
}