some pseudo code IF property "CONFLICT_MANAGER_CLIENT_ENABLED" is set to "true" THEN
DEFINE class NetworkCmProxyDataServiceInterceptor which EXTENDS NetworkCmProxyDataServiceImpl
INJECT ConflictManagerApiClient conflictManagerApiClient
CREATE defaultPermitOnError AS boolean
// Define a method named writeResourceDataPassThroughRunningForCmHandle that overrides the method from the parent class
METHOD writeResourceDataPassThroughRunningForCmHandle(cmHandleId, resourceIdentifier, operationType, requestData, dataType, authorization)
targetFdn = CALL createTargetFdn(cmHandleId)
evaluationRequest = CALL createEvaluationRequest(cmHandleId, resourceIdentifier, targetFdn, requestData)
TRY
evaluatedResponse = CALL conflictManagerApiClient.evaluateRequest(evaluationRequest)
RETURN CALL processResponseFromConflictManager(evaluatedResponse, evaluationRequest, operationType, requestData, dataType, authorization)
CATCH ResourceAccessException WITH e
CALL log.error(CONVERT e TO String)
RETURN CALL checkDefaultDecision(evaluationRequest, operationType, requestData, dataType, authorization)
END TRY
END METHOD
METHOD createTargetFdn(String cmHandleId)
ncmpServiceCmHandle = CALL getNcmpServiceCmHandle(cmHandleId)
dmiProperties = CALL getDmiProperties ON ncmpServiceCmHandle
CREATE targetFdn AS new StringJoiner
IF dmiProperties contains key "targetDnPrefix" AND dmiProperties contains key "targetNode" THEN
CALL add(dmiProperties.get(targetDnPrefix)) ON targetFdn
CALL add(dmiProperties.get(targetNode)) ON targetFdn
RETURN targetFdn
ELSE
THROW InvalidPropertyException WITH (CmHandle.class, cmHandleId, "missing targetDnPrefix or targetNode from cmHandleProperties")
END IF
END METHOD
METHOD createEvaluationRequest(cmHandleId, resourceIdentifier, targetFdn, requestData)
CREATE evaluationRequest AS new EvaluationRequest
CALL evaluationRequest.cmHandleId(cmHandleId)
CALL evaluationRequest.resourceIdentifier(resourceIdentifier)
CALL evaluationRequest.targetFdn(targetFdn)
CALL evaluationRequest.requestData(requestData)
END METHOD
METHOD checkDefaultDecision(evaluationRequest, operationType, requestData, dataType, authorization)
IF defaultPermitOnError IS true THEN
CALL log.info(""Failed to get response from Conflict Manager for fields: cmHandleId: {}, resourceIdentifier: {}, targetFDN: {}, requestData: {}, default decision is permit",
evaluationRequest.getCmHandleId(),
evaluationRequest.getResourceIdentifier(),
evaluationRequest.getTargetFdn(),
requestData)
RETURN super.writeResourceDataPassThroughRunningForCmHandle(evaluationRequest.getCmHandleId(),
evaluationRequest.getResourceIdentifier(), operationType, requestData, dataType, authorization)
ELSE
CALL log.info("Failed to get response from Conflict Manager for fields: cmHandleId: {}, resourceIdentifier: {}, targetFDN: {}, requestData: {}, default decision is deny",
evaluationRequest.getCmHandleId(),
evaluationRequest.getResourceIdentifier(),
evaluationRequest.getTargetFdn(),
requestData)
THROW DataInUseException WITH ("Change request denied by Conflict Manager for reason: failed to get response from Conflict Manager, default decision is deny.",
"Check logs for details.")
END METHOD
METHOD processResponseFromConflictManager(evaluatedResponse, evaluationRequest, operationType, requestData, dataType, authorization)
IF evaluatedResponse.getDecision() NOT NULL AND evaluatedResponse.getDecision() EQUALS ResponseDecisionEnum.PERMIT THEN
RETURN super.writeResourceDataPassThroughRunningForCmHandle(evaluationRequest.getCmHandleId(),
evaluationRequest.getResourceIdentifier(), operationType, requestData, dataType, authorization)
ELSE IF evaluatedResponse.getDecision() NOT NULL AND evaluatedResponse.getDecision() EQUALS ResponseDecisionEnum.DENY THEN
CALL log.info("Change request denied by Conflict Manager for fields cmHandleId: {}, resourceIdentifier: {}, targetFDN: {}, requestData: {}",
evaluationRequest.getCmHandleId(),
evaluationRequest.getResourceIdentifier(),
evaluationRequest.getTargetFdn(),
requestData)
THROW DataInUseException WITH ("Change request denied by Conflict Manager for reason: " + evaluatedResponse.getReason(), "Check logs for details.")
ELSE IF evaluatedResponse.getDecision() NOT NULL AND evaluatedResponse.getDecision() EQUALS ResponseDecisionEnum.PREEMPT THEN
CALL log.info("Change request preempt by Conflict Manager for fields cmHandleId: {}, resourceIdentifier: {}, targetFDN: {}, requestData: {}",
evaluationRequest.getCmHandleId(),
evaluationRequest.getResourceIdentifier(),
evaluationRequest.getTargetFdn(),
requestData)
RETURN super.writeResourceDataPassThroughRunningForCmHandle(evaluationRequest.getCmHandleId(), evaluationRequest.getResourceIdentifier(), operationType, requestData, dataType, authorization)
ELSE
RETURN CALL checkDefaultDecision(evaluationRequest, operationType, requestData, dataType, authorization)
END METHOD |