
package com.asakusafw.windgate.core.process;

import java.io.IOException;

import com.asakusafw.windgate.core.BaseProvider;
import com.asakusafw.windgate.core.ProcessScript;
import com.asakusafw.windgate.core.resource.DriverFactory;

/**
 * An abstract super class of process factory.
 * Clients can inherit this class to provide new data sources.
 * Each subclass must provide a public constructor with no parameters.
 * @since 0.2.2
 */
public abstract class ProcessProvider extends BaseProvider<ProcessProfile> {

    /**
     * Execute a gate process for the specified process script.
     * @param <T> the type of data model object to be processed
     * @param drivers provides drivers for the execution
     * @param script target script
     * @throws IOException if failed to execute gate process
     * @throws IllegalArgumentException if any parameter is {@code null}
     */
    public abstract <T> void execute(DriverFactory drivers, ProcessScript<T> script) throws IOException;
}
