All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.joynr.generator.cpp.defaultProvider.DefaultInterfaceProviderCppTemplate Maven / Gradle / Ivy

There is a newer version: 0.9.3
Show newest version
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