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

io.joynr.generator.cpp.inprocess.InterfaceInProcessConnectorCPPTemplate Maven / Gradle / Ivy

There is a newer version: 0.9.3
Show newest version
package io.joynr.generator.cpp.inprocess;

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.QtTypeUtil;
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.FBroadcast;
import org.franca.core.franca.FInterface;
import org.franca.core.franca.FMethod;
import org.franca.core.franca.FType;
import org.franca.core.franca.FTypeRef;

@SuppressWarnings("all")
public class InterfaceInProcessConnectorCPPTemplate implements InterfaceTemplate {
  @Inject
  @Extension
  private TemplateBase _templateBase;
  
  @Inject
  @Extension
  private CppStdTypeUtil cppStdTypeUtil;
  
  @Inject
  private QtTypeUtil qtTypeUtil;
  
  @Inject
  @Extension
  private JoynrCppGeneratorExtensions _joynrCppGeneratorExtensions;
  
  public CharSequence generate(final FInterface serviceInterface) {
    StringConcatenation _builder = new StringConcatenation();
    String interfaceName = this._joynrCppGeneratorExtensions.joynrName(serviceInterface);
    _builder.newLineIfNotEmpty();
    CharSequence _warning = this._templateBase.warning();
    _builder.append(_warning, "");
    _builder.newLineIfNotEmpty();
    _builder.append("#include ");
    _builder.newLine();
    _builder.newLine();
    _builder.append("#include \"");
    String _packagePathWithJoynrPrefix = this._joynrCppGeneratorExtensions.getPackagePathWithJoynrPrefix(serviceInterface, "/");
    _builder.append(_packagePathWithJoynrPrefix, "");
    _builder.append("/");
    _builder.append(interfaceName, "");
    _builder.append("InProcessConnector.h\"");
    _builder.newLineIfNotEmpty();
    _builder.append("#include \"");
    String _packagePathWithJoynrPrefix_1 = this._joynrCppGeneratorExtensions.getPackagePathWithJoynrPrefix(serviceInterface, "/");
    _builder.append(_packagePathWithJoynrPrefix_1, "");
    _builder.append("/");
    _builder.append(interfaceName, "");
    _builder.append("RequestCaller.h\"");
    _builder.newLineIfNotEmpty();
    _builder.append("#include \"joynr/DeclareMetatypeUtil.h\"");
    _builder.newLine();
    {
      Iterable _allComplexAndEnumTypes = this._joynrCppGeneratorExtensions.getAllComplexAndEnumTypes(serviceInterface);
      for(final Object datatype : _allComplexAndEnumTypes) {
        {
          if ((datatype instanceof FType)) {
            {
              boolean _isComplex = this._joynrCppGeneratorExtensions.isComplex(((FType)datatype));
              if (_isComplex) {
                _builder.append("#include \"");
                String _includeOf = this.cppStdTypeUtil.getIncludeOf(((FType)datatype));
                _builder.append(_includeOf, "");
                _builder.append("\"");
                _builder.newLineIfNotEmpty();
              }
            }
          }
        }
      }
    }
    _builder.newLine();
    _builder.append("#include \"joynr/InProcessAddress.h\"");
    _builder.newLine();
    _builder.append("#include \"joynr/ISubscriptionManager.h\"");
    _builder.newLine();
    _builder.append("#include \"joynr/PublicationManager.h\"");
    _builder.newLine();
    _builder.append("#include \"joynr/SubscriptionCallback.h\"");
    _builder.newLine();
    _builder.append("#include \"joynr/BroadcastSubscriptionRequest.h\"");
    _builder.newLine();
    _builder.append("#include \"joynr/Future.h\"");
    _builder.newLine();
    _builder.append("#include \"joynr/TypeUtil.h\"");
    _builder.newLine();
    _builder.append("#include \"joynr/RequestStatus.h\"");
    _builder.newLine();
    _builder.append("#include \"joynr/RequestStatusCode.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.append("Logger* ");
    _builder.append(interfaceName, "");
    _builder.append("InProcessConnector::logger = Logging::getInstance()->getLogger(\"MSG\", \"");
    _builder.append(interfaceName, "");
    _builder.append("InProcessConnector\");");
    _builder.newLineIfNotEmpty();
    _builder.newLine();
    _builder.append(interfaceName, "");
    _builder.append("InProcessConnector::");
    _builder.append(interfaceName, "");
    _builder.append("InProcessConnector(");
    _builder.newLineIfNotEmpty();
    _builder.append("\t\t\t");
    _builder.append("joynr::ISubscriptionManager* subscriptionManager,");
    _builder.newLine();
    _builder.append("\t\t\t");
    _builder.append("joynr::PublicationManager* publicationManager,");
    _builder.newLine();
    _builder.append("\t\t\t");
    _builder.append("joynr::InProcessPublicationSender* inProcessPublicationSender,");
    _builder.newLine();
    _builder.append("\t\t\t");
    _builder.append("const std::string& proxyParticipantId,");
    _builder.newLine();
    _builder.append("\t\t\t");
    _builder.append("const std::string& providerParticipantId,");
    _builder.newLine();
    _builder.append("\t\t\t");
    _builder.append("QSharedPointer address");
    _builder.newLine();
    _builder.append(") :");
    _builder.newLine();
    _builder.append("\t");
    _builder.append("proxyParticipantId(proxyParticipantId),");
    _builder.newLine();
    _builder.append("\t");
    _builder.append("providerParticipantId(providerParticipantId),");
    _builder.newLine();
    _builder.append("\t");
    _builder.append("address(address),");
    _builder.newLine();
    _builder.append("\t");
    _builder.append("subscriptionManager(subscriptionManager),");
    _builder.newLine();
    _builder.append("\t");
    _builder.append("publicationManager(publicationManager),");
    _builder.newLine();
    _builder.append("\t");
    _builder.append("inProcessPublicationSender(inProcessPublicationSender)");
    _builder.newLine();
    _builder.append("{");
    _builder.newLine();
    _builder.append("}");
    _builder.newLine();
    _builder.newLine();
    _builder.append("bool ");
    _builder.append(interfaceName, "");
    _builder.append("InProcessConnector::usesClusterController() const{");
    _builder.newLineIfNotEmpty();
    _builder.append("\t");
    _builder.append("return false;");
    _builder.newLine();
    _builder.append("}");
    _builder.newLine();
    _builder.newLine();
    {
      EList _attributes = this._joynrCppGeneratorExtensions.getAttributes(serviceInterface);
      for(final FAttribute attribute : _attributes) {
        final String returnType = this.cppStdTypeUtil.getTypeName(attribute);
        _builder.newLineIfNotEmpty();
        final String returnTypeQt = this.qtTypeUtil.getTypeName(attribute);
        _builder.newLineIfNotEmpty();
        final String attributeName = this._joynrCppGeneratorExtensions.joynrName(attribute);
        _builder.newLineIfNotEmpty();
        String _joynrName = this._joynrCppGeneratorExtensions.joynrName(attribute);
        String _firstUpper = StringExtensions.toFirstUpper(_joynrName);
        final String setAttributeName = ("set" + _firstUpper);
        _builder.newLineIfNotEmpty();
        {
          boolean _isReadable = this._joynrCppGeneratorExtensions.isReadable(attribute);
          if (_isReadable) {
            String _joynrName_1 = this._joynrCppGeneratorExtensions.joynrName(attribute);
            String _firstUpper_1 = StringExtensions.toFirstUpper(_joynrName_1);
            final String getAttributeName = ("get" + _firstUpper_1);
            _builder.newLineIfNotEmpty();
            _builder.append("joynr::RequestStatus ");
            _builder.append(interfaceName, "");
            _builder.append("InProcessConnector::");
            _builder.append(getAttributeName, "");
            _builder.append("(");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t\t");
            _builder.append(returnType, "\t\t\t");
            _builder.append("& attributeValue");
            _builder.newLineIfNotEmpty();
            _builder.append(") {");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("assert(!address.isNull());");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("QSharedPointer caller = address->getRequestCaller();");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("assert(!caller.isNull());");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("QSharedPointer<");
            _builder.append(interfaceName, "\t");
            _builder.append("RequestCaller> ");
            String _interfaceCaller = this.getInterfaceCaller(serviceInterface);
            _builder.append(_interfaceCaller, "\t");
            _builder.append(" = caller.dynamicCast<");
            _builder.append(interfaceName, "\t");
            _builder.append("RequestCaller>();");
            _builder.newLineIfNotEmpty();
            _builder.append("\t");
            _builder.append("assert(!");
            String _interfaceCaller_1 = this.getInterfaceCaller(serviceInterface);
            _builder.append(_interfaceCaller_1, "\t");
            _builder.append(".isNull());");
            _builder.newLineIfNotEmpty();
            _builder.newLine();
            _builder.append("\t");
            _builder.append("QSharedPointer > future(new joynr::Future<");
            _builder.append(returnType, "\t");
            _builder.append(">());");
            _builder.newLineIfNotEmpty();
            _builder.newLine();
            _builder.append("\t");
            _builder.append("std::function onSuccess =");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t\t");
            _builder.append("[future] (const ");
            _builder.append(returnType, "\t\t\t");
            _builder.append("& ");
            _builder.append(attributeName, "\t\t\t");
            _builder.append(") {");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t\t\t");
            _builder.append("future->onSuccess(");
            _builder.append(attributeName, "\t\t\t\t");
            _builder.append(");");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t\t");
            _builder.append("};");
            _builder.newLine();
            _builder.newLine();
            _builder.append("\t");
            _builder.append("//see header for more information");
            _builder.newLine();
            _builder.append("\t");
            String _interfaceCaller_2 = this.getInterfaceCaller(serviceInterface);
            _builder.append(_interfaceCaller_2, "\t");
            _builder.append("->");
            _builder.append(getAttributeName, "\t");
            _builder.append("(onSuccess);");
            _builder.newLineIfNotEmpty();
            _builder.append("\t");
            _builder.append("joynr::RequestStatus status(future->waitForFinished());");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("if (status.successful()) {");
            _builder.newLine();
            _builder.append("\t\t");
            _builder.append("future->getValues(attributeValue);");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("}");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("return status;");
            _builder.newLine();
            _builder.append("}");
            _builder.newLine();
            _builder.newLine();
            _builder.append("std::shared_ptr> ");
            _builder.append(interfaceName, "");
            _builder.append("InProcessConnector::");
            _builder.append(getAttributeName, "");
            _builder.append("Async(");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t");
            _builder.append("std::function onSuccess,");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t");
            _builder.append("std::function onError");
            _builder.newLine();
            _builder.append(") {");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("std::ignore = onError; // not used yet");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("assert(!address.isNull());");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("QSharedPointer caller = address->getRequestCaller();");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("assert(!caller.isNull());");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("QSharedPointer<");
            _builder.append(interfaceName, "\t");
            _builder.append("RequestCaller> ");
            String _interfaceCaller_3 = this.getInterfaceCaller(serviceInterface);
            _builder.append(_interfaceCaller_3, "\t");
            _builder.append(" = caller.dynamicCast<");
            _builder.append(interfaceName, "\t");
            _builder.append("RequestCaller>();");
            _builder.newLineIfNotEmpty();
            _builder.append("\t");
            _builder.append("assert(!");
            String _interfaceCaller_4 = this.getInterfaceCaller(serviceInterface);
            _builder.append(_interfaceCaller_4, "\t");
            _builder.append(".isNull());");
            _builder.newLineIfNotEmpty();
            _builder.newLine();
            _builder.append("\t");
            _builder.append("std::shared_ptr > future(new joynr::Future<");
            _builder.append(returnType, "\t");
            _builder.append(">());");
            _builder.newLineIfNotEmpty();
            _builder.newLine();
            _builder.append("\t");
            _builder.append("std::function onSuccessWrapper =");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t\t");
            _builder.append("[future, onSuccess] (const ");
            _builder.append(returnType, "\t\t\t");
            _builder.append("& ");
            _builder.append(attributeName, "\t\t\t");
            _builder.append(") {");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t\t\t");
            _builder.append("future->onSuccess(");
            _builder.append(attributeName, "\t\t\t\t");
            _builder.append(");");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t\t\t");
            _builder.append("if (onSuccess) {");
            _builder.newLine();
            _builder.append("\t\t\t\t\t");
            _builder.append("onSuccess(");
            _builder.append(attributeName, "\t\t\t\t\t");
            _builder.append(");");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t\t\t");
            _builder.append("}");
            _builder.newLine();
            _builder.append("\t\t\t");
            _builder.append("};");
            _builder.newLine();
            _builder.newLine();
            _builder.append("\t");
            _builder.append("//see header for more information");
            _builder.newLine();
            _builder.append("\t");
            String _interfaceCaller_5 = this.getInterfaceCaller(serviceInterface);
            _builder.append(_interfaceCaller_5, "\t");
            _builder.append("->");
            _builder.append(getAttributeName, "\t");
            _builder.append("(onSuccessWrapper);");
            _builder.newLineIfNotEmpty();
            _builder.append("\t");
            _builder.append("return future;");
            _builder.newLine();
            _builder.append("}");
            _builder.newLine();
            _builder.newLine();
          }
        }
        {
          boolean _isWritable = this._joynrCppGeneratorExtensions.isWritable(attribute);
          if (_isWritable) {
            _builder.append("std::shared_ptr> ");
            _builder.append(interfaceName, "");
            _builder.append("InProcessConnector::");
            _builder.append(setAttributeName, "");
            _builder.append("Async(");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t");
            _builder.append(returnType, "\t\t");
            _builder.append(" input,");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t");
            _builder.append("std::function onSuccess,");
            _builder.newLine();
            _builder.append("\t\t");
            _builder.append("std::function onError");
            _builder.newLine();
            _builder.append(") {");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("std::ignore = onError; // not used yet");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("assert(!address.isNull());");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("QSharedPointer caller = address->getRequestCaller();");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("assert(!caller.isNull());");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("QSharedPointer<");
            _builder.append(interfaceName, "\t");
            _builder.append("RequestCaller> ");
            String _interfaceCaller_6 = this.getInterfaceCaller(serviceInterface);
            _builder.append(_interfaceCaller_6, "\t");
            _builder.append(" = caller.dynamicCast<");
            _builder.append(interfaceName, "\t");
            _builder.append("RequestCaller>();");
            _builder.newLineIfNotEmpty();
            _builder.append("\t");
            _builder.append("assert(!");
            String _interfaceCaller_7 = this.getInterfaceCaller(serviceInterface);
            _builder.append(_interfaceCaller_7, "\t");
            _builder.append(".isNull());");
            _builder.newLineIfNotEmpty();
            _builder.newLine();
            _builder.append("\t");
            _builder.append("std::shared_ptr> future(new joynr::Future());");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("std::function onSuccessWrapper =");
            _builder.newLine();
            _builder.append("\t\t\t");
            _builder.append("[future, onSuccess] () {");
            _builder.newLine();
            _builder.append("\t\t\t\t");
            _builder.append("future->onSuccess();");
            _builder.newLine();
            _builder.append("\t\t\t\t");
            _builder.append("if (onSuccess) {");
            _builder.newLine();
            _builder.append("\t\t\t\t\t");
            _builder.append("onSuccess();");
            _builder.newLine();
            _builder.append("\t\t\t\t");
            _builder.append("}");
            _builder.newLine();
            _builder.append("\t\t\t");
            _builder.append("};");
            _builder.newLine();
            _builder.newLine();
            _builder.append("\t");
            _builder.append("//see header for more information");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("LOG_ERROR(logger,\"#### WARNING ##### ");
            _builder.append(interfaceName, "\t");
            _builder.append("InProcessConnector::");
            _builder.append(setAttributeName, "\t");
            _builder.append("(Future) is synchronous.\");");
            _builder.newLineIfNotEmpty();
            _builder.append("\t");
            String _interfaceCaller_8 = this.getInterfaceCaller(serviceInterface);
            _builder.append(_interfaceCaller_8, "\t");
            _builder.append("->");
            _builder.append(setAttributeName, "\t");
            _builder.append("(input, onSuccessWrapper);");
            _builder.newLineIfNotEmpty();
            _builder.append("\t");
            _builder.append("return future;");
            _builder.newLine();
            _builder.append("}");
            _builder.newLine();
            _builder.newLine();
            _builder.append("joynr::RequestStatus ");
            _builder.append(interfaceName, "");
            _builder.append("InProcessConnector::");
            _builder.append(setAttributeName, "");
            _builder.append("(");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t");
            _builder.append("const ");
            _builder.append(returnType, "\t\t");
            _builder.append("& input");
            _builder.newLineIfNotEmpty();
            _builder.append(") {");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("assert(!address.isNull());");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("QSharedPointer caller = address->getRequestCaller();");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("assert(!caller.isNull());");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("QSharedPointer<");
            _builder.append(interfaceName, "\t");
            _builder.append("RequestCaller> ");
            String _interfaceCaller_9 = this.getInterfaceCaller(serviceInterface);
            _builder.append(_interfaceCaller_9, "\t");
            _builder.append(" = caller.dynamicCast<");
            _builder.append(interfaceName, "\t");
            _builder.append("RequestCaller>();");
            _builder.newLineIfNotEmpty();
            _builder.append("\t");
            _builder.append("assert(!");
            String _interfaceCaller_10 = this.getInterfaceCaller(serviceInterface);
            _builder.append(_interfaceCaller_10, "\t");
            _builder.append(".isNull());");
            _builder.newLineIfNotEmpty();
            _builder.newLine();
            _builder.append("\t");
            _builder.append("QSharedPointer> future(new joynr::Future());");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("std::function onSuccess =");
            _builder.newLine();
            _builder.append("\t\t\t");
            _builder.append("[future] () {");
            _builder.newLine();
            _builder.append("\t\t\t\t");
            _builder.append("future->onSuccess();");
            _builder.newLine();
            _builder.append("\t\t\t");
            _builder.append("};");
            _builder.newLine();
            _builder.newLine();
            _builder.append("\t");
            _builder.append("//see header for more information");
            _builder.newLine();
            _builder.append("\t");
            String _interfaceCaller_11 = this.getInterfaceCaller(serviceInterface);
            _builder.append(_interfaceCaller_11, "\t");
            _builder.append("->");
            _builder.append(setAttributeName, "\t");
            _builder.append("(input, onSuccess);");
            _builder.newLineIfNotEmpty();
            _builder.append("\t");
            _builder.append("return future->waitForFinished();");
            _builder.newLine();
            _builder.append("}");
            _builder.newLine();
            _builder.newLine();
          }
        }
        {
          boolean _isNotifiable = this._joynrCppGeneratorExtensions.isNotifiable(attribute);
          if (_isNotifiable) {
            _builder.append("std::string ");
            _builder.append(interfaceName, "");
            _builder.append("InProcessConnector::subscribeTo");
            String _firstUpper_2 = StringExtensions.toFirstUpper(attributeName);
            _builder.append(_firstUpper_2, "");
            _builder.append("(");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t");
            _builder.append("std::shared_ptr > subscriptionListener,");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t");
            _builder.append("const joynr::SubscriptionQos& subscriptionQos,");
            _builder.newLine();
            _builder.append("\t\t");
            _builder.append("std::string& subscriptionId)");
            _builder.newLine();
            _builder.append("{");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("joynr::SubscriptionRequest subscriptionRequest;");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("subscriptionRequest.setSubscriptionId(QString::fromStdString(subscriptionId));");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("return subscribeTo");
            String _firstUpper_3 = StringExtensions.toFirstUpper(attributeName);
            _builder.append(_firstUpper_3, "\t");
            _builder.append("(subscriptionListener, subscriptionQos, subscriptionRequest);");
            _builder.newLineIfNotEmpty();
            _builder.append("}");
            _builder.newLine();
            _builder.newLine();
            _builder.append("std::string ");
            _builder.append(interfaceName, "");
            _builder.append("InProcessConnector::subscribeTo");
            String _firstUpper_4 = StringExtensions.toFirstUpper(attributeName);
            _builder.append(_firstUpper_4, "");
            _builder.append("(");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t");
            _builder.append("std::shared_ptr > subscriptionListener,");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t");
            _builder.append("const joynr::SubscriptionQos& subscriptionQos)");
            _builder.newLine();
            _builder.append("{");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("joynr::SubscriptionRequest subscriptionRequest;");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("return subscribeTo");
            String _firstUpper_5 = StringExtensions.toFirstUpper(attributeName);
            _builder.append(_firstUpper_5, "\t");
            _builder.append("(subscriptionListener, subscriptionQos, subscriptionRequest);");
            _builder.newLineIfNotEmpty();
            _builder.append("}");
            _builder.newLine();
            _builder.newLine();
            _builder.append("std::string ");
            _builder.append(interfaceName, "");
            _builder.append("InProcessConnector::subscribeTo");
            String _firstUpper_6 = StringExtensions.toFirstUpper(attributeName);
            _builder.append(_firstUpper_6, "");
            _builder.append("(");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t");
            _builder.append("std::shared_ptr > subscriptionListener,");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t");
            _builder.append("const joynr::SubscriptionQos& subscriptionQos,");
            _builder.newLine();
            _builder.append("\t\t");
            _builder.append("joynr::SubscriptionRequest& subscriptionRequest)");
            _builder.newLine();
            _builder.append("{");
            _builder.newLine();
            {
              FTypeRef _type = attribute.getType();
              boolean _isEnum = this._joynrCppGeneratorExtensions.isEnum(_type);
              if (_isEnum) {
                _builder.append("\t");
                _builder.append("Q_UNUSED(subscriptionListener);");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("Q_UNUSED(subscriptionQos);");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("// TODO support enum return values in C++ client");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("LOG_FATAL(logger, \"enum return values are currently not supported in C++ client (attribute name: ");
                _builder.append(interfaceName, "\t");
                _builder.append(".");
                _builder.append(attributeName, "\t");
                _builder.append(")\");");
                _builder.newLineIfNotEmpty();
                _builder.append("\t");
                _builder.append("assert(false);");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("// Visual C++ requires a return value");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("return std::string();");
                _builder.newLine();
              } else {
                _builder.append("\t");
                _builder.append("LOG_DEBUG(logger, \"Subscribing to ");
                _builder.append(attributeName, "\t");
                _builder.append(".\");");
                _builder.newLineIfNotEmpty();
                _builder.append("\t");
                _builder.append("assert(subscriptionManager != NULL);");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("QString attributeName(\"");
                _builder.append(attributeName, "\t");
                _builder.append("\");");
                _builder.newLineIfNotEmpty();
                _builder.append("\t");
                _builder.append("QSharedPointer> subscriptionCallback(");
                _builder.newLineIfNotEmpty();
                {
                  boolean _needsDatatypeConversion = this.qtTypeUtil.needsDatatypeConversion(attribute);
                  if (_needsDatatypeConversion) {
                    _builder.append("\t");
                    _builder.append("\t\t");
                    _builder.append("new ");
                    String _joynrName_2 = this._joynrCppGeneratorExtensions.joynrName(attribute);
                    String _firstUpper_7 = StringExtensions.toFirstUpper(_joynrName_2);
                    _builder.append(_firstUpper_7, "\t\t\t");
                    _builder.append("AttributeSubscriptionCallbackWrapper(");
                    _builder.newLineIfNotEmpty();
                  } else {
                    _builder.append("\t");
                    _builder.append("\t\t");
                    _builder.append("new joynr::SubscriptionCallback<");
                    _builder.append(returnTypeQt, "\t\t\t");
                    _builder.append(">(");
                    _builder.newLineIfNotEmpty();
                  }
                }
                _builder.append("\t");
                _builder.append("\t\t\t\t");
                _builder.append("subscriptionListener");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("\t\t");
                _builder.append(")");
                _builder.newLine();
                _builder.append("\t");
                _builder.append(");");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("subscriptionManager->registerSubscription(");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("\t\t");
                _builder.append("attributeName,");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("\t\t");
                _builder.append("subscriptionCallback,");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("\t\t");
                _builder.append("QSharedPointer(QtSubscriptionQos::createQt(subscriptionQos)),");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("\t\t");
                _builder.append("subscriptionRequest);");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("LOG_DEBUG(logger, \"Registered subscription: \" + subscriptionRequest.toQString());");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("assert(!address.isNull());");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("QSharedPointer caller = address->getRequestCaller();");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("assert(!caller.isNull());");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("QSharedPointer<");
                _builder.append(interfaceName, "\t");
                _builder.append("RequestCaller> requestCaller = caller.dynamicCast<");
                _builder.append(interfaceName, "\t");
                _builder.append("RequestCaller>();");
                _builder.newLineIfNotEmpty();
                _builder.append("\t");
                _builder.append("std::string subscriptionId(subscriptionRequest.getSubscriptionId().toStdString());");
                _builder.newLine();
                _builder.newLine();
                _builder.append("\t");
                _builder.append("if(caller.isNull()) {");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("\t");
                _builder.append("assert(publicationManager != NULL);");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("\t");
                _builder.append("/**");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("\t");
                _builder.append("* Provider not registered yet");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("\t");
                _builder.append("* Dispatcher will call publicationManger->restore when a new provider is added to activate");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("\t");
                _builder.append("* subscriptions for that provider");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("\t");
                _builder.append("*/");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("\t");
                _builder.append("publicationManager->add(QString::fromStdString(proxyParticipantId), QString::fromStdString(providerParticipantId), subscriptionRequest);");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("} else {");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("\t");
                _builder.append("publicationManager->add(QString::fromStdString(proxyParticipantId), QString::fromStdString(providerParticipantId), caller, subscriptionRequest, inProcessPublicationSender);");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("}");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("return subscriptionId;");
                _builder.newLine();
              }
            }
            _builder.append("}");
            _builder.newLine();
            _builder.newLine();
            _builder.append("void ");
            _builder.append(interfaceName, "");
            _builder.append("InProcessConnector::unsubscribeFrom");
            String _firstUpper_8 = StringExtensions.toFirstUpper(attributeName);
            _builder.append(_firstUpper_8, "");
            _builder.append("(");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t");
            _builder.append("std::string& subscriptionId");
            _builder.newLine();
            _builder.append(") {");
            _builder.newLine();
            {
              FTypeRef _type_1 = attribute.getType();
              boolean _isEnum_1 = this._joynrCppGeneratorExtensions.isEnum(_type_1);
              if (_isEnum_1) {
                _builder.append("\t");
                _builder.append("Q_UNUSED(subscriptionId);");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("// TODO support enum return values in C++ client");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("LOG_FATAL(logger, \"enum return values are currently not supported in C++ client (attribute name: ");
                _builder.append(interfaceName, "\t");
                _builder.append(".");
                _builder.append(attributeName, "\t");
                _builder.append(")\");");
                _builder.newLineIfNotEmpty();
                _builder.append("\t");
                _builder.append("assert(false);");
                _builder.newLine();
              } else {
                _builder.append("\t");
                _builder.append("QString subscriptionIdQT(QString::fromStdString(subscriptionId));");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("LOG_DEBUG(logger, \"Unsubscribing. Id=\" +subscriptionIdQT);");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("assert(publicationManager != NULL);");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("LOG_DEBUG(logger, \"Stopping publications by publication manager.\");");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("publicationManager->stopPublication(subscriptionIdQT);");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("assert(subscriptionManager != NULL);");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("LOG_DEBUG(logger, \"Unregistering attribute subscription.\");");
                _builder.newLine();
                _builder.append("\t");
                _builder.append("subscriptionManager->unregisterSubscription(subscriptionIdQT);");
                _builder.newLine();
              }
            }
            _builder.append("}");
            _builder.newLine();
            _builder.newLine();
          }
        }
      }
    }
    _builder.newLine();
    {
      EList _methods = this._joynrCppGeneratorExtensions.getMethods(serviceInterface);
      for(final FMethod method : _methods) {
        String methodname = this._joynrCppGeneratorExtensions.joynrName(method);
        _builder.newLineIfNotEmpty();
        String inputTypedParamList = this.cppStdTypeUtil.getCommaSeperatedTypedConstInputParameterList(method);
        _builder.newLineIfNotEmpty();
        String outputParameters = this.cppStdTypeUtil.getCommaSeparatedOutputParameterTypes(method);
        _builder.newLineIfNotEmpty();
        String inputParamList = this.cppStdTypeUtil.getCommaSeperatedUntypedInputParameterList(method);
        _builder.newLineIfNotEmpty();
        String outputTypedConstParamList = this.cppStdTypeUtil.getCommaSeperatedTypedConstOutputParameterList(method);
        _builder.newLineIfNotEmpty();
        String outputTypedParamList = this.cppStdTypeUtil.getCommaSeperatedTypedOutputParameterList(method);
        _builder.newLineIfNotEmpty();
        String outputUntypedParamList = this.cppStdTypeUtil.getCommaSeperatedUntypedOutputParameterList(method);
        _builder.newLineIfNotEmpty();
        _builder.newLine();
        _builder.append("joynr::RequestStatus ");
        _builder.append(interfaceName, "");
        _builder.append("InProcessConnector::");
        _builder.append(methodname, "");
        _builder.append("(");
        _builder.newLineIfNotEmpty();
        _builder.append("\t\t");
        _builder.append(outputTypedParamList, "\t\t");
        {
          boolean _and = false;
          Iterable _outputParameters = this._joynrCppGeneratorExtensions.getOutputParameters(method);
          int _size = IterableExtensions.size(_outputParameters);
          boolean _greaterThan = (_size > 0);
          if (!_greaterThan) {
            _and = false;
          } else {
            Iterable _inputParameters = this._joynrCppGeneratorExtensions.getInputParameters(method);
            int _size_1 = IterableExtensions.size(_inputParameters);
            boolean _greaterThan_1 = (_size_1 > 0);
            _and = _greaterThan_1;
          }
          if (_and) {
            _builder.append(", ");
          }
        }
        _builder.append(inputTypedParamList, "\t\t");
        _builder.newLineIfNotEmpty();
        _builder.append(") {");
        _builder.newLine();
        _builder.append("\t");
        _builder.append("assert(!address.isNull());");
        _builder.newLine();
        _builder.append("\t");
        _builder.append("QSharedPointer caller = address->getRequestCaller();");
        _builder.newLine();
        _builder.append("\t");
        _builder.append("assert(!caller.isNull());");
        _builder.newLine();
        _builder.append("\t");
        _builder.append("QSharedPointer<");
        _builder.append(interfaceName, "\t");
        _builder.append("RequestCaller> ");
        String _interfaceCaller_12 = this.getInterfaceCaller(serviceInterface);
        _builder.append(_interfaceCaller_12, "\t");
        _builder.append(" = caller.dynamicCast<");
        _builder.append(interfaceName, "\t");
        _builder.append("RequestCaller>();");
        _builder.newLineIfNotEmpty();
        _builder.append("\t");
        _builder.append("assert(!");
        String _interfaceCaller_13 = this.getInterfaceCaller(serviceInterface);
        _builder.append(_interfaceCaller_13, "\t");
        _builder.append(".isNull());");
        _builder.newLineIfNotEmpty();
        _builder.append("\t");
        _builder.append("QSharedPointer > future(");
        _builder.newLineIfNotEmpty();
        _builder.append("\t\t\t");
        _builder.append("new joynr::Future<");
        _builder.append(outputParameters, "\t\t\t");
        _builder.append(">());");
        _builder.newLineIfNotEmpty();
        _builder.newLine();
        _builder.append("\t");
        _builder.append("std::function onSuccess =");
        _builder.newLineIfNotEmpty();
        _builder.append("\t\t\t");
        _builder.append("[future] (");
        _builder.append(outputTypedConstParamList, "\t\t\t");
        _builder.append(") {");
        _builder.newLineIfNotEmpty();
        _builder.append("\t\t\t\t");
        _builder.append("future->onSuccess(");
        _builder.newLine();
        _builder.append("\t\t\t\t\t\t");
        _builder.append(outputUntypedParamList, "\t\t\t\t\t\t");
        _builder.newLineIfNotEmpty();
        _builder.append("\t\t\t\t");
        _builder.append(");");
        _builder.newLine();
        _builder.append("\t\t\t");
        _builder.append("};");
        _builder.newLine();
        _builder.newLine();
        _builder.append("\t");
        String _interfaceCaller_14 = this.getInterfaceCaller(serviceInterface);
        _builder.append(_interfaceCaller_14, "\t");
        _builder.append("->");
        _builder.append(methodname, "\t");
        _builder.append("(");
        {
          Iterable _inputParameters_1 = this._joynrCppGeneratorExtensions.getInputParameters(method);
          boolean _isEmpty = IterableExtensions.isEmpty(_inputParameters_1);
          boolean _not = (!_isEmpty);
          if (_not) {
            _builder.append(inputParamList, "\t");
            _builder.append(", ");
          }
        }
        _builder.append("onSuccess);");
        _builder.newLineIfNotEmpty();
        {
          Iterable _outputParameters_1 = this._joynrCppGeneratorExtensions.getOutputParameters(method);
          boolean _isEmpty_1 = IterableExtensions.isEmpty(_outputParameters_1);
          if (_isEmpty_1) {
            _builder.append("\t");
            _builder.append("return future->waitForFinished();");
            _builder.newLine();
          } else {
            _builder.append("\t");
            _builder.append("joynr::RequestStatus status = future->waitForFinished();");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("if (status.successful()) {");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("\t");
            _builder.append("future->getValues(");
            String _commaSeperatedUntypedOutputParameterList = this.cppStdTypeUtil.getCommaSeperatedUntypedOutputParameterList(method);
            _builder.append(_commaSeperatedUntypedOutputParameterList, "\t\t");
            _builder.append(");");
            _builder.newLineIfNotEmpty();
            _builder.append("\t");
            _builder.append("}");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("return status;");
            _builder.newLine();
          }
        }
        _builder.append("}");
        _builder.newLine();
        _builder.newLine();
        _builder.append("std::shared_ptr > ");
        _builder.append(interfaceName, "");
        _builder.append("InProcessConnector::");
        _builder.append(methodname, "");
        _builder.append("Async(");
        String _commaSeperatedTypedConstInputParameterList = this.cppStdTypeUtil.getCommaSeperatedTypedConstInputParameterList(method);
        _builder.append(_commaSeperatedTypedConstInputParameterList, "");
        {
          Iterable _inputParameters_2 = this._joynrCppGeneratorExtensions.getInputParameters(method);
          boolean _isEmpty_2 = IterableExtensions.isEmpty(_inputParameters_2);
          boolean _not_1 = (!_isEmpty_2);
          if (_not_1) {
            _builder.append(",");
          }
        }
        _builder.newLineIfNotEmpty();
        _builder.append("\t\t\t");
        _builder.append("std::function onSuccess,");
        _builder.newLineIfNotEmpty();
        _builder.append("\t\t\t");
        _builder.append("std::function onError)");
        _builder.newLine();
        _builder.append("{");
        _builder.newLine();
        _builder.append("\t");
        _builder.append("std::ignore = onError; // not used yet");
        _builder.newLine();
        _builder.append("\t");
        _builder.append("assert(!address.isNull());");
        _builder.newLine();
        _builder.append("\t");
        _builder.append("QSharedPointer caller = address->getRequestCaller();");
        _builder.newLine();
        _builder.append("\t");
        _builder.append("assert(!caller.isNull());");
        _builder.newLine();
        _builder.append("\t");
        _builder.append("QSharedPointer<");
        _builder.append(interfaceName, "\t");
        _builder.append("RequestCaller> ");
        String _interfaceCaller_15 = this.getInterfaceCaller(serviceInterface);
        _builder.append(_interfaceCaller_15, "\t");
        _builder.append(" = caller.dynamicCast<");
        _builder.append(interfaceName, "\t");
        _builder.append("RequestCaller>();");
        _builder.newLineIfNotEmpty();
        _builder.append("\t");
        _builder.append("assert(!");
        String _interfaceCaller_16 = this.getInterfaceCaller(serviceInterface);
        _builder.append(_interfaceCaller_16, "\t");
        _builder.append(".isNull());");
        _builder.newLineIfNotEmpty();
        _builder.append("\t");
        _builder.append("std::shared_ptr > future(");
        _builder.newLineIfNotEmpty();
        _builder.append("\t\t\t");
        _builder.append("new joynr::Future<");
        _builder.append(outputParameters, "\t\t\t");
        _builder.append(">());");
        _builder.newLineIfNotEmpty();
        _builder.newLine();
        _builder.append("\t");
        _builder.append("std::function onSuccessWrapper =");
        _builder.newLineIfNotEmpty();
        _builder.append("\t\t\t");
        _builder.append("[future, onSuccess] (");
        _builder.append(outputTypedConstParamList, "\t\t\t");
        _builder.append(") {");
        _builder.newLineIfNotEmpty();
        _builder.append("\t\t\t\t");
        _builder.append("future->onSuccess(");
        _builder.append(outputUntypedParamList, "\t\t\t\t");
        _builder.append(");");
        _builder.newLineIfNotEmpty();
        _builder.append("\t\t\t\t");
        _builder.append("if (onSuccess)");
        _builder.newLine();
        _builder.append("\t\t\t\t");
        _builder.append("{");
        _builder.newLine();
        _builder.append("\t\t\t\t\t");
        _builder.append("onSuccess(");
        _builder.append(outputUntypedParamList, "\t\t\t\t\t");
        _builder.append(");");
        _builder.newLineIfNotEmpty();
        _builder.append("\t\t\t\t");
        _builder.append("}");
        _builder.newLine();
        _builder.append("\t\t\t");
        _builder.append("};");
        _builder.newLine();
        _builder.append("\t");
        String _interfaceCaller_17 = this.getInterfaceCaller(serviceInterface);
        _builder.append(_interfaceCaller_17, "\t");
        _builder.append("->");
        _builder.append(methodname, "\t");
        _builder.append("(");
        {
          Iterable _inputParameters_3 = this._joynrCppGeneratorExtensions.getInputParameters(method);
          boolean _isEmpty_3 = IterableExtensions.isEmpty(_inputParameters_3);
          boolean _not_2 = (!_isEmpty_3);
          if (_not_2) {
            _builder.append(inputParamList, "\t");
            _builder.append(", ");
          }
        }
        _builder.append("onSuccessWrapper);");
        _builder.newLineIfNotEmpty();
        _builder.append("\t");
        _builder.append("return future;");
        _builder.newLine();
        _builder.append("}");
        _builder.newLine();
        _builder.newLine();
      }
    }
    _builder.newLine();
    {
      EList _broadcasts = serviceInterface.getBroadcasts();
      for(final FBroadcast broadcast : _broadcasts) {
        final String returnTypes = this.cppStdTypeUtil.getCommaSeparatedOutputParameterTypes(broadcast);
        _builder.newLineIfNotEmpty();
        final String returnTypesQt = this.qtTypeUtil.getCommaSeparatedOutputParameterTypes(broadcast);
        _builder.newLineIfNotEmpty();
        final String broadcastName = this._joynrCppGeneratorExtensions.joynrName(broadcast);
        _builder.newLineIfNotEmpty();
        _builder.newLine();
        {
          boolean _isSelective = this._joynrCppGeneratorExtensions.isSelective(broadcast);
          if (_isSelective) {
            _builder.append("std::string ");
            _builder.append(interfaceName, "");
            _builder.append("InProcessConnector::subscribeTo");
            String _firstUpper_9 = StringExtensions.toFirstUpper(broadcastName);
            _builder.append(_firstUpper_9, "");
            _builder.append("Broadcast(");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t");
            _builder.append("const ");
            String _firstUpper_10 = StringExtensions.toFirstUpper(interfaceName);
            _builder.append(_firstUpper_10, "\t\t");
            String _firstUpper_11 = StringExtensions.toFirstUpper(broadcastName);
            _builder.append(_firstUpper_11, "\t\t");
            _builder.append("BroadcastFilterParameters& filterParameters,");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t");
            _builder.append("std::shared_ptr > subscriptionListener,");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t");
            _builder.append("const joynr::OnChangeSubscriptionQos& subscriptionQos");
            _builder.newLine();
          } else {
            _builder.append("std::string ");
            _builder.append(interfaceName, "");
            _builder.append("InProcessConnector::subscribeTo");
            String _firstUpper_12 = StringExtensions.toFirstUpper(broadcastName);
            _builder.append(_firstUpper_12, "");
            _builder.append("Broadcast(");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t");
            _builder.append("std::shared_ptr > subscriptionListener,");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t");
            _builder.append("const joynr::OnChangeSubscriptionQos& subscriptionQos");
            _builder.newLine();
          }
        }
        _builder.append(") {");
        _builder.newLine();
        _builder.append("\t");
        _builder.append("LOG_DEBUG(logger, \"Subscribing to ");
        _builder.append(broadcastName, "\t");
        _builder.append(".\");");
        _builder.newLineIfNotEmpty();
        _builder.append("\t");
        _builder.append("assert(subscriptionManager != NULL);");
        _builder.newLine();
        _builder.append("\t");
        _builder.append("QString broadcastName(\"");
        _builder.append(broadcastName, "\t");
        _builder.append("\");");
        _builder.newLineIfNotEmpty();
        _builder.append("\t");
        _builder.append("joynr::BroadcastSubscriptionRequest subscriptionRequest;");
        _builder.newLine();
        {
          boolean _isSelective_1 = this._joynrCppGeneratorExtensions.isSelective(broadcast);
          if (_isSelective_1) {
            _builder.append("\t");
            _builder.append("subscriptionRequest.setFilterParameters(QtBroadcastFilterParameters::createQt(filterParameters));");
            _builder.newLine();
          }
        }
        _builder.append("\t");
        _builder.append("return subscribeTo");
        String _firstUpper_13 = StringExtensions.toFirstUpper(broadcastName);
        _builder.append(_firstUpper_13, "\t");
        _builder.append("Broadcast(");
        _builder.newLineIfNotEmpty();
        _builder.append("\t\t\t\t");
        _builder.append("subscriptionListener,");
        _builder.newLine();
        _builder.append("\t\t\t\t");
        _builder.append("subscriptionQos,");
        _builder.newLine();
        _builder.append("\t\t\t\t");
        _builder.append("subscriptionRequest);");
        _builder.newLine();
        _builder.append("}");
        _builder.newLine();
        _builder.newLine();
        {
          boolean _isSelective_2 = this._joynrCppGeneratorExtensions.isSelective(broadcast);
          if (_isSelective_2) {
            _builder.append("std::string ");
            _builder.append(interfaceName, "");
            _builder.append("InProcessConnector::subscribeTo");
            String _firstUpper_14 = StringExtensions.toFirstUpper(broadcastName);
            _builder.append(_firstUpper_14, "");
            _builder.append("Broadcast(");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t");
            _builder.append("const ");
            String _firstUpper_15 = StringExtensions.toFirstUpper(interfaceName);
            _builder.append(_firstUpper_15, "\t\t");
            String _firstUpper_16 = StringExtensions.toFirstUpper(broadcastName);
            _builder.append(_firstUpper_16, "\t\t");
            _builder.append("BroadcastFilterParameters& filterParameters,");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t");
            _builder.append("std::shared_ptr > subscriptionListener,");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t");
            _builder.append("const joynr::OnChangeSubscriptionQos& subscriptionQos,");
            _builder.newLine();
            _builder.append("\t\t");
            _builder.append("std::string& subscriptionId");
            _builder.newLine();
          } else {
            _builder.append("std::string ");
            _builder.append(interfaceName, "");
            _builder.append("InProcessConnector::subscribeTo");
            String _firstUpper_17 = StringExtensions.toFirstUpper(broadcastName);
            _builder.append(_firstUpper_17, "");
            _builder.append("Broadcast(");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t");
            _builder.append("std::shared_ptr > subscriptionListener,");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t");
            _builder.append("const joynr::OnChangeSubscriptionQos& subscriptionQos,");
            _builder.newLine();
            _builder.append("\t\t");
            _builder.append("std::string& subscriptionId");
            _builder.newLine();
          }
        }
        _builder.append(") {");
        _builder.newLine();
        _builder.append("\t");
        _builder.append("joynr::BroadcastSubscriptionRequest subscriptionRequest;");
        _builder.newLine();
        {
          boolean _isSelective_3 = this._joynrCppGeneratorExtensions.isSelective(broadcast);
          if (_isSelective_3) {
            _builder.append("\t");
            _builder.append("subscriptionRequest.setFilterParameters(QtBroadcastFilterParameters::createQt(filterParameters));");
            _builder.newLine();
          }
        }
        _builder.append("\t");
        _builder.append("subscriptionRequest.setSubscriptionId(QString::fromStdString(subscriptionId));");
        _builder.newLine();
        _builder.append("\t");
        _builder.append("return subscribeTo");
        String _firstUpper_18 = StringExtensions.toFirstUpper(broadcastName);
        _builder.append(_firstUpper_18, "\t");
        _builder.append("Broadcast(");
        _builder.newLineIfNotEmpty();
        _builder.append("\t\t\t\t");
        _builder.append("subscriptionListener,");
        _builder.newLine();
        _builder.append("\t\t\t\t");
        _builder.append("subscriptionQos,");
        _builder.newLine();
        _builder.append("\t\t\t\t");
        _builder.append("subscriptionRequest);");
        _builder.newLine();
        _builder.append("}");
        _builder.newLine();
        _builder.newLine();
        _builder.append("std::string ");
        _builder.append(interfaceName, "");
        _builder.append("InProcessConnector::subscribeTo");
        String _firstUpper_19 = StringExtensions.toFirstUpper(broadcastName);
        _builder.append(_firstUpper_19, "");
        _builder.append("Broadcast(");
        _builder.newLineIfNotEmpty();
        _builder.append("\t\t");
        _builder.append("std::shared_ptr > subscriptionListener,");
        _builder.newLineIfNotEmpty();
        _builder.append("\t\t");
        _builder.append("const joynr::OnChangeSubscriptionQos& subscriptionQos,");
        _builder.newLine();
        _builder.append("\t\t");
        _builder.append("joynr::BroadcastSubscriptionRequest& subscriptionRequest");
        _builder.newLine();
        _builder.append(") {");
        _builder.newLine();
        _builder.append("\t");
        _builder.append("LOG_DEBUG(logger, \"Subscribing to ");
        _builder.append(broadcastName, "\t");
        _builder.append(".\");");
        _builder.newLineIfNotEmpty();
        _builder.append("\t");
        _builder.append("assert(subscriptionManager != NULL);");
        _builder.newLine();
        _builder.append("\t");
        _builder.append("QString broadcastName(\"");
        _builder.append(broadcastName, "\t");
        _builder.append("\");");
        _builder.newLineIfNotEmpty();
        _builder.newLine();
        _builder.append("\t");
        _builder.append("QSharedPointer> subscriptionCallback(");
        _builder.newLineIfNotEmpty();
        _builder.append("\t\t\t\t");
        _builder.append("new ");
        String _firstUpper_20 = StringExtensions.toFirstUpper(broadcastName);
        _builder.append(_firstUpper_20, "\t\t\t\t");
        _builder.append("BroadcastSubscriptionCallbackWrapper(subscriptionListener));");
        _builder.newLineIfNotEmpty();
        _builder.append("\t");
        _builder.append("subscriptionManager->registerSubscription(");
        _builder.newLine();
        _builder.append("\t\t\t\t");
        _builder.append("broadcastName,");
        _builder.newLine();
        _builder.append("\t\t\t\t");
        _builder.append("subscriptionCallback,");
        _builder.newLine();
        _builder.append("\t\t\t\t");
        _builder.append("QSharedPointer(QtSubscriptionQos::createQt(subscriptionQos)),");
        _builder.newLine();
        _builder.append("\t\t\t\t");
        _builder.append("subscriptionRequest);");
        _builder.newLine();
        _builder.append("\t");
        _builder.append("LOG_DEBUG(logger, \"Registered broadcast subscription: \" + subscriptionRequest.toQString());");
        _builder.newLine();
        _builder.append("\t");
        _builder.append("assert(!address.isNull());");
        _builder.newLine();
        _builder.append("\t");
        _builder.append("QSharedPointer caller = address->getRequestCaller();");
        _builder.newLine();
        _builder.append("\t");
        _builder.append("assert(!caller.isNull());");
        _builder.newLine();
        _builder.append("\t");
        _builder.append("QSharedPointer<");
        _builder.append(interfaceName, "\t");
        _builder.append("RequestCaller> requestCaller = caller.dynamicCast<");
        _builder.append(interfaceName, "\t");
        _builder.append("RequestCaller>();");
        _builder.newLineIfNotEmpty();
        _builder.append("\t");
        _builder.append("std::string subscriptionId(subscriptionRequest.getSubscriptionId().toStdString());");
        _builder.newLine();
        _builder.newLine();
        _builder.append("\t");
        _builder.append("if(caller.isNull()) {");
        _builder.newLine();
        _builder.append("\t\t");
        _builder.append("assert(publicationManager != NULL);");
        _builder.newLine();
        _builder.append("\t\t");
        _builder.append("/**");
        _builder.newLine();
        _builder.append("\t\t");
        _builder.append("* Provider not registered yet");
        _builder.newLine();
        _builder.append("\t\t");
        _builder.append("* Dispatcher will call publicationManger->restore when a new provider is added to activate");
        _builder.newLine();
        _builder.append("\t\t");
        _builder.append("* subscriptions for that provider");
        _builder.newLine();
        _builder.append("\t\t");
        _builder.append("*/");
        _builder.newLine();
        _builder.append("\t\t");
        _builder.append("publicationManager->add(QString::fromStdString(proxyParticipantId), QString::fromStdString(providerParticipantId), subscriptionRequest);");
        _builder.newLine();
        _builder.append("\t");
        _builder.append("} else {");
        _builder.newLine();
        _builder.append("\t\t");
        _builder.append("publicationManager->add(");
        _builder.newLine();
        _builder.append("\t\t\t\t\t");
        _builder.append("QString::fromStdString(proxyParticipantId),");
        _builder.newLine();
        _builder.append("\t\t\t\t\t");
        _builder.append("QString::fromStdString(providerParticipantId),");
        _builder.newLine();
        _builder.append("\t\t\t\t\t");
        _builder.append("caller,");
        _builder.newLine();
        _builder.append("\t\t\t\t\t");
        _builder.append("subscriptionRequest,");
        _builder.newLine();
        _builder.append("\t\t\t\t\t");
        _builder.append("inProcessPublicationSender);");
        _builder.newLine();
        _builder.append("\t");
        _builder.append("}");
        _builder.newLine();
        _builder.append("\t");
        _builder.append("return subscriptionId;");
        _builder.newLine();
        _builder.append("}");
        _builder.newLine();
        _builder.newLine();
        _builder.append("void ");
        _builder.append(interfaceName, "");
        _builder.append("InProcessConnector::unsubscribeFrom");
        String _firstUpper_21 = StringExtensions.toFirstUpper(broadcastName);
        _builder.append(_firstUpper_21, "");
        _builder.append("Broadcast(");
        _builder.newLineIfNotEmpty();
        _builder.append("\t\t");
        _builder.append("std::string& subscriptionId");
        _builder.newLine();
        _builder.append(") {");
        _builder.newLine();
        _builder.append("\t");
        _builder.append("QString subscriptionIdQT(QString::fromStdString(subscriptionId));");
        _builder.newLine();
        _builder.append("\t");
        _builder.append("LOG_DEBUG(logger, \"Unsubscribing broadcast. Id=\" + subscriptionIdQT);");
        _builder.newLine();
        _builder.append("\t");
        _builder.append("assert(publicationManager != NULL);");
        _builder.newLine();
        _builder.append("\t");
        _builder.append("LOG_DEBUG(logger, \"Stopping publications by publication manager.\");");
        _builder.newLine();
        _builder.append("\t");
        _builder.append("publicationManager->stopPublication(subscriptionIdQT);");
        _builder.newLine();
        _builder.append("\t");
        _builder.append("assert(subscriptionManager != NULL);");
        _builder.newLine();
        _builder.append("\t");
        _builder.append("LOG_DEBUG(logger, \"Unregistering broadcast subscription.\");");
        _builder.newLine();
        _builder.append("\t");
        _builder.append("subscriptionManager->unregisterSubscription(subscriptionIdQT);");
        _builder.newLine();
        _builder.append("}");
        _builder.newLine();
      }
    }
    String _namespaceEnder = this._joynrCppGeneratorExtensions.getNamespaceEnder(serviceInterface);
    _builder.append(_namespaceEnder, "");
    _builder.newLineIfNotEmpty();
    return _builder;
  }
  
  public String getInterfaceCaller(final FInterface serviceInterface) {
    String _joynrName = this._joynrCppGeneratorExtensions.joynrName(serviceInterface);
    String _firstLower = StringExtensions.toFirstLower(_joynrName);
    return (_firstLower + "Caller");
  }
}