package org.eclipselabs.spray.generator.graphiti.templates;
import com.google.inject.Inject;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.emf.ecore.EClass;
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.Conversions;
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.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.Behaviour;
import org.eclipselabs.spray.mm.spray.BehaviourType;
import org.eclipselabs.spray.mm.spray.Connection;
import org.eclipselabs.spray.mm.spray.Container;
import org.eclipselabs.spray.mm.spray.Diagram;
import org.eclipselabs.spray.mm.spray.MetaClass;
import org.eclipselabs.spray.mm.spray.MetaReference;
import org.eclipselabs.spray.mm.spray.Shape;
import org.eclipselabs.spray.mm.spray.SprayElement;
import org.eclipselabs.spray.mm.spray.extensions.SprayExtensions;
import org.eclipselabs.spray.xtext.util.GenModelHelper;
@SuppressWarnings("all")
public class FeatureProvider extends FileGenerator {
@Inject
private SprayExtensions e1;
@Inject
private NamingExtensions e2;
@Inject
private GenModelHelper e3;
public StringConcatenation generateBaseFile(final EObject modelElement) {
JavaGenFile _javaGenFile = this.getJavaGenFile();
String _baseClassName = _javaGenFile.getBaseClassName();
StringConcatenation _mainFile = this.mainFile(((Diagram) modelElement), _baseClassName);
return _mainFile;
}
public StringConcatenation generateExtensionFile(final EObject modelElement) {
JavaGenFile _javaGenFile = this.getJavaGenFile();
String _className = _javaGenFile.getClassName();
StringConcatenation _mainExtensionPointFile = this.mainExtensionPointFile(((Diagram) modelElement), _className);
return _mainExtensionPointFile;
}
public StringConcatenation mainExtensionPointFile(final Diagram diagram, final String className) {
StringConcatenation _builder = new StringConcatenation();
StringConcatenation _extensionHeader = this.extensionHeader(this);
_builder.append(_extensionHeader, "");
_builder.newLineIfNotEmpty();
_builder.append("package ");
String _diagram_package = GeneratorUtil.diagram_package();
_builder.append(_diagram_package, "");
_builder.append(";");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("import org.eclipse.graphiti.dt.IDiagramTypeProvider;");
_builder.newLine();
_builder.newLine();
_builder.append("public class ");
_builder.append(className, "");
_builder.append(" extends ");
_builder.append(className, "");
_builder.append("Base {");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append(" ");
_builder.append("public ");
_builder.append(className, " ");
_builder.append("(IDiagramTypeProvider dtp) {");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("super(dtp);");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("}");
_builder.newLine();
return _builder;
}
public StringConcatenation mainFile(final Diagram diagram, final String className) {
StringConcatenation _builder = new StringConcatenation();
StringConcatenation _header = this.header(this);
_builder.append(_header, "");
_builder.newLineIfNotEmpty();
_builder.append("package ");
String _diagram_package = GeneratorUtil.diagram_package();
_builder.append(_diagram_package, "");
_builder.append(";");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("import org.eclipse.emf.ecore.EObject;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.dt.IDiagramTypeProvider;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.features.IAddFeature;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.features.ICreateConnectionFeature;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.features.ICreateFeature;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.features.ILayoutFeature;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.features.IMoveShapeFeature;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.features.IUpdateFeature;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.features.IDeleteFeature;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.features.context.IAddContext;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.features.context.ICustomContext;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.features.context.IDeleteContext;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.features.context.ILayoutContext;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.features.context.IMoveShapeContext;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.features.context.IUpdateContext;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.features.custom.ICustomFeature;");
_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.ui.features.DefaultFeatureProvider;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.services.Graphiti;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.ui.features.DefaultDeleteFeature;");
_builder.newLine();
_builder.append("import ");
String _util_package = GeneratorUtil.util_package();
_builder.append(_util_package, "");
_builder.append(".OwnerPropertyDeleteFeature;");
_builder.newLineIfNotEmpty();
{
MetaClass[] _metaClasses = diagram.getMetaClasses();
boolean _isEmpty = ((List<MetaClass>)Conversions.doWrapArray(_metaClasses)).isEmpty();
boolean _operator_not = BooleanExtensions.operator_not(_isEmpty);
if (_operator_not) {
}
}
_builder.append("// MARKER_IMPORT");
_builder.newLine();
_builder.newLine();
_builder.append("public class ");
_builder.append(className, "");
_builder.append(" extends DefaultFeatureProvider {");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("public ");
_builder.append(className, " ");
_builder.append("(IDiagramTypeProvider dtp) {");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("super(dtp);");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append(" ");
_builder.append("@Override");
_builder.newLine();
_builder.append(" ");
_builder.append("public IAddFeature getAddFeature(IAddContext context) {");
_builder.newLine();
_builder.append(" ");
_builder.append("// is object for add request a EClass or EReference?");
_builder.newLine();
_builder.append(" ");
_builder.append("EObject object = (EObject) context.getNewObject() ;");
_builder.newLine();
_builder.append(" ");
_builder.append("String reference = (String)context.getProperty(\"REFERENCE\");");
_builder.newLine();
_builder.append(" ");
_builder.newLine();
{
MetaClass[] _metaClasses_1 = diagram.getMetaClasses();
for(final MetaClass cls : _metaClasses_1) {
_builder.append(" ");
_builder.append("if ( object.eClass() == ");
EClass _type = cls.getType();
String _ePackageClassName = this.e3.getEPackageClassName(_type);
String _shortName = this.shortName(_ePackageClassName);
_builder.append(_shortName, " ");
_builder.append(".Literals.");
EClass _type_1 = cls.getType();
String _literalConstant = this.e3.getLiteralConstant(_type_1);
_builder.append(_literalConstant, " ");
_builder.append(" ) {");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append(" ");
_builder.append("if ( reference == null ){");
_builder.newLine();
_builder.append(" ");
_builder.append(" ");
_builder.append("return new ");
String _addFeatureClassName = this.e2.getAddFeatureClassName(cls);
String _shortName_1 = this.shortName(_addFeatureClassName);
_builder.append(_shortName_1, " ");
_builder.append("(this);");
_builder.newLineIfNotEmpty();
{
MetaReference[] _references = cls.getReferences();
final Function1<MetaReference,Boolean> _function = new Function1<MetaReference,Boolean>() {
public Boolean apply(final MetaReference ref) {
Connection _representedBy = ref.getRepresentedBy();
boolean _operator_notEquals = ObjectExtensions.operator_notEquals(_representedBy, null);
return ((Boolean)_operator_notEquals);
}
};
Iterable<MetaReference> _filter = IterableExtensions.<MetaReference>filter(((Iterable<MetaReference>)Conversions.doWrapArray(_references)), _function);
for(final MetaReference reference : _filter) {
_builder.append(" ");
_builder.append(" ");
_builder.append("} else if( reference.equals(\"");
String _name = this.e1.getName(reference);
_builder.append(_name, " ");
_builder.append("\")){");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append(" ");
_builder.append(" ");
_builder.append("return new ");
String _addReferenceAsConnectionFeatureClassName = this.e2.getAddReferenceAsConnectionFeatureClassName(reference);
String _shortName_2 = this.shortName(_addReferenceAsConnectionFeatureClassName);
_builder.append(_shortName_2, " ");
_builder.append("(this);");
_builder.newLineIfNotEmpty();
}
}
_builder.append(" ");
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.append(" ");
_builder.append("} ");
_builder.newLine();
{
Shape _representedBy = cls.getRepresentedBy();
if ((_representedBy instanceof Container)) {
_builder.append(" ");
_builder.append(" ");
Shape _representedBy_1 = cls.getRepresentedBy();
final Container container = ((Container) _representedBy_1);
_builder.newLineIfNotEmpty();
{
SprayElement[] _parts = container.getParts();
Iterable<MetaReference> _filter_1 = IterableExtensions.<MetaReference>filter(((Iterable<? extends Object>)Conversions.doWrapArray(_parts)), org.eclipselabs.spray.mm.spray.MetaReference.class);
for(final MetaReference reference_1 : _filter_1) {
_builder.append(" ");
_builder.append(" ");
_builder.append("if( object instanceof ");
EReference _reference = reference_1.getReference();
EClass _eReferenceType = _reference.getEReferenceType();
String _javaInterfaceName = this.e3.getJavaInterfaceName(_eReferenceType);
String _shortName_3 = this.shortName(_javaInterfaceName);
_builder.append(_shortName_3, " ");
_builder.append(" ){");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append(" ");
_builder.append(" ");
_builder.append("return new ");
String _addReferenceAsListFeatureClassName = this.e2.getAddReferenceAsListFeatureClassName(reference_1);
String _shortName_4 = this.shortName(_addReferenceAsListFeatureClassName);
_builder.append(_shortName_4, " ");
_builder.append("(this);");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append(" ");
_builder.append("}");
_builder.newLine();
}
}
}
}
}
}
_builder.append(" ");
_builder.append("return super.getAddFeature(context);");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.append(" ");
_builder.newLine();
_builder.append(" ");
_builder.append("@Override");
_builder.newLine();
_builder.append(" ");
_builder.append("public ICreateFeature[] getCreateFeatures() {");
_builder.newLine();
_builder.append(" ");
_builder.append("return new ICreateFeature[] { ");
_builder.newLine();
{
MetaClass[] _metaClasses_2 = diagram.getMetaClasses();
final Function1<MetaClass,Boolean> _function_1 = new Function1<MetaClass,Boolean>() {
public Boolean apply(final MetaClass e) {
Shape _representedBy = e.getRepresentedBy();
boolean _operator_not = BooleanExtensions.operator_not((_representedBy instanceof Connection));
return ((Boolean)_operator_not);
}
};
Iterable<MetaClass> _filter_2 = IterableExtensions.<MetaClass>filter(((Iterable<MetaClass>)Conversions.doWrapArray(_metaClasses_2)), _function_1);
boolean hasAnyElements = false;
for(final MetaClass cls_1 : _filter_2) {
if (!hasAnyElements) {
hasAnyElements = true;
} else {
_builder.appendImmediate(",", " ");
}
_builder.append(" ");
_builder.append("new ");
String _createFeatureClassName = this.e2.getCreateFeatureClassName(cls_1);
String _shortName_5 = this.shortName(_createFeatureClassName);
_builder.append(_shortName_5, " ");
_builder.append("(this) ");
_builder.newLineIfNotEmpty();
{
Shape _representedBy_2 = cls_1.getRepresentedBy();
if ((_representedBy_2 instanceof Container)) {
_builder.append(" ");
Shape _representedBy_3 = cls_1.getRepresentedBy();
final Container container_1 = ((Container) _representedBy_3);
_builder.newLineIfNotEmpty();
{
SprayElement[] _parts_1 = container_1.getParts();
Iterable<MetaReference> _filter_3 = IterableExtensions.<MetaReference>filter(((Iterable<? extends Object>)Conversions.doWrapArray(_parts_1)), org.eclipselabs.spray.mm.spray.MetaReference.class);
for(final MetaReference reference_2 : _filter_3) {
_builder.append(" ");
EReference _reference_1 = reference_2.getReference();
final EReference target = _reference_1;
_builder.append(" ");
_builder.newLineIfNotEmpty();
{
EClass _eReferenceType_1 = target.getEReferenceType();
boolean _isAbstract = _eReferenceType_1.isAbstract();
boolean _operator_not_1 = BooleanExtensions.operator_not(_isAbstract);
if (_operator_not_1) {
_builder.append(" ");
_builder.append(", new ");
String _createFeatureClassName_1 = this.e2.getCreateFeatureClassName(reference_2);
String _shortName_6 = this.shortName(_createFeatureClassName_1);
_builder.append(_shortName_6, " ");
_builder.append("(this)");
_builder.newLineIfNotEmpty();
}
}
{
EClass _eReferenceType_2 = target.getEReferenceType();
List<EClass> _subclasses = MetaModel.getSubclasses(_eReferenceType_2);
for(final EClass subclass : _subclasses) {
{
boolean _isAbstract_1 = subclass.isAbstract();
boolean _operator_not_2 = BooleanExtensions.operator_not(_isAbstract_1);
if (_operator_not_2) {
_builder.append(" ");
_builder.append(", new ");
String _createReferenceAsListFeatureClassName = this.e2.getCreateReferenceAsListFeatureClassName(reference_2, subclass);
String _shortName_7 = this.shortName(_createReferenceAsListFeatureClassName);
_builder.append(_shortName_7, " ");
_builder.append("(this)");
_builder.newLineIfNotEmpty();
}
}
}
}
}
}
}
}
}
}
_builder.append(" ");
_builder.append("};");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append(" ");
_builder.append("@Override");
_builder.newLine();
_builder.append(" ");
_builder.append("public IUpdateFeature getUpdateFeature(IUpdateContext context) {");
_builder.newLine();
_builder.append(" ");
_builder.append("PictogramElement pictogramElement = context.getPictogramElement();");
_builder.newLine();
_builder.append(" ");
_builder.append("// if (pictogramElement instanceof ContainerShape) {");
_builder.newLine();
_builder.append(" ");
_builder.append("EObject bo = (EObject) getBusinessObjectForPictogramElement(pictogramElement);");
_builder.newLine();
_builder.append(" ");
_builder.append("if (bo == null) return null;");
_builder.newLine();
{
MetaClass[] _metaClasses_3 = diagram.getMetaClasses();
for(final MetaClass cls_2 : _metaClasses_3) {
{
Shape _representedBy_4 = cls_2.getRepresentedBy();
boolean _operator_not_3 = BooleanExtensions.operator_not((_representedBy_4 instanceof Connection));
if (_operator_not_3) {
_builder.append(" ");
_builder.append("if ( bo.eClass() == ");
EClass _type_2 = cls_2.getType();
String _ePackageClassName_1 = this.e3.getEPackageClassName(_type_2);
String _shortName_8 = this.shortName(_ePackageClassName_1);
_builder.append(_shortName_8, " ");
_builder.append(".Literals.");
EClass _type_3 = cls_2.getType();
String _literalConstant_1 = this.e3.getLiteralConstant(_type_3);
_builder.append(_literalConstant_1, " ");
_builder.append(" ) { // 11");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append(" ");
_builder.append("return new ");
String _updateFeatureClassName = this.e2.getUpdateFeatureClassName(cls_2);
String _shortName_9 = this.shortName(_updateFeatureClassName);
_builder.append(_shortName_9, " ");
_builder.append("(this); ");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
}
}
{
Shape _representedBy_5 = cls_2.getRepresentedBy();
if ((_representedBy_5 instanceof Container)) {
_builder.append(" ");
Shape _representedBy_6 = cls_2.getRepresentedBy();
final Container container_2 = ((Container) _representedBy_6);
_builder.newLineIfNotEmpty();
{
SprayElement[] _parts_2 = container_2.getParts();
Iterable<MetaReference> _filter_4 = IterableExtensions.<MetaReference>filter(((Iterable<? extends Object>)Conversions.doWrapArray(_parts_2)), org.eclipselabs.spray.mm.spray.MetaReference.class);
for(final MetaReference reference_3 : _filter_4) {
_builder.append(" ");
EReference _reference_2 = reference_3.getReference();
EClass _eReferenceType_3 = _reference_2.getEReferenceType();
EClass eClass = _eReferenceType_3;
_builder.append(" ");
_builder.newLineIfNotEmpty();
{
boolean _isAbstract_2 = eClass.isAbstract();
if (_isAbstract_2) {
_builder.append(" ");
_builder.append("if (bo instanceof ");
String _javaInterfaceName_1 = this.e3.getJavaInterfaceName(eClass);
String _shortName_10 = this.shortName(_javaInterfaceName_1);
_builder.append(_shortName_10, " ");
_builder.append(") { // 22");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append(" ");
_builder.append("return new ");
String _updateReferenceAsListFeatureClassName = this.e2.getUpdateReferenceAsListFeatureClassName(reference_3);
String _shortName_11 = this.shortName(_updateReferenceAsListFeatureClassName);
_builder.append(_shortName_11, " ");
_builder.append("(this); ");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
}
}
}
}
} else {
Shape _representedBy_7 = cls_2.getRepresentedBy();
if ((_representedBy_7 instanceof Connection)) {
_builder.append(" ");
Shape _representedBy_8 = cls_2.getRepresentedBy();
Connection connection = ((Connection) _representedBy_8);
_builder.newLineIfNotEmpty();
{
EClass _type_4 = cls_2.getType();
boolean _isAbstract_3 = _type_4.isAbstract();
boolean _operator_not_4 = BooleanExtensions.operator_not(_isAbstract_3);
if (_operator_not_4) {
_builder.append(" ");
_builder.append(" ");
_builder.append("if (bo instanceof ");
String _javaInterfaceName_2 = this.e2.getJavaInterfaceName(cls_2);
String _shortName_12 = this.shortName(_javaInterfaceName_2);
_builder.append(_shortName_12, " ");
_builder.append(") { // 33");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append(" ");
_builder.append(" ");
_builder.append("return new ");
String _updateFeatureClassName_1 = this.e2.getUpdateFeatureClassName(cls_2);
String _shortName_13 = this.shortName(_updateFeatureClassName_1);
_builder.append(_shortName_13, " ");
_builder.append("(this); ");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append(" ");
_builder.append("}");
_builder.newLine();
}
}
}
}
}
}
}
_builder.append("// }");
_builder.newLine();
_builder.append(" ");
_builder.append("return super.getUpdateFeature(context);");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append(" ");
_builder.append("@Override");
_builder.newLine();
_builder.append(" ");
_builder.append("public ILayoutFeature getLayoutFeature(ILayoutContext context) {");
_builder.newLine();
_builder.append(" ");
_builder.append("PictogramElement pictogramElement = context.getPictogramElement();");
_builder.newLine();
_builder.append(" ");
_builder.append("EObject bo = (EObject) getBusinessObjectForPictogramElement(pictogramElement);");
_builder.newLine();
_builder.append(" ");
_builder.append("if (bo == null) return null;");
_builder.newLine();
{
MetaClass[] _metaClasses_4 = diagram.getMetaClasses();
final Function1<MetaClass,Boolean> _function_2 = new Function1<MetaClass,Boolean>() {
public Boolean apply(final MetaClass m) {
Shape _representedBy = m.getRepresentedBy();
boolean _operator_not = BooleanExtensions.operator_not((_representedBy instanceof Connection));
return ((Boolean)_operator_not);
}
};
Iterable<MetaClass> _filter_5 = IterableExtensions.<MetaClass>filter(((Iterable<MetaClass>)Conversions.doWrapArray(_metaClasses_4)), _function_2);
for(final MetaClass cls_3 : _filter_5) {
_builder.append(" ");
_builder.append("if ( bo.eClass()==");
EClass _type_5 = cls_3.getType();
String _ePackageClassName_2 = this.e3.getEPackageClassName(_type_5);
String _shortName_14 = this.shortName(_ePackageClassName_2);
_builder.append(_shortName_14, " ");
_builder.append(".Literals.");
EClass _type_6 = cls_3.getType();
String _literalConstant_2 = this.e3.getLiteralConstant(_type_6);
_builder.append(_literalConstant_2, " ");
_builder.append(" ) {");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append(" ");
_builder.append("return new ");
String _layoutFeatureClassName = this.e2.getLayoutFeatureClassName(cls_3);
String _shortName_15 = this.shortName(_layoutFeatureClassName);
_builder.append(_shortName_15, " ");
_builder.append("(this);");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
}
}
_builder.append(" ");
_builder.append("return super.getLayoutFeature(context);");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append(" ");
_builder.append("@Override");
_builder.newLine();
_builder.append(" ");
_builder.append("public ICreateConnectionFeature[] getCreateConnectionFeatures() {");
_builder.newLine();
_builder.append(" ");
_builder.append("return new ICreateConnectionFeature[] { ");
_builder.newLine();
{
MetaClass[] _metaClasses_5 = diagram.getMetaClasses();
final Function1<MetaClass,Boolean> _function_3 = new Function1<MetaClass,Boolean>() {
public Boolean apply(final MetaClass e) {
Shape _representedBy = e.getRepresentedBy();
return ((Boolean)(_representedBy instanceof Connection));
}
};
Iterable<MetaClass> _filter_6 = IterableExtensions.<MetaClass>filter(((Iterable<MetaClass>)Conversions.doWrapArray(_metaClasses_5)), _function_3);
boolean hasAnyElements_1 = false;
for(final MetaClass cls_4 : _filter_6) {
if (!hasAnyElements_1) {
hasAnyElements_1 = true;
} else {
_builder.appendImmediate(",", " ");
}
_builder.append(" ");
_builder.append("new ");
String _createFeatureClassName_2 = this.e2.getCreateFeatureClassName(cls_4);
String _shortName_16 = this.shortName(_createFeatureClassName_2);
_builder.append(_shortName_16, " ");
_builder.append("(this) ");
_builder.newLineIfNotEmpty();
}
}
{
MetaClass[] _metaClasses_6 = diagram.getMetaClasses();
final Function1<MetaClass,Boolean> _function_4 = new Function1<MetaClass,Boolean>() {
public Boolean apply(final MetaClass e) {
Shape _representedBy = e.getRepresentedBy();
return ((Boolean)(_representedBy instanceof Connection));
}
};
Iterable<MetaClass> _filter_7 = IterableExtensions.<MetaClass>filter(((Iterable<MetaClass>)Conversions.doWrapArray(_metaClasses_6)), _function_4);
boolean _isEmpty_1 = IterableExtensions.isEmpty(_filter_7);
boolean _operator_not_5 = BooleanExtensions.operator_not(_isEmpty_1);
if (_operator_not_5) {
_builder.append(" ");
_builder.append(",");
_builder.newLine();
}
}
{
MetaClass[] _metaClasses_7 = diagram.getMetaClasses();
for(final MetaClass metaClass : _metaClasses_7) {
{
MetaReference[] _references_1 = metaClass.getReferences();
final Function1<MetaReference,Boolean> _function_5 = new Function1<MetaReference,Boolean>() {
public Boolean apply(final MetaReference ref) {
Connection _representedBy = ref.getRepresentedBy();
boolean _operator_notEquals = ObjectExtensions.operator_notEquals(_representedBy, null);
return ((Boolean)_operator_notEquals);
}
};
Iterable<MetaReference> _filter_8 = IterableExtensions.<MetaReference>filter(((Iterable<MetaReference>)Conversions.doWrapArray(_references_1)), _function_5);
boolean hasAnyElements_2 = false;
for(final MetaReference reference_4 : _filter_8) {
if (!hasAnyElements_2) {
hasAnyElements_2 = true;
} else {
_builder.appendImmediate(",", " ");
}
_builder.append(" ");
_builder.append("new ");
String _createReferenceAsConnectionFeatureClassName = this.e2.getCreateReferenceAsConnectionFeatureClassName(reference_4);
String _shortName_17 = this.shortName(_createReferenceAsConnectionFeatureClassName);
_builder.append(_shortName_17, " ");
_builder.append("(this) ");
_builder.newLineIfNotEmpty();
}
}
}
}
_builder.append(" ");
_builder.append("};");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append(" ");
_builder.append("/*");
_builder.newLine();
_builder.append(" ");
_builder.append("* (non-Javadoc)");
_builder.newLine();
_builder.append(" ");
_builder.append("* ");
_builder.newLine();
_builder.append(" ");
_builder.append("* @see");
_builder.newLine();
_builder.append(" ");
_builder.append("* org.eclipse.graphiti.features.edit.IFeatureProvider#getDeleteFeatures()");
_builder.newLine();
_builder.append(" ");
_builder.append("*/");
_builder.newLine();
_builder.append(" ");
_builder.append("@Override");
_builder.newLine();
_builder.append(" ");
_builder.append("public IDeleteFeature getDeleteFeature(IDeleteContext context) {");
_builder.newLine();
_builder.append(" ");
_builder.append("PictogramElement pictogramElement = context.getPictogramElement();");
_builder.newLine();
_builder.append(" ");
_builder.append("EObject bo = (EObject) getBusinessObjectForPictogramElement(pictogramElement);");
_builder.newLine();
_builder.append(" ");
_builder.append("if (bo == null) return null;");
_builder.newLine();
_builder.append(" ");
_builder.append("String reference = Graphiti.getPeService().getPropertyValue(pictogramElement, \"REFERENCE\");");
_builder.newLine();
_builder.newLine();
{
MetaClass[] _metaClasses_8 = diagram.getMetaClasses();
for(final MetaClass cls_5 : _metaClasses_8) {
_builder.append(" ");
_builder.append("if ( bo.eClass()==");
EClass _type_7 = cls_5.getType();
String _ePackageClassName_3 = this.e3.getEPackageClassName(_type_7);
String _shortName_18 = this.shortName(_ePackageClassName_3);
_builder.append(_shortName_18, " ");
_builder.append(".Literals.");
EClass _type_8 = cls_5.getType();
String _literalConstant_3 = this.e3.getLiteralConstant(_type_8);
_builder.append(_literalConstant_3, " ");
_builder.append(" ) {");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append(" ");
_builder.append("if( reference == null ){");
_builder.newLine();
_builder.append(" ");
_builder.append(" ");
_builder.append("return new DefaultDeleteFeature(this); ");
_builder.newLine();
{
MetaReference[] _references_2 = cls_5.getReferences();
final Function1<MetaReference,Boolean> _function_6 = new Function1<MetaReference,Boolean>() {
public Boolean apply(final MetaReference ref) {
Connection _representedBy = ref.getRepresentedBy();
boolean _operator_notEquals = ObjectExtensions.operator_notEquals(_representedBy, null);
return ((Boolean)_operator_notEquals);
}
};
Iterable<MetaReference> _filter_9 = IterableExtensions.<MetaReference>filter(((Iterable<MetaReference>)Conversions.doWrapArray(_references_2)), _function_6);
for(final MetaReference reference_5 : _filter_9) {
_builder.append(" ");
_builder.append(" ");
_builder.append("} else if( reference.equals(\"");
String _name_1 = this.e1.getName(reference_5);
_builder.append(_name_1, " ");
_builder.append("\")){");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append(" ");
_builder.append(" ");
_builder.append("return new ");
String _deleteReferenceFeatureClassName = this.e2.getDeleteReferenceFeatureClassName(reference_5);
String _shortName_19 = this.shortName(_deleteReferenceFeatureClassName);
_builder.append(_shortName_19, " ");
_builder.append("(this);");
_builder.newLineIfNotEmpty();
}
}
_builder.append(" ");
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.append(" ");
_builder.append("} ");
_builder.newLine();
{
Shape _representedBy_9 = cls_5.getRepresentedBy();
if ((_representedBy_9 instanceof Container)) {
_builder.append(" ");
_builder.append(" ");
Shape _representedBy_10 = cls_5.getRepresentedBy();
final Container container_3 = ((Container) _representedBy_10);
_builder.newLineIfNotEmpty();
{
SprayElement[] _parts_3 = container_3.getParts();
Iterable<MetaReference> _filter_10 = IterableExtensions.<MetaReference>filter(((Iterable<? extends Object>)Conversions.doWrapArray(_parts_3)), org.eclipselabs.spray.mm.spray.MetaReference.class);
for(final MetaReference reference_6 : _filter_10) {
_builder.append(" ");
_builder.append(" ");
_builder.append(" ");
EReference _reference_3 = reference_6.getReference();
final EReference target_1 = _reference_3;
_builder.append(" ");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append(" ");
_builder.append("if( bo instanceof ");
EClass _eReferenceType_4 = target_1.getEReferenceType();
String _name_2 = _eReferenceType_4.getName();
_builder.append(_name_2, " ");
_builder.append(" ){");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append(" ");
_builder.append(" ");
_builder.append("return new OwnerPropertyDeleteFeature(this);");
_builder.newLine();
_builder.append(" ");
_builder.append(" ");
_builder.append("}");
_builder.newLine();
}
}
}
}
}
}
_builder.append(" ");
_builder.newLine();
_builder.append(" ");
_builder.append("return new DefaultDeleteFeature(this); ");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append(" ");
_builder.append("/** Ensure that any shape with property CAN_MOVE set to false will not have a move feature.");
_builder.newLine();
_builder.append(" ");
_builder.append("*/");
_builder.newLine();
_builder.append(" ");
_builder.append("@Override");
_builder.newLine();
_builder.append(" ");
_builder.append("public IMoveShapeFeature getMoveShapeFeature(IMoveShapeContext context) {");
_builder.newLine();
_builder.append(" ");
_builder.append("Shape s = context.getShape();");
_builder.newLine();
_builder.append(" ");
_builder.append("String stat = Graphiti.getPeService().getPropertyValue(s, \"CAN_MOVE\");");
_builder.newLine();
_builder.append(" ");
_builder.append("if( (stat != null) && (stat.equals(\"false\") )){");
_builder.newLine();
_builder.append(" ");
_builder.append("return null;");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.append(" ");
_builder.append("return super.getMoveShapeFeature(context);");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append(" ");
_builder.append("@Override");
_builder.newLine();
_builder.append(" ");
_builder.append("public ICustomFeature[] getCustomFeatures(ICustomContext context) {");
_builder.newLine();
_builder.append(" ");
_builder.append("EObject bo = (EObject) getBusinessObjectForPictogramElement(context.getPictogramElements()[0]);");
_builder.newLine();
_builder.append(" ");
_builder.append("if (bo == null) return new ICustomFeature[0];");
_builder.newLine();
{
MetaClass[] _metaClasses_9 = diagram.getMetaClasses();
for(final MetaClass metaClass_1 : _metaClasses_9) {
{
Behaviour[] _behaviours = metaClass_1.getBehaviours();
boolean _isEmpty_2 = ((List<Behaviour>)Conversions.doWrapArray(_behaviours)).isEmpty();
boolean _operator_not_6 = BooleanExtensions.operator_not(_isEmpty_2);
if (_operator_not_6) {
_builder.append(" ");
_builder.append("if( bo.eClass()==");
EClass _type_9 = metaClass_1.getType();
String _ePackageClassName_4 = this.e3.getEPackageClassName(_type_9);
String _shortName_20 = this.shortName(_ePackageClassName_4);
_builder.append(_shortName_20, " ");
_builder.append(".Literals.");
EClass _type_10 = metaClass_1.getType();
String _literalConstant_4 = this.e3.getLiteralConstant(_type_10);
_builder.append(_literalConstant_4, " ");
_builder.append(" ){");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("return new ICustomFeature[]{ ");
_builder.newLine();
_builder.append(" ");
ArrayList<String> _arrayList = new ArrayList<String>();
final List<String> allnames2 = _arrayList;
_builder.newLineIfNotEmpty();
{
Behaviour[] _behaviours_1 = metaClass_1.getBehaviours();
final Function1<Behaviour,Boolean> _function_7 = new Function1<Behaviour,Boolean>() {
public Boolean apply(final Behaviour b) {
BehaviourType _type = b.getType();
boolean _operator_notEquals = ObjectExtensions.operator_notEquals(_type, BehaviourType.CREATE_BEHAVIOUR);
return ((Boolean)_operator_notEquals);
}
};
Iterable<Behaviour> _filter_11 = IterableExtensions.<Behaviour>filter(((Iterable<Behaviour>)Conversions.doWrapArray(_behaviours_1)), _function_7);
boolean hasAnyElements_3 = false;
for(final Behaviour behaviour : _filter_11) {
if (!hasAnyElements_3) {
hasAnyElements_3 = true;
} else {
_builder.appendImmediate(",", " ");
}
{
String _name_3 = behaviour.getName();
boolean _contains = allnames2.contains(_name_3);
boolean _operator_not_7 = BooleanExtensions.operator_not(_contains);
if (_operator_not_7) {
_builder.append(" ");
_builder.append("new ");
String _customFeatureClassName = this.e2.getCustomFeatureClassName(behaviour);
String _shortName_21 = this.shortName(_customFeatureClassName);
_builder.append(_shortName_21, " ");
_builder.append("(this) /*");
String _name_4 = behaviour.getName();
boolean _add = allnames2.add(_name_4);
_builder.append(_add, " ");
_builder.append("*/");
_builder.newLineIfNotEmpty();
}
}
}
}
_builder.append(" ");
_builder.append("};");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
}
}
}
}
_builder.append(" ");
_builder.append("return new ICustomFeature[0];");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.append("}");
_builder.newLine();
return _builder;
}
}