package org.eclipselabs.spray.generator.graphiti.templates; import com.google.inject.Inject; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EAttribute; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EReference; import org.eclipse.xtext.xbase.lib.Conversions; 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.TemplateUtil; import org.eclipselabs.spray.generator.graphiti.util.GeneratorUtil; import org.eclipselabs.spray.generator.graphiti.util.NamingExtensions; import org.eclipselabs.spray.generator.graphiti.util.XtendProperties; 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 Plugin extends TemplateUtil { @Inject private SprayExtensions e1; @Inject private NamingExtensions naming; public StringConcatenation generate(final Diagram diagram) { StringConcatenation _builder = new StringConcatenation(); _builder.append(" "); String _name = diagram.getName(); String diagramName = _name; _builder.newLineIfNotEmpty(); _builder.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); _builder.newLine(); _builder.append(" "); _builder.append("<?eclipse version=\"3.0\"?>"); _builder.newLine(); _builder.append(" "); StringConcatenation _pluginHeader = this.pluginHeader(this); _builder.append(_pluginHeader, " "); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("<plugin>"); _builder.newLine(); _builder.append(" "); _builder.append("<!-- Potentially redefine the EDITOR EXTENSION TO ALLOW FOR OUR OWN EDITOR SUBCLASS TO BE USED. "); _builder.newLine(); _builder.append(" "); _builder.append("<extension"); _builder.newLine(); _builder.append(" "); _builder.append("point=\"org.eclipse.ui.editors\">"); _builder.newLine(); _builder.append(" "); _builder.append("<editor"); _builder.newLine(); _builder.append(" "); _builder.append("class=\""); String _extensionFactoryClassName = this.naming.getExtensionFactoryClassName(diagram); _builder.append(_extensionFactoryClassName, " "); _builder.append(":"); String _diagramEditorClassName = this.naming.getDiagramEditorClassName(diagram); _builder.append(_diagramEditorClassName, " "); _builder.append("\""); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("contributorClass=\"org.eclipse.graphiti.ui.editor.DiagramEditorActionBarContributor\""); _builder.newLine(); _builder.append(" "); _builder.append("default=\"true\""); _builder.newLine(); _builder.append(" "); _builder.append("extensions=\"diagram\""); _builder.newLine(); _builder.append(" "); _builder.append("icon=\"icons/diagram.gif\""); _builder.newLine(); _builder.append(" "); _builder.append("id=\""); String _diagramEditorClassName_1 = this.naming.getDiagramEditorClassName(diagram); _builder.append(_diagramEditorClassName_1, " "); _builder.append("\""); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("matchingStrategy=\"org.eclipse.graphiti.ui.editor.DiagramEditorFactory$DiagramEditorMatchingStrategy\""); _builder.newLine(); _builder.append(" "); _builder.append("name=\"%_diagram_editor_name\">"); _builder.newLine(); _builder.append(" "); _builder.append("<contentTypeBinding"); _builder.newLine(); _builder.append(" "); _builder.append("contentTypeId=\"org.eclipse.graphiti.content.diagram\">"); _builder.newLine(); _builder.append(" "); _builder.append("</contentTypeBinding>"); _builder.newLine(); _builder.append(" "); _builder.append("</editor>"); _builder.newLine(); _builder.append(" "); _builder.append("</extension>"); _builder.newLine(); _builder.append(" "); _builder.append("-->"); _builder.newLine(); _builder.append(" "); _builder.newLine(); _builder.append(" "); _builder.append("<extension"); _builder.newLine(); _builder.append(" "); _builder.append("point=\"org.eclipse.graphiti.ui.diagramTypes\">"); _builder.newLine(); _builder.append(" "); _builder.append("<diagramType"); _builder.newLine(); _builder.append(" "); _builder.append("description=\"This is the diagram type for the "); _builder.append(diagramName, " "); _builder.append(" diagram type\""); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("id=\""); String _diagram_package = GeneratorUtil.diagram_package(); _builder.append(_diagram_package, " "); _builder.append("."); String _firstUpper = StringExtensions.toFirstUpper(diagramName); _builder.append(_firstUpper, " "); _builder.append("DiagramType\""); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("name=\""); _builder.append(diagramName, " "); _builder.append(" Graphiti Diagram Type\""); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("type=\""); _builder.append(diagramName, " "); _builder.append("\">"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("</diagramType>"); _builder.newLine(); _builder.append(" "); _builder.append("</extension>"); _builder.newLine(); _builder.append(" "); _builder.newLine(); _builder.append(" "); _builder.append("<extension"); _builder.newLine(); _builder.append(" "); _builder.append("point=\"org.eclipse.graphiti.ui.diagramTypeProviders\">"); _builder.newLine(); _builder.append(" "); _builder.append("<diagramTypeProvider"); _builder.newLine(); _builder.append(" "); _builder.append("class=\""); String _extensionFactoryClassName_1 = this.naming.getExtensionFactoryClassName(diagram); _builder.append(_extensionFactoryClassName_1, " "); _builder.append(":"); String _diagramTypeProviderClassName = this.naming.getDiagramTypeProviderClassName(diagram); _builder.append(_diagramTypeProviderClassName, " "); _builder.append("\""); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("description=\"This is my editor for the "); _builder.append(diagramName, " "); _builder.append(" diagram type\""); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("id=\""); String _diagramTypeProviderClassName_1 = this.naming.getDiagramTypeProviderClassName(diagram); _builder.append(_diagramTypeProviderClassName_1, " "); _builder.append("\""); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("name=\""); _builder.append(diagramName, " "); _builder.append(" editor\">"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("<diagramType"); _builder.newLine(); _builder.append(" "); _builder.append("id=\""); String _diagram_package_1 = GeneratorUtil.diagram_package(); _builder.append(_diagram_package_1, " "); _builder.append("."); String _firstUpper_1 = StringExtensions.toFirstUpper(diagramName); _builder.append(_firstUpper_1, " "); _builder.append("DiagramType\">"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("</diagramType>"); _builder.newLine(); _builder.append(" "); _builder.append("<imageProvider"); _builder.newLine(); _builder.append(" "); _builder.append("id=\""); String _imageProviderClassName = this.naming.getImageProviderClassName(diagram); _builder.append(_imageProviderClassName, " "); _builder.append("\">"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("</imageProvider>"); _builder.newLine(); _builder.append(" "); _builder.append("</diagramTypeProvider>"); _builder.newLine(); _builder.append(" "); _builder.append("</extension>"); _builder.newLine(); _builder.append(" "); _builder.newLine(); _builder.append(" "); _builder.append("<extension"); _builder.newLine(); _builder.append(" "); _builder.append("point=\"org.eclipse.graphiti.ui.imageProviders\">"); _builder.newLine(); _builder.append(" "); _builder.append("<imageProvider"); _builder.newLine(); _builder.append(" "); _builder.append("class=\""); String _extensionFactoryClassName_2 = this.naming.getExtensionFactoryClassName(diagram); _builder.append(_extensionFactoryClassName_2, " "); _builder.append(":"); String _imageProviderClassName_1 = this.naming.getImageProviderClassName(diagram); _builder.append(_imageProviderClassName_1, " "); _builder.append("\""); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("id=\""); String _imageProviderClassName_2 = this.naming.getImageProviderClassName(diagram); _builder.append(_imageProviderClassName_2, " "); _builder.append("\">"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("</imageProvider>"); _builder.newLine(); _builder.append(" "); _builder.append("</extension>"); _builder.newLine(); _builder.append(" "); _builder.newLine(); _builder.append(" "); _builder.append("<extension"); _builder.newLine(); _builder.append(" "); _builder.append("point=\"org.eclipse.ui.views.properties.tabbed.propertyContributor\">"); _builder.newLine(); _builder.append(" "); _builder.append("<propertyContributor contributorId=\""); _builder.append(diagramName, " "); _builder.append(".PropertyContributor\">"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("<propertyCategory category=\""); _builder.append(diagramName, " "); _builder.append("Category\">"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("</propertyCategory>"); _builder.newLine(); _builder.append(" "); _builder.append("</propertyContributor>"); _builder.newLine(); _builder.append(" "); _builder.append("</extension>"); _builder.newLine(); _builder.append(" "); _builder.newLine(); _builder.append(" "); _builder.append("<extension"); _builder.newLine(); _builder.append(" "); _builder.append("point=\"org.eclipse.ui.views.properties.tabbed.propertyTabs\">"); _builder.newLine(); _builder.append(" "); _builder.append("<propertyTabs contributorId=\""); _builder.append(diagramName, " "); _builder.append(".PropertyContributor\">"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("<propertyTab label=\"Main\" category=\""); _builder.append(diagramName, " "); _builder.append("Category\""); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("id=\""); _builder.append(diagramName, " "); _builder.append(".main.tab\">"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("</propertyTab>"); _builder.newLine(); _builder.append(" "); _builder.append("</propertyTabs>"); _builder.newLine(); _builder.append(" "); _builder.append("</extension>"); _builder.newLine(); { MetaClass[] _metaClasses = diagram.getMetaClasses(); for(final MetaClass cls : _metaClasses) { _builder.append(" "); XtendProperties.setValue("PreviousSection", null); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("<extension"); _builder.newLine(); _builder.append(" "); _builder.append(" "); _builder.append("point=\"org.eclipse.ui.views.properties.tabbed.propertySections\">"); _builder.newLine(); _builder.append(" "); _builder.append(" "); _builder.append("<propertySections contributorId=\""); _builder.append(diagramName, " "); _builder.append(".PropertyContributor\">"); _builder.newLineIfNotEmpty(); { EClass _type = cls.getType(); EList<EAttribute> _eAllAttributes = _type.getEAllAttributes(); for(final EAttribute property : _eAllAttributes) { _builder.append(" "); _builder.append(" "); _builder.append("<propertySection tab=\""); _builder.append(diagramName, " "); _builder.append(".main.tab\""); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(" "); _builder.append(" "); _builder.append("class=\""); String _extensionFactoryClassName_3 = this.naming.getExtensionFactoryClassName(diagram); _builder.append(_extensionFactoryClassName_3, " "); _builder.append(":"); EClass _type_1 = cls.getType(); String _propertySectionClassName = this.naming.getPropertySectionClassName(_type_1, property); _builder.append(_propertySectionClassName, " "); _builder.append("\""); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(" "); _builder.append(" "); _builder.append("filter=\""); String _filterClassName = this.naming.getFilterClassName(cls); _builder.append(_filterClassName, " "); _builder.append("\""); _builder.newLineIfNotEmpty(); { String _value = XtendProperties.getValue("PreviousSection"); boolean _operator_notEquals = ObjectExtensions.operator_notEquals(_value, null); if (_operator_notEquals) { _builder.append(" "); _builder.append("afterSection=\""); String _value_1 = XtendProperties.getValue("PreviousSection"); _builder.append(_value_1, " "); _builder.append("\""); _builder.newLineIfNotEmpty(); } } _builder.append(" "); _builder.append(" "); _builder.append(" "); String _operator_plus = StringExtensions.operator_plus(diagramName, ".main.tab."); String _name_1 = this.e1.getName(cls); String _operator_plus_1 = StringExtensions.operator_plus(_operator_plus, _name_1); String _operator_plus_2 = StringExtensions.operator_plus(_operator_plus_1, "."); String _name_2 = property.getName(); String _operator_plus_3 = StringExtensions.operator_plus(_operator_plus_2, _name_2); XtendProperties.setValue("PreviousSection", _operator_plus_3); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(" "); _builder.append(" "); _builder.append("id=\""); String _value_2 = XtendProperties.getValue("PreviousSection"); _builder.append(_value_2, " "); _builder.append("\">"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(" "); _builder.append("</propertySection>"); _builder.newLine(); } } _builder.append(" "); _builder.append(" "); _builder.append("</propertySections>"); _builder.newLine(); _builder.append(" "); _builder.append("</extension>"); _builder.newLine(); } } _builder.append(" "); _builder.newLine(); _builder.append(" "); _builder.newLine(); _builder.append(" "); _builder.append("// Find all clases that are shown as lists in the compartments"); _builder.newLine(); { MetaClass[] _metaClasses_1 = diagram.getMetaClasses(); for(final MetaClass cls_1 : _metaClasses_1) { { Shape _representedBy = cls_1.getRepresentedBy(); if ((_representedBy instanceof Container)) { _builder.append(" "); Shape _representedBy_1 = cls_1.getRepresentedBy(); Container container = ((Container) _representedBy_1); _builder.newLineIfNotEmpty(); { SprayElement[] _parts = container.getParts(); Iterable<MetaReference> _filter = IterableExtensions.<MetaReference>filter(((Iterable<? extends Object>)Conversions.doWrapArray(_parts)), org.eclipselabs.spray.mm.spray.MetaReference.class); for(final MetaReference ref : _filter) { _builder.append(" "); _builder.append(" "); String _name_3 = this.e1.getName(ref); XtendProperties.setValue("refName", _name_3); _builder.append(" "); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(" "); EClass _type_2 = cls_1.getType(); EList<EReference> _eAllReferences = _type_2.getEAllReferences(); final EList<EReference> references = _eAllReferences; _builder.append(" "); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(" "); EReference _reference = ref.getReference(); final EReference target = _reference; _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(" "); XtendProperties.setValue("PreviousSection", null); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(" "); _builder.append("<extension"); _builder.newLine(); _builder.append(" "); _builder.append(" "); _builder.append("point=\"org.eclipse.ui.views.properties.tabbed.propertySections\">"); _builder.newLine(); _builder.append(" "); _builder.append(" "); _builder.append("<propertySections contributorId=\""); _builder.append(diagramName, " "); _builder.append(".PropertyContributor\">"); _builder.newLineIfNotEmpty(); { EClass _eReferenceType = target.getEReferenceType(); EList<EAttribute> _eAllAttributes_1 = _eReferenceType.getEAllAttributes(); for(final EAttribute attribute : _eAllAttributes_1) { _builder.append(" "); _builder.append(" "); _builder.append("<propertySection tab=\""); _builder.append(diagramName, " "); _builder.append(".main.tab\" "); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(" "); _builder.append(" "); _builder.append("class=\""); String _extensionFactoryClassName_4 = this.naming.getExtensionFactoryClassName(diagram); _builder.append(_extensionFactoryClassName_4, " "); _builder.append(":"); String _property_package = GeneratorUtil.property_package(); _builder.append(_property_package, " "); _builder.append("."); EClass _eReferenceType_1 = target.getEReferenceType(); String _name_4 = _eReferenceType_1.getName(); _builder.append(_name_4, " "); String _name_5 = attribute.getName(); String _firstUpper_2 = StringExtensions.toFirstUpper(_name_5); _builder.append(_firstUpper_2, " "); _builder.append("Section\""); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(" "); _builder.append(" "); _builder.append("filter=\""); String _property_package_1 = GeneratorUtil.property_package(); _builder.append(_property_package_1, " "); _builder.append("."); EClass _eReferenceType_2 = target.getEReferenceType(); String _name_6 = _eReferenceType_2.getName(); _builder.append(_name_6, " "); _builder.append("Filter\""); _builder.newLineIfNotEmpty(); { String _value_3 = XtendProperties.getValue("PreviousSection"); boolean _operator_notEquals_1 = ObjectExtensions.operator_notEquals(_value_3, null); if (_operator_notEquals_1) { _builder.append(" "); _builder.append("afterSection=\""); String _value_4 = XtendProperties.getValue("PreviousSection"); _builder.append(_value_4, " "); _builder.append("\""); _builder.newLineIfNotEmpty(); } } _builder.append(" "); _builder.append(" "); _builder.append(" "); String _operator_plus_4 = StringExtensions.operator_plus(diagramName, ".main.tab."); EClass _eReferenceType_3 = target.getEReferenceType(); String _name_7 = _eReferenceType_3.getName(); String _operator_plus_5 = StringExtensions.operator_plus(_operator_plus_4, _name_7); String _operator_plus_6 = StringExtensions.operator_plus(_operator_plus_5, "."); String _name_8 = attribute.getName(); String _operator_plus_7 = StringExtensions.operator_plus(_operator_plus_6, _name_8); XtendProperties.setValue("PreviousSection", _operator_plus_7); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(" "); _builder.append(" "); _builder.append("id=\""); String _value_5 = XtendProperties.getValue("PreviousSection"); _builder.append(_value_5, " "); _builder.append("\">"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(" "); _builder.append("</propertySection>"); _builder.newLine(); } } _builder.append(" "); _builder.append(" "); _builder.append("</propertySections>"); _builder.newLine(); _builder.append(" "); _builder.append("</extension>"); _builder.newLine(); } } } } } } _builder.append(" "); _builder.append("</plugin>"); _builder.newLine(); return _builder; } }