package org.eclipselabs.spray.generator.graphiti.templates; import com.google.inject.Inject; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EPackage; import org.eclipse.xtext.xbase.lib.ObjectExtensions; import org.eclipse.xtext.xtend2.lib.StringConcatenation; import org.eclipselabs.spray.generator.graphiti.templates.FileGenerator; import org.eclipselabs.spray.generator.graphiti.templates.JavaGenFile; import org.eclipselabs.spray.generator.graphiti.util.GeneratorUtil; import org.eclipselabs.spray.generator.graphiti.util.MetaModel; import org.eclipselabs.spray.generator.graphiti.util.NamingExtensions; import org.eclipselabs.spray.mm.spray.Connection; import org.eclipselabs.spray.mm.spray.Diagram; import org.eclipselabs.spray.mm.spray.MetaClass; import org.eclipselabs.spray.mm.spray.Text; import org.eclipselabs.spray.mm.spray.extensions.SprayExtensions; @SuppressWarnings("all") public class UpdateConnectionFeature extends FileGenerator { @Inject private NamingExtensions naming; @Inject private SprayExtensions e1; public StringConcatenation generateBaseFile(final EObject modelElement) { JavaGenFile _javaGenFile = this.getJavaGenFile(); String _baseClassName = _javaGenFile.getBaseClassName(); StringConcatenation _mainFile = this.mainFile(((Connection) modelElement), _baseClassName); return _mainFile; } public StringConcatenation generateExtensionFile(final EObject modelElement) { JavaGenFile _javaGenFile = this.getJavaGenFile(); String _className = _javaGenFile.getClassName(); StringConcatenation _mainExtensionPointFile = this.mainExtensionPointFile(((Connection) modelElement), _className); return _mainExtensionPointFile; } public StringConcatenation mainExtensionPointFile(final Connection connection, final String className) { StringConcatenation _builder = new StringConcatenation(); StringConcatenation _extensionHeader = this.extensionHeader(this); _builder.append(_extensionHeader, ""); _builder.newLineIfNotEmpty(); _builder.append("package "); String _feature_package = GeneratorUtil.feature_package(); _builder.append(_feature_package, ""); _builder.append(";"); _builder.newLineIfNotEmpty(); _builder.newLine(); _builder.append("import org.eclipse.graphiti.features.IFeatureProvider;"); _builder.newLine(); _builder.newLine(); _builder.append("public class "); _builder.append(className, ""); _builder.append(" extends "); _builder.append(className, ""); _builder.append("Base {"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("public "); _builder.append(className, " "); _builder.append("(IFeatureProvider fp) {"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("super(fp);"); _builder.newLine(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.newLine(); _builder.append(" "); _builder.append("@Override"); _builder.newLine(); _builder.append(" "); _builder.append("public boolean hasDoneChanges() {"); _builder.newLine(); _builder.append(" "); _builder.append("return false;"); _builder.newLine(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.newLine(); _builder.append("}"); _builder.newLine(); return _builder; } public StringConcatenation mainFile(final Connection connection, final String className) { StringConcatenation _builder = new StringConcatenation(); MetaClass _represents = connection.getRepresents(); Diagram _diagram = _represents.getDiagram(); String _name = _diagram.getName(); final String diagramName = _name; _builder.newLineIfNotEmpty(); MetaClass _represents_1 = connection.getRepresents(); String _name_1 = this.e1.getName(_represents_1); final String metaClassName = _name_1; _builder.newLineIfNotEmpty(); MetaClass _represents_2 = connection.getRepresents(); EClass _type = _represents_2.getType(); EPackage _ePackage = _type.getEPackage(); String _name_2 = _ePackage.getName(); final String pack = _name_2; _builder.newLineIfNotEmpty(); MetaClass _represents_3 = connection.getRepresents(); EClass _type_1 = _represents_3.getType(); String _fullPackageName = MetaModel.fullPackageName(_type_1); final String fullPackage = _fullPackageName; _builder.newLineIfNotEmpty(); final String labelName = "name"; _builder.newLineIfNotEmpty(); StringConcatenation _header = this.header(this); _builder.append(_header, ""); _builder.newLineIfNotEmpty(); _builder.append("package "); String _feature_package = GeneratorUtil.feature_package(); _builder.append(_feature_package, ""); _builder.append(";"); _builder.newLineIfNotEmpty(); _builder.newLine(); _builder.append("import java.util.Map;"); _builder.newLine(); _builder.newLine(); _builder.append("import org.eclipse.graphiti.features.IFeatureProvider;"); _builder.newLine(); _builder.append("import org.eclipse.graphiti.features.IReason;"); _builder.newLine(); _builder.append("import org.eclipse.graphiti.features.context.IUpdateContext;"); _builder.newLine(); _builder.append("import org.eclipse.graphiti.features.context.IContext;"); _builder.newLine(); _builder.append("import org.eclipse.graphiti.features.impl.AbstractUpdateFeature;"); _builder.newLine(); _builder.append("import org.eclipse.graphiti.features.impl.Reason;"); _builder.newLine(); _builder.append("import org.eclipse.graphiti.mm.algorithms.GraphicsAlgorithm;"); _builder.newLine(); _builder.append("import org.eclipse.graphiti.mm.algorithms.Text;"); _builder.newLine(); _builder.append("import org.eclipse.graphiti.mm.pictograms.ConnectionDecorator;"); _builder.newLine(); _builder.append("import org.eclipse.graphiti.mm.pictograms.Diagram;"); _builder.newLine(); _builder.append("import org.eclipse.graphiti.mm.pictograms.FreeFormConnection;"); _builder.newLine(); _builder.append("import org.eclipse.graphiti.mm.pictograms.PictogramElement;"); _builder.newLine(); _builder.append("import org.eclipse.graphiti.services.Graphiti;"); _builder.newLine(); _builder.append("import "); MetaClass _represents_4 = connection.getRepresents(); String _javaInterfaceName = this.naming.getJavaInterfaceName(_represents_4); _builder.append(_javaInterfaceName, ""); _builder.append(";"); _builder.newLineIfNotEmpty(); _builder.append("// MARKER_IMPORT"); _builder.newLine(); _builder.append(" "); _builder.newLine(); _builder.append("public class "); _builder.append(className, ""); _builder.append(" extends AbstractUpdateFeature {"); _builder.newLineIfNotEmpty(); _builder.newLine(); _builder.append(" "); _builder.append("Map<String, String> values = null;"); _builder.newLine(); _builder.newLine(); _builder.append(" "); _builder.append("public "); _builder.append(className, " "); _builder.append("(IFeatureProvider fp) {"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("super(fp);"); _builder.newLine(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.newLine(); _builder.append(" "); _builder.append("@Override"); _builder.newLine(); _builder.append(" "); _builder.append("public boolean canUpdate(IUpdateContext context) {"); _builder.newLine(); _builder.append(" "); _builder.append("// return true, if linked business object is a EClass"); _builder.newLine(); _builder.append(" "); _builder.append("Object bo = getBusinessObjectForPictogramElement(context.getPictogramElement());"); _builder.newLine(); _builder.append(" "); _builder.append("PictogramElement pictogramElement = context.getPictogramElement();"); _builder.newLine(); _builder.append(" "); _builder.append("return (bo instanceof "); _builder.append(metaClassName, " "); _builder.append(") && (!(pictogramElement instanceof Diagram));"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.newLine(); _builder.append(" "); _builder.append("@Override"); _builder.newLine(); _builder.append(" "); _builder.append("public IReason updateNeeded(IUpdateContext context) {"); _builder.newLine(); _builder.append(" "); _builder.append("PictogramElement pictogramElement = context.getPictogramElement();"); _builder.newLine(); _builder.append(" "); _builder.append("Object bo = getBusinessObjectForPictogramElement(pictogramElement);"); _builder.newLine(); _builder.append(" "); _builder.append("if ( ! (bo instanceof "); _builder.append(metaClassName, " "); _builder.append(")) {"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("return Reason.createFalseReason();"); _builder.newLine(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.append(" "); _builder.append(metaClassName, " "); _builder.append(" eClass = ("); _builder.append(metaClassName, " "); _builder.append(") bo;"); _builder.newLineIfNotEmpty(); _builder.newLine(); _builder.append(" "); _builder.append("if (pictogramElement instanceof FreeFormConnection) {"); _builder.newLine(); _builder.append(" "); _builder.append("FreeFormConnection free = (FreeFormConnection) pictogramElement;"); _builder.newLine(); _builder.append(" "); _builder.append("for (ConnectionDecorator decorator : free.getConnectionDecorators()) {"); _builder.newLine(); _builder.append(" "); _builder.append("String type = Graphiti.getPeService().getPropertyValue(decorator, \"MODEL_TYPE\");"); _builder.newLine(); _builder.append(" "); _builder.append("String value = getValue(type, eClass);"); _builder.newLine(); _builder.append(" "); _builder.append("GraphicsAlgorithm ga = decorator.getGraphicsAlgorithm();"); _builder.newLine(); _builder.append(" "); _builder.append("Text text = (Text) ga;"); _builder.newLine(); _builder.append(" "); _builder.append("String current = text.getValue();"); _builder.newLine(); _builder.append(" "); _builder.append("if (! current.equals(value) ) {"); _builder.newLine(); _builder.append(" "); _builder.append("return Reason.createTrueReason(type + \" is changed\");"); _builder.newLine(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.append(" "); _builder.append("return Reason.createFalseReason();"); _builder.newLine(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.newLine(); _builder.append(" "); _builder.append("@Override"); _builder.newLine(); _builder.append(" "); _builder.append("public boolean update(IUpdateContext context) {"); _builder.newLine(); _builder.append(" "); _builder.append("PictogramElement pictogramElement = context.getPictogramElement();"); _builder.newLine(); _builder.append(" "); _builder.append("Object bo = getBusinessObjectForPictogramElement(pictogramElement);"); _builder.newLine(); _builder.append(" "); _builder.append(metaClassName, " "); _builder.append(" eClass = ("); _builder.append(metaClassName, " "); _builder.append(") bo;"); _builder.newLineIfNotEmpty(); _builder.newLine(); _builder.append(" "); _builder.append("FreeFormConnection free = (FreeFormConnection) pictogramElement;"); _builder.newLine(); _builder.append(" "); _builder.append("for (ConnectionDecorator decorator : free.getConnectionDecorators()) {"); _builder.newLine(); _builder.append(" "); _builder.append("String type = Graphiti.getPeService().getPropertyValue(decorator, \"MODEL_TYPE\");"); _builder.newLine(); _builder.append(" "); _builder.append("String value = getValue(type, eClass);"); _builder.newLine(); _builder.append(" "); _builder.append("GraphicsAlgorithm ga = decorator.getGraphicsAlgorithm();"); _builder.newLine(); _builder.append(" "); _builder.append("Text text = (Text) ga;"); _builder.newLine(); _builder.append(" "); _builder.append("String current = text.getValue();"); _builder.newLine(); _builder.append(" "); _builder.append("if (! current.equals(value) ) {"); _builder.newLine(); _builder.append(" "); _builder.append("text.setValue(value);"); _builder.newLine(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.append(" "); _builder.append("//"); _builder.newLine(); _builder.append(" "); _builder.append("// return SprayContainerService.update(pictogramElement,"); _builder.newLine(); _builder.append(" "); _builder.append("// getValues(eClass));"); _builder.newLine(); _builder.append(" "); _builder.append("//"); _builder.newLine(); _builder.append(" "); _builder.append("return true;"); _builder.newLine(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.newLine(); _builder.append(" "); _builder.append("protected String getValue(String type, "); MetaClass _represents_5 = connection.getRepresents(); String _name_3 = this.e1.getName(_represents_5); _builder.append(_name_3, " "); _builder.append(" eClass) {"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("String result = \"\";"); _builder.newLine(); _builder.append(" "); _builder.append("if( \"FROM_LABEL\".equals(type) ){"); _builder.newLine(); _builder.append(" "); Text _fromLabel = connection.getFromLabel(); Text fromLabel = _fromLabel; _builder.newLineIfNotEmpty(); { boolean _operator_notEquals = ObjectExtensions.operator_notEquals(fromLabel, null); if (_operator_notEquals) { _builder.append(" "); Text _fromLabel_1 = connection.getFromLabel(); StringConcatenation _valueGenerator = this.valueGenerator(_fromLabel_1, "eClass"); _builder.append(_valueGenerator, " "); _builder.newLineIfNotEmpty(); } } _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.append(" "); _builder.append("if( \"TO_LABEL\".equals(type) ){"); _builder.newLine(); { Text _label = connection.getToLabel(); boolean _operator_notEquals_1 = ObjectExtensions.operator_notEquals(_label, null); if (_operator_notEquals_1) { _builder.append(" "); Text _label_1 = connection.getToLabel(); StringConcatenation _valueGenerator_1 = this.valueGenerator(_label_1, "eClass"); _builder.append(_valueGenerator_1, " "); _builder.newLineIfNotEmpty(); } } _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.append(" "); _builder.append("if( \"CONNECTION_LABEL\".equals(type) ){"); _builder.newLine(); { Text _connectionLabel = connection.getConnectionLabel(); boolean _operator_notEquals_2 = ObjectExtensions.operator_notEquals(_connectionLabel, null); if (_operator_notEquals_2) { _builder.append(" "); Text _connectionLabel_1 = connection.getConnectionLabel(); StringConcatenation _valueGenerator_2 = this.valueGenerator(_connectionLabel_1, "eClass"); _builder.append(_valueGenerator_2, " "); _builder.newLineIfNotEmpty(); } } _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.append(" "); _builder.append("return result;"); _builder.newLine(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.newLine(); _builder.append(" "); _builder.append("@Override"); _builder.newLine(); _builder.append(" "); _builder.append("public boolean hasDoneChanges() {"); _builder.newLine(); _builder.append(" "); _builder.append("return false;"); _builder.newLine(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.newLine(); _builder.append(" "); _builder.append("@Override"); _builder.newLine(); _builder.append(" "); _builder.append("public boolean canUndo(IContext context) {"); _builder.newLine(); _builder.append(" "); _builder.append("return false;"); _builder.newLine(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.newLine(); _builder.append("}"); _builder.newLine(); return _builder; } }