| /** |
| * 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 2.0 |
| * which accompanies this distribution, and is available at |
| * https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation |
| * |
| * |
| * This copyright notice shows up in the generated Java code |
| */ |
| package org.eclipse.osbp.xtext.topologydsl.jvmmodel; |
| |
| import com.vaadin.annotations.JavaScript; |
| import com.vaadin.shared.ui.JavaScriptComponentState; |
| import com.vaadin.ui.AbstractJavaScriptComponent; |
| import java.util.ArrayList; |
| import javax.inject.Inject; |
| import org.eclipse.e4.ui.model.application.ui.advanced.MPerspective; |
| import org.eclipse.emf.common.util.EList; |
| import org.eclipse.osbp.runtime.common.event.IEventDispatcher; |
| import org.eclipse.osbp.xtext.topologydsl.Topology; |
| import org.eclipse.osbp.xtext.topologydsl.jvmmodel.D3JsJavaUtil; |
| import org.eclipse.xtend2.lib.StringConcatenation; |
| import org.eclipse.xtext.common.types.JvmAnnotationReference; |
| import org.eclipse.xtext.common.types.JvmAnnotationValue; |
| 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.JvmStringAnnotationValue; |
| import org.eclipse.xtext.common.types.JvmTypeReference; |
| import org.eclipse.xtext.common.types.JvmVisibility; |
| import org.eclipse.xtext.common.types.TypesFactory; |
| import org.eclipse.xtext.xbase.compiler.output.ITreeAppendable; |
| import org.eclipse.xtext.xbase.jvmmodel.IJvmDeclaredTypeAcceptor; |
| import org.eclipse.xtext.xbase.jvmmodel.JvmAnnotationReferenceBuilder; |
| import org.eclipse.xtext.xbase.jvmmodel.JvmTypeReferenceBuilder; |
| import org.eclipse.xtext.xbase.jvmmodel.JvmTypesBuilder; |
| import org.eclipse.xtext.xbase.lib.CollectionLiterals; |
| import org.eclipse.xtext.xbase.lib.Extension; |
| import org.eclipse.xtext.xbase.lib.Procedures.Procedure1; |
| import org.slf4j.Logger; |
| |
| @SuppressWarnings("all") |
| public class TopologyDSLD3JavaComponentsCreator { |
| @Inject |
| @Extension |
| private JvmTypesBuilder _jvmTypesBuilder; |
| |
| @Inject |
| @Extension |
| private D3JsJavaUtil _d3JsJavaUtil; |
| |
| @Inject |
| private TypesFactory typesFactory; |
| |
| public void createJsJavaComponent(final Topology topology, final IJvmDeclaredTypeAcceptor acceptor, final JvmTypeReferenceBuilder typeReferenceBuilder, final JvmAnnotationReferenceBuilder annotationTypesBuilder) { |
| String _name = topology.getName(); |
| boolean _tripleNotEquals = (_name != null); |
| if (_tripleNotEquals) { |
| final String stateClassName = this._d3JsJavaUtil.createStateFilename(topology); |
| JvmGenericType topology_cls = this._jvmTypesBuilder.toClass(topology, this._d3JsJavaUtil.createfullyQualifiedTopologyFilename(topology)); |
| JvmGenericType state_cls = this._jvmTypesBuilder.toClass(topology, this._d3JsJavaUtil.createfullyQualifiedStateFilename(topology)); |
| final Procedure1<JvmGenericType> _function = new Procedure1<JvmGenericType>() { |
| @Override |
| public void apply(final JvmGenericType it) { |
| EList<JvmTypeReference> _superTypes = it.getSuperTypes(); |
| JvmTypeReference _typeRef = typeReferenceBuilder.typeRef(AbstractJavaScriptComponent.class); |
| TopologyDSLD3JavaComponentsCreator.this._jvmTypesBuilder.<JvmTypeReference>operator_add(_superTypes, _typeRef); |
| JvmAnnotationReference jsAnnotationRef = annotationTypesBuilder.annotationRef(JavaScript.class); |
| StringConcatenation _builder = new StringConcatenation(); |
| _builder.append("theme://plugin/org.eclipse.osbp.utils.js/org/eclipse/osbp/utils/js/d3.min.js"); |
| StringConcatenation _builder_1 = new StringConcatenation(); |
| _builder_1.append("theme://plugin/org.eclipse.osbp.utils.js/org/eclipse/osbp/utils/js/topojson.v1.min.js"); |
| StringConcatenation _builder_2 = new StringConcatenation(); |
| _builder_2.append("js/"); |
| String _createTopologyJsFilename = TopologyDSLD3JavaComponentsCreator.this._d3JsJavaUtil.createTopologyJsFilename(topology); |
| _builder_2.append(_createTopologyJsFilename); |
| ArrayList<String> jsAnnotationList = CollectionLiterals.<String>newArrayList(_builder.toString(), _builder_1.toString(), _builder_2.toString()); |
| TopologyDSLD3JavaComponentsCreator.this.addStringValuesToAnnotation(jsAnnotationRef, jsAnnotationList); |
| EList<JvmAnnotationReference> _annotations = it.getAnnotations(); |
| TopologyDSLD3JavaComponentsCreator.this._jvmTypesBuilder.<JvmAnnotationReference>operator_add(_annotations, jsAnnotationRef); |
| TopologyDSLD3JavaComponentsCreator.this.toTopologyConstructor(it, topology, typeReferenceBuilder); |
| TopologyDSLD3JavaComponentsCreator.this.toFields(it, topology, typeReferenceBuilder); |
| TopologyDSLD3JavaComponentsCreator.this.toTopologyOperations(it, topology, stateClassName, typeReferenceBuilder); |
| } |
| }; |
| acceptor.<JvmGenericType>accept(topology_cls, _function); |
| final Procedure1<JvmGenericType> _function_1 = new Procedure1<JvmGenericType>() { |
| @Override |
| public void apply(final JvmGenericType it) { |
| EList<JvmTypeReference> _superTypes = it.getSuperTypes(); |
| JvmTypeReference _typeRef = typeReferenceBuilder.typeRef(JavaScriptComponentState.class); |
| TopologyDSLD3JavaComponentsCreator.this._jvmTypesBuilder.<JvmTypeReference>operator_add(_superTypes, _typeRef); |
| TopologyDSLD3JavaComponentsCreator.this.toTopologyStateFields(it, topology, typeReferenceBuilder); |
| } |
| }; |
| acceptor.<JvmGenericType>accept(state_cls, _function_1); |
| } |
| } |
| |
| /** |
| * <p>build the class variables.</p> |
| */ |
| public void toFields(final JvmDeclaredType type, final Topology topology, final JvmTypeReferenceBuilder typeReferenceBuilder) { |
| JvmField field = null; |
| final Procedure1<JvmField> _function = new Procedure1<JvmField>() { |
| @Override |
| public void apply(final JvmField it) { |
| final Procedure1<ITreeAppendable> _function = new Procedure1<ITreeAppendable>() { |
| @Override |
| public void apply(final ITreeAppendable it) { |
| StringConcatenation _builder = new StringConcatenation(); |
| _builder.append("org.slf4j.LoggerFactory.getLogger(\"topology\")"); |
| it.append(_builder); |
| } |
| }; |
| TopologyDSLD3JavaComponentsCreator.this._jvmTypesBuilder.setInitializer(it, _function); |
| } |
| }; |
| field = this._jvmTypesBuilder.toField(topology, "log", typeReferenceBuilder.typeRef(Logger.class), _function); |
| field.setStatic(true); |
| field.setVisibility(JvmVisibility.PRIVATE); |
| EList<JvmMember> _members = type.getMembers(); |
| this._jvmTypesBuilder.<JvmField>operator_add(_members, field); |
| } |
| |
| public void toTopologyOperations(final JvmDeclaredType type, final Topology topology, final String stateClassName, final JvmTypeReferenceBuilder typeReferenceBuilder) { |
| EList<JvmMember> _members = type.getMembers(); |
| final Procedure1<JvmOperation> _function = new Procedure1<JvmOperation>() { |
| @Override |
| public void apply(final JvmOperation it) { |
| final Procedure1<ITreeAppendable> _function = new Procedure1<ITreeAppendable>() { |
| @Override |
| public void apply(final ITreeAppendable it) { |
| StringConcatenation _builder = new StringConcatenation(); |
| _builder.append("return ("); |
| _builder.append(stateClassName); |
| _builder.append(") super.getState();"); |
| it.append(_builder); |
| } |
| }; |
| TopologyDSLD3JavaComponentsCreator.this._jvmTypesBuilder.setBody(it, _function); |
| } |
| }; |
| JvmOperation _method = this._jvmTypesBuilder.toMethod(topology, "getState", typeReferenceBuilder.typeRef(stateClassName), _function); |
| this._jvmTypesBuilder.<JvmOperation>operator_add(_members, _method); |
| } |
| |
| public CharSequence getD3StateVars() { |
| StringConcatenation _builder = new StringConcatenation(); |
| _builder.append("getState().jsonData = _jsonData;"); |
| _builder.newLine(); |
| _builder.append("getState().htmlTagId=_htmlTagId;"); |
| _builder.newLine(); |
| _builder.append("getState().panelWidth = new Integer(width).toString();"); |
| _builder.newLine(); |
| _builder.append("getState().panelHeight = new Integer(height).toString();"); |
| _builder.newLine(); |
| return _builder; |
| } |
| |
| public JvmConstructor getTopologyConstructor(final JvmDeclaredType type, final Topology topology, final JvmTypeReferenceBuilder typeReferenceBuilder) { |
| final Procedure1<JvmConstructor> _function = new Procedure1<JvmConstructor>() { |
| @Override |
| public void apply(final JvmConstructor it) { |
| EList<JvmFormalParameter> _parameters = it.getParameters(); |
| JvmFormalParameter _parameter = TopologyDSLD3JavaComponentsCreator.this._jvmTypesBuilder.toParameter(topology, "_htmlTagId", typeReferenceBuilder.typeRef(String.class)); |
| TopologyDSLD3JavaComponentsCreator.this._jvmTypesBuilder.<JvmFormalParameter>operator_add(_parameters, _parameter); |
| EList<JvmFormalParameter> _parameters_1 = it.getParameters(); |
| JvmFormalParameter _parameter_1 = TopologyDSLD3JavaComponentsCreator.this._jvmTypesBuilder.toParameter(topology, "eventDispatcher", typeReferenceBuilder.typeRef(IEventDispatcher.class)); |
| TopologyDSLD3JavaComponentsCreator.this._jvmTypesBuilder.<JvmFormalParameter>operator_add(_parameters_1, _parameter_1); |
| EList<JvmFormalParameter> _parameters_2 = it.getParameters(); |
| JvmFormalParameter _parameter_2 = TopologyDSLD3JavaComponentsCreator.this._jvmTypesBuilder.toParameter(topology, "perspective", typeReferenceBuilder.typeRef(MPerspective.class)); |
| TopologyDSLD3JavaComponentsCreator.this._jvmTypesBuilder.<JvmFormalParameter>operator_add(_parameters_2, _parameter_2); |
| EList<JvmFormalParameter> _parameters_3 = it.getParameters(); |
| JvmFormalParameter _parameter_3 = TopologyDSLD3JavaComponentsCreator.this._jvmTypesBuilder.toParameter(topology, "_jsonData", typeReferenceBuilder.typeRef(String.class)); |
| TopologyDSLD3JavaComponentsCreator.this._jvmTypesBuilder.<JvmFormalParameter>operator_add(_parameters_3, _parameter_3); |
| EList<JvmFormalParameter> _parameters_4 = it.getParameters(); |
| JvmFormalParameter _parameter_4 = TopologyDSLD3JavaComponentsCreator.this._jvmTypesBuilder.toParameter(topology, "width", typeReferenceBuilder.typeRef(int.class)); |
| TopologyDSLD3JavaComponentsCreator.this._jvmTypesBuilder.<JvmFormalParameter>operator_add(_parameters_4, _parameter_4); |
| EList<JvmFormalParameter> _parameters_5 = it.getParameters(); |
| JvmFormalParameter _parameter_5 = TopologyDSLD3JavaComponentsCreator.this._jvmTypesBuilder.toParameter(topology, "height", typeReferenceBuilder.typeRef(int.class)); |
| TopologyDSLD3JavaComponentsCreator.this._jvmTypesBuilder.<JvmFormalParameter>operator_add(_parameters_5, _parameter_5); |
| final Procedure1<ITreeAppendable> _function = new Procedure1<ITreeAppendable>() { |
| @Override |
| public void apply(final ITreeAppendable it) { |
| it.append(TopologyDSLD3JavaComponentsCreator.this.getD3StateVars()); |
| } |
| }; |
| TopologyDSLD3JavaComponentsCreator.this._jvmTypesBuilder.setBody(it, _function); |
| } |
| }; |
| return this._jvmTypesBuilder.toConstructor(topology, _function); |
| } |
| |
| public void toTopologyConstructor(final JvmDeclaredType type, final Topology topology, final JvmTypeReferenceBuilder typeReferenceBuilder) { |
| JvmConstructor constructor = this.getTopologyConstructor(type, topology, typeReferenceBuilder); |
| final Procedure1<ITreeAppendable> _function = new Procedure1<ITreeAppendable>() { |
| @Override |
| public void apply(final ITreeAppendable it) { |
| StringConcatenation _builder = new StringConcatenation(); |
| CharSequence _d3StateVars = TopologyDSLD3JavaComponentsCreator.this.getD3StateVars(); |
| _builder.append(_d3StateVars); |
| _builder.newLineIfNotEmpty(); |
| _builder.append("addFunction(\"on"); |
| String _fileName = topology.getFileName(); |
| _builder.append(_fileName); |
| _builder.append("Click\", new JavaScriptFunction() {"); |
| _builder.newLineIfNotEmpty(); |
| _builder.append("\t"); |
| _builder.append("@Override"); |
| _builder.newLine(); |
| _builder.append("\t"); |
| _builder.append("public void call(JsonArray arguments){"); |
| _builder.newLine(); |
| _builder.append("\t\t"); |
| _builder.append("try {"); |
| _builder.newLine(); |
| _builder.append("\t\t\t"); |
| _builder.append("EventDispatcherEvent evnt = new EventDispatcherEvent(perspective, EventDispatcherCommand.SELECT, \"Topology\", \""); |
| String _name = topology.getName(); |
| _builder.append(_name, "\t\t\t"); |
| _builder.append("\");"); |
| _builder.newLineIfNotEmpty(); |
| _builder.append("\t\t\t"); |
| _builder.append("if(arguments.get(0) instanceof JreJsonString && arguments.get(1) instanceof JreJsonString) {"); |
| _builder.newLine(); |
| _builder.append("\t\t\t\t"); |
| _builder.append("evnt.addItem(EventDispatcherDataTag.LIST, arguments.getString(0)+\".\"+arguments.getString(1));"); |
| _builder.newLine(); |
| _builder.append("\t\t\t\t"); |
| _builder.append("eventDispatcher.sendEvent(evnt);"); |
| _builder.newLine(); |
| _builder.append("\t\t\t"); |
| _builder.append("}"); |
| _builder.newLine(); |
| _builder.append("\t\t"); |
| _builder.append("} catch (JsonException jsonExp){"); |
| _builder.newLine(); |
| _builder.append("\t\t\t"); |
| _builder.append("log.error(\""); |
| String _fileName_1 = topology.getFileName(); |
| _builder.append(_fileName_1, "\t\t\t"); |
| _builder.append("Click - JsonException: no property available\"); \t"); |
| _builder.newLineIfNotEmpty(); |
| _builder.append("\t\t"); |
| _builder.append("}"); |
| _builder.newLine(); |
| _builder.append("\t"); |
| _builder.append("}"); |
| _builder.newLine(); |
| _builder.append("});"); |
| it.append(_builder); |
| } |
| }; |
| this._jvmTypesBuilder.setBody(constructor, _function); |
| EList<JvmMember> _members = type.getMembers(); |
| this._jvmTypesBuilder.<JvmConstructor>operator_add(_members, constructor); |
| } |
| |
| public void addStringValuesToAnnotation(final JvmAnnotationReference annotationRef, final ArrayList<String> annotationStringList) { |
| JvmStringAnnotationValue value = this.typesFactory.createJvmStringAnnotationValue(); |
| for (final String annotationString : annotationStringList) { |
| EList<String> _values = value.getValues(); |
| this._jvmTypesBuilder.<String>operator_add(_values, annotationString); |
| } |
| EList<JvmAnnotationValue> _explicitValues = annotationRef.getExplicitValues(); |
| this._jvmTypesBuilder.<JvmStringAnnotationValue>operator_add(_explicitValues, value); |
| } |
| |
| public void toTopologyStateFields(final JvmDeclaredType type, final Topology topology, final JvmTypeReferenceBuilder typeReferenceBuilder) { |
| EList<JvmMember> _members = type.getMembers(); |
| final Procedure1<JvmField> _function = new Procedure1<JvmField>() { |
| @Override |
| public void apply(final JvmField it) { |
| it.setVisibility(JvmVisibility.PUBLIC); |
| final Procedure1<ITreeAppendable> _function = new Procedure1<ITreeAppendable>() { |
| @Override |
| public void apply(final ITreeAppendable it) { |
| StringConcatenation _builder = new StringConcatenation(); |
| _builder.append("\"\""); |
| it.append(_builder); |
| } |
| }; |
| TopologyDSLD3JavaComponentsCreator.this._jvmTypesBuilder.setInitializer(it, _function); |
| } |
| }; |
| JvmField _field = this._jvmTypesBuilder.toField(topology, "jsonData", typeReferenceBuilder.typeRef(String.class), _function); |
| this._jvmTypesBuilder.<JvmField>operator_add(_members, _field); |
| EList<JvmMember> _members_1 = type.getMembers(); |
| final Procedure1<JvmField> _function_1 = new Procedure1<JvmField>() { |
| @Override |
| public void apply(final JvmField it) { |
| it.setVisibility(JvmVisibility.PUBLIC); |
| final Procedure1<ITreeAppendable> _function = new Procedure1<ITreeAppendable>() { |
| @Override |
| public void apply(final ITreeAppendable it) { |
| StringConcatenation _builder = new StringConcatenation(); |
| _builder.append("\"\""); |
| it.append(_builder); |
| } |
| }; |
| TopologyDSLD3JavaComponentsCreator.this._jvmTypesBuilder.setInitializer(it, _function); |
| } |
| }; |
| JvmField _field_1 = this._jvmTypesBuilder.toField(topology, "htmlTagId", typeReferenceBuilder.typeRef(String.class), _function_1); |
| this._jvmTypesBuilder.<JvmField>operator_add(_members_1, _field_1); |
| EList<JvmMember> _members_2 = type.getMembers(); |
| final Procedure1<JvmField> _function_2 = new Procedure1<JvmField>() { |
| @Override |
| public void apply(final JvmField it) { |
| it.setVisibility(JvmVisibility.PUBLIC); |
| final Procedure1<ITreeAppendable> _function = new Procedure1<ITreeAppendable>() { |
| @Override |
| public void apply(final ITreeAppendable it) { |
| StringConcatenation _builder = new StringConcatenation(); |
| _builder.append("\"\""); |
| it.append(_builder); |
| } |
| }; |
| TopologyDSLD3JavaComponentsCreator.this._jvmTypesBuilder.setInitializer(it, _function); |
| } |
| }; |
| JvmField _field_2 = this._jvmTypesBuilder.toField(topology, "panelWidth", typeReferenceBuilder.typeRef(String.class), _function_2); |
| this._jvmTypesBuilder.<JvmField>operator_add(_members_2, _field_2); |
| EList<JvmMember> _members_3 = type.getMembers(); |
| final Procedure1<JvmField> _function_3 = new Procedure1<JvmField>() { |
| @Override |
| public void apply(final JvmField it) { |
| it.setVisibility(JvmVisibility.PUBLIC); |
| final Procedure1<ITreeAppendable> _function = new Procedure1<ITreeAppendable>() { |
| @Override |
| public void apply(final ITreeAppendable it) { |
| StringConcatenation _builder = new StringConcatenation(); |
| _builder.append("\"\""); |
| it.append(_builder); |
| } |
| }; |
| TopologyDSLD3JavaComponentsCreator.this._jvmTypesBuilder.setInitializer(it, _function); |
| } |
| }; |
| JvmField _field_3 = this._jvmTypesBuilder.toField(topology, "panelHeight", typeReferenceBuilder.typeRef(String.class), _function_3); |
| this._jvmTypesBuilder.<JvmField>operator_add(_members_3, _field_3); |
| EList<JvmMember> _members_4 = type.getMembers(); |
| final Procedure1<JvmField> _function_4 = new Procedure1<JvmField>() { |
| @Override |
| public void apply(final JvmField it) { |
| it.setVisibility(JvmVisibility.PUBLIC); |
| final Procedure1<ITreeAppendable> _function = new Procedure1<ITreeAppendable>() { |
| @Override |
| public void apply(final ITreeAppendable it) { |
| StringConcatenation _builder = new StringConcatenation(); |
| _builder.append("\"\""); |
| it.append(_builder); |
| } |
| }; |
| TopologyDSLD3JavaComponentsCreator.this._jvmTypesBuilder.setInitializer(it, _function); |
| } |
| }; |
| JvmField _field_4 = this._jvmTypesBuilder.toField(topology, "inputValue", typeReferenceBuilder.typeRef(String.class), _function_4); |
| this._jvmTypesBuilder.<JvmField>operator_add(_members_4, _field_4); |
| } |
| |
| public CharSequence createD3Topology(final Topology topology) { |
| StringConcatenation _builder = new StringConcatenation(); |
| _builder.append("InputStream json = getClass().getResourceAsStream(\"/topologies/"); |
| String _fileName = topology.getFileName(); |
| _builder.append(_fileName); |
| _builder.append(".json\");"); |
| _builder.newLineIfNotEmpty(); |
| _builder.append("try {"); |
| _builder.newLine(); |
| _builder.append("\t"); |
| _builder.append("return new "); |
| String _createfullyQualifiedTopologyFilename = this._d3JsJavaUtil.createfullyQualifiedTopologyFilename(topology); |
| _builder.append(_createfullyQualifiedTopologyFilename, "\t"); |
| _builder.append("(\""); |
| String _createTopologyFilename = this._d3JsJavaUtil.createTopologyFilename(topology); |
| _builder.append(_createTopologyFilename, "\t"); |
| _builder.append("\", eventDispatcher, perspective, IOUtils.toString(json), panelWidth, panelHeight);"); |
| _builder.newLineIfNotEmpty(); |
| _builder.append("} catch (IOException e) {"); |
| _builder.newLine(); |
| _builder.append("\t"); |
| _builder.append("log.error(\"found no data for "); |
| String _fileName_1 = topology.getFileName(); |
| _builder.append(_fileName_1, "\t"); |
| _builder.append(" in folder topologies\");"); |
| _builder.newLineIfNotEmpty(); |
| _builder.append("}"); |
| _builder.newLine(); |
| _builder.append("return null;"); |
| _builder.newLine(); |
| return _builder; |
| } |
| } |