package org.eclipse.stem.core.model;
/******************************************************************************* 
 * Copyright (c) 2011 IBM Corporation 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: 
 *     IBM Corporation - initial API and implementation 
 *******************************************************************************/

import org.eclipse.emf.common.util.EList;

import org.eclipse.emf.ecore.EObject;

import org.eclipse.stem.core.graph.DynamicLabel;
import org.eclipse.stem.core.graph.LabelValue;

/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>Integration Decorator</b></em>'.
 * <!-- end-user-doc -->
 *
 *
 * @see org.eclipse.stem.core.model.ModelPackage#getIntegrationDecorator()
 * @model interface="true" abstract="true"
 * @generated
 */
public interface IntegrationDecorator extends EObject {
	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @model labelsMany="true"
	 * @generated
	 */
	void applyExternalDeltas(STEMTime time, long timeDelta, EList<DynamicLabel> labels);

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @model labelsMany="true"
	 * @generated
	 */
	void calculateDelta(STEMTime time, long timeDelta, EList<DynamicLabel> labels);

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @model
	 * @generated
	 */
	void doModelSpecificAdjustments(LabelValue label);

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @model kind="operation"
	 * @generated
	 */
	boolean isDeterministic();

} // IntegrationDecorator
