blob: 81e83705e8d8eaaef70ab3d01af335381ac33073 [file] [log] [blame]
/**
* Copyright (c) 2015 protos software gmbh (http://www.protos.de).
* 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:
* Juergen Haug (initial contribution)
*/
package org.eclipse.etrice.ui.behavior.detailcode;
import com.google.common.base.Objects;
import com.google.common.collect.Iterables;
import java.util.List;
import org.eclipse.etrice.core.room.ActorClass;
import org.eclipse.etrice.core.room.Attribute;
import org.eclipse.etrice.core.room.CommunicationType;
import org.eclipse.etrice.core.room.DataClass;
import org.eclipse.etrice.core.room.DataType;
import org.eclipse.etrice.core.room.InterfaceItem;
import org.eclipse.etrice.core.room.Message;
import org.eclipse.etrice.core.room.Port;
import org.eclipse.etrice.core.room.PortOperation;
import org.eclipse.etrice.core.room.ProtocolClass;
import org.eclipse.etrice.core.room.RefableType;
import org.eclipse.etrice.core.room.SAP;
import org.eclipse.etrice.core.room.SPP;
import org.eclipse.etrice.core.room.StandardOperation;
import org.eclipse.etrice.ui.behavior.detailcode.GuardDetailExpressionProvider;
import org.eclipse.etrice.ui.behavior.fsm.detailcode.IDetailExpressionProvider;
import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor;
import org.eclipse.xtext.xbase.lib.CollectionLiterals;
import org.eclipse.xtext.xbase.lib.Functions.Function1;
import org.eclipse.xtext.xbase.lib.IterableExtensions;
import org.eclipse.xtext.xbase.lib.ListExtensions;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
/**
* Defines expression for fsm detail code of an ActorClass
*/
@FinalFieldsConstructor
@SuppressWarnings("all")
public class DefaultDetailExpressionProvider extends GuardDetailExpressionProvider {
@Override
public List<IDetailExpressionProvider.ExpressionFeature> getInitialFeatures() {
final List<IDetailExpressionProvider.ExpressionFeature> scope = CollectionLiterals.<IDetailExpressionProvider.ExpressionFeature>newArrayList();
boolean _notEquals = (!Objects.equal(this.transitionEventData, null));
if (_notEquals) {
IDetailExpressionProvider.ExpressionFeature _createExprFeature = this.createExprFeature(this.transitionEventData);
scope.add(_createExprFeature);
}
List<InterfaceItem> _allInterfaceItems = this.roomHelpers.getAllInterfaceItems(this.actorClass);
final Procedure1<InterfaceItem> _function = new Procedure1<InterfaceItem>() {
@Override
public void apply(final InterfaceItem it) {
boolean _matched = false;
if (it instanceof SPP) {
boolean _isEventDriven = ((SPP)it).isEventDriven();
if (_isEventDriven) {
_matched=true;
}
}
if (!_matched) {
if (it instanceof Port) {
if ((((Port)it).isEventDriven() && ((Port)it).isReplicated())) {
_matched=true;
}
}
}
if (_matched) {
IDetailExpressionProvider.ExpressionFeature _createExprFeature = DefaultDetailExpressionProvider.this.createExprFeature(it);
scope.add(_createExprFeature);
IDetailExpressionProvider.ExpressionFeature _createExprFeature_1 = DefaultDetailExpressionProvider.this.createExprFeature(it, IDetailExpressionProvider.ExpressionPostfix.BRACKETS);
scope.add(_createExprFeature_1);
}
if (!_matched) {
if (it instanceof Port) {
boolean _isReplicated = ((Port)it).isReplicated();
if (_isReplicated) {
_matched=true;
}
}
if (!_matched) {
if (it instanceof SPP) {
_matched=true;
}
}
if (_matched) {
IDetailExpressionProvider.ExpressionFeature _createExprFeature_2 = DefaultDetailExpressionProvider.this.createExprFeature(it, IDetailExpressionProvider.ExpressionPostfix.BRACKETS);
scope.add(_createExprFeature_2);
}
}
if (!_matched) {
IDetailExpressionProvider.ExpressionFeature _createExprFeature_3 = DefaultDetailExpressionProvider.this.createExprFeature(it);
scope.add(_createExprFeature_3);
}
}
};
IterableExtensions.<InterfaceItem>forEach(_allInterfaceItems, _function);
List<StandardOperation> _latestOperations = this.roomHelpers.getLatestOperations(this.actorClass);
final Function1<StandardOperation, IDetailExpressionProvider.ExpressionFeature> _function_1 = new Function1<StandardOperation, IDetailExpressionProvider.ExpressionFeature>() {
@Override
public IDetailExpressionProvider.ExpressionFeature apply(final StandardOperation it) {
return DefaultDetailExpressionProvider.this.createExprFeature(it, IDetailExpressionProvider.ExpressionPostfix.PARENTHESES);
}
};
List<IDetailExpressionProvider.ExpressionFeature> _map = ListExtensions.<StandardOperation, IDetailExpressionProvider.ExpressionFeature>map(_latestOperations, _function_1);
Iterables.<IDetailExpressionProvider.ExpressionFeature>addAll(scope, _map);
List<Attribute> _allAttributes = this.roomHelpers.getAllAttributes(this.actorClass);
final Function1<Attribute, IDetailExpressionProvider.ExpressionFeature> _function_2 = new Function1<Attribute, IDetailExpressionProvider.ExpressionFeature>() {
@Override
public IDetailExpressionProvider.ExpressionFeature apply(final Attribute it) {
IDetailExpressionProvider.ExpressionFeature _switchResult = null;
int _size = it.getSize();
boolean _matched = false;
int _size_1 = it.getSize();
boolean _greaterThan = (_size_1 > 1);
if (_greaterThan) {
_matched=true;
_switchResult = DefaultDetailExpressionProvider.this.createExprFeature(it, IDetailExpressionProvider.ExpressionPostfix.BRACKETS);
}
if (!_matched) {
_switchResult = DefaultDetailExpressionProvider.this.createExprFeature(it);
}
return _switchResult;
}
};
List<IDetailExpressionProvider.ExpressionFeature> _map_1 = ListExtensions.<Attribute, IDetailExpressionProvider.ExpressionFeature>map(_allAttributes, _function_2);
Iterables.<IDetailExpressionProvider.ExpressionFeature>addAll(scope, _map_1);
return scope;
}
@Override
public List<IDetailExpressionProvider.ExpressionFeature> getContextFeatures(final IDetailExpressionProvider.ExpressionFeature ctx) {
this.assertNotNull(ctx);
final List<IDetailExpressionProvider.ExpressionFeature> scope = CollectionLiterals.<IDetailExpressionProvider.ExpressionFeature>newArrayList();
Object _data = ctx.getData();
final Object obj = _data;
boolean _matched = false;
if (obj instanceof Port) {
int _multiplicity = ((Port)obj).getMultiplicity();
boolean _equals = (_multiplicity == 1);
if (_equals) {
_matched=true;
}
}
if (!_matched) {
if (obj instanceof SAP) {
_matched=true;
}
}
if (_matched) {
ProtocolClass _protocol = this.roomHelpers.getProtocol(((InterfaceItem)obj));
boolean _isConjugated = this.roomHelpers.isConjugated(((InterfaceItem)obj));
boolean _not = (!_isConjugated);
List<PortOperation> _allOperations = this.roomHelpers.getAllOperations(_protocol, _not);
final Function1<PortOperation, IDetailExpressionProvider.ExpressionFeature> _function = new Function1<PortOperation, IDetailExpressionProvider.ExpressionFeature>() {
@Override
public IDetailExpressionProvider.ExpressionFeature apply(final PortOperation it) {
return DefaultDetailExpressionProvider.this.createExprFeature(it, IDetailExpressionProvider.ExpressionPostfix.PARENTHESES);
}
};
List<IDetailExpressionProvider.ExpressionFeature> _map = ListExtensions.<PortOperation, IDetailExpressionProvider.ExpressionFeature>map(_allOperations, _function);
Iterables.<IDetailExpressionProvider.ExpressionFeature>addAll(scope, _map);
}
Object _data_1 = ctx.getData();
final Object obj_1 = _data_1;
boolean _matched_1 = false;
if (obj_1 instanceof InterfaceItem) {
_matched_1=true;
final ProtocolClass pc = this.roomHelpers.getProtocol(((InterfaceItem)obj_1));
CommunicationType _commType = pc.getCommType();
if (_commType != null) {
switch (_commType) {
case EVENT_DRIVEN:
boolean _isConjugated_1 = this.roomHelpers.isConjugated(((InterfaceItem)obj_1));
List<Message> _allMessages = this.roomHelpers.getAllMessages(pc, _isConjugated_1);
final Function1<Message, IDetailExpressionProvider.ExpressionFeature> _function_1 = new Function1<Message, IDetailExpressionProvider.ExpressionFeature>() {
@Override
public IDetailExpressionProvider.ExpressionFeature apply(final Message it) {
return DefaultDetailExpressionProvider.this.createExprFeature(it, IDetailExpressionProvider.ExpressionPostfix.PARENTHESES);
}
};
List<IDetailExpressionProvider.ExpressionFeature> _map_1 = ListExtensions.<Message, IDetailExpressionProvider.ExpressionFeature>map(_allMessages, _function_1);
Iterables.<IDetailExpressionProvider.ExpressionFeature>addAll(scope, _map_1);
break;
case DATA_DRIVEN:
boolean _isConjugated_2 = this.roomHelpers.isConjugated(((InterfaceItem)obj_1));
if (_isConjugated_2) {
List<Message> _allIncomingMessages = this.roomHelpers.getAllIncomingMessages(pc);
final Function1<Message, IDetailExpressionProvider.ExpressionFeature> _function_2 = new Function1<Message, IDetailExpressionProvider.ExpressionFeature>() {
@Override
public IDetailExpressionProvider.ExpressionFeature apply(final Message it) {
return DefaultDetailExpressionProvider.this.createExprFeature(it, IDetailExpressionProvider.ExpressionPostfix.PARENTHESES);
}
};
List<IDetailExpressionProvider.ExpressionFeature> _map_2 = ListExtensions.<Message, IDetailExpressionProvider.ExpressionFeature>map(_allIncomingMessages, _function_2);
Iterables.<IDetailExpressionProvider.ExpressionFeature>addAll(scope, _map_2);
} else {
List<Message> _allIncomingMessages_1 = this.roomHelpers.getAllIncomingMessages(pc);
final Function1<Message, IDetailExpressionProvider.ExpressionFeature> _function_3 = new Function1<Message, IDetailExpressionProvider.ExpressionFeature>() {
@Override
public IDetailExpressionProvider.ExpressionFeature apply(final Message it) {
return DefaultDetailExpressionProvider.this.createExprFeature(it);
}
};
List<IDetailExpressionProvider.ExpressionFeature> _map_3 = ListExtensions.<Message, IDetailExpressionProvider.ExpressionFeature>map(_allIncomingMessages_1, _function_3);
Iterables.<IDetailExpressionProvider.ExpressionFeature>addAll(scope, _map_3);
}
break;
case SYNCHRONOUS:
break;
default:
break;
}
}
}
if (!_matched_1) {
if (obj_1 instanceof Attribute) {
RefableType _type = ((Attribute)obj_1).getType();
DataType _type_1 = _type.getType();
if ((_type_1 instanceof DataClass)) {
_matched_1=true;
RefableType _type_2 = ((Attribute)obj_1).getType();
DataType _type_3 = _type_2.getType();
final DataClass dc = ((DataClass) _type_3);
List<Attribute> _allAttributes = this.roomHelpers.getAllAttributes(dc);
final Function1<Attribute, IDetailExpressionProvider.ExpressionFeature> _function_1 = new Function1<Attribute, IDetailExpressionProvider.ExpressionFeature>() {
@Override
public IDetailExpressionProvider.ExpressionFeature apply(final Attribute it) {
IDetailExpressionProvider.ExpressionFeature _xifexpression = null;
int _size = it.getSize();
boolean _greaterThan = (_size > 1);
if (_greaterThan) {
_xifexpression = DefaultDetailExpressionProvider.this.createExprFeature(it, IDetailExpressionProvider.ExpressionPostfix.BRACKETS);
} else {
_xifexpression = DefaultDetailExpressionProvider.this.createExprFeature(it);
}
return _xifexpression;
}
};
List<IDetailExpressionProvider.ExpressionFeature> _map_1 = ListExtensions.<Attribute, IDetailExpressionProvider.ExpressionFeature>map(_allAttributes, _function_1);
Iterables.<IDetailExpressionProvider.ExpressionFeature>addAll(scope, _map_1);
}
}
}
return scope;
}
public DefaultDetailExpressionProvider(final ActorClass actorClass) {
super(actorClass);
}
}