blob: 2821f29ff26c681ada35f5fc6058a1b41e0e68dd [file] [log] [blame]
/**
* Copyright (c) 2012 Juergen Haug
* 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
*/
package org.eclipse.etrice.generator.config;
import com.google.common.base.Objects;
import com.google.inject.Inject;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import org.eclipse.emf.common.EMFPlugin;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.etrice.core.ConfigStandaloneSetup;
import org.eclipse.etrice.core.common.base.BooleanLiteral;
import org.eclipse.etrice.core.common.base.IntLiteral;
import org.eclipse.etrice.core.common.base.Literal;
import org.eclipse.etrice.core.common.base.NumberLiteral;
import org.eclipse.etrice.core.common.base.RealLiteral;
import org.eclipse.etrice.core.common.base.StringLiteral;
import org.eclipse.etrice.core.config.AttrClassConfig;
import org.eclipse.etrice.core.config.AttrInstanceConfig;
import org.eclipse.etrice.core.config.ConfigValue;
import org.eclipse.etrice.core.config.ConfigValueArray;
import org.eclipse.etrice.core.config.DynamicConfig;
import org.eclipse.etrice.core.config.EnumConfigValue;
import org.eclipse.etrice.core.config.LiteralConfigValue;
import org.eclipse.etrice.core.config.SubSystemConfig;
import org.eclipse.etrice.core.genmodel.etricegen.ActorInstance;
import org.eclipse.etrice.core.genmodel.etricegen.InterfaceItemInstance;
import org.eclipse.etrice.core.genmodel.etricegen.SubSystemInstance;
import org.eclipse.etrice.core.genmodel.fsm.base.ILogger;
import org.eclipse.etrice.core.room.ActorClass;
import org.eclipse.etrice.core.room.Attribute;
import org.eclipse.etrice.core.room.EnumLiteral;
import org.eclipse.etrice.core.room.ProtocolClass;
import org.eclipse.etrice.generator.base.IDataConfiguration;
import org.eclipse.etrice.generator.config.util.DataConfigurationHelper;
import org.eclipse.xtend2.lib.StringConcatenation;
import org.eclipse.xtext.scoping.impl.ImportUriResolver;
import org.eclipse.xtext.xbase.lib.Extension;
import org.eclipse.xtext.xbase.lib.IterableExtensions;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
@SuppressWarnings("all")
public class DataConfiguration implements IDataConfiguration {
@Inject
@Extension
protected DataConfigurationHelper _dataConfigurationHelper;
@Inject
protected ILogger logger;
@Inject
protected ImportUriResolver uriResolver;
@Override
public void doSetup() {
if ((!EMFPlugin.IS_ECLIPSE_RUNNING)) {
ConfigStandaloneSetup.doSetup();
}
}
@Override
public boolean setResources(final ResourceSet resource, final ILogger logger) {
return this._dataConfigurationHelper.setConfigModels(resource, logger);
}
@Override
public String getAttrClassConfigValue(final ActorClass actor, final List<Attribute> path) {
AttrClassConfig _attrClassConfig = this.getAttrClassConfig(actor, path);
ConfigValueArray _value = null;
if (_attrClassConfig!=null) {
_value=_attrClassConfig.getValue();
}
String _stringExpr = null;
if (_value!=null) {
_stringExpr=this.toStringExpr(_value);
}
return _stringExpr;
}
@Override
public String getAttrClassConfigMaxValue(final ActorClass actor, final List<Attribute> path) {
AttrClassConfig _attrClassConfig = this.getAttrClassConfig(actor, path);
NumberLiteral _max = null;
if (_attrClassConfig!=null) {
_max=_attrClassConfig.getMax();
}
String _stringExpr = null;
if (_max!=null) {
_stringExpr=this.toStringExpr(_max);
}
return _stringExpr;
}
@Override
public String getAttrClassConfigMinValue(final ActorClass actor, final List<Attribute> path) {
AttrClassConfig _attrClassConfig = this.getAttrClassConfig(actor, path);
NumberLiteral _min = null;
if (_attrClassConfig!=null) {
_min=_attrClassConfig.getMin();
}
String _stringExpr = null;
if (_min!=null) {
_stringExpr=this.toStringExpr(_min);
}
return _stringExpr;
}
private AttrClassConfig getAttrClassConfig(final ActorClass actor, final List<Attribute> path) {
AttrClassConfig _xblockexpression = null;
{
StringConcatenation _builder = new StringConcatenation();
_builder.append("/");
String _name = actor.getName();
_builder.append(_name, "");
_builder.append("/");
String _stringPath = this.toStringPath(path);
_builder.append(_stringPath, "");
String id = _builder.toString();
_xblockexpression = this._dataConfigurationHelper.actorClassAttrMap.get(id);
}
return _xblockexpression;
}
@Override
public String getAttrClassConfigValue(final ProtocolClass pc, final boolean regular, final List<Attribute> path) {
String _xblockexpression = null;
{
StringConcatenation _builder = new StringConcatenation();
_builder.append("/");
String _name = pc.getName();
_builder.append(_name, "");
_builder.append("/");
{
if (regular) {
_builder.append("regular");
} else {
_builder.append("conjugated");
}
}
_builder.append("/");
String _stringPath = this.toStringPath(path);
_builder.append(_stringPath, "");
String id = _builder.toString();
AttrClassConfig _get = this._dataConfigurationHelper.protocolClassAttrMap.get(id);
ConfigValueArray _value = null;
if (_get!=null) {
_value=_get.getValue();
}
String _stringExpr = null;
if (_value!=null) {
_stringExpr=this.toStringExpr(_value);
}
_xblockexpression = _stringExpr;
}
return _xblockexpression;
}
private String toStringPath(final List<Attribute> path) {
StringConcatenation _builder = new StringConcatenation();
{
boolean _hasElements = false;
for(final Attribute a : path) {
if (!_hasElements) {
_hasElements = true;
} else {
_builder.appendImmediate("/", "");
}
String _name = a.getName();
_builder.append(_name, "");
}
}
return _builder.toString();
}
@Override
public String getAttrInstanceConfigValue(final ActorInstance ai, final List<Attribute> path) {
String _xblockexpression = null;
{
String _path = ai.getPath();
String _plus = (_path + "/");
String _stringPath = this.toStringPath(path);
String id = (_plus + _stringPath);
AttrInstanceConfig _get = this._dataConfigurationHelper.actorInstanceAttrMap.get(id);
ConfigValueArray _value = null;
if (_get!=null) {
_value=_get.getValue();
}
String _stringExpr = null;
if (_value!=null) {
_stringExpr=this.toStringExpr(_value);
}
_xblockexpression = _stringExpr;
}
return _xblockexpression;
}
@Override
public String getAttrInstanceConfigValue(final InterfaceItemInstance item, final List<Attribute> path) {
String _path = item.getPath();
String _plus = (_path + "/");
String _stringPath = this.toStringPath(path);
String _plus_1 = (_plus + _stringPath);
AttrInstanceConfig _get = this._dataConfigurationHelper.actorInstanceAttrMap.get(_plus_1);
ConfigValueArray _value = null;
if (_get!=null) {
_value=_get.getValue();
}
String _stringExpr = null;
if (_value!=null) {
_stringExpr=this.toStringExpr(_value);
}
return _stringExpr;
}
@Override
public long getPollingTimerUser(final SubSystemInstance subsystem) {
long _xblockexpression = (long) 0;
{
SubSystemConfig _config = this.getConfig(subsystem);
DynamicConfig _dynConfig = null;
if (_config!=null) {
_dynConfig=_config.getDynConfig();
}
final DynamicConfig dynConf = _dynConfig;
long _xifexpression = (long) 0;
boolean _equals = Objects.equal(dynConf, null);
if (_equals) {
_xifexpression = 0;
} else {
_xifexpression = dynConf.getPolling();
}
_xblockexpression = _xifexpression;
}
return _xblockexpression;
}
@Override
public String getUserCode1(final SubSystemInstance subsystem) {
SubSystemConfig _config = this.getConfig(subsystem);
DynamicConfig _dynConfig = null;
if (_config!=null) {
_dynConfig=_config.getDynConfig();
}
DynamicConfig dynConfig = _dynConfig;
String _xifexpression = null;
String _filePath = null;
if (dynConfig!=null) {
_filePath=dynConfig.getFilePath();
}
boolean _notEquals = (!Objects.equal(_filePath, null));
if (_notEquals) {
_xifexpression = "import org.eclipse.etrice.runtime.java.config.ConfigSourceFile;";
} else {
String _userCode1 = null;
if (dynConfig!=null) {
_userCode1=dynConfig.getUserCode1();
}
_xifexpression = _userCode1;
}
return _xifexpression;
}
@Override
public String getUserCode2(final SubSystemInstance subsystem) {
SubSystemConfig _config = this.getConfig(subsystem);
DynamicConfig _dynConfig = null;
if (_config!=null) {
_dynConfig=_config.getDynConfig();
}
DynamicConfig dynConfig = _dynConfig;
String _xifexpression = null;
String _filePath = null;
if (dynConfig!=null) {
_filePath=dynConfig.getFilePath();
}
boolean _notEquals = (!Objects.equal(_filePath, null));
if (_notEquals) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("new ConfigSourceFile(\"");
String _filePath_1 = dynConfig.getFilePath();
_builder.append(_filePath_1, "");
_builder.append("\")");
_xifexpression = _builder.toString();
} else {
String _userCode2 = null;
if (dynConfig!=null) {
_userCode2=dynConfig.getUserCode2();
}
_xifexpression = _userCode2;
}
return _xifexpression;
}
@Override
public List<Attribute> getDynConfigReadAttributes(final ActorInstance ai) {
final ArrayList<Attribute> result = new ArrayList<Attribute>();
String _path = ai.getPath();
List<AttrInstanceConfig> configs = this._dataConfigurationHelper.dynActorInstanceAttrMap.get(_path);
if (configs!=null) {
final Procedure1<AttrInstanceConfig> _function = new Procedure1<AttrInstanceConfig>() {
@Override
public void apply(final AttrInstanceConfig c) {
boolean _isReadOnly = c.isReadOnly();
if (_isReadOnly) {
Attribute _attribute = c.getAttribute();
result.add(_attribute);
}
}
};
IterableExtensions.<AttrInstanceConfig>forEach(configs, _function);
}
return result;
}
@Override
public List<Attribute> getDynConfigWriteAttributes(final ActorInstance ai) {
final ArrayList<Attribute> result = new ArrayList<Attribute>();
String _path = ai.getPath();
List<AttrInstanceConfig> configs = this._dataConfigurationHelper.dynActorInstanceAttrMap.get(_path);
if (configs!=null) {
final Procedure1<AttrInstanceConfig> _function = new Procedure1<AttrInstanceConfig>() {
@Override
public void apply(final AttrInstanceConfig c) {
boolean _isReadOnly = c.isReadOnly();
boolean _not = (!_isReadOnly);
if (_not) {
Attribute _attribute = c.getAttribute();
result.add(_attribute);
}
}
};
IterableExtensions.<AttrInstanceConfig>forEach(configs, _function);
}
return result;
}
@Override
public boolean hasVariableService(final SubSystemInstance subsystem) {
SubSystemConfig _config = this.getConfig(subsystem);
DynamicConfig _dynConfig = null;
if (_config!=null) {
_dynConfig=_config.getDynConfig();
}
return (!Objects.equal(_dynConfig, null));
}
private String toStringExpr(final ConfigValueArray literal) {
StringConcatenation _builder = new StringConcatenation();
{
EList<ConfigValue> _values = literal.getValues();
boolean _hasElements = false;
for(final ConfigValue l : _values) {
if (!_hasElements) {
_hasElements = true;
} else {
_builder.appendImmediate(",", "");
}
String _stringExpr = this.toStringExpr(l);
_builder.append(_stringExpr, "");
}
}
return _builder.toString();
}
private String toStringExpr(final ConfigValue configValue) {
String _switchResult = null;
boolean _matched = false;
if (configValue instanceof LiteralConfigValue) {
_matched=true;
Literal _value = ((LiteralConfigValue)configValue).getValue();
_switchResult = this.toStringExpr(_value);
}
if (!_matched) {
if (configValue instanceof EnumConfigValue) {
_matched=true;
EnumLiteral _value = ((EnumConfigValue)configValue).getValue();
_switchResult = _value.getFullName();
}
}
return _switchResult;
}
private String toStringExpr(final Literal literal) {
String _switchResult = null;
boolean _matched = false;
if (literal instanceof BooleanLiteral) {
_matched=true;
boolean _isIsTrue = ((BooleanLiteral)literal).isIsTrue();
_switchResult = Boolean.valueOf(_isIsTrue).toString();
}
if (!_matched) {
if (literal instanceof IntLiteral) {
_matched=true;
long _value = ((IntLiteral)literal).getValue();
_switchResult = Long.valueOf(_value).toString();
}
}
if (!_matched) {
if (literal instanceof RealLiteral) {
_matched=true;
double _value = ((RealLiteral)literal).getValue();
_switchResult = Double.valueOf(_value).toString();
}
}
if (!_matched) {
if (literal instanceof StringLiteral) {
_matched=true;
String _value = ((StringLiteral)literal).getValue();
_switchResult = _value.toString();
}
}
return _switchResult;
}
private SubSystemConfig getConfig(final SubSystemInstance cc) {
String _path = cc.getPath();
return this._dataConfigurationHelper.subSystemConfigMap.get(_path);
}
@Override
public List<Attribute> getDynConfigReadAttributes(final ActorClass actor) {
final HashSet<Attribute> result = new HashSet<Attribute>();
final List<AttrInstanceConfig> configs = this._dataConfigurationHelper.dynActorClassAttrMap.get(actor);
if (configs!=null) {
final Procedure1<AttrInstanceConfig> _function = new Procedure1<AttrInstanceConfig>() {
@Override
public void apply(final AttrInstanceConfig c) {
boolean _isReadOnly = c.isReadOnly();
if (_isReadOnly) {
Attribute _attribute = c.getAttribute();
result.add(_attribute);
}
}
};
IterableExtensions.<AttrInstanceConfig>forEach(configs, _function);
}
return IterableExtensions.<Attribute>toList(result);
}
@Override
public List<Attribute> getDynConfigWriteAttributes(final ActorClass actor) {
final HashSet<Attribute> result = new HashSet<Attribute>();
final List<AttrInstanceConfig> configs = this._dataConfigurationHelper.dynActorClassAttrMap.get(actor);
if (configs!=null) {
final Procedure1<AttrInstanceConfig> _function = new Procedure1<AttrInstanceConfig>() {
@Override
public void apply(final AttrInstanceConfig c) {
boolean _isReadOnly = c.isReadOnly();
boolean _not = (!_isReadOnly);
if (_not) {
Attribute _attribute = c.getAttribute();
result.add(_attribute);
}
}
};
IterableExtensions.<AttrInstanceConfig>forEach(configs, _function);
}
return IterableExtensions.<Attribute>toList(result);
}
}