io.joynr.generator.provider.DefaultInterfaceProviderTemplate Maven / Gradle / Ivy
The newest version!
package io.joynr.generator.provider;
import com.google.inject.Inject;
import io.joynr.generator.templates.util.AttributeUtil;
import io.joynr.generator.templates.util.InterfaceUtil;
import io.joynr.generator.templates.util.MethodUtil;
import io.joynr.generator.templates.util.NamingUtil;
import io.joynr.generator.util.JavaTypeUtil;
import io.joynr.generator.util.JoynrJavaGeneratorExtensions;
import io.joynr.generator.util.TemplateBase;
import java.util.ArrayList;
import java.util.HashMap;
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.StringExtensions;
import org.franca.core.franca.FArgument;
import org.franca.core.franca.FAttribute;
import org.franca.core.franca.FMethod;
@SuppressWarnings("all")
public class DefaultInterfaceProviderTemplate extends InterfaceProviderTemplate {
@Inject
@Extension
private JoynrJavaGeneratorExtensions _joynrJavaGeneratorExtensions;
@Inject
@Extension
private NamingUtil _namingUtil;
@Inject
@Extension
private InterfaceUtil _interfaceUtil;
@Inject
@Extension
private AttributeUtil _attributeUtil;
@Inject
@Extension
private MethodUtil _methodUtil;
@Inject
@Extension
private JavaTypeUtil _javaTypeUtil;
@Inject
@Extension
private TemplateBase _templateBase;
@Override
public CharSequence generate(final boolean generateVersion) {
CharSequence _xblockexpression = null;
{
HashMap methodToDeferredName = new HashMap();
ArrayList uniqueMethodsToCreateDeferreds = new ArrayList();
this.init(this.francaIntf, methodToDeferredName, uniqueMethodsToCreateDeferreds);
final String interfaceName = this._namingUtil.joynrName(this.francaIntf);
final String className = (("Default" + interfaceName) + "Provider");
final String abstractProviderName = (interfaceName + "AbstractProvider");
final String packagePath = this._joynrJavaGeneratorExtensions.getPackagePathWithJoynrPrefix(this.francaIntf, ".", generateVersion);
StringConcatenation _builder = new StringConcatenation();
CharSequence _warning = this._templateBase.warning();
_builder.append(_warning);
_builder.newLineIfNotEmpty();
_builder.append("package ");
_builder.append(packagePath);
_builder.append(";");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("import org.slf4j.Logger;");
_builder.newLine();
_builder.append("import org.slf4j.LoggerFactory;");
_builder.newLine();
_builder.newLine();
{
if (((this._interfaceUtil.hasNonFireAndForgetMethods(this.francaIntf) || this._interfaceUtil.hasReadAttribute(this.francaIntf)) || this._interfaceUtil.hasWriteAttribute(this.francaIntf))) {
_builder.append("import io.joynr.provider.Promise;");
_builder.newLine();
{
boolean _hasReadAttribute = this._interfaceUtil.hasReadAttribute(this.francaIntf);
if (_hasReadAttribute) {
_builder.append("import io.joynr.provider.Deferred;");
_builder.newLine();
}
}
{
if ((this._interfaceUtil.hasWriteAttribute(this.francaIntf) || this._interfaceUtil.hasMethodWithoutReturnValue(this.francaIntf))) {
_builder.append("import io.joynr.provider.DeferredVoid;");
_builder.newLine();
}
}
}
}
_builder.newLine();
{
Iterable _requiredIncludesFor = this._joynrJavaGeneratorExtensions.getRequiredIncludesFor(this.francaIntf, true, true, true, false, false, true, generateVersion);
for(final String datatype : _requiredIncludesFor) {
_builder.append("import ");
_builder.append(datatype);
_builder.append(";");
_builder.newLineIfNotEmpty();
}
}
_builder.newLine();
_builder.append("public class ");
_builder.append(className);
_builder.append(" extends ");
_builder.append(abstractProviderName);
_builder.append(" {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("private static final Logger logger = LoggerFactory.getLogger(");
_builder.append(className, "\t");
_builder.append(".class);");
_builder.newLineIfNotEmpty();
_builder.newLine();
{
EList _attributes = this._interfaceUtil.getAttributes(this.francaIntf);
for(final FAttribute attribute : _attributes) {
_builder.append("\t");
final String attributeName = this._namingUtil.joynrName(attribute);
_builder.newLineIfNotEmpty();
{
boolean _isTypeDef = this._javaTypeUtil.isTypeDef(attribute.getType());
if (_isTypeDef) {
_builder.append("\t");
final String typeDefType = this._javaTypeUtil.getTypeName(this._javaTypeUtil.getTypeDefType(attribute.getType()).getActualType());
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("// type resolved from modeled Franca typedef ");
String _joynrName = this._namingUtil.joynrName(attribute.getType());
_builder.append(_joynrName, "\t");
_builder.append(" as ");
_builder.append(typeDefType, "\t");
_builder.newLineIfNotEmpty();
}
}
_builder.append("\t");
_builder.append("protected ");
String _typeName = this._javaTypeUtil.getTypeName(attribute);
_builder.append(_typeName, "\t");
_builder.append(" ");
_builder.append(attributeName, "\t");
_builder.append(";");
_builder.newLineIfNotEmpty();
}
}
_builder.newLine();
_builder.append("\t");
_builder.append("public ");
_builder.append(className, "\t");
_builder.append("() {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.newLine();
{
EList _attributes_1 = this._interfaceUtil.getAttributes(this.francaIntf);
for(final FAttribute attribute_1 : _attributes_1) {
_builder.append("\t");
final String attributeName_1 = this._namingUtil.joynrName(attribute_1);
_builder.newLineIfNotEmpty();
_builder.append("\t");
final String attributeType = this._javaTypeUtil.getTypeName(attribute_1);
_builder.newLineIfNotEmpty();
_builder.newLine();
{
boolean _isReadable = this._attributeUtil.isReadable(attribute_1);
if (_isReadable) {
_builder.append("\t");
_builder.append("@Override");
_builder.newLine();
_builder.append("\t");
_builder.append("public Promise> get");
String _firstUpper = StringExtensions.toFirstUpper(attributeName_1);
_builder.append(_firstUpper, "\t");
_builder.append("() {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("\t");
_builder.append("Deferred<");
_builder.append(attributeType, "\t\t");
_builder.append("> deferred = new Deferred<>();");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("\t");
_builder.append("deferred.resolve(");
_builder.append(attributeName_1, "\t\t");
_builder.append(");");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("\t");
_builder.append("return new Promise<>(deferred);");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
}
}
_builder.newLine();
{
boolean _isWritable = this._attributeUtil.isWritable(attribute_1);
if (_isWritable) {
_builder.append("\t");
_builder.append("@Override");
_builder.newLine();
_builder.append("\t");
_builder.append("public Promise set");
String _firstUpper_1 = StringExtensions.toFirstUpper(attributeName_1);
_builder.append(_firstUpper_1, "\t");
_builder.append("(");
_builder.append(attributeType, "\t");
_builder.append(" ");
_builder.append(attributeName_1, "\t");
_builder.append(") {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("\t");
_builder.append("DeferredVoid deferred = new DeferredVoid();");
_builder.newLine();
{
if ((this._javaTypeUtil.isArray(attribute_1) || this._javaTypeUtil.isByteBuffer(attribute_1.getType()))) {
_builder.append("\t");
_builder.append("\t");
_builder.append("if (");
_builder.append(attributeName_1, "\t\t");
_builder.append(" != null) {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("\t");
_builder.append("\t");
_builder.append("this.");
_builder.append(attributeName_1, "\t\t\t");
_builder.append(" = ");
_builder.append(attributeName_1, "\t\t\t");
_builder.append(".clone();");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("\t");
_builder.append("} else {");
_builder.newLine();
_builder.append("\t");
_builder.append("\t");
_builder.append("\t");
_builder.append("this.");
_builder.append(attributeName_1, "\t\t\t");
_builder.append(" = null;");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("\t");
_builder.append("}");
_builder.newLine();
} else {
if ((this._javaTypeUtil.isMap(attribute_1.getType()) || this._javaTypeUtil.isCompound(attribute_1.getType()))) {
_builder.append("\t");
_builder.append("\t");
_builder.append("this.");
_builder.append(attributeName_1, "\t\t");
_builder.append(" = new ");
_builder.append(attributeType, "\t\t");
_builder.append("(");
_builder.append(attributeName_1, "\t\t");
_builder.append(");");
_builder.newLineIfNotEmpty();
} else {
_builder.append("\t");
_builder.append("\t");
_builder.append("this.");
_builder.append(attributeName_1, "\t\t");
_builder.append(" = ");
_builder.append(attributeName_1, "\t\t");
_builder.append(";");
_builder.newLineIfNotEmpty();
}
}
}
{
boolean _isNotifiable = this._attributeUtil.isNotifiable(attribute_1);
if (_isNotifiable) {
_builder.append("\t");
_builder.append("\t");
_builder.append(attributeName_1, "\t\t");
_builder.append("Changed(");
_builder.append(attributeName_1, "\t\t");
_builder.append(");");
_builder.newLineIfNotEmpty();
}
}
_builder.append("\t");
_builder.append("\t");
_builder.append("deferred.resolve();");
_builder.newLine();
_builder.append("\t");
_builder.append("\t");
_builder.append("return new Promise<>(deferred);");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
}
}
}
}
_builder.newLine();
{
EList _methods = this._interfaceUtil.getMethods(this.francaIntf);
for(final FMethod method : _methods) {
_builder.append("\t");
String methodName = this._namingUtil.joynrName(method);
_builder.newLineIfNotEmpty();
_builder.append("\t");
String deferredName = methodToDeferredName.get(method);
_builder.newLineIfNotEmpty();
_builder.append("\t");
String params = this._javaTypeUtil.getTypedParameterList(this._methodUtil.getInputParameters(method));
_builder.newLineIfNotEmpty();
_builder.append("\t");
final Iterable outputParameters = this._methodUtil.getOutputParameters(method);
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("\t");
_builder.append("/*");
_builder.newLine();
_builder.append("\t");
_builder.append("* ");
_builder.append(methodName, "\t");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("*/");
_builder.newLine();
_builder.append("\t");
_builder.append("@Override");
_builder.newLine();
{
boolean _isFireAndForget = method.isFireAndForget();
if (_isFireAndForget) {
_builder.append("\t");
_builder.append("public void ");
_builder.append(methodName, "\t");
_builder.append("(");
_builder.newLineIfNotEmpty();
} else {
_builder.append("\t");
_builder.append("public Promise<");
_builder.append(deferredName, "\t");
_builder.append("> ");
_builder.append(methodName, "\t");
_builder.append("(");
_builder.newLineIfNotEmpty();
}
}
_builder.append("\t");
_builder.append("\t\t");
{
boolean _equals = params.equals("");
boolean _not = (!_equals);
if (_not) {
_builder.append(params, "\t\t\t");
}
}
_builder.append(") {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("\t");
_builder.append("logger.warn(\"**********************************************\");");
_builder.newLine();
_builder.append("\t");
_builder.append("\t");
_builder.append("logger.warn(\"* ");
_builder.append(className, "\t\t");
_builder.append(".");
_builder.append(methodName, "\t\t");
_builder.append(" called\");");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("\t");
_builder.append("logger.warn(\"**********************************************\");");
_builder.newLine();
{
boolean _isFireAndForget_1 = method.isFireAndForget();
boolean _not_1 = (!_isFireAndForget_1);
if (_not_1) {
_builder.append("\t");
_builder.append("\t");
_builder.append(deferredName, "\t\t");
_builder.append(" deferred = new ");
_builder.append(deferredName, "\t\t");
_builder.append("();");
_builder.newLineIfNotEmpty();
{
for(final FArgument outputParameter : outputParameters) {
_builder.append("\t");
_builder.append("\t");
String _typeName_1 = this._javaTypeUtil.getTypeName(outputParameter);
_builder.append(_typeName_1, "\t\t");
_builder.append(" ");
String _name = outputParameter.getName();
_builder.append(_name, "\t\t");
_builder.append(" = ");
String _defaultValue = this._javaTypeUtil.getDefaultValue(outputParameter);
_builder.append(_defaultValue, "\t\t");
_builder.append(";");
_builder.newLineIfNotEmpty();
}
}
_builder.append("\t");
_builder.append("\t");
_builder.append("deferred.resolve(");
String _commaSeperatedUntypedOutputParameterList = this._javaTypeUtil.getCommaSeperatedUntypedOutputParameterList(method);
_builder.append(_commaSeperatedUntypedOutputParameterList, "\t\t");
_builder.append(");");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("\t");
_builder.append("return new Promise<>(deferred);");
_builder.newLine();
}
}
_builder.append("\t");
_builder.append("}");
_builder.newLine();
}
}
_builder.append("}");
_builder.newLine();
_xblockexpression = _builder;
}
return _xblockexpression;
}
}