renaming of son generation script
This commit is contained in:
parent
492cda3f52
commit
b36a2965dc
|
|
@ -40,8 +40,6 @@ import javax.lang.model.element.Modifier
|
|||
//TODO: NUMBER/BOOLEAN enums in future
|
||||
//TODO: maybe save md5-hashes to check if files/scheme changed
|
||||
|
||||
//TODO: setup generation by map yaml->package
|
||||
|
||||
class Types {
|
||||
|
||||
static final TypeName LOGAN_SQUARE_ENUM = ClassName.bestGuess("ru.touchin.templates.logansquare.LoganSquareEnum")
|
||||
|
|
@ -829,6 +827,65 @@ class FileUtils {
|
|||
}
|
||||
}
|
||||
|
||||
static void generateJsonModelsCode(final File generatedModelsDirectory, final String schemeFilePath,
|
||||
final String modelsPackage, final String projectDir) {
|
||||
if (schemeFilePath == null) {
|
||||
return
|
||||
}
|
||||
|
||||
File schemeFile = new File(schemeFilePath)
|
||||
if (!schemeFile.exists()) {
|
||||
schemeFile = new File(projectDir, schemeFilePath)
|
||||
}
|
||||
if (!schemeFile.exists()) {
|
||||
throw new Exception("JSON models scheme file not found at '" + schemeFilePath)
|
||||
}
|
||||
|
||||
final Yaml yaml = new Yaml()
|
||||
final Map<String, SchemeObject> schemeObjects = new HashMap<>()
|
||||
schemeObjects.put("Map", new ImportObject("java.util.Map"))
|
||||
schemeObjects.put("List", new ImportObject("java.util.List"))
|
||||
schemeObjects.put("DateTime", new ImportObject("org.joda.time.DateTime"))
|
||||
|
||||
for (final Object data : yaml.loadAll(new FileReader(schemeFile))) {
|
||||
if (!(data instanceof Map)) {
|
||||
throw new Exception("Yaml file '" + schemeFile + "' is invalid")
|
||||
}
|
||||
|
||||
for (final Map.Entry<String, Object> entry : data.entrySet()) {
|
||||
if (entry.key.equals(ImportObject.GROUP_NAME)) {
|
||||
for (String importString : (Iterable) entry.value) {
|
||||
final ImportObject importObject = new ImportObject(importString)
|
||||
schemeObjects.put(importObject.name, importObject)
|
||||
}
|
||||
} else if (entry.key.startsWith(EnumObject.PREFIX)) {
|
||||
final EnumObject enumObject = new EnumObject(entry.key.substring(EnumObject.PREFIX.length()), entry.value)
|
||||
schemeObjects.put(enumObject.name, enumObject)
|
||||
} else if (entry.key.startsWith(ClassObject.PREFIX)) {
|
||||
final ClassObject classObject = new ClassObject(entry.key.substring(ClassObject.PREFIX.length()), entry.value)
|
||||
schemeObjects.put(classObject.name, classObject)
|
||||
} else {
|
||||
throw new Exception("Unexpected scheme object: " + entry.key)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (final SchemeObject schemeObject : schemeObjects.values()) {
|
||||
if (schemeObject instanceof ClassObject) {
|
||||
try {
|
||||
schemeObject.resolveFieldsInfo(schemeObjects)
|
||||
} catch (final Exception exception) {
|
||||
throw new Exception("Error on parsing class '" + schemeObject.name + "' : " + exception.getMessage())
|
||||
}
|
||||
}
|
||||
try {
|
||||
schemeObject.writeToFile(generatedModelsDirectory, schemeObjects, modelsPackage)
|
||||
} catch (final Exception exception) {
|
||||
throw new Exception("Error on generating code for '" + schemeObject.name + "' : " + exception.getMessage())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
android.applicationVariants.all {
|
||||
|
|
@ -838,66 +895,21 @@ android.applicationVariants.all {
|
|||
* Generating Java classes describing JSON models from specific YAML scheme.
|
||||
*/
|
||||
def generateJsonModelsTask = tasks.create("generateJsonModels${variant.name}") << {
|
||||
String modelsPackage = android.extensions.findByName("apiGeneratorModelsPackage")
|
||||
String schemeFilePath = android.extensions.findByName("apiGeneratorSchemePath")
|
||||
if (modelsPackage == null) {
|
||||
modelsPackage = android.defaultConfig.applicationId + '.logic.api.model'
|
||||
}
|
||||
final List<String> jsonModelsMapping = android.extensions.findByName("jsonModelsMapping")
|
||||
|
||||
if (schemeFilePath == null) {
|
||||
return
|
||||
}
|
||||
|
||||
File schemeFile = new File(schemeFilePath)
|
||||
if (!schemeFile.exists()) {
|
||||
schemeFile = new File("${project.projectDir}", schemeFilePath)
|
||||
}
|
||||
if (!schemeFile.exists()) {
|
||||
throw new Exception("JSON models scheme file not found at '" + schemeFilePath + "' or at '${project.projectDir}/" + schemeFilePath + "'")
|
||||
}
|
||||
FileUtils.purgeDirectory(generatedModelsDirectory)
|
||||
|
||||
final Yaml yaml = new Yaml()
|
||||
final Map<String, SchemeObject> schemeObjects = new HashMap<>()
|
||||
schemeObjects.put("Map", new ImportObject("java.util.Map"))
|
||||
schemeObjects.put("List", new ImportObject("java.util.List"))
|
||||
schemeObjects.put("DateTime", new ImportObject("org.joda.time.DateTime"))
|
||||
|
||||
for (final Object data : yaml.loadAll(new FileReader(schemeFile))) {
|
||||
if (!(data instanceof Map)) {
|
||||
throw new Exception("Yaml file '" + fileName + "' is invalid")
|
||||
}
|
||||
|
||||
for (final Map.Entry<String, Object> entry : data.entrySet()) {
|
||||
if (entry.key.equals(ImportObject.GROUP_NAME)) {
|
||||
for (String importString : (Iterable) entry.value) {
|
||||
final ImportObject importObject = new ImportObject(importString)
|
||||
schemeObjects.put(importObject.name, importObject)
|
||||
}
|
||||
} else if (entry.key.startsWith(EnumObject.PREFIX)) {
|
||||
final EnumObject enumObject = new EnumObject(entry.key.substring(EnumObject.PREFIX.length()), entry.value)
|
||||
schemeObjects.put(enumObject.name, enumObject)
|
||||
} else if (entry.key.startsWith(ClassObject.PREFIX)) {
|
||||
final ClassObject classObject = new ClassObject(entry.key.substring(ClassObject.PREFIX.length()), entry.value)
|
||||
schemeObjects.put(classObject.name, classObject)
|
||||
} else {
|
||||
throw new Exception("Unexpected scheme object: " + entry.key)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (final SchemeObject schemeObject : schemeObjects.values()) {
|
||||
if (schemeObject instanceof ClassObject) {
|
||||
try {
|
||||
schemeObject.resolveFieldsInfo(schemeObjects)
|
||||
} catch (final Exception exception) {
|
||||
throw new Exception("Error on parsing class '" + schemeObject.name + "' : " + exception.getMessage())
|
||||
}
|
||||
}
|
||||
try {
|
||||
schemeObject.writeToFile(generatedModelsDirectory, schemeObjects, modelsPackage)
|
||||
} catch (final Exception exception) {
|
||||
throw new Exception("Error on generating code for '" + schemeObject.name + "' : " + exception.getMessage())
|
||||
for (final String jsonMapping : jsonModelsMapping) {
|
||||
final int indexOfDivider = jsonMapping.indexOf('->')
|
||||
if (indexOfDivider == -1) {
|
||||
FileUtils.generateJsonModelsCode(generatedModelsDirectory,
|
||||
jsonMapping.trim(),
|
||||
android.defaultConfig.applicationId + '.logic.model',
|
||||
"${project.projectDir}")
|
||||
} else {
|
||||
FileUtils.generateJsonModelsCode(generatedModelsDirectory,
|
||||
jsonMapping.substring(0, indexOfDivider).trim(),
|
||||
jsonMapping.substring(indexOfDivider + 2).trim(),
|
||||
"${project.projectDir}")
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue