blob: 1f471c09b9c8fe2e387d5e5416fee1a03dc897b2 [file] [log] [blame]
/**
* Copyright (c) 2011, 2016 - 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 v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
*
*
* This copyright notice shows up in the generated Java code
*/
package org.eclipse.osbp.xtext.blip.jvmmodel;
import com.google.common.base.Objects;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.TreeSet;
import java.util.regex.Pattern;
import javax.inject.Inject;
import org.apache.commons.lang3.StringUtils;
import org.eclipse.bpmn2.DocumentRoot;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.e4.core.contexts.IContextFunction;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.e4.core.di.annotations.Optional;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.osbp.bpm.AbstractBPMEvent;
import org.eclipse.osbp.bpm.AbstractBPMServiceTask;
import org.eclipse.osbp.bpm.AbstractBlipBPMFunctionProvider;
import org.eclipse.osbp.bpm.AbstractBlipBPMItem;
import org.eclipse.osbp.bpm.AbstractBlipBPMUserTask;
import org.eclipse.osbp.bpm.BPMCallActivity;
import org.eclipse.osbp.bpm.BPMEndEvent;
import org.eclipse.osbp.bpm.BPMPersistTask;
import org.eclipse.osbp.bpm.BPMScriptTask;
import org.eclipse.osbp.bpm.BPMSplitGateway;
import org.eclipse.osbp.bpm.BPMStartEvent;
import org.eclipse.osbp.bpm.BlipBPMStartInfo;
import org.eclipse.osbp.bpm.api.IBPMEngine;
import org.eclipse.osbp.bpm.api.IBlipBPMFunctionProvider;
import org.eclipse.osbp.bpm.api.IBlipBPMStartInfo;
import org.eclipse.osbp.bpm.api.IBlipBPMWorkloadModifiableItem;
import org.eclipse.osbp.bpm.api.ServiceExecutionMode;
import org.eclipse.osbp.dsl.common.datatypes.IDto;
import org.eclipse.osbp.dsl.semantic.common.types.LMultiplicity;
import org.eclipse.osbp.dsl.semantic.dto.LDto;
import org.eclipse.osbp.dsl.semantic.dto.LDtoAbstractReference;
import org.eclipse.osbp.dsl.semantic.dto.LDtoInheritedReference;
import org.eclipse.osbp.dsl.semantic.dto.LDtoReference;
import org.eclipse.osbp.ui.api.useraccess.IOrganizationService;
import org.eclipse.osbp.utils.annotation.CommonUtils;
import org.eclipse.osbp.xtext.blip.Blip;
import org.eclipse.osbp.xtext.blip.BlipCallActivity;
import org.eclipse.osbp.xtext.blip.BlipDto;
import org.eclipse.osbp.xtext.blip.BlipDtoPath;
import org.eclipse.osbp.xtext.blip.BlipEndEvent;
import org.eclipse.osbp.xtext.blip.BlipExclusiveSplitGateway;
import org.eclipse.osbp.xtext.blip.BlipInclusiveSplitGateway;
import org.eclipse.osbp.xtext.blip.BlipItem;
import org.eclipse.osbp.xtext.blip.BlipOutGoing;
import org.eclipse.osbp.xtext.blip.BlipPackage;
import org.eclipse.osbp.xtext.blip.BlipPersistTask;
import org.eclipse.osbp.xtext.blip.BlipScriptTask;
import org.eclipse.osbp.xtext.blip.BlipServiceTask;
import org.eclipse.osbp.xtext.blip.BlipSplitGateway;
import org.eclipse.osbp.xtext.blip.BlipStartEvent;
import org.eclipse.osbp.xtext.blip.BlipUserTask;
import org.eclipse.osbp.xtext.blip.BlipWorkload;
import org.eclipse.osbp.xtext.blip.EndEventHandlingEnum;
import org.eclipse.osbp.xtext.blip.ServiceExecutionModeEnum;
import org.eclipse.osbp.xtext.blip.common.BlipHelper;
import org.eclipse.osbp.xtext.blip.jvmmodel.BlipModelGenerator;
import org.eclipse.osbp.xtext.functionlibrarydsl.FunctionLibraryBlipGroup;
import org.eclipse.osbp.xtext.functionlibrarydsl.FunctionLibraryFunction;
import org.eclipse.xtend2.lib.StringConcatenation;
import org.eclipse.xtext.common.types.JvmAnnotationReference;
import org.eclipse.xtext.common.types.JvmConstructor;
import org.eclipse.xtext.common.types.JvmDeclaredType;
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.JvmMember;
import org.eclipse.xtext.common.types.JvmOperation;
import org.eclipse.xtext.common.types.JvmTypeReference;
import org.eclipse.xtext.common.types.JvmVisibility;
import org.eclipse.xtext.naming.IQualifiedNameProvider;
import org.eclipse.xtext.naming.QualifiedName;
import org.eclipse.xtext.xbase.compiler.output.ITreeAppendable;
import org.eclipse.xtext.xbase.jvmmodel.AbstractModelInferrer;
import org.eclipse.xtext.xbase.jvmmodel.IJvmDeclaredTypeAcceptor;
import org.eclipse.xtext.xbase.jvmmodel.JvmTypesBuilder;
import org.eclipse.xtext.xbase.lib.Conversions;
import org.eclipse.xtext.xbase.lib.Exceptions;
import org.eclipse.xtext.xbase.lib.Extension;
import org.eclipse.xtext.xbase.lib.IterableExtensions;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
import org.eclipse.xtext.xbase.lib.StringExtensions;
import org.osgi.service.component.annotations.Component;
import org.slf4j.Logger;
/**
* <p>
* Business Logic Implementation Platform
* This inferrer infers models of extension blip and generates code to be injected as context function to e4 application
* and handles the communication with the bpm service.
* </p>
*
* @author Joerg Riegel
*/
@SuppressWarnings("all")
public class BlipDSLJvmModelInferrer extends AbstractModelInferrer {
@Inject
@Extension
private JvmTypesBuilder _jvmTypesBuilder;
@Inject
@Extension
private IQualifiedNameProvider _iQualifiedNameProvider;
@Inject
@Extension
private BlipModelGenerator _blipModelGenerator;
@Inject
@Extension
private CommonUtils _commonUtils;
protected void _infer(final BlipPackage blipPkg, final IJvmDeclaredTypeAcceptor acceptor, final boolean isPreIndexingPhase) {
this._blipModelGenerator.generatePckgName(blipPkg, acceptor);
this.createAbstractBpmItemClasses(blipPkg, acceptor);
final String clsName = StringExtensions.toFirstUpper(this.className(blipPkg));
final JvmGenericType cls = this._jvmTypesBuilder.toClass(blipPkg, clsName);
cls.getSuperTypes().add(this._typeReferenceBuilder.typeRef(AbstractBlipBPMFunctionProvider.class));
cls.setSimpleName(StringExtensions.toFirstUpper(cls.getSimpleName()));
final Procedure1<JvmGenericType> _function = (JvmGenericType it) -> {
JvmAnnotationReference annotationRef = this._annotationTypesBuilder.annotationRef(Component.class);
JvmTypeReference _typeRef = this._typeReferenceBuilder.typeRef(IBlipBPMFunctionProvider.class);
this._commonUtils.addAnnAttr(annotationRef, blipPkg, "service", ((JvmTypeReference) _typeRef));
EList<JvmAnnotationReference> _annotations = it.getAnnotations();
this._jvmTypesBuilder.<JvmAnnotationReference>operator_add(_annotations, annotationRef);
this._jvmTypesBuilder.setFileHeader(it, this._jvmTypesBuilder.getDocumentation(blipPkg));
this.toFields(it, blipPkg);
this.toOperations(it, blipPkg);
it.setPackageName(this._iQualifiedNameProvider.getFullyQualifiedName(blipPkg).toString());
};
acceptor.<JvmGenericType>accept(cls, _function);
String contextClassName = (clsName + "ContextFunction");
final JvmGenericType contextCls = this._jvmTypesBuilder.toClass(blipPkg, contextClassName);
final String tableClsName = clsName;
contextCls.getSuperTypes().add(this._typeReferenceBuilder.typeRef(IContextFunction.class));
contextCls.setSimpleName(StringExtensions.toFirstUpper(contextCls.getSimpleName()));
final Procedure1<JvmGenericType> _function_1 = (JvmGenericType it) -> {
JvmAnnotationReference annotationRef = this._annotationTypesBuilder.annotationRef(
Component.class);
JvmTypeReference _typeRef = this._typeReferenceBuilder.typeRef(IContextFunction.class);
this._commonUtils.addAnnAttr(annotationRef, blipPkg, "service",
((JvmTypeReference) _typeRef));
StringConcatenation _builder = new StringConcatenation();
_builder.append(IContextFunction.SERVICE_CONTEXT_KEY);
_builder.append("=Blip");
String propContent = _builder.toString();
this._commonUtils.addAnnAttr(annotationRef, blipPkg, "property", propContent);
EList<JvmAnnotationReference> _annotations = it.getAnnotations();
this._jvmTypesBuilder.<JvmAnnotationReference>operator_add(_annotations, annotationRef);
it.setPackageName(this._iQualifiedNameProvider.getFullyQualifiedName(blipPkg).toString());
this._jvmTypesBuilder.setFileHeader(it, this._jvmTypesBuilder.getDocumentation(blipPkg));
this.toContextOperations(it, blipPkg, tableClsName);
};
acceptor.<JvmGenericType>accept(contextCls, _function_1);
}
public CharSequence blipItemAbstractClassName(final BlipItem blipItem) {
CharSequence _xifexpression = null;
int _dtoPathTokensCount = this.getDtoPathTokensCount(blipItem);
boolean _equals = (_dtoPathTokensCount == 2);
if (_equals) {
CharSequence _xblockexpression = null;
{
EObject _eContainer = blipItem.eContainer();
final Blip blip = ((Blip) _eContainer);
StringConcatenation _builder = new StringConcatenation();
_builder.append("AbstractBPMItem");
String _firstUpper = StringExtensions.toFirstUpper(blip.getName());
_builder.append(_firstUpper);
String _firstUpper_1 = StringExtensions.toFirstUpper(blipItem.getName());
_builder.append(_firstUpper_1);
_xblockexpression = _builder;
}
_xifexpression = _xblockexpression;
} else {
_xifexpression = this.blipItemAbstractClass(blipItem).getSimpleName();
}
return _xifexpression;
}
public Class<? extends AbstractBlipBPMItem> blipItemAbstractClass(final BlipItem blipItem) {
Class<? extends AbstractBlipBPMItem> _xifexpression = null;
if ((blipItem instanceof BlipUserTask)) {
_xifexpression = AbstractBlipBPMUserTask.class;
} else {
Class<? extends AbstractBlipBPMItem> _xifexpression_1 = null;
if ((blipItem instanceof BlipCallActivity)) {
_xifexpression_1 = BPMCallActivity.class;
} else {
Class<? extends AbstractBlipBPMItem> _xifexpression_2 = null;
if ((blipItem instanceof BlipScriptTask)) {
_xifexpression_2 = BPMScriptTask.class;
} else {
Class<? extends AbstractBlipBPMItem> _xifexpression_3 = null;
if ((blipItem instanceof BlipPersistTask)) {
_xifexpression_3 = BPMPersistTask.class;
} else {
Class<? extends AbstractBlipBPMItem> _xifexpression_4 = null;
if ((blipItem instanceof BlipServiceTask)) {
_xifexpression_4 = AbstractBPMServiceTask.class;
} else {
Class<? extends AbstractBPMEvent> _xifexpression_5 = null;
if ((blipItem instanceof BlipSplitGateway)) {
_xifexpression_5 = BPMSplitGateway.class;
} else {
Class<? extends AbstractBPMEvent> _xifexpression_6 = null;
if ((blipItem instanceof BlipStartEvent)) {
_xifexpression_6 = BPMStartEvent.class;
} else {
Class<BPMEndEvent> _xifexpression_7 = null;
if ((blipItem instanceof BlipEndEvent)) {
_xifexpression_7 = BPMEndEvent.class;
}
_xifexpression_6 = _xifexpression_7;
}
_xifexpression_5 = _xifexpression_6;
}
_xifexpression_4 = _xifexpression_5;
}
_xifexpression_3 = _xifexpression_4;
}
_xifexpression_2 = _xifexpression_3;
}
_xifexpression_1 = _xifexpression_2;
}
_xifexpression = _xifexpression_1;
}
return _xifexpression;
}
public int getDtoPathTokensCount(final BlipItem blipItem) {
BlipDtoPath _dtoPath = blipItem.getDtoPath();
String _dtoPath_1 = null;
if (_dtoPath!=null) {
_dtoPath_1=_dtoPath.getDtoPath();
}
String[] _split = null;
if (_dtoPath_1!=null) {
_split=_dtoPath_1.split("\\.");
}
int _size = 0;
if (((List<String>)Conversions.doWrapArray(_split))!=null) {
_size=((List<String>)Conversions.doWrapArray(_split)).size();
}
return _size;
}
public void createAbstractBpmItemClasses(final BlipPackage blipPkg, final IJvmDeclaredTypeAcceptor acceptor) {
EList<Blip> _blips = blipPkg.getBlips();
for (final Blip blip : _blips) {
EList<BlipItem> _items = blip.getItems();
for (final BlipItem blipItem : _items) {
int _dtoPathTokensCount = this.getDtoPathTokensCount(blipItem);
boolean _equals = (_dtoPathTokensCount == 2);
if (_equals) {
StringConcatenation _builder = new StringConcatenation();
String _name = blipPkg.getName();
_builder.append(_name);
_builder.append(".");
String _string = this.blipItemAbstractClassName(blipItem).toString();
_builder.append(_string);
final JvmGenericType cls = this._jvmTypesBuilder.toClass(blipPkg, _builder.toString());
final CharSequence operativeDtoClassName = this.getOperativeDtoFqn(blipItem);
BlipDtoPath _dtoPath = null;
if (blipItem!=null) {
_dtoPath=blipItem.getDtoPath();
}
final String[] dtoChildNames = _dtoPath.getDtoPath().split("\\.");
final String dtoFeatureName = StringUtils.capitalize(IterableExtensions.<String>last(((Iterable<String>)Conversions.doWrapArray(dtoChildNames))));
cls.setAbstract(true);
cls.getSuperTypes().add(this._typeReferenceBuilder.typeRef(this.blipItemAbstractClass(blipItem)));
cls.getSuperTypes().add(this._typeReferenceBuilder.typeRef(IBlipBPMWorkloadModifiableItem.class));
final Procedure1<JvmGenericType> _function = (JvmGenericType it) -> {
EList<JvmMember> _members = cls.getMembers();
final Procedure1<JvmConstructor> _function_1 = (JvmConstructor it_1) -> {
it_1.setVisibility(JvmVisibility.PROTECTED);
EList<JvmFormalParameter> _parameters = it_1.getParameters();
JvmFormalParameter _parameter = this._jvmTypesBuilder.toParameter(blipPkg, "blipId", this._typeReferenceBuilder.typeRef(String.class));
this._jvmTypesBuilder.<JvmFormalParameter>operator_add(_parameters, _parameter);
EList<JvmFormalParameter> _parameters_1 = it_1.getParameters();
JvmFormalParameter _parameter_1 = this._jvmTypesBuilder.toParameter(blipPkg, "bpmId", this._typeReferenceBuilder.typeRef(String.class));
this._jvmTypesBuilder.<JvmFormalParameter>operator_add(_parameters_1, _parameter_1);
EList<JvmFormalParameter> _parameters_2 = it_1.getParameters();
JvmFormalParameter _parameter_2 = this._jvmTypesBuilder.toParameter(blipPkg, "onEntryFunction", this._typeReferenceBuilder.typeRef(String.class));
this._jvmTypesBuilder.<JvmFormalParameter>operator_add(_parameters_2, _parameter_2);
EList<JvmFormalParameter> _parameters_3 = it_1.getParameters();
JvmFormalParameter _parameter_3 = this._jvmTypesBuilder.toParameter(blipPkg, "onExitFunction", this._typeReferenceBuilder.typeRef(String.class));
this._jvmTypesBuilder.<JvmFormalParameter>operator_add(_parameters_3, _parameter_3);
final Procedure1<ITreeAppendable> _function_2 = (ITreeAppendable it_2) -> {
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append("super(blipId, bpmId, onEntryFunction, onExitFunction);");
it_2.append(_builder_1);
};
this._jvmTypesBuilder.setBody(it_1, _function_2);
};
JvmConstructor _constructor = this._jvmTypesBuilder.toConstructor(blipPkg, _function_1);
this._jvmTypesBuilder.<JvmConstructor>operator_add(_members, _constructor);
EList<JvmMember> _members_1 = cls.getMembers();
JvmFormalParameter _parameter = this._jvmTypesBuilder.toParameter(blipPkg, "operativeDto", this._typeReferenceBuilder.typeRef(IDto.class));
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append("((");
String _workloadDtoFqn = this.getWorkloadDtoFqn(blip);
_builder_1.append(_workloadDtoFqn);
_builder_1.append(")workloadDto).addTo");
_builder_1.append(dtoFeatureName);
_builder_1.append("((");
_builder_1.append(operativeDtoClassName);
_builder_1.append(") operativeDto);");
JvmOperation _createMethod = this.createMethod(blipItem, cls, "addOperativeDto", _parameter, dtoFeatureName, _builder_1.toString());
this._jvmTypesBuilder.<JvmOperation>operator_add(_members_1, _createMethod);
EList<JvmMember> _members_2 = cls.getMembers();
JvmFormalParameter _parameter_1 = this._jvmTypesBuilder.toParameter(blipPkg, "operativeDtos", this._typeReferenceBuilder.typeRef(List.class, this._typeReferenceBuilder.typeRef(IDto.class)));
StringConcatenation _builder_2 = new StringConcatenation();
_builder_2.append("for\t(IDto operativeDto : operativeDtos) {");
_builder_2.newLine();
_builder_2.append("\t");
_builder_2.append("((");
String _workloadDtoFqn_1 = this.getWorkloadDtoFqn(blip);
_builder_2.append(_workloadDtoFqn_1, "\t");
_builder_2.append(")workloadDto).addTo");
_builder_2.append(dtoFeatureName, "\t");
_builder_2.append("((");
_builder_2.append(operativeDtoClassName, "\t");
_builder_2.append(") operativeDto);");
_builder_2.newLineIfNotEmpty();
_builder_2.append("}");
_builder_2.newLine();
JvmOperation _createMethod_1 = this.createMethod(blipItem, cls, "addOperativeDtos", _parameter_1, dtoFeatureName, _builder_2.toString());
this._jvmTypesBuilder.<JvmOperation>operator_add(_members_2, _createMethod_1);
EList<JvmMember> _members_3 = cls.getMembers();
StringConcatenation _builder_3 = new StringConcatenation();
_builder_3.append("((");
String _workloadDtoFqn_2 = this.getWorkloadDtoFqn(blip);
_builder_3.append(_workloadDtoFqn_2);
_builder_3.append(")workloadDto).set");
_builder_3.append(dtoFeatureName);
_builder_3.append("(null);");
JvmOperation _createMethod_2 = this.createMethod(blipItem, cls, "removeAllOperativeDtos",
null, dtoFeatureName, _builder_3.toString());
this._jvmTypesBuilder.<JvmOperation>operator_add(_members_3, _createMethod_2);
EList<JvmMember> _members_4 = cls.getMembers();
JvmFormalParameter _parameter_2 = this._jvmTypesBuilder.toParameter(blipPkg, "operativeDto", this._typeReferenceBuilder.typeRef(IDto.class));
StringConcatenation _builder_4 = new StringConcatenation();
_builder_4.append("((");
String _workloadDtoFqn_3 = this.getWorkloadDtoFqn(blip);
_builder_4.append(_workloadDtoFqn_3);
_builder_4.append(")workloadDto).removeFrom");
_builder_4.append(dtoFeatureName);
_builder_4.append("((");
_builder_4.append(operativeDtoClassName);
_builder_4.append(") operativeDto);");
JvmOperation _createMethod_3 = this.createMethod(blipItem, cls, "removeOperativeDto", _parameter_2, dtoFeatureName, _builder_4.toString());
this._jvmTypesBuilder.<JvmOperation>operator_add(_members_4, _createMethod_3);
EList<JvmMember> _members_5 = cls.getMembers();
JvmFormalParameter _parameter_3 = this._jvmTypesBuilder.toParameter(blipPkg, "operativeDtos", this._typeReferenceBuilder.typeRef(List.class, this._typeReferenceBuilder.typeRef(IDto.class)));
StringConcatenation _builder_5 = new StringConcatenation();
_builder_5.append("for\t(IDto operativeDto : operativeDtos) {");
_builder_5.newLine();
_builder_5.append("\t");
_builder_5.append("((");
String _workloadDtoFqn_4 = this.getWorkloadDtoFqn(blip);
_builder_5.append(_workloadDtoFqn_4, "\t");
_builder_5.append(")workloadDto).removeFrom");
_builder_5.append(dtoFeatureName, "\t");
_builder_5.append("((");
_builder_5.append(operativeDtoClassName, "\t");
_builder_5.append(") operativeDto);");
_builder_5.newLineIfNotEmpty();
_builder_5.append("}");
_builder_5.newLine();
JvmOperation _createMethod_4 = this.createMethod(blipItem, cls, "removeOperativeDtos", _parameter_3, dtoFeatureName, _builder_5.toString());
this._jvmTypesBuilder.<JvmOperation>operator_add(_members_5, _createMethod_4);
};
acceptor.<JvmGenericType>accept(cls, _function);
}
}
}
}
public JvmOperation createMethod(final BlipItem blipItem, final JvmGenericType cls, final String methodName, final JvmFormalParameter parameter2, final String getterSetterPostfix, final String listModifier) {
EObject _eContainer = blipItem.eContainer();
final Blip blip = ((Blip) _eContainer);
EObject _eContainer_1 = blip.eContainer();
final BlipPackage blipPckg = ((BlipPackage) _eContainer_1);
final Procedure1<JvmOperation> _function = (JvmOperation it) -> {
EList<JvmAnnotationReference> _annotations = it.getAnnotations();
JvmAnnotationReference _annotationRef = this._annotationTypesBuilder.annotationRef(Override.class);
this._jvmTypesBuilder.<JvmAnnotationReference>operator_add(_annotations, _annotationRef);
it.setVisibility(JvmVisibility.PUBLIC);
EList<JvmFormalParameter> _parameters = it.getParameters();
JvmFormalParameter _parameter = this._jvmTypesBuilder.toParameter(blipPckg, "workloadDto", this._typeReferenceBuilder.typeRef(IDto.class));
this._jvmTypesBuilder.<JvmFormalParameter>operator_add(_parameters, _parameter);
boolean _notEquals = (!Objects.equal(parameter2, null));
if (_notEquals) {
EList<JvmFormalParameter> _parameters_1 = it.getParameters();
this._jvmTypesBuilder.<JvmFormalParameter>operator_add(_parameters_1, parameter2);
}
final Procedure1<ITreeAppendable> _function_1 = (ITreeAppendable it_1) -> {
StringConcatenation _builder = new StringConcatenation();
_builder.append(listModifier);
_builder.newLineIfNotEmpty();
it_1.append(_builder);
};
this._jvmTypesBuilder.setBody(it, _function_1);
};
return this._jvmTypesBuilder.toMethod(blipPckg, methodName, this._typeReferenceBuilder.typeRef(Void.TYPE), _function);
}
public String className(final BlipPackage pkg) {
String _firstUpper = StringExtensions.toFirstUpper(pkg.getName().toString());
String clsName = (_firstUpper + "Controller");
String[] parts = clsName.split(Pattern.quote("."));
int len = parts.length;
if ((len > 1)) {
return StringExtensions.toFirstUpper(parts[(len - 1)]);
}
return clsName;
}
public void toFields(final JvmGenericType type, final BlipPackage pkg) {
JvmField field = null;
final Procedure1<JvmField> _function = (JvmField it) -> {
final Procedure1<ITreeAppendable> _function_1 = (ITreeAppendable it_1) -> {
StringConcatenation _builder = new StringConcatenation();
_builder.append("org.slf4j.LoggerFactory.getLogger(\"blip\")");
it_1.append(_builder);
};
this._jvmTypesBuilder.setInitializer(it, _function_1);
};
field = this._jvmTypesBuilder.toField(pkg, "log", this._typeReferenceBuilder.typeRef(Logger.class), _function);
field.setStatic(true);
field.setVisibility(JvmVisibility.PRIVATE);
EList<JvmMember> _members = type.getMembers();
this._jvmTypesBuilder.<JvmField>operator_add(_members, field);
final Procedure1<JvmField> _function_1 = (JvmField it) -> {
EList<JvmAnnotationReference> _annotations = it.getAnnotations();
JvmAnnotationReference _annotationRef = this._annotationTypesBuilder.annotationRef(Inject.class);
this._jvmTypesBuilder.<JvmAnnotationReference>operator_add(_annotations, _annotationRef);
EList<JvmAnnotationReference> _annotations_1 = it.getAnnotations();
JvmAnnotationReference _annotationRef_1 = this._annotationTypesBuilder.annotationRef(Optional.class);
this._jvmTypesBuilder.<JvmAnnotationReference>operator_add(_annotations_1, _annotationRef_1);
};
field = this._jvmTypesBuilder.toField(pkg, "bpmEngine", this._typeReferenceBuilder.typeRef(IBPMEngine.class), _function_1);
EList<JvmMember> _members_1 = type.getMembers();
this._jvmTypesBuilder.<JvmField>operator_add(_members_1, field);
final Procedure1<JvmField> _function_2 = (JvmField it) -> {
EList<JvmAnnotationReference> _annotations = it.getAnnotations();
JvmAnnotationReference _annotationRef = this._annotationTypesBuilder.annotationRef(Inject.class);
this._jvmTypesBuilder.<JvmAnnotationReference>operator_add(_annotations, _annotationRef);
EList<JvmAnnotationReference> _annotations_1 = it.getAnnotations();
JvmAnnotationReference _annotationRef_1 = this._annotationTypesBuilder.annotationRef(Optional.class);
this._jvmTypesBuilder.<JvmAnnotationReference>operator_add(_annotations_1, _annotationRef_1);
};
field = this._jvmTypesBuilder.toField(pkg, "organizationService", this._typeReferenceBuilder.typeRef(IOrganizationService.class), _function_2);
EList<JvmMember> _members_2 = type.getMembers();
this._jvmTypesBuilder.<JvmField>operator_add(_members_2, field);
}
public String createBPMNCalls(final BlipPackage pkg) {
try {
final int CODE = IStatus.ERROR;
final String PLUGINID = this.getClass().getCanonicalName();
final String PREFIX_MESSAGE = "BPMN2 file";
final String POSTFIX_MESSAGE = "could not be found in this bundle!";
HashSet<IStatus> errors = new HashSet<IStatus>();
TreeSet<Object> resources = new TreeSet<Object>();
String text = "";
final String[] tokens = pkg.eResource().getURI().toString().split("/");
String base = ((String) null);
for (int i = 0; (i < 3); i++) {
boolean _equals = Objects.equal(base, null);
if (_equals) {
base = tokens[i];
} else {
StringConcatenation _builder = new StringConcatenation();
_builder.append(base);
_builder.append("/");
String _get = tokens[i];
_builder.append(_get);
base = _builder.toString();
}
}
EList<Blip> _blips = pkg.getBlips();
for (final Blip blip : _blips) {
StringConcatenation _builder = new StringConcatenation();
_builder.append(text);
_builder.newLineIfNotEmpty();
_builder.append("put(\"");
String _name = blip.getName();
_builder.append(_name);
_builder.append("\",new ");
String _simpleName = BlipBPMStartInfo.class.getSimpleName();
_builder.append(_simpleName);
_builder.append("(\"");
String _name_1 = blip.getName();
_builder.append(_name_1);
_builder.append("\",\"");
String _name_2 = blip.getName();
_builder.append(_name_2);
_builder.append("\"");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append(", \"");
String _resourceName = BlipDSLJvmModelInferrer.getResourceName(blip);
_builder.append(_resourceName, "\t");
_builder.append("\"");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append(", ");
{
boolean _isHasImage = blip.isHasImage();
if (_isHasImage) {
_builder.append("\"");
String _image = blip.getImage();
_builder.append(_image, "\t");
_builder.append("\"");
} else {
_builder.append("null");
}
}
_builder.append(",");
{
boolean _isHasIcon = blip.isHasIcon();
if (_isHasIcon) {
_builder.append("\"");
String _literal = blip.getIcon().getLiteral();
_builder.append(_literal, "\t");
_builder.append("\"");
} else {
_builder.append("null");
}
}
_builder.append(",");
{
boolean _isHasLogging = blip.isHasLogging();
if (_isHasLogging) {
boolean _booleanValue = Boolean.valueOf(blip.isHasLogging()).booleanValue();
_builder.append(_booleanValue, "\t");
} else {
_builder.append("false");
}
}
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append(", ");
String _functionGroupClassName = this.getFunctionGroupClassName(blip);
_builder.append(_functionGroupClassName, "\t");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append(", ");
String _workloadDtoClassName = this.getWorkloadDtoClassName(blip);
_builder.append(_workloadDtoClassName, "\t");
_builder.newLineIfNotEmpty();
_builder.append("\t");
String _createBlipItems = this.createBlipItems(blip);
_builder.append(_createBlipItems, "\t");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("));");
_builder.newLine();
text = _builder.toString();
}
boolean _isEmpty = errors.isEmpty();
boolean _not = (!_isEmpty);
if (_not) {
final HashSet<IStatus> _converted_errors = (HashSet<IStatus>)errors;
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append(PREFIX_MESSAGE);
_builder_1.append(" ");
String _join = IterableExtensions.join(resources, ",\n");
_builder_1.append(_join);
_builder_1.append(" ");
_builder_1.append(POSTFIX_MESSAGE);
MultiStatus _multiStatus = new MultiStatus(PLUGINID, CODE, ((IStatus[])Conversions.unwrapArray(_converted_errors, IStatus.class)), _builder_1.toString(), null);
throw new CoreException(_multiStatus);
}
StringConcatenation _builder_2 = new StringConcatenation();
_builder_2.append("{{");
_builder_2.newLine();
_builder_2.append("\t");
_builder_2.append(text, "\t");
_builder_2.newLineIfNotEmpty();
_builder_2.append("}}");
_builder_2.newLine();
text = _builder_2.toString();
return text;
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
public QualifiedName getWorkloadDtoClass(final Blip blip) {
BlipWorkload _workload = blip.getWorkload();
boolean _equals = Objects.equal(_workload, null);
if (_equals) {
return null;
} else {
return this._iQualifiedNameProvider.getFullyQualifiedName(blip.getWorkload().getSource().getDtoRef());
}
}
public String getFunctionGroupClass(final Blip blip) {
FunctionLibraryBlipGroup _functionGroup = blip.getFunctionGroup();
boolean _equals = Objects.equal(_functionGroup, null);
if (_equals) {
return "null";
}
StringConcatenation _builder = new StringConcatenation();
QualifiedName _fullyQualifiedName = this._iQualifiedNameProvider.getFullyQualifiedName(blip.getFunctionGroup());
_builder.append(_fullyQualifiedName);
return _builder.toString();
}
public String getFunctionGroupClassName(final Blip blip) {
FunctionLibraryBlipGroup _functionGroup = blip.getFunctionGroup();
boolean _equals = Objects.equal(_functionGroup, null);
if (_equals) {
return "null";
}
StringConcatenation _builder = new StringConcatenation();
QualifiedName _fullyQualifiedName = this._iQualifiedNameProvider.getFullyQualifiedName(blip.getFunctionGroup());
_builder.append(_fullyQualifiedName);
_builder.append(".class");
return _builder.toString();
}
public String getWorkloadDtoClassName(final Blip blip) {
boolean _equals = this.getWorkloadDtoFqn(blip).equals("null");
if (_equals) {
return "null";
}
StringConcatenation _builder = new StringConcatenation();
String _workloadDtoFqn = this.getWorkloadDtoFqn(blip);
_builder.append(_workloadDtoFqn);
_builder.append(".class");
return _builder.toString();
}
public String getWorkloadDtoFqn(final Blip blip) {
QualifiedName _workloadDtoClass = this.getWorkloadDtoClass(blip);
boolean _equals = Objects.equal(_workloadDtoClass, null);
if (_equals) {
return "null";
} else {
StringConcatenation _builder = new StringConcatenation();
QualifiedName _workloadDtoClass_1 = this.getWorkloadDtoClass(blip);
_builder.append(_workloadDtoClass_1);
return _builder.toString();
}
}
public String getOperativeDtoClassName(final BlipItem blipItem) {
boolean _equals = this.getOperativeDtoFqn(blipItem).equals("null");
if (_equals) {
return "null";
}
StringConcatenation _builder = new StringConcatenation();
CharSequence _operativeDtoFqn = this.getOperativeDtoFqn(blipItem);
_builder.append(_operativeDtoFqn);
_builder.append(".class");
return _builder.toString();
}
public CharSequence getOperativeDtoFqn(final BlipItem blipItem) {
CharSequence _xblockexpression = null;
{
EObject _eContainer = blipItem.eContainer();
Blip blip = ((Blip) _eContainer);
CharSequence _xifexpression = null;
QualifiedName _workloadDtoClass = this.getWorkloadDtoClass(blip);
boolean _equals = Objects.equal(_workloadDtoClass, null);
if (_equals) {
_xifexpression = "null";
} else {
StringConcatenation _builder = new StringConcatenation();
QualifiedName _fullyQualifiedName = this._iQualifiedNameProvider.getFullyQualifiedName(blipItem.getOperativeLDto());
_builder.append(_fullyQualifiedName);
_xifexpression = _builder;
}
_xblockexpression = _xifexpression;
}
return _xblockexpression;
}
public String asString(final ServiceExecutionModeEnum mode) {
String _switchResult = null;
if (mode != null) {
switch (mode) {
case ONEWAY:
_switchResult = ServiceExecutionMode.ONEWAY.toString();
break;
case SYNC:
_switchResult = ServiceExecutionMode.SYNC.toString();
break;
default:
break;
}
}
return _switchResult;
}
public String createBlipItems(final Blip blip) {
String text = "";
EList<BlipItem> _items = blip.getItems();
for (final BlipItem blipItem : _items) {
{
final CharSequence itemClass = this.blipItemAbstractClassName(blipItem);
boolean _matched = false;
if (blipItem instanceof BlipUserTask) {
_matched=true;
String onEntry = "null";
FunctionLibraryFunction _onEntry = ((BlipUserTask)blipItem).getOnEntry();
boolean _notEquals = (!Objects.equal(_onEntry, null));
if (_notEquals) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("\"");
String _name = ((BlipUserTask)blipItem).getOnEntry().getName();
_builder.append(_name);
_builder.append("\"");
onEntry = _builder.toString();
}
String onExit = "null";
FunctionLibraryFunction _onExit = ((BlipUserTask)blipItem).getOnExit();
boolean _notEquals_1 = (!Objects.equal(_onExit, null));
if (_notEquals_1) {
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append("\"");
String _name_1 = ((BlipUserTask)blipItem).getOnExit().getName();
_builder_1.append(_name_1);
_builder_1.append("\"");
onExit = _builder_1.toString();
}
StringConcatenation _builder_2 = new StringConcatenation();
_builder_2.append(text);
_builder_2.append(", new ");
_builder_2.append(itemClass);
_builder_2.append("(\"");
String _name_2 = ((BlipUserTask)blipItem).getName();
_builder_2.append(_name_2);
_builder_2.append("\", \"");
String _id = ((BlipUserTask)blipItem).getTask().getId();
_builder_2.append(_id);
_builder_2.append("\", ");
_builder_2.append(onEntry);
_builder_2.append(", ");
_builder_2.append(onExit);
_builder_2.append(") {");
_builder_2.newLineIfNotEmpty();
_builder_2.append("\t");
_builder_2.append("@Override");
_builder_2.newLine();
_builder_2.append("\t");
_builder_2.append("public Class<?> getOperativeDtoClass() {");
_builder_2.newLine();
_builder_2.append("\t\t");
_builder_2.append("return ");
String _operativeDtoClassName = this.getOperativeDtoClassName(blipItem);
_builder_2.append(_operativeDtoClassName, "\t\t");
_builder_2.append(";");
_builder_2.newLineIfNotEmpty();
_builder_2.append("\t");
_builder_2.append("}");
_builder_2.newLine();
_builder_2.append("\t");
_builder_2.append("@Override");
_builder_2.newLine();
_builder_2.append("\t");
_builder_2.append("public List<IDto> getOperativeDtos(IDto item0) {");
_builder_2.newLine();
_builder_2.append("\t\t");
CharSequence _operativeDtosBody = this.getOperativeDtosBody(blipItem);
_builder_2.append(_operativeDtosBody, "\t\t");
_builder_2.newLineIfNotEmpty();
_builder_2.append("\t");
_builder_2.append("}");
_builder_2.newLine();
_builder_2.append("\t");
String _operativeCastedDtosMethod = this.getOperativeCastedDtosMethod(blipItem);
_builder_2.append(_operativeCastedDtosMethod, "\t");
_builder_2.newLineIfNotEmpty();
_builder_2.append("}");
_builder_2.newLine();
text = _builder_2.toString();
}
if (!_matched) {
if (blipItem instanceof BlipCallActivity) {
_matched=true;
String onEntry = "null";
FunctionLibraryFunction _onEntry = ((BlipCallActivity)blipItem).getOnEntry();
boolean _notEquals = (!Objects.equal(_onEntry, null));
if (_notEquals) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("\"");
String _name = ((BlipCallActivity)blipItem).getOnEntry().getName();
_builder.append(_name);
_builder.append("\"");
onEntry = _builder.toString();
}
String onExit = "null";
FunctionLibraryFunction _onExit = ((BlipCallActivity)blipItem).getOnExit();
boolean _notEquals_1 = (!Objects.equal(_onExit, null));
if (_notEquals_1) {
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append("\"");
String _name_1 = ((BlipCallActivity)blipItem).getOnExit().getName();
_builder_1.append(_name_1);
_builder_1.append("\"");
onExit = _builder_1.toString();
}
StringConcatenation _builder_2 = new StringConcatenation();
_builder_2.append(text);
_builder_2.append(", new ");
_builder_2.append(itemClass);
_builder_2.append("(\"");
String _name_2 = ((BlipCallActivity)blipItem).getName();
_builder_2.append(_name_2);
_builder_2.append("\", \"");
String _id = ((BlipCallActivity)blipItem).getCallActivity().getId();
_builder_2.append(_id);
_builder_2.append("\", ");
_builder_2.append(onEntry);
_builder_2.append(", ");
_builder_2.append(onExit);
_builder_2.append(")");
_builder_2.newLineIfNotEmpty();
text = _builder_2.toString();
}
}
if (!_matched) {
if (blipItem instanceof BlipScriptTask) {
_matched=true;
StringConcatenation _builder = new StringConcatenation();
_builder.append(text);
_builder.append(", new ");
_builder.append(itemClass);
_builder.append("(\"");
String _name = ((BlipScriptTask)blipItem).getName();
_builder.append(_name);
_builder.append("\", \"");
String _id = ((BlipScriptTask)blipItem).getTask().getId();
_builder.append(_id);
_builder.append("\", \"");
String _name_1 = ((BlipScriptTask)blipItem).getFunction().getName();
_builder.append(_name_1);
_builder.append("\")");
_builder.newLineIfNotEmpty();
text = _builder.toString();
}
}
if (!_matched) {
if (blipItem instanceof BlipPersistTask) {
_matched=true;
StringConcatenation _builder = new StringConcatenation();
_builder.append(text);
_builder.append(", new ");
_builder.append(itemClass);
_builder.append("(\"");
String _name = ((BlipPersistTask)blipItem).getName();
_builder.append(_name);
_builder.append("\", \"");
String _id = ((BlipPersistTask)blipItem).getTask().getId();
_builder.append(_id);
_builder.append("\", \"");
String _name_1 = ((BlipPersistTask)blipItem).getFunction().getName();
_builder.append(_name_1);
_builder.append("\")");
_builder.newLineIfNotEmpty();
text = _builder.toString();
}
}
if (!_matched) {
if (blipItem instanceof BlipServiceTask) {
_matched=true;
String onEntry = "null";
FunctionLibraryFunction _onEntry = ((BlipServiceTask)blipItem).getOnEntry();
boolean _notEquals = (!Objects.equal(_onEntry, null));
if (_notEquals) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("\"");
String _name = ((BlipServiceTask)blipItem).getOnEntry().getName();
_builder.append(_name);
_builder.append("\"");
onEntry = _builder.toString();
}
String onExit = "null";
FunctionLibraryFunction _onExit = ((BlipServiceTask)blipItem).getOnExit();
boolean _notEquals_1 = (!Objects.equal(_onExit, null));
if (_notEquals_1) {
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append("\"");
String _name_1 = ((BlipServiceTask)blipItem).getOnExit().getName();
_builder_1.append(_name_1);
_builder_1.append("\"");
onExit = _builder_1.toString();
}
String executionMode = "";
int _timeoutInSecs = ((BlipServiceTask)blipItem).getTimeoutInSecs();
boolean _greaterThan = (_timeoutInSecs > 0);
if (_greaterThan) {
StringConcatenation _builder_2 = new StringConcatenation();
_builder_2.append("ServiceExecutionMode.ASYNCHRON, ");
int _timeoutInSecs_1 = ((BlipServiceTask)blipItem).getTimeoutInSecs();
_builder_2.append(_timeoutInSecs_1);
executionMode = _builder_2.toString();
} else {
StringConcatenation _builder_3 = new StringConcatenation();
_builder_3.append("ServiceExecutionMode.");
String _asString = this.asString(((BlipServiceTask)blipItem).getExecutionMode());
_builder_3.append(_asString);
_builder_3.append(", 0");
executionMode = _builder_3.toString();
}
String implementation = "";
FunctionLibraryFunction _function = ((BlipServiceTask)blipItem).getFunction();
boolean _notEquals_2 = (!Objects.equal(_function, null));
if (_notEquals_2) {
StringConcatenation _builder_4 = new StringConcatenation();
_builder_4.append("ServiceImplementation.FUNCTION_LIBRARY, \"");
String _functionGroupClass = this.getFunctionGroupClass(blip);
_builder_4.append(_functionGroupClass);
_builder_4.append("\", \"");
String _name_2 = ((BlipServiceTask)blipItem).getFunction().getName();
_builder_4.append(_name_2);
_builder_4.append("\"");
implementation = _builder_4.toString();
} else {
StringConcatenation _builder_5 = new StringConcatenation();
_builder_5.append("ServiceImplementation.WEB_SERVICE, \"");
String _webServiceInterface = ((BlipServiceTask)blipItem).getWebServiceInterface();
_builder_5.append(_webServiceInterface);
_builder_5.append("\", \"");
String _webServiceOperation = ((BlipServiceTask)blipItem).getWebServiceOperation();
_builder_5.append(_webServiceOperation);
_builder_5.append("\"");
implementation = _builder_5.toString();
}
StringConcatenation _builder_6 = new StringConcatenation();
_builder_6.append(text);
_builder_6.append(", new ");
_builder_6.append(itemClass);
_builder_6.append("(\"");
String _name_3 = ((BlipServiceTask)blipItem).getName();
_builder_6.append(_name_3);
_builder_6.append("\", \"");
String _id = ((BlipServiceTask)blipItem).getTask().getId();
_builder_6.append(_id);
_builder_6.append("\", ");
_builder_6.append(onEntry);
_builder_6.append(", ");
_builder_6.append(onExit);
_builder_6.append(", ");
_builder_6.append(executionMode);
_builder_6.append(", ");
_builder_6.append(implementation);
_builder_6.append(") {");
_builder_6.newLineIfNotEmpty();
_builder_6.append("\t");
_builder_6.append("@Override");
_builder_6.newLine();
_builder_6.append("\t");
_builder_6.append("public Class<?> getOperativeDtoClass() {");
_builder_6.newLine();
_builder_6.append("\t\t");
_builder_6.append("return ");
String _workloadDtoClassName = this.getWorkloadDtoClassName(blip);
_builder_6.append(_workloadDtoClassName, "\t\t");
_builder_6.append(";");
_builder_6.newLineIfNotEmpty();
_builder_6.append("\t");
_builder_6.append("}");
_builder_6.newLine();
_builder_6.append("\t");
_builder_6.append("@Override");
_builder_6.newLine();
_builder_6.append("\t");
_builder_6.append("public List<IDto> getOperativeDtos(IDto item0) {");
_builder_6.newLine();
_builder_6.append("\t\t");
_builder_6.append("return Collections.emptyList();");
_builder_6.newLine();
_builder_6.append("\t");
_builder_6.append("}");
_builder_6.newLine();
_builder_6.append("}");
_builder_6.newLine();
text = _builder_6.toString();
}
}
if (!_matched) {
if (blipItem instanceof BlipSplitGateway) {
_matched=true;
String mode = "";
if ((blipItem instanceof BlipExclusiveSplitGateway)) {
mode = "GatewayMode.EXCLUSIVE";
} else {
if ((blipItem instanceof BlipInclusiveSplitGateway)) {
mode = "GatewayMode.INCLUSIVE";
}
}
String outgoings = "";
int priority = 0;
EList<BlipOutGoing> _outgoings = ((BlipSplitGateway)blipItem).getOutgoings();
for (final BlipOutGoing outgoing : _outgoings) {
{
priority = (priority + 1);
boolean _isIsDefault = outgoing.isIsDefault();
if (_isIsDefault) {
StringConcatenation _builder = new StringConcatenation();
_builder.append(outgoings);
_builder.append(",");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("new BlipBPMOutgoing(\"");
String _name = outgoing.getName();
_builder.append(_name, "\t\t");
_builder.append("\", \"");
String _id = outgoing.getSequenceFlow().getId();
_builder.append(_id, "\t\t");
_builder.append("\", ");
_builder.append(priority, "\t\t");
_builder.append(")");
outgoings = _builder.toString();
} else {
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append(outgoings);
_builder_1.append(",");
_builder_1.newLineIfNotEmpty();
_builder_1.append("\t\t");
_builder_1.append("new BlipBPMOutgoing(\"");
String _name_1 = outgoing.getName();
_builder_1.append(_name_1, "\t\t");
_builder_1.append("\", \"");
String _id_1 = outgoing.getSequenceFlow().getId();
_builder_1.append(_id_1, "\t\t");
_builder_1.append("\", ");
_builder_1.append(priority, "\t\t");
_builder_1.append(", \"");
String _name_2 = outgoing.getConstraint().getName();
_builder_1.append(_name_2, "\t\t");
_builder_1.append("\")");
outgoings = _builder_1.toString();
}
}
}
StringConcatenation _builder = new StringConcatenation();
_builder.append(text);
_builder.append(", new ");
_builder.append(itemClass);
_builder.append("(\"");
String _name = ((BlipSplitGateway)blipItem).getName();
_builder.append(_name);
_builder.append("\", \"");
String _id = ((BlipSplitGateway)blipItem).getGateway().getId();
_builder.append(_id);
_builder.append("\", ");
_builder.append(mode);
_builder.append(outgoings);
_builder.append(")");
_builder.newLineIfNotEmpty();
text = _builder.toString();
}
}
if (!_matched) {
if (blipItem instanceof BlipEndEvent) {
_matched=true;
StringConcatenation _builder = new StringConcatenation();
_builder.append(text);
_builder.append(", new ");
_builder.append(itemClass);
_builder.append("(\"");
String _name = ((BlipEndEvent)blipItem).getName();
_builder.append(_name);
_builder.append("\", \"");
String _id = ((BlipEndEvent)blipItem).getEvent().getId();
_builder.append(_id);
_builder.append("\", ");
{
EndEventHandlingEnum _endHandling = ((BlipEndEvent)blipItem).getEndHandling();
boolean _equals = Objects.equal(_endHandling, EndEventHandlingEnum.TERMINATES_PROCESS);
if (_equals) {
_builder.append("true");
} else {
_builder.append("false");
}
}
_builder.append(")");
_builder.newLineIfNotEmpty();
text = _builder.toString();
}
}
}
}
return text;
}
public CharSequence getOperativeDtosBody(final BlipItem blipItem) {
CharSequence _xblockexpression = null;
{
EObject _eContainer = blipItem.eContainer();
Blip blip = ((Blip) _eContainer);
CharSequence _xifexpression = null;
QualifiedName _workloadDtoClass = this.getWorkloadDtoClass(blip);
boolean _equals = Objects.equal(_workloadDtoClass, null);
if (_equals) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("return null;");
_xifexpression = _builder;
} else {
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append("List<IDto> result = new java.util.ArrayList<>();");
_builder_1.newLine();
_builder_1.append("if\t(item0 instanceof ");
QualifiedName _workloadDtoClass_1 = this.getWorkloadDtoClass(blip);
_builder_1.append(_workloadDtoClass_1);
_builder_1.append(") {");
_builder_1.newLineIfNotEmpty();
_builder_1.append("\t");
_builder_1.append("for\t(");
QualifiedName _fullyQualifiedName = this._iQualifiedNameProvider.getFullyQualifiedName(blipItem.getOperativeLDto());
_builder_1.append(_fullyQualifiedName, "\t");
_builder_1.append(" dto : getOperative");
String _name = blipItem.getOperativeLDto().getName();
_builder_1.append(_name, "\t");
_builder_1.append("s((");
QualifiedName _workloadDtoClass_2 = this.getWorkloadDtoClass(blip);
_builder_1.append(_workloadDtoClass_2, "\t");
_builder_1.append(")item0)) {");
_builder_1.newLineIfNotEmpty();
_builder_1.append("\t\t");
_builder_1.append("result.add(dto);");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("}");
_builder_1.newLine();
_builder_1.append("}");
_builder_1.newLine();
_builder_1.append("return result;");
_builder_1.newLine();
_xifexpression = _builder_1;
}
_xblockexpression = _xifexpression;
}
return _xblockexpression;
}
public String getOperativeCastedDtosMethod(final BlipItem blipItem) {
EObject _eContainer = blipItem.eContainer();
Blip blip = ((Blip) _eContainer);
QualifiedName _workloadDtoClass = this.getWorkloadDtoClass(blip);
boolean _equals = Objects.equal(_workloadDtoClass, null);
if (_equals) {
return "";
} else {
LDto workloadDto = blip.getWorkload().getSource().getDtoRef();
LDto operativeLDto = blipItem.getOperativeLDto();
String body = "";
boolean _equals_1 = workloadDto.equals(operativeLDto);
if (_equals_1) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("List<");
QualifiedName _fullyQualifiedName = this._iQualifiedNameProvider.getFullyQualifiedName(blipItem.getOperativeLDto());
_builder.append(_fullyQualifiedName);
_builder.append("> result = new java.util.ArrayList<>();");
_builder.newLineIfNotEmpty();
_builder.append("if\t(item0 != null) {");
_builder.newLine();
_builder.append("\t");
_builder.append("result.add(item0);");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.append("return result;");
_builder.newLine();
body = _builder.toString();
} else {
StringConcatenation _builder_1 = new StringConcatenation();
String _operativeDtoMethod = this.getOperativeDtoMethod("item0", blipItem);
_builder_1.append(_operativeDtoMethod);
body = _builder_1.toString();
}
StringConcatenation _builder_2 = new StringConcatenation();
_builder_2.append("public List<");
QualifiedName _fullyQualifiedName_1 = this._iQualifiedNameProvider.getFullyQualifiedName(blipItem.getOperativeLDto());
_builder_2.append(_fullyQualifiedName_1);
_builder_2.append("> getOperative");
String _name = blipItem.getOperativeLDto().getName();
_builder_2.append(_name);
_builder_2.append("s(");
QualifiedName _workloadDtoClass_1 = this.getWorkloadDtoClass(blip);
_builder_2.append(_workloadDtoClass_1);
_builder_2.append(" item0) {");
_builder_2.newLineIfNotEmpty();
_builder_2.append("\t");
_builder_2.append(body, "\t");
_builder_2.newLineIfNotEmpty();
_builder_2.append("}");
_builder_2.newLine();
String text = _builder_2.toString();
return text;
}
}
private String getOperativeDtoMethod(final String rootDto, final BlipItem blipItem) {
boolean _isOperativeDtoDefined = BlipHelper.isOperativeDtoDefined(blipItem);
if (_isOperativeDtoDefined) {
LDto operativeDto = ((LDto) null);
EObject _eContainer = null;
if (blipItem!=null) {
_eContainer=blipItem.eContainer();
}
BlipWorkload _workload = null;
if (((Blip) _eContainer)!=null) {
_workload=((Blip) _eContainer).getWorkload();
}
BlipDto _source = null;
if (_workload!=null) {
_source=_workload.getSource();
}
LDto _dtoRef = null;
if (_source!=null) {
_dtoRef=_source.getDtoRef();
}
operativeDto = _dtoRef;
boolean _and = false;
if (!((!Objects.equal(operativeDto, null)) && (!Objects.equal(operativeDto.getName(), null)))) {
_and = false;
} else {
String _name = operativeDto.getName();
BlipDtoPath _dtoPath = null;
if (blipItem!=null) {
_dtoPath=blipItem.getDtoPath();
}
boolean _equals = _name.equals(_dtoPath);
boolean _not = (!_equals);
_and = _not;
}
if (_and) {
BlipDtoPath _dtoPath_1 = null;
if (blipItem!=null) {
_dtoPath_1=blipItem.getDtoPath();
}
String _dtoPath_2 = _dtoPath_1.getDtoPath();
String _name_1 = operativeDto.getName();
String _plus = (_name_1 + ".");
final String[] dtoChildNames = _dtoPath_2.replace(_plus, "").split("\\.");
int actual = 1;
StringConcatenation _builder = new StringConcatenation();
String method = _builder.toString();
for (final String dtoChildName : dtoChildNames) {
{
final QualifiedName previousclass = this._iQualifiedNameProvider.getFullyQualifiedName(operativeDto);
final LDtoAbstractReference dtoFeature = BlipHelper.getDtoFeature(operativeDto, dtoChildName);
operativeDto = BlipHelper.getReferencedLDto(operativeDto, dtoChildName);
boolean multiple = false;
String getter = "";
final QualifiedName actualclass = this._iQualifiedNameProvider.getFullyQualifiedName(operativeDto);
final int previous = (actual - 1);
if ((dtoFeature instanceof LDtoInheritedReference)) {
LMultiplicity _multiplicity = ((LDtoInheritedReference)dtoFeature).getInheritedFeature().getMultiplicity();
boolean _notEquals = (!Objects.equal(_multiplicity, null));
multiple = _notEquals;
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append("get");
String _capitalize = StringUtils.capitalize(((LDtoInheritedReference)dtoFeature).getInheritedFeature().getName());
_builder_1.append(_capitalize);
_builder_1.append("()");
getter = _builder_1.toString();
} else {
if ((dtoFeature instanceof LDtoReference)) {
LMultiplicity _multiplicity_1 = ((LDtoReference)dtoFeature).getMultiplicity();
boolean _notEquals_1 = (!Objects.equal(_multiplicity_1, null));
multiple = _notEquals_1;
StringConcatenation _builder_2 = new StringConcatenation();
_builder_2.append("get");
String _capitalize_1 = StringUtils.capitalize(((LDtoReference)dtoFeature).getName());
_builder_2.append(_capitalize_1);
_builder_2.append("()");
getter = _builder_2.toString();
}
}
StringConcatenation _builder_3 = new StringConcatenation();
_builder_3.append(method);
_builder_3.newLineIfNotEmpty();
_builder_3.append("List<");
_builder_3.append(actualclass);
_builder_3.append("> result");
_builder_3.append(actual);
_builder_3.append(" = new java.util.ArrayList<>();");
_builder_3.newLineIfNotEmpty();
method = _builder_3.toString();
if ((actual > 1)) {
StringConcatenation _builder_4 = new StringConcatenation();
_builder_4.append(method);
_builder_4.newLineIfNotEmpty();
_builder_4.append("for (");
_builder_4.append(previousclass);
_builder_4.append(" item");
_builder_4.append(previous);
_builder_4.append(" : result");
_builder_4.append(previous);
_builder_4.append(") {");
_builder_4.newLineIfNotEmpty();
method = _builder_4.toString();
}
if (multiple) {
StringConcatenation _builder_5 = new StringConcatenation();
_builder_5.append(method);
_builder_5.newLineIfNotEmpty();
_builder_5.append("result");
_builder_5.append(actual);
_builder_5.append(".addAll(item");
_builder_5.append(previous);
_builder_5.append(".");
_builder_5.append(getter);
_builder_5.append(");");
_builder_5.newLineIfNotEmpty();
method = _builder_5.toString();
} else {
StringConcatenation _builder_6 = new StringConcatenation();
_builder_6.append(method);
_builder_6.newLineIfNotEmpty();
_builder_6.append(actualclass);
_builder_6.append(" item = item");
_builder_6.append(previous);
_builder_6.append(".");
_builder_6.append(getter);
_builder_6.append(";");
_builder_6.newLineIfNotEmpty();
_builder_6.append("if\t(item != null) {");
_builder_6.newLine();
_builder_6.append("\t");
_builder_6.append("result");
_builder_6.append(actual, "\t");
_builder_6.append(".add(item);");
_builder_6.newLineIfNotEmpty();
_builder_6.append("}");
_builder_6.newLine();
method = _builder_6.toString();
}
if ((actual > 1)) {
StringConcatenation _builder_7 = new StringConcatenation();
_builder_7.append(method);
_builder_7.newLineIfNotEmpty();
_builder_7.append("}");
_builder_7.newLine();
method = _builder_7.toString();
}
actual = (actual + 1);
}
}
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append(method);
_builder_1.newLineIfNotEmpty();
_builder_1.append("return result");
_builder_1.append((actual - 1));
_builder_1.append(";");
_builder_1.newLineIfNotEmpty();
return _builder_1.toString();
}
}
StringConcatenation _builder_2 = new StringConcatenation();
_builder_2.append("return ");
_builder_2.append(rootDto);
_builder_2.append(";");
return _builder_2.toString();
}
/**
* <p>create an injectable context function to be used by an e4 application.</p>
*/
public void toContextOperations(final JvmGenericType type, final BlipPackage pkg, final String clsName) {
JvmOperation operation = null;
EList<JvmMember> _members = type.getMembers();
final Procedure1<JvmOperation> _function = (JvmOperation it) -> {
EList<JvmAnnotationReference> _annotations = it.getAnnotations();
JvmAnnotationReference _annotationRef = this._annotationTypesBuilder.annotationRef(Override.class);
this._jvmTypesBuilder.<JvmAnnotationReference>operator_add(_annotations, _annotationRef);
it.setVisibility(JvmVisibility.PUBLIC);
EList<JvmFormalParameter> _parameters = it.getParameters();
JvmFormalParameter _parameter = this._jvmTypesBuilder.toParameter(pkg, "context", this._typeReferenceBuilder.typeRef(IEclipseContext.class));
this._jvmTypesBuilder.<JvmFormalParameter>operator_add(_parameters, _parameter);
EList<JvmFormalParameter> _parameters_1 = it.getParameters();
JvmFormalParameter _parameter_1 = this._jvmTypesBuilder.toParameter(pkg, "contextKey", this._typeReferenceBuilder.typeRef(String.class));
this._jvmTypesBuilder.<JvmFormalParameter>operator_add(_parameters_1, _parameter_1);
final Procedure1<ITreeAppendable> _function_1 = (ITreeAppendable it_1) -> {
StringConcatenation _builder = new StringConcatenation();
_builder.append("MApplication application = context.get(MApplication.class);");
_builder.newLine();
_builder.append("IEclipseContext appCtx = application.getContext();");
_builder.newLine();
_builder.append("IBlipBPMFunctionProvider provider = ContextInjectionFactory.make(");
_builder.append(clsName);
_builder.append(".class, appCtx);");
_builder.newLineIfNotEmpty();
_builder.append("appCtx.set(IBlipBPMFunctionProvider.class, provider);");
_builder.newLine();
_builder.append("return provider;");
it_1.append(_builder);
};
this._jvmTypesBuilder.setBody(it, _function_1);
};
JvmOperation _method = this._jvmTypesBuilder.toMethod(pkg, "compute", this._typeReferenceBuilder.typeRef(Object.class), _function);
this._jvmTypesBuilder.<JvmOperation>operator_add(_members, _method);
}
public static String getResourceName(final Blip blip) {
org.eclipse.bpmn2.Process _process = blip.getProcess();
boolean _notEquals = (!Objects.equal(_process, null));
if (_notEquals) {
org.eclipse.bpmn2.Process _process_1 = blip.getProcess();
EObject parent = ((EObject) _process_1);
while (((!Objects.equal(parent, null)) && (!(parent instanceof DocumentRoot)))) {
parent = parent.eContainer();
}
boolean _matched = false;
if (parent instanceof DocumentRoot) {
_matched=true;
URI uri = ((DocumentRoot)parent).eResource().getURI();
int _segmentCount = uri.segmentCount();
int _minus = (_segmentCount - 2);
String _segment = uri.segment(_minus);
String _plus = (_segment + "/");
int _segmentCount_1 = uri.segmentCount();
int _minus_1 = (_segmentCount_1 - 1);
String _segment_1 = uri.segment(_minus_1);
String relPath = (_plus + _segment_1);
return relPath.replace("%20", " ");
}
}
return "<no-process-found>";
}
public void toOperations(final JvmDeclaredType type, final BlipPackage blipPkg) {
EList<JvmMember> _members = type.getMembers();
final Procedure1<JvmOperation> _function = (JvmOperation it) -> {
EList<JvmAnnotationReference> _annotations = it.getAnnotations();
JvmAnnotationReference _annotationRef = this._annotationTypesBuilder.annotationRef(Override.class);
this._jvmTypesBuilder.<JvmAnnotationReference>operator_add(_annotations, _annotationRef);
final Procedure1<ITreeAppendable> _function_1 = (ITreeAppendable it_1) -> {
StringConcatenation _builder = new StringConcatenation();
String _initializeStartInfos = this.initializeStartInfos(blipPkg);
_builder.append(_initializeStartInfos);
it_1.append(_builder);
};
this._jvmTypesBuilder.setBody(it, _function_1);
};
JvmOperation _method = this._jvmTypesBuilder.toMethod(blipPkg, "initializeStartInfos", this._typeReferenceBuilder.typeRef(HashMap.class, this._typeReferenceBuilder.typeRef(String.class), this._typeReferenceBuilder.typeRef(IBlipBPMStartInfo.class)), _function);
this._jvmTypesBuilder.<JvmOperation>operator_add(_members, _method);
EList<JvmMember> _members_1 = type.getMembers();
final Procedure1<JvmOperation> _function_1 = (JvmOperation it) -> {
EList<JvmAnnotationReference> _annotations = it.getAnnotations();
JvmAnnotationReference _annotationRef = this._annotationTypesBuilder.annotationRef(Override.class);
this._jvmTypesBuilder.<JvmAnnotationReference>operator_add(_annotations, _annotationRef);
final Procedure1<ITreeAppendable> _function_2 = (ITreeAppendable it_1) -> {
StringConcatenation _builder = new StringConcatenation();
String _initializeBpmEngine = this.initializeBpmEngine(blipPkg);
_builder.append(_initializeBpmEngine);
it_1.append(_builder);
};
this._jvmTypesBuilder.setBody(it, _function_2);
};
JvmOperation _method_1 = this._jvmTypesBuilder.toMethod(blipPkg, "initializeBpmEngine", this._typeReferenceBuilder.typeRef(boolean.class), _function_1);
this._jvmTypesBuilder.<JvmOperation>operator_add(_members_1, _method_1);
}
public String initializeStartInfos(final BlipPackage blipPkg) {
String body = "";
StringConcatenation _builder = new StringConcatenation();
_builder.append(body);
_builder.newLineIfNotEmpty();
_builder.append("return new HashMap<String,");
String _simpleName = IBlipBPMStartInfo.class.getSimpleName();
_builder.append(_simpleName);
_builder.append(">() ");
String _createBPMNCalls = this.createBPMNCalls(blipPkg);
_builder.append(_createBPMNCalls);
_builder.append(";");
_builder.newLineIfNotEmpty();
body = _builder.toString();
return body;
}
public String initializeBpmEngine(final BlipPackage blipPkg) {
String body = "";
StringConcatenation _builder = new StringConcatenation();
_builder.append(body);
_builder.newLineIfNotEmpty();
_builder.append("boolean hasErrors = false;");
_builder.newLine();
_builder.append("if(bpmEngine != null) {");
_builder.newLine();
_builder.append("\t");
_builder.append("IBlipProcessPermissions blipProcessPermissions = null;");
_builder.newLine();
_builder.append("\t");
_builder.append("bpmEngine.clearErrors();");
_builder.newLine();
_builder.append("\t");
_builder.append("if\t(organizationService != null) {");
_builder.newLine();
_builder.append("\t\t");
_builder.append("blipProcessPermissions = organizationService.getBlipProcessPermissions();");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.append("for (final String name : startInfos.keySet()) {");
_builder.newLine();
_builder.append("\t\t");
_builder.append("String resourceBundlePath = \"platform:/plugin/\"+FrameworkUtil.getBundle(");
String _className = this.className(blipPkg);
_builder.append(_className, "\t\t");
_builder.append(".class).getSymbolicName()+\"/\"+startInfos.get(name).getResourceName(); ");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("boolean success = bpmEngine.registerProcess(startInfos.get(name), resourceBundlePath, ");
String _className_1 = this.className(blipPkg);
_builder.append(_className_1, "\t\t");
_builder.append(".class, blipProcessPermissions);");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("if(!success) {");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("hasErrors = true;");
_builder.newLine();
_builder.append("\t\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append(" \t");
_builder.append("if (hasErrors) {");
_builder.newLine();
_builder.append(" \t\t");
_builder.append("log.error(bpmEngine.getErrors());");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.append("return hasErrors;");
_builder.newLine();
body = _builder.toString();
return body;
}
public void infer(final EObject blipPkg, final IJvmDeclaredTypeAcceptor acceptor, final boolean isPreIndexingPhase) {
if (blipPkg instanceof BlipPackage) {
_infer((BlipPackage)blipPkg, acceptor, isPreIndexingPhase);
return;
} else if (blipPkg != null) {
_infer(blipPkg, acceptor, isPreIndexingPhase);
return;
} else {
throw new IllegalArgumentException("Unhandled parameter types: " +
Arrays.<Object>asList(blipPkg, acceptor, isPreIndexingPhase).toString());
}
}
}