Api generator (#46)
This commit is contained in:
parent
43773a8a1f
commit
3004f0dde8
|
|
@ -0,0 +1,34 @@
|
|||
repositories {
|
||||
maven { url "http://dl.bintray.com/touchin/touchin-tools" }
|
||||
}
|
||||
|
||||
configurations {
|
||||
apigenerator
|
||||
}
|
||||
|
||||
dependencies {
|
||||
apigenerator 'ru.touchin:api-generator:1.1.1'
|
||||
}
|
||||
|
||||
android.applicationVariants.all {
|
||||
variant ->
|
||||
final File generatedModelsDirectory = new File("${project.buildDir}/generated/source/models/${variant.dirName}")
|
||||
|
||||
def generateJsonModelsTask = tasks.create("apiGenerator${variant.name}") << {
|
||||
def jarArgs = new ArrayList<String>()
|
||||
jarArgs.add(configurations.apigenerator.asPath)
|
||||
jarArgs.add("generate-client-code")
|
||||
jarArgs.add("--output-language")
|
||||
jarArgs.add("JAVA")
|
||||
jarArgs.add("--specification-path")
|
||||
jarArgs.add(rootProject.extensions.findByName("pathToApiSchemes"))
|
||||
jarArgs.add("--output-path")
|
||||
jarArgs.add("${generatedModelsDirectory.path}")
|
||||
jarArgs.add("--package-name")
|
||||
jarArgs.add("${applicationId}")
|
||||
javaexec { main = "-jar"; args = jarArgs; workingDir = file("${rootDir}") }
|
||||
}
|
||||
|
||||
generateJsonModelsTask.description = 'Generates Java classes for JSON models'
|
||||
variant.registerJavaGeneratingTask generateJsonModelsTask, generatedModelsDirectory
|
||||
}
|
||||
|
|
@ -46,7 +46,7 @@ ext.getIdeaFormatTask = { isAndroidProject, sources ->
|
|||
}
|
||||
|
||||
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
|
||||
inspectionPath = ['cmd', '/c', "${ideaPath}\\bin\\format.bat ${params.join(" ")}"]
|
||||
inspectionPath = ['cmd', '/c', "\"${ideaPath}\\bin\\format.bat\" ${params.join(" ")}"]
|
||||
} else {
|
||||
inspectionPath = ["$ideaPath/bin/format.sh"]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,7 +13,9 @@ gradle.projectsEvaluated {
|
|||
"-Xlint:deprecation" <<
|
||||
"-Xlint:finally" <<
|
||||
"-Xlint:overrides" <<
|
||||
"-Xlint:path"
|
||||
"-Xlint:path" <<
|
||||
"-Xlint:unchecked" <<
|
||||
"-Werror"
|
||||
}
|
||||
|
||||
def excludes = rootProject.extensions.findByName("staticAnalysisExcludes")
|
||||
|
|
|
|||
|
|
@ -0,0 +1,94 @@
|
|||
import groovy.json.JsonSlurper
|
||||
import groovy.xml.MarkupBuilder
|
||||
|
||||
task stringGenerator {
|
||||
final Map<String, String> languageMap = android.extensions.findByName("languageMap")
|
||||
|
||||
generate(languageMap)
|
||||
println("Strings generated!")
|
||||
}
|
||||
|
||||
private def generate(Map<String, String> sources) {
|
||||
if (sources == null || sources.isEmpty()) {
|
||||
throw new IOException("languageMap can't be null or empty")
|
||||
}
|
||||
Map jsonMap = getJsonsMap(sources)
|
||||
def diffs = calcDiffs(jsonMap)
|
||||
if (!diffs.isEmpty()) {
|
||||
printDiffs(diffs)
|
||||
throw new IllegalStateException("Strings source can't be different")
|
||||
}
|
||||
def defaultLang = getDefaultLangKey(sources)
|
||||
jsonMap.forEach { key, json ->
|
||||
|
||||
def sw = new StringWriter()
|
||||
def xml = new MarkupBuilder(sw)
|
||||
|
||||
xml.setDoubleQuotes(true)
|
||||
xml.mkp.xmlDeclaration(version: "1.0", encoding: "utf-8")
|
||||
xml.resources() {
|
||||
json.each {
|
||||
k, v ->
|
||||
string(name: "${k}", formatted: "false", "${v}".replace('\n', '\\n'))
|
||||
}
|
||||
}
|
||||
|
||||
def stringsFile = getFile(key, key == defaultLang)
|
||||
stringsFile.write(sw.toString(), "UTF-8")
|
||||
}
|
||||
}
|
||||
|
||||
private printDiffs(Map<?, ?> diffs) {
|
||||
def diffLog = new StringBuilder()
|
||||
diffs.forEach { k, v ->
|
||||
if (v.size() > 0) {
|
||||
diffLog.append("For $k was missed string keys: ${v.size()}\n")
|
||||
v.forEach {
|
||||
diffLog.append("\tString key: $it\n")
|
||||
}
|
||||
}
|
||||
}
|
||||
println(diffLog.toString())
|
||||
}
|
||||
|
||||
private static def calcDiffs(Map<String, Object> jsonsMap) {
|
||||
if (jsonsMap.size() == 1) {
|
||||
return [:]
|
||||
}
|
||||
def keys = jsonsMap.collectEntries {
|
||||
[(it.key): (it.value).keySet() as List]
|
||||
}
|
||||
def inclusive = keys.get(keys.keySet().first())
|
||||
def diffs = keys.collectEntries {
|
||||
[(it.key): inclusive - it.value.intersect(inclusive)]
|
||||
}.findAll { it.value.size() > 0 }
|
||||
return diffs
|
||||
}
|
||||
|
||||
private static Map<String, Object> getJsonsMap(Map sources) {
|
||||
return sources.collectEntries {
|
||||
[(it.key): new JsonSlurper().parseText(new File(it.value).text)]
|
||||
}
|
||||
}
|
||||
|
||||
private static File getFile(String key, boolean defaultLang) {
|
||||
if (defaultLang) {
|
||||
return new File("app/src/main/res/values/strings.xml")
|
||||
} else {
|
||||
def directory = new File("app/src/main/res/values-$key")
|
||||
if (!directory.exists()) {
|
||||
directory.mkdir()
|
||||
}
|
||||
return new File("app/src/main/res/values-$key/strings.xml")
|
||||
}
|
||||
}
|
||||
|
||||
private static String getDefaultLangKey(Map<String, String> sources) {
|
||||
def defaultLanguage = sources.find { it.value.contains("default") }
|
||||
if (defaultLanguage != null) {
|
||||
return defaultLanguage.key
|
||||
} else {
|
||||
throw new IOException("Can't find default language")
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -149,7 +149,7 @@
|
|||
<issue id="ExportedService" severity="error"/>
|
||||
<issue id="ExtraText" severity="error"/>
|
||||
<issue id="GetInstance" severity="error"/>
|
||||
<issue id="GifUsage" severity="error"/>
|
||||
<issue id="GifUsage" severity="warning"/>
|
||||
<issue id="GradleDependency" severity="error"/>
|
||||
<issue id="GradleDeprecated" severity="error"/>
|
||||
<issue id="GradleDynamicVersion" severity="error"/>
|
||||
|
|
|
|||
Loading…
Reference in New Issue