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.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.NamingExtensions;
import org.eclipselabs.spray.mm.spray.Diagram;
import org.eclipselabs.spray.mm.spray.MetaClass;
import org.eclipselabs.spray.mm.spray.extensions.SprayExtensions;
import org.eclipselabs.spray.xtext.util.GenModelHelper;
@SuppressWarnings("all")
public class CreateShapeFeature 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.newLine();
return _builder;
}
public StringConcatenation mainFile(final MetaClass metaClass, final String className) {
StringConcatenation _builder = new StringConcatenation();
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.newLine();
_builder.append("import java.io.IOException;");
_builder.newLine();
_builder.newLine();
_builder.append("import org.eclipse.graphiti.features.IFeatureProvider;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.features.context.ICreateContext;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.features.context.IContext;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.features.impl.AbstractCreateFeature;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.mm.pictograms.Diagram;");
_builder.newLine();
_builder.append("import org.eclipse.core.runtime.CoreException;");
_builder.newLine();
_builder.append("import ");
String _util_package = GeneratorUtil.util_package();
_builder.append(_util_package, "");
_builder.append(".SampleUtil;");
_builder.newLineIfNotEmpty();
_builder.append("import ");
String _javaInterfaceName = this.naming.getJavaInterfaceName(metaClass);
_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 AbstractCreateFeature {");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append(" ");
_builder.append("private static final String TITLE = \"Create ");
String _visibleName = GeneratorUtil.visibleName(metaClass);
_builder.append(_visibleName, " ");
_builder.append("\";");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("private static final String USER_QUESTION = \"Enter new ");
String _visibleName_1 = GeneratorUtil.visibleName(metaClass);
_builder.append(_visibleName_1, " ");
_builder.append(" name\";");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("public final static String typeOrAliasName = \"");
String _visibleName_2 = GeneratorUtil.visibleName(metaClass);
_builder.append(_visibleName_2, " ");
_builder.append("\";");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append(" ");
_builder.append("public ");
_builder.append(className, " ");
_builder.append("(IFeatureProvider fp) {");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("// set name and description of the creation feature");
_builder.newLine();
_builder.append(" ");
_builder.append("super(fp, \"");
String _visibleName_3 = GeneratorUtil.visibleName(metaClass);
_builder.append(_visibleName_3, " ");
_builder.append("\", \"Create ");
String _visibleName_4 = GeneratorUtil.visibleName(metaClass);
_builder.append(_visibleName_4, " ");
_builder.append("\");");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append(" ");
_builder.append("public boolean canCreate(ICreateContext context) {");
_builder.newLine();
_builder.append(" ");
_builder.append("return context.getTargetContainer() instanceof Diagram;");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append(" ");
_builder.append("protected ");
String _name = this.e1.getName(metaClass);
_builder.append(_name, " ");
_builder.append(" newClass = null;");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append(" ");
_builder.append("public Object[] create(final ICreateContext context) {");
_builder.newLine();
_builder.append(" ");
_builder.append("newClass = create");
String _visibleName_5 = GeneratorUtil.visibleName(metaClass);
_builder.append(_visibleName_5, " ");
_builder.append("(context);");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.newLine();
_builder.append(" ");
_builder.append("if (newClass == null ) {");
_builder.newLine();
_builder.append(" ");
_builder.append("return EMPTY;");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.append(" ");
_builder.newLine();
_builder.append(" ");
_builder.append("// do the add");
_builder.newLine();
_builder.append(" ");
_builder.append("addGraphicalRepresentation(context, newClass);");
_builder.newLine();
_builder.append(" ");
_builder.append("// return newly created business object(s)");
_builder.newLine();
_builder.append(" ");
_builder.append("return new Object[] { newClass };");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.append(" ");
_builder.newLine();
_builder.append(" ");
_builder.append("protected ");
String _name_1 = this.e1.getName(metaClass);
_builder.append(_name_1, " ");
_builder.append(" create");
String _visibleName_6 = GeneratorUtil.visibleName(metaClass);
_builder.append(_visibleName_6, " ");
_builder.append("(ICreateContext context) {");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("// ask user for ");
_builder.append(className, " ");
_builder.append(" name");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("String newName = SampleUtil.askString(TITLE, USER_QUESTION, \"\");");
_builder.newLine();
_builder.append(" ");
_builder.append("if (newName == null || newName.trim().length() == 0) {");
_builder.newLine();
_builder.append(" ");
_builder.append("return null;");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.append(" ");
_builder.append("// create ");
String _name_2 = this.e1.getName(metaClass);
_builder.append(_name_2, " ");
_builder.newLineIfNotEmpty();
_builder.append(" ");
String _name_3 = this.e1.getName(metaClass);
_builder.append(_name_3, " ");
_builder.append(" newClass = ");
String _eFactoryInterfaceName = this.naming.getEFactoryInterfaceName(metaClass);
String _shortName = this.shortName(_eFactoryInterfaceName);
_builder.append(_shortName, " ");
_builder.append(".eINSTANCE.create");
String _name_4 = this.e1.getName(metaClass);
_builder.append(_name_4, " ");
_builder.append("(); ");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("newClass.setName(newName); ");
_builder.newLine();
_builder.append(" ");
_builder.append("// default is to add it to a file resource, which is created if it does not exist.");
_builder.newLine();
_builder.append(" ");
_builder.append("try {");
_builder.newLine();
_builder.append(" ");
_builder.append("SampleUtil.saveToModelFile(newClass, getDiagram(), \"");
EClass _type = metaClass.getType();
String _fileExtension = this.genModelHelper.getFileExtension(_type);
_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 newClass;");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.append(" ");
_builder.newLine();
_builder.append(" ");
_builder.newLine();
{
String _icon = metaClass.getIcon();
boolean _operator_notEquals = ObjectExtensions.operator_notEquals(_icon, null);
if (_operator_notEquals) {
_builder.append(" ");
_builder.append("@Override");
_builder.newLine();
_builder.append(" ");
_builder.append("public String getCreateImageId() {");
_builder.newLine();
_builder.append(" ");
_builder.append(" ");
_builder.append("return ");
String _imageProviderClassName = this.naming.getImageProviderClassName(diagram);
String _shortName_1 = this.shortName(_imageProviderClassName);
_builder.append(_shortName_1, " ");
_builder.append(".");
String _icon_1 = metaClass.getIcon();
String _imageIdentifier = this.naming.getImageIdentifier(diagram, _icon_1);
_builder.append(_imageIdentifier, " ");
_builder.append(";");
_builder.newLineIfNotEmpty();
_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.append("}");
_builder.newLine();
return _builder;
}
}