/*******************************************************************************
 * Copyright (c) 2016 Inria and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     Inria - initial API and implementation
 *******************************************************************************/
package org.gemoc.xdsmlframework.api.core;

import java.util.Deque;
import java.util.Set;

import org.gemoc.xdsmlframework.api.core.EngineStatus.RunStatus;
import org.gemoc.xdsmlframework.api.engine_addon.IEngineAddon;

import fr.inria.diverse.trace.commons.model.trace.LaunchConfiguration;
import fr.inria.diverse.trace.commons.model.trace.MSEOccurrence;

/**
 * The interface of the GEMOC Execution Engine. The Execution Engine is an
 * entity able to execute models conforming to an xDSML as defined in the GEMOC
 * ANR INS project. This API allows the caller to initialize the engine for a
 * given model, and to run the engine in different ways. It also allows the
 * caller to influence the constraints of the MoC at runtime.
 * 
 * @author didier.vojtisek@inria.fr
 * 
 */
public interface IExecutionEngine extends IDisposable {
	
	public Deque<MSEOccurrence> getCurrentStack();

	public MSEOccurrence getCurrentMSEOccurrence();

	/**
	 * Starts the {@link IExecutionEngine}.
	 */
	public void start();

	/**
	 * Asks the engine to stop
	 */
	void stop();

	EngineStatus getEngineStatus();

	/**
	 * 
	 * @param type
	 * @return true if the engine has the capability, false otherwise.
	 */
	<T extends IEngineAddon> boolean hasAddon(Class<T> type);

	/**
	 * 
	 * @param type
	 * @return The capability of the given type if it exists.
	 */
	<T extends IEngineAddon> T getAddon(Class<T> type);

	IExecutionContext getExecutionContext();

	RunStatus getRunningStatus();

	<T> Set<T> getAddonsTypedBy(Class<T> type);

	void initialize(IExecutionContext executionContext);
	
	default LaunchConfiguration extractLaunchConfiguration() {
		return null;
	}

	/**
	 * 
	 * @return a user display name for the engine kind (will be used to compute
	 *         the full name of the engine instance)
	 */
	String engineKindName();

	/**
	 * 
	 * @return a displayable name to identify this engine
	 */
	public abstract String getName();
}

@@ -1347,23 +1347,16 @@
 le %7B%0A%09%0A%09
-public 
 Deque%3CMS
@@ -1389,23 +1389,16 @@
 ck();%0A%0A%09
-public 
 MSEOccur
@@ -1483,23 +1483,16 @@
 .%0A%09 */%0A%09
-public 
 void sta
@@ -1583,16 +1583,59 @@
 tatus();
+%0A%09%0A%09void setEngineStatus(RunStatus status);
 %0A%0A%09/**%0A%09
@@ -1693,26 +1693,21 @@
 has the 
-capability
+addon
 , false 
@@ -2426,24 +2426,8 @@
 */%0A%09
-public abstract 
 Stri

Remove "public" keywords from the interface + minor comment change