blob: c277acd9216b8df619a9bec2a8af686b749df5b4 [file] [log] [blame]
/**
*
* Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
*
*
* This copyright notice shows up in the generated Java code
*
*/
package org.eclipse.osbp.xtext.entitymock.generator
import com.google.inject.Inject
import java.io.BufferedInputStream
import java.io.InputStream
import java.util.ArrayList
import java.util.Date
import java.util.HashMap
import java.util.Iterator
import java.util.LinkedHashMap
import java.util.List
import org.eclipse.emf.ecore.EObject
import org.eclipse.emf.ecore.resource.Resource
import org.eclipse.osbp.utils.entitymock.ABaseMockEntity
import org.eclipse.osbp.utils.entitymock.ABaseMockObject
import org.eclipse.osbp.utils.entitymock.ABaseMockResource
import org.eclipse.osbp.utils.entitymock.AEntityMockDataGenerator
import org.eclipse.osbp.utils.entitymock.IEntityMockDataDbFiller
import org.eclipse.osbp.utils.entitymock.IEntityMockDataGenerator
import org.eclipse.osbp.utils.entitymock.Iterators
import org.eclipse.osbp.utils.entitymock.MockedEntityDto
import org.eclipse.osbp.xtext.addons.AdvancedJvmModelGenerator
import org.eclipse.osbp.xtext.basic.generator.BasicDslGeneratorUtils
import org.eclipse.osbp.xtext.entitymock.EntityMockModel
import org.eclipse.osbp.xtext.entitymock.EntityMockPackage
import org.eclipse.osbp.xtext.entitymock.jvmmodel.EntityMockDSLJvmModelInferrer
import org.eclipse.xtext.generator.IFileSystemAccess
import org.eclipse.xtext.xbase.compiler.GeneratorConfig
import org.eclipse.xtext.xbase.compiler.ImportManager
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.eclipse.osbp.utils.blob.component.BlobTypingAPI
import org.eclipse.osbp.utils.blob.component.BlobUpload
class EntityMockDslGenerator extends AdvancedJvmModelGenerator {
// @Inject extension JvmTypeReferenceBuilder
@Inject extension BasicDslGeneratorUtils
override doGenerate(Resource input, IFileSystemAccess fsa) {
val model = input.getContents().get(0) as EntityMockModel
for (pckg : model.packages) {
pckg.generateOsgiInf(fsa)
}
super.doGenerate(input, fsa)
}
/**
* Generate an OSGI INF xml file defining the generated Entity Mock Data Generator via Declarative Service
* @param pckg the package defining the generator
* @param fsa file system access
*/
def void generateOsgiInf(EntityMockPackage pckg, IFileSystemAccess fsa) {
val generatorName = '''«EntityMockDSLJvmModelInferrer.getEntityMockName(pckg)».«EntityMockDSLJvmModelInferrer.ENTITY_MOCK_GENERATOR»'''
var str = '''
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" immediate="true" name="«generatorName»">
<implementation class="«generatorName»"/>
<service>
<provide interface="«IEntityMockDataGenerator.canonicalName»"/>
</service>
</scr:component>
'''
fsa.generateFile('''../OSGI-INF/«generatorName».xml''', str)
}
/**
* add all relevant Java import statements for necessary classes
*/
override createAppendable(EObject context, ImportManager importManager, GeneratorConfig config) {
// required to initialize the needed builder to avoid deprecated methods
builder = context.eResource
// ---------
addImportFor(importManager, _typeReferenceBuilder
, Iterator
, Iterators.DateIterator
, Iterators.IntegerIterator
, ABaseMockEntity
, ABaseMockObject
, ABaseMockResource
, AEntityMockDataGenerator
, MockedEntityDto
, Date
, ArrayList
, HashMap
, LinkedHashMap
, List
, BlobTypingAPI
, BlobUpload
, InputStream
, BufferedInputStream
, Logger
, LoggerFactory
, IEntityMockDataDbFiller
)
super.createAppendable(context, importManager, config)
}
}