blob: 9c4d667d21b6f8a842b6f839685dca91409e9cd5 [file] [log] [blame]
/**
* <copyright>
* Copyright (c) 2010-2014 Henshin developers. 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
* </copyright>
*/
package org.eclipse.emf.henshin.interpreter;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.henshin.model.Node;
import org.eclipse.emf.henshin.model.Rule;
/**
* Interface for rules matches.
* Maps {@link Node}s to {@link EObject}s and assigns
* parameter values by extending {@link Assignment}.
*
* @author Christian Krause, Gregor Bonifer, Enrico Biermann
*/
public interface Match extends Assignment {
/**
* Get the rule that this match is used for.
* @return The rule.
*/
Rule getRule();
/**
* Get the match target for a node.
* @param node The node.
* @return The matched target object.
*/
EObject getNodeTarget(Node node);
/**
* Set the match target for a node.
* @param node The node.
* @param target The match target.
*/
void setNodeTarget(Node node, EObject target);
/**
* Get all node targets of this match.
* @return All node targets.
*/
List<EObject> getNodeTargets();
/**
* Get the nested matches for a multi-rule.
* @param multiRule The multi-rule.
* @return List of matches.
*/
List<Match> getMultiMatches(Rule multiRule);
/**
* Checks whether this match overlaps with another match.
* The second match can be from a different rule. Two matches
* overlap if {@link #getNodeTargets()} contain shared elements.
* @param match A second match to check against.
* @return <code>true</code> if both matches have common targets.
*/
boolean overlapsWith(Match match);
/**
* Checks if all nodes have a target and all nested matches are also complete.
* @return <code>true</code> if all nodes are matched.
*/
boolean isComplete();
/**
* Checks whether this match is complete, whether the typing of the matched
* objects is correct with respect to the node types, and whether all edges
* are present.
* @return <code>true</code> if the match is valid.
*/
boolean isValid();
}