/** * generated by Xtext */ package com.robotoworks.mechanoid.net.generator; import com.google.common.base.Objects; import com.google.common.collect.Iterables; import com.google.inject.Inject; import com.google.inject.Provider; import com.robotoworks.mechanoid.generator.MechanoidOutputConfigurationProvider; import com.robotoworks.mechanoid.net.generator.ClientGenerator; import com.robotoworks.mechanoid.net.generator.EntityGenerator; import com.robotoworks.mechanoid.net.generator.EntityReaderGenerator; import com.robotoworks.mechanoid.net.generator.EntityReaderProviderGenerator; import com.robotoworks.mechanoid.net.generator.EntityWriterGenerator; import com.robotoworks.mechanoid.net.generator.EntityWriterProviderGenerator; import com.robotoworks.mechanoid.net.generator.IntegerEnumTypeGenerator; import com.robotoworks.mechanoid.net.generator.RequestGenerator; import com.robotoworks.mechanoid.net.generator.ResultGenerator; import com.robotoworks.mechanoid.net.generator.StringEnumTypeGenerator; import com.robotoworks.mechanoid.net.netModel.Client; import com.robotoworks.mechanoid.net.netModel.ClientBlock; import com.robotoworks.mechanoid.net.netModel.ComplexTypeDeclaration; import com.robotoworks.mechanoid.net.netModel.Declaration; import com.robotoworks.mechanoid.net.netModel.EnumTypeDeclaration; import com.robotoworks.mechanoid.net.netModel.HttpMethod; import com.robotoworks.mechanoid.net.netModel.IntegerType; import com.robotoworks.mechanoid.net.netModel.Model; import com.robotoworks.mechanoid.text.Strings; import java.util.Arrays; import java.util.function.Consumer; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.xtext.generator.IFileSystemAccess; import org.eclipse.xtext.generator.IGenerator; import org.eclipse.xtext.xbase.lib.IterableExtensions; @SuppressWarnings("all") public class NetModelGenerator implements IGenerator { @Inject private Provider<ClientGenerator> mClientGenerator; @Inject private Provider<RequestGenerator> mRequestGenerator; @Inject private Provider<ResultGenerator> mResultGenerator; @Inject private Provider<EntityReaderGenerator> mEntityReaderGenerator; @Inject private Provider<EntityWriterGenerator> mEntityWriterGenerator; @Inject private Provider<EntityGenerator> mEntityGenerator; @Inject private Provider<IntegerEnumTypeGenerator> mIntEnumGenerator; @Inject private Provider<StringEnumTypeGenerator> mStringEnumGenerator; @Inject private Provider<EntityReaderProviderGenerator> mEntityReaderProviderGenerator; @Inject private Provider<EntityWriterProviderGenerator> mEntityWriterProviderGenerator; public void doGenerate(final Resource resource, final IFileSystemAccess fsa) { EList<EObject> _contents = resource.getContents(); EObject _head = IterableExtensions.<EObject>head(_contents); final Model model = ((Model) _head); EList<Declaration> _declarations = model.getDeclarations(); final Consumer<Declaration> _function = new Consumer<Declaration>() { public void accept(final Declaration it) { NetModelGenerator.this.generate(it, model, fsa); } }; _declarations.forEach(_function); } protected void _generate(final Client client, final Model model, final IFileSystemAccess fsa) { String _packageName = model.getPackageName(); String _name = client.getName(); String _plus = ("Abstract" + _name); String _resolveFileName = Strings.resolveFileName(_packageName, _plus); ClientGenerator _get = this.mClientGenerator.get(); CharSequence _generate = _get.generate(client, model); fsa.generateFile(_resolveFileName, _generate); String _packageName_1 = model.getPackageName(); String _name_1 = client.getName(); String _resolveFileName_1 = Strings.resolveFileName(_packageName_1, _name_1); ClientGenerator _get_1 = this.mClientGenerator.get(); CharSequence _generateStub = _get_1.generateStub(client, model); fsa.generateFile(_resolveFileName_1, MechanoidOutputConfigurationProvider.DEFAULT_STUB_OUTPUT, _generateStub); String _packageName_2 = model.getPackageName(); String _name_2 = client.getName(); String _pascalize = Strings.pascalize(_name_2); String _concat = _pascalize.concat("ReaderProvider"); String _plus_1 = ("Default" + _concat); String _resolveFileName_2 = Strings.resolveFileName(_packageName_2, _plus_1); EntityReaderProviderGenerator _get_2 = this.mEntityReaderProviderGenerator.get(); CharSequence _generate_1 = _get_2.generate(client, model); fsa.generateFile(_resolveFileName_2, _generate_1); String _packageName_3 = model.getPackageName(); String _name_3 = client.getName(); String _pascalize_1 = Strings.pascalize(_name_3); String _concat_1 = _pascalize_1.concat("WriterProvider"); String _plus_2 = ("Default" + _concat_1); String _resolveFileName_3 = Strings.resolveFileName(_packageName_3, _plus_2); EntityWriterProviderGenerator _get_3 = this.mEntityWriterProviderGenerator.get(); CharSequence _generate_2 = _get_3.generate(client, model); fsa.generateFile(_resolveFileName_3, _generate_2); EList<ClientBlock> _blocks = client.getBlocks(); Iterable<HttpMethod> _filter = Iterables.<HttpMethod>filter(_blocks, HttpMethod.class); final Consumer<HttpMethod> _function = new Consumer<HttpMethod>() { public void accept(final HttpMethod method) { String _packageName = model.getPackageName(); String _name = method.getName(); String _pascalize = Strings.pascalize(_name); String _concat = _pascalize.concat("Request"); String _resolveFileName = Strings.resolveFileName(_packageName, _concat); RequestGenerator _get = NetModelGenerator.this.mRequestGenerator.get(); CharSequence _generate = _get.generate(method, model, client); fsa.generateFile(_resolveFileName, _generate); String _packageName_1 = model.getPackageName(); String _name_1 = method.getName(); String _pascalize_1 = Strings.pascalize(_name_1); String _concat_1 = _pascalize_1.concat("Result"); String _resolveFileName_1 = Strings.resolveFileName(_packageName_1, _concat_1); ResultGenerator _get_1 = NetModelGenerator.this.mResultGenerator.get(); CharSequence _generate_1 = _get_1.generate(method, model, client); fsa.generateFile(_resolveFileName_1, _generate_1); } }; _filter.forEach(_function); } protected void _generate(final ComplexTypeDeclaration entity, final Model model, final IFileSystemAccess fsa) { String _packageName = model.getPackageName(); String _name = entity.getName(); String _pascalize = Strings.pascalize(_name); String _concat = _pascalize.concat("Reader"); String _resolveFileName = Strings.resolveFileName(_packageName, _concat); EntityReaderGenerator _get = this.mEntityReaderGenerator.get(); CharSequence _generate = _get.generate(entity, model); fsa.generateFile(_resolveFileName, _generate); String _packageName_1 = model.getPackageName(); String _name_1 = entity.getName(); String _pascalize_1 = Strings.pascalize(_name_1); String _concat_1 = _pascalize_1.concat("Writer"); String _resolveFileName_1 = Strings.resolveFileName(_packageName_1, _concat_1); EntityWriterGenerator _get_1 = this.mEntityWriterGenerator.get(); CharSequence _generate_1 = _get_1.generate(entity, model); fsa.generateFile(_resolveFileName_1, _generate_1); String _packageName_2 = model.getPackageName(); String _name_2 = entity.getName(); String _pascalize_2 = Strings.pascalize(_name_2); String _resolveFileName_2 = Strings.resolveFileName(_packageName_2, _pascalize_2); EntityGenerator _get_2 = this.mEntityGenerator.get(); CharSequence _generate_2 = _get_2.generate(entity, model); fsa.generateFile(_resolveFileName_2, _generate_2); } protected void _generate(final EnumTypeDeclaration type, final Model model, final IFileSystemAccess fsa) { boolean _isNogen = type.isNogen(); boolean _not = (!_isNogen); if (_not) { IntegerType _superType = type.getSuperType(); boolean _notEquals = (!Objects.equal(_superType, null)); if (_notEquals) { String _packageName = model.getPackageName(); String _name = type.getName(); String _pascalize = Strings.pascalize(_name); String _resolveFileName = Strings.resolveFileName(_packageName, _pascalize); IntegerEnumTypeGenerator _get = this.mIntEnumGenerator.get(); CharSequence _generate = _get.generate(type, model); fsa.generateFile(_resolveFileName, _generate); } else { String _packageName_1 = model.getPackageName(); String _name_1 = type.getName(); String _pascalize_1 = Strings.pascalize(_name_1); String _resolveFileName_1 = Strings.resolveFileName(_packageName_1, _pascalize_1); StringEnumTypeGenerator _get_1 = this.mStringEnumGenerator.get(); CharSequence _generate_1 = _get_1.generate(type, model); fsa.generateFile(_resolveFileName_1, _generate_1); } } } public void generate(final Declaration entity, final Model model, final IFileSystemAccess fsa) { if (entity instanceof ComplexTypeDeclaration) { _generate((ComplexTypeDeclaration)entity, model, fsa); return; } else if (entity instanceof EnumTypeDeclaration) { _generate((EnumTypeDeclaration)entity, model, fsa); return; } else if (entity instanceof Client) { _generate((Client)entity, model, fsa); return; } else { throw new IllegalArgumentException("Unhandled parameter types: " + Arrays.<Object>asList(entity, model, fsa).toString()); } } }