/*
* Copyright © 2010 by Ondrej Skalicka. All Rights Reserved
*/
package cz.cvut.felk.cig.jcop.problem;
/**
* Operation is transformation of one {@link Configuration attributes} to another. Operations are part of definition of
* every problem.
*
* @author Ondrej Skalicka
*/
public interface Operation {
/**
* Executes operation on a attributes.
* <p/>
* Creates whole new attributes, no references to the old one are kept (except references via {@link
* OperationHistory}.
*
* @param configuration attributes to have operation executed upon
* @return new attributes, after operation execution
* @throws InvalidConfigurationException if operation is used on configuration which it is unable to modify
*/
Configuration execute(Configuration configuration) throws InvalidConfigurationException;
}