blob: f0bcee4543c981efe87cae40cb42ebed5cbe7240 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2018 CEA LIST.
*
* 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:
* Arnault Lapitre (CEA LIST) arnault.lapitre@cea.fr
* - Initial API and Implementation
*******************************************************************************/
package org.eclipse.efm.formalml.ecore.factory;
import org.eclipse.efm.ecore.formalml.common.VisibilityKind;
import org.eclipse.efm.ecore.formalml.datatype.DataType;
import org.eclipse.efm.ecore.formalml.expression.Expression;
import org.eclipse.efm.ecore.formalml.infrastructure.Behavior;
import org.eclipse.efm.ecore.formalml.infrastructure.ChannelDirection;
import org.eclipse.efm.ecore.formalml.infrastructure.ComPoint;
import org.eclipse.efm.ecore.formalml.infrastructure.ComProtocol;
import org.eclipse.efm.ecore.formalml.infrastructure.ComProtocolKind;
import org.eclipse.efm.ecore.formalml.infrastructure.Connector;
import org.eclipse.efm.ecore.formalml.infrastructure.ConnectorEnd;
import org.eclipse.efm.ecore.formalml.infrastructure.Function;
import org.eclipse.efm.ecore.formalml.infrastructure.InfrastructureFactory;
import org.eclipse.efm.ecore.formalml.infrastructure.Machine;
import org.eclipse.efm.ecore.formalml.infrastructure.ModelOfExecution;
import org.eclipse.efm.ecore.formalml.infrastructure.ModelOfInteraction;
import org.eclipse.efm.ecore.formalml.infrastructure.Modifier;
import org.eclipse.efm.ecore.formalml.infrastructure.Parameter;
import org.eclipse.efm.ecore.formalml.infrastructure.ParameterSet;
import org.eclipse.efm.ecore.formalml.infrastructure.Port;
import org.eclipse.efm.ecore.formalml.infrastructure.Routine;
import org.eclipse.efm.ecore.formalml.infrastructure.Variable;
import org.eclipse.efm.ecore.formalml.infrastructure.XliaSystem;
import org.eclipse.efm.ecore.formalml.specification.SpecificationFactory;
import org.eclipse.efm.ecore.formalml.specification.XliaModel;
import org.eclipse.efm.ecore.formalml.statement.BlockStatement;
public class XLIA_INFRA {
// InfrastructureFactory FACTORY
static InfrastructureFactory FACTORY = InfrastructureFactory.eINSTANCE;
// MODEL
public static XliaModel createModel() {
return SpecificationFactory.eINSTANCE.createXliaModel();
}
// SYSTEM
public static XliaSystem createSystem(final String name) {
final XliaSystem system = FACTORY.createXliaSystem();
system.setName(name);
return system;
}
// MACHINE
public static Machine createMachine(final String name) {
final Machine machine = FACTORY.createMachine();
machine.setName(name);
return machine;
}
// PARAMETER
public static Parameter createParameter(
final DataType type, final String name) {
final Parameter parameter = FACTORY.createParameter();
parameter.setName(name);
parameter.setType(type);
return parameter;
}
public static Parameter createParameterInteger(final String name) {
return createParameter(XLIA_DATATYPE.createInteger(), name);
}
public static Parameter createParameterRational(final String name) {
return createParameter(XLIA_DATATYPE.createRational(), name);
}
// VARIABLE
public static Variable createVariable(final DataType type, final String name) {
final Variable variable = FACTORY.createVariable();
variable.setName(name);
variable.setType(type);
return variable;
}
public static Variable createVariable(
final DataType type, final String name, final Expression value) {
final Variable variable = createVariable(type, name);
variable.setDefaultValue(value);
return variable;
}
public static Variable createPublicVariable(
final DataType type, final String name, final Expression value) {
final Variable variable = createVariable(type, name, value);
variable.setVisibility(VisibilityKind.PUBLIC);
return variable;
}
// VARIABLE LOCALE
public static Variable createLocaleVariable(
final DataType type, final String name, final Expression value) {
final Variable variable = createVariable(type, name, value);
final Modifier modifier = FACTORY.createModifier();
modifier.setTransient(true);
variable.setModifier(modifier);
return variable;
}
public static Variable createPublicLocaleVariable(
final DataType type, final String name, final Expression value) {
final Variable variable = createLocaleVariable(type, name, value);
variable.setVisibility(VisibilityKind.PUBLIC);
return variable;
}
// CONSTANT
public static Variable createConstant(
final DataType type, final String name, final Expression value) {
final Variable constant = createVariable(type, name, value);
constant.setConst(true);
final Modifier modifier = FACTORY.createModifier();
modifier.setFinal(true);
constant.setModifier(modifier);
return constant;
}
public static Variable createPublicConstant(
final DataType type, final String name, final Expression value) {
final Variable constant = createConstant(type, name, value);
constant.setVisibility(VisibilityKind.PUBLIC);
return constant;
}
// PORT
public static Port createPort(final String name) {
final Port port = FACTORY.createPort();
port.setName(name);
return port;
}
public static Port createPort(final String name,
final DataType paramType, final String paramName) {
final Port port = createPort(name);
final ParameterSet parammeters = FACTORY.createParameterSet();
port.setParameterSet(parammeters);
parammeters.getParameter().add(
createParameter(paramType, paramName) );
return port;
}
public static Port createPort(final String name,
final DataType paramTypeA, final String paramNameA,
final DataType paramTypeB, final String paramNameB) {
final Port port = createPort(name);
final ParameterSet parammeters = FACTORY.createParameterSet();
port.setParameterSet(parammeters);
parammeters.getParameter().add(
createParameter(paramTypeA, paramNameA) );
parammeters.getParameter().add(
createParameter(paramTypeB, paramNameB) );
return port;
}
// BEHAVIOR
public static Behavior createBehavior() {
return FACTORY.createBehavior();
}
// PARAMETER SET
public static ParameterSet createParameterSet() {
return FACTORY.createParameterSet();
}
// ROUTINE
public static Routine createRoutine(final String name) {
final Routine routine = FACTORY.createRoutine();
routine.setName(name);
return routine;
}
// MACRO ROUTINE
public static Routine createMacroRoutine(
final Machine machine, final String name,
final ParameterSet parameterSet, final BlockStatement block) {
final Routine routine = createRoutine(name);
routine.setMacro(true);
routine.setParameterSet(parameterSet);
routine.setBodyBlock(block);
machine.getRoutine().add(routine);
return routine;
}
public static Routine createMacroRoutine(
final Machine machine, final String name, final BlockStatement block) {
return createMacroRoutine(machine, name, null, block);
}
// FUNCTION
// ROUTINE
public static Function createFunction(final String name) {
final Function function = FACTORY.createFunction();
function.setName(name);
return function;
// return createRoutine(name);
}
// MODEL OF INTERACTION
public static ModelOfInteraction createMOI(final Behavior behavior) {
final ModelOfInteraction moInteraction =
FACTORY.createModelOfInteraction();
behavior.setInteraction(moInteraction);
return moInteraction;
}
// MODEL OF EXECUTION
public static ModelOfExecution createMOE() {
return FACTORY.createModelOfExecution();
}
public static ModelOfExecution createMOE(final Behavior behavior) {
final ModelOfExecution moExcecution = FACTORY.createModelOfExecution();
behavior.setExecution(moExcecution);
return moExcecution;
}
// COMMUNICATION PROTOCOL
public static ComProtocol createProtocol() {
return FACTORY.createComProtocol();
}
public static ComProtocol createProtocolEnv() {
final ComProtocol protocol = FACTORY.createComProtocol();
protocol.setProtocol(ComProtocolKind.ENV);
return protocol;
}
public static ComProtocol createProtocolFifo(final int size) {
final ComProtocol protocol = FACTORY.createComProtocol();
protocol.setProtocol(ComProtocolKind.BUFFER);
protocol.setInner_buffer(XLIA_DATATYPE.createCollectionFifo(size));
return protocol;
}
// CONNECTOR
public static Connector createConnector(final String name) {
final Connector connector = FACTORY.createConnector();
connector.setName(name);
return connector;
}
public static Connector createConnectorEnv(final String name) {
final Connector connector = XLIA_INFRA.createConnector(name);
connector.setProtocol( createProtocolEnv() );
return connector;
}
public static Connector createConnectorFifo(
final String name, final int size) {
final Connector connector = XLIA_INFRA.createConnector(name);
connector.setProtocol( createProtocolFifo(size) );
return connector;
}
// CONNECTOR END
public static ConnectorEnd createConnectorEnd(
final Connector connector, final ChannelDirection direction) {
final ConnectorEnd connectorEnd = FACTORY.createConnectorEnd();
connectorEnd.setDirection( direction );
connector.getConnectorEnd().add(connectorEnd);
return connectorEnd;
}
public static ConnectorEnd createConnectorEndOutput(
final Connector connector) {
return createConnectorEnd(connector, ChannelDirection.OUTPUT);
}
public static ConnectorEnd createConnectorEndInput(
final Connector connector) {
return createConnectorEnd(connector, ChannelDirection.INPUT);
}
// COMMUNICATION POINT
public static void addComPoint(
final ConnectorEnd connectorEnd,
final Machine machine, final Port port) {
final ComPoint comPoint = FACTORY.createComPoint();
comPoint.setMachine(machine);
comPoint.setPort(port);
connectorEnd.getPoints().add(comPoint);
}
// COMMUNICATION CONNECTOR END POINT
public static void addConnectorEndPoint(
final Connector connector, final ChannelDirection direction,
final Machine machine, final Port port) {
final ConnectorEnd connectorEnd = createConnectorEnd(connector, direction);
addComPoint(connectorEnd, machine, port);
}
public static void addConnectorEndOutputPoint(
final Connector connector, final Machine machine, final Port port) {
addConnectorEndPoint(connector, ChannelDirection.OUTPUT, machine, port);
}
public static void addConnectorEndInputPoint(
final Connector connector, final Machine machine, final Port port) {
addConnectorEndPoint(connector, ChannelDirection.INPUT, machine, port);
}
}