mirror of
https://github.com/OpenBankProject/OBP-API.git
synced 2026-02-06 15:06:50 +00:00
#add_swagger_gen add class scan tool
This commit is contained in:
parent
11f9b74d70
commit
e19823226f
7
pom.xml
7
pom.xml
@ -373,7 +373,12 @@
|
||||
<artifactId>flexmark-all</artifactId>
|
||||
<version>0.40.8</version>
|
||||
</dependency>
|
||||
|
||||
<!--scala utils, for type scan-->
|
||||
<dependency>
|
||||
<groupId>org.clapper</groupId>
|
||||
<artifactId>classutil_${scala.version}</artifactId>
|
||||
<version>1.4.0</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
||||
@ -270,6 +270,7 @@ class Boot extends MdcLoggable {
|
||||
}
|
||||
|
||||
// Add the various API versions
|
||||
ScannedApis.versionMapScannedApis.keys.foreach(enableVersionIfAllowed)
|
||||
enableVersionIfAllowed(ApiVersion.v1_2_1)
|
||||
enableVersionIfAllowed(ApiVersion.v1_3_0)
|
||||
enableVersionIfAllowed(ApiVersion.v1_4_0)
|
||||
@ -279,11 +280,9 @@ class Boot extends MdcLoggable {
|
||||
enableVersionIfAllowed(ApiVersion.v3_0_0)
|
||||
enableVersionIfAllowed(ApiVersion.v3_1_0)
|
||||
enableVersionIfAllowed(ApiVersion.berlinGroupV1)
|
||||
enableVersionIfAllowed(ApiVersion.berlinGroupV1_3)
|
||||
enableVersionIfAllowed(ApiVersion.ukOpenBankingV200)
|
||||
enableVersionIfAllowed(ApiVersion.apiBuilder)
|
||||
|
||||
|
||||
// TODO Wrap these with enableVersionIfAllowed as well
|
||||
//add management apis
|
||||
LiftRules.statelessDispatch.append(ImporterAPI)
|
||||
|
||||
@ -10,7 +10,7 @@ import code.api.cache.Caching
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag._
|
||||
import code.api.util.ApiRole._
|
||||
import code.api.util.{APIUtil, ApiVersion}
|
||||
import code.api.util.{APIUtil, ApiVersion, ScannedApiVersion, ScannedApis}
|
||||
import code.api.v1_4_0.{APIMethods140, JSONFactory1_4_0, OBPAPI1_4_0}
|
||||
import code.api.v2_2_0.{APIMethods220, OBPAPI2_2_0}
|
||||
import code.api.v3_0_0.OBPAPI3_0_0
|
||||
@ -115,7 +115,6 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
|
||||
val resourceDocs = requestedApiVersion match {
|
||||
case ApiVersion.`apiBuilder` => OBP_APIBuilder.allResourceDocs
|
||||
case ApiVersion.`ukOpenBankingV200` => OBP_UKOpenBanking_200.allResourceDocs
|
||||
case ApiVersion.`berlinGroupV1_3` => OBP_BERLIN_GROUP_1_3.allResourceDocs
|
||||
case ApiVersion.`berlinGroupV1` => OBP_BERLIN_GROUP_1.allResourceDocs
|
||||
case ApiVersion.v3_1_0 => OBPAPI3_1_0.allResourceDocs
|
||||
case ApiVersion.v3_0_0 => OBPAPI3_0_0.allResourceDocs
|
||||
@ -125,6 +124,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
|
||||
case ApiVersion.v1_4_0 => Implementations1_4_0.resourceDocs ++ Implementations1_3_0.resourceDocs ++ Implementations1_2_1.resourceDocs
|
||||
case ApiVersion.v1_3_0 => Implementations1_3_0.resourceDocs ++ Implementations1_2_1.resourceDocs
|
||||
case ApiVersion.v1_2_1 => Implementations1_2_1.resourceDocs
|
||||
case version: ScannedApiVersion => ScannedApis.versionMapScannedApis(version).allResourceDocs
|
||||
case _ => ArrayBuffer.empty[ResourceDoc]
|
||||
}
|
||||
|
||||
@ -133,7 +133,6 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
|
||||
val versionRoutes = requestedApiVersion match {
|
||||
case ApiVersion.`apiBuilder` => OBP_APIBuilder.routes
|
||||
case ApiVersion.`ukOpenBankingV200` => OBP_UKOpenBanking_200.routes
|
||||
case ApiVersion.`berlinGroupV1_3` => OBP_BERLIN_GROUP_1_3.routes
|
||||
case ApiVersion.`berlinGroupV1` => OBP_BERLIN_GROUP_1.routes
|
||||
case ApiVersion.v3_1_0 => OBPAPI3_1_0.routes
|
||||
case ApiVersion.v3_0_0 => OBPAPI3_0_0.routes
|
||||
@ -143,6 +142,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
|
||||
case ApiVersion.v1_4_0 => OBPAPI1_4_0.routes
|
||||
case ApiVersion.v1_3_0 => OBPAPI1_3_0.routes
|
||||
case ApiVersion.v1_2_1 => OBPAPI1_2_1.routes
|
||||
case version: ScannedApiVersion => ScannedApis.versionMapScannedApis(version).routes
|
||||
case _ => Nil
|
||||
}
|
||||
|
||||
@ -166,8 +166,8 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
|
||||
{
|
||||
case ApiVersion.`apiBuilder` => ;
|
||||
case ApiVersion.`ukOpenBankingV200` => ;
|
||||
case ApiVersion.`berlinGroupV1_3` => ;
|
||||
case ApiVersion.`berlinGroupV1` => ;
|
||||
case version: ScannedApiVersion => ;
|
||||
case _ => activePlusLocalResourceDocs ++= localResourceDocs
|
||||
}
|
||||
// activePlusLocalResourceDocs ++= localResourceDocs
|
||||
@ -183,23 +183,23 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
|
||||
x <- activePlusLocalResourceDocs
|
||||
// This is the "implemented in" url
|
||||
url = x.implementedInApiVersion match {
|
||||
case ApiVersion.`berlinGroupV1_3` => s"/berlin-group/${x.implementedInApiVersion.vDottedApiVersion}${x.requestUrl}"
|
||||
case ApiVersion.`berlinGroupV1` => s"/berlin-group/${x.implementedInApiVersion.vDottedApiVersion}${x.requestUrl}"
|
||||
case ApiVersion.`ukOpenBankingV200` => s"/open-banking/${x.implementedInApiVersion.vDottedApiVersion}${x.requestUrl}"
|
||||
case ApiVersion.`apiBuilder` => s"/api-builder/${x.implementedInApiVersion.vDottedApiVersion}${x.requestUrl}"
|
||||
// We add the /obp/vX prefix here
|
||||
case version: ScannedApiVersion => s"/${version.urlPrefix}/${x.implementedInApiVersion.vDottedApiVersion}${x.requestUrl}"
|
||||
case _ => s"/obp/${x.implementedInApiVersion.vDottedApiVersion}${x.requestUrl}"
|
||||
}
|
||||
y = x.copy(isFeatured = getIsFeaturedApi(x.partialFunctionName),
|
||||
specialInstructions = getSpecialInstructions(x.partialFunctionName),
|
||||
requestUrl = url,
|
||||
specifiedUrl = x.implementedInApiVersion match {
|
||||
case ApiVersion.`berlinGroupV1_3` => Some(url)
|
||||
case ApiVersion.`berlinGroupV1` => Some(url)
|
||||
case ApiVersion.`ukOpenBankingV200` => Some(url)
|
||||
case ApiVersion.`apiBuilder` => Some(url)
|
||||
// We add the /obp/vX prefix here - but this is the requested API version by the resource docs endpoint. i.e. we know this endpoint
|
||||
// is also available here as well as the requestUrl. See the resource doc for resource doc!
|
||||
case version: ScannedApiVersion => Some(url)
|
||||
case _ => Some(s"/obp/${requestedApiVersion.vDottedApiVersion}${x.requestUrl}")
|
||||
}
|
||||
|
||||
|
||||
@ -1,10 +1,9 @@
|
||||
package code.api.builder.AccountInformationServiceAISApi
|
||||
|
||||
import code.api.APIFailureNewStyle
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.berlin.group.v1_3.{JSONFactory_BERLIN_GROUP_1_3, JvalueCaseClass, OBP_BERLIN_GROUP_1_3}
|
||||
import net.liftweb.json
|
||||
import net.liftweb.json._
|
||||
import code.api.berlin.group.v1_3.JSONFactory_BERLIN_GROUP_1_3
|
||||
import code.api.util.APIUtil.{defaultBankId, _}
|
||||
import code.api.util.{ApiVersion, NewStyle}
|
||||
import code.api.util.ErrorMessages._
|
||||
@ -17,13 +16,14 @@ import code.views.Views
|
||||
import net.liftweb.common.Full
|
||||
import net.liftweb.http.rest.RestHelper
|
||||
import com.github.dwickern.macros.NameOf.nameOf
|
||||
|
||||
import scala.collection.immutable.Nil
|
||||
import scala.collection.mutable.ArrayBuffer
|
||||
import scala.concurrent.ExecutionContext.Implicits.global
|
||||
import scala.concurrent.Future
|
||||
|
||||
object APIMethods_AccountInformationServiceAISApi extends RestHelper {
|
||||
val apiVersion: ApiVersion = ApiVersion.berlinGroupV1_3
|
||||
val apiVersion: ApiVersion = OBP_BERLIN_GROUP_1_3.version
|
||||
val resourceDocs = ArrayBuffer[ResourceDoc]()
|
||||
val apiRelations = ArrayBuffer[ApiRelation]()
|
||||
|
||||
|
||||
@ -1,10 +1,9 @@
|
||||
package code.api.builder.CommonServicesApi
|
||||
|
||||
import code.api.APIFailureNewStyle
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.berlin.group.v1_3.{JSONFactory_BERLIN_GROUP_1_3, JvalueCaseClass, OBP_BERLIN_GROUP_1_3}
|
||||
import net.liftweb.json
|
||||
import net.liftweb.json._
|
||||
import code.api.berlin.group.v1_3.JSONFactory_BERLIN_GROUP_1_3
|
||||
import code.api.util.APIUtil.{defaultBankId, _}
|
||||
import code.api.util.{ApiVersion, NewStyle}
|
||||
import code.api.util.ErrorMessages._
|
||||
@ -17,13 +16,14 @@ import code.views.Views
|
||||
import net.liftweb.common.Full
|
||||
import net.liftweb.http.rest.RestHelper
|
||||
import com.github.dwickern.macros.NameOf.nameOf
|
||||
|
||||
import scala.collection.immutable.Nil
|
||||
import scala.collection.mutable.ArrayBuffer
|
||||
import scala.concurrent.ExecutionContext.Implicits.global
|
||||
import scala.concurrent.Future
|
||||
|
||||
object APIMethods_CommonServicesApi extends RestHelper {
|
||||
val apiVersion: ApiVersion = ApiVersion.berlinGroupV1_3
|
||||
val apiVersion: ApiVersion = OBP_BERLIN_GROUP_1_3.version
|
||||
val resourceDocs = ArrayBuffer[ResourceDoc]()
|
||||
val apiRelations = ArrayBuffer[ApiRelation]()
|
||||
val codeContext = CodeContext(resourceDocs, apiRelations)
|
||||
|
||||
@ -1,10 +1,9 @@
|
||||
package code.api.builder.ConfirmationOfFundsServicePIISApi
|
||||
|
||||
import code.api.APIFailureNewStyle
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.berlin.group.v1_3.{JSONFactory_BERLIN_GROUP_1_3, JvalueCaseClass, OBP_BERLIN_GROUP_1_3}
|
||||
import net.liftweb.json
|
||||
import net.liftweb.json._
|
||||
import code.api.berlin.group.v1_3.JSONFactory_BERLIN_GROUP_1_3
|
||||
import code.api.util.APIUtil.{defaultBankId, _}
|
||||
import code.api.util.{ApiVersion, NewStyle}
|
||||
import code.api.util.ErrorMessages._
|
||||
@ -17,13 +16,14 @@ import code.views.Views
|
||||
import net.liftweb.common.Full
|
||||
import net.liftweb.http.rest.RestHelper
|
||||
import com.github.dwickern.macros.NameOf.nameOf
|
||||
|
||||
import scala.collection.immutable.Nil
|
||||
import scala.collection.mutable.ArrayBuffer
|
||||
import scala.concurrent.ExecutionContext.Implicits.global
|
||||
import scala.concurrent.Future
|
||||
|
||||
object APIMethods_ConfirmationOfFundsServicePIISApi extends RestHelper {
|
||||
val apiVersion: ApiVersion = ApiVersion.berlinGroupV1_3
|
||||
val apiVersion: ApiVersion = OBP_BERLIN_GROUP_1_3.version
|
||||
val resourceDocs = ArrayBuffer[ResourceDoc]()
|
||||
val apiRelations = ArrayBuffer[ApiRelation]()
|
||||
protected implicit def JvalueToSuper(what: JValue): JvalueCaseClass = JvalueCaseClass(what)
|
||||
|
||||
@ -38,31 +38,30 @@ import code.api.builder.ConfirmationOfFundsServicePIISApi.APIMethods_Confirmatio
|
||||
import code.api.builder.PaymentInitiationServicePISApi.APIMethods_PaymentInitiationServicePISApi
|
||||
import code.api.builder.SigningBasketsApi.APIMethods_SigningBasketsApi
|
||||
import code.api.util.APIUtil.{OBPEndpoint, ResourceDoc, getAllowedEndpoints}
|
||||
import code.api.util.ApiVersion
|
||||
import code.api.util.{APIUtil, ApiVersion, ScannedApiVersion, ScannedApis}
|
||||
import code.util.Helper.MdcLoggable
|
||||
|
||||
import scala.collection.immutable.Nil
|
||||
import scala.collection.mutable.ArrayBuffer
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
This file defines which endpoints from all the versions are available in v1
|
||||
*/
|
||||
object OBP_BERLIN_GROUP_1_3 extends OBPRestHelper with MdcLoggable with ScannedApis {
|
||||
|
||||
|
||||
object OBP_BERLIN_GROUP_1_3 extends OBPRestHelper with MdcLoggable {
|
||||
|
||||
val version = ApiVersion.berlinGroupV1_3
|
||||
override val apiVersion = ScannedApiVersion("berlin-group", "ScannedApiVersion", "BG PSD2 API")
|
||||
val versionStatus = "DRAFT"
|
||||
|
||||
private val endpointsOf1_3 = // Implementations1_3.endpoints ++
|
||||
private val endpoints =
|
||||
APIMethods_AccountInformationServiceAISApi.endpoints ++
|
||||
APIMethods_CommonServicesApi.endpoints ++
|
||||
APIMethods_ConfirmationOfFundsServicePIISApi.endpoints ++
|
||||
APIMethods_PaymentInitiationServicePISApi.endpoints ++
|
||||
APIMethods_SigningBasketsApi.endpoints
|
||||
|
||||
val allResourceDocs = //Implementations1_3.resourceDocs ++
|
||||
|
||||
override val allResourceDocs: ArrayBuffer[ResourceDoc] =
|
||||
APIMethods_AccountInformationServiceAISApi.resourceDocs ++
|
||||
APIMethods_CommonServicesApi.resourceDocs ++
|
||||
APIMethods_ConfirmationOfFundsServicePIISApi.resourceDocs ++
|
||||
@ -74,13 +73,12 @@ object OBP_BERLIN_GROUP_1_3 extends OBPRestHelper with MdcLoggable {
|
||||
}
|
||||
|
||||
// Filter the possible endpoints by the disabled / enabled Props settings and add them together
|
||||
val routes : List[OBPEndpoint] = getAllowedEndpoints(endpointsOf1_3, allResourceDocs)
|
||||
override val routes : List[OBPEndpoint] = getAllowedEndpoints(endpoints, allResourceDocs)
|
||||
|
||||
// Make them available for use!
|
||||
routes.foreach(route => {
|
||||
oauthServe(("berlin-group" / version.vDottedApiVersion()).oPrefix{route}, findResourceDoc(route))
|
||||
oauthServe((apiVersion.urlPrefix / version.vDottedApiVersion()).oPrefix{route}, findResourceDoc(route))
|
||||
})
|
||||
|
||||
logger.info(s"version $version has been run! There are ${routes.length} routes.")
|
||||
|
||||
}
|
||||
|
||||
@ -1,10 +1,9 @@
|
||||
package code.api.builder.PaymentInitiationServicePISApi
|
||||
|
||||
import code.api.APIFailureNewStyle
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.berlin.group.v1_3.{JSONFactory_BERLIN_GROUP_1_3, JvalueCaseClass, OBP_BERLIN_GROUP_1_3}
|
||||
import net.liftweb.json
|
||||
import net.liftweb.json._
|
||||
import code.api.berlin.group.v1_3.JSONFactory_BERLIN_GROUP_1_3
|
||||
import code.api.util.APIUtil.{defaultBankId, _}
|
||||
import code.api.util.{ApiVersion, NewStyle}
|
||||
import code.api.util.ErrorMessages._
|
||||
@ -17,13 +16,14 @@ import code.views.Views
|
||||
import net.liftweb.common.Full
|
||||
import net.liftweb.http.rest.RestHelper
|
||||
import com.github.dwickern.macros.NameOf.nameOf
|
||||
|
||||
import scala.collection.immutable.Nil
|
||||
import scala.collection.mutable.ArrayBuffer
|
||||
import scala.concurrent.ExecutionContext.Implicits.global
|
||||
import scala.concurrent.Future
|
||||
|
||||
object APIMethods_PaymentInitiationServicePISApi extends RestHelper {
|
||||
val apiVersion: ApiVersion = ApiVersion.berlinGroupV1_3
|
||||
val apiVersion: ApiVersion = OBP_BERLIN_GROUP_1_3.version
|
||||
val resourceDocs = ArrayBuffer[ResourceDoc]()
|
||||
val apiRelations = ArrayBuffer[ApiRelation]()
|
||||
protected implicit def JvalueToSuper(what: JValue): JvalueCaseClass = JvalueCaseClass(what)
|
||||
|
||||
@ -1,10 +1,9 @@
|
||||
package code.api.builder.SigningBasketsApi
|
||||
|
||||
import code.api.APIFailureNewStyle
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.berlin.group.v1_3.{JSONFactory_BERLIN_GROUP_1_3, JvalueCaseClass, OBP_BERLIN_GROUP_1_3}
|
||||
import net.liftweb.json
|
||||
import net.liftweb.json._
|
||||
import code.api.berlin.group.v1_3.JSONFactory_BERLIN_GROUP_1_3
|
||||
import code.api.util.APIUtil.{defaultBankId, _}
|
||||
import code.api.util.{ApiVersion, NewStyle}
|
||||
import code.api.util.ErrorMessages._
|
||||
@ -17,13 +16,14 @@ import code.views.Views
|
||||
import net.liftweb.common.Full
|
||||
import net.liftweb.http.rest.RestHelper
|
||||
import com.github.dwickern.macros.NameOf.nameOf
|
||||
|
||||
import scala.collection.immutable.Nil
|
||||
import scala.collection.mutable.ArrayBuffer
|
||||
import scala.concurrent.ExecutionContext.Implicits.global
|
||||
import scala.concurrent.Future
|
||||
|
||||
object APIMethods_SigningBasketsApi extends RestHelper {
|
||||
val apiVersion: ApiVersion = ApiVersion.berlinGroupV1_3
|
||||
val apiVersion: ApiVersion = OBP_BERLIN_GROUP_1_3.version
|
||||
val resourceDocs = ArrayBuffer[ResourceDoc]()
|
||||
val apiRelations = ArrayBuffer[ApiRelation]()
|
||||
protected implicit def JvalueToSuper(what: JValue): JvalueCaseClass = JvalueCaseClass(what)
|
||||
|
||||
@ -1656,9 +1656,9 @@ Returns a string showed to the developer
|
||||
case ApiVersion.v3_0_0 => LiftRules.statelessDispatch.append(v3_0_0.OBPAPI3_0_0)
|
||||
case ApiVersion.v3_1_0 => LiftRules.statelessDispatch.append(v3_1_0.OBPAPI3_1_0)
|
||||
case ApiVersion.`berlinGroupV1` => LiftRules.statelessDispatch.append(OBP_BERLIN_GROUP_1)
|
||||
case ApiVersion.`berlinGroupV1_3` => LiftRules.statelessDispatch.append(OBP_BERLIN_GROUP_1_3)
|
||||
case ApiVersion.`ukOpenBankingV200` => LiftRules.statelessDispatch.append(OBP_UKOpenBanking_200)
|
||||
case ApiVersion.`apiBuilder` => LiftRules.statelessDispatch.append(OBP_APIBuilder)
|
||||
case version: ScannedApiVersion => LiftRules.statelessDispatch.append(ScannedApis.versionMapScannedApis(version))
|
||||
case _ => logger.info(s"There is no ${version.toString}")
|
||||
}
|
||||
|
||||
|
||||
@ -53,12 +53,7 @@ object ApiVersion {
|
||||
override def toString() = "v1"
|
||||
//override def toString() = "berlin_group_v1" // TODO don't want to confuse with OBP
|
||||
}
|
||||
case class BerlinGroupV1_3() extends ApiVersion {
|
||||
override def toString() = "v1_3"
|
||||
//override def toString() = "berlin_group_v1" // TODO don't want to confuse with OBP
|
||||
}
|
||||
lazy val berlinGroupV1 = BerlinGroupV1()
|
||||
lazy val berlinGroupV1_3 = BerlinGroupV1_3()
|
||||
case class UKOpenBankingV200() extends ApiVersion {
|
||||
override def toString() = "v2_0"
|
||||
// override def toString() = "uk_v2.0.0" // TODO don't want to confuse with OBP
|
||||
@ -95,10 +90,9 @@ object ApiVersion {
|
||||
openIdConnect1 ::
|
||||
sandbox ::
|
||||
berlinGroupV1 ::
|
||||
berlinGroupV1_3 ::
|
||||
ukOpenBankingV200 ::
|
||||
apiBuilder::
|
||||
Nil
|
||||
ScannedApis.versionMapScannedApis.keysIterator.toList
|
||||
|
||||
def valueOf(value: String): ApiVersion = {
|
||||
versions.filter(_.vDottedApiVersion == value) match {
|
||||
|
||||
@ -1,15 +1,19 @@
|
||||
package code.api.util
|
||||
|
||||
import code.api.util.APIUtil.{ApiRelation, ResourceDoc}
|
||||
import code.api.util.APIUtil.{ApiRelation, OBPEndpoint, ResourceDoc}
|
||||
import code.util.ClassScanUtils
|
||||
import net.liftweb.http.LiftRules
|
||||
|
||||
import scala.collection.mutable.ArrayBuffer
|
||||
|
||||
trait ScannedApis {
|
||||
trait ScannedApis extends LiftRules.DispatchPF {
|
||||
val apiVersion: ScannedApiVersion
|
||||
val resourceDocs: ArrayBuffer[ResourceDoc]
|
||||
val apiRelations: ArrayBuffer[ApiRelation]
|
||||
lazy val version: ApiVersion = this.apiVersion
|
||||
val allResourceDocs: ArrayBuffer[ResourceDoc]
|
||||
val routes: List[OBPEndpoint]
|
||||
// val apiRelations: ArrayBuffer[ApiRelation]
|
||||
}
|
||||
|
||||
object ScannedApis {
|
||||
|
||||
lazy val versionMapScannedApis: Map[ScannedApiVersion, ScannedApis] = ClassScanUtils.getImplementClass(classOf[ScannedApis]).map(it=> (it.apiVersion, it)).toMap
|
||||
}
|
||||
|
||||
43
src/main/scala/code/util/ClassScanUtils.scala
Normal file
43
src/main/scala/code/util/ClassScanUtils.scala
Normal file
@ -0,0 +1,43 @@
|
||||
package code.util
|
||||
|
||||
import java.io.File
|
||||
|
||||
import code.api.berlin.group.v1_3.OBP_BERLIN_GROUP_1_3
|
||||
import code.model.dataAccess.ViewImpl
|
||||
import net.liftweb.mapper.LongKeyedMapper
|
||||
import org.apache.commons.lang3.StringUtils
|
||||
import org.clapper.classutil.ClassInfo
|
||||
import org.clapper.classutil.ClassFinder
|
||||
|
||||
import scala.reflect.runtime.universe.TypeTag
|
||||
|
||||
object ClassScanUtils {
|
||||
|
||||
lazy val finder = ClassFinder(List(getClassPath(this.getClass)))
|
||||
|
||||
def companion[U:TypeTag](name : String) : U = {
|
||||
val className = if(name.endsWith("$")) name else name + "$"
|
||||
Class.forName(className).getDeclaredField("MODULE$").get(null).asInstanceOf[U]
|
||||
}
|
||||
def getImplementClass[T:TypeTag](clazz: Class[T]) = {
|
||||
//finder.getClasses().filter(_.implements(clazz.getName)).map(_.name).map(companion[T](_)).toList
|
||||
List(OBP_BERLIN_GROUP_1_3)
|
||||
}
|
||||
private[this] def getClassPath(clazz: Class[_]) = {
|
||||
val classFile = "/" + clazz.getName.replace('.', '/') + ".class"
|
||||
val uri = clazz.getResource(classFile).toURI.toString
|
||||
val path = uri.replaceFirst("^(jar:|file:)?(.*)\\!?\\Q" + classFile + "\\E$", "$2")
|
||||
new File(path)
|
||||
}
|
||||
|
||||
def getMappers(packageName:String = ""): Seq[ClassInfo] = {
|
||||
val mapperInterface = "net.liftweb.mapper.LongKeyedMapper"
|
||||
val infoes = finder.getClasses().filter(it => it.interfaces.contains(mapperInterface))
|
||||
if(StringUtils.isNoneBlank()) {
|
||||
infoes.filter(classInfo => classInfo.name.startsWith(packageName))
|
||||
} else {
|
||||
infoes
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user