From 0f233b0b11dbc6b1bbaf28e238f56c4371d58f0d Mon Sep 17 00:00:00 2001 From: Juergen Haug Date: Thu, 8 Nov 2012 14:27:38 +0100 Subject: [CQ 6485][config, generator] refactor dataConfiguration, attribute init, attribute value input formatting changed Change-Id: I8a3399be56cd67cb6ab75529864b9dcb6f7b7799 --- .../org.eclipse.etrice.generator.config/.classpath | 8 + .../org.eclipse.etrice.generator.config/.gitignore | 1 + .../org.eclipse.etrice.generator.config/.project | 34 +++ .../.settings/org.eclipse.jdt.core.prefs | 7 + .../META-INF/MANIFEST.MF | 17 ++ .../org.eclipse.etrice.generator.config/about.html | 28 ++ .../build.properties | 4 + .../generator/config/DataConfiguration.xtend | 154 ++++++++++ .../config/util/DataConfigurationHelper.java | 192 ++++++++++++ .../config/.DataConfiguration.java._trace | Bin 0 -> 41616 bytes .../etrice/generator/config/DataConfiguration.java | 325 +++++++++++++++++++++ 11 files changed, 770 insertions(+) create mode 100644 plugins/org.eclipse.etrice.generator.config/.classpath create mode 100644 plugins/org.eclipse.etrice.generator.config/.gitignore create mode 100644 plugins/org.eclipse.etrice.generator.config/.project create mode 100644 plugins/org.eclipse.etrice.generator.config/.settings/org.eclipse.jdt.core.prefs create mode 100644 plugins/org.eclipse.etrice.generator.config/META-INF/MANIFEST.MF create mode 100644 plugins/org.eclipse.etrice.generator.config/about.html create mode 100644 plugins/org.eclipse.etrice.generator.config/build.properties create mode 100644 plugins/org.eclipse.etrice.generator.config/src/org/eclipse/etrice/generator/config/DataConfiguration.xtend create mode 100644 plugins/org.eclipse.etrice.generator.config/src/org/eclipse/etrice/generator/config/util/DataConfigurationHelper.java create mode 100644 plugins/org.eclipse.etrice.generator.config/xtend-gen/org/eclipse/etrice/generator/config/.DataConfiguration.java._trace create mode 100644 plugins/org.eclipse.etrice.generator.config/xtend-gen/org/eclipse/etrice/generator/config/DataConfiguration.java (limited to 'plugins/org.eclipse.etrice.generator.config') diff --git a/plugins/org.eclipse.etrice.generator.config/.classpath b/plugins/org.eclipse.etrice.generator.config/.classpath new file mode 100644 index 000000000..54357e36e --- /dev/null +++ b/plugins/org.eclipse.etrice.generator.config/.classpath @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/plugins/org.eclipse.etrice.generator.config/.gitignore b/plugins/org.eclipse.etrice.generator.config/.gitignore new file mode 100644 index 000000000..092357e47 --- /dev/null +++ b/plugins/org.eclipse.etrice.generator.config/.gitignore @@ -0,0 +1 @@ +bin diff --git a/plugins/org.eclipse.etrice.generator.config/.project b/plugins/org.eclipse.etrice.generator.config/.project new file mode 100644 index 000000000..4093fbb76 --- /dev/null +++ b/plugins/org.eclipse.etrice.generator.config/.project @@ -0,0 +1,34 @@ + + + org.eclipse.etrice.generator.config + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + org.eclipse.xtext.ui.shared.xtextBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + org.eclipse.xtext.ui.shared.xtextNature + + diff --git a/plugins/org.eclipse.etrice.generator.config/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.etrice.generator.config/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..f287d53cf --- /dev/null +++ b/plugins/org.eclipse.etrice.generator.config/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,7 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.6 diff --git a/plugins/org.eclipse.etrice.generator.config/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.generator.config/META-INF/MANIFEST.MF new file mode 100644 index 000000000..7d151f40a --- /dev/null +++ b/plugins/org.eclipse.etrice.generator.config/META-INF/MANIFEST.MF @@ -0,0 +1,17 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: eTrice Generator Config +Bundle-SymbolicName: org.eclipse.etrice.generator.config;singleton:=true +Bundle-Version: 0.2.0.qualifier +Bundle-Vendor: eTrice (Incubation) +Bundle-RequiredExecutionEnvironment: JavaSE-1.6 +Bundle-ActivationPolicy: lazy +Require-Bundle: org.eclipse.etrice.core.room;bundle-version="0.2.0", + org.eclipse.etrice.core.config;bundle-version="0.2.0", + org.eclipse.etrice.generator;bundle-version="0.2.0", + org.eclipse.etrice.core.genmodel;bundle-version="0.2.0", + org.eclipse.xtend.lib, + com.google.guava, + org.eclipse.xtext.xbase.lib +Export-Package: org.eclipse.etrice.generator.config + diff --git a/plugins/org.eclipse.etrice.generator.config/about.html b/plugins/org.eclipse.etrice.generator.config/about.html new file mode 100644 index 000000000..f47dbddbb --- /dev/null +++ b/plugins/org.eclipse.etrice.generator.config/about.html @@ -0,0 +1,28 @@ + + + + +About + + +

