package org.eclipselabs.spray.generator.graphiti.templates;
import com.google.inject.Inject;
import org.eclipse.emf.ecore.EAttribute;
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.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.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.Layout;
import org.eclipselabs.spray.mm.spray.MetaAttribute;
import org.eclipselabs.spray.mm.spray.MetaClass;
import org.eclipselabs.spray.mm.spray.Shape;
import org.eclipselabs.spray.mm.spray.StringLiteral;
import org.eclipselabs.spray.mm.spray.Text;
import org.eclipselabs.spray.mm.spray.extensions.SprayExtensions;
@SuppressWarnings("all")
public class AddConnectionFeature extends FileGenerator {
@Inject
private SprayExtensions e1;
@Inject
private LayoutExtensions e2;
@Inject
private NamingExtensions naming;
public StringConcatenation generateBaseFile(final EObject modelElement) {
JavaGenFile _javaGenFile = this.getJavaGenFile();
String _baseClassName = _javaGenFile.getBaseClassName();
StringConcatenation _mainFile = this.mainFile(((MetaClass) modelElement), _baseClassName);
return _mainFile;
}
public StringConcatenation generateExtensionFile(final EObject modelElement) {
JavaGenFile _javaGenFile = this.getJavaGenFile();
String _className = _javaGenFile.getClassName();
StringConcatenation _mainExtensionPointFile = this.mainExtensionPointFile(((MetaClass) modelElement), _className);
return _mainExtensionPointFile;
}
public StringConcatenation mainExtensionPointFile(final MetaClass metaClass, 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 MetaClass metaClass, final String className) {
StringConcatenation _builder = new StringConcatenation();
Diagram _diagram = metaClass.getDiagram();
String _name = _diagram.getName();
final String diagramName = _name;
_builder.newLineIfNotEmpty();
EClass _type = metaClass.getType();
EPackage _ePackage = _type.getEPackage();
String _name_1 = _ePackage.getName();
final String packge = _name_1;
_builder.newLineIfNotEmpty();
EClass _type_1 = metaClass.getType();
String _fullPackageName = MetaModel.fullPackageName(_type_1);
final String fullPackage = _fullPackageName;
_builder.newLineIfNotEmpty();
Shape _representedBy = metaClass.getRepresentedBy();
final Connection connection = ((Connection) _representedBy);
_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 ");
String _javaInterfaceName = this.naming.getJavaInterfaceName(metaClass);
_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.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.algorithms.GraphicsAlgorithm;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.mm.algorithms.Text;");
_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.pictograms.ConnectionDecorator;");
_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.newLine();
_builder.append("// MARKER_IMPORT");
_builder.newLine();
_builder.newLine();
_builder.append("public class ");
_builder.append(className, "");
_builder.append(" extends AbstractAddFeature {");
_builder.newLineIfNotEmpty();
_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.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(" ");
_builder.append("// TODO: Domain object");
_builder.newLine();
_builder.append(" ");
String _name_2 = this.e1.getName(metaClass);
_builder.append(_name_2, " ");
_builder.append(" addedDomainObject = (");
String _name_3 = this.e1.getName(metaClass);
_builder.append(_name_3, " ");
_builder.append(") context.getNewObject();");
_builder.newLineIfNotEmpty();
_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("IGaService gaService = Graphiti.getGaService();");
_builder.newLine();
_builder.append(" ");
_builder.append("Polyline polyline = gaService.createPolyline(connection);");
_builder.newLine();
_builder.append(" ");
_builder.append("polyline.setLineWidth(");
Shape _representedBy_1 = metaClass.getRepresentedBy();
Layout _layout = _representedBy_1.getLayout();
int _lineWidth = _layout.getLineWidth();
_builder.append(_lineWidth, " ");
_builder.append(");");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("polyline.setForeground(manageColor(");
String _lineColor = this.e2.lineColor(metaClass);
_builder.append(_lineColor, " ");
_builder.append("));");
_builder.newLineIfNotEmpty();
{
Text _label = connection.getToLabel();
boolean _operator_notEquals = ObjectExtensions.operator_notEquals(_label, null);
if (_operator_notEquals) {
_builder.append(" ");
_builder.append("ConnectionDecorator toDecorator = peCreateService.createConnectionDecorator(connection, true, 1.0, true);");
_builder.newLine();
_builder.append(" ");
_builder.append("Text text = gaService.createDefaultText(getDiagram(), toDecorator);");
_builder.newLine();
_builder.append(" ");
_builder.append("text.setForeground(manageColor(");
String _shortName = this.shortName(org.eclipse.graphiti.util.IColorConstant.class);
_builder.append(_shortName, " ");
_builder.append(".BLACK));");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.newLine();
_builder.append(" ");
_builder.append("GraphicsAlgorithm ga = addConContext.getTargetAnchor().getParent().getGraphicsAlgorithm();");
_builder.newLine();
_builder.append(" ");
_builder.append("int targetHeight = ga.getHeight();");
_builder.newLine();
_builder.append(" ");
_builder.append("Graphiti.getGaLayoutService().setLocation(text, 10, -(targetHeight / 2) - 20);");
_builder.newLine();
{
Text _label_1 = connection.getToLabel();
if ((_label_1 instanceof StringLiteral)) {
_builder.append("// text.setValue(\"");
Text _label_2 = connection.getToLabel();
String _name_4 = ((StringLiteral) _label_2).getName();
_builder.append(_name_4, "");
_builder.append("\");");
_builder.newLineIfNotEmpty();
} else {
Text _label_3 = connection.getToLabel();
if ((_label_3 instanceof MetaAttribute)) {
_builder.append("// text.setValue(addedDomainObject.get");
Text _label_4 = connection.getToLabel();
EAttribute _attribute = ((MetaAttribute) _label_4).getAttribute();
String _name_5 = _attribute.getName();
String _firstUpper = StringExtensions.toFirstUpper(_name_5);
_builder.append(_firstUpper, "");
_builder.append("().toString());");
_builder.newLineIfNotEmpty();
}
}
}
_builder.append(" ");
_builder.append("text.setValue(getToLabel(addedDomainObject));");
_builder.newLine();
_builder.append(" ");
_builder.append("Graphiti.getPeService().setPropertyValue(toDecorator, \"MODEL_TYPE\", \"TO_LABEL\");");
_builder.newLine();
_builder.append(" ");
_builder.append("link(toDecorator, addedDomainObject);");
_builder.newLine();
}
}
{
Text _connectionLabel = connection.getConnectionLabel();
boolean _operator_notEquals_1 = ObjectExtensions.operator_notEquals(_connectionLabel, null);
if (_operator_notEquals_1) {
_builder.append(" ");
_builder.append("ConnectionDecorator connectionDecorator = peCreateService.createConnectionDecorator(connection, true, 0.5, true);");
_builder.newLine();
_builder.append(" ");
_builder.append("Text sourceText = gaService.createDefaultText(getDiagram(), connectionDecorator);");
_builder.newLine();
_builder.append(" ");
_builder.append("sourceText.setForeground(manageColor(");
String _shortName_1 = this.shortName(org.eclipse.graphiti.util.IColorConstant.class);
_builder.append(_shortName_1, " ");
_builder.append(".BLACK));");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("Graphiti.getGaLayoutService().setLocation(sourceText, 10, 0);");
_builder.newLine();
_builder.append(" ");
_builder.append("sourceText.setValue(getConnectionLabel(addedDomainObject));");
_builder.newLine();
_builder.append(" ");
_builder.append("Graphiti.getPeService().setPropertyValue(connectionDecorator, \"MODEL_TYPE\", \"CONNECTION_LABEL\");");
_builder.newLine();
_builder.append(" ");
_builder.append("link(connectionDecorator, addedDomainObject);");
_builder.newLine();
}
}
{
Text _fromLabel = connection.getFromLabel();
boolean _operator_notEquals_2 = ObjectExtensions.operator_notEquals(_fromLabel, null);
if (_operator_notEquals_2) {
_builder.append(" ");
_builder.append("ConnectionDecorator fromDecorator = peCreateService.createConnectionDecorator(connection, true, 0.0, true);");
_builder.newLine();
_builder.append(" ");
_builder.append("Text fromText = gaService.createDefaultText(getDiagram(), fromDecorator);");
_builder.newLine();
_builder.append(" ");
_builder.append("fromText.setForeground(manageColor(");
String _shortName_2 = this.shortName(org.eclipse.graphiti.util.IColorConstant.class);
_builder.append(_shortName_2, " ");
_builder.append(".BLACK));");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("Graphiti.getGaLayoutService().setLocation(fromText, 10, 20);");
_builder.newLine();
_builder.append(" ");
_builder.append("fromText.setValue(getFromLabel(addedDomainObject));");
_builder.newLine();
_builder.append(" ");
_builder.append("Graphiti.getPeService().setPropertyValue(fromDecorator, \"MODEL_TYPE\", \"FROM_LABEL\");");
_builder.newLine();
_builder.append(" ");
_builder.append("link(fromDecorator, addedDomainObject);");
_builder.newLine();
}
}
_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\", \"");
String _name_6 = this.e1.getName(metaClass);
_builder.append(_name_6, " ");
_builder.append("\");");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("link(connection, addedDomainObject);");
_builder.newLine();
_builder.newLine();
_builder.append(" ");
_builder.append("return connection;");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.newLine();
{
Text _label_5 = connection.getToLabel();
boolean _operator_notEquals_3 = ObjectExtensions.operator_notEquals(_label_5, null);
if (_operator_notEquals_3) {
_builder.append(" ");
_builder.append("private String getToLabel (");
String _name_7 = this.e1.getName(metaClass);
_builder.append(_name_7, " ");
_builder.append(" addedDomainObject) {");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append(" ");
Text _label_6 = connection.getToLabel();
StringConcatenation _valueGenerator = this.valueGenerator(_label_6, "addedDomainObject");
_builder.append(_valueGenerator, " ");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
}
}
{
Text _connectionLabel_1 = connection.getConnectionLabel();
boolean _operator_notEquals_4 = ObjectExtensions.operator_notEquals(_connectionLabel_1, null);
if (_operator_notEquals_4) {
_builder.append(" ");
_builder.append("private String getConnectionLabel (");
String _name_8 = this.e1.getName(metaClass);
_builder.append(_name_8, " ");
_builder.append(" addedDomainObject) {");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append(" ");
Text _connectionLabel_2 = connection.getConnectionLabel();
StringConcatenation _valueGenerator_1 = this.valueGenerator(_connectionLabel_2, "addedDomainObject");
_builder.append(_valueGenerator_1, " ");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
}
}
{
Text _fromLabel_1 = connection.getFromLabel();
boolean _operator_notEquals_5 = ObjectExtensions.operator_notEquals(_fromLabel_1, null);
if (_operator_notEquals_5) {
_builder.append(" ");
_builder.append("private String getFromLabel (");
String _name_9 = this.e1.getName(metaClass);
_builder.append(_name_9, " ");
_builder.append(" addedDomainObject) {");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append(" ");
Text _fromLabel_2 = connection.getFromLabel();
StringConcatenation _valueGenerator_2 = this.valueGenerator(_fromLabel_2, "addedDomainObject");
_builder.append(_valueGenerator_2, " ");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
}
}
_builder.append(" ");
_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 ");
String _name_10 = this.e1.getName(metaClass);
_builder.append(_name_10, " ");
_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 ");
String _name_11 = this.e1.getName(metaClass);
_builder.append(_name_11, " ");
_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.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.newLine();
_builder.append("}");
_builder.newLine();
return _builder;
}
}