Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagejava
titlePseudo Code
linenumberstrue
collapsetrue
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