package org.eclipselabs.spray.generator.graphiti.templates;
import com.google.inject.Inject;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.xtext.xbase.lib.ObjectExtensions;
import org.eclipse.xtext.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.MetaClass;
import org.eclipselabs.spray.mm.spray.MetaReference;
import org.eclipselabs.spray.mm.spray.extensions.SprayExtensions;
@SuppressWarnings("all")
public class DeleteReferenceFeature extends FileGenerator {
@Inject
private NamingExtensions naming;
@Inject
private SprayExtensions e1;
public StringConcatenation generateBaseFile(final EObject modelElement) {
JavaGenFile _javaGenFile = this.getJavaGenFile();
String _baseClassName = _javaGenFile.getBaseClassName();
StringConcatenation _mainFile = this.mainFile(((MetaReference) modelElement), _baseClassName);
return _mainFile;
}
public StringConcatenation generateExtensionFile(final EObject modelElement) {
JavaGenFile _javaGenFile = this.getJavaGenFile();
String _className = _javaGenFile.getClassName();
StringConcatenation _mainExtensionPointFile = this.mainExtensionPointFile(((MetaReference) modelElement), _className);
return _mainExtensionPointFile;
}
public StringConcatenation mainExtensionPointFile(final MetaReference metaReference, final String className) {
StringConcatenation _builder = new StringConcatenation();
StringConcatenation _extensionHeader = this.extensionHeader(this);
_builder.append(_extensionHeader, "");
_builder.newLineIfNotEmpty();
_builder.append("package ");
String _feature_package = GeneratorUtil.feature_package();
_builder.append(_feature_package, "");
_builder.append(";");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("import org.eclipse.graphiti.features.IFeatureProvider;");
_builder.newLine();
_builder.newLine();
_builder.append("public class ");
_builder.append(className, "");
_builder.append(" extends ");
_builder.append(className, "");
_builder.append("Base {");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("public ");
_builder.append(className, " ");
_builder.append("(IFeatureProvider fp) {");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("super(fp);");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("}");
_builder.newLine();
return _builder;
}
public StringConcatenation mainFile(final MetaReference reference, final String className) {
StringConcatenation _builder = new StringConcatenation();
EReference _reference = reference.getReference();
final EReference target = _reference;
_builder.append(" ");
_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 org.eclipse.emf.ecore.EObject;");
_builder.newLine();
_builder.append("import org.eclipse.emf.ecore.util.EcoreUtil;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.features.IFeatureProvider;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.features.IRemoveFeature;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.features.context.IDeleteContext;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.features.context.IRemoveContext;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.features.context.impl.RemoveContext;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.mm.pictograms.AnchorContainer;");
_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.services.Graphiti;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.ui.features.DefaultDeleteFeature;");
_builder.newLine();
_builder.append("// MARKER_IMPORT");
_builder.newLine();
_builder.newLine();
_builder.append("public class ");
_builder.append(className, "");
_builder.append(" extends DefaultDeleteFeature {");
_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("// TODO Auto-generated constructor stub");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.append(" ");
_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.IDeleteFeature#delete(org.eclipse.graphiti.");
_builder.newLine();
_builder.append(" ");
_builder.append("* features.context.IDeleteContext)");
_builder.newLine();
_builder.append(" ");
_builder.append("*/");
_builder.newLine();
_builder.append(" ");
_builder.append("@Override");
_builder.newLine();
_builder.append(" ");
_builder.append("public void delete(IDeleteContext context) {");
_builder.newLine();
_builder.append(" ");
_builder.append("PictogramElement pe = context.getPictogramElement();");
_builder.newLine();
_builder.append(" ");
_builder.append("String reference = Graphiti.getPeService().getPropertyValue(pe, \"REFERENCE\");");
_builder.newLine();
_builder.append(" ");
_builder.append("String element = Graphiti.getPeService().getPropertyValue(pe, \"TARGETOBJECT\");");
_builder.newLine();
_builder.newLine();
_builder.append(" ");
_builder.append("Object[] businessObjectsForPictogramElement = getAllBusinessObjectsForPictogramElement(pe);");
_builder.newLine();
_builder.append(" ");
_builder.append("if (businessObjectsForPictogramElement != null && businessObjectsForPictogramElement.length > 0) {");
_builder.newLine();
_builder.append(" ");
_builder.append("if (!getUserDecision()) {");
_builder.newLine();
_builder.append(" ");
_builder.append("return;");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append(" ");
_builder.append("preDelete(context);");
_builder.newLine();
_builder.newLine();
_builder.append(" ");
_builder.append("// TRY");
_builder.newLine();
_builder.append(" ");
_builder.append("if( pe instanceof Connection) {");
_builder.newLine();
_builder.append(" ");
_builder.append("Connection line = (Connection)pe;");
_builder.newLine();
_builder.append(" ");
_builder.append("AnchorContainer parent = line.getStart().getParent();");
_builder.newLine();
_builder.append(" ");
_builder.append("Object start = getBusinessObjectForPictogramElement(parent);");
_builder.newLine();
_builder.append(" ");
_builder.append("AnchorContainer child = line.getEnd().getParent();");
_builder.newLine();
_builder.append(" ");
_builder.append("Object end = getBusinessObjectForPictogramElement(child);");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.append(" ");
_builder.append("//END TRY");
_builder.newLine();
_builder.newLine();
_builder.append(" ");
_builder.append("IRemoveContext rc = new RemoveContext(pe);");
_builder.newLine();
_builder.append(" ");
_builder.append("IFeatureProvider featureProvider = getFeatureProvider();");
_builder.newLine();
_builder.append(" ");
_builder.append("IRemoveFeature removeFeature = featureProvider.getRemoveFeature(rc);");
_builder.newLine();
_builder.append(" ");
_builder.append("if (removeFeature != null) {");
_builder.newLine();
_builder.append(" ");
_builder.append("removeFeature.remove(rc);");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append(" ");
_builder.append("deleteReferences(businessObjectsForPictogramElement, reference, element);");
_builder.newLine();
_builder.newLine();
_builder.append(" ");
_builder.append("postDelete(context);");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.append(" ");
_builder.append("/**");
_builder.newLine();
_builder.append(" ");
_builder.append("* Delete business objects.");
_builder.newLine();
_builder.append(" ");
_builder.append("* ");
_builder.newLine();
_builder.append(" ");
_builder.append("* @param businessObjects");
_builder.newLine();
_builder.append(" ");
_builder.append("* the business objects");
_builder.newLine();
_builder.append(" ");
_builder.append("*/");
_builder.newLine();
_builder.append(" ");
_builder.append("protected void deleteReferences(Object[] businessObjects, String reference, String element) {");
_builder.newLine();
_builder.append(" ");
_builder.append("if (businessObjects != null) {");
_builder.newLine();
_builder.append(" ");
_builder.append("for (Object bo : businessObjects) {");
_builder.newLine();
_builder.append(" ");
_builder.append("deleteReference(bo, reference, element);");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append(" ");
_builder.append("/**");
_builder.newLine();
_builder.append(" ");
_builder.append("* Delete business object.");
_builder.newLine();
_builder.append(" ");
_builder.append("* ");
_builder.newLine();
_builder.append(" ");
_builder.append("* @param bo");
_builder.newLine();
_builder.append(" ");
_builder.append("* the bo");
_builder.newLine();
_builder.append(" ");
_builder.append("*/");
_builder.newLine();
_builder.append(" ");
_builder.append("protected void deleteReference(Object bo, String reference, String element) {");
_builder.newLine();
_builder.append(" ");
_builder.append("if (bo instanceof EObject) {");
_builder.newLine();
_builder.append(" ");
_builder.append("if( reference == null){");
_builder.newLine();
_builder.append(" ");
_builder.append("EcoreUtil.delete((EObject) bo, true);");
_builder.newLine();
_builder.append(" ");
_builder.append("} else {");
_builder.newLine();
_builder.append(" ");
_builder.append("if( bo instanceof ");
MetaClass _metaClass = reference.getMetaClass();
String _javaInterfaceName = this.naming.getJavaInterfaceName(_metaClass);
String _shortName = this.shortName(_javaInterfaceName);
_builder.append(_shortName, " ");
_builder.append(" ){");
_builder.newLineIfNotEmpty();
_builder.append(" ");
MetaClass _metaClass_1 = reference.getMetaClass();
String _name = this.e1.getName(_metaClass_1);
_builder.append(_name, " ");
_builder.append(" object = (");
MetaClass _metaClass_2 = reference.getMetaClass();
String _name_1 = this.e1.getName(_metaClass_2);
_builder.append(_name_1, " ");
_builder.append(" ) bo;");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.newLine();
{
int _upperBound = target.getUpperBound();
boolean _operator_notEquals = ObjectExtensions.operator_notEquals(((Integer)_upperBound), ((Integer)1));
if (_operator_notEquals) {
_builder.append(" ");
EClass _eReferenceType = target.getEReferenceType();
String _javaInterfaceName_1 = this.naming.getJavaInterfaceName(_eReferenceType);
String _shortName_1 = this.shortName(_javaInterfaceName_1);
_builder.append(_shortName_1, " ");
_builder.append(" toBeRemoved = null;");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("for (");
EClass _eReferenceType_1 = target.getEReferenceType();
String _name_2 = _eReferenceType_1.getName();
_builder.append(_name_2, " ");
_builder.append(" rule : object.get");
String _name_3 = target.getName();
String _firstUpper = StringExtensions.toFirstUpper(_name_3);
_builder.append(_firstUpper, " ");
_builder.append("()) {");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append(" ");
_builder.append("if( rule.getName().equals(element)){");
_builder.newLine();
_builder.append(" ");
_builder.append(" ");
_builder.append("toBeRemoved = rule;");
_builder.newLine();
_builder.append(" ");
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.append(" ");
_builder.append("} ");
_builder.newLine();
_builder.append(" ");
_builder.append("if( toBeRemoved != null ){");
_builder.newLine();
_builder.append(" ");
_builder.append(" ");
_builder.append("object.get");
String _name_4 = target.getName();
String _firstUpper_1 = StringExtensions.toFirstUpper(_name_4);
_builder.append(_firstUpper_1, " ");
_builder.append("().remove(toBeRemoved);");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append(" ");
_builder.append("// TODO Must remove toBeRemoved if it is a containment reference !");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
} else {
_builder.append(" ");
_builder.append("object.set");
String _name_5 = this.e1.getName(reference);
String _firstUpper_2 = StringExtensions.toFirstUpper(_name_5);
_builder.append(_firstUpper_2, " ");
_builder.append("(null);");
_builder.newLineIfNotEmpty();
}
}
_builder.append(" ");
_builder.append("} else {");
_builder.newLine();
_builder.append(" ");
_builder.append("System.out.println(\"DELETE OBJECT \" + bo);");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("}");
_builder.newLine();
return _builder;
}
}