About This Content

+ +

June 5, 2006

+

License

+ +

The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise +indicated below, the Content is provided to you under the terms and conditions of the +Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available +at http://www.eclipse.org/legal/epl-v10.html. +For purposes of the EPL, "Program" will mean the Content.

+ +

If you did not receive this Content directly from the Eclipse Foundation, the Content is +being redistributed by another party ("Redistributor") and different terms and conditions may +apply to your use of any object code in the Content. Check the Redistributor's license that was +provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise +indicated below, the terms and conditions of the EPL still apply to any source code in the Content +and such source code may be obtained at http://www.eclipse.org.

+ + + \ No newline at end of file diff --git a/plugins/org.eclipse.etrice.generator.config/build.properties b/plugins/org.eclipse.etrice.generator.config/build.properties new file mode 100644 index 000000000..eeeed051e --- /dev/null +++ b/plugins/org.eclipse.etrice.generator.config/build.properties @@ -0,0 +1,4 @@ +source.. = src/,\ + xtend-gen/ +bin.includes = META-INF/,\ + . diff --git a/plugins/org.eclipse.etrice.generator.config/src/org/eclipse/etrice/generator/config/DataConfiguration.xtend b/plugins/org.eclipse.etrice.generator.config/src/org/eclipse/etrice/generator/config/DataConfiguration.xtend new file mode 100644 index 000000000..ea7ebfb66 --- /dev/null +++ b/plugins/org.eclipse.etrice.generator.config/src/org/eclipse/etrice/generator/config/DataConfiguration.xtend @@ -0,0 +1,154 @@ +/******************************************************************************* + * 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 java.util.ArrayList +import java.util.List +import org.eclipse.emf.ecore.resource.ResourceSet +import org.eclipse.etrice.core.ConfigStandaloneSetup +import org.eclipse.etrice.core.genmodel.base.ILogger +import org.eclipse.etrice.core.genmodel.etricegen.ActorInstance +import org.eclipse.etrice.core.room.ActorClass +import org.eclipse.etrice.core.room.Attribute +import org.eclipse.etrice.core.room.ProtocolClass +import org.eclipse.etrice.core.room.SubSystemClass +import org.eclipse.etrice.generator.base.IDataConfiguration +import org.eclipse.etrice.generator.config.util.DataConfigurationHelper +import org.eclipse.etrice.core.config.BooleanLiteral +import org.eclipse.etrice.core.config.IntLiteral +import org.eclipse.etrice.core.config.RealLiteral +import org.eclipse.etrice.core.config.StringLiteral +import org.eclipse.etrice.core.config.LiteralArray +import org.eclipse.etrice.core.config.Literal + +class DataConfiguration implements IDataConfiguration { + + + override doSetup() { + ConfigStandaloneSetup::doSetup() + } + + override setResources(ResourceSet resource, ILogger logger) { + DataConfigurationHelper::setConfigModels(resource, logger) + } + + // static + + override getAttrClassConfigValue(ActorClass actor, List path) { + actor.getAttrClassConfig(path)?.value?.toStringExpr + } + + override getAttrClassConfigMaxValue(ActorClass actor, List path) { + actor.getAttrClassConfig(path)?.min?.toStringExpr + } + + override getAttrClassConfigMinValue(ActorClass actor, List path) { + actor.getAttrClassConfig(path)?.max?.toStringExpr + } + + def private getAttrClassConfig(ActorClass actor, List path){ + var id = '''/«actor.name»/«path.toStringPath»'''.toString + DataConfigurationHelper::actorClassAttrMap.get(id) + } + + override getAttrClassConfigValue(ProtocolClass pc, boolean regular, List path) { + var id = '''/«pc.name»/«IF regular»regular«ELSE»conjugated«ENDIF»/«path.toStringPath»'''.toString + DataConfigurationHelper::protocolClassAttrMap.get(id)?.value?.toStringExpr + } + + def private toStringPath(List path){ + '''«FOR a : path SEPARATOR '/'»«a.name»«ENDFOR»'''.toString + } + + override getAttrInstanceConfigValue(ActorInstance ai, List path) { + var id = ai.path+"/"+path.toStringPath + DataConfigurationHelper::actorInstanceAttrMap.get(id)?.value?.toStringExpr + } + + // dynamic + + override getPollingTimerUser(SubSystemClass subsystem) { + subsystem.config?.dynConfig?.polling + } + + override getUserCode1(SubSystemClass subsystem) { + var dynConfig = subsystem.config?.dynConfig + return + if(dynConfig?.filePath != null) + "import org.eclipse.etrice.runtime.java.config.ConfigSourceFile; // TODO JH make lang independent" + else + dynConfig?.userCode1 + } + + override getUserCode2(SubSystemClass subsystem) { + var dynConfig = subsystem.config?.dynConfig + return + if(dynConfig?.filePath != null) + '''new ConfigSourceFile("«dynConfig.filePath»")''' + else + dynConfig?.userCode2 + } + + override getDynConfigReadAttributes(String actorInstance) { + val result = new ArrayList + var configs = DataConfigurationHelper::dynActorInstanceAttrMap.get(actorInstance) + configs?.forEach(c | if(c.readOnly)result.add(c.attribute)) + + return result + } + + override getDynConfigWriteAttributes(String actorInstance) { + val result = new ArrayList + var configs = DataConfigurationHelper::dynActorInstanceAttrMap.get(actorInstance) + configs?.forEach(c | if(!c.readOnly)result.add(c.attribute)) + + return result + } + + + override hasVariableService(SubSystemClass subsystem) { + subsystem.config?.dynConfig != null + } + + def private toStringExpr(LiteralArray literal){ + '''«FOR l : literal.literals SEPARATOR ','»«l.toStringExpr»«ENDFOR»'''.toString + } + + def private toStringExpr(Literal literal){ + switch(literal){ + BooleanLiteral: literal.isTrue.toString + IntLiteral: literal.value.toString + RealLiteral: literal.value.toString + StringLiteral: literal.value.toString + } + } + + def private getConfig(SubSystemClass cc){ + DataConfigurationHelper::subSystemConfigMap.get(cc) + } + + override getDynConfigReadAttributes(ActorClass actor) { + val result = new ArrayList + var configs = DataConfigurationHelper::dynActorClassAttrMap.get(actor) + configs?.forEach(c | if(c.readOnly)result.add(c.attribute)) + return result + } + + override getDynConfigWriteAttributes(ActorClass actor) { + val result = new ArrayList + var configs = DataConfigurationHelper::dynActorClassAttrMap.get(actor) + configs?.forEach(c | if(!c.readOnly)result.add(c.attribute)) + return result + } + +} \ No newline at end of file diff --git a/plugins/org.eclipse.etrice.generator.config/src/org/eclipse/etrice/generator/config/util/DataConfigurationHelper.java b/plugins/org.eclipse.etrice.generator.config/src/org/eclipse/etrice/generator/config/util/DataConfigurationHelper.java new file mode 100644 index 000000000..bb768ad46 --- /dev/null +++ b/plugins/org.eclipse.etrice.generator.config/src/org/eclipse/etrice/generator/config/util/DataConfigurationHelper.java @@ -0,0 +1,192 @@ +/******************************************************************************* + * 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.util; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.ResourceSet; +import org.eclipse.etrice.core.config.ActorClassConfig; +import org.eclipse.etrice.core.config.ActorInstanceConfig; +import org.eclipse.etrice.core.config.AttrClassConfig; +import org.eclipse.etrice.core.config.AttrInstanceConfig; +import org.eclipse.etrice.core.config.ConfigModel; +import org.eclipse.etrice.core.config.ProtocolClassConfig; +import org.eclipse.etrice.core.config.SubSystemConfig; +import org.eclipse.etrice.core.config.util.ConfigUtil; +import org.eclipse.etrice.core.genmodel.base.ILogger; +import org.eclipse.etrice.core.room.ActorClass; +import org.eclipse.etrice.core.room.Attribute; +import org.eclipse.etrice.core.room.DataClass; +import org.eclipse.etrice.core.room.ProtocolClass; +import org.eclipse.etrice.core.room.SubSystemClass; + +public class DataConfigurationHelper { + + // static + public static Map actorClassAttrMap = new HashMap(); + public static Map protocolClassAttrMap = new HashMap(); + public static Map actorInstanceAttrMap = new HashMap(); + + // dynamic + public static Map subSystemConfigMap = new HashMap(); + public static Map> dynActorInstanceAttrMap = new HashMap>(); + public static Map> dynActorClassAttrMap = new HashMap>(); + + public static boolean setConfigModels(ResourceSet rs, ILogger logger) { + actorClassAttrMap.clear(); + protocolClassAttrMap.clear(); + actorInstanceAttrMap.clear(); + subSystemConfigMap.clear(); + dynActorInstanceAttrMap.clear(); + dynActorClassAttrMap.clear(); + + boolean error = false; + + List configs = new ArrayList(); + for (Resource res : rs.getResources()) { + EObject object = res.getContents().get(0); + if (object instanceof ConfigModel) + configs.add((ConfigModel) object); + } + + if (!configs.isEmpty()) + logger.logInfo("-- loading configurations"); + + Set actorClasses = new HashSet(); + Set protocolClasses = new HashSet(); + Set actorInstances = new HashSet(); + for (ConfigModel config : configs) { + for (ActorClassConfig classConfig : config.getActorClassConfigs()) { + if (actorClasses.contains(classConfig.getActor())) { + logger.logError("Multiple configurations for actor class " + + classConfig.getActor().getName() + " found", null); + error = true; + } else { + actorClasses.add(classConfig.getActor()); + collectConfigs(classConfig, actorClassAttrMap); + } + } + for (ProtocolClassConfig protocolConfig : config + .getProtocolClassConfigs()) { + if (protocolClasses.contains(protocolConfig.getProtocol())) { + logger.logError( + "Multiple configurations for protocol class " + + protocolConfig.getProtocol().getName() + + " found", null); + error = true; + } else { + protocolClasses.add(protocolConfig.getProtocol()); + collectConfigs(protocolConfig, protocolClassAttrMap); + } + } + for (ActorInstanceConfig instanceConfig : config + .getActorInstanceConfigs()) { + String path = "/" + instanceConfig.getRoot().getName() + + toStringPath(instanceConfig.getPath().getRefs(), "/"); + if (actorInstances.contains(path)) { + logger.logError( + "Multiple configurations for actor instance " + + path + " found", null); + } else { + actorInstances.add(path); + collectConfigs(instanceConfig, path, actorInstanceAttrMap); + } + } + for (SubSystemConfig ssConfig : config.getSubSystemConfigs()) { + if (subSystemConfigMap.containsKey(ssConfig.getSubSystem())) { + logger.logError( + "Multiple configurations for subSystem class " + + ssConfig.getSubSystem().getName() + + " found", null); + error = true; + } else + subSystemConfigMap.put(ssConfig.getSubSystem(), ssConfig); + } + } + + return !error; + } + + private static void collectConfigs(ActorInstanceConfig actorConfig, + String path, Map map) { + for (AttrInstanceConfig c : actorConfig.getAttributes()) { + collectConfigs(c, path + "/" + c.getAttribute().getName(), map); + + if (c.isDynConfig()) { + List list = dynActorInstanceAttrMap + .get(path); + if (list == null) + list = new ArrayList(); + list.add(c); + dynActorInstanceAttrMap.put(path, list); + + ActorClass ac = ConfigUtil.getLastActorRef( + actorConfig.getRoot(), actorConfig.getPath()).getType(); + if ((list = dynActorClassAttrMap.get(ac)) == null) + list = new ArrayList(); + list.add(c); + dynActorClassAttrMap.put(ac, list); + } + } + } + + private static void collectConfigs(ProtocolClassConfig protocolConfig, + Map map) { + String path = "/" + protocolConfig.getProtocol().getName(); + for (AttrClassConfig c : protocolConfig.getRegular().getAttributes()) + collectConfigs(c, path + "/regular/" + c.getAttribute().getName(), + map); + for (AttrClassConfig c : protocolConfig.getConjugated().getAttributes()) + collectConfigs(c, path + "/conjugated/" + + c.getAttribute().getName(), map); + } + + private static void collectConfigs(ActorClassConfig actorConfig, + Map map) { + String path = "/" + actorConfig.getActor().getName(); + for (AttrClassConfig c : actorConfig.getAttributes()) + collectConfigs(c, path + "/" + c.getAttribute().getName(), map); + } + + private static void collectConfigs(AttrClassConfig config, String path, + Map map) { + Attribute a = config.getAttribute(); + if (a.getRefType().getType() instanceof DataClass) + for (AttrClassConfig c : config.getAttributes()) + collectConfigs(c, path + "/" + c.getAttribute().getName(), map); + map.put(path, config); + } + + private static void collectConfigs(AttrInstanceConfig config, String path, + Map map) { + Attribute a = config.getAttribute(); + if (a.getRefType().getType() instanceof DataClass) + for (AttrInstanceConfig c : config.getAttributes()) + collectConfigs(c, path + "/" + c.getAttribute().getName(), map); + map.put(path, config); + } + + public static String toStringPath(Iterable path, String pathDelim) { + StringBuilder b = new StringBuilder(); + for (String p : path) + b.append(pathDelim + p); + + return b.toString(); + } +} diff --git a/plugins/org.eclipse.etrice.generator.config/xtend-gen/org/eclipse/etrice/generator/config/.DataConfiguration.java._trace b/plugins/org.eclipse.etrice.generator.config/xtend-gen/org/eclipse/etrice/generator/config/.DataConfiguration.java._trace new file mode 100644 index 000000000..5be2e6938 Binary files /dev/null and b/plugins/org.eclipse.etrice.generator.config/xtend-gen/org/eclipse/etrice/generator/config/.DataConfiguration.java._trace differ diff --git a/plugins/org.eclipse.etrice.generator.config/xtend-gen/org/eclipse/etrice/generator/config/DataConfiguration.java b/plugins/org.eclipse.etrice.generator.config/xtend-gen/org/eclipse/etrice/generator/config/DataConfiguration.java new file mode 100644 index 000000000..d7f51d1fd --- /dev/null +++ b/plugins/org.eclipse.etrice.generator.config/xtend-gen/org/eclipse/etrice/generator/config/DataConfiguration.java @@ -0,0 +1,325 @@ +package org.eclipse.etrice.generator.config; + +import com.google.common.base.Objects; +import java.util.ArrayList; +import java.util.List; +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.config.AttrClassConfig; +import org.eclipse.etrice.core.config.AttrInstanceConfig; +import org.eclipse.etrice.core.config.BooleanLiteral; +import org.eclipse.etrice.core.config.DynamicConfig; +import org.eclipse.etrice.core.config.IntLiteral; +import org.eclipse.etrice.core.config.Literal; +import org.eclipse.etrice.core.config.LiteralArray; +import org.eclipse.etrice.core.config.NumberLiteral; +import org.eclipse.etrice.core.config.RealLiteral; +import org.eclipse.etrice.core.config.StringLiteral; +import org.eclipse.etrice.core.config.SubSystemConfig; +import org.eclipse.etrice.core.genmodel.base.ILogger; +import org.eclipse.etrice.core.genmodel.etricegen.ActorInstance; +import org.eclipse.etrice.core.room.ActorClass; +import org.eclipse.etrice.core.room.Attribute; +import org.eclipse.etrice.core.room.ProtocolClass; +import org.eclipse.etrice.core.room.SubSystemClass; +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.xbase.lib.IterableExtensions; +import org.eclipse.xtext.xbase.lib.Procedures.Procedure1; + +@SuppressWarnings("all") +public class DataConfiguration implements IDataConfiguration { + public void doSetup() { + ConfigStandaloneSetup.doSetup(); + } + + public boolean setResources(final ResourceSet resource, final ILogger logger) { + boolean _setConfigModels = DataConfigurationHelper.setConfigModels(resource, logger); + return _setConfigModels; + } + + public String getAttrClassConfigValue(final ActorClass actor, final List path) { + AttrClassConfig _attrClassConfig = this.getAttrClassConfig(actor, path); + LiteralArray _value = _attrClassConfig==null?(LiteralArray)null:_attrClassConfig.getValue(); + String _stringExpr = _value==null?(String)null:this.toStringExpr(_value); + return _stringExpr; + } + + public String getAttrClassConfigMaxValue(final ActorClass actor, final List path) { + AttrClassConfig _attrClassConfig = this.getAttrClassConfig(actor, path); + NumberLiteral _min = _attrClassConfig==null?(NumberLiteral)null:_attrClassConfig.getMin(); + String _stringExpr = _min==null?(String)null:this.toStringExpr(_min); + return _stringExpr; + } + + public String getAttrClassConfigMinValue(final ActorClass actor, final List path) { + AttrClassConfig _attrClassConfig = this.getAttrClassConfig(actor, path); + NumberLiteral _max = _attrClassConfig==null?(NumberLiteral)null:_attrClassConfig.getMax(); + String _stringExpr = _max==null?(String)null:this.toStringExpr(_max); + return _stringExpr; + } + + private AttrClassConfig getAttrClassConfig(final ActorClass actor, final List 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(); + AttrClassConfig _get = DataConfigurationHelper.actorClassAttrMap.get(id); + _xblockexpression = (_get); + } + return _xblockexpression; + } + + public String getAttrClassConfigValue(final ProtocolClass pc, final boolean regular, final List 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 = DataConfigurationHelper.protocolClassAttrMap.get(id); + LiteralArray _value = _get==null?(LiteralArray)null:_get.getValue(); + String _stringExpr = _value==null?(String)null:this.toStringExpr(_value); + _xblockexpression = (_stringExpr); + } + return _xblockexpression; + } + + private String toStringPath(final List 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, ""); + } + } + String _string = _builder.toString(); + return _string; + } + + public String getAttrInstanceConfigValue(final ActorInstance ai, final List path) { + String _xblockexpression = null; + { + String _path = ai.getPath(); + String _plus = (_path + "/"); + String _stringPath = this.toStringPath(path); + String id = (_plus + _stringPath); + AttrInstanceConfig _get = DataConfigurationHelper.actorInstanceAttrMap.get(id); + LiteralArray _value = _get==null?(LiteralArray)null:_get.getValue(); + String _stringExpr = _value==null?(String)null:this.toStringExpr(_value); + _xblockexpression = (_stringExpr); + } + return _xblockexpression; + } + + public int getPollingTimerUser(final SubSystemClass subsystem) { + SubSystemConfig _config = this.getConfig(subsystem); + DynamicConfig _dynConfig = _config==null?(DynamicConfig)null:_config.getDynConfig(); + int _polling = _dynConfig==null?0:_dynConfig.getPolling(); + return _polling; + } + + public String getUserCode1(final SubSystemClass subsystem) { + SubSystemConfig _config = this.getConfig(subsystem); + DynamicConfig dynConfig = _config==null?(DynamicConfig)null:_config.getDynConfig(); + String _xifexpression = null; + String _filePath = dynConfig==null?(String)null:dynConfig.getFilePath(); + boolean _notEquals = (!Objects.equal(_filePath, null)); + if (_notEquals) { + _xifexpression = "import org.eclipse.etrice.runtime.java.config.ConfigSourceFile; // TODO JH make lang independent"; + } else { + String _userCode1 = dynConfig==null?(String)null:dynConfig.getUserCode1(); + _xifexpression = _userCode1; + } + return _xifexpression; + } + + public String getUserCode2(final SubSystemClass subsystem) { + SubSystemConfig _config = this.getConfig(subsystem); + DynamicConfig dynConfig = _config==null?(DynamicConfig)null:_config.getDynConfig(); + String _xifexpression = null; + String _filePath = dynConfig==null?(String)null: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 = dynConfig==null?(String)null:dynConfig.getUserCode2(); + _xifexpression = _userCode2; + } + return _xifexpression; + } + + public List getDynConfigReadAttributes(final String actorInstance) { + ArrayList _arrayList = new ArrayList(); + final ArrayList result = _arrayList; + List configs = DataConfigurationHelper.dynActorInstanceAttrMap.get(actorInstance); + final Procedure1 _function = new Procedure1() { + public void apply(final AttrInstanceConfig c) { + boolean _isReadOnly = c.isReadOnly(); + if (_isReadOnly) { + Attribute _attribute = c.getAttribute(); + result.add(_attribute); + } + } + }; + if (configs!=null) IterableExtensions.forEach(configs, _function); + return result; + } + + public List getDynConfigWriteAttributes(final String actorInstance) { + ArrayList _arrayList = new ArrayList(); + final ArrayList result = _arrayList; + List configs = DataConfigurationHelper.dynActorInstanceAttrMap.get(actorInstance); + final Procedure1 _function = new Procedure1() { + public void apply(final AttrInstanceConfig c) { + boolean _isReadOnly = c.isReadOnly(); + boolean _not = (!_isReadOnly); + if (_not) { + Attribute _attribute = c.getAttribute(); + result.add(_attribute); + } + } + }; + if (configs!=null) IterableExtensions.forEach(configs, _function); + return result; + } + + public boolean hasVariableService(final SubSystemClass subsystem) { + SubSystemConfig _config = this.getConfig(subsystem); + DynamicConfig _dynConfig = _config==null?(DynamicConfig)null:_config.getDynConfig(); + boolean _notEquals = (!Objects.equal(_dynConfig, null)); + return _notEquals; + } + + private String toStringExpr(final LiteralArray literal) { + StringConcatenation _builder = new StringConcatenation(); + { + EList _literals = literal.getLiterals(); + boolean _hasElements = false; + for(final Literal l : _literals) { + if (!_hasElements) { + _hasElements = true; + } else { + _builder.appendImmediate(",", ""); + } + String _stringExpr = this.toStringExpr(l); + _builder.append(_stringExpr, ""); + } + } + String _string = _builder.toString(); + return _string; + } + + private String toStringExpr(final Literal literal) { + String _switchResult = null; + boolean _matched = false; + if (!_matched) { + if (literal instanceof BooleanLiteral) { + final BooleanLiteral _booleanLiteral = (BooleanLiteral)literal; + _matched=true; + boolean _isIsTrue = _booleanLiteral.isIsTrue(); + String _string = Boolean.valueOf(_isIsTrue).toString(); + _switchResult = _string; + } + } + if (!_matched) { + if (literal instanceof IntLiteral) { + final IntLiteral _intLiteral = (IntLiteral)literal; + _matched=true; + long _value = _intLiteral.getValue(); + String _string = Long.valueOf(_value).toString(); + _switchResult = _string; + } + } + if (!_matched) { + if (literal instanceof RealLiteral) { + final RealLiteral _realLiteral = (RealLiteral)literal; + _matched=true; + double _value = _realLiteral.getValue(); + String _string = Double.valueOf(_value).toString(); + _switchResult = _string; + } + } + if (!_matched) { + if (literal instanceof StringLiteral) { + final StringLiteral _stringLiteral = (StringLiteral)literal; + _matched=true; + String _value = _stringLiteral.getValue(); + String _string = _value.toString(); + _switchResult = _string; + } + } + return _switchResult; + } + + private SubSystemConfig getConfig(final SubSystemClass cc) { + SubSystemConfig _get = DataConfigurationHelper.subSystemConfigMap.get(cc); + return _get; + } + + public List getDynConfigReadAttributes(final ActorClass actor) { + ArrayList _arrayList = new ArrayList(); + final ArrayList result = _arrayList; + List configs = DataConfigurationHelper.dynActorClassAttrMap.get(actor); + final Procedure1 _function = new Procedure1() { + public void apply(final AttrInstanceConfig c) { + boolean _isReadOnly = c.isReadOnly(); + if (_isReadOnly) { + Attribute _attribute = c.getAttribute(); + result.add(_attribute); + } + } + }; + if (configs!=null) IterableExtensions.forEach(configs, _function); + return result; + } + + public List getDynConfigWriteAttributes(final ActorClass actor) { + ArrayList _arrayList = new ArrayList(); + final ArrayList result = _arrayList; + List configs = DataConfigurationHelper.dynActorClassAttrMap.get(actor); + final Procedure1 _function = new Procedure1() { + public void apply(final AttrInstanceConfig c) { + boolean _isReadOnly = c.isReadOnly(); + boolean _not = (!_isReadOnly); + if (_not) { + Attribute _attribute = c.getAttribute(); + result.add(_attribute); + } + } + }; + if (configs!=null) IterableExtensions.forEach(configs, _function); + return result; + } +} -- cgit v1.2.3