package org.eclipselabs.spray.generator.graphiti.templates;
import com.google.inject.Inject;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.naming.IQualifiedNameProvider;
import org.eclipse.xtext.naming.QualifiedName;
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.Container;
import org.eclipselabs.spray.mm.spray.MetaClass;
import org.eclipselabs.spray.mm.spray.SprayElement;
import org.eclipselabs.spray.mm.spray.Text;
import org.eclipselabs.spray.mm.spray.extensions.SprayExtensions;
/**
* Template for generating Graphiti Update feature for a Container representing a MetaClass
*/
@SuppressWarnings("all")
public class UpdateShapeFeature extends FileGenerator {
@Inject
private NamingExtensions naming;
@Inject
private SprayExtensions e1;
@Inject
private IQualifiedNameProvider qnProvider;
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.newLine();
_builder.append("}");
_builder.newLine();
return _builder;
}
public StringConcatenation mainFile(final Container container, final String className) {
StringConcatenation _builder = new StringConcatenation();
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 java.util.HashMap;");
_builder.newLine();
_builder.append("import java.util.Map;");
_builder.newLine();
_builder.newLine();
_builder.append("import org.eclipse.graphiti.features.IFeatureProvider;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.features.IReason;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.features.context.IUpdateContext;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.features.context.IContext;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.features.impl.AbstractUpdateFeature;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.features.impl.Reason;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.mm.algorithms.Text;");
_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 ");
String _util_package = GeneratorUtil.util_package();
_builder.append(_util_package, "");
_builder.append(".SprayContainerService;");
_builder.newLineIfNotEmpty();
_builder.append("import ");
MetaClass _represents = container.getRepresents();
String _javaInterfaceName = this.naming.getJavaInterfaceName(_represents);
_builder.append(_javaInterfaceName, "");
_builder.append(";");
_builder.newLineIfNotEmpty();
_builder.append("// MARKER_IMPORT");
_builder.newLine();
_builder.newLine();
_builder.append("public class ");
_builder.append(className, "");
_builder.append(" extends AbstractUpdateFeature {");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append(" ");
_builder.append("Map<String, String> values = 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("}");
_builder.newLine();
_builder.append(" ");
_builder.newLine();
_builder.append(" ");
_builder.append("@Override");
_builder.newLine();
_builder.append(" ");
_builder.append("public boolean canUpdate(IUpdateContext context) {");
_builder.newLine();
_builder.append(" ");
_builder.append("// return true, if linked business object is a EClass");
_builder.newLine();
_builder.append(" ");
_builder.append("Object bo = getBusinessObjectForPictogramElement(context.getPictogramElement());");
_builder.newLine();
_builder.append(" ");
_builder.append("PictogramElement pictogramElement = context.getPictogramElement();");
_builder.newLine();
_builder.append(" ");
_builder.append("return (bo instanceof ");
MetaClass _represents_1 = container.getRepresents();
String _name = this.e1.getName(_represents_1);
_builder.append(_name, " ");
_builder.append(")&& (!(pictogramElement instanceof Diagram));");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append(" ");
_builder.append("@Override");
_builder.newLine();
_builder.append(" ");
_builder.append("public IReason updateNeeded(IUpdateContext context) {");
_builder.newLine();
_builder.append(" ");
_builder.append("PictogramElement pictogramElement = context.getPictogramElement();");
_builder.newLine();
_builder.append(" ");
_builder.append("Object bo = getBusinessObjectForPictogramElement(pictogramElement);");
_builder.newLine();
_builder.append(" ");
_builder.append("if ( ! (bo instanceof ");
MetaClass _represents_2 = container.getRepresents();
String _name_1 = this.e1.getName(_represents_2);
_builder.append(_name_1, " ");
_builder.append(")) {");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("return Reason.createFalseReason(); ");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.append(" ");
MetaClass _represents_3 = container.getRepresents();
String _name_2 = this.e1.getName(_represents_3);
_builder.append(_name_2, " ");
_builder.append(" eClass = (");
MetaClass _represents_4 = container.getRepresents();
String _name_3 = this.e1.getName(_represents_4);
_builder.append(_name_3, " ");
_builder.append(") bo;");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append(" ");
_builder.append("// retrieve name from pictogram model");
_builder.newLine();
_builder.append(" ");
_builder.append("if (pictogramElement instanceof ContainerShape) {");
_builder.newLine();
_builder.append(" ");
_builder.append("ContainerShape cs = (ContainerShape) pictogramElement;");
_builder.newLine();
_builder.append(" ");
_builder.append("ContainerShape textBox = SprayContainerService.findTextShape(cs);");
_builder.newLine();
_builder.append(" ");
_builder.append("for (Shape shape : textBox.getChildren()) {");
_builder.newLine();
_builder.append(" ");
_builder.append("if (shape.getGraphicsAlgorithm() instanceof Text) {");
_builder.newLine();
_builder.append(" ");
_builder.append("Text text = (Text) shape.getGraphicsAlgorithm();");
_builder.newLine();
_builder.append(" ");
_builder.append("String type = Graphiti.getPeService().getPropertyValue(shape, \"MODEL_TYPE\");");
_builder.newLine();
_builder.append(" ");
_builder.append("String value = getValues(eClass).get(type);");
_builder.newLine();
_builder.append(" ");
_builder.append("if( value != null){");
_builder.newLine();
_builder.append(" ");
_builder.append("String pictogramName = text.getValue();");
_builder.newLine();
_builder.append(" ");
_builder.newLine();
_builder.append(" ");
_builder.append("// update needed, if names are different");
_builder.newLine();
_builder.append(" ");
_builder.append("boolean updateNameNeeded =((pictogramName == null && value != null) || (pictogramName != null && !pictogramName.equals(value)));");
_builder.newLine();
_builder.append(" ");
_builder.append("if (updateNameNeeded) {");
_builder.newLine();
_builder.append(" ");
_builder.append("return Reason.createTrueReason(\"Name [\" + pictogramName + \"] is out of date\");");
_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.append(" ");
_builder.append("}");
_builder.newLine();
_builder.append(" ");
_builder.append("return Reason.createFalseReason();");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append(" ");
_builder.append("@Override");
_builder.newLine();
_builder.append(" ");
_builder.append("public boolean update(IUpdateContext context) {");
_builder.newLine();
_builder.append(" ");
_builder.append("PictogramElement pictogramElement = context.getPictogramElement();");
_builder.newLine();
_builder.append(" ");
_builder.append("Object bo = getBusinessObjectForPictogramElement(pictogramElement);");
_builder.newLine();
_builder.append(" ");
MetaClass _represents_5 = container.getRepresents();
String _name_4 = this.e1.getName(_represents_5);
_builder.append(_name_4, " ");
_builder.append(" eClass = (");
MetaClass _represents_6 = container.getRepresents();
String _name_5 = this.e1.getName(_represents_6);
_builder.append(_name_5, " ");
_builder.append(") bo;");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("return SprayContainerService.update(pictogramElement, getValues(eClass));");
_builder.newLine();
_builder.append(" ");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append(" ");
_builder.append("protected Map<String, String> getValues(");
MetaClass _represents_7 = container.getRepresents();
String _name_6 = this.e1.getName(_represents_7);
_builder.append(_name_6, " ");
_builder.append(" eClass) {");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("if (values == null) {");
_builder.newLine();
_builder.append(" ");
_builder.append("values = new HashMap<String, String>();");
_builder.newLine();
_builder.append(" ");
_builder.append("fillValues(eClass);");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.append(" ");
_builder.append("return values;");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append(" ");
_builder.append("protected void fillValues(");
MetaClass _represents_8 = container.getRepresents();
String _name_7 = this.e1.getName(_represents_8);
_builder.append(_name_7, " ");
_builder.append(" eClass) {");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("String type, value;");
_builder.newLine();
{
SprayElement[] _parts = container.getParts();
for(final SprayElement part : _parts) {
{
if ((part instanceof Text)) {
_builder.append(" ");
_builder.append(" ");
Text text = ((Text) part);
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("type = \"");
QualifiedName _fullyQualifiedName = this.qnProvider.getFullyQualifiedName(text);
_builder.append(_fullyQualifiedName, " ");
_builder.append("\";");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("value = getValue(type, eClass);");
_builder.newLine();
_builder.append(" ");
_builder.append("values.put(type, value);");
_builder.newLine();
}
}
}
}
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.append(" ");
_builder.newLine();
_builder.append(" ");
_builder.append("private String getValue (String type, ");
MetaClass _represents_9 = container.getRepresents();
String _name_8 = this.e1.getName(_represents_9);
_builder.append(_name_8, " ");
_builder.append(" eClass) {");
_builder.newLineIfNotEmpty();
{
SprayElement[] _parts_1 = container.getParts();
for(final SprayElement part_1 : _parts_1) {
{
if ((part_1 instanceof Text)) {
_builder.append(" ");
Text text_1 = ((Text) part_1);
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("if (\"");
QualifiedName _fullyQualifiedName_1 = this.qnProvider.getFullyQualifiedName(text_1);
_builder.append(_fullyQualifiedName_1, " ");
_builder.append("\".equals(type)) {");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append(" ");
StringConcatenation _valueGenerator = this.valueGenerator(text_1, "eClass");
_builder.append(_valueGenerator, " ");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
}
}
}
}
_builder.append(" ");
_builder.append("throw new IllegalArgumentException(type);");
_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.newLine();
_builder.append("}");
_builder.newLine();
return _builder;
}
}