/** * <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(); }