blob: 168faa50ed47e4e46b12052dab7f39776b0cde72 [file] [log] [blame]
/**
* Copyright (c) 2009-2010 Thales Corporate Services S.A.S.
* 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
* https://www.eclipse.org/legal/epl-v2.0
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thales Corporate Services S.A.S - initial API and implementation
*/
package org.eclipse.egf.model.pattern.commands;
import java.util.Collection;
import java.util.List;
import org.eclipse.core.resources.WorkspaceJob;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.egf.common.helper.EMFHelper;
import org.eclipse.egf.core.fcore.IPlatformFcoreProvider;
import org.eclipse.egf.model.edit.EGFModelEditPlugin;
import org.eclipse.egf.model.edit.l10n.EGFModelEditMessages;
import org.eclipse.egf.model.pattern.Pattern;
import org.eclipse.egf.model.pattern.PatternMethod;
import org.eclipse.egf.model.pattern.PatternPackage;
import org.eclipse.egf.model.pattern.template.TemplateModelFileHelper;
import org.eclipse.emf.common.util.UniqueEList;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.edit.command.RemoveCommand;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.osgi.util.NLS;
/**
* @author Xavier Maysonnave
*/
public class PatternRemovePatternMethodCommand extends RemoveCommand {
protected List<PatternMethod> _methods;
protected Resource _resource;
public PatternRemovePatternMethodCommand(EditingDomain domain, EObject owner, Collection<?> collection) {
super(domain, owner, PatternPackage.Literals.PATTERN__METHODS, collection);
}
@Override
protected boolean prepare() {
boolean result = super.prepare();
if (result == false) {
return false;
}
if (owner instanceof Pattern == false) {
return false;
}
if (feature != PatternPackage.Literals.PATTERN__METHODS) {
return false;
}
Pattern pattern = (Pattern) owner;
if (pattern.eResource() == null || pattern.eResource() instanceof IPlatformFcoreProvider == false) {
return false;
}
_methods = new UniqueEList<PatternMethod>();
for (Object object : collection) {
if (object instanceof PatternMethod) {
_methods.add((PatternMethod) object);
}
}
_resource = pattern.eResource();
return true;
}
@Override
public void doUndo() {
performRestorePatternMethods(_resource, _methods);
super.doUndo();
}
public static void performDeletePatternMethods(final Resource resource, final List<PatternMethod> methods) {
if (resource == null || methods == null || methods.isEmpty()) {
return;
}
WorkspaceJob job = new WorkspaceJob(EGFModelEditMessages.RemovePatternMethodCommand_execute) {
@Override
public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException {
// Remove PatternMethod
try {
TemplateModelFileHelper.removeTemplates(monitor, methods);
return Status.OK_STATUS;
} catch (Throwable t) {
if (t instanceof CoreException) {
return ((CoreException) t).getStatus();
}
return EGFModelEditPlugin.getPlugin().newStatus(Status.ERROR, NLS.bind(EGFModelEditMessages.PatternRemovePatternMethodCommand_execute_exception, resource.getURI()), t);
} finally {
monitor.done();
}
}
};
job.setRule(EMFHelper.getProject(resource));
job.schedule();
}
public static void performRestorePatternMethods(final Resource resource, final List<PatternMethod> methods) {
if (resource == null || methods == null || methods.isEmpty() || resource instanceof IPlatformFcoreProvider == false) {
return;
}
WorkspaceJob job = new WorkspaceJob(EGFModelEditMessages.RestorePatternMethodCommand_execute) {
@Override
public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException {
try {
// Restore Pattern
TemplateModelFileHelper.restoreTemplates(monitor, ((IPlatformFcoreProvider) resource).getIPlatformFcore(), methods);
return Status.OK_STATUS;
} catch (Throwable t) {
if (t instanceof CoreException) {
return ((CoreException) t).getStatus();
}
return EGFModelEditPlugin.getPlugin().newStatus(Status.ERROR, NLS.bind(EGFModelEditMessages.PatternRestorePatternMethodCommand_execute_exception, resource.getURI()), t);
} finally {
monitor.done();
}
}
};
job.setRule(EMFHelper.getProject(resource));
job.schedule();
}
}