// Path: openqa.engine/src/main/java/org/aksw/openqa/component/object/IParams.java
// public interface IParams extends IObject {
// 	public IComponent getSource();
// }
// 
// Path: openqa.engine/src/main/java/org/aksw/openqa/component/object/IResult.java
// public interface IResult extends IParams {
// 	public IParams getInputParam();
// }
// 
// Path: openqa.engine/src/main/java/org/aksw/openqa/component/providers/impl/InterpreterProvider.java
// public class InterpreterProvider extends PluginProcessProvider<Interpreter, IInterpreterFactory> {
//     public InterpreterProvider(List<? extends ClassLoader> classLoaders, ServiceProvider serviceProvider) {
// 		super(IInterpreterFactory.class, classLoaders, serviceProvider);
// 	}
//     
//     public InterpreterProvider() {    	
//     }
// }
// 
// Path: openqa.engine/src/main/java/org/aksw/openqa/component/providers/impl/ServiceProvider.java
// public class ServiceProvider extends AbstractPluginProvider<IService, IServiceFactory> {
// 	public ServiceProvider(List<? extends ClassLoader> classLoaders) {
// 		super(IServiceFactory.class, classLoaders, null);
// 	}
// 	
// 	public ServiceProvider() {
// 	}
// }
// 
// Path: openqa.engine/src/main/java/org/aksw/openqa/component/providers/impl/SynthesizerProvider.java
// public class SynthesizerProvider extends PluginProcessProvider<ISynthesizer, ISynthesizerFactory> {
// 	public SynthesizerProvider(List<? extends ClassLoader> classLoaders, ServiceProvider serviceProvider) {
// 		super(ISynthesizerFactory.class, classLoaders, serviceProvider);
// 	}
// 	
// 	public SynthesizerProvider() {		
// 	}
// }


import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.aksw.openqa.component.IComponent;
import org.aksw.openqa.component.IProcess;
import org.aksw.openqa.component.context.IContext;
import org.aksw.openqa.component.object.IParams;
import org.aksw.openqa.component.object.IResult;
import org.aksw.openqa.component.object.Params;
import org.aksw.openqa.component.providers.impl.ContextProvider;
import org.aksw.openqa.component.providers.impl.InterpreterProvider;
import org.aksw.openqa.component.providers.impl.RetrieverProvider;
import org.aksw.openqa.component.providers.impl.ServiceProvider;
import org.aksw.openqa.component.providers.impl.SynthesizerProvider;
import org.aksw.openqa.main.ProcessResult;
import org.aksw.openqa.main.QueryResult;
import org.aksw.openqa.manager.plugin.PluginManager;
import org.apache.log4j.Logger;
package org.aksw.openqa;



public class QAEngineProcessor implements IComponent {
	
	private static Logger logger = Logger.getLogger(QAEngineProcessor.class);
	
	private ContextProvider contextProvider;
	private ServiceProvider serviceProvider;
	private InterpreterProvider interpreterProvider;
	private RetrieverProvider retrieverProvider;
	private SynthesizerProvider synthesizerProvider;
	
	public QAEngineProcessor(PluginManager pluginManager) {
		this.contextProvider = (ContextProvider) pluginManager.getProvider(ContextProvider.class);
		this.serviceProvider = (ServiceProvider) pluginManager.getProvider(ServiceProvider.class);
		this.interpreterProvider = (InterpreterProvider) pluginManager.getProvider(InterpreterProvider.class);
		this.retrieverProvider = (RetrieverProvider) pluginManager.getProvider(RetrieverProvider.class);
		this.synthesizerProvider =  (SynthesizerProvider) pluginManager.getProvider(SynthesizerProvider.class);
	}
	
