blob: fea006eabe42e3809edf238b729f14f48ef4a1cc [file] [log] [blame]
package org.eclipse.etrice.generator.java.gen;
import com.google.common.base.Objects;
import com.google.inject.Inject;
import java.util.HashMap;
import java.util.List;
import java.util.function.Consumer;
import org.eclipse.emf.common.util.EList;
import org.eclipse.etrice.core.genmodel.etricegen.OpenBinding;
import org.eclipse.etrice.core.genmodel.etricegen.OpenServiceConnection;
import org.eclipse.etrice.core.genmodel.etricegen.OptionalActorInstance;
import org.eclipse.etrice.core.genmodel.etricegen.Root;
import org.eclipse.etrice.core.genmodel.etricegen.WiredActorClass;
import org.eclipse.etrice.core.genmodel.etricegen.WiredStructureClass;
import org.eclipse.etrice.core.room.ActorClass;
import org.eclipse.etrice.core.room.CommunicationType;
import org.eclipse.etrice.core.room.Port;
import org.eclipse.etrice.core.room.ProtocolClass;
import org.eclipse.etrice.core.room.util.RoomHelpers;
import org.eclipse.etrice.generator.fsm.base.FileSystemHelpers;
import org.eclipse.etrice.generator.fsm.base.IGeneratorFileIo;
import org.eclipse.etrice.generator.generic.RoomExtensions;
import org.eclipse.etrice.generator.java.gen.JavaExtensions;
import org.eclipse.xtend2.lib.StringConcatenation;
import org.eclipse.xtext.xbase.lib.Extension;
import org.eclipse.xtext.xbase.lib.Functions.Function1;
import org.eclipse.xtext.xbase.lib.IterableExtensions;
@SuppressWarnings("all")
public class OptionalActorFactoryGen {
@Inject
private IGeneratorFileIo fileIO;
@Inject
@Extension
private RoomHelpers _roomHelpers;
@Inject
@Extension
private JavaExtensions _javaExtensions;
@Inject
@Extension
private RoomExtensions _roomExtensions;
@Inject
@Extension
private FileSystemHelpers _fileSystemHelpers;
public void doGenerate(final Root root) {
final HashMap<ActorClass, WiredActorClass> ac2wired = new HashMap<ActorClass, WiredActorClass>();
EList<WiredStructureClass> _wiredInstances = root.getWiredInstances();
final Function1<WiredStructureClass, Boolean> _function = new Function1<WiredStructureClass, Boolean>() {
public Boolean apply(final WiredStructureClass w) {
return Boolean.valueOf((w instanceof WiredActorClass));
}
};
Iterable<WiredStructureClass> _filter = IterableExtensions.<WiredStructureClass>filter(_wiredInstances, _function);
final Consumer<WiredStructureClass> _function_1 = new Consumer<WiredStructureClass>() {
public void accept(final WiredStructureClass w) {
ActorClass _actorClass = ((WiredActorClass) w).getActorClass();
ac2wired.put(_actorClass, ((WiredActorClass) w));
}
};
_filter.forEach(_function_1);
EList<OptionalActorInstance> _optionalInstances = root.getOptionalInstances();
final Function1<OptionalActorInstance, Boolean> _function_2 = new Function1<OptionalActorInstance, Boolean>() {
public Boolean apply(final OptionalActorInstance cl) {
ActorClass _actorClass = cl.getActorClass();
return Boolean.valueOf(OptionalActorFactoryGen.this._fileSystemHelpers.isValidGenerationLocation(_actorClass));
}
};
Iterable<OptionalActorInstance> _filter_1 = IterableExtensions.<OptionalActorInstance>filter(_optionalInstances, _function_2);
for (final OptionalActorInstance oi : _filter_1) {
{
final ActorClass ac = oi.getActorClass();
final WiredActorClass wired = ac2wired.get(ac);
String _generationTargetPath = this._roomExtensions.getGenerationTargetPath(ac);
String _path = this._roomExtensions.getPath(ac);
final String path = (_generationTargetPath + _path);
String _generationInfoPath = this._roomExtensions.getGenerationInfoPath(ac);
String _path_1 = this._roomExtensions.getPath(ac);
final String infopath = (_generationInfoPath + _path_1);
final String file = this._javaExtensions.getJavaFactoryFileName(ac);
CharSequence _generate = this.generate(root, oi, wired);
this.fileIO.generateFile("generating ActorClass Interface implementation", path, infopath, file, _generate);
}
}
}
public CharSequence generate(final Root root, final OptionalActorInstance oi, final WiredActorClass wired) {
CharSequence _xblockexpression = null;
{
final ActorClass ac = oi.getActorClass();
final String clsname = this._javaExtensions.getJavaFactoryName(ac);
StringConcatenation _builder = new StringConcatenation();
_builder.append("package ");
String _package = this._roomExtensions.getPackage(ac);
_builder.append(_package, "");
_builder.append(";");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("import ");
String _package_1 = this._roomExtensions.getPackage(ac);
_builder.append(_package_1, "");
_builder.append(".");
String _name = ac.getName();
_builder.append(_name, "");
_builder.append(";");
_builder.newLineIfNotEmpty();
_builder.append("import org.eclipse.etrice.runtime.java.modelbase.OptionalActorInterfaceBase;");
_builder.newLine();
_builder.append("import org.eclipse.etrice.runtime.java.modelbase.IOptionalActorFactory;");
_builder.newLine();
_builder.append("import org.eclipse.etrice.runtime.java.modelbase.InterfaceItemBase;");
_builder.newLine();
_builder.newLine();
_builder.append("public class ");
_builder.append(clsname, "");
_builder.append(" implements IOptionalActorFactory {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.newLine();
_builder.append("\t");
_builder.append("public ");
String _name_1 = ac.getName();
_builder.append(_name_1, "\t");
_builder.append(" create(OptionalActorInterfaceBase ai, String name) {");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("// instantiate sub tree");
_builder.newLine();
_builder.append("\t\t");
String _name_2 = ac.getName();
_builder.append(_name_2, "\t\t");
_builder.append(" actor = new ");
String _name_3 = ac.getName();
_builder.append(_name_3, "\t\t");
_builder.append("(ai, name);");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.newLine();
_builder.append("\t\t");
_builder.append("// wiring");
_builder.newLine();
{
List<Port> _allEndPorts = this._roomHelpers.getAllEndPorts(ac);
final Function1<Port, Boolean> _function = new Function1<Port, Boolean>() {
public Boolean apply(final Port p) {
return Boolean.valueOf(OptionalActorFactoryGen.this._roomHelpers.isExternal(p));
}
};
Iterable<Port> _filter = IterableExtensions.<Port>filter(_allEndPorts, _function);
for(final Port port : _filter) {
_builder.append("\t\t");
String _xifexpression = null;
boolean _isDataDriven = this._roomHelpers.isDataDriven(port);
if (_isDataDriven) {
_xifexpression = "DataPortBase";
} else {
_xifexpression = "InterfaceItemBase";
}
_builder.append(_xifexpression, "\t\t");
_builder.append(".connect(ai, \"");
String _name_4 = port.getName();
_builder.append(_name_4, "\t\t");
_builder.append("\", name+\"/");
String _name_5 = port.getName();
_builder.append(_name_5, "\t\t");
_builder.append("\");");
_builder.newLineIfNotEmpty();
}
}
{
EList<OpenBinding> _openBindings = wired.getOpenBindings();
for(final OpenBinding open : _openBindings) {
_builder.append("\t\t");
String _xifexpression_1 = null;
Port _port = open.getPort();
boolean _isDataDriven_1 = this._roomHelpers.isDataDriven(_port);
if (_isDataDriven_1) {
_xifexpression_1 = "DataPortBase";
} else {
_xifexpression_1 = "InterfaceItemBase";
}
_builder.append(_xifexpression_1, "\t\t");
_builder.append(".connect(ai, \"");
Port _port_1 = open.getPort();
String _name_6 = _port_1.getName();
_builder.append(_name_6, "\t\t");
_builder.append("\", name+\"/");
EList<String> _path = open.getPath();
String _join = IterableExtensions.join(_path, "/");
_builder.append(_join, "\t\t");
_builder.append("\");");
_builder.newLineIfNotEmpty();
}
}
{
EList<OpenServiceConnection> _requiredServices = wired.getRequiredServices();
for(final OpenServiceConnection req : _requiredServices) {
_builder.append("\t\t");
String _xifexpression_2 = null;
ProtocolClass _protocol = req.getProtocol();
CommunicationType _commType = _protocol.getCommType();
boolean _equals = Objects.equal(_commType, CommunicationType.DATA_DRIVEN);
if (_equals) {
_xifexpression_2 = "DataPortBase";
} else {
_xifexpression_2 = "InterfaceItemBase";
}
_builder.append(_xifexpression_2, "\t\t");
_builder.append(".connect(ai, \"");
ProtocolClass _protocol_1 = req.getProtocol();
String _fullyQualifiedName = this._roomExtensions.getFullyQualifiedName(_protocol_1);
_builder.append(_fullyQualifiedName, "\t\t");
_builder.append("\", name+\"/");
EList<String> _path_1 = req.getPath();
String _join_1 = IterableExtensions.join(_path_1, "/");
_builder.append(_join_1, "\t\t");
_builder.append("\");");
_builder.newLineIfNotEmpty();
}
}
_builder.append("\t\t");
_builder.newLine();
_builder.append("\t\t");
_builder.append("return actor;");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_xblockexpression = _builder;
}
return _xblockexpression;
}
}