blob: b3d2509f2211328b7f867584dc687c38585b64f6 [file] [log] [blame]
package org.eclipse.emf.henshin.sam.invcheck.filter;
import org.eclipse.core.runtime.Assert;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.henshin.sam.model.samrules.GTS;
import org.eclipse.emf.henshin.sam.model.samrules.GraphRule;
import org.eclipse.emf.henshin.sam.model.samrules.SamrulesPackage;
import org.eclipse.emf.henshin.sam.paf.FilterSkeleton;
import org.eclipse.emf.henshin.sam.paf.annotation.ResultDictEntry;
public class StructuralGraphRuleFilter extends FilterSkeleton<GraphVerificationData, GraphVerificationData> {
private ContainsGraphRuleHelper internalHelper;
@ResultDictEntry(entryName = "discarded")
private int discarded = 0;
@ResultDictEntry(entryName = "passed")
private int passed = 0;
@Override
protected void initData() {
Assert.isNotNull(this.getFilterDispatcher());
Assert.isNotNull(this.getFilterDispatcher().getFilterInput());
final EObject theEObject = this.getFilterDispatcher().getFilterInput();
Assert.isTrue(theEObject.eClass() == SamrulesPackage.eINSTANCE.getGTS());
final GTS theGTS = (GTS) theEObject;
final GraphRule[] rules = theGTS.getRules().toArray(new GraphRule[theGTS.getRules().size()]);
this.internalHelper = new ContainsGraphRuleHelper(rules);
}
public void produce() {
GraphVerificationData result;
// Map<GraphRule, Collection<Match>> map =
// this.internalHelper.findAllMatchingRules(this.currentInput.pair.second.getPriority(),
// this.currentInput.sourceGraph);
if (this.internalHelper.findMatchingRule(this.currentInput.pair.second.getPriority(),
this.currentInput.sourceGraph)) {
discarded++;
return;
} else {
result = this.currentInput; // new
// GraphVerificationData(this.currentInput.pair,this.currentInput.sourceGraph,this.currentInput.targetGraph);
try {
// System.out.println("gr, try to " +
// this.currentInput.sourceGraph.getNodes());
passed++;
this.defaultOutputPipe.queue(result);
// System.out.println("gr, queueud " +
// this.currentInput.sourceGraph.getNodes());
} catch (InterruptedException e) {
// System.out.println("gr, interrupted " +
// this.currentInput.sourceGraph.getNodes());
this.running = false;
}
}
}
@Override
protected void initFilter() {
super.initFilter();
this.filterName = "StructuralGraphRuleFilter";
}
}