/*********************************************************************
* Copyright (c) 2019 The University of York.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
**********************************************************************/
package org.eclipse.epsilon.executors.eml;

import java.io.File;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Optional;

import org.eclipse.epsilon.common.parse.problem.ParseProblem;
import org.eclipse.epsilon.eml.execute.context.EmlContext;
import org.eclipse.epsilon.eol.exceptions.EolRuntimeException;
import org.eclipse.epsilon.eol.models.IModel;
import org.eclipse.epsilon.eol.types.IToolNativeTypeDelegate;
import org.eclipse.epsilon.erl.execute.RuleProfiler;
import org.eclipse.epsilon.etl.EtlModule;
import org.eclipse.epsilon.etl.IEtlModule;
import org.eclipse.epsilon.executors.EpsilonLanguageExecutor;
import org.eclipse.epsilon.executors.ExecutorHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * The EML executor
 *
 * @author Horacio Hoyos Rodriguez
 */
public class SimpleEmlExecutor implements EpsilonLanguageExecutor<EmlTraces> {

    private static final Logger logger = LoggerFactory.getLogger(SimpleEmlExecutor.class);
	private IEtlModule module;
	private ExecutorHelper helper;
	
    public SimpleEmlExecutor() {
    	this(new EtlModule());
    }
    
    public SimpleEmlExecutor(IEtlModule mdl) {
    	logger.info("Creating the EtlExecutor");
    	module = mdl;
    	helper = new ExecutorHelper(module);
    }
    
	@Override
	public EmlTraces execute() throws EolRuntimeException {
		module.execute();
		EmlContext c = (EmlContext) module.getContext();
		return new EmlTraces(c.getMatchTrace(), c.getMergeTrace());
	}

	public boolean parse(File file) throws Exception {
		return helper.parse(file);
	}

	public boolean parse(String code) throws Exception {
		return helper.parse(code);
	}

	public List<ParseProblem> getParseProblems() {
		return helper.getParseProblems();
	}

	public void addModels(Collection<IModel> models) {
		helper.addModels(models);
	}

	public void addParamters(Map<String, ?> parameters) {
		helper.addParamters(parameters);
	}

	public void addNativeTypeDelegates(Collection<IToolNativeTypeDelegate> nativeDelegates) {
		helper.addNativeTypeDelegates(nativeDelegates);
	}

	public Optional<RuleProfiler> getRuleProfiler() {
		return helper.getRuleProfiler();
	}

	public void disposeModelRepository() {
		helper.disposeModelRepository();
	}

	public void clearModelRepository() {
		helper.clearModelRepository();
	}

	public void dispose() {
		helper.dispose();
	}

	public void preProcess() {
		helper.preProcess();
	}

	public void postProcess() {
		helper.postProcess();
	}

	public boolean equals(Object obj) {
		return helper.equals(obj);
	}


}
