This commit is contained in:
Suresh, Kamlesh 2021-03-09 14:22:13 -05:00
parent 931d10f45a
commit c369958f5e
3 changed files with 7 additions and 17 deletions

View File

@ -10,15 +10,10 @@ import Foundation
public protocol ClientParameterModelProtocol: ModelProtocol { public protocol ClientParameterModelProtocol: ModelProtocol {
var type: String { get } var type: String { get }
var isFlatMap: Bool? { get }
} }
public extension ClientParameterModelProtocol { public extension ClientParameterModelProtocol {
var isFlatMap: Bool? {
return false
}
var type: String { var type: String {
get { Self.identifier } get { Self.identifier }
} }

View File

@ -15,15 +15,15 @@ public protocol ClientParameterProtocol {
init(_ clientParameterModel:ClientParameterModelProtocol) init(_ clientParameterModel:ClientParameterModelProtocol)
var isFlatMap: Bool { get } var isFlatMap: Bool { get }
var clientParameterModel:ClientParameterModelProtocol? { get set} var clientParameterModel: ClientParameterModelProtocol? { get set }
func defaultErrorString() -> String func defaultErrorString() -> String
func fetchClientParameters(requestParameters: [String: Any], timingOutIn timeout: Double, completionHandler:@escaping (AnyHashable?) -> ()) func fetchClientParameters(requestParameters: [String: Any], timingOutIn timeout: Double, completionHandler:@escaping (AnyHashable?) -> ())
/// The handler should call this methos to pass the paramter back to the caller. /// The handler should call this method to pass the parameter back to the caller.
func returnParameters(_ paramter: [String: AnyHashable]?, completionHandler: @escaping (AnyHashable?) -> ()) func returnParameters(_ paramter: [String: AnyHashable]?, completionHandler: @escaping (AnyHashable?) -> ())
/// Default parameter for timout scenarios. It will use the protocol extension method bydefault. Can override to send custom values. /// Default parameter for timeout scenarios. It will use the protocol extension method bydefault. Can override to send custom values.
func defaultValue() -> AnyHashable func defaultValue() -> AnyHashable
} }
@ -38,7 +38,7 @@ public extension ClientParameterProtocol {
return [Self.name: defaultErrorString()] return [Self.name: defaultErrorString()]
} }
init(_ clientParameterModel:ClientParameterModelProtocol) { init(_ clientParameterModel: ClientParameterModelProtocol) {
self.init() self.init()
self.clientParameterModel = clientParameterModel self.clientParameterModel = clientParameterModel
} }

View File

@ -58,7 +58,6 @@ import Foundation
let parametersWorkQueue = DispatchQueue(label: "com.mva.clientparameter") let parametersWorkQueue = DispatchQueue(label: "com.mva.clientparameter")
let group = DispatchGroup() let group = DispatchGroup()
//let defaultErrorString = "failed_to_collect."
// Dispatch setup on queue to ensure setup is complete before completion callbacks. // Dispatch setup on queue to ensure setup is complete before completion callbacks.
parametersWorkQueue.async(group: group, qos: .userInitiated) { [weak self] in parametersWorkQueue.async(group: group, qos: .userInitiated) { [weak self] in
@ -76,14 +75,12 @@ import Foundation
var mergedParametersList: [String: AnyHashable] { var mergedParametersList: [String: AnyHashable] {
var parametersList: [String: AnyHashable] = [:] var parametersList: [String: AnyHashable] = [:]
var index = 0 for (index, item) in returnedList.enumerated() {
for item in returnedList {
if item.count == 0, let defaultValue = parameterHandlerList[index].defaultValue() as? [String: AnyHashable] { if item.count == 0, let defaultValue = parameterHandlerList[index].defaultValue() as? [String: AnyHashable] {
parametersList = parametersList.merging(defaultValue) { (_, new) in new } parametersList = parametersList.merging(defaultValue) { (_, new) in new }
} else { } else {
parametersList = parametersList.merging(item) { (_, new) in new } parametersList = parametersList.merging(item) { (_, new) in new }
} }
index += 1
} }
return parametersList return parametersList
} }
@ -106,10 +103,8 @@ import Foundation
parametersWorkQueue.asyncAfter(deadline: .now() + .seconds(Int(timeout)), execute: timeoutWorkItem) parametersWorkQueue.asyncAfter(deadline: .now() + .seconds(Int(timeout)), execute: timeoutWorkItem)
// Setup the parameter execution. // Setup the parameter execution.
var index = -1 for (index, parameterHandler) in parameterHandlerList.enumerated() {
for parameterHandler in parameterHandlerList { group.enter()
group.enter()
index += 1
parameterHandler.fetchClientParameters(requestParameters: requestParameters, parameterHandler.fetchClientParameters(requestParameters: requestParameters,
timingOutIn: timeout) { (receivedParameter) in timingOutIn: timeout) { (receivedParameter) in
// Queue the results for merge. // Queue the results for merge.