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.EReference; 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.LayoutExtensions; import org.eclipselabs.spray.mm.spray.Connection; import org.eclipselabs.spray.mm.spray.Layout; import org.eclipselabs.spray.mm.spray.MetaClass; import org.eclipselabs.spray.mm.spray.MetaReference; import org.eclipselabs.spray.mm.spray.extensions.SprayExtensions; import org.eclipselabs.spray.xtext.util.GenModelHelper; @SuppressWarnings("all") public class AddReferenceAsConnectionFeature extends FileGenerator { @Inject private SprayExtensions e1; @Inject private LayoutExtensions e2; @Inject private GenModelHelper e3; public StringConcatenation generateBaseFile(final EObject modelElement) { JavaGenFile _javaGenFile = this.getJavaGenFile(); String _baseClassName = _javaGenFile.getBaseClassName(); StringConcatenation _mainFile = this.mainFile(((MetaReference) modelElement), _baseClassName); return _mainFile; } public StringConcatenation generateExtensionFile(final EObject modelElement) { JavaGenFile _javaGenFile = this.getJavaGenFile(); String _className = _javaGenFile.getClassName(); StringConcatenation _mainExtensionPointFile = this.mainExtensionPointFile(((MetaReference) modelElement), _className); return _mainExtensionPointFile; } public StringConcatenation mainExtensionPointFile(final MetaReference metaReference, 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.append("}"); _builder.newLine(); return _builder; } public StringConcatenation mainFile(final MetaReference reference, final String className) { StringConcatenation _builder = new StringConcatenation(); EReference _reference = reference.getReference(); final EReference target = _reference; _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.append("import org.eclipse.emf.ecore.EObject;"); _builder.newLine(); _builder.append("import org.eclipse.graphiti.features.IFeatureProvider;"); _builder.newLine(); _builder.append("import org.eclipse.graphiti.features.context.IAddConnectionContext;"); _builder.newLine(); _builder.append("import org.eclipse.graphiti.features.context.IAddContext;"); _builder.newLine(); _builder.append("import org.eclipse.graphiti.features.context.IContext;"); _builder.newLine(); _builder.append("import org.eclipse.graphiti.features.impl.AbstractAddFeature;"); _builder.newLine(); _builder.append("import org.eclipse.graphiti.mm.GraphicsAlgorithmContainer;"); _builder.newLine(); _builder.append("import org.eclipse.graphiti.mm.pictograms.AnchorContainer;"); _builder.newLine(); _builder.append("import org.eclipse.graphiti.mm.pictograms.ConnectionDecorator;"); _builder.newLine(); _builder.append("import org.eclipse.graphiti.mm.pictograms.Connection;"); _builder.newLine(); _builder.append("import org.eclipse.graphiti.mm.pictograms.PictogramElement;"); _builder.newLine(); _builder.append("import org.eclipse.graphiti.mm.algorithms.Polyline;"); _builder.newLine(); _builder.append("import org.eclipse.graphiti.services.Graphiti;"); _builder.newLine(); _builder.append("import org.eclipse.graphiti.services.IGaService;"); _builder.newLine(); _builder.append("import org.eclipse.graphiti.services.IPeCreateService;"); _builder.newLine(); _builder.append("// MARKER_IMPORT"); _builder.newLine(); _builder.newLine(); _builder.append("public class "); _builder.append(className, ""); _builder.append(" extends AbstractAddFeature {"); _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.append(" "); _builder.newLine(); _builder.append(" "); _builder.append("public PictogramElement add(IAddContext context) {"); _builder.newLine(); _builder.append(" "); _builder.append("IAddConnectionContext addConContext = (IAddConnectionContext) context;"); _builder.newLine(); _builder.append(" "); MetaClass _metaClass = reference.getMetaClass(); EClass _type = _metaClass.getType(); String _javaInterfaceName = this.e3.getJavaInterfaceName(_type); String _shortName = this.shortName(_javaInterfaceName); _builder.append(_shortName, " "); _builder.append(" addedDomainObject = ("); MetaClass _metaClass_1 = reference.getMetaClass(); String _name = this.e1.getName(_metaClass_1); _builder.append(_name, " "); _builder.append(") context.getNewObject();"); _builder.newLineIfNotEmpty(); { int _upperBound = target.getUpperBound(); boolean _operator_equals = ObjectExtensions.operator_equals(((Integer)_upperBound), ((Integer)1)); if (_operator_equals) { _builder.append(" "); _builder.append("removeExisting(context);"); _builder.newLine(); } } _builder.append(" "); _builder.append("IPeCreateService peCreateService = Graphiti.getPeCreateService();"); _builder.newLine(); _builder.append(" "); _builder.newLine(); _builder.append(" "); _builder.append("// CONNECTION WITH POLYLINE"); _builder.newLine(); _builder.append(" "); _builder.append("Connection connection = peCreateService.createFreeFormConnection(getDiagram());"); _builder.newLine(); _builder.append(" "); _builder.append("connection.setStart(addConContext.getSourceAnchor());"); _builder.newLine(); _builder.append(" "); _builder.append("connection.setEnd(addConContext.getTargetAnchor());"); _builder.newLine(); _builder.append(" "); _builder.newLine(); _builder.append(" "); _builder.append("// TRY"); _builder.newLine(); _builder.append(" "); _builder.append("AnchorContainer parent = connection.getStart().getParent();"); _builder.newLine(); _builder.append(" "); _builder.append("Object start = getBusinessObjectForPictogramElement(parent);"); _builder.newLine(); _builder.append(" "); _builder.append("AnchorContainer child = connection.getEnd().getParent();"); _builder.newLine(); _builder.append(" "); _builder.append("Object end = getBusinessObjectForPictogramElement(child);"); _builder.newLine(); _builder.append(" "); _builder.append("//END TRY"); _builder.newLine(); _builder.newLine(); _builder.append(" "); _builder.append("IGaService gaService = Graphiti.getGaService();"); _builder.newLine(); _builder.append(" "); _builder.append("Polyline polyline = gaService.createPolyline(connection);"); _builder.newLine(); _builder.append(" "); _builder.append("polyline.setLineWidth("); Connection _representedBy = reference.getRepresentedBy(); Layout _layout = _representedBy.getLayout(); int _lineWidth = _layout.getLineWidth(); _builder.append(_lineWidth, " "); _builder.append(");"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("polyline.setForeground(manageColor("); String _lineColor = this.e2.lineColor(reference); _builder.append(_lineColor, " "); _builder.append("));"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.newLine(); _builder.append(" "); _builder.append("// create link and wire it"); _builder.newLine(); _builder.append(" "); _builder.append("Graphiti.getPeService().setPropertyValue(connection, \"MODEL_TYPE\", \""); MetaClass _metaClass_2 = reference.getMetaClass(); String _name_1 = this.e1.getName(_metaClass_2); _builder.append(_name_1, " "); _builder.append("."); String _name_2 = target.getName(); _builder.append(_name_2, " "); _builder.append("\");"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("Graphiti.getPeService().setPropertyValue(connection, \"REFERENCE\", (String)context.getProperty(\"REFERENCE\"));"); _builder.newLine(); _builder.append(" "); _builder.append("Graphiti.getPeService().setPropertyValue(connection, \"TARGETOBJECT\", (String)context.getProperty(\"TARGETOBJECT\"));"); _builder.newLine(); _builder.append(" "); _builder.append("// link(connection, addedDomainObject);"); _builder.newLine(); _builder.newLine(); _builder.append(" "); _builder.append("// add static graphical decorator"); _builder.newLine(); _builder.append(" "); _builder.append("ConnectionDecorator cd;"); _builder.newLine(); _builder.append(" "); _builder.append("cd = peCreateService.createConnectionDecorator(connection, false, 1.0, true);"); _builder.newLine(); _builder.append("// No arraows"); _builder.newLine(); _builder.append("// createArrow(cd);"); _builder.newLine(); _builder.newLine(); _builder.append(" "); _builder.append("return connection;"); _builder.newLine(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.newLine(); _builder.append(" "); _builder.append("public boolean canAdd(IAddContext context) {"); _builder.newLine(); _builder.append(" "); _builder.append("// return true if given business object is an "); MetaClass _metaClass_3 = reference.getMetaClass(); String _name_3 = this.e1.getName(_metaClass_3); _builder.append(_name_3, " "); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("// note, that the context must be an instance of IAddConnectionContext"); _builder.newLine(); _builder.append(" "); _builder.append("if (context instanceof IAddConnectionContext"); _builder.newLine(); _builder.append(" "); _builder.append("&& context.getNewObject() instanceof "); MetaClass _metaClass_4 = reference.getMetaClass(); String _name_4 = this.e1.getName(_metaClass_4); _builder.append(_name_4, " "); _builder.append(") {"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("return true;"); _builder.newLine(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.append(" "); _builder.append("return false;"); _builder.newLine(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.append(" "); _builder.newLine(); _builder.append(" "); _builder.append("protected void removeExisting(IAddContext context) {"); _builder.newLine(); _builder.append(" "); _builder.append("IAddConnectionContext addConContext = (IAddConnectionContext) context;"); _builder.newLine(); _builder.append(" "); MetaClass _metaClass_5 = reference.getMetaClass(); String _name_5 = this.e1.getName(_metaClass_5); _builder.append(_name_5, " "); _builder.append(" addedDomainObject = ("); MetaClass _metaClass_6 = reference.getMetaClass(); String _name_6 = this.e1.getName(_metaClass_6); _builder.append(_name_6, " "); _builder.append(") context.getNewObject();"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("Object[] pictogramElements = Graphiti.getPeService().getLinkedPictogramElements(new EObject[] { addedDomainObject }, getDiagram());"); _builder.newLine(); _builder.append(" "); _builder.append("for (Object pict : pictogramElements) {"); _builder.newLine(); _builder.append(" "); _builder.append("if( pict instanceof PictogramElement){"); _builder.newLine(); _builder.append(" "); _builder.append("PictogramElement p = (PictogramElement)pict;"); _builder.newLine(); _builder.append(" "); _builder.append("String reference = Graphiti.getPeService().getPropertyValue(p, \"REFERENCE\");"); _builder.newLine(); _builder.append(" "); _builder.append("if( \""); String _name_7 = this.e1.getName(reference); _builder.append(_name_7, " "); _builder.append("\".equals(reference)){"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("Graphiti.getPeService().deletePictogramElement(p) ;"); _builder.newLine(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.newLine(); _builder.append(" "); _builder.append("private Polyline createArrow(GraphicsAlgorithmContainer gaContainer) {"); _builder.newLine(); _builder.append(" "); _builder.append("Polyline polyline = Graphiti.getGaCreateService().createPolyline(gaContainer, new int[] { -15, 10, 0, 0, -15, -10 });"); _builder.newLine(); _builder.append("// polyline.setStyle(StyleUtil.getStyleForEClass(getDiagram()));"); _builder.newLine(); _builder.append(" "); _builder.append("polyline.setLineWidth("); Connection _representedBy_1 = reference.getRepresentedBy(); Layout _layout_1 = _representedBy_1.getLayout(); int _lineWidth_1 = _layout_1.getLineWidth(); _builder.append(_lineWidth_1, " "); _builder.append(");"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("polyline.setForeground(manageColor("); String _lineColor_1 = this.e2.lineColor(reference); _builder.append(_lineColor_1, " "); _builder.append("));"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("return polyline;"); _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.append(" "); _builder.newLine(); _builder.append("}"); _builder.newLine(); return _builder; } }