
io.joynr.generator.cpp.defaultProvider.DefaultInterfaceProviderCppTemplate Maven / Gradle / Ivy
package io.joynr.generator.cpp.defaultProvider;
import com.google.common.base.Objects;
import com.google.inject.Inject;
import io.joynr.generator.cpp.util.CppStdTypeUtil;
import io.joynr.generator.cpp.util.JoynrCppGeneratorExtensions;
import io.joynr.generator.cpp.util.TemplateBase;
import io.joynr.generator.util.InterfaceTemplate;
import org.eclipse.emf.common.util.EList;
import org.eclipse.xtend2.lib.StringConcatenation;
import org.eclipse.xtext.xbase.lib.Extension;
import org.eclipse.xtext.xbase.lib.IterableExtensions;
import org.eclipse.xtext.xbase.lib.StringExtensions;
import org.franca.core.franca.FArgument;
import org.franca.core.franca.FAttribute;
import org.franca.core.franca.FBasicTypeId;
import org.franca.core.franca.FInterface;
import org.franca.core.franca.FMethod;
import org.franca.core.franca.FTypeRef;
@SuppressWarnings("all")
public class DefaultInterfaceProviderCppTemplate implements InterfaceTemplate {
@Inject
@Extension
private TemplateBase _templateBase;
@Inject
@Extension
private CppStdTypeUtil _cppStdTypeUtil;
@Inject
@Extension
private JoynrCppGeneratorExtensions _joynrCppGeneratorExtensions;
public CharSequence generate(final FInterface serviceInterface) {
StringConcatenation _builder = new StringConcatenation();
final String interfaceName = this._joynrCppGeneratorExtensions.joynrName(serviceInterface);
_builder.newLineIfNotEmpty();
CharSequence _warning = this._templateBase.warning();
_builder.append(_warning, "");
_builder.newLineIfNotEmpty();
_builder.append("#include \"");
String _packagePathWithJoynrPrefix = this._joynrCppGeneratorExtensions.getPackagePathWithJoynrPrefix(serviceInterface, "/");
_builder.append(_packagePathWithJoynrPrefix, "");
_builder.append("/Default");
_builder.append(interfaceName, "");
_builder.append("Provider.h\"");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("#include ");
_builder.newLine();
_builder.append("#include ");
_builder.newLine();
_builder.newLine();
_builder.append("#include \"joynr/RequestStatus.h\"");
_builder.newLine();
_builder.append("#include \"joynr/joynrlogging.h\"");
_builder.newLine();
_builder.newLine();
String _namespaceStarter = this._joynrCppGeneratorExtensions.getNamespaceStarter(serviceInterface);
_builder.append(_namespaceStarter, "");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("using namespace joynr::joynr_logging;");
_builder.newLine();
_builder.newLine();
_builder.append("Logger* Default");
_builder.append(interfaceName, "");
_builder.append("Provider::logger = Logging::getInstance()->getLogger(\"PROV\", \"Default");
_builder.append(interfaceName, "");
_builder.append("Provider\");");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("Default");
_builder.append(interfaceName, "");
_builder.append("Provider::Default");
_builder.append(interfaceName, "");
_builder.append("Provider() :");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append(interfaceName, "\t\t");
_builder.append("AbstractProvider()");
{
EList _attributes = serviceInterface.getAttributes();
boolean _isEmpty = _attributes.isEmpty();
boolean _not = (!_isEmpty);
if (_not) {
_builder.append(",");
}
}
_builder.newLineIfNotEmpty();
{
EList _attributes_1 = serviceInterface.getAttributes();
boolean _hasElements = false;
for(final FAttribute attribute : _attributes_1) {
if (!_hasElements) {
_hasElements = true;
} else {
_builder.appendImmediate(",", "\t\t");
}
_builder.append("\t\t");
String _joynrName = this._joynrCppGeneratorExtensions.joynrName(attribute);
_builder.append(_joynrName, "\t\t");
_builder.append("()");
_builder.newLineIfNotEmpty();
}
}
_builder.append("{");
_builder.newLine();
_builder.append("\t");
_builder.append("// default uses a priority that is the current time,");
_builder.newLine();
_builder.append("\t");
_builder.append("// causing arbitration to the last started instance if highest priority arbitrator is used");
_builder.newLine();
_builder.append("\t");
_builder.append("std::chrono::milliseconds millisSinceEpoch = std::chrono::duration_cast(");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("std::chrono::system_clock::now().time_since_epoch()");
_builder.newLine();
_builder.append("\t");
_builder.append(");");
_builder.newLine();
_builder.append("\t");
_builder.append("providerQos.setPriority(millisSinceEpoch.count());");
_builder.newLine();
_builder.append("\t");
_builder.append("providerQos.setScope(joynr::types::ProviderScope::GLOBAL);");
_builder.newLine();
_builder.append("\t");
_builder.append("providerQos.setSupportsOnChangeSubscriptions(true);");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("Default");
_builder.append(interfaceName, "");
_builder.append("Provider::~Default");
_builder.append(interfaceName, "");
_builder.append("Provider()");
_builder.newLineIfNotEmpty();
_builder.append("{");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
{
EList _attributes_2 = serviceInterface.getAttributes();
boolean _isEmpty_1 = _attributes_2.isEmpty();
boolean _not_1 = (!_isEmpty_1);
if (_not_1) {
_builder.append("// attributes");
_builder.newLine();
}
}
{
EList _attributes_3 = serviceInterface.getAttributes();
for(final FAttribute attribute_1 : _attributes_3) {
String attributeName = this._joynrCppGeneratorExtensions.joynrName(attribute_1);
_builder.newLineIfNotEmpty();
{
boolean _isReadable = this._joynrCppGeneratorExtensions.isReadable(attribute_1);
if (_isReadable) {
_builder.append("void Default");
_builder.append(interfaceName, "");
_builder.append("Provider::get");
String _firstUpper = StringExtensions.toFirstUpper(attributeName);
_builder.append(_firstUpper, "");
_builder.append("(");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("std::function onSuccess");
_builder.newLine();
_builder.append(") {");
_builder.newLine();
_builder.append("\t");
_builder.append("onSuccess(");
_builder.append(attributeName, "\t");
_builder.append(");");
_builder.newLineIfNotEmpty();
_builder.append("}");
_builder.newLine();
_builder.newLine();
}
}
{
boolean _isWritable = this._joynrCppGeneratorExtensions.isWritable(attribute_1);
if (_isWritable) {
_builder.append("void Default");
_builder.append(interfaceName, "");
_builder.append("Provider::set");
String _firstUpper_1 = StringExtensions.toFirstUpper(attributeName);
_builder.append(_firstUpper_1, "");
_builder.append("(");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("const ");
String _typeName_1 = this._cppStdTypeUtil.getTypeName(attribute_1);
_builder.append(_typeName_1, "\t\t");
_builder.append("& ");
_builder.append(attributeName, "\t\t");
_builder.append(",");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("std::function onSuccess");
_builder.newLine();
_builder.append(") {");
_builder.newLine();
_builder.append("\t");
_builder.append("this->");
_builder.append(attributeName, "\t");
_builder.append(" = ");
_builder.append(attributeName, "\t");
_builder.append(";");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append(attributeName, "\t");
_builder.append("Changed(");
_builder.append(attributeName, "\t");
_builder.append(");");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("onSuccess();");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
}
}
}
}
{
EList _methods = serviceInterface.getMethods();
boolean _isEmpty_2 = _methods.isEmpty();
boolean _not_2 = (!_isEmpty_2);
if (_not_2) {
_builder.append("// methods");
_builder.newLine();
}
}
{
EList _methods_1 = serviceInterface.getMethods();
for(final FMethod method : _methods_1) {
final String outputTypedParamList = this._cppStdTypeUtil.getCommaSeperatedTypedConstOutputParameterList(method);
_builder.newLineIfNotEmpty();
final String outputUntypedParamList = this._cppStdTypeUtil.getCommaSeperatedUntypedOutputParameterList(method);
_builder.newLineIfNotEmpty();
final String inputTypedParamList = this._cppStdTypeUtil.getCommaSeperatedTypedConstInputParameterList(method);
_builder.newLineIfNotEmpty();
final String methodName = this._joynrCppGeneratorExtensions.joynrName(method);
_builder.newLineIfNotEmpty();
_builder.append("void Default");
_builder.append(interfaceName, "");
_builder.append("Provider::");
String _joynrName_1 = this._joynrCppGeneratorExtensions.joynrName(method);
_builder.append(_joynrName_1, "");
_builder.append("(");
_builder.newLineIfNotEmpty();
{
Iterable _inputParameters = this._joynrCppGeneratorExtensions.getInputParameters(method);
boolean _isEmpty_3 = IterableExtensions.isEmpty(_inputParameters);
boolean _not_3 = (!_isEmpty_3);
if (_not_3) {
_builder.append("\t\t");
String _substring = inputTypedParamList.substring(1);
_builder.append(_substring, "\t\t");
_builder.append(",");
_builder.newLineIfNotEmpty();
}
}
{
Iterable _outputParameters = this._joynrCppGeneratorExtensions.getOutputParameters(method);
boolean _isEmpty_4 = IterableExtensions.isEmpty(_outputParameters);
if (_isEmpty_4) {
_builder.append("\t\t");
_builder.append("std::function onSuccess");
_builder.newLine();
} else {
_builder.append("\t\t");
_builder.append("std::function onSuccess");
_builder.newLine();
}
}
_builder.append(") {");
_builder.newLine();
{
Iterable _inputParameters_1 = this._joynrCppGeneratorExtensions.getInputParameters(method);
for(final FArgument inputParameter : _inputParameters_1) {
_builder.append("\t");
_builder.append("Q_UNUSED(");
String _joynrName_2 = this._joynrCppGeneratorExtensions.joynrName(inputParameter);
_builder.append(_joynrName_2, "\t");
_builder.append(");");
_builder.newLineIfNotEmpty();
}
}
{
Iterable _outputParameters_1 = this._joynrCppGeneratorExtensions.getOutputParameters(method);
for(final FArgument argument : _outputParameters_1) {
_builder.append("\t");
final String outputParamType = this._cppStdTypeUtil.getTypeName(argument);
_builder.newLineIfNotEmpty();
{
boolean _and = false;
boolean _isArray = this._joynrCppGeneratorExtensions.isArray(argument);
boolean _not_4 = (!_isArray);
if (!_not_4) {
_and = false;
} else {
FTypeRef _type = argument.getType();
FBasicTypeId _predefined = _type.getPredefined();
boolean _notEquals = (!Objects.equal(_predefined, null));
_and = _notEquals;
}
if (_and) {
_builder.append("\t");
FTypeRef _type_1 = argument.getType();
final FBasicTypeId type = _type_1.getPredefined();
_builder.newLineIfNotEmpty();
{
boolean _equals = Objects.equal(type, FBasicTypeId.STRING);
if (_equals) {
_builder.append("\t");
_builder.append(outputParamType, "\t");
_builder.append(" ");
String _joynrName_3 = this._joynrCppGeneratorExtensions.joynrName(argument);
_builder.append(_joynrName_3, "\t");
_builder.append(" = \"Hello World\";");
_builder.newLineIfNotEmpty();
} else {
boolean _equals_1 = Objects.equal(type, FBasicTypeId.BOOLEAN);
if (_equals_1) {
_builder.append("\t");
_builder.append(outputParamType, "\t");
_builder.append(" ");
String _joynrName_4 = this._joynrCppGeneratorExtensions.joynrName(argument);
_builder.append(_joynrName_4, "\t");
_builder.append(" = false;");
_builder.newLineIfNotEmpty();
} else {
boolean _or = false;
boolean _or_1 = false;
boolean _or_2 = false;
boolean _or_3 = false;
boolean _or_4 = false;
boolean _or_5 = false;
boolean _or_6 = false;
boolean _equals_2 = Objects.equal(type, FBasicTypeId.INT8);
if (_equals_2) {
_or_6 = true;
} else {
boolean _equals_3 = Objects.equal(type, FBasicTypeId.UINT8);
_or_6 = _equals_3;
}
if (_or_6) {
_or_5 = true;
} else {
boolean _equals_4 = Objects.equal(type, FBasicTypeId.INT16);
_or_5 = _equals_4;
}
if (_or_5) {
_or_4 = true;
} else {
boolean _equals_5 = Objects.equal(type, FBasicTypeId.UINT16);
_or_4 = _equals_5;
}
if (_or_4) {
_or_3 = true;
} else {
boolean _equals_6 = Objects.equal(type, FBasicTypeId.INT32);
_or_3 = _equals_6;
}
if (_or_3) {
_or_2 = true;
} else {
boolean _equals_7 = Objects.equal(type, FBasicTypeId.UINT32);
_or_2 = _equals_7;
}
if (_or_2) {
_or_1 = true;
} else {
boolean _equals_8 = Objects.equal(type, FBasicTypeId.INT64);
_or_1 = _equals_8;
}
if (_or_1) {
_or = true;
} else {
boolean _equals_9 = Objects.equal(type, FBasicTypeId.UINT64);
_or = _equals_9;
}
if (_or) {
_builder.append("\t");
_builder.append(outputParamType, "\t");
_builder.append(" ");
String _joynrName_5 = this._joynrCppGeneratorExtensions.joynrName(argument);
_builder.append(_joynrName_5, "\t");
_builder.append(" = 42;");
_builder.newLineIfNotEmpty();
} else {
boolean _or_7 = false;
boolean _equals_10 = Objects.equal(type, FBasicTypeId.DOUBLE);
if (_equals_10) {
_or_7 = true;
} else {
boolean _equals_11 = Objects.equal(type, FBasicTypeId.FLOAT);
_or_7 = _equals_11;
}
if (_or_7) {
_builder.append("\t");
_builder.append(outputParamType, "\t");
_builder.append(" ");
String _joynrName_6 = this._joynrCppGeneratorExtensions.joynrName(argument);
_builder.append(_joynrName_6, "\t");
_builder.append(" = 3.1415;");
_builder.newLineIfNotEmpty();
} else {
_builder.append("\t");
_builder.append(outputParamType, "\t");
_builder.append(" ");
String _joynrName_7 = this._joynrCppGeneratorExtensions.joynrName(argument);
_builder.append(_joynrName_7, "\t");
_builder.append(";");
_builder.newLineIfNotEmpty();
}
}
}
}
}
} else {
_builder.append("\t");
_builder.append(outputParamType, "\t");
_builder.append(" ");
String _joynrName_8 = this._joynrCppGeneratorExtensions.joynrName(argument);
_builder.append(_joynrName_8, "\t");
_builder.append(";");
_builder.newLineIfNotEmpty();
}
}
}
}
_builder.append("\t");
_builder.append("LOG_WARN(logger, \"**********************************************\");");
_builder.newLine();
_builder.append("\t");
_builder.append("LOG_WARN(logger, \"* Default");
_builder.append(interfaceName, "\t");
_builder.append("Provider::");
_builder.append(methodName, "\t");
_builder.append(" called\");");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("LOG_WARN(logger, \"**********************************************\");");
_builder.newLine();
_builder.append("\t");
_builder.append("onSuccess(");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append(outputUntypedParamList, "\t\t\t");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append(");");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
}
}
String _namespaceEnder = this._joynrCppGeneratorExtensions.getNamespaceEnder(serviceInterface);
_builder.append(_namespaceEnder, "");
_builder.newLineIfNotEmpty();
return _builder;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy