diff --git a/obp-api/src/main/scala/code/bankconnectors/CommonsCaseClassGenerator.scala b/obp-api/src/main/scala/code/bankconnectors/CommonsCaseClassGenerator.scala deleted file mode 100644 index 6f2dc688e..000000000 --- a/obp-api/src/main/scala/code/bankconnectors/CommonsCaseClassGenerator.scala +++ /dev/null @@ -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() - -} diff --git a/obp-api/src/main/scala/code/bankconnectors/ConnectorUtils.scala b/obp-api/src/main/scala/code/bankconnectors/ConnectorUtils.scala index be1910056..655bb190f 100644 --- a/obp-api/src/main/scala/code/bankconnectors/ConnectorUtils.scala +++ b/obp-api/src/main/scala/code/bankconnectors/ConnectorUtils.scala @@ -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") diff --git a/obp-api/src/main/scala/code/bankconnectors/akka/AkkaConnectorBuilder.scala b/obp-api/src/main/scala/code/bankconnectors/akka/AkkaConnectorBuilder.scala index 4160146bc..1c1cc278c 100644 --- a/obp-api/src/main/scala/code/bankconnectors/akka/AkkaConnectorBuilder.scala +++ b/obp-api/src/main/scala/code/bankconnectors/akka/AkkaConnectorBuilder.scala @@ -1,6 +1,6 @@ package code.bankconnectors.akka -import code.bankconnectors.ConnectorBuilderUtil._ +import code.bankconnectors.generator.ConnectorBuilderUtil._ import scala.language.postfixOps diff --git a/obp-api/src/main/scala/code/bankconnectors/generator/CommonsCaseClassGenerator.scala b/obp-api/src/main/scala/code/bankconnectors/generator/CommonsCaseClassGenerator.scala new file mode 100644 index 000000000..122d526e2 --- /dev/null +++ b/obp-api/src/main/scala/code/bankconnectors/generator/CommonsCaseClassGenerator.scala @@ -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() + +} diff --git a/obp-api/src/main/scala/code/bankconnectors/ConnectorBuilderUtil.scala b/obp-api/src/main/scala/code/bankconnectors/generator/ConnectorBuilderUtil.scala similarity index 91% rename from obp-api/src/main/scala/code/bankconnectors/ConnectorBuilderUtil.scala rename to obp-api/src/main/scala/code/bankconnectors/generator/ConnectorBuilderUtil.scala index 79f6dee61..819c24ad8 100644 --- a/obp-api/src/main/scala/code/bankconnectors/ConnectorBuilderUtil.scala +++ b/obp-api/src/main/scala/code/bankconnectors/generator/ConnectorBuilderUtil.scala @@ -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. diff --git a/obp-api/src/main/scala/code/bankconnectors/InOutCaseClassGenerator.scala b/obp-api/src/main/scala/code/bankconnectors/generator/InOutCaseClassGenerator.scala similarity index 94% rename from obp-api/src/main/scala/code/bankconnectors/InOutCaseClassGenerator.scala rename to obp-api/src/main/scala/code/bankconnectors/generator/InOutCaseClassGenerator.scala index 38ad6e1b1..c223dcd51 100644 --- a/obp-api/src/main/scala/code/bankconnectors/InOutCaseClassGenerator.scala +++ b/obp-api/src/main/scala/code/bankconnectors/generator/InOutCaseClassGenerator.scala @@ -1,6 +1,6 @@ -package code.bankconnectors +package code.bankconnectors.generator -import code.bankconnectors.ConnectorUtils._ +import code.bankconnectors.generator.ConnectorBuilderUtil._ object InOutCaseClassGenerator extends App { diff --git a/obp-api/src/main/scala/code/bankconnectors/rabbitmq/Adapter/AdapterStubBuilder.scala b/obp-api/src/main/scala/code/bankconnectors/rabbitmq/Adapter/AdapterStubBuilder.scala index 48c228a20..3203a4199 100644 --- a/obp-api/src/main/scala/code/bankconnectors/rabbitmq/Adapter/AdapterStubBuilder.scala +++ b/obp-api/src/main/scala/code/bankconnectors/rabbitmq/Adapter/AdapterStubBuilder.scala @@ -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 diff --git a/obp-api/src/main/scala/code/bankconnectors/rabbitmq/RabbitMQConnectorBuilder.scala b/obp-api/src/main/scala/code/bankconnectors/rabbitmq/RabbitMQConnectorBuilder.scala index 7f72e4b79..dbea58c50 100644 --- a/obp-api/src/main/scala/code/bankconnectors/rabbitmq/RabbitMQConnectorBuilder.scala +++ b/obp-api/src/main/scala/code/bankconnectors/rabbitmq/RabbitMQConnectorBuilder.scala @@ -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 diff --git a/obp-api/src/main/scala/code/bankconnectors/rest/RestConnectorBuilder.scala b/obp-api/src/main/scala/code/bankconnectors/rest/RestConnectorBuilder.scala index b43bdc480..87d759845 100644 --- a/obp-api/src/main/scala/code/bankconnectors/rest/RestConnectorBuilder.scala +++ b/obp-api/src/main/scala/code/bankconnectors/rest/RestConnectorBuilder.scala @@ -1,6 +1,6 @@ package code.bankconnectors.rest -import code.bankconnectors.ConnectorBuilderUtil._ +import code.bankconnectors.generator.ConnectorBuilderUtil._ import scala.language.postfixOps diff --git a/obp-api/src/main/scala/code/bankconnectors/storedprocedure/MSsqlStoredProcedureBuilder.scala b/obp-api/src/main/scala/code/bankconnectors/storedprocedure/MSsqlStoredProcedureBuilder.scala index d75ce83b0..6e0f665d6 100644 --- a/obp-api/src/main/scala/code/bankconnectors/storedprocedure/MSsqlStoredProcedureBuilder.scala +++ b/obp-api/src/main/scala/code/bankconnectors/storedprocedure/MSsqlStoredProcedureBuilder.scala @@ -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 diff --git a/obp-api/src/main/scala/code/bankconnectors/storedprocedure/StoredProcedureConnectorBuilder.scala b/obp-api/src/main/scala/code/bankconnectors/storedprocedure/StoredProcedureConnectorBuilder.scala index 70c1aca18..af65f542d 100644 --- a/obp-api/src/main/scala/code/bankconnectors/storedprocedure/StoredProcedureConnectorBuilder.scala +++ b/obp-api/src/main/scala/code/bankconnectors/storedprocedure/StoredProcedureConnectorBuilder.scala @@ -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 diff --git a/obp-api/src/main/scala/code/bankconnectors/vMay2019/KafkaConnectorBuilder.scala b/obp-api/src/main/scala/code/bankconnectors/vMay2019/KafkaConnectorBuilder.scala index 87105f42d..d5d877994 100644 --- a/obp-api/src/main/scala/code/bankconnectors/vMay2019/KafkaConnectorBuilder.scala +++ b/obp-api/src/main/scala/code/bankconnectors/vMay2019/KafkaConnectorBuilder.scala @@ -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 diff --git a/obp-api/src/main/scala/code/bankconnectors/vSept2018/KafkaConnectorBuilder.scala b/obp-api/src/main/scala/code/bankconnectors/vSept2018/KafkaConnectorBuilder.scala index 488125a6d..b20dc3671 100644 --- a/obp-api/src/main/scala/code/bankconnectors/vSept2018/KafkaConnectorBuilder.scala +++ b/obp-api/src/main/scala/code/bankconnectors/vSept2018/KafkaConnectorBuilder.scala @@ -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