package org.eclipselabs.spray.generator.graphiti.templates;
import com.google.inject.Inject;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EClassifier;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.xtext.xbase.lib.BooleanExtensions;
import org.eclipse.xtext.xbase.lib.Functions.Function1;
import org.eclipse.xtext.xbase.lib.IterableExtensions;
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.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.Shape;
import org.eclipselabs.spray.mm.spray.extensions.SprayExtensions;
import org.eclipselabs.spray.xtext.util.GenModelHelper;
@SuppressWarnings("all")
public class CreateConnectionFeature extends FileGenerator {
@Inject
private SprayExtensions e1;
@Inject
private NamingExtensions naming;
@Inject
private GenModelHelper genModelHelper;
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.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();
Shape _representedBy = metaClass.getRepresentedBy();
final Connection connection = ((Connection) _representedBy);
_builder.newLineIfNotEmpty();
EReference _from = connection.getFrom();
EClassifier _eType = _from.getEType();
final EClass from = ((EClass) _eType);
_builder.newLineIfNotEmpty();
EReference _to = connection.getTo();
EClassifier _eType_1 = _to.getEType();
final EClass to = ((EClass) _eType_1);
_builder.newLineIfNotEmpty();
Diagram _diagram = metaClass.getDiagram();
final Diagram diagram = _diagram;
_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 java.io.IOException;");
_builder.newLine();
_builder.newLine();
_builder.append("import org.eclipse.core.runtime.CoreException;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.features.IFeatureProvider;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.features.context.ICreateConnectionContext;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.features.context.IContext;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.features.context.impl.AddConnectionContext;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.features.impl.AbstractCreateConnectionFeature;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.mm.pictograms.Anchor;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.mm.pictograms.Connection;");
_builder.newLine();
_builder.append("import ");
String _util_package = GeneratorUtil.util_package();
_builder.append(_util_package, "");
_builder.append(".SampleUtil;");
_builder.newLineIfNotEmpty();
_builder.append("// MARKER_IMPORT");
_builder.newLine();
_builder.newLine();
_builder.append("public class ");
_builder.append(className, "");
_builder.append(" extends AbstractCreateConnectionFeature {");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append(" ");
_builder.append("public ");
_builder.append(className, " ");
_builder.append("(IFeatureProvider fp) {");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("// provide name and description for the UI, e.g. the palette");
_builder.newLine();
_builder.append(" ");
_builder.append("super(fp, \"");
String _visibleName = GeneratorUtil.visibleName(metaClass);
_builder.append(_visibleName, " ");
_builder.append("\", \"Create ");
String _visibleName_1 = GeneratorUtil.visibleName(metaClass);
_builder.append(_visibleName_1, " ");
_builder.append("\");");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append(" ");
_builder.append("public boolean canCreate(ICreateConnectionContext context) {");
_builder.newLine();
_builder.append(" ");
_builder.append("// return true if both anchors belong to an EClass");
_builder.newLine();
_builder.append(" ");
_builder.append("// and those EClasses are not identical");
_builder.newLine();
_builder.append(" ");
String _javaInterfaceName = this.genModelHelper.getJavaInterfaceName(from);
String _shortName = this.shortName(_javaInterfaceName);
_builder.append(_shortName, " ");
_builder.append(" source = get");
String _name = from.getName();
_builder.append(_name, " ");
_builder.append("(context.getSourceAnchor());");
_builder.newLineIfNotEmpty();
_builder.append(" ");
String _javaInterfaceName_1 = this.genModelHelper.getJavaInterfaceName(to);
String _shortName_1 = this.shortName(_javaInterfaceName_1);
_builder.append(_shortName_1, " ");
_builder.append(" target = get");
String _name_1 = to.getName();
_builder.append(_name_1, " ");
_builder.append("(context.getTargetAnchor());");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("if ( (source != null) && (target != null) && (source != target) ) {");
_builder.newLine();
_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("public boolean canStartConnection(ICreateConnectionContext context) {");
_builder.newLine();
_builder.append(" ");
_builder.append("// return true if start anchor belongs to a EClass");
_builder.newLine();
_builder.append(" ");
_builder.append("if (get");
String _name_2 = from.getName();
_builder.append(_name_2, " ");
_builder.append("(context.getSourceAnchor()) != null) {");
_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("public Connection create(ICreateConnectionContext context) {");
_builder.newLine();
_builder.append(" ");
_builder.append("Connection newConnection = null;");
_builder.newLine();
_builder.newLine();
_builder.append(" ");
_builder.append("// get EClasses which should be connected");
_builder.newLine();
_builder.append(" ");
String _name_3 = from.getName();
_builder.append(_name_3, " ");
_builder.append(" source = get");
String _name_4 = from.getName();
_builder.append(_name_4, " ");
_builder.append("(context.getSourceAnchor());");
_builder.newLineIfNotEmpty();
_builder.append(" ");
String _name_5 = to.getName();
_builder.append(_name_5, " ");
_builder.append(" target = get");
String _name_6 = to.getName();
_builder.append(_name_6, " ");
_builder.append("(context.getTargetAnchor());");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append(" ");
_builder.append("if (source != null && target != null) {");
_builder.newLine();
_builder.append(" ");
_builder.append("// create new business object");
_builder.newLine();
_builder.append(" ");
String _javaInterfaceName_2 = this.naming.getJavaInterfaceName(metaClass);
String _shortName_2 = this.shortName(_javaInterfaceName_2);
_builder.append(_shortName_2, " ");
_builder.append(" eReference = create");
String _name_7 = this.e1.getName(metaClass);
_builder.append(_name_7, " ");
_builder.append("(source, target);");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("// add connection for business object");
_builder.newLine();
_builder.append(" ");
_builder.append("AddConnectionContext addContext = new AddConnectionContext(");
_builder.newLine();
_builder.append(" ");
_builder.append("context.getSourceAnchor(), context.getTargetAnchor());");
_builder.newLine();
_builder.append(" ");
_builder.append("addContext.setNewObject(eReference);");
_builder.newLine();
_builder.append(" ");
_builder.append("newConnection = (Connection) getFeatureProvider().addIfPossible(addContext);");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append(" ");
_builder.append("return newConnection;");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append(" ");
_builder.append("/**");
_builder.newLine();
_builder.append(" ");
_builder.append("* Returns the ");
String _name_8 = from.getName();
_builder.append(_name_8, " ");
_builder.append(" belonging to the anchor, or null if not available.");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("*/");
_builder.newLine();
_builder.append(" ");
_builder.append("private ");
String _name_9 = from.getName();
_builder.append(_name_9, " ");
_builder.append(" get");
String _name_10 = from.getName();
_builder.append(_name_10, " ");
_builder.append("(Anchor anchor) {");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("if (anchor != null) {");
_builder.newLine();
_builder.append(" ");
_builder.append("Object object = getBusinessObjectForPictogramElement(anchor.getParent());");
_builder.newLine();
_builder.append(" ");
_builder.append("if (object instanceof ");
String _name_11 = from.getName();
_builder.append(_name_11, " ");
_builder.append(") {");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("return (");
String _name_12 = from.getName();
_builder.append(_name_12, " ");
_builder.append(") object;");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.append(" ");
_builder.append("return null;");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
{
String _name_13 = from.getName();
String _name_14 = to.getName();
boolean _operator_notEquals = ObjectExtensions.operator_notEquals(_name_13, _name_14);
if (_operator_notEquals) {
_builder.append(" ");
_builder.append("/**");
_builder.newLine();
_builder.append(" ");
_builder.append(" ");
_builder.append("* Returns the ");
String _name_15 = to.getName();
_builder.append(_name_15, " ");
_builder.append(" belonging to the anchor, or null if not available.");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append(" ");
_builder.append("*/");
_builder.newLine();
_builder.append(" ");
_builder.append("private ");
String _name_16 = to.getName();
_builder.append(_name_16, " ");
_builder.append(" get");
String _name_17 = to.getName();
_builder.append(_name_17, " ");
_builder.append("(Anchor anchor) {");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append(" ");
_builder.append("if (anchor != null) {");
_builder.newLine();
_builder.append(" ");
_builder.append(" ");
_builder.append("Object object = getBusinessObjectForPictogramElement(anchor.getParent());");
_builder.newLine();
_builder.append(" ");
_builder.append(" ");
_builder.append("if (object instanceof ");
String _name_18 = to.getName();
_builder.append(_name_18, " ");
_builder.append(") {");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append(" ");
_builder.append("return (");
String _name_19 = to.getName();
_builder.append(_name_19, " ");
_builder.append(") object;");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.append(" ");
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.append(" ");
_builder.append(" ");
_builder.append("return null;");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
}
}
_builder.newLine();
_builder.append(" ");
_builder.append("/**");
_builder.newLine();
_builder.append(" ");
_builder.append("* Creates a EReference between two EClasses.");
_builder.newLine();
_builder.append(" ");
_builder.append("*/");
_builder.newLine();
_builder.append(" ");
_builder.append("protected ");
String _name_20 = this.e1.getName(metaClass);
_builder.append(_name_20, " ");
_builder.append(" create");
String _name_21 = this.e1.getName(metaClass);
_builder.append(_name_21, " ");
_builder.append("(");
String _name_22 = from.getName();
_builder.append(_name_22, " ");
_builder.append(" source, ");
String _name_23 = to.getName();
_builder.append(_name_23, " ");
_builder.append(" target) {");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("// TODO: Domain Object");
_builder.newLine();
_builder.append(" ");
String _name_24 = this.e1.getName(metaClass);
_builder.append(_name_24, " ");
_builder.append(" domainObject = ");
String _eFactoryInterfaceName = this.naming.getEFactoryInterfaceName(metaClass);
String _shortName_3 = this.shortName(_eFactoryInterfaceName);
_builder.append(_shortName_3, " ");
_builder.append(".eINSTANCE.create");
String _name_25 = this.e1.getName(metaClass);
_builder.append(_name_25, " ");
_builder.append("();");
_builder.newLineIfNotEmpty();
{
EClass _type = metaClass.getType();
EList<EAttribute> _eAttributes = _type.getEAttributes();
final Function1<EAttribute,Boolean> _function = new Function1<EAttribute,Boolean>() {
public Boolean apply(final EAttribute att) {
String _name = att.getName();
boolean _operator_equals = ObjectExtensions.operator_equals(_name, "name");
return ((Boolean)_operator_equals);
}
};
boolean _exists = IterableExtensions.<EAttribute>exists(_eAttributes, _function);
if (_exists) {
_builder.append(" ");
_builder.append("domainObject.setName(\"new ");
String _visibleName_2 = GeneratorUtil.visibleName(metaClass);
_builder.append(_visibleName_2, " ");
_builder.append("\");");
_builder.newLineIfNotEmpty();
}
}
_builder.append(" ");
_builder.append("domainObject.set");
EReference _from_1 = connection.getFrom();
String _name_26 = _from_1.getName();
String _firstUpper = StringExtensions.toFirstUpper(_name_26);
_builder.append(_firstUpper, " ");
_builder.append("(source);");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("domainObject.set");
EReference _to_1 = connection.getTo();
String _name_27 = _to_1.getName();
String _firstUpper_1 = StringExtensions.toFirstUpper(_name_27);
_builder.append(_firstUpper_1, " ");
_builder.append("(target);");
_builder.newLineIfNotEmpty();
_builder.append("// getDiagram().eResource().getContents().add(domainObject);");
_builder.newLine();
_builder.newLine();
_builder.append(" ");
_builder.append("try {");
_builder.newLine();
_builder.append(" ");
_builder.append("SampleUtil.saveToModelFile(domainObject, getDiagram(), \"");
EClass _type_1 = metaClass.getType();
String _fileExtension = this.genModelHelper.getFileExtension(_type_1);
_builder.append(_fileExtension, " ");
_builder.append("\");");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("} catch (CoreException e) {");
_builder.newLine();
_builder.append(" ");
_builder.append("// TODO Auto-generated catch block");
_builder.newLine();
_builder.append(" ");
_builder.append("e.printStackTrace();");
_builder.newLine();
_builder.append(" ");
_builder.append("} catch (IOException e) {");
_builder.newLine();
_builder.append(" ");
_builder.append("// TODO Auto-generated catch block");
_builder.newLine();
_builder.append(" ");
_builder.append("e.printStackTrace();");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.append(" ");
_builder.newLine();
_builder.append(" ");
_builder.append("return domainObject;");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.append(" ");
_builder.newLine();
{
boolean _operator_and = false;
String _icon = metaClass.getIcon();
boolean _operator_notEquals_1 = ObjectExtensions.operator_notEquals(_icon, null);
if (!_operator_notEquals_1) {
_operator_and = false;
} else {
String _icon_1 = metaClass.getIcon();
boolean _equalsIgnoreCase = _icon_1.equalsIgnoreCase("");
boolean _operator_not = BooleanExtensions.operator_not(_equalsIgnoreCase);
_operator_and = BooleanExtensions.operator_and(_operator_notEquals_1, _operator_not);
}
if (_operator_and) {
_builder.append(" ");
_builder.append("@Override");
_builder.newLine();
_builder.append(" ");
_builder.append("public String getCreateImageId() {");
_builder.newLine();
_builder.append(" ");
_builder.append(" ");
_builder.append("return ");
Diagram _diagram_1 = metaClass.getDiagram();
String _imageProviderClassName = this.naming.getImageProviderClassName(_diagram_1);
String _shortName_4 = this.shortName(_imageProviderClassName);
_builder.append(_shortName_4, " ");
_builder.append(".");
String _icon_2 = metaClass.getIcon();
String _imageIdentifier = this.naming.getImageIdentifier(diagram, _icon_2);
_builder.append(_imageIdentifier, " ");
_builder.append(";");
_builder.newLineIfNotEmpty();
_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;
}
}