blob: 0ac4d5cba6dcd27ea52587933f4b7580f5f935e8 [file] [log] [blame]
/**
* Copyright (c) 2011, 2014 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Florian Pirchner - Initial implementation
*/
package org.eclipse.osbp.dsl.dto.xtext.extensions;
import com.google.common.base.Objects;
import com.google.inject.Inject;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.osbp.dsl.common.xtext.extensions.TreeAppendableExtensions;
import org.eclipse.osbp.dsl.common.xtext.jvmmodel.CommonTypesBuilder;
import org.eclipse.osbp.dsl.dto.lib.ICrossReference;
import org.eclipse.osbp.dsl.dto.lib.IMapper;
import org.eclipse.osbp.dsl.dto.lib.IMapperAccess;
import org.eclipse.osbp.dsl.dto.lib.MappingContext;
import org.eclipse.osbp.dsl.dto.xtext.extensions.AnnotationExtension;
import org.eclipse.osbp.dsl.dto.xtext.extensions.DtoModelExtensions;
import org.eclipse.osbp.dsl.dto.xtext.extensions.MethodNamingExtensions;
import org.eclipse.osbp.dsl.dto.xtext.jvmmodel.AnnotationCompiler;
import org.eclipse.osbp.dsl.semantic.common.types.LAttribute;
import org.eclipse.osbp.dsl.semantic.common.types.LClass;
import org.eclipse.osbp.dsl.semantic.common.types.LFeature;
import org.eclipse.osbp.dsl.semantic.common.types.LPackage;
import org.eclipse.osbp.dsl.semantic.common.types.LReference;
import org.eclipse.osbp.dsl.semantic.common.types.LStateClass;
import org.eclipse.osbp.dsl.semantic.common.types.LType;
import org.eclipse.osbp.dsl.semantic.dto.LAutoInheritDto;
import org.eclipse.osbp.dsl.semantic.dto.LDto;
import org.eclipse.osbp.dsl.semantic.dto.LDtoAbstractAttribute;
import org.eclipse.osbp.dsl.semantic.dto.LDtoAbstractReference;
import org.eclipse.osbp.dsl.semantic.dto.LDtoFeature;
import org.eclipse.osbp.dsl.semantic.dto.LDtoInheritedAttribute;
import org.eclipse.osbp.dsl.semantic.dto.LDtoMapper;
import org.eclipse.osbp.dsl.semantic.entity.LBean;
import org.eclipse.osbp.dsl.semantic.entity.LEntity;
import org.eclipse.osbp.dsl.semantic.entity.LEntityAttribute;
import org.eclipse.osbp.dsl.semantic.entity.LOperation;
import org.eclipse.osbp.runtime.common.annotations.DomainDescription;
import org.eclipse.xtend2.lib.StringConcatenation;
import org.eclipse.xtend2.lib.StringConcatenationClient;
import org.eclipse.xtext.common.types.JvmAnnotationReference;
import org.eclipse.xtext.common.types.JvmField;
import org.eclipse.xtext.common.types.JvmFormalParameter;
import org.eclipse.xtext.common.types.JvmGenericType;
import org.eclipse.xtext.common.types.JvmOperation;
import org.eclipse.xtext.common.types.JvmParameterizedTypeReference;
import org.eclipse.xtext.common.types.JvmTypeParameter;
import org.eclipse.xtext.common.types.JvmTypeReference;
import org.eclipse.xtext.common.types.JvmVisibility;
import org.eclipse.xtext.common.types.TypesFactory;
import org.eclipse.xtext.common.types.util.TypeReferences;
import org.eclipse.xtext.naming.IQualifiedNameProvider;
import org.eclipse.xtext.naming.QualifiedName;
import org.eclipse.xtext.xbase.XExpression;
import org.eclipse.xtext.xbase.compiler.output.ITreeAppendable;
import org.eclipse.xtext.xbase.jvmmodel.IJvmModelAssociations;
import org.eclipse.xtext.xbase.jvmmodel.IJvmModelAssociator;
import org.eclipse.xtext.xbase.lib.CollectionLiterals;
import org.eclipse.xtext.xbase.lib.Extension;
import org.eclipse.xtext.xbase.lib.Functions.Function1;
import org.eclipse.xtext.xbase.lib.IterableExtensions;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
import org.eclipse.xtext.xbase.lib.StringExtensions;
@SuppressWarnings("all")
public class DtoTypesBuilder extends CommonTypesBuilder {
@Inject
@Extension
private DtoModelExtensions _dtoModelExtensions;
@Inject
@Extension
private MethodNamingExtensions _methodNamingExtensions;
@Inject
@Extension
private TreeAppendableExtensions _treeAppendableExtensions;
@Inject
@Extension
private IQualifiedNameProvider _iQualifiedNameProvider;
@Inject
@Extension
private AnnotationExtension _annotationExtension;
@Inject
private IJvmModelAssociator associator;
@Inject
private AnnotationCompiler annotationCompiler;
@Inject
private TypesFactory typesFactory;
@Inject
private TypeReferences references;
public String htmlCode(final CharSequence s) {
return "<code>".concat(String.valueOf(s)).concat("</code>");
}
public JvmField toDiposeField(final LDto sourceElement) {
final JvmField field = this.toPrimitiveTypeField(sourceElement, "disposed", Boolean.TYPE);
this.<JvmField>associate(sourceElement, field);
this.annotationCompiler.addDisposeFieldAnnotation(sourceElement, field);
return field;
}
public JvmOperation toDispose(final LDto lClass) {
JvmOperation _xblockexpression = null;
{
final JvmOperation op = this.typesFactory.createJvmOperation();
op.setVisibility(JvmVisibility.PUBLIC);
op.setReturnType(this.references.getTypeForName(Void.TYPE, lClass));
op.setSimpleName("dispose");
StringConcatenation _builder = new StringConcatenation();
_builder.append("Calling dispose will destroy that instance. The internal state will be ");
_builder.newLine();
_builder.append("set to \'disposed\' and methods of that object must not be used anymore. ");
_builder.newLine();
_builder.append("Each call will result in runtime exceptions.<br/>");
_builder.newLine();
_builder.append("If this object keeps composition containments, these will be disposed too. ");
_builder.newLine();
_builder.append("So the whole composition containment tree will be disposed on calling this method.");
this.setDocumentation(op, _builder);
this.annotationCompiler.addDisposeFieldAnnotation(lClass, op);
final Procedure1<ITreeAppendable> _function = (ITreeAppendable it) -> {
boolean _equals = Objects.equal(it, null);
if (_equals) {
return;
}
final ITreeAppendable p = it.trace(lClass);
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append("if (isDisposed()) {");
_builder_1.newLine();
_builder_1.append(" ");
_builder_1.append("return;");
_builder_1.newLine();
_builder_1.append("}");
_builder_1.newLine();
this._treeAppendableExtensions.operator_doubleGreaterThan(p, _builder_1);
final Function1<LDtoFeature, Boolean> _function_1 = (LDtoFeature it_1) -> {
return Boolean.valueOf(((it_1 instanceof LDtoAbstractReference) && ((LDtoAbstractReference) it_1).isCascading()));
};
final Iterable<LDtoFeature> compositionContainmentProps = IterableExtensions.<LDtoFeature>filter(lClass.getFeatures(), _function_1);
boolean _isEmpty = IterableExtensions.isEmpty(compositionContainmentProps);
boolean _not = (!_isEmpty);
if (_not) {
ITreeAppendable _doubleGreaterThan = this._treeAppendableExtensions.operator_doubleGreaterThan(p, "try ");
this._treeAppendableExtensions.operator_tripleGreaterThan(_doubleGreaterThan, "{");
this._treeAppendableExtensions.operator_doubleGreaterThan(p, "// Dispose all the composition references.\n");
for (final LDtoFeature prop : compositionContainmentProps) {
{
final String fieldRef = "this.".concat(StringExtensions.toFirstLower(this._dtoModelExtensions.toName(prop)));
final String typeName = this._dtoModelExtensions.toTypeName(prop);
final String typeVar = StringExtensions.toFirstLower(typeName);
boolean _isToMany = this._dtoModelExtensions.isToMany(prop);
if (_isToMany) {
StringConcatenation _builder_2 = new StringConcatenation();
_builder_2.append("if (");
_builder_2.append(fieldRef);
_builder_2.append(" != null) {");
_builder_2.newLineIfNotEmpty();
_builder_2.append(" ");
_builder_2.append("for (");
_builder_2.append(typeName, " ");
_builder_2.append(" ");
_builder_2.append(typeVar, " ");
_builder_2.append(" : ");
_builder_2.append(fieldRef, " ");
_builder_2.append(") {");
_builder_2.newLineIfNotEmpty();
_builder_2.append(" ");
_builder_2.append(typeVar, " ");
_builder_2.append(".dispose();");
_builder_2.newLineIfNotEmpty();
_builder_2.append(" ");
_builder_2.append("}");
_builder_2.newLine();
_builder_2.append(" ");
_builder_2.append(fieldRef, " ");
_builder_2.append(" = null;");
_builder_2.newLineIfNotEmpty();
_builder_2.append("}");
_builder_2.newLine();
this._treeAppendableExtensions.operator_doubleGreaterThan(p, _builder_2);
} else {
StringConcatenation _builder_3 = new StringConcatenation();
_builder_3.append("if (");
_builder_3.append(fieldRef);
_builder_3.append(" != null) {");
_builder_3.newLineIfNotEmpty();
_builder_3.append(" ");
_builder_3.append(fieldRef, " ");
_builder_3.append(".dispose();");
_builder_3.newLineIfNotEmpty();
_builder_3.append(" ");
_builder_3.append(fieldRef, " ");
_builder_3.append(" = null;");
_builder_3.newLineIfNotEmpty();
_builder_3.append("}");
_builder_3.newLine();
this._treeAppendableExtensions.operator_doubleGreaterThan(p, _builder_3);
}
}
}
this._treeAppendableExtensions.operator_tripleLessThan(p, "}");
this._treeAppendableExtensions.operator_tripleGreaterThan(p, "finally {");
}
LDto _superType = lClass.getSuperType();
boolean _notEquals = (!Objects.equal(_superType, null));
if (_notEquals) {
this._treeAppendableExtensions.operator_doubleGreaterThan(p, "super.dispose();");
} else {
this._treeAppendableExtensions.operator_doubleGreaterThan(p, "firePropertyChange(\"disposed\", this.disposed, this.disposed = true);");
}
boolean _isEmpty_1 = IterableExtensions.isEmpty(compositionContainmentProps);
boolean _not_1 = (!_isEmpty_1);
if (_not_1) {
this._treeAppendableExtensions.operator_tripleLessThan(p, "}");
}
};
this.setBody(op, _function);
_xblockexpression = this.<JvmOperation>associate(lClass, op);
}
return _xblockexpression;
}
public JvmOperation toMethod(final LOperation sourceElement, final String name, final JvmTypeReference returnType, final Procedure1<? super JvmOperation> initializer) {
JvmOperation _xblockexpression = null;
{
final JvmOperation op = this.typesFactory.createJvmOperation();
op.setSimpleName(name);
op.setVisibility(JvmVisibility.PUBLIC);
op.setReturnType(this.cloneWithProxies(returnType));
this.annotationCompiler.processAnnotation(sourceElement, op);
this.<JvmOperation>associate(sourceElement, op);
_xblockexpression = this.<JvmOperation>initializeSafely(op, initializer);
}
return _xblockexpression;
}
protected JvmOperation _toSetter(final LDtoAbstractAttribute prop) {
final String paramName = this._methodNamingExtensions.toMethodParamName(prop);
final JvmTypeReference typeRef = this._dtoModelExtensions.toDtoTypeReferenceWithMultiplicity(prop);
final JvmOperation op = this.typesFactory.createJvmOperation();
op.setVisibility(JvmVisibility.PUBLIC);
op.setReturnType(this.references.getTypeForName(Void.TYPE, prop));
op.setSimpleName(this._methodNamingExtensions.toSetterName(prop));
EList<JvmFormalParameter> _parameters = op.getParameters();
JvmFormalParameter _parameter = this.toParameter(prop, paramName, typeRef);
this.<JvmFormalParameter>operator_add(_parameters, _parameter);
StringConcatenation _builder = new StringConcatenation();
_builder.append("Sets the <code>");
_builder.append(paramName);
_builder.append("</code> property to this instance.");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("@param ");
_builder.append(paramName);
_builder.append(" - the property");
_builder.newLineIfNotEmpty();
_builder.append("@throws RuntimeException if instance is <code>disposed</code>");
_builder.newLine();
this.setDocumentation(op, _builder);
boolean _isToMany = this._dtoModelExtensions.isToMany(prop);
boolean _not = (!_isToMany);
if (_not) {
boolean _isBean = this._dtoModelExtensions.isBean(this._dtoModelExtensions.toRawType(prop));
if (_isBean) {
StringConcatenationClient _client = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
_builder.append("// ensure that embedded beans will notify their parent about changes");
_builder.newLine();
_builder.append("// so their dirty state can be handled properly");
_builder.newLine();
_builder.append("if (this.");
_builder.append(paramName);
_builder.append(" != null) {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("this.");
_builder.append(paramName, "\t");
_builder.append(".removePropertyChangeListener(this);");
_builder.newLineIfNotEmpty();
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("firePropertyChange(\"");
_builder.append(paramName);
_builder.append("\", this.");
_builder.append(paramName);
_builder.append(", this.");
_builder.append(paramName);
_builder.append(" = ");
_builder.append(paramName);
_builder.append(" );");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("if (this.");
_builder.append(paramName);
_builder.append(" != null) {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("this.");
_builder.append(paramName, "\t");
_builder.append(".addPropertyChangeListener(this);");
_builder.newLineIfNotEmpty();
_builder.append("}");
_builder.newLine();
}
};
this.setBody(op, _client);
} else {
StringConcatenationClient _client_1 = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
_builder.append("firePropertyChange(\"");
_builder.append(paramName);
_builder.append("\", this.");
_builder.append(paramName);
_builder.append(", this.");
_builder.append(paramName);
_builder.append(" = ");
_builder.append(paramName);
_builder.append(" );");
_builder.newLineIfNotEmpty();
{
boolean _isIDorUUID = DtoTypesBuilder.this._dtoModelExtensions.isIDorUUID(prop);
if (_isIDorUUID) {
_builder.append("\t\t\t\t");
_builder.append("installLazyCollections();");
_builder.newLine();
}
}
}
};
this.setBody(op, _client_1);
}
} else {
final Procedure1<ITreeAppendable> _function = (ITreeAppendable it) -> {
boolean _equals = Objects.equal(it, null);
if (_equals) {
return;
}
final ITreeAppendable p = it.trace(prop);
String _checkDisposedCall = this.toCheckDisposedCall(prop);
this._treeAppendableExtensions.operator_doubleGreaterThan(p, _checkDisposedCall);
String _name = this._dtoModelExtensions.toName(prop);
final String fieldRef = CommonTypesBuilder.operator_plus("this.", _name);
String _simpleName = this._dtoModelExtensions.toDtoTypeReference(prop).getSimpleName();
String _plus = CommonTypesBuilder.operator_plus("for (", _simpleName);
String _plus_1 = CommonTypesBuilder.operator_plus(_plus, " dto : ");
String _collectionInternalGetterName = this._methodNamingExtensions.toCollectionInternalGetterName(prop);
String _plus_2 = CommonTypesBuilder.operator_plus(_plus_1, _collectionInternalGetterName);
String _plus_3 = CommonTypesBuilder.operator_plus(_plus_2, "().toArray(new ");
String _simpleName_1 = this._dtoModelExtensions.toDtoTypeReference(prop).getSimpleName();
String _plus_4 = CommonTypesBuilder.operator_plus(_plus_3, _simpleName_1);
String _plus_5 = CommonTypesBuilder.operator_plus(_plus_4, "[");
String _plus_6 = CommonTypesBuilder.operator_plus(_plus_5, fieldRef);
String _plus_7 = CommonTypesBuilder.operator_plus(_plus_6, ".size()])) ");
ITreeAppendable _doubleGreaterThan = this._treeAppendableExtensions.operator_doubleGreaterThan(p, _plus_7);
this._treeAppendableExtensions.operator_tripleGreaterThan(_doubleGreaterThan, "{");
String _collectionRemoverName = this._methodNamingExtensions.toCollectionRemoverName(prop);
String _plus_8 = CommonTypesBuilder.operator_plus(_collectionRemoverName, "(dto);");
this._treeAppendableExtensions.operator_doubleGreaterThan(p, _plus_8);
this._treeAppendableExtensions.operator_tripleLessThan(p, "}");
String _plus_9 = CommonTypesBuilder.operator_plus("if(", paramName);
String _plus_10 = CommonTypesBuilder.operator_plus(_plus_9, " == null)");
ITreeAppendable _doubleGreaterThan_1 = this._treeAppendableExtensions.operator_doubleGreaterThan(p, _plus_10);
this._treeAppendableExtensions.operator_tripleGreaterThan(_doubleGreaterThan_1, "{");
this._treeAppendableExtensions.operator_doubleGreaterThan(p, "return;");
this._treeAppendableExtensions.operator_tripleLessThan(p, "}");
String _simpleName_2 = this._dtoModelExtensions.toDtoTypeReference(prop).getSimpleName();
String _plus_11 = CommonTypesBuilder.operator_plus("for (", _simpleName_2);
String _plus_12 = CommonTypesBuilder.operator_plus(_plus_11, " dto : ");
String _plus_13 = CommonTypesBuilder.operator_plus(_plus_12, paramName);
String _plus_14 = CommonTypesBuilder.operator_plus(_plus_13, ") ");
ITreeAppendable _doubleGreaterThan_2 = this._treeAppendableExtensions.operator_doubleGreaterThan(p, _plus_14);
this._treeAppendableExtensions.operator_tripleGreaterThan(_doubleGreaterThan_2, "{");
String _collectionAdderName = this._methodNamingExtensions.toCollectionAdderName(prop);
String _plus_15 = CommonTypesBuilder.operator_plus(_collectionAdderName, "(dto);");
this._treeAppendableExtensions.operator_doubleGreaterThan(p, _plus_15);
this._treeAppendableExtensions.operator_tripleLessThan(p, "}");
};
this.setBody(op, _function);
}
return this.<JvmOperation>associate(prop, op);
}
@Override
public String toSetDirtyStatement(final LClass sourceElement) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("firePropertyChange(\"dirty\", this.dirty, this.dirty = dirty );");
return _builder.toString();
}
/**
* Creates a new UUIDHist id and updates the validFrom.
*/
public JvmOperation toNewIdVersion(final LType type, final String idProp) {
final JvmOperation op = this.typesFactory.createJvmOperation();
op.setVisibility(JvmVisibility.PUBLIC);
op.setReturnType(this.references.getTypeForName(Void.TYPE, type));
op.setSimpleName("newIdVersion");
StringConcatenation _builder = new StringConcatenation();
_builder.append("Creates a copy of this.id type UUIDHist and sets a new validFrom.");
this.setDocumentation(op, _builder);
StringConcatenationClient _client = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
_builder.append("this.id = ");
_builder.append(idProp);
_builder.append(".newVersion();");
_builder.newLineIfNotEmpty();
}
};
this.setBody(op, _client);
return this.<JvmOperation>associate(type, op);
}
public JvmOperation toVersionSetter(final LDtoAbstractAttribute prop) {
final String paramName = this._methodNamingExtensions.toMethodParamName(prop);
final JvmTypeReference typeRef = this._dtoModelExtensions.toDtoTypeReferenceWithMultiplicity(prop);
final JvmOperation op = this.typesFactory.createJvmOperation();
op.setVisibility(JvmVisibility.PUBLIC);
op.setReturnType(this.references.getTypeForName(Void.TYPE, prop));
op.setSimpleName(this._methodNamingExtensions.toSetterName(prop));
EList<JvmFormalParameter> _parameters = op.getParameters();
JvmFormalParameter _parameter = this.toParameter(prop, paramName, typeRef);
this.<JvmFormalParameter>operator_add(_parameters, _parameter);
StringConcatenation _builder = new StringConcatenation();
_builder.append("Sets the <code>");
_builder.append(paramName);
_builder.append("</code> property to this instance.");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("@param ");
_builder.append(paramName);
_builder.append(" - the property");
_builder.newLineIfNotEmpty();
_builder.append("@throws RuntimeException if instance is <code>disposed</code>");
_builder.newLine();
this.setDocumentation(op, _builder);
StringConcatenationClient _client = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
_builder.append("firePropertyChange(\"");
_builder.append(paramName);
_builder.append("\", this.");
_builder.append(paramName);
_builder.append(", this.");
_builder.append(paramName);
_builder.append(" = ");
_builder.append(paramName);
_builder.append(" );");
_builder.newLineIfNotEmpty();
}
};
this.setBody(op, _client);
return this.<JvmOperation>associate(prop, op);
}
protected JvmOperation _toSetter(final LDtoAbstractReference prop) {
final String paramName = this._methodNamingExtensions.toMethodParamName(prop);
final JvmTypeReference typeRef = this._dtoModelExtensions.toDtoTypeReferenceWithMultiplicity(prop);
final LFeature opposite = this._dtoModelExtensions.opposite(prop);
final JvmOperation op = this.typesFactory.createJvmOperation();
op.setVisibility(JvmVisibility.PUBLIC);
op.setReturnType(this.references.getTypeForName(Void.TYPE, prop));
op.setSimpleName(this._methodNamingExtensions.toSetterName(prop));
EList<JvmFormalParameter> _parameters = op.getParameters();
JvmFormalParameter _parameter = this.toParameter(prop, paramName, typeRef);
this.<JvmFormalParameter>operator_add(_parameters, _parameter);
StringConcatenation _builder = new StringConcatenation();
_builder.append("Sets the <code>");
_builder.append(paramName);
_builder.append("</code> property to this instance.");
_builder.newLineIfNotEmpty();
{
boolean _notEquals = (!Objects.equal(opposite, null));
if (_notEquals) {
_builder.append("Since the reference has an opposite reference, the opposite <code>");
String _typeName = this._dtoModelExtensions.toTypeName(prop);
_builder.append(_typeName);
_builder.append("#");
_builder.newLineIfNotEmpty();
String _firstLower = StringExtensions.toFirstLower(opposite.getName());
_builder.append(_firstLower);
_builder.append("</code> of the <code>");
_builder.append(paramName);
_builder.append("</code> will be handled automatically and no ");
_builder.newLineIfNotEmpty();
_builder.append("further coding is required to keep them in sync.<p>");
_builder.newLine();
_builder.append("See {@link ");
String _typeName_1 = this._dtoModelExtensions.toTypeName(prop);
_builder.append(_typeName_1);
_builder.append("#");
String _setterName = this._methodNamingExtensions.toSetterName(opposite);
_builder.append(_setterName);
_builder.append("(");
String _typeName_2 = this._dtoModelExtensions.toTypeName(prop);
_builder.append(_typeName_2);
_builder.append(")");
_builder.newLineIfNotEmpty();
}
}
_builder.newLine();
_builder.append("@param ");
_builder.append(paramName);
_builder.append(" - the property");
_builder.newLineIfNotEmpty();
_builder.append("@throws RuntimeException if instance is <code>disposed</code>");
_builder.newLine();
this.setDocumentation(op, _builder);
StringConcatenationClient _client = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
_builder.append("checkDisposed();");
_builder.newLine();
{
boolean _equals = Objects.equal(opposite, null);
if (_equals) {
{
boolean _isToMany = DtoTypesBuilder.this._dtoModelExtensions.isToMany(prop);
boolean _not = (!_isToMany);
if (_not) {
_builder.append("firePropertyChange(\"");
_builder.append(paramName);
_builder.append("\", this.");
_builder.append(paramName);
_builder.append(", this.");
_builder.append(paramName);
_builder.append(" = ");
_builder.append(paramName);
_builder.append(");");
_builder.newLineIfNotEmpty();
} else {
_builder.append("for (");
String _simpleName = DtoTypesBuilder.this._dtoModelExtensions.toDtoTypeReference(prop).getSimpleName();
_builder.append(_simpleName);
_builder.append(" dto : ");
String _collectionInternalGetterName = DtoTypesBuilder.this._methodNamingExtensions.toCollectionInternalGetterName(prop);
_builder.append(_collectionInternalGetterName);
_builder.append("().toArray(new ");
String _simpleName_1 = DtoTypesBuilder.this._dtoModelExtensions.toDtoTypeReference(prop).getSimpleName();
_builder.append(_simpleName_1);
_builder.append("[this.");
String _name = DtoTypesBuilder.this._dtoModelExtensions.toName(prop);
_builder.append(_name);
_builder.append(".size()])) {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
String _collectionRemoverName = DtoTypesBuilder.this._methodNamingExtensions.toCollectionRemoverName(prop);
_builder.append(_collectionRemoverName, "\t");
_builder.append("(dto);");
_builder.newLineIfNotEmpty();
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("if(");
_builder.append(paramName);
_builder.append(" == null) {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("return;");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("for (");
String _simpleName_2 = DtoTypesBuilder.this._dtoModelExtensions.toDtoTypeReference(prop).getSimpleName();
_builder.append(_simpleName_2);
_builder.append(" dto : ");
_builder.append(paramName);
_builder.append(") {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
String _collectionAdderName = DtoTypesBuilder.this._methodNamingExtensions.toCollectionAdderName(prop);
_builder.append(_collectionAdderName, "\t");
_builder.append("(dto);");
_builder.newLineIfNotEmpty();
_builder.append("}");
_builder.newLine();
}
}
} else {
{
boolean _isToMany_1 = DtoTypesBuilder.this._dtoModelExtensions.isToMany(prop);
boolean _not_1 = (!_isToMany_1);
if (_not_1) {
_builder.append("if (this.");
String _name_1 = DtoTypesBuilder.this._dtoModelExtensions.toName(prop);
_builder.append(_name_1);
_builder.append(" != null) {");
_builder.newLineIfNotEmpty();
{
boolean _isToMany_2 = DtoTypesBuilder.this._dtoModelExtensions.isToMany(opposite);
if (_isToMany_2) {
_builder.append("\t");
_builder.append("this.");
String _name_2 = DtoTypesBuilder.this._dtoModelExtensions.toName(prop);
_builder.append(_name_2, "\t");
_builder.append(".");
String _collectionInternalRemoverName = DtoTypesBuilder.this._methodNamingExtensions.toCollectionInternalRemoverName(opposite);
_builder.append(_collectionInternalRemoverName, "\t");
_builder.append("(this);");
_builder.newLineIfNotEmpty();
} else {
_builder.append("\t");
_builder.append("this.");
String _name_3 = DtoTypesBuilder.this._dtoModelExtensions.toName(prop);
_builder.append(_name_3, "\t");
_builder.append(".");
String _internalSetterName = DtoTypesBuilder.this._methodNamingExtensions.toInternalSetterName(opposite);
_builder.append(_internalSetterName, "\t");
_builder.append("(null);");
_builder.newLineIfNotEmpty();
}
}
_builder.append("}");
_builder.newLine();
_builder.newLine();
String _internalSetterName_1 = DtoTypesBuilder.this._methodNamingExtensions.toInternalSetterName(prop);
_builder.append(_internalSetterName_1);
_builder.append("(");
_builder.append(paramName);
_builder.append(");");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("if (this.");
String _name_4 = DtoTypesBuilder.this._dtoModelExtensions.toName(prop);
_builder.append(_name_4);
_builder.append(" != null) {");
_builder.newLineIfNotEmpty();
{
boolean _isToMany_3 = DtoTypesBuilder.this._dtoModelExtensions.isToMany(opposite);
if (_isToMany_3) {
_builder.append("\t");
_builder.append("this.");
String _name_5 = DtoTypesBuilder.this._dtoModelExtensions.toName(prop);
_builder.append(_name_5, "\t");
_builder.append(".");
String _collectionInternalAdderName = DtoTypesBuilder.this._methodNamingExtensions.toCollectionInternalAdderName(opposite);
_builder.append(_collectionInternalAdderName, "\t");
_builder.append("(this);");
_builder.newLineIfNotEmpty();
} else {
_builder.append("\t");
_builder.append("this.");
String _name_6 = DtoTypesBuilder.this._dtoModelExtensions.toName(prop);
_builder.append(_name_6, "\t");
_builder.append(".");
String _internalSetterName_2 = DtoTypesBuilder.this._methodNamingExtensions.toInternalSetterName(opposite);
_builder.append(_internalSetterName_2, "\t");
_builder.append("(this);");
_builder.newLineIfNotEmpty();
}
}
_builder.append("}");
_builder.newLine();
} else {
_builder.append("for (");
String _simpleName_3 = DtoTypesBuilder.this._dtoModelExtensions.toDtoTypeReference(prop).getSimpleName();
_builder.append(_simpleName_3);
_builder.append(" dto : ");
String _collectionInternalGetterName_1 = DtoTypesBuilder.this._methodNamingExtensions.toCollectionInternalGetterName(prop);
_builder.append(_collectionInternalGetterName_1);
_builder.append("().toArray(new ");
String _simpleName_4 = DtoTypesBuilder.this._dtoModelExtensions.toDtoTypeReference(prop).getSimpleName();
_builder.append(_simpleName_4);
_builder.append("[this.");
String _name_7 = DtoTypesBuilder.this._dtoModelExtensions.toName(prop);
_builder.append(_name_7);
_builder.append(".size()])) {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
String _collectionRemoverName_1 = DtoTypesBuilder.this._methodNamingExtensions.toCollectionRemoverName(prop);
_builder.append(_collectionRemoverName_1, "\t");
_builder.append("(dto);");
_builder.newLineIfNotEmpty();
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("if(");
_builder.append(paramName);
_builder.append(" == null) {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("return;");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("for (");
String _simpleName_5 = DtoTypesBuilder.this._dtoModelExtensions.toDtoTypeReference(prop).getSimpleName();
_builder.append(_simpleName_5);
_builder.append(" dto : ");
_builder.append(paramName);
_builder.append(") {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
String _collectionAdderName_1 = DtoTypesBuilder.this._methodNamingExtensions.toCollectionAdderName(prop);
_builder.append(_collectionAdderName_1, "\t");
_builder.append("(dto);");
_builder.newLineIfNotEmpty();
_builder.append("}");
_builder.newLine();
}
}
}
}
}
};
this.setBody(op, _client);
return this.<JvmOperation>associate(prop, op);
}
protected JvmOperation _toGetter(final LDtoAbstractAttribute prop, final String methodName) {
final String propertyName = this._dtoModelExtensions.toName(prop);
final JvmOperation op = this.typesFactory.createJvmOperation();
op.setVisibility(JvmVisibility.PUBLIC);
op.setSimpleName(methodName);
op.setReturnType(this.cloneWithProxies(this._dtoModelExtensions.toDtoTypeReferenceWithMultiplicity(prop)));
boolean _isDerived = prop.isDerived();
if (_isDerived) {
final String customDoc = this.getDocumentation(prop);
boolean _notEquals = (!Objects.equal(customDoc, null));
if (_notEquals) {
this.setDocumentation(op, customDoc);
} else {
StringConcatenation _builder = new StringConcatenation();
_builder.append("Calculates the value for the derived property ");
String _name = prop.getName();
_builder.append(_name);
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.newLine();
_builder.append("@return ");
String _name_1 = prop.getName();
_builder.append(_name_1);
_builder.append(" The derived property value");
this.setDocumentation(op, _builder);
}
boolean _isDomainDescription = prop.isDomainDescription();
if (_isDomainDescription) {
EList<JvmAnnotationReference> _annotations = op.getAnnotations();
JvmAnnotationReference _annotation = this.toAnnotation(prop, DomainDescription.class);
this.<JvmAnnotationReference>operator_add(_annotations, _annotation);
}
this.setBody(op, prop.getDerivedGetterExpression());
} else {
String _xifexpression = null;
boolean _isToMany = this._dtoModelExtensions.isToMany(prop);
if (_isToMany) {
String _plus = CommonTypesBuilder.operator_plus(
"Returns an unmodifiable list of ", propertyName);
_xifexpression = CommonTypesBuilder.operator_plus(_plus, ".");
} else {
String _xifexpression_1 = null;
boolean _notEquals_1 = (!Objects.equal(propertyName, null));
if (_notEquals_1) {
String _xifexpression_2 = null;
boolean _isRequired = this._dtoModelExtensions.getBounds(prop).isRequired();
if (_isRequired) {
_xifexpression_2 = "<em>required</em> ";
} else {
_xifexpression_2 = "";
}
String _concat = "Returns the ".concat(_xifexpression_2).concat(propertyName).concat(" property");
String _xifexpression_3 = null;
if (((!this._dtoModelExtensions.isBean(this._dtoModelExtensions.toRawType(prop))) && (!this._dtoModelExtensions.getBounds(prop).isRequired()))) {
_xifexpression_3 = " or <code>null</code> if not present";
} else {
_xifexpression_3 = "";
}
_xifexpression_1 = _concat.concat(_xifexpression_3).concat(".");
}
_xifexpression = _xifexpression_1;
}
this.setDocumentation(op, _xifexpression);
final Procedure1<ITreeAppendable> _function = (ITreeAppendable it) -> {
boolean _equals = Objects.equal(it, null);
if (_equals) {
return;
}
final ITreeAppendable p = it.trace(prop);
boolean _isToMany_1 = this._dtoModelExtensions.isToMany(prop);
if (_isToMany_1) {
ITreeAppendable _doubleGreaterThan = this._treeAppendableExtensions.operator_doubleGreaterThan(p, "return ");
JvmTypeReference _newTypeRef = this.newTypeRef(prop, Collections.class);
ITreeAppendable _doubleGreaterThan_1 = this._treeAppendableExtensions.operator_doubleGreaterThan(_doubleGreaterThan, _newTypeRef);
ITreeAppendable _doubleGreaterThan_2 = this._treeAppendableExtensions.operator_doubleGreaterThan(_doubleGreaterThan_1, ".unmodifiableList");
String _collectionInternalGetterName = this._methodNamingExtensions.toCollectionInternalGetterName(prop);
String _plus_1 = CommonTypesBuilder.operator_plus(
"(", _collectionInternalGetterName);
String _plus_2 = CommonTypesBuilder.operator_plus(_plus_1, "());");
this._treeAppendableExtensions.operator_doubleGreaterThan(_doubleGreaterThan_2, _plus_2);
} else {
boolean _isBean = this._dtoModelExtensions.isBean(this._dtoModelExtensions.toRawType(prop));
if (_isBean) {
String _plus_3 = CommonTypesBuilder.operator_plus("if(this.", propertyName);
String _plus_4 = CommonTypesBuilder.operator_plus(_plus_3, "== null)");
ITreeAppendable _doubleGreaterThan_3 = this._treeAppendableExtensions.operator_doubleGreaterThan(p, _plus_4);
this._treeAppendableExtensions.operator_tripleGreaterThan(_doubleGreaterThan_3, "{");
String _plus_5 = CommonTypesBuilder.operator_plus("this.", propertyName);
String _plus_6 = CommonTypesBuilder.operator_plus(_plus_5, " = new ");
String _dTOBeanSimpleName = this._methodNamingExtensions.toDTOBeanSimpleName(this._dtoModelExtensions.toRawType(prop));
String _plus_7 = CommonTypesBuilder.operator_plus(_plus_6, _dTOBeanSimpleName);
String _plus_8 = CommonTypesBuilder.operator_plus(_plus_7, "();");
this._treeAppendableExtensions.operator_doubleGreaterThan(p, _plus_8);
this._treeAppendableExtensions.operator_tripleLessThan(p, "}");
}
String _plus_9 = CommonTypesBuilder.operator_plus("return this.", propertyName);
String _plus_10 = CommonTypesBuilder.operator_plus(_plus_9, ";");
this._treeAppendableExtensions.operator_doubleGreaterThan(p, _plus_10);
}
};
this.setBody(op, _function);
}
return this.<JvmOperation>associate(prop, op);
}
protected JvmOperation _toGetter(final LDtoAbstractReference prop, final String methodName) {
final String propertyName = this._dtoModelExtensions.toName(prop);
final JvmOperation op = this.typesFactory.createJvmOperation();
op.setVisibility(JvmVisibility.PUBLIC);
op.setSimpleName(methodName);
op.setReturnType(this.cloneWithProxies(this._dtoModelExtensions.toDtoTypeReferenceWithMultiplicity(prop)));
String _xifexpression = null;
boolean _isToMany = this._dtoModelExtensions.isToMany(prop);
if (_isToMany) {
String _plus = CommonTypesBuilder.operator_plus(
"Returns an unmodifiable list of ", propertyName);
_xifexpression = CommonTypesBuilder.operator_plus(_plus, ".");
} else {
String _xifexpression_1 = null;
boolean _notEquals = (!Objects.equal(propertyName, null));
if (_notEquals) {
String _xifexpression_2 = null;
boolean _isRequired = this._dtoModelExtensions.getBounds(prop).isRequired();
if (_isRequired) {
_xifexpression_2 = "<em>required</em> ";
} else {
_xifexpression_2 = "";
}
String _concat = "Returns the ".concat(_xifexpression_2).concat(propertyName).concat(" property");
String _xifexpression_3 = null;
if (((!this._dtoModelExtensions.isBean(this._dtoModelExtensions.toRawType(prop))) && (!this._dtoModelExtensions.getBounds(prop).isRequired()))) {
_xifexpression_3 = " or <code>null</code> if not present";
} else {
_xifexpression_3 = "";
}
_xifexpression_1 = _concat.concat(_xifexpression_3).concat(".");
}
_xifexpression = _xifexpression_1;
}
this.setDocumentation(op, _xifexpression);
final Procedure1<ITreeAppendable> _function = (ITreeAppendable it) -> {
boolean _equals = Objects.equal(it, null);
if (_equals) {
return;
}
final ITreeAppendable p = it.trace(prop);
boolean _isToMany_1 = this._dtoModelExtensions.isToMany(prop);
if (_isToMany_1) {
ITreeAppendable _doubleGreaterThan = this._treeAppendableExtensions.operator_doubleGreaterThan(p, "return ");
JvmTypeReference _newTypeRef = this.newTypeRef(prop, Collections.class);
ITreeAppendable _doubleGreaterThan_1 = this._treeAppendableExtensions.operator_doubleGreaterThan(_doubleGreaterThan, _newTypeRef);
ITreeAppendable _doubleGreaterThan_2 = this._treeAppendableExtensions.operator_doubleGreaterThan(_doubleGreaterThan_1, ".unmodifiableList");
String _collectionInternalGetterName = this._methodNamingExtensions.toCollectionInternalGetterName(prop);
String _plus_1 = CommonTypesBuilder.operator_plus(
"(", _collectionInternalGetterName);
String _plus_2 = CommonTypesBuilder.operator_plus(_plus_1, "());");
this._treeAppendableExtensions.operator_doubleGreaterThan(_doubleGreaterThan_2, _plus_2);
} else {
boolean _isBean = this._dtoModelExtensions.isBean(this._dtoModelExtensions.toRawType(prop));
if (_isBean) {
String _plus_3 = CommonTypesBuilder.operator_plus("if(this.", propertyName);
String _plus_4 = CommonTypesBuilder.operator_plus(_plus_3, "== null)");
ITreeAppendable _doubleGreaterThan_3 = this._treeAppendableExtensions.operator_doubleGreaterThan(p, _plus_4);
this._treeAppendableExtensions.operator_tripleGreaterThan(_doubleGreaterThan_3, "{");
String _plus_5 = CommonTypesBuilder.operator_plus("this.", propertyName);
String _plus_6 = CommonTypesBuilder.operator_plus(_plus_5, " = new ");
String _dTOBeanSimpleName = this._methodNamingExtensions.toDTOBeanSimpleName(this._dtoModelExtensions.toRawType(prop));
String _plus_7 = CommonTypesBuilder.operator_plus(_plus_6, _dTOBeanSimpleName);
String _plus_8 = CommonTypesBuilder.operator_plus(_plus_7, "();");
this._treeAppendableExtensions.operator_doubleGreaterThan(p, _plus_8);
String _plus_9 = CommonTypesBuilder.operator_plus("this.", propertyName);
String _plus_10 = CommonTypesBuilder.operator_plus(_plus_9, ".addPropertyChangeListener(this);");
this._treeAppendableExtensions.operator_doubleGreaterThan(p, _plus_10);
this._treeAppendableExtensions.operator_tripleLessThan(p, "}");
}
String _plus_11 = CommonTypesBuilder.operator_plus("return this.", propertyName);
String _plus_12 = CommonTypesBuilder.operator_plus(_plus_11, ";");
this._treeAppendableExtensions.operator_doubleGreaterThan(p, _plus_12);
}
};
this.setBody(op, _function);
return this.<JvmOperation>associate(prop, op);
}
public JvmOperation toProxySetter(final LDtoAbstractReference prop) {
boolean _isToMany = this._dtoModelExtensions.isToMany(prop);
if (_isToMany) {
throw new RuntimeException("toMany-References not allowed for setters!");
}
final String paramName = this._methodNamingExtensions.toMethodParamName(prop);
final JvmOperation op = this.typesFactory.createJvmOperation();
op.setVisibility(JvmVisibility.PUBLIC);
op.setReturnType(this.references.getTypeForName(Void.TYPE, prop));
op.setSimpleName(this._methodNamingExtensions.toSetterName(prop));
EList<JvmFormalParameter> _parameters = op.getParameters();
JvmFormalParameter _parameter = this.toParameter(prop, paramName, this.references.getTypeForName(ICrossReference.class, prop));
this.<JvmFormalParameter>operator_add(_parameters, _parameter);
StringConcatenation _builder = new StringConcatenation();
_builder.append("Sets the proxy of the <code>");
_builder.append(paramName);
_builder.append("</code> property for lazy cross reference loading.");
_builder.newLineIfNotEmpty();
this.setDocumentation(op, _builder);
final Procedure1<ITreeAppendable> _function = (ITreeAppendable it) -> {
boolean _equals = Objects.equal(it, null);
if (_equals) {
return;
}
final ITreeAppendable p = it.trace(prop);
String _checkDisposedCall = this.toCheckDisposedCall(prop);
this._treeAppendableExtensions.operator_doubleGreaterThan(p, _checkDisposedCall);
String _plus = CommonTypesBuilder.operator_plus("firePropertyChange(\"", paramName);
String _plus_1 = CommonTypesBuilder.operator_plus(_plus, "\", this.");
String _plus_2 = CommonTypesBuilder.operator_plus(_plus_1, paramName);
String _plus_3 = CommonTypesBuilder.operator_plus(_plus_2, ", this.");
String _plus_4 = CommonTypesBuilder.operator_plus(_plus_3, paramName);
String _plus_5 = CommonTypesBuilder.operator_plus(_plus_4, " = ");
String _plus_6 = CommonTypesBuilder.operator_plus(_plus_5, paramName);
String _plus_7 = CommonTypesBuilder.operator_plus(_plus_6, ");");
this._treeAppendableExtensions.operator_doubleGreaterThan(p, _plus_7);
};
this.setBody(op, _function);
return this.<JvmOperation>associate(prop, op);
}
public JvmOperation toProxyGetter(final LDtoAbstractReference prop) {
boolean _isToMany = this._dtoModelExtensions.isToMany(prop);
if (_isToMany) {
throw new RuntimeException("toMany-References not allowed for setters!");
}
final String paramName = this._methodNamingExtensions.toMethodParamName(prop);
final JvmOperation op = this.typesFactory.createJvmOperation();
op.setVisibility(JvmVisibility.PUBLIC);
op.setReturnType(this.references.getTypeForName(ICrossReference.class, prop));
op.setSimpleName(this._methodNamingExtensions.toGetterName(prop));
StringConcatenation _builder = new StringConcatenation();
_builder.append("Returns the proxy of the <code>");
_builder.append(paramName);
_builder.append("</code>.");
_builder.newLineIfNotEmpty();
this.setDocumentation(op, _builder);
final Procedure1<ITreeAppendable> _function = (ITreeAppendable it) -> {
if ((it == null)) {
return;
}
final ITreeAppendable p = it.trace(prop);
String _checkDisposedCall = this.toCheckDisposedCall(prop);
this._treeAppendableExtensions.operator_doubleGreaterThan(p, _checkDisposedCall);
String _plus = CommonTypesBuilder.operator_plus("return ", paramName);
String _plus_1 = CommonTypesBuilder.operator_plus(_plus, ";");
this._treeAppendableExtensions.operator_doubleGreaterThan(p, _plus_1);
};
this.setBody(op, _function);
return this.<JvmOperation>associate(prop, op);
}
/**
* Builds an adder method for a *toMany relation like
* <code>Order.addToOrderLines(OrderLine orderLine)</code>.
*/
public JvmOperation toAdder(final LDtoFeature prop, final String propertyName) {
final String paramName = StringExtensions.toFirstLower(this._dtoModelExtensions.toTypeName(prop));
final JvmOperation op = this.typesFactory.createJvmOperation();
op.setVisibility(JvmVisibility.PUBLIC);
op.setReturnType(this.references.getTypeForName(Void.TYPE, prop));
op.setSimpleName(this._methodNamingExtensions.toCollectionAdderName(prop));
JvmTypeReference _dtoTypeReference = this._dtoModelExtensions.toDtoTypeReference(prop);
boolean _tripleNotEquals = (_dtoTypeReference != null);
if (_tripleNotEquals) {
EList<JvmFormalParameter> _parameters = op.getParameters();
JvmFormalParameter _parameter = this.toParameter(prop, paramName, this._dtoModelExtensions.toDtoTypeReference(prop));
this.<JvmFormalParameter>operator_add(_parameters, _parameter);
}
StringConcatenation _builder = new StringConcatenation();
_builder.append("Adds the given ");
_builder.append(paramName);
_builder.append(" to this object. <p>");
_builder.newLineIfNotEmpty();
{
LFeature _opposite = this._dtoModelExtensions.opposite(prop);
boolean _tripleNotEquals_1 = (_opposite != null);
if (_tripleNotEquals_1) {
_builder.append("Since the reference is a composition reference, the opposite reference <code>");
String _typeName = this._dtoModelExtensions.toTypeName(prop);
_builder.append(_typeName);
_builder.append("#");
String _firstLower = StringExtensions.toFirstLower(this._dtoModelExtensions.opposite(prop).getName());
_builder.append(_firstLower);
_builder.append("</code> of the <code>");
_builder.append(paramName);
_builder.append("</code> will be handled automatically and no further coding is required to keep them in sync.<p>");
_builder.newLineIfNotEmpty();
_builder.append("See {@link ");
String _typeName_1 = this._dtoModelExtensions.toTypeName(prop);
_builder.append(_typeName_1);
_builder.append("#");
String _setterName = this._methodNamingExtensions.toSetterName(this._dtoModelExtensions.opposite(prop));
_builder.append(_setterName);
_builder.append("(");
String _typeName_2 = this._dtoModelExtensions.toTypeName(prop);
_builder.append(_typeName_2);
_builder.append(")}.");
_builder.newLineIfNotEmpty();
}
}
_builder.newLine();
_builder.append("@param ");
_builder.append(paramName);
_builder.append(" - the property");
_builder.newLineIfNotEmpty();
_builder.append("@throws RuntimeException if instance is <code>disposed</code>");
_builder.newLine();
this.setDocumentation(op, _builder);
final LFeature opposite = this._dtoModelExtensions.opposite(prop);
StringConcatenationClient _client = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
_builder.append("checkDisposed();");
_builder.newLine();
_builder.newLine();
{
boolean _notEquals = (!Objects.equal(opposite, null));
if (_notEquals) {
_builder.append(paramName);
_builder.append(".");
String _setterName = DtoTypesBuilder.this._methodNamingExtensions.toSetterName(DtoTypesBuilder.this._dtoModelExtensions.opposite(prop));
_builder.append(_setterName);
_builder.append("(this);");
_builder.newLineIfNotEmpty();
} else {
String _collectionInternalAdderName = DtoTypesBuilder.this._methodNamingExtensions.toCollectionInternalAdderName(prop);
_builder.append(_collectionInternalAdderName);
_builder.append("(");
_builder.append(paramName);
_builder.append(");");
_builder.newLineIfNotEmpty();
}
}
}
};
this.setBody(op, _client);
return this.<JvmOperation>associate(prop, op);
}
/**
* Builds an adder method for a *toMany relation like
* <code>Order.addToOrderLines(OrderLine orderLine)</code>.
*/
public JvmOperation toProxyAdder(final LDtoAbstractReference prop, final String propertyName) {
final String paramName = StringExtensions.toFirstLower(this._dtoModelExtensions.toTypeName(prop));
final JvmOperation op = this.typesFactory.createJvmOperation();
op.setVisibility(JvmVisibility.PUBLIC);
op.setReturnType(this.references.getTypeForName(Void.TYPE, prop));
op.setSimpleName(this._methodNamingExtensions.toCollectionAdderName(prop));
EList<JvmFormalParameter> _parameters = op.getParameters();
JvmFormalParameter _parameter = this.toParameter(prop, paramName, this.references.getTypeForName(ICrossReference.class, prop));
this.<JvmFormalParameter>operator_add(_parameters, _parameter);
StringConcatenation _builder = new StringConcatenation();
_builder.append("Adds the cross reference proxy ");
_builder.append(paramName);
_builder.append(". <p>");
this.setDocumentation(op, _builder);
final Procedure1<ITreeAppendable> _function = (ITreeAppendable it) -> {
boolean _equals = Objects.equal(it, null);
if (_equals) {
return;
}
final ITreeAppendable p = it.trace(prop);
String _checkDisposedCall = this.toCheckDisposedCall(prop);
this._treeAppendableExtensions.operator_add(p, _checkDisposedCall);
String _getterName = this._methodNamingExtensions.toGetterName(prop);
String _plus = CommonTypesBuilder.operator_plus(_getterName, "().add(");
String _plus_1 = CommonTypesBuilder.operator_plus(_plus, paramName);
String _plus_2 = CommonTypesBuilder.operator_plus(_plus_1, ");");
this._treeAppendableExtensions.operator_doubleGreaterThan(p, _plus_2);
};
this.setBody(op, _function);
return this.<JvmOperation>associate(prop, op);
}
public JvmVisibility getInternalMethodVisibility(final LDtoFeature ref) {
JvmVisibility _xblockexpression = null;
{
EObject _eContainer = ref.eContainer();
final LPackage ownerPackage = this._dtoModelExtensions.getPackage(((LType) _eContainer));
final LPackage refPackage = this._dtoModelExtensions.getPackage(this._dtoModelExtensions.toRawType(ref));
JvmVisibility _xifexpression = null;
boolean _equals = ownerPackage.equals(refPackage);
if (_equals) {
_xifexpression = null;
} else {
_xifexpression = JvmVisibility.PUBLIC;
}
_xblockexpression = _xifexpression;
}
return _xblockexpression;
}
protected JvmOperation _toInternalSetter(final LDtoAbstractReference prop) {
final String paramName = this._methodNamingExtensions.toMethodParamName(prop);
final JvmTypeReference typeRef = this._dtoModelExtensions.toDtoTypeReference(prop);
final JvmOperation result = this.typesFactory.createJvmOperation();
result.setVisibility(JvmVisibility.PUBLIC);
result.setReturnType(this.references.getTypeForName(Void.TYPE, prop));
result.setSimpleName(this._methodNamingExtensions.toInternalSetterName(prop));
EList<JvmFormalParameter> _parameters = result.getParameters();
JvmFormalParameter _parameter = this.toParameter(prop, paramName, typeRef);
this.<JvmFormalParameter>operator_add(_parameters, _parameter);
StringConcatenation _builder = new StringConcatenation();
_builder.append("For internal use only!");
this.setDocumentation(result, _builder);
final Procedure1<ITreeAppendable> _function = (ITreeAppendable it) -> {
boolean _equals = Objects.equal(it, null);
if (_equals) {
return;
}
final ITreeAppendable p = it.trace(prop);
String _plus = CommonTypesBuilder.operator_plus("firePropertyChange(\"", paramName);
String _plus_1 = CommonTypesBuilder.operator_plus(_plus, "\", this.");
String _plus_2 = CommonTypesBuilder.operator_plus(_plus_1, paramName);
String _plus_3 = CommonTypesBuilder.operator_plus(_plus_2, ", this.");
String _plus_4 = CommonTypesBuilder.operator_plus(_plus_3, paramName);
String _plus_5 = CommonTypesBuilder.operator_plus(_plus_4, " = ");
String _plus_6 = CommonTypesBuilder.operator_plus(_plus_5, paramName);
String _plus_7 = CommonTypesBuilder.operator_plus(_plus_6, ");");
this._treeAppendableExtensions.operator_doubleGreaterThan(p, _plus_7);
};
this.setBody(result, _function);
return this.<JvmOperation>associate(prop, result);
}
@Override
public JvmField toField(final LFeature prop) {
JvmField _xblockexpression = null;
{
final JvmField jvmField = this.typesFactory.createJvmField();
jvmField.setSimpleName(this._dtoModelExtensions.toName(prop));
jvmField.setVisibility(JvmVisibility.PRIVATE);
jvmField.setType(this._dtoModelExtensions.toDtoTypeReferenceWithMultiplicity(((LDtoFeature) prop)));
jvmField.setTransient(this._dtoModelExtensions.isTransient(prop));
if (((prop instanceof LAttribute) && this.isCreateUuid(((LAttribute) prop)))) {
final Procedure1<ITreeAppendable> _function = (ITreeAppendable it) -> {
boolean _equals = Objects.equal(it, null);
if (_equals) {
return;
}
final ITreeAppendable p = it.trace(prop);
StringConcatenation _builder = new StringConcatenation();
_builder.append("java.util.UUID.randomUUID().toString()");
this._treeAppendableExtensions.operator_doubleGreaterThan(p, _builder);
};
this.setInitializer(jvmField, _function);
} else {
if ((prop instanceof LDtoAbstractAttribute)) {
if ((this._dtoModelExtensions.isIDorUUID(((LAttribute)prop)) && ((LDtoAbstractAttribute)prop).getDTO().isHistorizedOrTimedependent())) {
final Procedure1<ITreeAppendable> _function_1 = (ITreeAppendable it) -> {
boolean _equals = Objects.equal(it, null);
if (_equals) {
return;
}
final ITreeAppendable p = it.trace(prop);
StringConcatenation _builder = new StringConcatenation();
_builder.append("new UUIDHist()");
this._treeAppendableExtensions.operator_doubleGreaterThan(p, _builder);
};
this.setInitializer(jvmField, _function_1);
}
}
}
this.annotationCompiler.processAnnotation(prop, jvmField);
_xblockexpression = this.<JvmField>associate(prop, jvmField);
}
return _xblockexpression;
}
public boolean isCreateUuid(final LAttribute att) {
boolean _xifexpression = false;
if ((att instanceof LDtoInheritedAttribute)) {
final LDtoInheritedAttribute iAtt = ((LDtoInheritedAttribute) att);
return iAtt.getInheritedFeature().isUuid();
} else {
_xifexpression = att.isUuid();
}
return _xifexpression;
}
public boolean uuidPresent(final LEntity entity) {
final Function1<LEntityAttribute, Boolean> _function = (LEntityAttribute it) -> {
return Boolean.valueOf(it.isUuid());
};
return IterableExtensions.<LEntityAttribute>exists(entity.getAllAttributes(), _function);
}
public JvmField toProxyField(final LFeature prop) {
JvmField _xblockexpression = null;
{
final JvmField jvmField = this.typesFactory.createJvmField();
jvmField.setSimpleName(this._dtoModelExtensions.toName(prop));
jvmField.setVisibility(JvmVisibility.PRIVATE);
jvmField.setType(this.references.getTypeForName(ICrossReference.class, prop));
this.annotationCompiler.processAnnotation(prop, jvmField);
_xblockexpression = this.<JvmField>associate(prop, jvmField);
}
return _xblockexpression;
}
protected JvmOperation _toInternalSetter(final LDtoAbstractAttribute prop) {
final String paramName = this._methodNamingExtensions.toMethodParamName(prop);
final JvmTypeReference typeRef = this._dtoModelExtensions.toDtoTypeReference(prop);
final JvmOperation result = this.typesFactory.createJvmOperation();
result.setVisibility(JvmVisibility.PUBLIC);
result.setReturnType(this.references.getTypeForName(Void.TYPE, prop));
result.setSimpleName(this._methodNamingExtensions.toInternalSetterName(prop));
EList<JvmFormalParameter> _parameters = result.getParameters();
JvmFormalParameter _parameter = this.toParameter(prop, paramName, typeRef);
this.<JvmFormalParameter>operator_add(_parameters, _parameter);
StringConcatenation _builder = new StringConcatenation();
_builder.append("For internal use only!");
this.setDocumentation(result, _builder);
final Procedure1<ITreeAppendable> _function = (ITreeAppendable it) -> {
boolean _equals = Objects.equal(it, null);
if (_equals) {
return;
}
final ITreeAppendable p = it.trace(prop);
String _plus = CommonTypesBuilder.operator_plus("firePropertyChange(\"", paramName);
String _plus_1 = CommonTypesBuilder.operator_plus(_plus, "\", this.");
String _plus_2 = CommonTypesBuilder.operator_plus(_plus_1, paramName);
String _plus_3 = CommonTypesBuilder.operator_plus(_plus_2, ", this.");
String _plus_4 = CommonTypesBuilder.operator_plus(_plus_3, paramName);
String _plus_5 = CommonTypesBuilder.operator_plus(_plus_4, " = ");
String _plus_6 = CommonTypesBuilder.operator_plus(_plus_5, paramName);
String _plus_7 = CommonTypesBuilder.operator_plus(_plus_6, ");");
this._treeAppendableExtensions.operator_doubleGreaterThan(p, _plus_7);
};
this.setBody(result, _function);
return this.<JvmOperation>associate(prop, result);
}
protected JvmOperation _toInternalAdder(final LDtoAbstractReference prop) {
final String paramName = StringExtensions.toFirstLower(this._dtoModelExtensions.toTypeName(prop));
final JvmTypeReference typeRef = this._dtoModelExtensions.toDtoTypeReference(prop);
final JvmOperation op = this.typesFactory.createJvmOperation();
op.setVisibility(JvmVisibility.PUBLIC);
op.setReturnType(this.references.getTypeForName(Void.TYPE, prop));
op.setSimpleName(this._methodNamingExtensions.toCollectionInternalAdderName(prop));
final JvmFormalParameter param = this.toParameter(prop, paramName, typeRef);
boolean _notEquals = (!Objects.equal(param, null));
if (_notEquals) {
EList<JvmFormalParameter> _parameters = op.getParameters();
this.<JvmFormalParameter>operator_add(_parameters, param);
}
StringConcatenation _builder = new StringConcatenation();
_builder.append("For internal use only!");
this.setDocumentation(op, _builder);
StringConcatenationClient _client = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
{
boolean _isBean = DtoTypesBuilder.this._dtoModelExtensions.isBean(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
if (_isBean) {
_builder.append("// add this as property change listener for embeddable beans");
_builder.newLine();
_builder.append(paramName);
_builder.append(".addPropertyChangeListener(this);");
_builder.newLineIfNotEmpty();
}
}
_builder.newLine();
_builder.append("if(!org.eclipse.osbp.dsl.dto.lib.MappingContext.isMappingMode()) {");
_builder.newLine();
_builder.append("\t\t");
_builder.append("List<");
String _typeName = DtoTypesBuilder.this._dtoModelExtensions.toTypeName(prop);
_builder.append(_typeName, "\t\t");
_builder.append("> oldList = null;");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("if(");
String _collectionInternalGetterName = DtoTypesBuilder.this._methodNamingExtensions.toCollectionInternalGetterName(prop);
_builder.append(_collectionInternalGetterName, "\t\t");
_builder.append("() instanceof org.eclipse.osbp.dsl.dto.lib.AbstractOppositeDtoList) {");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t");
_builder.append("oldList = ((org.eclipse.osbp.dsl.dto.lib.AbstractOppositeDtoList) ");
String _collectionInternalGetterName_1 = DtoTypesBuilder.this._methodNamingExtensions.toCollectionInternalGetterName(prop);
_builder.append(_collectionInternalGetterName_1, "\t\t\t");
_builder.append("()).copy();");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("} else {");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("oldList = new java.util.ArrayList<>(");
String _collectionInternalGetterName_2 = DtoTypesBuilder.this._methodNamingExtensions.toCollectionInternalGetterName(prop);
_builder.append(_collectionInternalGetterName_2, "\t\t\t");
_builder.append("());");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t\t");
String _collectionInternalGetterName_3 = DtoTypesBuilder.this._methodNamingExtensions.toCollectionInternalGetterName(prop);
_builder.append(_collectionInternalGetterName_3, "\t\t");
_builder.append("().add(");
_builder.append(paramName, "\t\t");
_builder.append(");");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("firePropertyChange(\"");
String _name = DtoTypesBuilder.this._dtoModelExtensions.toName(prop);
_builder.append(_name, "\t\t");
_builder.append("\", oldList, ");
String _collectionInternalGetterName_4 = DtoTypesBuilder.this._methodNamingExtensions.toCollectionInternalGetterName(prop);
_builder.append(_collectionInternalGetterName_4, "\t\t");
_builder.append("());");
_builder.newLineIfNotEmpty();
_builder.append("}");
_builder.newLine();
}
};
this.setBody(op, _client);
return this.<JvmOperation>associate(prop, op);
}
protected JvmOperation _toInternalAdder(final LDtoAbstractAttribute prop) {
final String paramName = StringExtensions.toFirstLower(this._dtoModelExtensions.toTypeName(prop));
final JvmTypeReference typeRef = this._dtoModelExtensions.toDtoTypeReference(prop);
final JvmOperation op = this.typesFactory.createJvmOperation();
op.setVisibility(JvmVisibility.PUBLIC);
op.setReturnType(this.references.getTypeForName(Void.TYPE, prop));
op.setSimpleName(this._methodNamingExtensions.toCollectionInternalAdderName(prop));
final JvmFormalParameter param = this.toParameter(prop, paramName, typeRef);
boolean _notEquals = (!Objects.equal(param, null));
if (_notEquals) {
EList<JvmFormalParameter> _parameters = op.getParameters();
this.<JvmFormalParameter>operator_add(_parameters, param);
}
StringConcatenation _builder = new StringConcatenation();
_builder.append("For internal use only!");
this.setDocumentation(op, _builder);
StringConcatenationClient _client = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
{
boolean _isBean = DtoTypesBuilder.this._dtoModelExtensions.isBean(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
if (_isBean) {
_builder.append("// add this as property change listener for embeddable beans");
_builder.newLine();
_builder.append(paramName);
_builder.append(".addPropertyChangeListener(this);");
_builder.newLineIfNotEmpty();
}
}
_builder.newLine();
_builder.append("List<");
String _typeName = DtoTypesBuilder.this._dtoModelExtensions.toTypeName(prop);
_builder.append(_typeName);
_builder.append("> oldList = null;");
_builder.newLineIfNotEmpty();
_builder.append("if(");
String _collectionInternalGetterName = DtoTypesBuilder.this._methodNamingExtensions.toCollectionInternalGetterName(prop);
_builder.append(_collectionInternalGetterName);
_builder.append("() instanceof org.eclipse.osbp.dsl.dto.lib.AbstractOppositeDtoList) {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("oldList = ((org.eclipse.osbp.dsl.dto.lib.AbstractOppositeDtoList) ");
String _collectionInternalGetterName_1 = DtoTypesBuilder.this._methodNamingExtensions.toCollectionInternalGetterName(prop);
_builder.append(_collectionInternalGetterName_1, "\t");
_builder.append("()).copy();");
_builder.newLineIfNotEmpty();
_builder.append("} else {");
_builder.newLine();
_builder.append("\t");
_builder.append("oldList = new java.util.ArrayList<>(");
String _collectionInternalGetterName_2 = DtoTypesBuilder.this._methodNamingExtensions.toCollectionInternalGetterName(prop);
_builder.append(_collectionInternalGetterName_2, "\t");
_builder.append("());");
_builder.newLineIfNotEmpty();
_builder.append("}");
_builder.newLine();
String _collectionInternalGetterName_3 = DtoTypesBuilder.this._methodNamingExtensions.toCollectionInternalGetterName(prop);
_builder.append(_collectionInternalGetterName_3);
_builder.append("().add(");
_builder.append(paramName);
_builder.append(");");
_builder.newLineIfNotEmpty();
_builder.append("firePropertyChange(\"");
String _name = DtoTypesBuilder.this._dtoModelExtensions.toName(prop);
_builder.append(_name);
_builder.append("\", oldList, ");
String _collectionInternalGetterName_4 = DtoTypesBuilder.this._methodNamingExtensions.toCollectionInternalGetterName(prop);
_builder.append(_collectionInternalGetterName_4);
_builder.append("());");
_builder.newLineIfNotEmpty();
}
};
this.setBody(op, _client);
return this.<JvmOperation>associate(prop, op);
}
protected JvmOperation _toInternalRemover(final LDtoAbstractReference prop) {
final String paramName = StringExtensions.toFirstLower(this._dtoModelExtensions.toTypeName(prop));
final JvmTypeReference typeRef = this._dtoModelExtensions.toDtoTypeReference(prop);
final JvmOperation op = this.typesFactory.createJvmOperation();
op.setVisibility(JvmVisibility.PUBLIC);
op.setReturnType(this.references.getTypeForName(Void.TYPE, prop));
op.setSimpleName(this._methodNamingExtensions.toCollectionInternalRemoverName(prop));
final JvmFormalParameter param = this.toParameter(prop, paramName, typeRef);
boolean _notEquals = (!Objects.equal(param, null));
if (_notEquals) {
EList<JvmFormalParameter> _parameters = op.getParameters();
this.<JvmFormalParameter>operator_add(_parameters, param);
}
StringConcatenation _builder = new StringConcatenation();
_builder.append("For internal use only!");
this.setDocumentation(op, _builder);
StringConcatenationClient _client = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
{
boolean _isBean = DtoTypesBuilder.this._dtoModelExtensions.isBean(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
if (_isBean) {
_builder.append("// remove this as property change listener from the embeddable bean");
_builder.newLine();
_builder.append(paramName);
_builder.append(".removePropertyChangeListener(this);");
_builder.newLineIfNotEmpty();
}
}
_builder.append("if(!org.eclipse.osbp.dsl.dto.lib.MappingContext.isMappingMode()) {");
_builder.newLine();
_builder.append("\t");
_builder.append("List<");
String _typeName = DtoTypesBuilder.this._dtoModelExtensions.toTypeName(prop);
_builder.append(_typeName, "\t");
_builder.append("> oldList = null;");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("if(");
String _collectionInternalGetterName = DtoTypesBuilder.this._methodNamingExtensions.toCollectionInternalGetterName(prop);
_builder.append(_collectionInternalGetterName, "\t");
_builder.append("() instanceof org.eclipse.osbp.dsl.dto.lib.AbstractOppositeDtoList) {");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("oldList = ((org.eclipse.osbp.dsl.dto.lib.AbstractOppositeDtoList) ");
String _collectionInternalGetterName_1 = DtoTypesBuilder.this._methodNamingExtensions.toCollectionInternalGetterName(prop);
_builder.append(_collectionInternalGetterName_1, "\t\t");
_builder.append("()).copy();");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("} else {");
_builder.newLine();
_builder.append("\t\t");
_builder.append("oldList = new java.util.ArrayList<>(");
String _collectionInternalGetterName_2 = DtoTypesBuilder.this._methodNamingExtensions.toCollectionInternalGetterName(prop);
_builder.append(_collectionInternalGetterName_2, "\t\t");
_builder.append("());");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
String _collectionInternalGetterName_3 = DtoTypesBuilder.this._methodNamingExtensions.toCollectionInternalGetterName(prop);
_builder.append(_collectionInternalGetterName_3, "\t");
_builder.append("().remove(");
_builder.append(paramName, "\t");
_builder.append(");");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("firePropertyChange(\"");
String _name = DtoTypesBuilder.this._dtoModelExtensions.toName(prop);
_builder.append(_name, "\t");
_builder.append("\", oldList, ");
String _collectionInternalGetterName_4 = DtoTypesBuilder.this._methodNamingExtensions.toCollectionInternalGetterName(prop);
_builder.append(_collectionInternalGetterName_4, "\t");
_builder.append("());\t");
_builder.newLineIfNotEmpty();
_builder.append("}else{");
_builder.newLine();
_builder.append("\t");
_builder.append("// in mapping mode, we do NOT resolve any collection");
_builder.newLine();
_builder.append("\t");
String _collectionInternalGetterName_5 = DtoTypesBuilder.this._methodNamingExtensions.toCollectionInternalGetterName(prop);
_builder.append(_collectionInternalGetterName_5, "\t");
_builder.append("().remove(");
_builder.append(paramName, "\t");
_builder.append(");");
_builder.newLineIfNotEmpty();
_builder.append("}");
_builder.newLine();
}
};
this.setBody(op, _client);
return this.<JvmOperation>associate(prop, op);
}
protected JvmOperation _toInternalRemover(final LDtoAbstractAttribute prop) {
final String paramName = StringExtensions.toFirstLower(this._dtoModelExtensions.toTypeName(prop));
final JvmTypeReference typeRef = this._dtoModelExtensions.toDtoTypeReference(prop);
final JvmOperation op = this.typesFactory.createJvmOperation();
op.setVisibility(JvmVisibility.PUBLIC);
op.setReturnType(this.references.getTypeForName(Void.TYPE, prop));
op.setSimpleName(this._methodNamingExtensions.toCollectionInternalRemoverName(prop));
final JvmFormalParameter param = this.toParameter(prop, paramName, typeRef);
boolean _notEquals = (!Objects.equal(param, null));
if (_notEquals) {
EList<JvmFormalParameter> _parameters = op.getParameters();
this.<JvmFormalParameter>operator_add(_parameters, param);
}
StringConcatenation _builder = new StringConcatenation();
_builder.append("For internal use only!");
this.setDocumentation(op, _builder);
StringConcatenationClient _client = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
{
boolean _isBean = DtoTypesBuilder.this._dtoModelExtensions.isBean(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
if (_isBean) {
_builder.append("// remove this as property change listener from the embeddable bean");
_builder.newLine();
_builder.append(paramName);
_builder.append(".removePropertyChangeListener(this);");
_builder.newLineIfNotEmpty();
}
}
_builder.append("List<");
String _typeName = DtoTypesBuilder.this._dtoModelExtensions.toTypeName(prop);
_builder.append(_typeName);
_builder.append("> oldList = null;");
_builder.newLineIfNotEmpty();
_builder.append("if(");
String _collectionInternalGetterName = DtoTypesBuilder.this._methodNamingExtensions.toCollectionInternalGetterName(prop);
_builder.append(_collectionInternalGetterName);
_builder.append("() instanceof org.eclipse.osbp.dsl.dto.lib.AbstractOppositeDtoList) {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("oldList = ((org.eclipse.osbp.dsl.dto.lib.AbstractOppositeDtoList) ");
String _collectionInternalGetterName_1 = DtoTypesBuilder.this._methodNamingExtensions.toCollectionInternalGetterName(prop);
_builder.append(_collectionInternalGetterName_1, "\t");
_builder.append("()).copy();");
_builder.newLineIfNotEmpty();
_builder.append("} else {");
_builder.newLine();
_builder.append("\t");
_builder.append("oldList = new java.util.ArrayList<>(");
String _collectionInternalGetterName_2 = DtoTypesBuilder.this._methodNamingExtensions.toCollectionInternalGetterName(prop);
_builder.append(_collectionInternalGetterName_2, "\t");
_builder.append("());");
_builder.newLineIfNotEmpty();
_builder.append("}");
_builder.newLine();
String _collectionInternalGetterName_3 = DtoTypesBuilder.this._methodNamingExtensions.toCollectionInternalGetterName(prop);
_builder.append(_collectionInternalGetterName_3);
_builder.append("().remove(");
_builder.append(paramName);
_builder.append(");");
_builder.newLineIfNotEmpty();
_builder.append("firePropertyChange(\"");
String _name = DtoTypesBuilder.this._dtoModelExtensions.toName(prop);
_builder.append(_name);
_builder.append("\", oldList, ");
String _collectionInternalGetterName_4 = DtoTypesBuilder.this._methodNamingExtensions.toCollectionInternalGetterName(prop);
_builder.append(_collectionInternalGetterName_4);
_builder.append("());");
_builder.newLineIfNotEmpty();
}
};
this.setBody(op, _client);
return this.<JvmOperation>associate(prop, op);
}
protected JvmOperation _toInternalCollectionGetter(final LDtoAbstractReference prop, final String name) {
JvmOperation _xblockexpression = null;
{
final String fieldName = StringExtensions.toFirstLower(name);
final JvmOperation op = this.typesFactory.createJvmOperation();
op.setVisibility(JvmVisibility.PUBLIC);
op.setReturnType(this._dtoModelExtensions.toDtoTypeReferenceWithMultiplicity(prop));
op.setSimpleName(this._methodNamingExtensions.toCollectionInternalGetterName(prop));
StringConcatenation _builder = new StringConcatenation();
_builder.append("Returns the list of ");
String _htmlCode = this.htmlCode(this._dtoModelExtensions.toTypeName(prop));
_builder.append(_htmlCode);
_builder.append("s thereby lazy initializing it. For internal use only!");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("@return list - the resulting list");
_builder.newLine();
this.setDocumentation(op, _builder);
final Procedure1<ITreeAppendable> _function = (ITreeAppendable it) -> {
boolean _equals = Objects.equal(it, null);
if (_equals) {
return;
}
ITreeAppendable p = it.trace(prop);
final String fieldRef = CommonTypesBuilder.operator_plus("this.", fieldName);
String _plus = CommonTypesBuilder.operator_plus("if (", fieldRef);
String _plus_1 = CommonTypesBuilder.operator_plus(_plus, " == null)");
ITreeAppendable _doubleGreaterThan = this._treeAppendableExtensions.operator_doubleGreaterThan(p, _plus_1);
this._treeAppendableExtensions.operator_tripleGreaterThan(_doubleGreaterThan, " {");
ITreeAppendable _doubleGreaterThan_1 = this._treeAppendableExtensions.operator_doubleGreaterThan(p, fieldRef);
String _typeName = this._dtoModelExtensions.toTypeName(prop);
String _plus_2 = CommonTypesBuilder.operator_plus(" = new java.util.ArrayList<", _typeName);
String _plus_3 = CommonTypesBuilder.operator_plus(_plus_2, ">();");
this._treeAppendableExtensions.operator_doubleGreaterThan(_doubleGreaterThan_1, _plus_3);
this._treeAppendableExtensions.operator_tripleLessThan(p, "}");
String _plus_4 = CommonTypesBuilder.operator_plus("return ", fieldRef);
String _plus_5 = CommonTypesBuilder.operator_plus(_plus_4, ";");
this._treeAppendableExtensions.operator_doubleGreaterThan(p, _plus_5);
};
this.setBody(op, _function);
_xblockexpression = this.<JvmOperation>associate(prop, op);
}
return _xblockexpression;
}
protected JvmOperation _toInternalCollectionGetter(final LDtoAbstractAttribute prop, final String name) {
JvmOperation _xblockexpression = null;
{
final String fieldName = StringExtensions.toFirstLower(name);
final JvmOperation op = this.typesFactory.createJvmOperation();
op.setVisibility(JvmVisibility.PUBLIC);
op.setReturnType(this._dtoModelExtensions.toDtoTypeReferenceWithMultiplicity(prop));
op.setSimpleName(this._methodNamingExtensions.toCollectionInternalGetterName(prop));
StringConcatenation _builder = new StringConcatenation();
_builder.append("Returns the list of ");
String _htmlCode = this.htmlCode(this._dtoModelExtensions.toTypeName(prop));
_builder.append(_htmlCode);
_builder.append("s thereby lazy initializing it. For internal use only!");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("@return list - the resulting list");
_builder.newLine();
this.setDocumentation(op, _builder);
final Procedure1<ITreeAppendable> _function = (ITreeAppendable it) -> {
boolean _equals = Objects.equal(it, null);
if (_equals) {
return;
}
ITreeAppendable p = it.trace(prop);
final String fieldRef = CommonTypesBuilder.operator_plus("this.", fieldName);
String _plus = CommonTypesBuilder.operator_plus("if (", fieldRef);
String _plus_1 = CommonTypesBuilder.operator_plus(_plus, " == null)");
ITreeAppendable _doubleGreaterThan = this._treeAppendableExtensions.operator_doubleGreaterThan(p, _plus_1);
this._treeAppendableExtensions.operator_tripleGreaterThan(_doubleGreaterThan, " {");
ITreeAppendable _doubleGreaterThan_1 = this._treeAppendableExtensions.operator_doubleGreaterThan(p, fieldRef);
String _qualifiedName = this._dtoModelExtensions.toDtoTypeReference(prop).getQualifiedName();
String _plus_2 = CommonTypesBuilder.operator_plus(" = new java.util.ArrayList<", _qualifiedName);
String _plus_3 = CommonTypesBuilder.operator_plus(_plus_2, ">();");
this._treeAppendableExtensions.operator_doubleGreaterThan(_doubleGreaterThan_1, _plus_3);
this._treeAppendableExtensions.operator_tripleLessThan(p, "}");
String _plus_4 = CommonTypesBuilder.operator_plus("return ", fieldRef);
String _plus_5 = CommonTypesBuilder.operator_plus(_plus_4, ";");
this._treeAppendableExtensions.operator_doubleGreaterThan(p, _plus_5);
};
this.setBody(op, _function);
_xblockexpression = this.<JvmOperation>associate(prop, op);
}
return _xblockexpression;
}
/**
* Builds a remover method for a *toMany relation like
* <code>Order.removeFromOrderLines(OrderLine orderLine)</code>.
*/
protected JvmOperation _toRemover(final LDtoAbstractReference prop, final String propertyName) {
final String paramName = StringExtensions.toFirstLower(this._dtoModelExtensions.toTypeName(prop));
final JvmOperation op = this.typesFactory.createJvmOperation();
op.setVisibility(JvmVisibility.PUBLIC);
op.setReturnType(this.references.getTypeForName(Void.TYPE, prop));
op.setSimpleName(this._methodNamingExtensions.toCollectionRemoverName(prop));
JvmTypeReference _dtoTypeReference = this._dtoModelExtensions.toDtoTypeReference(prop);
boolean _notEquals = (!Objects.equal(_dtoTypeReference, null));
if (_notEquals) {
EList<JvmFormalParameter> _parameters = op.getParameters();
JvmFormalParameter _parameter = this.toParameter(prop, paramName, this._dtoModelExtensions.toDtoTypeReference(prop));
this.<JvmFormalParameter>operator_add(_parameters, _parameter);
}
LFeature _opposite = this._dtoModelExtensions.opposite(prop);
boolean _notEquals_1 = (!Objects.equal(_opposite, null));
if (_notEquals_1) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("Removes the given ");
_builder.append(paramName);
_builder.append(" from this object. <p>");
_builder.newLineIfNotEmpty();
{
boolean _isCascading = prop.isCascading();
if (_isCascading) {
_builder.append("Since the reference is a cascading reference, the opposite reference (");
String _typeName = this._dtoModelExtensions.toTypeName(prop);
_builder.append(_typeName);
_builder.append(".");
String _firstLower = StringExtensions.toFirstLower(this._dtoModelExtensions.opposite(prop).getName());
_builder.append(_firstLower);
_builder.append(")");
_builder.newLineIfNotEmpty();
_builder.append("of the ");
_builder.append(paramName);
_builder.append(" will be handled automatically and no further coding is required to keep them in sync. ");
_builder.newLineIfNotEmpty();
_builder.append("See {@link ");
String _typeName_1 = this._dtoModelExtensions.toTypeName(prop);
_builder.append(_typeName_1);
_builder.append("#");
String _setterName = this._methodNamingExtensions.toSetterName(this._dtoModelExtensions.opposite(prop));
_builder.append(_setterName);
_builder.append("(");
String _typeName_2 = this._dtoModelExtensions.toTypeName(prop);
_builder.append(_typeName_2);
_builder.append(")}.");
_builder.newLineIfNotEmpty();
}
}
_builder.newLine();
_builder.append("@param ");
_builder.append(paramName);
_builder.append(" - the property");
_builder.newLineIfNotEmpty();
_builder.append("@throws RuntimeException if instance is <code>disposed</code>");
_builder.newLine();
this.setDocumentation(op, _builder);
}
final LFeature opposite = this._dtoModelExtensions.opposite(prop);
final boolean cascading = prop.isCascading();
StringConcatenationClient _client = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
_builder.append("checkDisposed();");
_builder.newLine();
_builder.newLine();
{
boolean _notEquals = (!Objects.equal(opposite, null));
if (_notEquals) {
_builder.append(paramName);
_builder.append(".");
String _setterName = DtoTypesBuilder.this._methodNamingExtensions.toSetterName(DtoTypesBuilder.this._dtoModelExtensions.opposite(prop));
_builder.append(_setterName);
_builder.append("(null);");
_builder.newLineIfNotEmpty();
} else {
String _collectionInternalRemoverName = DtoTypesBuilder.this._methodNamingExtensions.toCollectionInternalRemoverName(prop);
_builder.append(_collectionInternalRemoverName);
_builder.append("(");
_builder.append(paramName);
_builder.append(");");
_builder.newLineIfNotEmpty();
}
}
}
};
this.setBody(op, _client);
return this.<JvmOperation>associate(prop, op);
}
public JvmOperation toProxyRemover(final LDtoAbstractReference prop, final String propertyName) {
final String paramName = StringExtensions.toFirstLower(this._dtoModelExtensions.toTypeName(prop));
final JvmOperation op = this.typesFactory.createJvmOperation();
op.setVisibility(JvmVisibility.PUBLIC);
op.setReturnType(this.references.getTypeForName(Void.TYPE, prop));
op.setSimpleName(this._methodNamingExtensions.toCollectionRemoverName(prop));
EList<JvmFormalParameter> _parameters = op.getParameters();
JvmFormalParameter _parameter = this.toParameter(prop, paramName, this.references.getTypeForName(ICrossReference.class, prop));
this.<JvmFormalParameter>operator_add(_parameters, _parameter);
StringConcatenation _builder = new StringConcatenation();
_builder.append("Removes the proxy cross reference ");
_builder.append(paramName);
_builder.append(" from this object. <p>");
_builder.newLineIfNotEmpty();
this.setDocumentation(op, _builder);
final Procedure1<ITreeAppendable> _function = (ITreeAppendable it) -> {
boolean _equals = Objects.equal(it, null);
if (_equals) {
return;
}
final ITreeAppendable p = it.trace(prop);
String _checkDisposedCall = this.toCheckDisposedCall(prop);
this._treeAppendableExtensions.operator_add(p, _checkDisposedCall);
String _getterName = this._methodNamingExtensions.toGetterName(prop);
String _plus = CommonTypesBuilder.operator_plus(_getterName, "().remove(");
String _plus_1 = CommonTypesBuilder.operator_plus(_plus, paramName);
String _plus_2 = CommonTypesBuilder.operator_plus(_plus_1, ");");
this._treeAppendableExtensions.operator_doubleGreaterThan(p, _plus_2);
};
this.setBody(op, _function);
return this.<JvmOperation>associate(prop, op);
}
/**
* Builds a remover method for a *toMany relation like
* <code>Order.removeFromOrderLines(OrderLine orderLine)</code>.
*/
protected JvmOperation _toRemover(final LDtoAbstractAttribute prop, final String propertyName) {
final String paramName = StringExtensions.toFirstLower(this._dtoModelExtensions.toTypeName(prop));
final JvmOperation op = this.typesFactory.createJvmOperation();
op.setVisibility(JvmVisibility.PUBLIC);
op.setReturnType(this.references.getTypeForName(Void.TYPE, prop));
op.setSimpleName(this._methodNamingExtensions.toCollectionRemoverName(prop));
JvmTypeReference _dtoTypeReference = this._dtoModelExtensions.toDtoTypeReference(prop);
boolean _notEquals = (!Objects.equal(_dtoTypeReference, null));
if (_notEquals) {
EList<JvmFormalParameter> _parameters = op.getParameters();
JvmFormalParameter _parameter = this.toParameter(prop, paramName, this._dtoModelExtensions.toDtoTypeReference(prop));
this.<JvmFormalParameter>operator_add(_parameters, _parameter);
}
LFeature _opposite = this._dtoModelExtensions.opposite(prop);
boolean _notEquals_1 = (!Objects.equal(_opposite, null));
if (_notEquals_1) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("Removes the given ");
_builder.append(paramName);
_builder.append(" from this object. <p>");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("@param ");
_builder.append(paramName);
_builder.append(" - the property");
_builder.newLineIfNotEmpty();
_builder.append("@throws RuntimeException if instance is <code>disposed</code>");
_builder.newLine();
this.setDocumentation(op, _builder);
} else {
}
final LFeature opposite = this._dtoModelExtensions.opposite(prop);
StringConcatenationClient _client = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
_builder.append("checkDisposed();");
_builder.newLine();
_builder.newLine();
{
boolean _notEquals = (!Objects.equal(opposite, null));
if (_notEquals) {
_builder.append(paramName);
_builder.append(".");
String _setterName = DtoTypesBuilder.this._methodNamingExtensions.toSetterName(DtoTypesBuilder.this._dtoModelExtensions.opposite(prop));
_builder.append(_setterName);
_builder.append("(null);");
_builder.newLineIfNotEmpty();
} else {
String _collectionInternalRemoverName = DtoTypesBuilder.this._methodNamingExtensions.toCollectionInternalRemoverName(prop);
_builder.append(_collectionInternalRemoverName);
_builder.append("(");
_builder.append(paramName);
_builder.append(");");
_builder.newLineIfNotEmpty();
}
}
}
};
this.setBody(op, _client);
return this.<JvmOperation>associate(prop, op);
}
public JvmOperation toMapperBindMethod(final LDto dto) {
final JvmOperation op = this.typesFactory.createJvmOperation();
op.setVisibility(JvmVisibility.PROTECTED);
op.setReturnType(this.references.getTypeForName(Void.TYPE, dto));
op.setSimpleName("bindMapperAccess");
EList<JvmFormalParameter> _parameters = op.getParameters();
JvmFormalParameter _parameter = this.toParameter(dto, "mapperAccess", this.references.getTypeForName(IMapperAccess.class, dto, null));
this.<JvmFormalParameter>operator_add(_parameters, _parameter);
StringConcatenation _builder = new StringConcatenation();
_builder.append("Called by OSGi-DS. Binds the mapper access service.");
_builder.newLine();
_builder.newLine();
_builder.append("@param service - The mapper access service");
_builder.newLine();
this.setDocumentation(op, _builder);
StringConcatenationClient _client = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
_builder.append("this.mapperAccess = mapperAccess;");
_builder.newLine();
}
};
this.setBody(op, _client);
return this.<JvmOperation>associate(dto, op);
}
public JvmOperation toMapperUnbindMethod(final LDto dto) {
final JvmOperation op = this.typesFactory.createJvmOperation();
op.setVisibility(JvmVisibility.PROTECTED);
op.setReturnType(this.references.getTypeForName(Void.TYPE, dto));
op.setSimpleName("unbindMapperAccess");
EList<JvmFormalParameter> _parameters = op.getParameters();
JvmFormalParameter _parameter = this.toParameter(dto, "mapperAccess", this.references.getTypeForName(IMapperAccess.class, dto, null));
this.<JvmFormalParameter>operator_add(_parameters, _parameter);
StringConcatenation _builder = new StringConcatenation();
_builder.append("Called by OSGi-DS. Binds the mapper access service.");
_builder.newLine();
_builder.newLine();
_builder.append("@param service - The mapper access service");
_builder.newLine();
this.setDocumentation(op, _builder);
StringConcatenationClient _client = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
_builder.append("this.mapperAccess = null;");
_builder.newLine();
}
};
this.setBody(op, _client);
return this.<JvmOperation>associate(dto, op);
}
public JvmField toMapperField(final LDtoAbstractReference prop) {
JvmField _xblockexpression = null;
{
final JvmField jvmField = this.typesFactory.createJvmField();
jvmField.setSimpleName(this._methodNamingExtensions.toMapperFieldName(prop));
jvmField.setVisibility(JvmVisibility.PRIVATE);
jvmField.setType(this.cloneWithProxies(this._dtoModelExtensions.toMapperTypeReference(prop.getType())));
this.annotationCompiler.processAnnotation(prop, jvmField);
_xblockexpression = this.<JvmField>associate(prop, jvmField);
}
return _xblockexpression;
}
public JvmOperation toGetToDtoMapperAccess(final LDto dto) {
final JvmOperation op = this.typesFactory.createJvmOperation();
op.setVisibility(JvmVisibility.PROTECTED);
final JvmTypeParameter dTypeParam = this.typesFactory.createJvmTypeParameter();
dTypeParam.setName("D");
EList<JvmTypeParameter> _typeParameters = op.getTypeParameters();
this.<JvmTypeParameter>operator_add(_typeParameters, dTypeParam);
final JvmTypeParameter eTypeParam = this.typesFactory.createJvmTypeParameter();
eTypeParam.setName("E");
EList<JvmTypeParameter> _typeParameters_1 = op.getTypeParameters();
this.<JvmTypeParameter>operator_add(_typeParameters_1, eTypeParam);
final JvmGenericType dType = this.createJvmGenericType(this.typesFactory, "D");
final JvmParameterizedTypeReference dTypeRef = this.typesFactory.createJvmParameterizedTypeReference();
dTypeRef.setType(dType);
final JvmGenericType eType = this.createJvmGenericType(this.typesFactory, "E");
final JvmParameterizedTypeReference eTypeRef = this.typesFactory.createJvmParameterizedTypeReference();
eTypeRef.setType(eType);
op.setReturnType(this.references.getTypeForName(IMapper.class, dto, this.cloneWithProxies(dTypeRef),
this.cloneWithProxies(eTypeRef)));
op.setSimpleName("getToDtoMapper");
EList<JvmFormalParameter> _parameters = op.getParameters();
JvmFormalParameter _parameter = this.toParameter(dto, "dtoClass", this.references.getTypeForName(Class.class, dto, this.cloneWithProxies(dTypeRef)));
this.<JvmFormalParameter>operator_add(_parameters, _parameter);
EList<JvmFormalParameter> _parameters_1 = op.getParameters();
JvmFormalParameter _parameter_1 = this.toParameter(dto, "entityClass", this.references.getTypeForName(Class.class, dto, this.cloneWithProxies(eTypeRef)));
this.<JvmFormalParameter>operator_add(_parameters_1, _parameter_1);
StringConcatenation _builder = new StringConcatenation();
_builder.append("Returns the mapper instance that may map between the given dto and entity. Or <code>null</code> if no mapper is available.");
_builder.newLine();
_builder.newLine();
_builder.append("@param dtoClass - the class of the dto that should be mapped");
_builder.newLine();
_builder.append("@param entityClass - the class of the entity that should be mapped");
_builder.newLine();
_builder.append("@return the mapper instance or <code>null</code>");
this.setDocumentation(op, _builder);
StringConcatenationClient _client = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
_builder.append("return mapperAccess.getToDtoMapper(dtoClass, entityClass);");
_builder.newLine();
}
};
this.setBody(op, _client);
return this.<JvmOperation>associate(dto, op);
}
public JvmOperation toGetToEntityMapperAccess(final LDto dto) {
final JvmOperation op = this.typesFactory.createJvmOperation();
op.setVisibility(JvmVisibility.PROTECTED);
final JvmTypeParameter dTypeParam = this.typesFactory.createJvmTypeParameter();
dTypeParam.setName("D");
EList<JvmTypeParameter> _typeParameters = op.getTypeParameters();
this.<JvmTypeParameter>operator_add(_typeParameters, dTypeParam);
final JvmTypeParameter eTypeParam = this.typesFactory.createJvmTypeParameter();
eTypeParam.setName("E");
EList<JvmTypeParameter> _typeParameters_1 = op.getTypeParameters();
this.<JvmTypeParameter>operator_add(_typeParameters_1, eTypeParam);
final JvmGenericType dType = this.createJvmGenericType(this.typesFactory, "D");
final JvmParameterizedTypeReference dTypeRef = this.typesFactory.createJvmParameterizedTypeReference();
dTypeRef.setType(dType);
final JvmGenericType eType = this.createJvmGenericType(this.typesFactory, "E");
final JvmParameterizedTypeReference eTypeRef = this.typesFactory.createJvmParameterizedTypeReference();
eTypeRef.setType(eType);
op.setReturnType(this.references.getTypeForName(IMapper.class, dto, this.cloneWithProxies(dTypeRef),
this.cloneWithProxies(eTypeRef)));
op.setSimpleName("getToEntityMapper");
EList<JvmFormalParameter> _parameters = op.getParameters();
JvmFormalParameter _parameter = this.toParameter(dto, "dtoClass", this.references.getTypeForName(Class.class, dto, this.cloneWithProxies(dTypeRef)));
this.<JvmFormalParameter>operator_add(_parameters, _parameter);
EList<JvmFormalParameter> _parameters_1 = op.getParameters();
JvmFormalParameter _parameter_1 = this.toParameter(dto, "entityClass", this.references.getTypeForName(Class.class, dto, this.cloneWithProxies(eTypeRef)));
this.<JvmFormalParameter>operator_add(_parameters_1, _parameter_1);
StringConcatenation _builder = new StringConcatenation();
_builder.append("Returns the mapper instance that may map between the given dto and entity. Or <code>null</code> if no mapper is available.");
_builder.newLine();
_builder.newLine();
_builder.append("@param dtoClass - the class of the dto that should be mapped");
_builder.newLine();
_builder.append("@param entityClass - the class of the entity that should be mapped");
_builder.newLine();
_builder.append("@return the mapper instance or <code>null</code>");
this.setDocumentation(op, _builder);
StringConcatenationClient _client = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
_builder.append("return mapperAccess.getToEntityMapper(dtoClass, entityClass);");
_builder.newLine();
}
};
this.setBody(op, _client);
return this.<JvmOperation>associate(dto, op);
}
public JvmOperation toMapToDto(final LDto dto) {
final JvmOperation op = this.typesFactory.createJvmOperation();
op.setVisibility(JvmVisibility.PUBLIC);
op.setReturnType(this.references.getTypeForName(Void.TYPE, dto));
op.setSimpleName("mapToDTO");
EList<JvmFormalParameter> _parameters = op.getParameters();
JvmFormalParameter _parameter = this.toParameter(dto, "dto", this.findDtoTypeReference(dto));
this.<JvmFormalParameter>operator_add(_parameters, _parameter);
EList<JvmFormalParameter> _parameters_1 = op.getParameters();
LType _wrappedType = dto.getWrappedType();
JvmTypeReference _typeReference = null;
if (_wrappedType!=null) {
_typeReference=this._dtoModelExtensions.toTypeReference(_wrappedType);
}
JvmFormalParameter _parameter_1 = this.toParameter(dto, "entity", _typeReference);
this.<JvmFormalParameter>operator_add(_parameters_1, _parameter_1);
EList<JvmFormalParameter> _parameters_2 = op.getParameters();
JvmFormalParameter _parameter_2 = this.toParameter(dto, "context", this.references.getTypeForName(MappingContext.class, dto));
this.<JvmFormalParameter>operator_add(_parameters_2, _parameter_2);
StringConcatenation _builder = new StringConcatenation();
_builder.append("Maps the entity {@link ");
String _name = this._dtoModelExtensions.toName(dto.getWrappedType());
_builder.append(_name);
_builder.append("} to the dto {@link ");
String _name_1 = this._dtoModelExtensions.toName(dto);
_builder.append(_name_1);
_builder.append("}.");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("@param dto - The target dto");
_builder.newLine();
_builder.append("@param entity - The source entity");
_builder.newLine();
_builder.append("@param context - The context to get information about depth,...");
_builder.newLine();
this.setDocumentation(op, _builder);
StringConcatenationClient _client = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
_builder.append("if(context == null){");
_builder.newLine();
_builder.append("\t");
_builder.append("throw new IllegalArgumentException(\"Please pass a context!\");");
_builder.newLine();
_builder.append("}");
_builder.newLine();
{
boolean _isBean = DtoTypesBuilder.this._dtoModelExtensions.isBean(dto.getWrappedType());
boolean _not = (!_isBean);
if (_not) {
_builder.append("context.register(createDtoHash(entity), dto);");
_builder.newLine();
_builder.newLine();
}
}
{
LDto _superType = dto.getSuperType();
boolean _notEquals = (!Objects.equal(_superType, null));
if (_notEquals) {
_builder.append("super.mapToDTO(dto, entity, context);");
_builder.newLine();
_builder.newLine();
}
}
{
final Function1<LDtoFeature, Boolean> _function = (LDtoFeature it) -> {
boolean _or = false;
boolean _or_1 = false;
boolean _inherited = DtoTypesBuilder.this._dtoModelExtensions.inherited(it);
if (_inherited) {
_or_1 = true;
} else {
LDtoMapper _mapper = it.getMapper();
XExpression _toDTO = null;
if (_mapper!=null) {
_toDTO=_mapper.getToDTO();
}
boolean _notEquals_1 = (!Objects.equal(_toDTO, null));
_or_1 = _notEquals_1;
}
if (_or_1) {
_or = true;
} else {
_or = ((it instanceof LDtoAbstractAttribute) && DtoTypesBuilder.this._dtoModelExtensions.typeIsStateClass(((LDtoAbstractAttribute) it)));
}
return Boolean.valueOf(_or);
};
Iterable<LDtoFeature> _filter = IterableExtensions.<LDtoFeature>filter(dto.getFeatures(), _function);
for(final LDtoFeature f : _filter) {
{
boolean _isToMany = DtoTypesBuilder.this._dtoModelExtensions.getBounds(f).isToMany();
boolean _not_1 = (!_isToMany);
if (_not_1) {
_builder.append("dto.set");
String _firstUpper = StringExtensions.toFirstUpper(DtoTypesBuilder.this._dtoModelExtensions.toName(f));
_builder.append(_firstUpper);
_builder.append("(");
String _mapPropertyToDto = DtoTypesBuilder.this._methodNamingExtensions.toMapPropertyToDto(f);
_builder.append(_mapPropertyToDto);
_builder.append("(entity, context));");
_builder.newLineIfNotEmpty();
} else {
}
}
}
}
}
};
this.setBody(op, _client);
return this.<JvmOperation>associate(dto, op);
}
public JvmOperation toInstallLazyCollections(final LDto dto) {
final JvmOperation op = this.typesFactory.createJvmOperation();
op.setVisibility(JvmVisibility.PROTECTED);
op.setReturnType(this.references.getTypeForName(Void.TYPE, dto));
op.setSimpleName("installLazyCollections");
StringConcatenation _builder = new StringConcatenation();
_builder.append("Installs lazy collection resolving for entity {@link ");
String _name = this._dtoModelExtensions.toName(dto.getWrappedType());
_builder.append(_name);
_builder.append("} to the dto {@link ");
String _name_1 = this._dtoModelExtensions.toName(dto);
_builder.append(_name_1);
_builder.append("}.");
_builder.newLineIfNotEmpty();
this.setDocumentation(op, _builder);
StringConcatenationClient _client = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
{
LDto _superType = dto.getSuperType();
boolean _tripleNotEquals = (_superType != null);
if (_tripleNotEquals) {
_builder.append("super.installLazyCollections();");
_builder.newLine();
}
}
{
final Function1<LDtoAbstractReference, Boolean> _function = (LDtoAbstractReference it) -> {
return Boolean.valueOf((DtoTypesBuilder.this._dtoModelExtensions.inherited(it) && (!DtoTypesBuilder.this._dtoModelExtensions.isBean(dto.getWrappedType()))));
};
Iterable<LDtoAbstractReference> _filter = IterableExtensions.<LDtoAbstractReference>filter(dto.getReferences(), _function);
for(final LDtoAbstractReference f : _filter) {
{
boolean _isToMany = DtoTypesBuilder.this._dtoModelExtensions.getBounds(f).isToMany();
if (_isToMany) {
{
boolean _isContainmentReference = DtoTypesBuilder.this._dtoModelExtensions.isContainmentReference(f);
if (_isContainmentReference) {
String _name = DtoTypesBuilder.this._dtoModelExtensions.toName(f);
_builder.append(_name);
_builder.append(" = new org.eclipse.osbp.dsl.dto.lib.OppositeContainmentDtoList<>(");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t\t");
_builder.append("org.eclipse.osbp.dsl.dto.lib.MappingContext.getCurrent(),");
_builder.newLine();
_builder.append("\t\t\t\t");
String _simpleName = DtoTypesBuilder.this._dtoModelExtensions.toDtoTypeReference(f).getSimpleName();
_builder.append(_simpleName, "\t\t\t\t");
_builder.append(".class, this, \"");
String _name_1 = DtoTypesBuilder.this._dtoModelExtensions.opposite(f).getName();
_builder.append(_name_1, "\t\t\t\t");
_builder.append(".");
LFeature _opposite = DtoTypesBuilder.this._dtoModelExtensions.opposite(f);
String _dtoIdAttribute = DtoTypesBuilder.this.toDtoIdAttribute(((LReference) _opposite));
_builder.append(_dtoIdAttribute, "\t\t\t\t");
_builder.append("\",");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t\t");
_builder.append("(java.util.function.Supplier<Object> & Serializable) () -> this.get");
String _firstUpper = StringExtensions.toFirstUpper(dto.getIdAttribute().getName());
_builder.append(_firstUpper, "\t\t\t\t");
_builder.append("(), this);");
_builder.newLineIfNotEmpty();
} else {
String _name_2 = DtoTypesBuilder.this._dtoModelExtensions.toName(f);
_builder.append(_name_2);
_builder.append(" = new org.eclipse.osbp.dsl.dto.lib.OppositeDtoList<>(");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t\t");
_builder.append("org.eclipse.osbp.dsl.dto.lib.MappingContext.getCurrent(),");
_builder.newLine();
_builder.append("\t\t\t\t");
String _simpleName_1 = DtoTypesBuilder.this._dtoModelExtensions.toDtoTypeReference(f).getSimpleName();
_builder.append(_simpleName_1, "\t\t\t\t");
_builder.append(".class, \"");
String _name_3 = DtoTypesBuilder.this._dtoModelExtensions.opposite(f).getName();
_builder.append(_name_3, "\t\t\t\t");
_builder.append(".");
LFeature _opposite_1 = DtoTypesBuilder.this._dtoModelExtensions.opposite(f);
String _dtoIdAttribute_1 = DtoTypesBuilder.this.toDtoIdAttribute(((LReference) _opposite_1));
_builder.append(_dtoIdAttribute_1, "\t\t\t\t");
_builder.append("\",");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t\t");
_builder.append("(java.util.function.Supplier<Object> & Serializable) () -> this.get");
String _firstUpper_1 = StringExtensions.toFirstUpper(dto.getIdAttribute().getName());
_builder.append(_firstUpper_1, "\t\t\t\t");
_builder.append("(), this);");
_builder.newLineIfNotEmpty();
}
}
}
}
}
}
}
};
this.setBody(op, _client);
return this.<JvmOperation>associate(dto, op);
}
public String toDtoIdAttribute(final LReference ref) {
return this._dtoModelExtensions.idAttribute(this._dtoModelExtensions.toRawType(ref)).getName();
}
public JvmOperation toFirePropertyChange(final LClass sourceElement, final boolean useVersion) {
JvmOperation _xblockexpression = null;
{
final JvmOperation op = this.typesFactory.createJvmOperation();
op.setVisibility(JvmVisibility.PUBLIC);
op.setSimpleName("firePropertyChange");
op.setReturnType(this.references.getTypeForName(Void.TYPE, sourceElement, null));
EList<JvmFormalParameter> _parameters = op.getParameters();
JvmFormalParameter _parameter = this.toParameter(sourceElement, "propertyName", this.references.getTypeForName(String.class, sourceElement, null));
this.<JvmFormalParameter>operator_add(_parameters, _parameter);
EList<JvmFormalParameter> _parameters_1 = op.getParameters();
JvmFormalParameter _parameter_1 = this.toParameter(sourceElement, "oldValue",
this.references.getTypeForName(Object.class, sourceElement, null));
this.<JvmFormalParameter>operator_add(_parameters_1, _parameter_1);
EList<JvmFormalParameter> _parameters_2 = op.getParameters();
JvmFormalParameter _parameter_2 = this.toParameter(sourceElement, "newValue",
this.references.getTypeForName(Object.class, sourceElement, null));
this.<JvmFormalParameter>operator_add(_parameters_2, _parameter_2);
StringConcatenation _builder = new StringConcatenation();
_builder.append("@see PropertyChangeSupport#firePropertyChange(String, Object, Object)");
this.setDocumentation(op, _builder);
StringConcatenationClient _client = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
_builder.append("propertyChangeSupport.firePropertyChange(propertyName, oldValue, newValue);");
_builder.newLine();
}
};
this.setBody(op, _client);
_xblockexpression = this.<JvmOperation>associate(sourceElement, op);
}
return _xblockexpression;
}
public JvmOperation toMapToEntity(final LDto dto) {
final JvmOperation op = this.typesFactory.createJvmOperation();
op.setVisibility(JvmVisibility.PUBLIC);
op.setReturnType(this.references.getTypeForName(Void.TYPE, dto));
op.setSimpleName("mapToEntity");
EList<JvmFormalParameter> _parameters = op.getParameters();
JvmFormalParameter _parameter = this.toParameter(dto, "dto", this.findDtoTypeReference(dto));
this.<JvmFormalParameter>operator_add(_parameters, _parameter);
EList<JvmFormalParameter> _parameters_1 = op.getParameters();
LType _wrappedType = dto.getWrappedType();
JvmTypeReference _typeReference = null;
if (_wrappedType!=null) {
_typeReference=this._dtoModelExtensions.toTypeReference(_wrappedType);
}
JvmFormalParameter _parameter_1 = this.toParameter(dto, "entity", _typeReference);
this.<JvmFormalParameter>operator_add(_parameters_1, _parameter_1);
EList<JvmFormalParameter> _parameters_2 = op.getParameters();
JvmFormalParameter _parameter_2 = this.toParameter(dto, "context", this.references.getTypeForName(MappingContext.class, dto));
this.<JvmFormalParameter>operator_add(_parameters_2, _parameter_2);
StringConcatenation _builder = new StringConcatenation();
_builder.append("Maps the dto {@link ");
String _name = this._dtoModelExtensions.toName(dto);
_builder.append(_name);
_builder.append("} to the entity {@link ");
String _name_1 = this._dtoModelExtensions.toName(dto.getWrappedType());
_builder.append(_name_1);
_builder.append("}.");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("@param dto - The source dto");
_builder.newLine();
_builder.append("@param entity - The target entity");
_builder.newLine();
_builder.append("@param context - The context to get information about depth,...");
_builder.newLine();
this.setDocumentation(op, _builder);
StringConcatenationClient _client = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
_builder.append("if(context == null){");
_builder.newLine();
_builder.append("\t");
_builder.append("throw new IllegalArgumentException(\"Please pass a context!\");");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
{
boolean _isBean = DtoTypesBuilder.this._dtoModelExtensions.isBean(dto.getWrappedType());
boolean _not = (!_isBean);
if (_not) {
_builder.append("context.register(createEntityHash(dto), entity);");
_builder.newLine();
_builder.append("context.registerMappingRoot(createEntityHash(dto), dto);");
_builder.newLine();
}
}
{
LDto _superType = dto.getSuperType();
boolean _notEquals = (!Objects.equal(_superType, null));
if (_notEquals) {
_builder.append("super.mapToEntity(dto, entity, context);");
_builder.newLine();
}
}
_builder.newLine();
{
final Function1<LDtoFeature, Boolean> _function = (LDtoFeature it) -> {
boolean _or = false;
boolean _or_1 = false;
boolean _inherited = DtoTypesBuilder.this._dtoModelExtensions.inherited(it);
if (_inherited) {
_or_1 = true;
} else {
LDtoMapper _mapper = it.getMapper();
XExpression _fromDTO = null;
if (_mapper!=null) {
_fromDTO=_mapper.getFromDTO();
}
boolean _notEquals_1 = (!Objects.equal(_fromDTO, null));
_or_1 = _notEquals_1;
}
if (_or_1) {
_or = true;
} else {
_or = ((it instanceof LDtoAbstractAttribute) && DtoTypesBuilder.this._dtoModelExtensions.typeIsStateClass(((LDtoAbstractAttribute) it)));
}
return Boolean.valueOf(_or);
};
Iterable<LDtoFeature> _filter = IterableExtensions.<LDtoFeature>filter(dto.getFeatures(), _function);
for(final LDtoFeature f : _filter) {
{
boolean _isToMany = DtoTypesBuilder.this._dtoModelExtensions.getBounds(f).isToMany();
boolean _not_1 = (!_isToMany);
if (_not_1) {
{
if ((((f instanceof LDtoAbstractAttribute) && DtoTypesBuilder.this._dtoModelExtensions.typeIsStateClass(((LDtoAbstractAttribute) f))) || (!DtoTypesBuilder.this._dtoModelExtensions.derived(f)))) {
_builder.append("entity.set");
String _firstUpper = StringExtensions.toFirstUpper(DtoTypesBuilder.this._dtoModelExtensions.toName(f));
_builder.append(_firstUpper);
_builder.append("(");
String _mapPropertyToEntity = DtoTypesBuilder.this._methodNamingExtensions.toMapPropertyToEntity(f);
_builder.append(_mapPropertyToEntity);
_builder.append("(dto, entity, context));");
_builder.newLineIfNotEmpty();
}
}
} else {
String _mapPropertyToEntity_1 = DtoTypesBuilder.this._methodNamingExtensions.toMapPropertyToEntity(f);
_builder.append(_mapPropertyToEntity_1);
_builder.append("(dto, entity, context);");
_builder.newLineIfNotEmpty();
}
}
}
}
}
};
this.setBody(op, _client);
return this.<JvmOperation>associate(dto, op);
}
/**
* returns the mapper class type
*/
public JvmGenericType toMapperJvmType(final LDto lDto) {
JvmGenericType _xblockexpression = null;
{
final JvmGenericType type = this.createJvmGenericType(lDto, this._methodNamingExtensions.toFqnMapperName(lDto));
_xblockexpression = this.<JvmGenericType>associate(lDto, type);
}
return _xblockexpression;
}
protected JvmOperation _toMapToDtoProperty(final LDtoAbstractAttribute prop) {
JvmOperation _xblockexpression = null;
{
EObject _eContainer = prop.eContainer();
final LDto dto = ((LDto) _eContainer);
final JvmOperation op = this.typesFactory.createJvmOperation();
op.setVisibility(JvmVisibility.PROTECTED);
op.setReturnType(this._dtoModelExtensions.toDtoTypeReferenceWithMultiplicity(prop));
op.setSimpleName(this._methodNamingExtensions.toMapPropertyToDto(prop));
this.<JvmOperation>associate(prop, op);
final Procedure1<JvmOperation> _function = (JvmOperation it) -> {
EList<JvmFormalParameter> _parameters = it.getParameters();
LType _wrappedType = dto.getWrappedType();
JvmTypeReference _typeReference = null;
if (_wrappedType!=null) {
_typeReference=this._dtoModelExtensions.toTypeReference(_wrappedType);
}
JvmFormalParameter _parameter = this.toParameter(prop, "in", _typeReference);
this.<JvmFormalParameter>operator_add(_parameters, _parameter);
EList<JvmFormalParameter> _parameters_1 = it.getParameters();
JvmFormalParameter _parameter_1 = this.toParameter(prop, "context", this.references.getTypeForName(MappingContext.class, prop));
this.<JvmFormalParameter>operator_add(_parameters_1, _parameter_1);
StringConcatenation _builder = new StringConcatenation();
_builder.append("Maps the property ");
String _name = this._dtoModelExtensions.toName(prop);
_builder.append(_name);
_builder.append(" from the given entity to dto property.");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("@param in - The source entity");
_builder.newLine();
_builder.append("@param context - The context to get information about depth,...");
_builder.newLine();
_builder.append("@return the mapped value");
_builder.newLine();
this.setDocumentation(it, _builder);
final XExpression mapExpression = this._methodNamingExtensions.toMapToDtoExpression(prop);
boolean _notEquals = (!Objects.equal(mapExpression, null));
if (_notEquals) {
this.setBody(it, mapExpression);
} else {
LType _rawType = this._dtoModelExtensions.toRawType(prop);
if ((_rawType instanceof LBean)) {
boolean _isToMany = this._dtoModelExtensions.getBounds(prop).isToMany();
if (_isToMany) {
StringConcatenationClient _client = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
_builder.append("org.eclipse.osbp.dsl.dto.lib.IMapper<");
String _dTOBeanSimpleName = DtoTypesBuilder.this._methodNamingExtensions.toDTOBeanSimpleName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_dTOBeanSimpleName);
_builder.append(", ");
String _name = DtoTypesBuilder.this._dtoModelExtensions.toName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_name);
_builder.append("> mapper = getToDtoMapper(");
String _dTOBeanSimpleName_1 = DtoTypesBuilder.this._methodNamingExtensions.toDTOBeanSimpleName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_dTOBeanSimpleName_1);
_builder.append(".class, ");
String _name_1 = DtoTypesBuilder.this._dtoModelExtensions.toName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_name_1);
_builder.append(".class);");
_builder.newLineIfNotEmpty();
_builder.append("if(mapper == null) {");
_builder.newLine();
_builder.append("\t");
_builder.append("throw new IllegalStateException(\"Mapper must not be null!\");");
_builder.newLine();
_builder.append("} ");
_builder.newLine();
_builder.newLine();
_builder.append("if (context.isDetectRecursion(");
String _dTOBeanSimpleName_2 = DtoTypesBuilder.this._methodNamingExtensions.toDTOBeanSimpleName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_dTOBeanSimpleName_2);
_builder.append(".class)) {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("return java.util.Collections.emptyList();");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("context.increaseLevel();");
_builder.newLine();
_builder.append("List<");
String _dTOBeanSimpleName_3 = DtoTypesBuilder.this._methodNamingExtensions.toDTOBeanSimpleName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_dTOBeanSimpleName_3);
_builder.append("> results = new java.util.ArrayList<");
String _dTOBeanSimpleName_4 = DtoTypesBuilder.this._methodNamingExtensions.toDTOBeanSimpleName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_dTOBeanSimpleName_4);
_builder.append(">();");
_builder.newLineIfNotEmpty();
_builder.append("for (");
String _name_2 = DtoTypesBuilder.this._dtoModelExtensions.toName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_name_2);
_builder.append(" _entity : in.");
String _getterName = DtoTypesBuilder.this._methodNamingExtensions.toGetterName(prop);
_builder.append(_getterName);
_builder.append("()) {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
String _qualifiedName = DtoTypesBuilder.this._dtoModelExtensions.toDtoTypeReference(prop).getQualifiedName();
_builder.append(_qualifiedName, "\t");
_builder.append(" _dto = context.get(mapper.createDtoHash(_entity));");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("if (_dto == null) {");
_builder.newLine();
_builder.append("\t\t");
_builder.append("_dto = mapper.createDto();");
_builder.newLine();
_builder.append("\t\t");
_builder.append("mapper.mapToDTO(_dto, _entity, context);");
_builder.newLine();
_builder.append("\t");
_builder.append("} else {");
_builder.newLine();
_builder.append("\t\t");
_builder.append("if(context.isRefresh()){");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("mapper.mapToDTO(_dto, _entity, context);");
_builder.newLine();
_builder.append("\t\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.append("results.add(_dto);");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.append("context.decreaseLevel();");
_builder.newLine();
_builder.append("return results;");
}
};
this.setBody(it, _client);
} else {
StringConcatenationClient _client_1 = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
_builder.append("if(in.get");
String _firstUpper = StringExtensions.toFirstUpper(DtoTypesBuilder.this._dtoModelExtensions.toName(prop));
_builder.append(_firstUpper);
_builder.append("() != null) {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("// find a mapper that knows how to map the concrete input type.");
_builder.newLine();
_builder.append("\t");
_builder.append("org.eclipse.osbp.dsl.dto.lib.IMapper<");
String _dTOBeanSimpleName = DtoTypesBuilder.this._methodNamingExtensions.toDTOBeanSimpleName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_dTOBeanSimpleName, "\t");
_builder.append(", ");
String _name = DtoTypesBuilder.this._dtoModelExtensions.toName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_name, "\t");
_builder.append("> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<");
String _dTOBeanSimpleName_1 = DtoTypesBuilder.this._methodNamingExtensions.toDTOBeanSimpleName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_dTOBeanSimpleName_1, "\t");
_builder.append(", ");
String _name_1 = DtoTypesBuilder.this._dtoModelExtensions.toName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_name_1, "\t");
_builder.append(">) getToDtoMapper(");
String _dTOBeanSimpleName_2 = DtoTypesBuilder.this._methodNamingExtensions.toDTOBeanSimpleName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_dTOBeanSimpleName_2, "\t");
_builder.append(".class, in.get");
String _firstUpper_1 = StringExtensions.toFirstUpper(DtoTypesBuilder.this._dtoModelExtensions.toName(prop));
_builder.append(_firstUpper_1, "\t");
_builder.append("().getClass());");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("if(mapper == null) {");
_builder.newLine();
_builder.append("\t\t");
_builder.append("throw new IllegalStateException(\"Mapper must not be null!\");");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("\t");
String _dTOBeanSimpleName_3 = DtoTypesBuilder.this._methodNamingExtensions.toDTOBeanSimpleName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_dTOBeanSimpleName_3, "\t");
_builder.append(" dto = null;");
_builder.newLineIfNotEmpty();
{
boolean _isBean = DtoTypesBuilder.this._dtoModelExtensions.isBean(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
boolean _not = (!_isBean);
if (_not) {
_builder.append("dto = context.get(mapper.createDtoHash(in.");
String _getterName = DtoTypesBuilder.this._methodNamingExtensions.toGetterName(prop);
_builder.append(_getterName);
_builder.append("()));");
_builder.newLineIfNotEmpty();
_builder.append("if(dto != null) {");
_builder.newLine();
_builder.append("\t");
_builder.append("if(context.isRefresh()){");
_builder.newLine();
_builder.append("\t\t");
_builder.append("mapper.mapToDTO(dto, in.");
String _getterName_1 = DtoTypesBuilder.this._methodNamingExtensions.toGetterName(prop);
_builder.append(_getterName_1, "\t\t");
_builder.append("(), context);");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.append("return dto;");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
}
}
_builder.append("\t");
_builder.append("context.increaseLevel();");
_builder.newLine();
_builder.append("\t");
_builder.append("dto = mapper.createDto();");
_builder.newLine();
_builder.append("\t");
_builder.append("mapper.mapToDTO(dto, in.");
String _getterName_2 = DtoTypesBuilder.this._methodNamingExtensions.toGetterName(prop);
_builder.append(_getterName_2, "\t");
_builder.append("(), context);");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("context.decreaseLevel();");
_builder.newLine();
_builder.append("\t");
_builder.append("return dto;");
_builder.newLine();
_builder.append("} else {");
_builder.newLine();
_builder.append("\t");
_builder.append("return null;");
_builder.newLine();
_builder.append("}");
_builder.newLine();
}
};
this.setBody(it, _client_1);
}
} else {
boolean _typeIsBoolean = this._dtoModelExtensions.typeIsBoolean(prop);
if (_typeIsBoolean) {
StringConcatenationClient _client_2 = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
_builder.append("return in.is");
String _firstUpper = StringExtensions.toFirstUpper(DtoTypesBuilder.this._dtoModelExtensions.toName(prop));
_builder.append(_firstUpper);
_builder.append("();");
}
};
this.setBody(it, _client_2);
} else {
boolean _typeIsEnum = this._dtoModelExtensions.typeIsEnum(prop);
if (_typeIsEnum) {
StringConcatenationClient _client_3 = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
_builder.append("if(in.get");
String _firstUpper = StringExtensions.toFirstUpper(DtoTypesBuilder.this._dtoModelExtensions.toName(prop));
_builder.append(_firstUpper);
_builder.append("() != null) {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("return ");
String _dTOEnumFullyQualifiedName = DtoTypesBuilder.this._methodNamingExtensions.toDTOEnumFullyQualifiedName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_dTOEnumFullyQualifiedName, "\t");
_builder.append(".valueOf(in.get");
String _firstUpper_1 = StringExtensions.toFirstUpper(DtoTypesBuilder.this._dtoModelExtensions.toName(prop));
_builder.append(_firstUpper_1, "\t");
_builder.append("().name());");
_builder.newLineIfNotEmpty();
_builder.append("} else {");
_builder.newLine();
_builder.append("\t");
_builder.append("return null;");
_builder.newLine();
_builder.append("}");
_builder.newLine();
}
};
this.setBody(it, _client_3);
} else {
boolean _typeIsStateClass = this._dtoModelExtensions.typeIsStateClass(prop);
if (_typeIsStateClass) {
StringConcatenationClient _client_4 = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
_builder.append("if(in.get");
String _firstUpper = StringExtensions.toFirstUpper(DtoTypesBuilder.this._dtoModelExtensions.toName(prop));
_builder.append(_firstUpper);
_builder.append("() != null) {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("return ");
String _dTOStateClassFullyQualifiedName = DtoTypesBuilder.this._methodNamingExtensions.toDTOStateClassFullyQualifiedName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_dTOStateClassFullyQualifiedName, "\t");
_builder.append(".valueOf(in.get");
String _firstUpper_1 = StringExtensions.toFirstUpper(DtoTypesBuilder.this._dtoModelExtensions.toName(prop));
_builder.append(_firstUpper_1, "\t");
_builder.append("().name());");
_builder.newLineIfNotEmpty();
_builder.append("} else {");
_builder.newLine();
_builder.append("\t");
_builder.append("return null;");
_builder.newLine();
_builder.append("}");
_builder.newLine();
}
};
this.setBody(it, _client_4);
} else {
StringConcatenationClient _client_5 = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
_builder.append("return in.get");
String _firstUpper = StringExtensions.toFirstUpper(DtoTypesBuilder.this._dtoModelExtensions.toName(prop));
_builder.append(_firstUpper);
_builder.append("();");
}
};
this.setBody(it, _client_5);
}
}
}
}
}
};
_xblockexpression = this.<JvmOperation>initializeSafely(op, _function);
}
return _xblockexpression;
}
protected JvmOperation _toMapToDtoProperty(final LDtoAbstractReference prop) {
JvmOperation _xblockexpression = null;
{
EObject _eContainer = prop.eContainer();
final LDto dto = ((LDto) _eContainer);
final JvmOperation op = this.typesFactory.createJvmOperation();
op.setVisibility(JvmVisibility.PROTECTED);
op.setReturnType(this._dtoModelExtensions.toDtoTypeReferenceWithMultiplicity(prop));
op.setSimpleName(this._methodNamingExtensions.toMapPropertyToDto(prop));
this.<JvmOperation>associate(prop, op);
final Procedure1<JvmOperation> _function = (JvmOperation it) -> {
EList<JvmFormalParameter> _parameters = it.getParameters();
LType _wrappedType = dto.getWrappedType();
JvmTypeReference _typeReference = null;
if (_wrappedType!=null) {
_typeReference=this._dtoModelExtensions.toTypeReference(_wrappedType);
}
JvmFormalParameter _parameter = this.toParameter(prop, "in", _typeReference);
this.<JvmFormalParameter>operator_add(_parameters, _parameter);
EList<JvmFormalParameter> _parameters_1 = it.getParameters();
JvmFormalParameter _parameter_1 = this.toParameter(prop, "context", this.references.getTypeForName(MappingContext.class, prop));
this.<JvmFormalParameter>operator_add(_parameters_1, _parameter_1);
StringConcatenation _builder = new StringConcatenation();
_builder.append("Maps the property ");
String _name = this._dtoModelExtensions.toName(prop);
_builder.append(_name);
_builder.append(" from the given entity to the dto.");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("@param in - The source entity");
_builder.newLine();
_builder.append("@param context - The context to get information about depth,...");
_builder.newLine();
_builder.append("@return ");
{
boolean _isToMany = this._dtoModelExtensions.getBounds(prop).isToMany();
boolean _not = (!_isToMany);
if (_not) {
_builder.append("the mapped dto");
} else {
_builder.append("A list of mapped dtos");
}
}
_builder.newLineIfNotEmpty();
this.setDocumentation(it, _builder);
final XExpression mapExpression = this._methodNamingExtensions.toMapToDtoExpression(prop);
boolean _notEquals = (!Objects.equal(mapExpression, null));
if (_notEquals) {
this.setBody(it, mapExpression);
} else {
boolean _isToMany_1 = this._dtoModelExtensions.getBounds(prop).isToMany();
if (_isToMany_1) {
StringConcatenationClient _client = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
_builder.append("// nothing to do here. Mapping is done by OppositeLists");
_builder.newLine();
_builder.append("return null;");
}
};
this.setBody(it, _client);
} else {
StringConcatenationClient _client_1 = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
_builder.append("if(in.get");
String _firstUpper = StringExtensions.toFirstUpper(DtoTypesBuilder.this._dtoModelExtensions.toName(prop));
_builder.append(_firstUpper);
_builder.append("() != null) {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("// find a mapper that knows how to map the concrete input type.");
_builder.newLine();
_builder.append("\t");
_builder.append("org.eclipse.osbp.dsl.dto.lib.IMapper<");
String _typeName = DtoTypesBuilder.this._dtoModelExtensions.toTypeName(prop);
_builder.append(_typeName, "\t");
_builder.append(", ");
String _name = DtoTypesBuilder.this._dtoModelExtensions.toName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_name, "\t");
_builder.append("> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<");
String _typeName_1 = DtoTypesBuilder.this._dtoModelExtensions.toTypeName(prop);
_builder.append(_typeName_1, "\t");
_builder.append(", ");
String _name_1 = DtoTypesBuilder.this._dtoModelExtensions.toName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_name_1, "\t");
_builder.append(">) getToDtoMapper(");
String _typeName_2 = DtoTypesBuilder.this._dtoModelExtensions.toTypeName(prop);
_builder.append(_typeName_2, "\t");
_builder.append(".class, in.get");
String _firstUpper_1 = StringExtensions.toFirstUpper(DtoTypesBuilder.this._dtoModelExtensions.toName(prop));
_builder.append(_firstUpper_1, "\t");
_builder.append("().getClass());");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("if(mapper == null) {");
_builder.newLine();
_builder.append("\t\t");
_builder.append("throw new IllegalStateException(\"Mapper must not be null!\");");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
String _typeName_3 = DtoTypesBuilder.this._dtoModelExtensions.toTypeName(prop);
_builder.append(_typeName_3, "\t");
_builder.append(" dto = null;");
_builder.newLineIfNotEmpty();
{
boolean _isBean = DtoTypesBuilder.this._dtoModelExtensions.isBean(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
boolean _not = (!_isBean);
if (_not) {
_builder.append("\t");
_builder.append("dto = context.get(mapper.createDtoHash(in.get");
String _firstUpper_2 = StringExtensions.toFirstUpper(DtoTypesBuilder.this._dtoModelExtensions.toName(prop));
_builder.append(_firstUpper_2, "\t");
_builder.append("()));");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("if(dto != null) {");
_builder.newLine();
_builder.append("\t");
_builder.append("\t");
_builder.append("if(context.isRefresh()){");
_builder.newLine();
_builder.append("\t");
_builder.append("\t\t");
_builder.append("mapper.mapToDTO(dto, in.");
String _getterName = DtoTypesBuilder.this._methodNamingExtensions.toGetterName(prop);
_builder.append(_getterName, "\t\t\t");
_builder.append("(), context);");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.append("\t");
_builder.append("return dto;");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.newLine();
}
}
_builder.append("\t");
_builder.append("context.increaseLevel();");
_builder.newLine();
_builder.append("\t");
_builder.append("dto = mapper.createDto();");
_builder.newLine();
_builder.append("\t");
_builder.append("mapper.mapToDTO(dto, in.get");
String _firstUpper_3 = StringExtensions.toFirstUpper(DtoTypesBuilder.this._dtoModelExtensions.toName(prop));
_builder.append(_firstUpper_3, "\t");
_builder.append("(), context);");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("context.decreaseLevel();");
_builder.newLine();
_builder.append("\t");
_builder.append("return dto;");
_builder.newLine();
_builder.append("} else {");
_builder.newLine();
_builder.append("\t");
_builder.append("return null;");
_builder.newLine();
_builder.append("}");
_builder.newLine();
}
};
this.setBody(it, _client_1);
}
}
};
_xblockexpression = this.<JvmOperation>initializeSafely(op, _function);
}
return _xblockexpression;
}
public JvmGenericType findJvmType(final LDto lDto) {
EObject _primaryJvmElement = ((IJvmModelAssociations) this.associator).getPrimaryJvmElement(lDto);
return ((JvmGenericType) _primaryJvmElement);
}
protected JvmOperation _toMapToEntityProperty(final LDtoAbstractAttribute prop) {
JvmOperation _xblockexpression = null;
{
EObject _eContainer = prop.eContainer();
final LDto dto = ((LDto) _eContainer);
final JvmGenericType dtoJvmType = this.findJvmType(dto);
final JvmOperation op = this.typesFactory.createJvmOperation();
op.setVisibility(JvmVisibility.PROTECTED);
op.setReturnType(this._dtoModelExtensions.toRawTypeReferenceWithMultiplicity(prop));
op.setSimpleName(this._methodNamingExtensions.toMapPropertyToEntity(prop));
this.<JvmOperation>associate(prop, op);
final Procedure1<JvmOperation> _function = (JvmOperation it) -> {
EList<JvmFormalParameter> _parameters = it.getParameters();
JvmFormalParameter _parameter = this.toParameter(prop, "in", this.newTypeRef(dtoJvmType, null));
this.<JvmFormalParameter>operator_add(_parameters, _parameter);
EList<JvmFormalParameter> _parameters_1 = it.getParameters();
LType _wrappedType = dto.getWrappedType();
JvmTypeReference _typeReference = null;
if (_wrappedType!=null) {
_typeReference=this._dtoModelExtensions.toTypeReference(_wrappedType);
}
JvmFormalParameter _parameter_1 = this.toParameter(prop, "parentEntity", _typeReference);
this.<JvmFormalParameter>operator_add(_parameters_1, _parameter_1);
EList<JvmFormalParameter> _parameters_2 = it.getParameters();
JvmFormalParameter _parameter_2 = this.toParameter(prop, "context", this.references.getTypeForName(MappingContext.class, prop));
this.<JvmFormalParameter>operator_add(_parameters_2, _parameter_2);
StringConcatenation _builder = new StringConcatenation();
_builder.append("Maps the property ");
String _name = this._dtoModelExtensions.toName(prop);
_builder.append(_name);
_builder.append(" from the given entity to dto property.");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("@param in - The source entity");
_builder.newLine();
_builder.append("@param parentEntity - The parentEntity");
_builder.newLine();
_builder.append("@param context - The context to get information about depth,...");
_builder.newLine();
_builder.append("@return the mapped value");
_builder.newLine();
this.setDocumentation(it, _builder);
final XExpression mapExpression = this._methodNamingExtensions.toMapToEntityExpression(prop);
boolean _notEquals = (!Objects.equal(mapExpression, null));
if (_notEquals) {
this.setBody(it, mapExpression);
} else {
LType _rawType = this._dtoModelExtensions.toRawType(prop);
if ((_rawType instanceof LBean)) {
boolean _isToMany = this._dtoModelExtensions.getBounds(prop).isToMany();
if (_isToMany) {
StringConcatenationClient _client = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
_builder.append("org.eclipse.osbp.dsl.dto.lib.IMapper<");
String _dTOBeanSimpleName = DtoTypesBuilder.this._methodNamingExtensions.toDTOBeanSimpleName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_dTOBeanSimpleName);
_builder.append(", ");
String _name = DtoTypesBuilder.this._dtoModelExtensions.toName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_name);
_builder.append("> mapper = getToEntityMapper(");
String _dTOBeanSimpleName_1 = DtoTypesBuilder.this._methodNamingExtensions.toDTOBeanSimpleName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_dTOBeanSimpleName_1);
_builder.append(".class, ");
String _name_1 = DtoTypesBuilder.this._dtoModelExtensions.toName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_name_1);
_builder.append(".class);");
_builder.newLineIfNotEmpty();
_builder.append("if(mapper == null) {");
_builder.newLine();
_builder.append("\t");
_builder.append("throw new IllegalStateException(\"Mapper must not be null!\");");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("List<");
String _name_2 = DtoTypesBuilder.this._dtoModelExtensions.toName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_name_2);
_builder.append("> results = new java.util.ArrayList<");
String _name_3 = DtoTypesBuilder.this._dtoModelExtensions.toName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_name_3);
_builder.append(">();");
_builder.newLineIfNotEmpty();
_builder.append("for (");
String _dTOBeanSimpleName_2 = DtoTypesBuilder.this._methodNamingExtensions.toDTOBeanSimpleName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_dTOBeanSimpleName_2);
_builder.append(" _dto : in.");
String _getterName = DtoTypesBuilder.this._methodNamingExtensions.toGetterName(prop);
_builder.append(_getterName);
_builder.append("()) {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
String _name_4 = DtoTypesBuilder.this._dtoModelExtensions.toName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_name_4, "\t");
_builder.append(" _entity = mapper.createEntity();");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("mapper.mapToEntity(_dto, _entity, context);");
_builder.newLine();
_builder.append("\t");
_builder.append("results.add(_entity);");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.append("return results;");
}
};
this.setBody(it, _client);
} else {
StringConcatenationClient _client_1 = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
_builder.append("if(in.get");
String _firstUpper = StringExtensions.toFirstUpper(DtoTypesBuilder.this._dtoModelExtensions.toName(prop));
_builder.append(_firstUpper);
_builder.append("() != null) {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("// find a mapper that knows how to map the concrete input type.");
_builder.newLine();
_builder.append("\t");
_builder.append("org.eclipse.osbp.dsl.dto.lib.IMapper<");
String _dTOBeanSimpleName = DtoTypesBuilder.this._methodNamingExtensions.toDTOBeanSimpleName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_dTOBeanSimpleName, "\t");
_builder.append(", ");
String _name = DtoTypesBuilder.this._dtoModelExtensions.toName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_name, "\t");
_builder.append("> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<");
String _dTOBeanSimpleName_1 = DtoTypesBuilder.this._methodNamingExtensions.toDTOBeanSimpleName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_dTOBeanSimpleName_1, "\t");
_builder.append(", ");
String _name_1 = DtoTypesBuilder.this._dtoModelExtensions.toName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_name_1, "\t");
_builder.append(">) getToEntityMapper(in.get");
String _firstUpper_1 = StringExtensions.toFirstUpper(DtoTypesBuilder.this._dtoModelExtensions.toName(prop));
_builder.append(_firstUpper_1, "\t");
_builder.append("().getClass(), ");
String _name_2 = DtoTypesBuilder.this._dtoModelExtensions.toName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_name_2, "\t");
_builder.append(".class);");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("if(mapper == null) {");
_builder.newLine();
_builder.append("\t\t");
_builder.append("throw new IllegalStateException(\"Mapper must not be null!\");");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("\t");
String _name_3 = DtoTypesBuilder.this._dtoModelExtensions.toName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_name_3, "\t");
_builder.append(" entity = mapper.createEntity();");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("mapper.mapToEntity(in.");
String _getterName = DtoTypesBuilder.this._methodNamingExtensions.toGetterName(prop);
_builder.append(_getterName, "\t");
_builder.append("(), entity, context);");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("return entity;\t\t\t\t\t\t\t");
_builder.newLine();
_builder.append("} else {");
_builder.newLine();
_builder.append("\t");
_builder.append("return null;");
_builder.newLine();
_builder.append("}");
}
};
this.setBody(it, _client_1);
}
} else {
boolean _typeIsBoolean = this._dtoModelExtensions.typeIsBoolean(prop);
if (_typeIsBoolean) {
StringConcatenationClient _client_2 = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
_builder.append("return in.is");
String _firstUpper = StringExtensions.toFirstUpper(DtoTypesBuilder.this._dtoModelExtensions.toName(prop));
_builder.append(_firstUpper);
_builder.append("();");
}
};
this.setBody(it, _client_2);
} else {
boolean _typeIsEnum = this._dtoModelExtensions.typeIsEnum(prop);
if (_typeIsEnum) {
StringConcatenationClient _client_3 = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
_builder.append("if(in.get");
String _firstUpper = StringExtensions.toFirstUpper(DtoTypesBuilder.this._dtoModelExtensions.toName(prop));
_builder.append(_firstUpper);
_builder.append("() != null) {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("return ");
String _string = DtoTypesBuilder.this._iQualifiedNameProvider.getFullyQualifiedName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop)).toString();
_builder.append(_string, "\t");
_builder.append(".valueOf(in.get");
String _firstUpper_1 = StringExtensions.toFirstUpper(DtoTypesBuilder.this._dtoModelExtensions.toName(prop));
_builder.append(_firstUpper_1, "\t");
_builder.append("().name());");
_builder.newLineIfNotEmpty();
_builder.append("} else {");
_builder.newLine();
_builder.append("\t");
_builder.append("return null;");
_builder.newLine();
_builder.append("}");
_builder.newLine();
}
};
this.setBody(it, _client_3);
} else {
boolean _typeIsStateClass = this._dtoModelExtensions.typeIsStateClass(prop);
if (_typeIsStateClass) {
EObject _eContainer_1 = prop.eContainer();
String _string = this._iQualifiedNameProvider.getFullyQualifiedName(((LAutoInheritDto) _eContainer_1).getWrappedType()).skipLast(1).toString();
String _plus = CommonTypesBuilder.operator_plus(_string, ".");
String _firstUpper = StringExtensions.toFirstUpper(this._dtoModelExtensions.toName(prop));
final String name = CommonTypesBuilder.operator_plus(_plus, _firstUpper);
op.setReturnType(this.references.getTypeForName(name, prop));
StringConcatenationClient _client_4 = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
_builder.append("if(in.get");
String _firstUpper = StringExtensions.toFirstUpper(DtoTypesBuilder.this._dtoModelExtensions.toName(prop));
_builder.append(_firstUpper);
_builder.append("() != null) {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("return ");
_builder.append(name, "\t");
_builder.append(".valueOf(in.get");
String _firstUpper_1 = StringExtensions.toFirstUpper(DtoTypesBuilder.this._dtoModelExtensions.toName(prop));
_builder.append(_firstUpper_1, "\t");
_builder.append("().name());");
_builder.newLineIfNotEmpty();
_builder.append("} else {");
_builder.newLine();
_builder.append("\t");
_builder.append("return null;");
_builder.newLine();
_builder.append("}");
_builder.newLine();
}
};
this.setBody(it, _client_4);
} else {
StringConcatenationClient _client_5 = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
_builder.append("return in.get");
String _firstUpper = StringExtensions.toFirstUpper(DtoTypesBuilder.this._dtoModelExtensions.toName(prop));
_builder.append(_firstUpper);
_builder.append("();");
}
};
this.setBody(it, _client_5);
}
}
}
}
}
};
_xblockexpression = this.<JvmOperation>initializeSafely(op, _function);
}
return _xblockexpression;
}
protected JvmOperation _toMapToEntityProperty(final LDtoAbstractReference prop) {
JvmOperation _xblockexpression = null;
{
EObject _eContainer = prop.eContainer();
final LDto dto = ((LDto) _eContainer);
final JvmOperation op = this.typesFactory.createJvmOperation();
op.setVisibility(JvmVisibility.PROTECTED);
op.setReturnType(this._dtoModelExtensions.toRawTypeReferenceWithMultiplicity(prop));
op.setSimpleName(this._methodNamingExtensions.toMapPropertyToEntity(prop));
this.<JvmOperation>associate(prop, op);
final Procedure1<JvmOperation> _function = (JvmOperation it) -> {
EList<JvmFormalParameter> _parameters = it.getParameters();
JvmFormalParameter _parameter = this.toParameter(prop, "in", this.findDtoTypeReference(dto));
this.<JvmFormalParameter>operator_add(_parameters, _parameter);
EList<JvmFormalParameter> _parameters_1 = it.getParameters();
LType _wrappedType = dto.getWrappedType();
JvmTypeReference _typeReference = null;
if (_wrappedType!=null) {
_typeReference=this._dtoModelExtensions.toTypeReference(_wrappedType);
}
JvmFormalParameter _parameter_1 = this.toParameter(prop, "parentEntity", _typeReference);
this.<JvmFormalParameter>operator_add(_parameters_1, _parameter_1);
EList<JvmFormalParameter> _parameters_2 = it.getParameters();
JvmFormalParameter _parameter_2 = this.toParameter(prop, "context", this.references.getTypeForName(MappingContext.class, prop));
this.<JvmFormalParameter>operator_add(_parameters_2, _parameter_2);
StringConcatenation _builder = new StringConcatenation();
_builder.append("Maps the property ");
String _name = this._dtoModelExtensions.toName(prop);
_builder.append(_name);
_builder.append(" from the given dto to the entity.");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("@param in - The source dto");
_builder.newLine();
_builder.append("@param parentEntity - The parent entity");
_builder.newLine();
_builder.append("@param context - The context to get information about depth,...");
_builder.newLine();
_builder.append("@return ");
{
boolean _isToMany = this._dtoModelExtensions.getBounds(prop).isToMany();
boolean _not = (!_isToMany);
if (_not) {
_builder.append("the mapped entity");
} else {
_builder.append("A list of mapped entities");
}
}
_builder.newLineIfNotEmpty();
this.setDocumentation(it, _builder);
final XExpression mapExpression = this._methodNamingExtensions.toMapToEntityExpression(prop);
boolean _notEquals = (!Objects.equal(mapExpression, null));
if (_notEquals) {
this.setBody(it, mapExpression);
} else {
boolean _isToMany_1 = this._dtoModelExtensions.getBounds(prop).isToMany();
if (_isToMany_1) {
StringConcatenationClient _client = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
_builder.append("org.eclipse.osbp.dsl.dto.lib.IMapper<");
String _typeName = DtoTypesBuilder.this._dtoModelExtensions.toTypeName(prop);
_builder.append(_typeName);
_builder.append(", ");
String _name = DtoTypesBuilder.this._dtoModelExtensions.toName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_name);
_builder.append("> mapper = getToEntityMapper(");
String _typeName_1 = DtoTypesBuilder.this._dtoModelExtensions.toTypeName(prop);
_builder.append(_typeName_1);
_builder.append(".class, ");
String _name_1 = DtoTypesBuilder.this._dtoModelExtensions.toName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_name_1);
_builder.append(".class);");
_builder.newLineIfNotEmpty();
_builder.append("if(mapper == null) {");
_builder.newLine();
_builder.append("\t");
_builder.append("throw new IllegalStateException(\"Mapper must not be null!\");");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("org.eclipse.osbp.dsl.dto.lib.IEntityMappingList<");
String _typeName_2 = DtoTypesBuilder.this._dtoModelExtensions.toTypeName(prop);
_builder.append(_typeName_2);
_builder.append("> childsList = ");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("(org.eclipse.osbp.dsl.dto.lib.IEntityMappingList<");
String _typeName_3 = DtoTypesBuilder.this._dtoModelExtensions.toTypeName(prop);
_builder.append(_typeName_3, "\t");
_builder.append(">) in.internalGet");
String _firstUpper = StringExtensions.toFirstUpper(DtoTypesBuilder.this._dtoModelExtensions.toName(prop));
_builder.append(_firstUpper, "\t");
_builder.append("();");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("// if entities are being added, then they are passed to");
_builder.newLine();
_builder.append("// #addToContainerChilds of the parent entity. So the container ref is setup");
_builder.newLine();
_builder.append("// properly!");
_builder.newLine();
_builder.append("// if entities are being removed, then they are passed to the");
_builder.newLine();
_builder.append("// #internalRemoveFromChilds method of the parent entity. So they are");
_builder.newLine();
_builder.append("// removed directly from the list of entities.");
_builder.newLine();
_builder.append("if ( childsList != null ) childsList.mapToEntity(mapper,");
_builder.newLine();
_builder.append("\t\t");
_builder.append("parentEntity::addTo");
String _firstUpper_1 = StringExtensions.toFirstUpper(DtoTypesBuilder.this._dtoModelExtensions.toName(prop));
_builder.append(_firstUpper_1, "\t\t");
_builder.append(",");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("parentEntity::internalRemoveFrom");
String _firstUpper_2 = StringExtensions.toFirstUpper(DtoTypesBuilder.this._dtoModelExtensions.toName(prop));
_builder.append(_firstUpper_2, "\t\t");
_builder.append(");");
_builder.newLineIfNotEmpty();
_builder.append("return null;");
_builder.newLine();
}
};
this.setBody(it, _client);
} else {
StringConcatenationClient _client_1 = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
_builder.append("if(in.get");
String _firstUpper = StringExtensions.toFirstUpper(DtoTypesBuilder.this._dtoModelExtensions.toName(prop));
_builder.append(_firstUpper);
_builder.append("() != null) {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("// find a mapper that knows how to map the concrete input type.");
_builder.newLine();
_builder.append("\t");
_builder.append("org.eclipse.osbp.dsl.dto.lib.IMapper<");
String _typeName = DtoTypesBuilder.this._dtoModelExtensions.toTypeName(prop);
_builder.append(_typeName, "\t");
_builder.append(", ");
String _name = DtoTypesBuilder.this._dtoModelExtensions.toName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_name, "\t");
_builder.append("> mapper = (org.eclipse.osbp.dsl.dto.lib.IMapper<");
String _typeName_1 = DtoTypesBuilder.this._dtoModelExtensions.toTypeName(prop);
_builder.append(_typeName_1, "\t");
_builder.append(", ");
String _name_1 = DtoTypesBuilder.this._dtoModelExtensions.toName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_name_1, "\t");
_builder.append(">) getToEntityMapper(in.get");
String _firstUpper_1 = StringExtensions.toFirstUpper(DtoTypesBuilder.this._dtoModelExtensions.toName(prop));
_builder.append(_firstUpper_1, "\t");
_builder.append("().getClass(), ");
String _name_2 = DtoTypesBuilder.this._dtoModelExtensions.toName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_name_2, "\t");
_builder.append(".class);");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("if(mapper == null) {");
_builder.newLine();
_builder.append("\t\t");
_builder.append("throw new IllegalStateException(\"Mapper must not be null!\");");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("\t");
String _name_3 = DtoTypesBuilder.this._dtoModelExtensions.toName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_name_3, "\t");
_builder.append(" entity = null;");
_builder.newLineIfNotEmpty();
{
boolean _isBean = DtoTypesBuilder.this._dtoModelExtensions.isBean(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
boolean _not = (!_isBean);
if (_not) {
_builder.append("\t");
_builder.append("entity = context.get(mapper.createEntityHash(in.get");
String _firstUpper_2 = StringExtensions.toFirstUpper(DtoTypesBuilder.this._dtoModelExtensions.toName(prop));
_builder.append(_firstUpper_2, "\t");
_builder.append("()));");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("if(entity != null) {");
_builder.newLine();
_builder.append("\t");
_builder.append("\t");
_builder.append("return entity;");
_builder.newLine();
_builder.append("\t");
_builder.append("} else {");
_builder.newLine();
_builder.append("\t");
_builder.append("\t");
_builder.append("entity = (");
String _name_4 = DtoTypesBuilder.this._dtoModelExtensions.toName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_name_4, "\t\t");
_builder.append(") context");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("\t\t");
_builder.append(".findEntityByEntityManager(");
String _name_5 = DtoTypesBuilder.this._dtoModelExtensions.toName(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop));
_builder.append(_name_5, "\t\t\t");
_builder.append(".class, in.get");
String _firstUpper_3 = StringExtensions.toFirstUpper(DtoTypesBuilder.this._dtoModelExtensions.toName(prop));
_builder.append(_firstUpper_3, "\t\t\t");
_builder.append("().get");
String _firstUpper_4 = StringExtensions.toFirstUpper(DtoTypesBuilder.this._dtoModelExtensions.toName(DtoTypesBuilder.this._dtoModelExtensions.idAttribute(DtoTypesBuilder.this._dtoModelExtensions.toRawType(prop))));
_builder.append(_firstUpper_4, "\t\t\t");
_builder.append("());");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("\t");
_builder.append("if (entity != null) {");
_builder.newLine();
_builder.append("\t");
_builder.append("\t\t");
_builder.append("context.register(mapper.createEntityHash(in.get");
String _firstUpper_5 = StringExtensions.toFirstUpper(DtoTypesBuilder.this._dtoModelExtensions.toName(prop));
_builder.append(_firstUpper_5, "\t\t\t");
_builder.append("()), entity);");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("\t\t");
_builder.append("return entity;");
_builder.newLine();
_builder.append("\t");
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.newLine();
}
}
_builder.append("\t");
_builder.append("entity = mapper.createEntity();");
_builder.newLine();
_builder.append("\t");
_builder.append("mapper.mapToEntity(in.get");
String _firstUpper_6 = StringExtensions.toFirstUpper(DtoTypesBuilder.this._dtoModelExtensions.toName(prop));
_builder.append(_firstUpper_6, "\t");
_builder.append("(), entity, context);\t");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("return entity;");
_builder.newLine();
_builder.append("} else {");
_builder.newLine();
_builder.append("\t");
_builder.append("return null;");
_builder.newLine();
_builder.append("}\t");
_builder.newLine();
}
};
this.setBody(it, _client_1);
}
}
};
_xblockexpression = this.<JvmOperation>initializeSafely(op, _function);
}
return _xblockexpression;
}
public JvmTypeReference findDtoTypeReference(final LDto dto) {
return this.newTypeRef(this.getByPostfix(dto, "Dto"), null);
}
public JvmTypeReference findDtoMapperTypeReference(final LDto dto) {
return this.newTypeRef(this.getByPostfix(dto, "DtoMapper"), null);
}
public JvmParameterizedTypeReference findSuperDtoMapperType(final LDto dto, final JvmTypeReference dtoType, final JvmTypeReference entityType) {
JvmGenericType type = this.getByPostfix(dto.getSuperType(), "DtoMapper");
if ((type == null)) {
QualifiedName superTypeFQN = this._iQualifiedNameProvider.getFullyQualifiedName(dto.getSuperType());
superTypeFQN = superTypeFQN.append("Mapper");
final List<String> list = CollectionLiterals.<String>newArrayList();
list.addAll(superTypeFQN.getSegments());
int _size = list.size();
int _minus = (_size - 1);
list.add(_minus, "mapper");
final QualifiedName mapperFQN = QualifiedName.create(list);
JvmTypeReference _typeForName = this.references.getTypeForName(mapperFQN.toString(), dto, null);
final JvmParameterizedTypeReference ref = ((JvmParameterizedTypeReference) _typeForName);
EList<JvmTypeReference> _arguments = ref.getArguments();
this.<JvmTypeReference>operator_add(_arguments, dtoType);
EList<JvmTypeReference> _arguments_1 = ref.getArguments();
this.<JvmTypeReference>operator_add(_arguments_1, entityType);
return ref;
} else {
JvmTypeReference _newTypeRef = this.newTypeRef(type, null);
final JvmParameterizedTypeReference ref_1 = ((JvmParameterizedTypeReference) _newTypeRef);
ref_1.getArguments().clear();
EList<JvmTypeReference> _arguments_2 = ref_1.getArguments();
this.<JvmTypeReference>operator_add(_arguments_2, dtoType);
EList<JvmTypeReference> _arguments_3 = ref_1.getArguments();
this.<JvmTypeReference>operator_add(_arguments_3, entityType);
return ref_1;
}
}
public JvmOperation toSetter(final LDtoFeature prop) {
if (prop instanceof LDtoAbstractAttribute) {
return _toSetter((LDtoAbstractAttribute)prop);
} else if (prop instanceof LDtoAbstractReference) {
return _toSetter((LDtoAbstractReference)prop);
} else {
throw new IllegalArgumentException("Unhandled parameter types: " +
Arrays.<Object>asList(prop).toString());
}
}
public JvmOperation toGetter(final EObject prop, final String methodName) {
if (prop instanceof LStateClass) {
return _toGetter((LStateClass)prop, methodName);
} else if (prop instanceof LDtoAbstractAttribute) {
return _toGetter((LDtoAbstractAttribute)prop, methodName);
} else if (prop instanceof LDtoAbstractReference) {
return _toGetter((LDtoAbstractReference)prop, methodName);
} else if (prop instanceof LAttribute) {
return _toGetter((LAttribute)prop, methodName);
} else if (prop instanceof LReference) {
return _toGetter((LReference)prop, methodName);
} else if (prop != null) {
return _toGetter(prop, methodName);
} else {
throw new IllegalArgumentException("Unhandled parameter types: " +
Arrays.<Object>asList(prop, methodName).toString());
}
}
public JvmOperation toInternalSetter(final LDtoFeature prop) {
if (prop instanceof LDtoAbstractAttribute) {
return _toInternalSetter((LDtoAbstractAttribute)prop);
} else if (prop instanceof LDtoAbstractReference) {
return _toInternalSetter((LDtoAbstractReference)prop);
} else {
throw new IllegalArgumentException("Unhandled parameter types: " +
Arrays.<Object>asList(prop).toString());
}
}
public JvmOperation toInternalAdder(final LDtoFeature prop) {
if (prop instanceof LDtoAbstractAttribute) {
return _toInternalAdder((LDtoAbstractAttribute)prop);
} else if (prop instanceof LDtoAbstractReference) {
return _toInternalAdder((LDtoAbstractReference)prop);
} else {
throw new IllegalArgumentException("Unhandled parameter types: " +
Arrays.<Object>asList(prop).toString());
}
}
public JvmOperation toInternalRemover(final LDtoFeature prop) {
if (prop instanceof LDtoAbstractAttribute) {
return _toInternalRemover((LDtoAbstractAttribute)prop);
} else if (prop instanceof LDtoAbstractReference) {
return _toInternalRemover((LDtoAbstractReference)prop);
} else {
throw new IllegalArgumentException("Unhandled parameter types: " +
Arrays.<Object>asList(prop).toString());
}
}
public JvmOperation toInternalCollectionGetter(final LDtoFeature prop, final String name) {
if (prop instanceof LDtoAbstractAttribute) {
return _toInternalCollectionGetter((LDtoAbstractAttribute)prop, name);
} else if (prop instanceof LDtoAbstractReference) {
return _toInternalCollectionGetter((LDtoAbstractReference)prop, name);
} else {
throw new IllegalArgumentException("Unhandled parameter types: " +
Arrays.<Object>asList(prop, name).toString());
}
}
public JvmOperation toRemover(final LDtoFeature prop, final String propertyName) {
if (prop instanceof LDtoAbstractAttribute) {
return _toRemover((LDtoAbstractAttribute)prop, propertyName);
} else if (prop instanceof LDtoAbstractReference) {
return _toRemover((LDtoAbstractReference)prop, propertyName);
} else {
throw new IllegalArgumentException("Unhandled parameter types: " +
Arrays.<Object>asList(prop, propertyName).toString());
}
}
public JvmOperation toMapToDtoProperty(final LDtoFeature prop) {
if (prop instanceof LDtoAbstractAttribute) {
return _toMapToDtoProperty((LDtoAbstractAttribute)prop);
} else if (prop instanceof LDtoAbstractReference) {
return _toMapToDtoProperty((LDtoAbstractReference)prop);
} else {
throw new IllegalArgumentException("Unhandled parameter types: " +
Arrays.<Object>asList(prop).toString());
}
}
public JvmOperation toMapToEntityProperty(final LDtoFeature prop) {
if (prop instanceof LDtoAbstractAttribute) {
return _toMapToEntityProperty((LDtoAbstractAttribute)prop);
} else if (prop instanceof LDtoAbstractReference) {
return _toMapToEntityProperty((LDtoAbstractReference)prop);
} else {
throw new IllegalArgumentException("Unhandled parameter types: " +
Arrays.<Object>asList(prop).toString());
}
}
}