// Path: de.tubs.variantsync.core/src/de/tubs/variantsync/core/exceptions/DiffException.java
// public class DiffException extends Exception {
// 
// 	public DiffException(String message) {
// 		super(message);
// 	}
// 
// }
// 
// Path: de.tubs.variantsync.core/src/de/tubs/variantsync/core/patch/interfaces/IDelta.java
// public enum DELTATYPE {
// 	/** An addition was made */
// 	ADDED,
// 	/** An deletion was made */
// 	REMOVED,
// 	/** A change was made */
// 	CHANGED
// }


import java.util.List;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFileState;
import de.ovgu.featureide.fm.core.IExtension;
import de.tubs.variantsync.core.exceptions.DiffException;
import de.tubs.variantsync.core.patch.interfaces.IDelta.DELTATYPE;
package de.tubs.variantsync.core.patch.interfaces;




/**
 * Factory to create patches from files
 *
 * @author Christopher Sontag
 * @version 1.0
 * @since 15.08.2017
 * @param <T> file element, e.g. line, ast element, ...
 */
public interface IDeltaFactory<T> extends IExtension {

	public static String extensionPointID = "DeltaFactory";

	public static String extensionID = "deltaFactory";

	String getName();

	/**
	 * Creates a empty delta object
	 * 
	 * @param res
	 * @return
	 */
	IDelta<T> createDelta(IFile file);

	/**
	 * Creates a delta object for a resource
	 * 
	 * @param res - resource
	 * @param timestamp - timestamp
	 * @param kind - type of change
	 * @return patch object
	 */
// Path: de.tubs.variantsync.core/src/de/tubs/variantsync/core/exceptions/DiffException.java
// public class DiffException extends Exception {
// 
// 	public DiffException(String message) {
// 		super(message);
// 	}
// 
// }
// 
// Path: de.tubs.variantsync.core/src/de/tubs/variantsync/core/patch/interfaces/IDelta.java
// public enum DELTATYPE {
// 	/** An addition was made */
// 	ADDED,
// 	/** An deletion was made */
// 	REMOVED,
// 	/** A change was made */
// 	CHANGED
// }


// Path: de.tubs.variantsync.core/src/de/tubs/variantsync/core/patch/interfaces/IDeltaFactory.java
import java.util.List;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFileState;
import de.ovgu.featureide.fm.core.IExtension;
import de.tubs.variantsync.core.exceptions.DiffException;
import de.tubs.variantsync.core.patch.interfaces.IDelta.DELTATYPE;

package de.tubs.variantsync.core.patch.interfaces;




/**
 * Factory to create patches from files
 *
 * @author Christopher Sontag
 * @version 1.0
 * @since 15.08.2017
 * @param <T> file element, e.g. line, ast element, ...
 */
public interface IDeltaFactory<T> extends IExtension {

	public static String extensionPointID = "DeltaFactory";

	public static String extensionID = "deltaFactory";

	String getName();

	/**
	 * Creates a empty delta object
	 * 
	 * @param res
	 * @return
	 */
	IDelta<T> createDelta(IFile file);

	/**
	 * Creates a delta object for a resource
	 * 
	 * @param res - resource
	 * @param timestamp - timestamp
	 * @param kind - type of change
	 * @return patch object
	 */
	List<IDelta<T>> createDeltas(IFile file, long timestamp, DELTATYPE kind) throws DiffException;