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 org.eclipse.emf.henshin.model.Rule;
  
  /**
   * Interface for {@link Rule} applications. 
   * Rule applications are reusable. To reuse an instance
   * you must invoke {@link #setPartialMatch(Match)} or
   * {@link #setCompleteMatch(Match)} or {@link #setRule(Rule)}
   * before every execution. 
   * 
   * @author Enrico Biermann, Christian Krause
   */
  public interface RuleApplication extends UnitApplication {
  
  	/**
  	 * Get the rule to be applied.
  	 * @return The rule to be applied.
  	 */
  	Rule getRule();
  
  	/**
  	 * Set the rule to be applied.
  	 * @param rule The rule to be applied.
  	 */
  	void setRule(Rule rule);
  
  	/**
  	 * Get the partial match to be used.
  	 * @return The partial match.
  	 */
  	Match getPartialMatch();
  
  	/**
  	 * Set the partial match to be used.
  	 * @param partialMatch The partial match (can be <code>null</code>).
  	 */
  	void setPartialMatch(Match partialMatch);
  
  	/**
  	 * Get the complete match to be used.
  	 * @return The complete match.
  	 */
  	Match getCompleteMatch();
  
  	/**
  	 * Set the complete match to be used. If it is set to <code>null</code>,
  	 * the complete match will be derived from the partial match.
  	 * @param completeMatch The complete match (can be <code>null</code>).
  	 */
  	void setCompleteMatch(Match completeMatch);
  
  	/**
  	 * Get the match for the result of the transformation (after the unit has been applied).
  	 * @return The match for the result.
  	 */
  	Match getResultMatch();
  
  }
  