blob: 16ae947efca3e7e30e867efb6015cae823b9f7a4 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2015 Soft-Maint.
* 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:
* Jonathan Pepin (Soft-Maint) - Bug 463907 - Command for load and save Facet serialization
* Grégoire Dupé (Soft-Maint) - Bug 469959 - NullPointerException in SetStructuralFeatureInstanceResourceHandler.execute (42)
*******************************************************************************/
package org.eclipse.emf.facet.efacet.ui.internal.handlers;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.facet.efacet.core.IFacetManager;
import org.eclipse.emf.facet.efacet.core.exception.FacetManagerException;
import org.eclipse.emf.facet.efacet.ui.internal.Messages;
import org.eclipse.emf.facet.efacet.ui.internal.exported.dialog.IUriDialogFactory;
import org.eclipse.emf.facet.util.ui.internal.exported.dialog.IDialogCallback;
import org.eclipse.emf.facet.util.ui.internal.exported.dialog.IOkDialogFactory;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchPartSite;
import org.eclipse.ui.handlers.HandlerUtil;
public class SetStructuralFeatureInstanceResourceHandler extends
AbstractHandler {
@Override
public boolean isEnabled() {
return Utils.getFacetManager() != null;
}
@Override
public boolean isHandled() {
return Utils.getFacetManager() != null;
}
public Object execute(final ExecutionEvent event) throws ExecutionException {
Object result = null;
final IFacetManager facetManager = Utils.getFacetManager(event);
if (facetManager != null) {
final IWorkbenchPart activePart = HandlerUtil.getActivePart(event);
final IWorkbenchPartSite site = activePart.getSite();
final Shell shell = site.getShell();
final URI uri = getSResourceUri(facetManager);
final IDialogCallback<URI> callback = new IDialogCallback<URI>() {
public void committed(final URI resultUri) {
changeSerializationMgrURI(facetManager, resultUri);
}
};
result = IUriDialogFactory.DEFAULT.openUriDialog(uri,
callback, shell, Display.getDefault());
}
return result;
}
private static URI getSResourceUri(final IFacetManager facetManager) {
final Resource sResource = facetManager.getSerializationResource();
URI uri = null;
if (sResource != null) {
uri = sResource.getURI();
}
return uri;
}
public static void changeSerializationMgrURI(final IFacetManager facetManager,
final URI uri) {
Resource sResource = null;
final ResourceSet resourceSet = facetManager.getResourceSet();
try {
sResource = resourceSet.getResource(uri, true);
} catch (Exception e) {
sResource = resourceSet.createResource(uri);
}
try {
facetManager.setSerializationResource(sResource);
} catch (FacetManagerException e) {
IOkDialogFactory.DEFAULT.openErrorDialog(
new Shell(),
e,
Messages.SetStructuralFeatureInstanceResourceHandler_SerializationUriSettigFailed);
}
}
}