mirror of
https://github.com/OpenBankProject/OBP-API.git
synced 2026-02-06 17:17:09 +00:00
refactor/clean the connector generator code
This commit is contained in:
parent
144f8283ec
commit
2da41e6df8
@ -1,49 +0,0 @@
|
||||
package code.bankconnectors
|
||||
|
||||
import scala.concurrent.Future
|
||||
import scala.reflect.runtime.{universe => ru}
|
||||
|
||||
object CommonsCaseClassGenerator extends App {
|
||||
|
||||
def extractReturnModel(tp: ru.Type): ru.Type = {
|
||||
if (tp.typeArgs.isEmpty) {
|
||||
tp
|
||||
} else {
|
||||
extractReturnModel(tp.typeArgs(0))
|
||||
}
|
||||
}
|
||||
|
||||
private val mirror: ru.Mirror = ru.runtimeMirror(this.getClass.getClassLoader)
|
||||
private val clazz: ru.ClassSymbol = mirror.typeOf[Connector].typeSymbol.asClass
|
||||
private val retureFutureMethods: Iterable[ru.Type] = mirror.typeOf[Connector].decls.filter(symbol => {
|
||||
val isMethod = symbol.isMethod && !symbol.asMethod.isVal && !symbol.asMethod.isVar && !symbol.asMethod.isConstructor
|
||||
isMethod
|
||||
}).map(it => it.asMethod.returnType)
|
||||
.filter(it => it <:< ru.typeOf[Future[_]])
|
||||
|
||||
val returnModels: Iterable[ru.Type] = retureFutureMethods
|
||||
.map(extractReturnModel)
|
||||
.filter(it => {
|
||||
val symbol = it.typeSymbol
|
||||
val isAbstract = symbol.isAbstract
|
||||
val isOurClass = symbol.fullName.matches("(code\\.|com.openbankproject\\.).+")
|
||||
isAbstract && isOurClass
|
||||
})
|
||||
.toSet
|
||||
|
||||
returnModels.map(_.typeSymbol.fullName).foreach(it => println(s"import $it"))
|
||||
|
||||
def mkClass(tp: ru.Type) = {
|
||||
val varibles = tp.decls.map(it => s"${it.name} :${it.typeSignature.typeSymbol.name}").mkString(", \n ")
|
||||
|
||||
s"""
|
||||
|case class ${tp.typeSymbol.name}Commons(
|
||||
| $varibles) extends ${tp.typeSymbol.name}
|
||||
|object ${tp.typeSymbol.name}Commons extends Converter[${tp.typeSymbol.name}, ${tp.typeSymbol.name}Commons]
|
||||
""".stripMargin
|
||||
}
|
||||
// private val str: String = ru.typeOf[Bank].decls.map(it => s"${it.name} :${it.typeSignature.typeSymbol.name}").mkString(", \n")
|
||||
returnModels.map(mkClass).foreach(println)
|
||||
println()
|
||||
|
||||
}
|
||||
@ -1,8 +1,6 @@
|
||||
package code.bankconnectors
|
||||
|
||||
import java.lang.reflect.Method
|
||||
|
||||
import code.api.util.{CallContext, CustomJsonFormats, OptionalFieldSerializer, OBPQueryParam}
|
||||
import code.api.util.{CallContext, CustomJsonFormats, OBPQueryParam, OptionalFieldSerializer}
|
||||
import com.openbankproject.commons.ExecutionContext.Implicits.global
|
||||
import com.openbankproject.commons.dto.{InBoundTrait, OutInBoundTransfer}
|
||||
import com.openbankproject.commons.model.TopicTrait
|
||||
@ -13,43 +11,12 @@ import net.liftweb.json.JsonDSL._
|
||||
import net.liftweb.json.{Formats, JObject, JValue}
|
||||
import net.sf.cglib.proxy.{Enhancer, MethodInterceptor, MethodProxy}
|
||||
import org.apache.commons.lang3.StringUtils
|
||||
|
||||
import java.lang.reflect.Method
|
||||
import scala.concurrent.Future
|
||||
import scala.reflect.runtime.universe
|
||||
import scala.reflect.ManifestFactory
|
||||
import scala.reflect.runtime.universe
|
||||
|
||||
object ConnectorUtils {
|
||||
|
||||
/**
|
||||
* //def getAdapterInfo(callContext: Option[CallContext]) : Future[Box[(InboundAdapterInfoInternal, Option[CallContext])]] = ???
|
||||
* //def validateAndCheckIbanNumber(iban: String, callContext: Option[CallContext]): OBPReturnType[Box[IbanChecker]] = ???
|
||||
*
|
||||
* This method will only extact the first return class from the method, this is the OBP pattern.
|
||||
* so we can use it for gernerate the commons case class.
|
||||
*
|
||||
* eg: getAdapterInfo --> return InboundAdapterInfoInternal
|
||||
* validateAndCheckIbanNumber -->return IbanChecker
|
||||
*/
|
||||
def extractReturnModel(tp: universe.Type): universe.Type = {
|
||||
if (tp.typeArgs.isEmpty) {
|
||||
tp
|
||||
} else {
|
||||
extractReturnModel(tp.typeArgs(0))
|
||||
}
|
||||
}
|
||||
|
||||
val mirror: universe.Mirror = universe.runtimeMirror(this.getClass.getClassLoader)
|
||||
val clazz: universe.ClassSymbol = mirror.typeOf[Connector].typeSymbol.asClass
|
||||
val connectorDecls= mirror.typeOf[Connector].decls
|
||||
val connectorDeclsMethods= connectorDecls.filter(symbol => {
|
||||
val isMethod = symbol.isMethod && !symbol.asMethod.isVal && !symbol.asMethod.isVar && !symbol.asMethod.isConstructor && !symbol.isProtected
|
||||
isMethod})
|
||||
val connectorDeclsMethodsReturnOBPRequiredType = connectorDeclsMethods
|
||||
.map(it => it.asMethod)
|
||||
.filter(it => {
|
||||
extractReturnModel(it.returnType).typeSymbol.fullName.matches("((code\\.|com.openbankproject\\.).+)|(scala\\.Boolean)") //to make sure, it returned the OBP class and Boolean.
|
||||
})
|
||||
|
||||
|
||||
lazy val proxyConnector: Connector = {
|
||||
val excludeProxyMethods = Set("getDynamicEndpoints", "dynamicEntityProcess", "setAccountHolder", "updateUserAccountViewsOld")
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package code.bankconnectors.akka
|
||||
|
||||
import code.bankconnectors.ConnectorBuilderUtil._
|
||||
import code.bankconnectors.generator.ConnectorBuilderUtil._
|
||||
|
||||
import scala.language.postfixOps
|
||||
|
||||
|
||||
@ -0,0 +1,33 @@
|
||||
package code.bankconnectors.generator
|
||||
|
||||
import code.bankconnectors.generator.ConnectorBuilderUtil._
|
||||
|
||||
import scala.reflect.runtime.{universe => ru}
|
||||
|
||||
object CommonsCaseClassGenerator extends App {
|
||||
|
||||
val returnModels: Iterable[ru.Type] = connectorDeclsMethodsReturnOBPRequiredType
|
||||
.map(it => it.asMethod.returnType)
|
||||
.filter(it => {
|
||||
val symbol = it.typeSymbol
|
||||
val isAbstract = symbol.isAbstract
|
||||
isAbstract //Depends here, maybe no need this guard for some commons classes.
|
||||
})
|
||||
.toSet
|
||||
|
||||
returnModels.map(_.typeSymbol.fullName).foreach(it => println(s"import $it"))
|
||||
|
||||
def mkClass(tp: ru.Type) = {
|
||||
val varibles = tp.decls.map(it => s"${it.name} :${it.typeSignature.typeSymbol.name}").mkString(", \n ")
|
||||
|
||||
s"""
|
||||
|case class ${tp.typeSymbol.name}Commons(
|
||||
| $varibles) extends ${tp.typeSymbol.name}
|
||||
|object ${tp.typeSymbol.name}Commons extends Converter[${tp.typeSymbol.name}, ${tp.typeSymbol.name}Commons]
|
||||
""".stripMargin
|
||||
}
|
||||
// private val str: String = ru.typeOf[Bank].decls.map(it => s"${it.name} :${it.typeSignature.typeSymbol.name}").mkString(", \n")
|
||||
returnModels.map(mkClass).foreach(println)
|
||||
println()
|
||||
|
||||
}
|
||||
@ -1,16 +1,15 @@
|
||||
package code.bankconnectors
|
||||
package code.bankconnectors.generator
|
||||
|
||||
import java.io.File
|
||||
import java.util.Date
|
||||
|
||||
import code.api.util.{APIUtil, CallContext}
|
||||
import code.api.util.CodeGenerateUtils.createDocExample
|
||||
import code.api.util.{APIUtil, CallContext}
|
||||
import code.bankconnectors.Connector
|
||||
import code.bankconnectors.vSept2018.KafkaMappedConnector_vSept2018
|
||||
import com.openbankproject.commons.util.ReflectUtils
|
||||
import org.apache.commons.io.FileUtils
|
||||
import org.apache.commons.lang3.StringUtils.uncapitalize
|
||||
|
||||
import scala.collection.immutable.List
|
||||
import java.io.File
|
||||
import java.util.Date
|
||||
import scala.language.postfixOps
|
||||
import scala.reflect.runtime.universe._
|
||||
import scala.reflect.runtime.{universe => ru}
|
||||
@ -31,9 +30,38 @@ object ConnectorBuilderUtil {
|
||||
// if(ctClass != null) ctClass.detach()
|
||||
}
|
||||
|
||||
private val mirror: ru.Mirror = ru.runtimeMirror(getClass().getClassLoader)
|
||||
private val clazz: ru.ClassSymbol = ru.typeOf[Connector].typeSymbol.asClass
|
||||
/**
|
||||
* //def getAdapterInfo(callContext: Option[CallContext]) : Future[Box[(InboundAdapterInfoInternal, Option[CallContext])]] = ???
|
||||
* //def validateAndCheckIbanNumber(iban: String, callContext: Option[CallContext]): OBPReturnType[Box[IbanChecker]] = ???
|
||||
*
|
||||
* This method will only extact the first return class from the method, this is the OBP pattern.
|
||||
* so we can use it for gernerate the commons case class.
|
||||
*
|
||||
* eg: getAdapterInfo --> return InboundAdapterInfoInternal
|
||||
* validateAndCheckIbanNumber -->return IbanChecker
|
||||
*/
|
||||
def extractReturnModel(tp: ru.Type): ru.Type = {
|
||||
if (tp.typeArgs.isEmpty) {
|
||||
tp
|
||||
} else {
|
||||
extractReturnModel(tp.typeArgs(0))
|
||||
}
|
||||
}
|
||||
|
||||
val mirror: ru.Mirror = ru.runtimeMirror(this.getClass.getClassLoader)
|
||||
val clazz: ru.ClassSymbol = mirror.typeOf[Connector].typeSymbol.asClass
|
||||
val connectorDecls: MemberScope = mirror.typeOf[Connector].decls
|
||||
val connectorDeclsMethods: Iterable[Symbol] = connectorDecls.filter(symbol => {
|
||||
val isMethod = symbol.isMethod && !symbol.asMethod.isVal && !symbol.asMethod.isVar && !symbol.asMethod.isConstructor && !symbol.isProtected
|
||||
isMethod})
|
||||
val connectorDeclsMethodsReturnOBPRequiredType: Iterable[MethodSymbol] = connectorDeclsMethods
|
||||
.map(it => it.asMethod)
|
||||
.filter(it => {
|
||||
extractReturnModel(it.returnType).typeSymbol.fullName.matches("((code\\.|com.openbankproject\\.).+)|(scala\\.Boolean)") //to make sure, it returned the OBP class and Boolean.
|
||||
})
|
||||
|
||||
private val classMirror: ru.ClassMirror = mirror.reflectClass(clazz)
|
||||
|
||||
/*
|
||||
* generateMethods and buildMethods has the same function, only responseExpression parameter type
|
||||
* different, because overload method can't compile for different responseExpression parameter.
|
||||
@ -1,6 +1,6 @@
|
||||
package code.bankconnectors
|
||||
package code.bankconnectors.generator
|
||||
|
||||
import code.bankconnectors.ConnectorUtils._
|
||||
import code.bankconnectors.generator.ConnectorBuilderUtil._
|
||||
|
||||
object InOutCaseClassGenerator extends App {
|
||||
|
||||
@ -1,12 +1,11 @@
|
||||
package code.bankconnectors.rabbitmq.Adapter
|
||||
|
||||
import code.api.ResourceDocs1_4_0.MessageDocsSwaggerDefinitions.{outboundAdapterAuthInfo, successStatus}
|
||||
import code.api.ResourceDocs1_4_0.MessageDocsSwaggerDefinitions.successStatus
|
||||
import code.api.util.APIUtil.MessageDoc
|
||||
import code.api.util.CustomJsonFormats.formats
|
||||
import code.api.util.{APIUtil, NewStyle, OptionalFieldSerializer}
|
||||
import code.bankconnectors.{Connector, ConnectorBuilderUtil}
|
||||
import code.bankconnectors.Connector.connector
|
||||
import code.bankconnectors.ConnectorBuilderUtil._
|
||||
import code.api.util.{APIUtil, NewStyle}
|
||||
import code.bankconnectors.generator.ConnectorBuilderUtil
|
||||
import code.bankconnectors.generator.ConnectorBuilderUtil._
|
||||
import code.bankconnectors.rabbitmq.RabbitMQConnector_vOct2024
|
||||
import com.openbankproject.commons.model.{Status, TopicTrait}
|
||||
import com.openbankproject.commons.util.Functions
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package code.bankconnectors.rabbitmq
|
||||
|
||||
import code.bankconnectors.ConnectorBuilderUtil._
|
||||
import code.bankconnectors.generator.ConnectorBuilderUtil._
|
||||
import net.liftweb.util.StringHelpers
|
||||
|
||||
import scala.language.postfixOps
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package code.bankconnectors.rest
|
||||
|
||||
import code.bankconnectors.ConnectorBuilderUtil._
|
||||
import code.bankconnectors.generator.ConnectorBuilderUtil._
|
||||
|
||||
import scala.language.postfixOps
|
||||
|
||||
|
||||
@ -7,7 +7,7 @@ import code.api.ResourceDocs1_4_0.MessageDocsSwaggerDefinitions.successStatus
|
||||
import code.api.util.APIUtil.MessageDoc
|
||||
import code.api.util.CustomJsonFormats.formats
|
||||
import code.api.util.{APIUtil, OptionalFieldSerializer}
|
||||
import code.bankconnectors.ConnectorBuilderUtil._
|
||||
import code.bankconnectors.generator.ConnectorBuilderUtil._
|
||||
import com.openbankproject.commons.model.Status
|
||||
import com.openbankproject.commons.util.Functions
|
||||
import net.liftweb.json
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package code.bankconnectors.storedprocedure
|
||||
|
||||
import code.bankconnectors.ConnectorBuilderUtil._
|
||||
import code.bankconnectors.generator.ConnectorBuilderUtil._
|
||||
import net.liftweb.util.StringHelpers
|
||||
|
||||
import scala.language.postfixOps
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package code.bankconnectors.vMay2019
|
||||
|
||||
import code.bankconnectors.ConnectorBuilderUtil._
|
||||
import code.bankconnectors.generator.ConnectorBuilderUtil._
|
||||
|
||||
import scala.collection.immutable.List
|
||||
import scala.language.postfixOps
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package code.bankconnectors.vSept2018
|
||||
|
||||
import code.bankconnectors.ConnectorBuilderUtil._
|
||||
import code.bankconnectors.generator.ConnectorBuilderUtil._
|
||||
|
||||
import scala.collection.immutable.List
|
||||
import scala.language.postfixOps
|
||||
|
||||
Loading…
Reference in New Issue
Block a user