blob: de462608969e72f8bd889a91c68d5e14cf730cef [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004-2008 Akos Horvath, Gergely Varro and Daniel Varro
* 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:
* Akos Horvath, Gergely Varro - initial API and implementation
*******************************************************************************/
package org.eclipse.viatra2.gtasm.patternmatcher.impl.patternmatcher.core;
import org.eclipse.viatra2.gtasm.interpreter.exception.ViatraTransformationException;
import org.eclipse.viatra2.gtasm.interpreter.executionEnvironment.IExecutionEnvironment;
import org.eclipse.viatra2.gtasm.patternmatcher.exceptions.PatternMatcherCompileTimeException;
import org.eclipse.viatra2.gtasm.patternmatcher.extension.IPatternMatcherFactory;
import org.eclipse.viatra2.gtasm.patternmatcher.impl.patternmatcher.term.BasicTermHandler;
import org.eclipse.viatra2.gtasm.patternmatcher.impl.patternmatcher.term.TermHandler;
import org.eclipse.viatra2.gtasm.patternmatcher.patterns.IPatternMatcher;
import org.eclipse.viatra2.gtasmmodel.gtasm.metamodel.gt.GTPattern;
/**
* Implements the IPatternMatcherFactory for org.eclipse.viatra2.gtasm.patternmatcher.extension point for the viatra GTASM intepreter
* @author Akos Horvath
*
*/
public class LocalSearchPatternMatcherFactory implements IPatternMatcherFactory {
/* (non-Javadoc)
* @see org.eclipse.viatra2.gtasm.patternmatcher.extension.IPatternMatcherFactory#getPatternMatcher(org.eclipse.viatra2.gtasm.interpreter.executionEnvironment.IExecutionEnvironment, org.eclipse.viatra2.gtasmmodel.gtasm.metamodel.gt.GTPattern)
*/
public IPatternMatcher getPatternMatcher(IExecutionEnvironment executionEnvironment,
GTPattern gtPattern) throws ViatraTransformationException {
IPatternMatcher patternMatcher = null;
if (PatternMatchers.getInstance().containsKey(gtPattern)) {
// We had it precompiled
patternMatcher=PatternMatchers.getInstance().get(gtPattern);
} else {
TermHandler handler =
new BasicTermHandler(executionEnvironment);
PatternBuilder patternBuilder =
new PatternBuilder(executionEnvironment.getFramework().getLogger(),
executionEnvironment.getFramework().getTopmodel().getModelManager(),
handler);
try {
patternMatcher = patternBuilder.construct(gtPattern);
PatternMatchers.getInstance().put(gtPattern, patternMatcher);
} catch (ViatraTransformationException e) {
throw e.addNewStackElement(gtPattern);
}
}
return patternMatcher;
}
}