	public QAEngineProcessor(ContextProvider contextProvider, ServiceProvider serviceProvider, 
// Path: openqa.engine/src/main/java/org/aksw/openqa/component/object/IParams.java
// public interface IParams extends IObject {
// 	public IComponent getSource();
// }
// 
// Path: openqa.engine/src/main/java/org/aksw/openqa/component/object/IResult.java
// public interface IResult extends IParams {
// 	public IParams getInputParam();
// }
// 
// Path: openqa.engine/src/main/java/org/aksw/openqa/component/providers/impl/InterpreterProvider.java
// public class InterpreterProvider extends PluginProcessProvider<Interpreter, IInterpreterFactory> {
//     public InterpreterProvider(List<? extends ClassLoader> classLoaders, ServiceProvider serviceProvider) {
// 		super(IInterpreterFactory.class, classLoaders, serviceProvider);
// 	}
//     
//     public InterpreterProvider() {    	
//     }
// }
// 
// Path: openqa.engine/src/main/java/org/aksw/openqa/component/providers/impl/ServiceProvider.java
// public class ServiceProvider extends AbstractPluginProvider<IService, IServiceFactory> {
// 	public ServiceProvider(List<? extends ClassLoader> classLoaders) {
// 		super(IServiceFactory.class, classLoaders, null);
// 	}
// 	
// 	public ServiceProvider() {
// 	}
// }
// 
// Path: openqa.engine/src/main/java/org/aksw/openqa/component/providers/impl/SynthesizerProvider.java
// public class SynthesizerProvider extends PluginProcessProvider<ISynthesizer, ISynthesizerFactory> {
// 	public SynthesizerProvider(List<? extends ClassLoader> classLoaders, ServiceProvider serviceProvider) {
// 		super(ISynthesizerFactory.class, classLoaders, serviceProvider);
// 	}
// 	
// 	public SynthesizerProvider() {		
// 	}
// }


// Path: openqa.engine/src/main/java/org/aksw/openqa/QAEngineProcessor.java
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.aksw.openqa.component.IComponent;
import org.aksw.openqa.component.IProcess;
import org.aksw.openqa.component.context.IContext;
import org.aksw.openqa.component.object.IParams;
import org.aksw.openqa.component.object.IResult;
import org.aksw.openqa.component.object.Params;
import org.aksw.openqa.component.providers.impl.ContextProvider;
import org.aksw.openqa.component.providers.impl.InterpreterProvider;
import org.aksw.openqa.component.providers.impl.RetrieverProvider;
import org.aksw.openqa.component.providers.impl.ServiceProvider;
import org.aksw.openqa.component.providers.impl.SynthesizerProvider;
import org.aksw.openqa.main.ProcessResult;
import org.aksw.openqa.main.QueryResult;
import org.aksw.openqa.manager.plugin.PluginManager;
import org.apache.log4j.Logger;

package org.aksw.openqa;



public class QAEngineProcessor implements IComponent {
	
	private static Logger logger = Logger.getLogger(QAEngineProcessor.class);
	
	private ContextProvider contextProvider;
	private ServiceProvider serviceProvider;
	private InterpreterProvider interpreterProvider;
	private RetrieverProvider retrieverProvider;
	private SynthesizerProvider synthesizerProvider;
	
	public QAEngineProcessor(PluginManager pluginManager) {
		this.contextProvider = (ContextProvider) pluginManager.getProvider(ContextProvider.class);
		this.serviceProvider = (ServiceProvider) pluginManager.getProvider(ServiceProvider.class);
		this.interpreterProvider = (InterpreterProvider) pluginManager.getProvider(InterpreterProvider.class);
		this.retrieverProvider = (RetrieverProvider) pluginManager.getProvider(RetrieverProvider.class);
		this.synthesizerProvider =  (SynthesizerProvider) pluginManager.getProvider(SynthesizerProvider.class);
	}
	
	public QAEngineProcessor(ContextProvider contextProvider, ServiceProvider serviceProvider, 
			InterpreterProvider interpreterProvider, RetrieverProvider retrieverProvider, 