package org.eclipselabs.spray.generator.graphiti.templates;
import com.google.inject.Inject;
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.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.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;
@SuppressWarnings("all")
public class ToolBehaviourProvider 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(((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.append(" ");
_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("(IDiagramTypeProvider dtp) {");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("super(dtp);");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_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 java.util.HashMap;");
_builder.newLine();
_builder.append("import java.util.Map;");
_builder.newLine();
_builder.newLine();
_builder.append("import org.eclipse.graphiti.dt.IDiagramTypeProvider;");
_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.palette.IPaletteCompartmentEntry;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.palette.impl.ObjectCreationToolEntry;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.palette.impl.PaletteCompartmentEntry;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.palette.impl.ConnectionCreationToolEntry;");
_builder.newLine();
_builder.append("import org.eclipse.graphiti.tb.DefaultToolBehaviorProvider;");
_builder.newLine();
_builder.append("// MARKER_IMPORT");
_builder.newLine();
_builder.append("public class ");
_builder.append(className, "");
_builder.append(" extends DefaultToolBehaviorProvider {");
_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.newLine();
_builder.append(" ");
_builder.append("@Override");
_builder.newLine();
_builder.append(" ");
_builder.append("public IPaletteCompartmentEntry[] getPalette() {");
_builder.newLine();
_builder.append(" ");
_builder.append("Map<String, PaletteCompartmentEntry> compartments = new HashMap<String, PaletteCompartmentEntry>();");
_builder.newLine();
_builder.newLine();
{
MetaClass[] _metaClasses = diagram.getMetaClasses();
final Function1<MetaClass,Boolean> _function = new Function1<MetaClass,Boolean>() {
public Boolean apply(final MetaClass m) {
Shape _representedBy = m.getRepresentedBy();
return ((Boolean)(_representedBy instanceof Container));
}
};
Iterable<MetaClass> _filter = IterableExtensions.<MetaClass>filter(((Iterable<MetaClass>)Conversions.doWrapArray(_metaClasses)), _function);
for(final MetaClass metaClass : _filter) {
{
Behaviour[] _behaviours = metaClass.getBehaviours();
final Function1<Behaviour,Boolean> _function_1 = new Function1<Behaviour,Boolean>() {
public Boolean apply(final Behaviour e) {
BehaviourType _type = e.getType();
boolean _operator_equals = ObjectExtensions.operator_equals(_type, BehaviourType.CREATE_BEHAVIOUR);
return ((Boolean)_operator_equals);
}
};
Iterable<Behaviour> _filter_1 = IterableExtensions.<Behaviour>filter(((Iterable<Behaviour>)Conversions.doWrapArray(_behaviours)), _function_1);
for(final Behaviour behaviour : _filter_1) {
_builder.append("{");
_builder.newLine();
_builder.append(" ");
_builder.append("ICreateFeature createFeature = new ");
String _createFeatureClassName = this.naming.getCreateFeatureClassName(metaClass);
String _shortName = this.shortName(_createFeatureClassName);
_builder.append(_shortName, " ");
_builder.append("(this.getFeatureProvider());");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("ObjectCreationToolEntry objectCreationToolEntry = new ObjectCreationToolEntry(createFeature.getCreateName(), createFeature.getCreateDescription(), createFeature.getCreateImageId(), createFeature.getCreateLargeImageId(), createFeature);");
_builder.newLine();
_builder.append(" ");
_builder.append("PaletteCompartmentEntry compartment = compartments.get(\"");
String _paletteCompartment = behaviour.getPaletteCompartment();
_builder.append(_paletteCompartment, " ");
_builder.append("\");");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("if( compartment == null ){");
_builder.newLine();
_builder.append(" ");
_builder.append("compartment = new PaletteCompartmentEntry(\"");
String _paletteCompartment_1 = behaviour.getPaletteCompartment();
_builder.append(_paletteCompartment_1, " ");
_builder.append("\", null);");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.append(" ");
_builder.append("compartments.put(\"");
String _paletteCompartment_2 = behaviour.getPaletteCompartment();
_builder.append(_paletteCompartment_2, " ");
_builder.append("\", compartment);");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("compartment.addToolEntry(objectCreationToolEntry);");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
Shape _representedBy = metaClass.getRepresentedBy();
Container container = ((Container) _representedBy);
_builder.newLineIfNotEmpty();
{
SprayElement[] _parts = container.getParts();
Iterable<MetaReference> _filter_2 = IterableExtensions.<MetaReference>filter(((Iterable<? extends Object>)Conversions.doWrapArray(_parts)), org.eclipselabs.spray.mm.spray.MetaReference.class);
for(final MetaReference reference : _filter_2) {
EReference _reference = reference.getReference();
final EReference target = _reference;
_builder.append(" ");
_builder.newLineIfNotEmpty();
{
EClass _eReferenceType = target.getEReferenceType();
boolean _isAbstract = _eReferenceType.isAbstract();
boolean _operator_not = BooleanExtensions.operator_not(_isAbstract);
if (_operator_not) {
_builder.append(" ");
String _createFeatureClassName_1 = this.naming.getCreateFeatureClassName(reference);
String _shortName_1 = this.shortName(_createFeatureClassName_1);
StringConcatenation _objectCreationEntry = this.objectCreationEntry(_shortName_1, "Create");
_builder.append(_objectCreationEntry, " ");
_builder.newLineIfNotEmpty();
_builder.append("// , new ");
String _createFeatureClassName_2 = this.naming.getCreateFeatureClassName(reference);
_builder.append(_createFeatureClassName_2, "");
_builder.append("(this)");
_builder.newLineIfNotEmpty();
}
}
{
EClass _eReferenceType_1 = target.getEReferenceType();
List<EClass> _subclasses = MetaModel.getSubclasses(_eReferenceType_1);
for(final EClass subclass : _subclasses) {
{
boolean _isAbstract_1 = subclass.isAbstract();
boolean _operator_not_1 = BooleanExtensions.operator_not(_isAbstract_1);
if (_operator_not_1) {
_builder.append(" ");
String _createReferenceAsListFeatureClassName = this.naming.getCreateReferenceAsListFeatureClassName(reference, subclass);
String _shortName_2 = this.shortName(_createReferenceAsListFeatureClassName);
StringConcatenation _objectCreationEntry_1 = this.objectCreationEntry(_shortName_2, "Create");
_builder.append(_objectCreationEntry_1, " ");
_builder.newLineIfNotEmpty();
_builder.append("// , new ");
String _createReferenceAsListFeatureClassName_1 = this.naming.getCreateReferenceAsListFeatureClassName(reference, subclass);
_builder.append(_createReferenceAsListFeatureClassName_1, "");
String _name = subclass.getName();
_builder.append(_name, "");
_builder.append("Feature(this)");
_builder.newLineIfNotEmpty();
}
}
}
}
}
}
}
}
}
}
_builder.newLine();
{
MetaClass[] _metaClasses_1 = diagram.getMetaClasses();
final Function1<MetaClass,Boolean> _function_2 = new Function1<MetaClass,Boolean>() {
public Boolean apply(final MetaClass m) {
Shape _representedBy = m.getRepresentedBy();
return ((Boolean)(_representedBy instanceof Container));
}
};
Iterable<MetaClass> _filter_3 = IterableExtensions.<MetaClass>filter(((Iterable<MetaClass>)Conversions.doWrapArray(_metaClasses_1)), _function_2);
final Function1<MetaClass,Container> _function_3 = new Function1<MetaClass,Container>() {
public Container apply(final MetaClass m) {
Shape _representedBy = m.getRepresentedBy();
return ((Container) _representedBy);
}
};
Iterable<Container> _map = IterableExtensions.<MetaClass, Container>map(_filter_3, _function_3);
for(final Container container_1 : _map) {
{
SprayElement[] _parts_1 = container_1.getParts();
Iterable<MetaReference> _filter_4 = IterableExtensions.<MetaReference>filter(((Iterable<? extends Object>)Conversions.doWrapArray(_parts_1)), org.eclipselabs.spray.mm.spray.MetaReference.class);
for(final MetaReference metaRef : _filter_4) {
_builder.append(" ");
String _name_1 = this.e1.getName(metaRef);
final String metaRefName = _name_1;
_builder.newLineIfNotEmpty();
_builder.append(" ");
EReference _reference_1 = metaRef.getReference();
final EReference target_1 = _reference_1;
_builder.append(" ");
_builder.newLineIfNotEmpty();
_builder.append(" ");
String _name_2 = diagram.getName();
String _operator_plus = StringExtensions.operator_plus(_name_2, "Create");
MetaClass _represents = container_1.getRepresents();
String _name_3 = this.e1.getName(_represents);
String _operator_plus_1 = StringExtensions.operator_plus(_operator_plus, _name_3);
String _name_4 = this.e1.getName(metaRef);
String _operator_plus_2 = StringExtensions.operator_plus(_operator_plus_1, _name_4);
EClass _eReferenceType_2 = target_1.getEReferenceType();
String _name_5 = _eReferenceType_2.getName();
String _operator_plus_3 = StringExtensions.operator_plus(_operator_plus_2, _name_5);
String _operator_plus_4 = StringExtensions.operator_plus(_operator_plus_3, "Feature");
final String createFeatureName = _operator_plus_4;
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("// 00000 Embedded list of references ");
_builder.append(createFeatureName, " ");
_builder.newLineIfNotEmpty();
_builder.append("// {");
_builder.newLine();
_builder.append("// ICreateFeature createFeature = new !!!addToImports(feature_package(), createFeatureName)!!!(this.getFeatureProvider());");
_builder.newLine();
_builder.append("// ObjectCreationToolEntry objectCreationToolEntry = new ObjectCreationToolEntry(createFeature.getCreateName(), createFeature.getCreateDescription(), createFeature.getCreateImageId(), createFeature.getCreateLargeImageId(), createFeature);");
_builder.newLine();
_builder.append("// PaletteCompartmentEntry compartment = compartments.get(\"Other\");");
_builder.newLine();
_builder.append("// if( compartment == null ){");
_builder.newLine();
_builder.append("// compartment = new PaletteCompartmentEntry(\"Other\", null);");
_builder.newLine();
_builder.append("// }");
_builder.newLine();
_builder.append("// compartments.put(\"Other\", compartment);");
_builder.newLine();
_builder.append("// compartment.addToolEntry(objectCreationToolEntry);");
_builder.newLine();
_builder.append("// }");
_builder.newLine();
}
}
}
}
_builder.newLine();
_builder.append(" ");
_builder.append("// do the same for connection creators");
_builder.newLine();
{
MetaClass[] _metaClasses_2 = diagram.getMetaClasses();
final Function1<MetaClass,Boolean> _function_4 = new Function1<MetaClass,Boolean>() {
public Boolean apply(final MetaClass m) {
Shape _representedBy = m.getRepresentedBy();
return ((Boolean)(_representedBy instanceof Connection));
}
};
Iterable<MetaClass> _filter_5 = IterableExtensions.<MetaClass>filter(((Iterable<MetaClass>)Conversions.doWrapArray(_metaClasses_2)), _function_4);
for(final MetaClass mc : _filter_5) {
{
Behaviour[] _behaviours_1 = mc.getBehaviours();
final Function1<Behaviour,Boolean> _function_5 = new Function1<Behaviour,Boolean>() {
public Boolean apply(final Behaviour e) {
BehaviourType _type = e.getType();
boolean _operator_equals = ObjectExtensions.operator_equals(_type, BehaviourType.CREATE_BEHAVIOUR);
return ((Boolean)_operator_equals);
}
};
Iterable<Behaviour> _filter_6 = IterableExtensions.<Behaviour>filter(((Iterable<Behaviour>)Conversions.doWrapArray(_behaviours_1)), _function_5);
for(final Behaviour behaviour_1 : _filter_6) {
_builder.append(" ");
_builder.append("{");
_builder.newLine();
_builder.append(" ");
_builder.append(" ");
_builder.append("ICreateConnectionFeature createFeature = new ");
String _createFeatureClassName_3 = this.naming.getCreateFeatureClassName(mc);
String _shortName_3 = this.shortName(_createFeatureClassName_3);
_builder.append(_shortName_3, " ");
_builder.append("(this.getFeatureProvider());");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append(" ");
_builder.append("ConnectionCreationToolEntry objectCreationToolEntry = new ConnectionCreationToolEntry(createFeature.getCreateName(), createFeature.getCreateDescription(), createFeature.getCreateImageId(), createFeature.getCreateLargeImageId());");
_builder.newLine();
_builder.append(" ");
_builder.append(" ");
_builder.append("objectCreationToolEntry.addCreateConnectionFeature(createFeature);");
_builder.newLine();
_builder.append(" ");
_builder.append(" ");
_builder.append("PaletteCompartmentEntry compartment = compartments.get(\"");
String _paletteCompartment_3 = behaviour_1.getPaletteCompartment();
_builder.append(_paletteCompartment_3, " ");
_builder.append("\");");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append(" ");
_builder.append("if( compartment == null ){");
_builder.newLine();
_builder.append(" ");
_builder.append(" ");
_builder.append("compartment = new PaletteCompartmentEntry(\"");
String _paletteCompartment_4 = behaviour_1.getPaletteCompartment();
_builder.append(_paletteCompartment_4, " ");
_builder.append("\", null);");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.append(" ");
_builder.append(" ");
_builder.append("compartments.put(\"");
String _paletteCompartment_5 = behaviour_1.getPaletteCompartment();
_builder.append(_paletteCompartment_5, " ");
_builder.append("\", compartment);");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append(" ");
_builder.append("compartment.addToolEntry(objectCreationToolEntry);");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
}
}
}
}
_builder.append(" ");
_builder.newLine();
{
MetaClass[] _metaClasses_3 = diagram.getMetaClasses();
for(final MetaClass metaClass_1 : _metaClasses_3) {
{
MetaReference[] _references = metaClass_1.getReferences();
for(final MetaReference reference_1 : _references) {
_builder.append(" ");
_builder.append("{");
_builder.newLine();
_builder.append(" ");
_builder.append(" ");
_builder.append("// ");
String _name_6 = this.e1.getName(reference_1);
_builder.append(_name_6, " ");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append(" ");
_builder.append("ICreateConnectionFeature createFeature = new ");
String _createReferenceAsConnectionFeatureClassName = this.naming.getCreateReferenceAsConnectionFeatureClassName(reference_1);
String _shortName_4 = this.shortName(_createReferenceAsConnectionFeatureClassName);
_builder.append(_shortName_4, " ");
_builder.append("(this.getFeatureProvider());");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append(" ");
_builder.append("ConnectionCreationToolEntry objectCreationToolEntry = new ConnectionCreationToolEntry(createFeature.getCreateName(), createFeature.getCreateDescription(), createFeature.getCreateImageId(), createFeature.getCreateLargeImageId());");
_builder.newLine();
_builder.append(" ");
_builder.append(" ");
_builder.append("objectCreationToolEntry.addCreateConnectionFeature(createFeature);");
_builder.newLine();
_builder.append(" ");
_builder.append(" ");
_builder.append("PaletteCompartmentEntry compartment = compartments.get(\"Other\");");
_builder.newLine();
_builder.append(" ");
_builder.append(" ");
_builder.append("if( compartment == null ){");
_builder.newLine();
_builder.append(" ");
_builder.append(" ");
_builder.append("compartment = new PaletteCompartmentEntry(\"Other\", null);");
_builder.newLine();
_builder.append(" ");
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.append(" ");
_builder.append(" ");
_builder.append("compartments.put(\"Other\", compartment);");
_builder.newLine();
_builder.append(" ");
_builder.append(" ");
_builder.append("compartment.addToolEntry(objectCreationToolEntry);");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
}
}
}
}
_builder.append(" ");
_builder.append("IPaletteCompartmentEntry[] res = compartments.values().toArray(new IPaletteCompartmentEntry[compartments.size()]);");
_builder.newLine();
_builder.append(" ");
_builder.append("return res;");
_builder.newLine();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.append("}");
_builder.newLine();
return _builder;
}
public StringConcatenation objectCreationEntry(final String className, final String paletteCompartment) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("{");
_builder.newLine();
_builder.append(" ");
_builder.append("ICreateFeature createFeature = new ");
_builder.append(className, " ");
_builder.append("(this.getFeatureProvider());");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("ObjectCreationToolEntry objectCreationToolEntry = new ObjectCreationToolEntry(createFeature.getCreateName(), createFeature.getCreateDescription(), createFeature.getCreateImageId(), createFeature.getCreateLargeImageId(), createFeature);");
_builder.newLine();
_builder.append(" ");
_builder.append("PaletteCompartmentEntry compartment = compartments.get(\"");
_builder.append(paletteCompartment, " ");
_builder.append("\");");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("if( compartment == null ){");
_builder.newLine();
_builder.append(" ");
_builder.append("compartment = new PaletteCompartmentEntry(\"");
_builder.append(paletteCompartment, " ");
_builder.append("\", null);");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("}");
_builder.newLine();
_builder.append(" ");
_builder.append("compartments.put(\"");
_builder.append(paletteCompartment, " ");
_builder.append("\", compartment);");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("compartment.addToolEntry(objectCreationToolEntry);");
_builder.newLine();
_builder.append("}");
_builder.newLine();
return _builder;
}
}