blob: 4b96f4b6f0a34168bb5556b1f116d777ec8d4aa3 [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.internal.algorithms;
import org.eclipse.viatra2.core.IModelManager;
import org.eclipse.viatra2.gtasm.patternmatcher.PatternCallSignature;
import org.eclipse.viatra2.gtasm.patternmatcher.exceptions.PatternMatcherCompileTimeException;
import org.eclipse.viatra2.gtasm.patternmatcher.exceptions.PatternMatcherRuntimeException;
import org.eclipse.viatra2.gtasm.patternmatcher.impl.gtmatcher.exceptions.GTRuleBuildingException;
import org.eclipse.viatra2.gtasm.patternmatcher.impl.gtmatcher.internal.GTElementMapping;
import org.eclipse.viatra2.gtasm.patternmatcher.impl.gtmatcher.internal.GTOperationContext;
import org.eclipse.viatra2.gtasm.patternmatcher.impl.patternmatcher.internal.callgraph.BodyNode;
import org.eclipse.viatra2.gtasm.patternmatcher.impl.patternmatcher.internal.callgraph.FlattenedPattern;
import org.eclipse.viatra2.gtasm.patternmatcher.impl.patternmatcher.internal.callgraph.PatternReferenceNode;
import org.eclipse.viatra2.gtasm.patternmatcher.impl.patternmatcher.internal.operation.SearchPlanOperation;
import org.eclipse.viatra2.gtasm.patternmatcher.impl.patternmatcher.internal.searchgraph.AbstractNode;
import org.eclipse.viatra2.gtasm.patternmatcher.impl.patternmatcher.internal.searchgraph.SearchGraphEdge;
import org.eclipse.viatra2.gtasm.patternmatcher.impl.patternmatcher.internal.searchgraph.SearchGraphNode;
import org.eclipse.viatra2.gtasm.patternmatcher.impl.patternmatcher.internal.searchgraph.traceability.EdgeTraceabilityElement;
import org.eclipse.viatra2.gtasm.patternmatcher.impl.patternmatcher.internal.searchgraph.traceability.NodeTraceabilityElement;
import org.eclipse.viatra2.gtasmmodel.gtasm.metamodel.asm.core.AnnotatedElement;
import org.eclipse.viatra2.gtasmmodel.gtasm.metamodel.asm.core.GTASMElement;
import java.util.Collection;
import java.util.TreeMap;
/**Interface for the search graph used in the optimization algorithm
* @author Akos Horvath
*
*/
public interface ISearchGraph {
public static final String VPM_RELATION_FQN = "vpm.relation";
public static final String VPM_ENTITY_FQN = "vpm.entity";
public static final int VARIABLEASSIGNMENT_WEIGHT = 5;
//These are the methods that are used by the optimization algorithms
public TreeMap<Integer, SearchGraphNode> getSearchNodes();
/** Returns the search operation generated from the search graph parametrized with the input parameters adornment
* @param pattern The flattened pattern to generate from
* @param adornment Adornment of the input parameter
* @param manager
* @return Vector of the Operation plan
* @throws PatternMatcherRuntimeException
*/
public Collection<SearchPlanOperation> generateSearchPlan(FlattenedPattern pattern, Boolean[] adornment, IModelManager manager) throws PatternMatcherRuntimeException;
/**
* Initializes the search graph
*/
public void initSearchGraph();
public void add(BodyNode node, FlattenedPattern result) throws PatternMatcherCompileTimeException;
/** Adds a pattern invocation node to the search graph
* @param prNode The new pattern invocation node
* @param result The flattened pattern of the search graph
* @throws PatternMatcherCompileTimeException
*/
public void add(PatternReferenceNode prNode, FlattenedPattern result) throws PatternMatcherCompileTimeException;
/** Returns the generated GTOperations and variable mapping
* @param gtElementMappings The RHS-LHS parameter mapping
* @param manager Model manager of the actual framework
* @param signature The input parameters' signatures
* @return
* @throws GTRuleBuildingException
*/
public GTOperationContext generateGTOperations(Collection<GTElementMapping> gtElementMappings, IModelManager manager, PatternCallSignature[] signature) throws GTRuleBuildingException;
/** Returns the search graph element with the input id
* @param key The id of the search graph element
* @return
*/
public SearchGraphNode getSearchNode(Integer key);
/** Evaluates the dangling relations and relationships and adds them to the flattened pattern's search graph
* @param pattern Flattened Pattern of the search graph
* @throws PatternMatcherCompileTimeException
*/
public void connectDanglingRelations(FlattenedPattern pattern) throws PatternMatcherCompileTimeException;
/**Return the EMF equivalent of the input SearchGraph element
* @param node The node whose EMF representation is returned
* @return
*/
public AnnotatedElement getGTASMRepresentation(AbstractNode node);
/**To add an edge based traceability element to the search graph
* @param edge The edge whose element is added
* @param element The traceability element
*/
public void addTraceabilityElement(SearchGraphEdge edge, EdgeTraceabilityElement element);
/**To add a node based traceability element to the search graph
* @param edge The edge whose element is added
* @param element The traceability element
*/
public void addTraceabilityElement(SearchGraphNode node, NodeTraceabilityElement element);
}