blob: c417a1cac3ad855c2a38636ec0ad5e4d80cc0110 [file] [log] [blame]
/*******************************************************************************
* Copyright (C) 2017 Fondazione Bruno Kessler.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
*
* Contributors:
* Alberto Debiasi - initial API and implementation
******************************************************************************/
package org.polarsys.chess.service.core.model;
import java.util.Set;
import org.eclipse.emf.common.util.BasicEList;
import org.eclipse.emf.common.util.EList;
import org.eclipse.papyrus.sysml.portandflows.FlowDirection;
import org.eclipse.papyrus.uml.tools.model.UmlModel;
import org.eclipse.uml2.uml.Constraint;
import org.eclipse.uml2.uml.Element;
import org.eclipse.uml2.uml.Port;
import org.eclipse.uml2.uml.Property;
import org.eclipse.uml2.uml.StateMachine;
import org.eclipse.uml2.uml.Transition;
import org.eclipse.uml2.uml.Type;
import org.eclipse.uml2.uml.Vertex;
import org.polarsys.chess.contracts.profile.chesscontract.util.EntityUtil;
import eu.fbk.eclipse.standardtools.utils.core.model.AbstractStateMachineModel;
public class UMLStateMachineModel implements AbstractStateMachineModel {
private static UMLStateMachineModel umlStateMachineModel;
private EntityUtil entityUtil = EntityUtil.getInstance();
public static UMLStateMachineModel getInstance() {
if (umlStateMachineModel == null) {
umlStateMachineModel = new UMLStateMachineModel();
}
return umlStateMachineModel;
}
@Override
public EList<Port> getOwnerInputPortsExceptEvents(Object stateMachine) {
Element owner = ((StateMachine) stateMachine).getOwner();
return new BasicEList<Port>(entityUtil.getUmlPortsExceptEvents(owner, FlowDirection.IN_VALUE));
}
@Override
public EList<Port> getOwnerOutputPortsExceptEvents(Object stateMachine) {
Element owner = ((StateMachine) stateMachine).getOwner();
return new BasicEList<Port>(entityUtil.getUmlPortsExceptEvents(owner, FlowDirection.OUT_VALUE));
}
/*@Override
public EList<Element> getOwnerAttributes(Object stateMachine) {
Element owner = ((StateMachine) stateMachine).getOwner();
//return new BasicEList<Element>(entityUtil.getAttributesExceptPorts(owner));
return null;
}*/
@Override
public EList<Property> getOwnerNonStaticAttributesExceptPorts(Object stateMachine) {
Element owner = ((StateMachine) stateMachine).getOwner();
return new BasicEList<Property>(entityUtil.getAttributesExceptPorts(owner,false));
}
@Override
public EList<Property> getOwnerStaticAttributesExceptPorts(Object stateMachine) {
Element owner = ((StateMachine) stateMachine).getOwner();
return new BasicEList<Property>(entityUtil.getAttributesExceptPorts(owner,true));
}
@Override
public EList<String> getTransitionsNameList(Object stateMachine) throws Exception {
return entityUtil.getTransitionNameList(entityUtil.getTranstitions((StateMachine) stateMachine));
}
@Override
public EList<String> getEventsNameList(Object stateMachine) {
EList<Port> events = entityUtil.getEventPorts(((StateMachine) stateMachine).getOwner());
return (entityUtil.getPortsName(events));
}
@Override
public String getStateMachineName(Object stateMachine) {
return (entityUtil.getStateMachineName((StateMachine) stateMachine));
}
@Override
public EList<Transition> getInitTransitions(Object stateMachine) throws Exception {
return entityUtil.getInitialTransitions((StateMachine) stateMachine);
}
@Override
public EList<Transition> getNonInitTransitions(Object stateMachine) {
return entityUtil.getNonInitialTransitions((StateMachine) stateMachine);
}
@Override
public EList<String> getIntermediateStatesNameList(Object stateMachine) {
EList<Vertex> states = entityUtil.getIntermediateStates((StateMachine) stateMachine);
return entityUtil.getStatesNameList(states);
}
@Override
public String getTransitionName(Object transition) {
return entityUtil.getTransitionName((Transition) transition);
}
@Override
public String getTransitionNextStateName(Object transition) {
Vertex nextState = entityUtil.getTransitionNextState((Transition) transition);
return entityUtil.getStateName(nextState);
}
@Override
public String getTransitionStartStateName(Object transition) {
Vertex sourceState = entityUtil.getTransitionSourceState((Transition) transition);
return entityUtil.getStateName(sourceState);
}
@Override
public EList<String> getTransitionEventsName(Object transition) {
EList<Port> events = entityUtil.getTransitionEvents((Transition) transition);
if (events != null) {
return entityUtil.getPortsName(events);
}
return null;
}
@Override
public String getTransitionGuardCondition(Object transition, String language) {
return entityUtil.getTransitionGuardText((Transition) transition, language);
}
@Override
public boolean isFinalTransition(Object transition) {
return entityUtil.isFinalTransition((Transition) transition);
}
@Override
public boolean isTransitionWithNoEvent(Object transition) {
return entityUtil.isTransitionWithNoEvent((Transition) transition);
}
@Override
public String getAttributeName(Object property) {
return ((Property) property).getName();
}
@Override
public Object getAttributeType(Object property) {
return entityUtil.getUmlType((Property) property);
}
@Override
public boolean isBooleanType(Object type) {
return entityUtil.isBooleanType((Type) type);
}
@Override
public boolean isIntegerType(Object type) {
return entityUtil.isIntegerType((Type) type);
}
@Override
public boolean isRealType(Object type) {
return entityUtil.isRealType((Type) type);
}
@Override
public boolean isIntervalType(Object type) {
return entityUtil.isRangeType((Type) type);
}
@Override
public boolean isInputPort(Object port) {
return entityUtil.isPort((Element) port) && entityUtil.isInputPort((Element) port);
}
@Override
public String[] getLowHighIntervalType(Object type) {
return entityUtil.getLowerUpperBoundsForRangeType((Type) type);
}
@Override
public EList<String> getEnumValues(Object type) {
return new BasicEList<String>(entityUtil.getListValuesForEnumeratorType((Type) type));
}
@Override
public boolean isEnumType(Object type) {
return entityUtil.isEnumerationType((Type) type);
}
@Override
public String getEnumTypeName(Object type) {
return ((Type) type).getName();
}
@Override
public String getStateMachineOwnerName(Object stateMachine) {
return ((org.eclipse.uml2.uml.Class) entityUtil.getOwner((StateMachine) stateMachine)).getName();
}
@Override
public String getTransitionEffectText(Object transition, String language) {
return entityUtil.getTransitionEffectText((Transition) transition,language);
}
@Override
public Set<StateMachine> getNominalStateMachinesIncludingFromSubComponents(Object umlSelectedComponent) {
return entityUtil.getNominalStateMachines((org.eclipse.uml2.uml.Class) umlSelectedComponent, true);
}
@Override
public Set<StateMachine> getAllStateMachinesFromModel(Object model) {
return entityUtil.getNominalStateMachines((UmlModel) model);
}
@Override
public Object getFirstNominalStateMachine(Object umlSelectedComponent) {
return entityUtil.getFirstNominalStateMachine((org.eclipse.uml2.uml.Class) umlSelectedComponent);
}
@Override
public Object getStateMachineOwner(Object stateMachine) {
return entityUtil.getOwner((StateMachine) stateMachine);
}
@Override
public EList<String> getInitTransitionsNameList(Object stateMachine) throws Exception {
return entityUtil.getTransitionNameList(entityUtil.getInitialTransitions((StateMachine) stateMachine));
}
@Override
public EList<String> getNonInitTransitionsNameList(Object stateMachine) throws Exception {
return entityUtil.getTransitionNameList(entityUtil.getNonInitialTransitions((StateMachine) stateMachine));
}
}