blob: aa232ae08ef16dd70b980258f65940a6205dbdf8 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014 Hussein Mhanna
*
* 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:
* Hussein Mhanna - initial API and implementation
******************************************************************************/
package org.eclipse.rmf.reqif10.search.edit.util;
import java.util.Collection;
import java.util.Map;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.common.command.CompoundCommand;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.edit.command.SetCommand;
import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.rmf.reqif10.search.criteria.Criteria;
import org.eclipse.rmf.reqif10.search.util.ReqIFSearcher;
/**
* @author Hussein MHANNA
*
*/
public class ReqIFEditSearcher extends ReqIFSearcher {
/**
* The compound command
*/
private CompoundCommand compoundCommand;
/**
* The editing domain
*/
private EditingDomain editingDomain;
/**
* The constructor
*
* @param editingDomain
* : The editing domain
*/
public ReqIFEditSearcher() {
super();
}
public static Map<Resource, Collection<EObject>> find(
IProgressMonitor monitor, Collection<Resource> resources,
Collection<Criteria> criterias, boolean replace) {
ReqIFSearcher searcher = new ReqIFSearcher();
return searcher.search(monitor, resources, criterias, replace);
}
@Override
protected Collection<EObject> search(IProgressMonitor monitor,
Resource resource, Collection<Criteria> criterias, boolean replace) {
Collection<EObject> result = null;
editingDomain = AdapterFactoryEditingDomain
.getEditingDomainFor(resource.getContents().get(0));
if (replace) {
compoundCommand = new CompoundCommand();
result = super.search(monitor, resource, criterias, replace);
executeCommand(editingDomain, compoundCommand);
compoundCommand = null;
editingDomain = null;
} else {
result = super.search(monitor, resource, criterias, replace);
}
return result;
}
protected void executeCommand(EditingDomain editingDomain, Command command) {
if (editingDomain != null) {
editingDomain.getCommandStack().execute(command);
}
}
@Override
protected void doSetValue(EObject eObject, EStructuralFeature feature,
Object value) {
if (editingDomain != null) {
Command command = SetCommand.create(editingDomain, eObject,
feature, value);
compoundCommand.append(command);
} else {
super.doSetValue(eObject, feature, value);
}
}
}