diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/capability/CapabilityRegisterFactory.kt b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/capability/CapabilityRegisterFactory.kt index 56e54be7..2caf4060 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/capability/CapabilityRegisterFactory.kt +++ b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/capability/CapabilityRegisterFactory.kt @@ -34,7 +34,8 @@ class CapabilityRegisterFactory : AgentBaseFactory() { val capabilityValue = capabilityType.getAnnotation(Capability::class.java).value val proxy = createCapabilityProxy(capabilityType, capabilityValue, methodsRouterTable) val methods = buildCapabilityMethodMap(capabilityType, capabilityValue, methodBindingMap) - agentContext.addCapability(capabilityValue, proxy, methods) + val cores = buildCapabilityCoreMap(capabilityValue, coreInstances) + agentContext.addCapability(capabilityValue, proxy, cores, methods) } } @@ -124,6 +125,17 @@ class CapabilityRegisterFactory : AgentBaseFactory() { return methods } + private fun buildCapabilityCoreMap( + capabilityValue: String, + coreInstances: Map, Any> + ): Map, Any> { + return coreInstances + .filterKeys { coreType -> + coreType.getAnnotation(CapabilityCore::class.java)?.value == capabilityValue + } + .toMap() + } + private fun invokeMethod(instance: Any, method: Method, args: Array): Any? { return try { method.invoke(instance, *args) diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/context/AgentContext.kt b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/context/AgentContext.kt index 239608b4..0fd9b2ac 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/context/AgentContext.kt +++ b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/context/AgentContext.kt @@ -35,8 +35,13 @@ object AgentContext { _modules[name] = module } - fun addCapability(capability: String, instance: Any, methods: Map) { - val newImpl = CapabilityImplementation(instance.javaClass, instance, methods) + fun addCapability( + capability: String, + instance: Any, + cores: Map, Any>, + methods: Map + ) { + val newImpl = CapabilityImplementation(instance.javaClass, instance, cores, methods) _capabilities[capability] = newImpl } @@ -62,6 +67,7 @@ object AgentContext { data class CapabilityImplementation( val clazz: Class<*>, val instance: Any, + val cores: Map, Any>, val methods: Map ) }