blob: 86b5d9335c861d62f2ac79c95afbb2c4c6d662e9 [file] [log] [blame]
/**
* Copyright (c) 2011, 2018 - 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
*
* generated by Xtext 2.11.0
*/
package org.eclipse.osbp.xtext.signal.jvmmodel;
import com.google.common.base.Objects;
import java.io.IOException;
import java.nio.file.Path;
import java.util.Arrays;
import java.util.HashSet;
import java.util.concurrent.ExecutorService;
import javax.inject.Inject;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.osbp.core.api.persistence.IPersistenceService;
import org.eclipse.osbp.datainterchange.api.IDataInterchange;
import org.eclipse.osbp.dsl.common.xtext.extensions.AnnotationExtension;
import org.eclipse.osbp.ui.api.customfields.IBlobService;
import org.eclipse.osbp.ui.api.useraccess.IUserAccessService;
import org.eclipse.osbp.xtext.datainterchange.DataInterchange;
import org.eclipse.osbp.xtext.datainterchange.DataInterchangeFile;
import org.eclipse.osbp.xtext.datainterchange.DataInterchangeFileCSV;
import org.eclipse.osbp.xtext.datainterchange.DataInterchangeFileEDI;
import org.eclipse.osbp.xtext.datainterchange.DataInterchangeFileXML;
import org.eclipse.osbp.xtext.datainterchange.common.WorkerThreadRunnable;
import org.eclipse.osbp.xtext.signal.DataTransfer;
import org.eclipse.osbp.xtext.signal.ListTransfer;
import org.eclipse.osbp.xtext.signal.SignalActionEnum;
import org.eclipse.osbp.xtext.signal.SignalDSLPackage;
import org.eclipse.osbp.xtext.signal.SignalDatainterchange;
import org.eclipse.osbp.xtext.signal.SignalExecutionTypeEnum;
import org.eclipse.osbp.xtext.signal.SignalHandler;
import org.eclipse.osbp.xtext.signal.SignalPackage;
import org.eclipse.osbp.xtext.signal.SignalWatcher;
import org.eclipse.osbp.xtext.signal.SingleTransfer;
import org.eclipse.osbp.xtext.signal.common.OSBPSignalWatcher;
import org.eclipse.osbp.xtext.signal.jvmmodel.SignalModelGenerator;
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.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.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.Extension;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
import org.eclipse.xtext.xbase.lib.StringExtensions;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Deactivate;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ReferenceCardinality;
import org.osgi.service.component.annotations.ReferencePolicy;
import org.slf4j.Logger;
/**
* <p>Infers a JVM model from the source model.</p>
*
* <p>The JVM model should contain all elements that would appear in the Java code
* which is generated from the source model. Other models link against the JVM model rather than the source model.</p>
*/
@SuppressWarnings("all")
public class SignalDSLJvmModelInferrer extends AbstractModelInferrer {
/**
* convenience API to build and initialize JVM types and their members.
*/
@Inject
@Extension
private JvmTypesBuilder _jvmTypesBuilder;
@Inject
@Extension
private IQualifiedNameProvider _iQualifiedNameProvider;
@Inject
@Extension
private SignalModelGenerator sg;
@Inject
@Extension
private AnnotationExtension _annotationExtension;
public static String pckgName = null;
private HashSet<String> operationlist;
/**
* infer model on package base. Will be called for every defined package.
*
* @param dataInterchangePackage
* An instance of {@link SignalDSLPackage}
* @param acceptor
* the xtext acceptor interface
* @param isPreIndexingPhase
* true if in preindexing phase
*/
protected void _infer(final SignalPackage signalPackage, final IJvmDeclaredTypeAcceptor acceptor, final boolean isPreIndexingPhase) {
SignalDSLJvmModelInferrer.pckgName = signalPackage.getName();
JvmGenericType cls = this._jvmTypesBuilder.toClass(signalPackage, SignalDSLJvmModelInferrer.pckgName);
cls.setSimpleName(StringExtensions.toFirstUpper(cls.getSimpleName()));
EList<SignalWatcher> _watchers = signalPackage.getWatchers();
for (final SignalWatcher watcher : _watchers) {
{
JvmGenericType watcherClass = this._jvmTypesBuilder.toClass(watcher, this._iQualifiedNameProvider.getFullyQualifiedName(watcher));
watcherClass.setSimpleName(StringExtensions.toFirstUpper(watcher.getName()));
watcherClass.setPackageName(SignalDSLJvmModelInferrer.pckgName);
final Procedure1<JvmGenericType> _function = (JvmGenericType it) -> {
EList<JvmTypeReference> _superTypes = it.getSuperTypes();
JvmTypeReference _typeRef = this._typeReferenceBuilder.typeRef(OSBPSignalWatcher.class);
this._jvmTypesBuilder.<JvmTypeReference>operator_add(_superTypes, _typeRef);
JvmAnnotationReference annotationRef = this._annotationTypesBuilder.annotationRef(Component.class);
this._annotationExtension.addAnnAttr(annotationRef, signalPackage, "immediate", Boolean.TRUE);
EList<JvmAnnotationReference> _annotations = it.getAnnotations();
this._jvmTypesBuilder.<JvmAnnotationReference>operator_add(_annotations, annotationRef);
this._jvmTypesBuilder.setFileHeader(it, this._jvmTypesBuilder.getDocumentation(signalPackage));
this.toWatcherFields(it, watcher);
this.toWatcherConstructor(it, watcher);
this.toWatcherOperations(it, watcher);
this.toBinderOperations(it, watcher);
};
acceptor.<JvmGenericType>accept(watcherClass, _function);
}
}
}
public void toBinderOperations(final JvmGenericType type, final SignalWatcher watcher) {
EList<JvmMember> _members = type.getMembers();
final Procedure1<JvmOperation> _function = (JvmOperation it) -> {
JvmAnnotationReference annotationRef = this._annotationTypesBuilder.annotationRef(Reference.class);
this._annotationExtension.addAnnAttr(annotationRef, watcher, "cardinality", ReferenceCardinality.MANDATORY);
this._annotationExtension.addAnnAttr(annotationRef, watcher, "policy", ReferencePolicy.STATIC);
EList<JvmAnnotationReference> _annotations = it.getAnnotations();
this._jvmTypesBuilder.<JvmAnnotationReference>operator_add(_annotations, annotationRef);
it.setVisibility(JvmVisibility.PUBLIC);
it.setSynchronized(true);
EList<JvmFormalParameter> _parameters = it.getParameters();
JvmFormalParameter _parameter = this._jvmTypesBuilder.toParameter(watcher, "dataInterchange", this._typeReferenceBuilder.typeRef(IDataInterchange.class));
this._jvmTypesBuilder.<JvmFormalParameter>operator_add(_parameters, _parameter);
final Procedure1<ITreeAppendable> _function_1 = (ITreeAppendable it_1) -> {
StringConcatenation _builder = new StringConcatenation();
_builder.append("this.dataInterchange = dataInterchange;");
_builder.newLine();
_builder.append("log.debug(\"Signal DataInterchange bound\");");
it_1.append(_builder);
};
this._jvmTypesBuilder.setBody(it, _function_1);
};
JvmOperation _method = this._jvmTypesBuilder.toMethod(watcher, "bindDataInterchangeMethod", this._typeReferenceBuilder.typeRef(Void.TYPE), _function);
this._jvmTypesBuilder.<JvmOperation>operator_add(_members, _method);
EList<JvmMember> _members_1 = type.getMembers();
final Procedure1<JvmOperation> _function_1 = (JvmOperation it) -> {
it.setVisibility(JvmVisibility.PUBLIC);
it.setSynchronized(true);
EList<JvmFormalParameter> _parameters = it.getParameters();
JvmFormalParameter _parameter = this._jvmTypesBuilder.toParameter(watcher, "dataInterchange", this._typeReferenceBuilder.typeRef(IDataInterchange.class));
this._jvmTypesBuilder.<JvmFormalParameter>operator_add(_parameters, _parameter);
final Procedure1<ITreeAppendable> _function_2 = (ITreeAppendable it_1) -> {
StringConcatenation _builder = new StringConcatenation();
_builder.append("this.dataInterchange = null;");
_builder.newLine();
_builder.append("log.debug(\"Signal DataInterchange unbound\");");
_builder.newLine();
it_1.append(_builder);
};
this._jvmTypesBuilder.setBody(it, _function_2);
};
JvmOperation _method_1 = this._jvmTypesBuilder.toMethod(watcher, "unbindDataInterchangeMethod", this._typeReferenceBuilder.typeRef(Void.TYPE), _function_1);
this._jvmTypesBuilder.<JvmOperation>operator_add(_members_1, _method_1);
EList<JvmMember> _members_2 = type.getMembers();
final Procedure1<JvmOperation> _function_2 = (JvmOperation it) -> {
JvmAnnotationReference annotationRef = this._annotationTypesBuilder.annotationRef(Reference.class);
this._annotationExtension.addAnnAttr(annotationRef, watcher, "cardinality", ReferenceCardinality.MANDATORY);
this._annotationExtension.addAnnAttr(annotationRef, watcher, "policy", ReferencePolicy.STATIC);
EList<JvmAnnotationReference> _annotations = it.getAnnotations();
this._jvmTypesBuilder.<JvmAnnotationReference>operator_add(_annotations, annotationRef);
it.setVisibility(JvmVisibility.PUBLIC);
it.setSynchronized(true);
EList<JvmFormalParameter> _parameters = it.getParameters();
JvmFormalParameter _parameter = this._jvmTypesBuilder.toParameter(watcher, "blobService", this._typeReferenceBuilder.typeRef(IBlobService.class));
this._jvmTypesBuilder.<JvmFormalParameter>operator_add(_parameters, _parameter);
final Procedure1<ITreeAppendable> _function_3 = (ITreeAppendable it_1) -> {
StringConcatenation _builder = new StringConcatenation();
_builder.append("this.blobService = blobService;");
_builder.newLine();
_builder.append("log.debug(\"Signal BlobService bound\");");
_builder.newLine();
it_1.append(_builder);
};
this._jvmTypesBuilder.setBody(it, _function_3);
};
JvmOperation _method_2 = this._jvmTypesBuilder.toMethod(watcher, "bindBlobMethod", this._typeReferenceBuilder.typeRef(Void.TYPE), _function_2);
this._jvmTypesBuilder.<JvmOperation>operator_add(_members_2, _method_2);
EList<JvmMember> _members_3 = type.getMembers();
final Procedure1<JvmOperation> _function_3 = (JvmOperation it) -> {
it.setVisibility(JvmVisibility.PUBLIC);
it.setSynchronized(true);
EList<JvmFormalParameter> _parameters = it.getParameters();
JvmFormalParameter _parameter = this._jvmTypesBuilder.toParameter(watcher, "blobService", this._typeReferenceBuilder.typeRef(IBlobService.class));
this._jvmTypesBuilder.<JvmFormalParameter>operator_add(_parameters, _parameter);
final Procedure1<ITreeAppendable> _function_4 = (ITreeAppendable it_1) -> {
StringConcatenation _builder = new StringConcatenation();
_builder.append("this.blobService = null;");
_builder.newLine();
_builder.append("log.debug(\"Signal BlobService unbound\");");
_builder.newLine();
it_1.append(_builder);
};
this._jvmTypesBuilder.setBody(it, _function_4);
};
JvmOperation _method_3 = this._jvmTypesBuilder.toMethod(watcher, "unbindBlobMethod", this._typeReferenceBuilder.typeRef(Void.TYPE), _function_3);
this._jvmTypesBuilder.<JvmOperation>operator_add(_members_3, _method_3);
EList<JvmMember> _members_4 = type.getMembers();
final Procedure1<JvmOperation> _function_4 = (JvmOperation it) -> {
JvmAnnotationReference annotationRef = this._annotationTypesBuilder.annotationRef(Reference.class);
this._annotationExtension.addAnnAttr(annotationRef, watcher, "cardinality", ReferenceCardinality.MANDATORY);
this._annotationExtension.addAnnAttr(annotationRef, watcher, "policy", ReferencePolicy.STATIC);
EList<JvmAnnotationReference> _annotations = it.getAnnotations();
this._jvmTypesBuilder.<JvmAnnotationReference>operator_add(_annotations, annotationRef);
it.setVisibility(JvmVisibility.PUBLIC);
it.setSynchronized(true);
EList<JvmFormalParameter> _parameters = it.getParameters();
JvmFormalParameter _parameter = this._jvmTypesBuilder.toParameter(watcher, "persistenceService", this._typeReferenceBuilder.typeRef(IPersistenceService.class));
this._jvmTypesBuilder.<JvmFormalParameter>operator_add(_parameters, _parameter);
final Procedure1<ITreeAppendable> _function_5 = (ITreeAppendable it_1) -> {
StringConcatenation _builder = new StringConcatenation();
_builder.append("this.persistenceService = persistenceService;");
_builder.newLine();
_builder.append("log.debug(\"Signal PersistenceService bound\");");
_builder.newLine();
it_1.append(_builder);
};
this._jvmTypesBuilder.setBody(it, _function_5);
};
JvmOperation _method_4 = this._jvmTypesBuilder.toMethod(watcher, "bindPersistenceMethod", this._typeReferenceBuilder.typeRef(Void.TYPE), _function_4);
this._jvmTypesBuilder.<JvmOperation>operator_add(_members_4, _method_4);
EList<JvmMember> _members_5 = type.getMembers();
final Procedure1<JvmOperation> _function_5 = (JvmOperation it) -> {
it.setVisibility(JvmVisibility.PUBLIC);
it.setSynchronized(true);
EList<JvmFormalParameter> _parameters = it.getParameters();
JvmFormalParameter _parameter = this._jvmTypesBuilder.toParameter(watcher, "persistenceService", this._typeReferenceBuilder.typeRef(IPersistenceService.class));
this._jvmTypesBuilder.<JvmFormalParameter>operator_add(_parameters, _parameter);
final Procedure1<ITreeAppendable> _function_6 = (ITreeAppendable it_1) -> {
StringConcatenation _builder = new StringConcatenation();
_builder.append("this.persistenceService = null;");
_builder.newLine();
_builder.append("log.debug(\"Signal PersistenceService unbound\");");
_builder.newLine();
it_1.append(_builder);
};
this._jvmTypesBuilder.setBody(it, _function_6);
};
JvmOperation _method_5 = this._jvmTypesBuilder.toMethod(watcher, "unbindPersistenceMethod", this._typeReferenceBuilder.typeRef(Void.TYPE), _function_5);
this._jvmTypesBuilder.<JvmOperation>operator_add(_members_5, _method_5);
EList<JvmMember> _members_6 = type.getMembers();
final Procedure1<JvmOperation> _function_6 = (JvmOperation it) -> {
JvmAnnotationReference annotationRef = this._annotationTypesBuilder.annotationRef(Reference.class);
this._annotationExtension.addAnnAttr(annotationRef, watcher, "cardinality", ReferenceCardinality.MANDATORY);
this._annotationExtension.addAnnAttr(annotationRef, watcher, "policy", ReferencePolicy.STATIC);
EList<JvmAnnotationReference> _annotations = it.getAnnotations();
this._jvmTypesBuilder.<JvmAnnotationReference>operator_add(_annotations, annotationRef);
it.setVisibility(JvmVisibility.PUBLIC);
it.setSynchronized(true);
EList<JvmFormalParameter> _parameters = it.getParameters();
JvmFormalParameter _parameter = this._jvmTypesBuilder.toParameter(watcher, "userAccessService", this._typeReferenceBuilder.typeRef(IUserAccessService.class));
this._jvmTypesBuilder.<JvmFormalParameter>operator_add(_parameters, _parameter);
final Procedure1<ITreeAppendable> _function_7 = (ITreeAppendable it_1) -> {
StringConcatenation _builder = new StringConcatenation();
_builder.append("this.userAccessService = userAccessService;");
_builder.newLine();
_builder.append("log.debug(\"Signal UserAccessService bound\");");
_builder.newLine();
it_1.append(_builder);
};
this._jvmTypesBuilder.setBody(it, _function_7);
};
JvmOperation _method_6 = this._jvmTypesBuilder.toMethod(watcher, "bindUserAccessMethod", this._typeReferenceBuilder.typeRef(Void.TYPE), _function_6);
this._jvmTypesBuilder.<JvmOperation>operator_add(_members_6, _method_6);
EList<JvmMember> _members_7 = type.getMembers();
final Procedure1<JvmOperation> _function_7 = (JvmOperation it) -> {
it.setVisibility(JvmVisibility.PUBLIC);
it.setSynchronized(true);
EList<JvmFormalParameter> _parameters = it.getParameters();
JvmFormalParameter _parameter = this._jvmTypesBuilder.toParameter(watcher, "userAccessService", this._typeReferenceBuilder.typeRef(IUserAccessService.class));
this._jvmTypesBuilder.<JvmFormalParameter>operator_add(_parameters, _parameter);
final Procedure1<ITreeAppendable> _function_8 = (ITreeAppendable it_1) -> {
StringConcatenation _builder = new StringConcatenation();
_builder.append("this.userAccessService = null;");
_builder.newLine();
_builder.append("log.debug(\"Signal UserAccessService unbound\");");
it_1.append(_builder);
};
this._jvmTypesBuilder.setBody(it, _function_8);
};
JvmOperation _method_7 = this._jvmTypesBuilder.toMethod(watcher, "unbindUserAccessMethod", this._typeReferenceBuilder.typeRef(Void.TYPE), _function_7);
this._jvmTypesBuilder.<JvmOperation>operator_add(_members_7, _method_7);
}
public String getFileURL(final DataInterchange dataInterchange) {
DataInterchangeFile _fileEndpoint = dataInterchange.getFileEndpoint();
boolean _matched = false;
if (_fileEndpoint instanceof DataInterchangeFileXML) {
_matched=true;
DataInterchangeFile _fileEndpoint_1 = dataInterchange.getFileEndpoint();
return ((DataInterchangeFileXML) _fileEndpoint_1).getFileURL();
}
if (!_matched) {
if (_fileEndpoint instanceof DataInterchangeFileCSV) {
_matched=true;
DataInterchangeFile _fileEndpoint_1 = dataInterchange.getFileEndpoint();
return ((DataInterchangeFileCSV) _fileEndpoint_1).getFileURL();
}
}
if (!_matched) {
if (_fileEndpoint instanceof DataInterchangeFileEDI) {
_matched=true;
DataInterchangeFile _fileEndpoint_1 = dataInterchange.getFileEndpoint();
return ((DataInterchangeFileEDI) _fileEndpoint_1).getFileURL();
}
}
return "";
}
public String getDefaultVariableName(final DataInterchange dataInterchange) {
return StringExtensions.toFirstLower(dataInterchange.getName());
}
public String getBasicRunConfiguration(final DataInterchange dataInterchange, final boolean fqClass, final String fileURL, final WorkerThreadRunnable.Direction direction, final boolean asynch) {
String className = "";
if (fqClass) {
className = this._iQualifiedNameProvider.getFullyQualifiedName(dataInterchange).toString();
} else {
className = dataInterchange.getName();
}
StringConcatenation _builder = new StringConcatenation();
_builder.append(className);
_builder.append(" ");
String _defaultVariableName = this.getDefaultVariableName(dataInterchange);
_builder.append(_defaultVariableName);
_builder.append(" = new ");
_builder.append(className);
_builder.append("();");
_builder.newLineIfNotEmpty();
String _defaultVariableName_1 = this.getDefaultVariableName(dataInterchange);
_builder.append(_defaultVariableName_1);
_builder.append(".setFileURL(\"");
_builder.append(fileURL);
_builder.append("\");");
_builder.newLineIfNotEmpty();
String _defaultVariableName_2 = this.getDefaultVariableName(dataInterchange);
_builder.append(_defaultVariableName_2);
_builder.append(".setPersistenceService(persistenceService);");
_builder.newLineIfNotEmpty();
String _defaultVariableName_3 = this.getDefaultVariableName(dataInterchange);
_builder.append(_defaultVariableName_3);
_builder.append(".setDataInterchange(dataInterchange);");
_builder.newLineIfNotEmpty();
String _defaultVariableName_4 = this.getDefaultVariableName(dataInterchange);
_builder.append(_defaultVariableName_4);
_builder.append(".setBlobService(blobService);");
_builder.newLineIfNotEmpty();
String _defaultVariableName_5 = this.getDefaultVariableName(dataInterchange);
_builder.append(_defaultVariableName_5);
_builder.append(".setDirection(WorkerThreadRunnable.Direction.");
String _upperCase = direction.name().toUpperCase();
_builder.append(_upperCase);
_builder.append(");");
_builder.newLineIfNotEmpty();
_builder.append("return ");
String _defaultVariableName_6 = this.getDefaultVariableName(dataInterchange);
_builder.append(_defaultVariableName_6);
_builder.append(";");
return _builder.toString();
}
public void toWatcherOperations(final JvmGenericType type, final SignalWatcher watcher) {
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);
EList<JvmFormalParameter> _parameters = it.getParameters();
JvmFormalParameter _parameter = this._jvmTypesBuilder.toParameter(watcher, "event", this._typeReferenceBuilder.typeRef("WatchEvent<Path>"));
this._jvmTypesBuilder.<JvmFormalParameter>operator_add(_parameters, _parameter);
EList<JvmFormalParameter> _parameters_1 = it.getParameters();
JvmFormalParameter _parameter_1 = this._jvmTypesBuilder.toParameter(watcher, "file", this._typeReferenceBuilder.typeRef(Path.class));
this._jvmTypesBuilder.<JvmFormalParameter>operator_add(_parameters_1, _parameter_1);
final Procedure1<ITreeAppendable> _function_1 = (ITreeAppendable it_1) -> {
StringConcatenation _builder = new StringConcatenation();
String _handleEvent = this.handleEvent(watcher);
_builder.append(_handleEvent);
it_1.append(_builder);
};
this._jvmTypesBuilder.setBody(it, _function_1);
};
JvmOperation _method = this._jvmTypesBuilder.toMethod(watcher, "handleEvent", this._typeReferenceBuilder.typeRef(Void.TYPE), _function);
this._jvmTypesBuilder.<JvmOperation>operator_add(_members, _method);
EList<JvmMember> _members_1 = type.getMembers();
final Procedure1<JvmOperation> _function_1 = (JvmOperation it) -> {
EList<JvmFormalParameter> _parameters = it.getParameters();
JvmFormalParameter _parameter = this._jvmTypesBuilder.toParameter(watcher, "interchanges", this._typeReferenceBuilder.typeRef("ArrayList<WorkerThreadRunnable>"));
this._jvmTypesBuilder.<JvmFormalParameter>operator_add(_parameters, _parameter);
EList<JvmFormalParameter> _parameters_1 = it.getParameters();
JvmFormalParameter _parameter_1 = this._jvmTypesBuilder.toParameter(watcher, "synchronous", this._typeReferenceBuilder.typeRef(boolean.class));
this._jvmTypesBuilder.<JvmFormalParameter>operator_add(_parameters_1, _parameter_1);
final Procedure1<ITreeAppendable> _function_2 = (ITreeAppendable it_1) -> {
StringConcatenation _builder = new StringConcatenation();
String _executeTasks = this.executeTasks(watcher);
_builder.append(_executeTasks);
it_1.append(_builder);
};
this._jvmTypesBuilder.setBody(it, _function_2);
};
JvmOperation _method_1 = this._jvmTypesBuilder.toMethod(watcher, "executeTasks", this._typeReferenceBuilder.typeRef(Void.TYPE), _function_1);
this._jvmTypesBuilder.<JvmOperation>operator_add(_members_1, _method_1);
HashSet<String> _hashSet = new HashSet<String>();
this.operationlist = _hashSet;
if ((((watcher != null) && (watcher.getHandlers() != null)) && (!watcher.getHandlers().isEmpty()))) {
EList<SignalHandler> _handlers = watcher.getHandlers();
for (final SignalHandler handler : _handlers) {
DataTransfer _data = handler.getData();
if ((_data instanceof SingleTransfer)) {
DataTransfer _data_1 = handler.getData();
final SingleTransfer transferdata = ((SingleTransfer) _data_1);
this.createAppropriateInterchangeOperations(type, watcher, transferdata.getInterchange());
} else {
DataTransfer _data_2 = handler.getData();
final ListTransfer transferdata_1 = ((ListTransfer) _data_2);
EList<SignalDatainterchange> _interchanges = transferdata_1.getInterchanges();
for (final SignalDatainterchange interchange : _interchanges) {
this.createAppropriateInterchangeOperations(type, watcher, interchange);
}
}
}
}
EList<JvmMember> _members_2 = type.getMembers();
final Procedure1<JvmOperation> _function_2 = (JvmOperation it) -> {
final Procedure1<ITreeAppendable> _function_3 = (ITreeAppendable it_1) -> {
StringConcatenation _builder = new StringConcatenation();
String _initTasksLists = this.initTasksLists(watcher);
_builder.append(_initTasksLists);
it_1.append(_builder);
};
this._jvmTypesBuilder.setBody(it, _function_3);
};
JvmOperation _method_2 = this._jvmTypesBuilder.toMethod(watcher, "initTasksLists", this._typeReferenceBuilder.typeRef(Void.TYPE), _function_2);
this._jvmTypesBuilder.<JvmOperation>operator_add(_members_2, _method_2);
EList<JvmMember> _members_3 = type.getMembers();
final Procedure1<JvmOperation> _function_3 = (JvmOperation it) -> {
final Procedure1<ITreeAppendable> _function_4 = (ITreeAppendable it_1) -> {
StringConcatenation _builder = new StringConcatenation();
_builder.append("active = false;");
it_1.append(_builder);
};
this._jvmTypesBuilder.setBody(it, _function_4);
};
JvmOperation _method_3 = this._jvmTypesBuilder.toMethod(watcher, "stopThread", this._typeReferenceBuilder.typeRef(Void.TYPE), _function_3);
this._jvmTypesBuilder.<JvmOperation>operator_add(_members_3, _method_3);
EList<JvmMember> _members_4 = type.getMembers();
final Procedure1<JvmOperation> _function_4 = (JvmOperation it) -> {
EList<JvmAnnotationReference> _annotations = it.getAnnotations();
JvmAnnotationReference _annotationRef = this._annotationTypesBuilder.annotationRef(Activate.class);
this._jvmTypesBuilder.<JvmAnnotationReference>operator_add(_annotations, _annotationRef);
final Procedure1<ITreeAppendable> _function_5 = (ITreeAppendable it_1) -> {
StringConcatenation _builder = new StringConcatenation();
String _activate = this.getActivate(watcher);
_builder.append(_activate);
it_1.append(_builder);
};
this._jvmTypesBuilder.setBody(it, _function_5);
};
JvmOperation _method_4 = this._jvmTypesBuilder.toMethod(watcher, "activate", this._typeReferenceBuilder.typeRef(Void.TYPE), _function_4);
this._jvmTypesBuilder.<JvmOperation>operator_add(_members_4, _method_4);
EList<JvmMember> _members_5 = type.getMembers();
final Procedure1<JvmOperation> _function_5 = (JvmOperation it) -> {
EList<JvmAnnotationReference> _annotations = it.getAnnotations();
JvmAnnotationReference _annotationRef = this._annotationTypesBuilder.annotationRef(Deactivate.class);
this._jvmTypesBuilder.<JvmAnnotationReference>operator_add(_annotations, _annotationRef);
final Procedure1<ITreeAppendable> _function_6 = (ITreeAppendable it_1) -> {
StringConcatenation _builder = new StringConcatenation();
String _deactivate = this.getDeactivate(watcher);
_builder.append(_deactivate);
it_1.append(_builder);
};
this._jvmTypesBuilder.setBody(it, _function_6);
};
JvmOperation _method_5 = this._jvmTypesBuilder.toMethod(watcher, "deactivate", this._typeReferenceBuilder.typeRef(Void.TYPE), _function_5);
this._jvmTypesBuilder.<JvmOperation>operator_add(_members_5, _method_5);
}
public String executeTasks(final SignalWatcher watcher) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("for (WorkerThreadRunnable interchange : interchanges) {");
_builder.newLine();
_builder.append("\t");
_builder.append("if(synchronous){");
_builder.newLine();
_builder.append("\t\t");
_builder.append("//Making sure that the current task is done before continuing ");
_builder.newLine();
_builder.append("\t\t");
_builder.append("try {");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("log.debug(\"Watcher: Start \"+interchange.getDirection()+\" for interchange \"+interchange.getName()+\"!\");");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("executorService.submit(interchange).get();");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("log.debug(\"Watcher: \"+interchange.getDirection()+\" for \"+ interchange.getName() + \" successfully ended!\");");
_builder.newLine();
_builder.append("\t\t");
_builder.append("} catch (Exception e) {");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("log.debug(\"Watcher: \"+interchange.getDirection()+\" for \"+ interchange.getName() + \" interupted ended!\\n\"+e.getMessage());");
_builder.newLine();
_builder.append("\t\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.append("else{");
_builder.newLine();
_builder.append("\t\t");
_builder.append("// Just executre the task and move onto the next one");
_builder.newLine();
_builder.append("\t\t");
_builder.append("executorService.execute(interchange);");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("}");
return _builder.toString();
}
public String handleEvent(final SignalWatcher watcher) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("// get what to do based on the filename");
_builder.newLine();
_builder.append("String filemask = isFileMaskValid(file.getFileName().toString(), event.kind());");
_builder.newLine();
_builder.append("if(filemask != null){");
_builder.newLine();
_builder.append("\t");
_builder.append("switch (filemask) {");
_builder.newLine();
String result = _builder.toString();
EList<SignalHandler> _handlers = watcher.getHandlers();
for (final SignalHandler handler : _handlers) {
DataTransfer _data = handler.getData();
if ((_data instanceof SingleTransfer)) {
DataTransfer _data_1 = handler.getData();
SingleTransfer handlerdata = ((SingleTransfer) _data_1);
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append("case \"");
String _name = handler.getName();
String _plus = (_name + "|");
String _filemask = handler.getFilemask();
String _plus_1 = (_plus + _filemask);
_builder_1.append(_plus_1);
_builder_1.append("\":");
_builder_1.newLineIfNotEmpty();
_builder_1.append("\t");
_builder_1.append("executorService.execute(");
String _appropriateInterchangeOperationName = this.getAppropriateInterchangeOperationName(handlerdata.getInterchange());
_builder_1.append(_appropriateInterchangeOperationName, "\t");
_builder_1.append("()); break;");
_builder_1.newLineIfNotEmpty();
result = result.concat(_builder_1.toString());
} else {
DataTransfer _data_2 = handler.getData();
ListTransfer handlerdata_1 = ((ListTransfer) _data_2);
SignalExecutionTypeEnum _elvis = null;
SignalExecutionTypeEnum _executiontype = handlerdata_1.getExecutiontype();
if (_executiontype != null) {
_elvis = _executiontype;
} else {
_elvis = SignalExecutionTypeEnum.SYNC;
}
boolean is_synch = _elvis.equals(SignalExecutionTypeEnum.SYNC);
StringConcatenation _builder_2 = new StringConcatenation();
_builder_2.append("case \"");
String _name_1 = handler.getName();
String _plus_2 = (_name_1 + "|");
String _filemask_1 = handler.getFilemask();
String _plus_3 = (_plus_2 + _filemask_1);
_builder_2.append(_plus_3);
_builder_2.append("\":");
_builder_2.newLineIfNotEmpty();
_builder_2.append("executeTasks(listOfTasks.get(\"");
String _name_2 = handler.getName();
String _plus_4 = (_name_2 + "|");
String _filemask_2 = handler.getFilemask();
String _plus_5 = (_plus_4 + _filemask_2);
_builder_2.append(_plus_5);
_builder_2.append("\"), ");
_builder_2.append(is_synch);
_builder_2.append("); break;");
_builder_2.newLineIfNotEmpty();
result = result.concat(_builder_2.toString());
}
}
StringConcatenation _builder_3 = new StringConcatenation();
_builder_3.append("\t\t");
_builder_3.append("default: break;");
_builder_3.newLine();
_builder_3.append("\t");
_builder_3.append("}");
_builder_3.newLine();
_builder_3.append("}");
_builder_3.newLine();
_builder_3.append("\t \t");
_builder_3.append("else{");
_builder_3.newLine();
_builder_3.append("\t \t");
_builder_3.append("log.debug(\"No action executed for file [\"+file+\"] on event [\"+event.kind().name()+\"].\");");
_builder_3.newLine();
_builder_3.append("\t ");
_builder_3.append("}");
result = result.concat(_builder_3.toString());
return result;
}
public void toWatcherConstructor(final JvmGenericType type, final SignalWatcher watcher) {
EList<JvmMember> _members = type.getMembers();
final Procedure1<JvmConstructor> _function = (JvmConstructor it) -> {
EList<JvmTypeReference> _exceptions = it.getExceptions();
JvmTypeReference _typeRef = this._typeReferenceBuilder.typeRef(IOException.class);
this._jvmTypesBuilder.<JvmTypeReference>operator_add(_exceptions, _typeRef);
final Procedure1<ITreeAppendable> _function_1 = (ITreeAppendable it_1) -> {
StringConcatenation _builder = new StringConcatenation();
_builder.append("super();");
_builder.newLine();
_builder.append("executorService = Executors.newFixedThreadPool(10);");
it_1.append(_builder);
};
this._jvmTypesBuilder.setBody(it, _function_1);
};
JvmConstructor _constructor = this._jvmTypesBuilder.toConstructor(watcher, _function);
this._jvmTypesBuilder.<JvmConstructor>operator_add(_members, _constructor);
}
public String initTasksLists(final SignalWatcher watcher) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("ArrayList<WorkerThreadRunnable> data = null;");
_builder.newLine();
_builder.append("listOfTasks = new HashMap<>();");
_builder.newLine();
String result = _builder.toString();
EList<SignalHandler> _handlers = watcher.getHandlers();
for (final SignalHandler handler : _handlers) {
{
DataTransfer _data = handler.getData();
if ((_data instanceof ListTransfer)) {
DataTransfer _data_1 = handler.getData();
ListTransfer handlerdata = ((ListTransfer) _data_1);
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append("data = new ArrayList<WorkerThreadRunnable>();");
_builder_1.newLine();
result = result.concat(_builder_1.toString());
EList<SignalDatainterchange> _interchanges = handlerdata.getInterchanges();
for (final SignalDatainterchange interchange : _interchanges) {
StringConcatenation _builder_2 = new StringConcatenation();
_builder_2.append("data.add(");
String _appropriateInterchangeOperationName = this.getAppropriateInterchangeOperationName(interchange);
_builder_2.append(_appropriateInterchangeOperationName);
_builder_2.append("());");
_builder_2.newLineIfNotEmpty();
result = result.concat(_builder_2.toString());
}
StringConcatenation _builder_3 = new StringConcatenation();
_builder_3.append("listOfTasks.put(\"");
String _name = handler.getName();
String _plus = (_name + "|");
String _filemask = handler.getFilemask();
String _plus_1 = (_plus + _filemask);
_builder_3.append(_plus_1);
_builder_3.append("\", data);");
_builder_3.newLineIfNotEmpty();
result = result.concat(_builder_3.toString());
}
StringConcatenation _builder_4 = new StringConcatenation();
_builder_4.append("addFilemaskAndAction(\"");
String _name_1 = handler.getName();
String _plus_2 = (_name_1 + "|");
String _filemask_1 = handler.getFilemask();
String _plus_3 = (_plus_2 + _filemask_1);
_builder_4.append(_plus_3);
_builder_4.append("\", SignalHandlerTypeEnum.");
String _upperCase = handler.getActionType().getLiteral().toUpperCase();
_builder_4.append(_upperCase);
_builder_4.append(");");
_builder_4.newLineIfNotEmpty();
result = result.concat(_builder_4.toString());
}
}
return result;
}
public String getAppropriateInterchangeOperationName(final SignalDatainterchange interchange) {
String operation_name = "";
if ((Objects.equal(interchange.getDataAction(), SignalActionEnum.DATAIMPORT) && (interchange.getDataRef() != null))) {
String _firstUpper = StringExtensions.toFirstUpper(interchange.getDataRef().getName());
String _plus = ("import" + _firstUpper);
operation_name = _plus;
} else {
DataInterchange _dataRef = interchange.getDataRef();
boolean _tripleNotEquals = (_dataRef != null);
if (_tripleNotEquals) {
String _firstUpper_1 = StringExtensions.toFirstUpper(interchange.getDataRef().getName());
String _plus_1 = ("export" + _firstUpper_1);
operation_name = _plus_1;
}
}
return operation_name;
}
public boolean createAppropriateInterchangeOperations(final JvmGenericType type, final SignalWatcher watcher, final SignalDatainterchange interchange) {
boolean _xblockexpression = false;
{
String operationname = this.getAppropriateInterchangeOperationName(interchange);
boolean _xifexpression = false;
boolean _contains = this.operationlist.contains(operationname);
boolean _not = (!_contains);
if (_not) {
boolean _xblockexpression_1 = false;
{
SignalActionEnum _dataAction = interchange.getDataAction();
boolean _equals = Objects.equal(_dataAction, SignalActionEnum.DATAIMPORT);
if (_equals) {
EList<JvmMember> _members = type.getMembers();
final Procedure1<JvmOperation> _function = (JvmOperation it) -> {
final Procedure1<ITreeAppendable> _function_1 = (ITreeAppendable it_1) -> {
StringConcatenation _builder = new StringConcatenation();
String _basicRunConfiguration = this.getBasicRunConfiguration(interchange.getDataRef(), true, this.getFileURL(interchange.getDataRef()), WorkerThreadRunnable.Direction.IMPORT, false);
_builder.append(_basicRunConfiguration);
it_1.append(_builder);
};
this._jvmTypesBuilder.setBody(it, _function_1);
};
JvmOperation _method = this._jvmTypesBuilder.toMethod(watcher, operationname, this._typeReferenceBuilder.typeRef("WorkerThreadRunnable"), _function);
this._jvmTypesBuilder.<JvmOperation>operator_add(_members, _method);
} else {
EList<JvmMember> _members_1 = type.getMembers();
final Procedure1<JvmOperation> _function_1 = (JvmOperation it) -> {
final Procedure1<ITreeAppendable> _function_2 = (ITreeAppendable it_1) -> {
StringConcatenation _builder = new StringConcatenation();
String _basicRunConfiguration = this.getBasicRunConfiguration(interchange.getDataRef(), true, this.getFileURL(interchange.getDataRef()), WorkerThreadRunnable.Direction.EXPORT, false);
_builder.append(_basicRunConfiguration);
it_1.append(_builder);
};
this._jvmTypesBuilder.setBody(it, _function_2);
};
JvmOperation _method_1 = this._jvmTypesBuilder.toMethod(watcher, operationname, this._typeReferenceBuilder.typeRef("WorkerThreadRunnable"), _function_1);
this._jvmTypesBuilder.<JvmOperation>operator_add(_members_1, _method_1);
}
_xblockexpression_1 = this.operationlist.add(operationname);
}
_xifexpression = _xblockexpression_1;
}
_xblockexpression = _xifexpression;
}
return _xblockexpression;
}
public void toWatcherFields(final JvmGenericType type, final SignalWatcher watcher) {
JvmField field = null;
final Procedure1<JvmField> _function = (JvmField it) -> {
it.setVisibility(JvmVisibility.PRIVATE);
final Procedure1<ITreeAppendable> _function_1 = (ITreeAppendable it_1) -> {
StringConcatenation _builder = new StringConcatenation();
_builder.append("LoggerFactory.getLogger(\"watcher\")");
it_1.append(_builder);
};
this._jvmTypesBuilder.setInitializer(it, _function_1);
};
field = this._jvmTypesBuilder.toField(watcher, "log", this._typeReferenceBuilder.typeRef(Logger.class), _function);
EList<JvmMember> _members = type.getMembers();
this._jvmTypesBuilder.<JvmField>operator_add(_members, field);
final Procedure1<JvmField> _function_1 = (JvmField it) -> {
it.setVisibility(JvmVisibility.PRIVATE);
};
field = this._jvmTypesBuilder.toField(watcher, "thread", this._typeReferenceBuilder.typeRef(Thread.class), _function_1);
EList<JvmMember> _members_1 = type.getMembers();
this._jvmTypesBuilder.<JvmField>operator_add(_members_1, field);
final Procedure1<JvmField> _function_2 = (JvmField it) -> {
final Procedure1<ITreeAppendable> _function_3 = (ITreeAppendable it_1) -> {
StringConcatenation _builder = new StringConcatenation();
_builder.append("true");
it_1.append(_builder);
};
this._jvmTypesBuilder.setInitializer(it, _function_3);
it.setVisibility(JvmVisibility.PRIVATE);
};
field = this._jvmTypesBuilder.toField(watcher, "active", this._typeReferenceBuilder.typeRef(boolean.class), _function_2);
EList<JvmMember> _members_2 = type.getMembers();
this._jvmTypesBuilder.<JvmField>operator_add(_members_2, field);
final Procedure1<JvmField> _function_3 = (JvmField it) -> {
it.setVisibility(JvmVisibility.PRIVATE);
it.setStatic(true);
};
field = this._jvmTypesBuilder.toField(watcher, "executorService", this._typeReferenceBuilder.typeRef(ExecutorService.class), _function_3);
EList<JvmMember> _members_3 = type.getMembers();
this._jvmTypesBuilder.<JvmField>operator_add(_members_3, field);
final Procedure1<JvmField> _function_4 = (JvmField it) -> {
it.setVisibility(JvmVisibility.PRIVATE);
};
field = this._jvmTypesBuilder.toField(watcher, "listOfTasks",
this._typeReferenceBuilder.typeRef("Map<String, ArrayList<WorkerThreadRunnable>>"), _function_4);
EList<JvmMember> _members_4 = type.getMembers();
this._jvmTypesBuilder.<JvmField>operator_add(_members_4, field);
field = this._jvmTypesBuilder.toField(watcher, "persistenceService", this._typeReferenceBuilder.typeRef(IPersistenceService.class));
field.setStatic(true);
field.setVisibility(JvmVisibility.PRIVATE);
EList<JvmMember> _members_5 = type.getMembers();
this._jvmTypesBuilder.<JvmField>operator_add(_members_5, field);
field = this._jvmTypesBuilder.toField(watcher, "dataInterchange", this._typeReferenceBuilder.typeRef(IDataInterchange.class));
field.setStatic(true);
field.setVisibility(JvmVisibility.PRIVATE);
EList<JvmMember> _members_6 = type.getMembers();
this._jvmTypesBuilder.<JvmField>operator_add(_members_6, field);
field = this._jvmTypesBuilder.toField(watcher, "userAccessService", this._typeReferenceBuilder.typeRef(IUserAccessService.class));
field.setStatic(true);
field.setVisibility(JvmVisibility.PRIVATE);
EList<JvmMember> _members_7 = type.getMembers();
this._jvmTypesBuilder.<JvmField>operator_add(_members_7, field);
field = this._jvmTypesBuilder.toField(watcher, "blobService", this._typeReferenceBuilder.typeRef(IBlobService.class));
field.setStatic(true);
field.setVisibility(JvmVisibility.PRIVATE);
EList<JvmMember> _members_8 = type.getMembers();
this._jvmTypesBuilder.<JvmField>operator_add(_members_8, field);
}
public String getActivate(final SignalWatcher watcher) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("thread = new Thread() {");
_builder.newLine();
_builder.append("\t");
_builder.append("@Override");
_builder.newLine();
_builder.append("\t\t");
_builder.append("public void run() {");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("//");
String _firstUpper = StringExtensions.toFirstUpper(watcher.getName());
_builder.append(_firstUpper, "\t\t\t");
_builder.append(" watcherservice = null;");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t\t");
_builder.append("try {");
_builder.newLine();
_builder.append("\t\t\t\t\t");
_builder.append("//watcherservice = new ");
String _firstUpper_1 = StringExtensions.toFirstUpper(watcher.getName());
_builder.append(_firstUpper_1, "\t\t\t\t\t");
_builder.append("();");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t\t\t");
_builder.append("//watcherservice.setSignals(Arrays.asList(SignalTypeEnum.");
String _upperCase = watcher.getSignal().getLiteral().toUpperCase();
_builder.append(_upperCase, "\t\t\t\t\t");
_builder.append("));");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t\t\t");
_builder.append("//watcherservice.registerPathToWatcher(Paths.get(\"");
String _directory = watcher.getDirectory();
_builder.append(_directory, "\t\t\t\t\t");
_builder.append("\"));");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t\t\t");
_builder.append("setSignals(Arrays.asList(SignalTypeEnum.");
String _upperCase_1 = watcher.getSignal().getLiteral().toUpperCase();
_builder.append(_upperCase_1, "\t\t\t\t\t");
_builder.append("));");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t\t\t");
_builder.append("registerPathToWatcher(Paths.get(\"");
String _directory_1 = watcher.getDirectory();
_builder.append(_directory_1, "\t\t\t\t\t");
_builder.append("\"));");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t\t\t");
_builder.append("while (active) {");
_builder.newLine();
_builder.append("\t\t\t\t\t\t");
_builder.append("log.debug(\"Start watcher Service ");
String _firstUpper_2 = StringExtensions.toFirstUpper(watcher.getName());
_builder.append(_firstUpper_2, "\t\t\t\t\t\t");
_builder.append("\");");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t\t\t\t");
_builder.append("//watcherservice.processEvents();");
_builder.newLine();
_builder.append("\t\t\t\t\t\t");
_builder.append("initTasksLists();");
_builder.newLine();
_builder.append("\t\t\t\t\t\t");
_builder.append("processEvents();");
_builder.newLine();
_builder.append("\t\t\t\t\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t\t\t\t");
_builder.append("} catch (Exception e) {");
_builder.newLine();
_builder.append("\t\t\t\t\t");
_builder.append("log.debug(\"Thread interrupted \" + e.getMessage());");
_builder.newLine();
_builder.append("\t\t\t\t\t");
_builder.append("//watcherservice.closeWatcher();");
_builder.newLine();
_builder.append("\t\t\t\t\t");
_builder.append("closeWatcher();");
_builder.newLine();
_builder.append("\t\t\t\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t\t");
_builder.append("}");
_builder.newLine();
_builder.append("};");
_builder.newLine();
_builder.append("thread.start();");
return _builder.toString();
}
public String getDeactivate(final SignalWatcher watcher) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("try {");
_builder.newLine();
_builder.append("\t");
_builder.append("stopThread();");
_builder.newLine();
_builder.append("\t");
_builder.append("thread.join();");
_builder.newLine();
_builder.append("} catch (InterruptedException e) {");
_builder.newLine();
_builder.append("\t");
_builder.append("e.printStackTrace();");
_builder.newLine();
_builder.append("}");
return _builder.toString();
}
public void infer(final EObject signalPackage, final IJvmDeclaredTypeAcceptor acceptor, final boolean isPreIndexingPhase) {
if (signalPackage instanceof SignalPackage) {
_infer((SignalPackage)signalPackage, acceptor, isPreIndexingPhase);
return;
} else if (signalPackage != null) {
_infer(signalPackage, acceptor, isPreIndexingPhase);
return;
} else {
throw new IllegalArgumentException("Unhandled parameter types: " +
Arrays.<Object>asList(signalPackage, acceptor, isPreIndexingPhase).toString());
}
}
}