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.naming.IQualifiedNameProvider; import org.eclipse.xtext.naming.QualifiedName; import org.eclipse.xtext.xbase.lib.ObjectExtensions; import org.eclipse.xtext.xbase.lib.StringExtensions; 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.generator.graphiti.util.NamingExtensions; import org.eclipselabs.spray.mm.spray.Container; import org.eclipselabs.spray.mm.spray.Layout; import org.eclipselabs.spray.mm.spray.Line; import org.eclipselabs.spray.mm.spray.MetaClass; import org.eclipselabs.spray.mm.spray.MetaReference; import org.eclipselabs.spray.mm.spray.SprayElement; import org.eclipselabs.spray.mm.spray.Text; import org.eclipselabs.spray.mm.spray.extensions.SprayExtensions; @SuppressWarnings("all") public class AddShapeFeature extends FileGenerator { @Inject private SprayExtensions e1; @Inject private LayoutExtensions e2; @Inject private IQualifiedNameProvider e3; @Inject private NamingExtensions naming; public StringConcatenation generateBaseFile(final EObject modelElement) { JavaGenFile _javaGenFile = this.getJavaGenFile(); String _baseClassName = _javaGenFile.getBaseClassName(); StringConcatenation _mainFile = this.mainFile(((Container) modelElement), _baseClassName); return _mainFile; } public StringConcatenation generateExtensionFile(final EObject modelElement) { JavaGenFile _javaGenFile = this.getJavaGenFile(); String _className = _javaGenFile.getClassName(); StringConcatenation _mainExtensionPointFile = this.mainExtensionPointFile(((Container) modelElement), _className); return _mainExtensionPointFile; } public StringConcatenation mainExtensionPointFile(final Container container, 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 Container container, final String className) { StringConcatenation _builder = new StringConcatenation(); String _constainerClass = GeneratorUtil.constainerClass(container); String containerType = _constainerClass; _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 "); MetaClass _represents = container.getRepresents(); String _javaInterfaceName = this.naming.getJavaInterfaceName(_represents); _builder.append(_javaInterfaceName, ""); _builder.append(";"); _builder.newLineIfNotEmpty(); _builder.append("import org.eclipse.graphiti.features.IFeatureProvider;"); _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.AbstractAddShapeFeature;"); _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.algorithms.Polyline;"); _builder.newLine(); _builder.append("import org.eclipse.graphiti.mm.algorithms.styles.Orientation;"); _builder.newLine(); _builder.append("import org.eclipse.graphiti.mm.pictograms.ContainerShape;"); _builder.newLine(); _builder.append("import org.eclipse.graphiti.mm.pictograms.Diagram;"); _builder.newLine(); _builder.append("import org.eclipse.graphiti.mm.pictograms.PictogramElement;"); _builder.newLine(); _builder.append("import org.eclipse.graphiti.mm.pictograms.Shape;"); _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("import "); String _util_package = GeneratorUtil.util_package(); _builder.append(_util_package, ""); _builder.append(".ISprayContainer;"); _builder.newLineIfNotEmpty(); _builder.append("import "); String _util_package_1 = GeneratorUtil.util_package(); _builder.append(_util_package_1, ""); _builder.append("."); _builder.append(containerType, ""); _builder.append(";"); _builder.newLineIfNotEmpty(); _builder.append("import "); String _util_package_2 = GeneratorUtil.util_package(); _builder.append(_util_package_2, ""); _builder.append(".SprayContainerService;"); _builder.newLineIfNotEmpty(); _builder.append("// MARKER_IMPORT"); _builder.newLine(); _builder.newLine(); _builder.append("public class "); _builder.append(className, ""); _builder.append(" extends AbstractAddShapeFeature {"); _builder.newLineIfNotEmpty(); _builder.newLine(); _builder.append(" "); _builder.append("protected final static String typeOrAliasName = \""); MetaClass _represents_1 = container.getRepresents(); String _visibleName = GeneratorUtil.visibleName(_represents_1); _builder.append(_visibleName, " "); _builder.append("\";"); _builder.newLineIfNotEmpty(); _builder.newLine(); _builder.append(" "); _builder.append("protected Diagram targetDiagram = null;"); _builder.newLine(); _builder.newLine(); _builder.append(" "); _builder.append("protected "); _builder.append(containerType, " "); _builder.append(" container = null;"); _builder.newLineIfNotEmpty(); _builder.newLine(); _builder.append(" "); _builder.append("protected IGaService gaService = 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("container = new "); _builder.append(containerType, " "); _builder.append("();"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("gaService = Graphiti.getGaService();"); _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("final Object newObject = context.getNewObject();"); _builder.newLine(); _builder.append(" "); _builder.append("if (newObject instanceof "); MetaClass _represents_2 = container.getRepresents(); String _name = this.e1.getName(_represents_2); _builder.append(_name, " "); _builder.append(") {"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("// check if user wants to add to a diagram"); _builder.newLine(); _builder.append(" "); _builder.append("if (context.getTargetContainer() instanceof Diagram) {"); _builder.newLine(); _builder.append(" "); _builder.append("return true;"); _builder.newLine(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.append(" "); _builder.append("return false;"); _builder.newLine(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.newLine(); _builder.append(" "); _builder.append("public PictogramElement add(IAddContext context) {"); _builder.newLine(); _builder.append(" "); MetaClass _represents_3 = container.getRepresents(); String _name_1 = this.e1.getName(_represents_3); _builder.append(_name_1, " "); _builder.append(" addedModelElement = ("); MetaClass _represents_4 = container.getRepresents(); String _name_2 = this.e1.getName(_represents_4); _builder.append(_name_2, " "); _builder.append(") context.getNewObject();"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("targetDiagram = Graphiti.getPeService().getDiagramForShape(context.getTargetContainer());"); _builder.newLine(); _builder.append(" "); _builder.append("IPeCreateService peCreateService = Graphiti.getPeCreateService();"); _builder.newLine(); _builder.newLine(); _builder.append(" "); _builder.append("ContainerShape containerShape = container.createContainer(context, addedModelElement);"); _builder.newLine(); { boolean _hasFillColor = this.e2.hasFillColor(container); if (_hasFillColor) { _builder.append(" "); _builder.append("GraphicsAlgorithm containerGa = containerShape.getGraphicsAlgorithm();"); _builder.newLine(); _builder.append(" "); _builder.append("containerGa.setBackground(manageColor("); String _fillColor = this.e2.fillColor(container); _builder.append(_fillColor, " "); _builder.append("));"); _builder.newLineIfNotEmpty(); } } _builder.append(" "); _builder.append("ContainerShape textContainer = SprayContainerService.findTextShape(containerShape);"); _builder.newLine(); _builder.append(" "); _builder.append("link(containerShape, addedModelElement);"); _builder.newLine(); _builder.newLine(); { SprayElement[] _parts = container.getParts(); for(final SprayElement part : _parts) { { if ((part instanceof Line)) { Line line = ((Line) part); _builder.newLineIfNotEmpty(); _builder.append("// Part is Line"); _builder.newLine(); _builder.append("{"); _builder.newLine(); _builder.append(" "); _builder.append("// create shape for line"); _builder.newLine(); _builder.append(" "); _builder.append("Shape shape = peCreateService.createShape(textContainer, false);"); _builder.newLine(); _builder.append(" "); _builder.append("// create and set graphics algorithm"); _builder.newLine(); _builder.append(" "); _builder.append("Polyline polyline = gaService.createPolyline(shape, new int[] { 0, 0, 0, 0 });"); _builder.newLine(); _builder.append(" "); _builder.append("polyline.setForeground(manageColor("); String _lineColor = this.e2.lineColor(line); _builder.append(_lineColor, " "); _builder.append(" ));"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("polyline.setLineWidth("); Layout _layout = line.getLayout(); int _lineWidth = _layout.getLineWidth(); _builder.append(_lineWidth, " "); _builder.append(");"); _builder.newLineIfNotEmpty(); { Layout _layout_1 = line.getLayout(); int _lineWidth_1 = _layout_1.getLineWidth(); boolean _operator_equals = ObjectExtensions.operator_equals(((Integer)_lineWidth_1), ((Integer)0)); if (_operator_equals) { _builder.append("polyline.setLineVisible(false);"); _builder.newLine(); } } _builder.append(" "); _builder.append("gaService.setLocation(polyline, 0, 0);"); _builder.newLine(); _builder.append(" "); _builder.append("Graphiti.getPeService().setPropertyValue(shape, ISprayContainer.CONCEPT_SHAPE_KEY, ISprayContainer.LINE);"); _builder.newLine(); _builder.append("}"); _builder.newLine(); } else { if ((part instanceof Text)) { Text text = ((Text) part); _builder.newLineIfNotEmpty(); _builder.append("// Part is Text"); _builder.newLine(); _builder.append("{"); _builder.newLine(); _builder.append(" "); _builder.append("String type = \""); QualifiedName _fullyQualifiedName = this.e3.getFullyQualifiedName(text); _builder.append(_fullyQualifiedName, " "); _builder.append("\";"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("// create shape for text and set text graphics algorithm"); _builder.newLine(); _builder.append(" "); _builder.append("Shape shape = peCreateService.createShape(textContainer, false);"); _builder.newLine(); _builder.append(" "); _builder.append("Text text = gaService.createDefaultText(getDiagram(), shape);"); _builder.newLine(); _builder.append(" "); _builder.append("text.setFont(gaService.manageFont(getDiagram(), text.getFont().getName(), 12));"); _builder.newLine(); _builder.append(" "); _builder.append("text.setForeground(manageColor("); String _lineColor_1 = this.e2.lineColor(text); _builder.append(_lineColor_1, " "); _builder.append("));"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("text.setHorizontalAlignment(Orientation.ALIGNMENT_CENTER);"); _builder.newLine(); _builder.append(" "); _builder.append("text.setVerticalAlignment(Orientation.ALIGNMENT_CENTER);"); _builder.newLine(); { Layout _layout_2 = text.getLayout(); boolean _isBold = _layout_2.isBold(); if (_isBold) { _builder.append("text.getFont().setBold(true);"); _builder.newLine(); } } { Layout _layout_3 = text.getLayout(); boolean _isItalic = _layout_3.isItalic(); if (_isItalic) { _builder.append("text.getFont().setItalic(true);"); _builder.newLine(); } } _builder.append(" "); _builder.append("gaService.setLocationAndSize(text, 0, 0, 0, 0);"); _builder.newLine(); _builder.append(" "); _builder.append("Graphiti.getPeService().setPropertyValue(shape, \"MODEL_TYPE\", type);"); _builder.newLine(); _builder.append(" "); _builder.append("Graphiti.getPeService().setPropertyValue(shape, ISprayContainer.CONCEPT_SHAPE_KEY, ISprayContainer.TEXT);"); _builder.newLine(); _builder.append(" "); _builder.append("// create link and wire it"); _builder.newLine(); _builder.append(" "); _builder.append("link(shape, addedModelElement);"); _builder.newLine(); _builder.append("}"); _builder.newLine(); } else { if ((part instanceof MetaReference)) { final MetaReference metaRef = ((MetaReference) part); _builder.newLineIfNotEmpty(); EReference _reference = metaRef.getReference(); final EReference eReference = _reference; _builder.append(" "); _builder.newLineIfNotEmpty(); _builder.append("// Part is reference list"); _builder.newLine(); _builder.append("{"); _builder.newLine(); _builder.append(" "); _builder.append("// Create a dummy invisible line to have an ancjhor point for adding new elements to the list"); _builder.newLine(); _builder.append(" "); _builder.append("Shape dummy = peCreateService.createShape(textContainer, false);"); _builder.newLine(); _builder.append(" "); _builder.append("Graphiti.getPeService().setPropertyValue(dummy, \"MODEL_TYPE\", \""); EClass _eReferenceType = eReference.getEReferenceType(); String _name_3 = _eReferenceType.getName(); _builder.append(_name_3, " "); _builder.append("\");"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("Polyline p = gaService.createPolyline(dummy, new int[] { 0, 0, 0, 0 });"); _builder.newLine(); _builder.append(" "); _builder.append("p.setForeground(manageColor("); String _shortName = this.shortName(org.eclipse.graphiti.util.IColorConstant.class); _builder.append(_shortName, " "); _builder.append(".BLACK));"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("p.setLineWidth(0);"); _builder.newLine(); _builder.append(" "); _builder.append("p.setLineVisible(false);"); _builder.newLine(); _builder.append(" "); _builder.append("gaService.setLocation(p, 0, 0);"); _builder.newLine(); _builder.append(" "); _builder.append("Graphiti.getPeService().setPropertyValue(dummy, ISprayContainer.CONCEPT_SHAPE_KEY, ISprayContainer.LINE);"); _builder.newLine(); _builder.append("}"); _builder.newLine(); _builder.append("for ("); EClass _eReferenceType_1 = eReference.getEReferenceType(); String _javaInterfaceName_1 = this.naming.getJavaInterfaceName(_eReferenceType_1); String _shortName_1 = this.shortName(_javaInterfaceName_1); _builder.append(_shortName_1, ""); _builder.append(" p : addedModelElement.get"); String _name_4 = eReference.getName(); String _firstUpper = StringExtensions.toFirstUpper(_name_4); _builder.append(_firstUpper, ""); _builder.append("()) {"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("Shape shape = peCreateService.createContainerShape(textContainer, true);"); _builder.newLine(); _builder.append(" "); _builder.append("Graphiti.getPeService().setPropertyValue(shape, \"STATIC\", \"true\");"); _builder.newLine(); _builder.append(" "); _builder.append("Graphiti.getPeService().setPropertyValue(shape, \"MODEL_TYPE\", \""); EClass _eReferenceType_2 = eReference.getEReferenceType(); String _name_5 = _eReferenceType_2.getName(); _builder.append(_name_5, " "); _builder.append("\");"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("Graphiti.getPeService().setPropertyValue(shape, ISprayContainer.CONCEPT_SHAPE_KEY, ISprayContainer.TEXT);"); _builder.newLine(); _builder.append(" "); _builder.append("// create and set text graphics algorithm"); _builder.newLine(); _builder.append(" "); _builder.append("Text text = gaService.createDefaultText(getDiagram(), shape, p.get"); String _labelPropertyName = this.e1.getLabelPropertyName(metaRef); String _firstUpper_1 = StringExtensions.toFirstUpper(_labelPropertyName); _builder.append(_firstUpper_1, " "); _builder.append("());"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("// TODO should have a text color here, refer to representation of reference type"); _builder.newLine(); _builder.append(" "); _builder.append("text.setForeground(manageColor("); String _textColor = this.e2.textColor(container); _builder.append(_textColor, " "); _builder.append(")); "); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("text.setHorizontalAlignment(Orientation.ALIGNMENT_LEFT);"); _builder.newLine(); _builder.append(" "); _builder.append("text.setVerticalAlignment(Orientation.ALIGNMENT_TOP);"); _builder.newLine(); _builder.append(" "); _builder.append("gaService.setLocationAndSize(text, 0, 0, 0, 0);"); _builder.newLine(); _builder.append(" "); _builder.append("// create link and wire it"); _builder.newLine(); _builder.append(" "); _builder.append("link(shape, p);"); _builder.newLine(); _builder.append("}"); _builder.newLine(); } else { _builder.append("// TODO"); _builder.newLine(); _builder.append("System.out.println(\"Spray: unhandled Container child ["); Class<? extends Object> _class = part.getClass(); String _name_6 = _class.getName(); _builder.append(_name_6, ""); _builder.append("]\");"); _builder.newLineIfNotEmpty(); } } } } } } _builder.append(" "); _builder.newLine(); _builder.append(" "); _builder.append("// add a chopbox anchor to the shape"); _builder.newLine(); _builder.append(" "); _builder.append("peCreateService.createChopboxAnchor(containerShape);"); _builder.newLine(); _builder.newLine(); _builder.append(" "); _builder.append("// call the update and layout features"); _builder.newLine(); _builder.append(" "); _builder.append("updatePictogramElement(containerShape);"); _builder.newLine(); _builder.append(" "); _builder.append("layoutPictogramElement(containerShape);"); _builder.newLine(); _builder.append(" "); _builder.newLine(); _builder.append(" "); _builder.append("return containerShape;"); _builder.newLine(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.append(" "); _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; } }