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