aboutsummaryrefslogtreecommitdiffstats
path: root/bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/client/sdno/SDNOValidatorImpl.java
blob: d37e2bc70f15aa733b28b6bb26ae541a54a213c6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package org.openecomp.mso.client.sdno;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Optional;

import org.openecomp.mso.client.dmaap.Consumer;
import org.openecomp.mso.client.dmaap.DmaapConsumer;
import org.openecomp.mso.client.dmaap.DmaapPublisher;
import org.openecomp.mso.client.exceptions.SDNOException;
import org.openecomp.mso.jsonpath.JsonPathUtil;

public class SDNOValidatorImpl implements SDNOValidator, Consumer {

	private final static String aafUserName = "something";
	private final static String clientName = "MSO";
	private final static String healthDiagnosticPath = "body.output.response-healthdiagnostic";
	private final static String producerFilePath = "";
	private String uuid;
	private boolean continuePolling = true;
	@Override
	public void healthDiagnostic(String vnfName, String uuid) {
		//Query A&AI data
		// setup SDNO Entity
		//Call SDNO for Health Diagnostic
		//create producer file for MRClient https://wiki.web.att.com/display/MessageRouter/DMaaP_MR_JavaReferenceClient
		//  final MRBatchingPublisher pub = MRClientFactory.createBatchingPublisher(producerFilePath);
		//	pub.send("Mypartitionkey",JSON.toString(object));
		//create consumer file for MRClient https://wiki.web.att.com/display/MessageRouter/DMaaP_MR_JavaReferenceClient
		//check for error in subscription feed filter via jsonpath 
		//block and continue to poll waiting for response
	}

	protected SDNO buildRequestDiagnostic(String vnfName, String uuid, String oamIp) {
		
		Input input = new Input();
		SDNO parentRequest = new SDNO();
		Body body = new Body();
		parentRequest.setBody(body);
		parentRequest.setNodeType("vPE");
		parentRequest.setOperation("health-diagnostic");
		
		body.setInput(input);
		
		RequestHealthDiagnostic request = new RequestHealthDiagnostic();
		request.setRequestClientName(clientName);
		request.setRequestNodeName(vnfName);
		request.setRequestNodeIp(oamIp); //generic-vnf oam ip
		request.setRequestUserId(aafUserName); //mech id?
		request.setRequestId(uuid); //something to identify this request by for polling
		
		input.setRequestHealthDiagnostic(request);
		
		return parentRequest;
	}
	protected void submitRequest(String json) throws FileNotFoundException, IOException, InterruptedException {
		DmaapPublisher publisher = new DmaapPublisher(this.producerFilePath);
		publisher.send(json);
	}
	protected boolean pollForResponse(DmaapConsumer consumer, String uuid) throws Exception {
		this.uuid = uuid;
		return consumer.consume(this);
	}
	
	@Override
	public boolean continuePolling() {
		return continuePolling;
	}
	
	@Override
	public void stopProcessingMessages() {
		continuePolling = false;
	}
	@Override
	public void processMessage(String message) throws Exception {
		if (isHealthDiagnostic(message, this.getRequestId())) {
			if (!healthDiagnosticSuccessful(message)) {
				Optional<String> statusMessage = this.getStatusMessage(message);
				if (statusMessage.isPresent()) {
					throw new SDNOException(statusMessage.get());
				} else {
					throw new SDNOException();
				}
			} else {
				stopProcessingMessages();
			}
		}
	}
	
	@Override
	public boolean isAccepted(String message) {
		if (isResultInfo(message)) {
			Optional<String> code = isAccepted(message, this.getRequestId());
			if (code.isPresent()) {
				if ("202".equals(code.get())) {
					return true;
				} else {
					//TODO check other statuses 400 and 500
				}
			} else {
				//TODO throw error
			}
		}
		
		return false;
	}
	
	@Override
	public String getRequestId() {
		return uuid;
	}
	
	protected Optional<String> isAccepted(String json, String uuid) {
		return JsonPathUtil.getInstance().locateResult(json, String.format("$.result-info[?(@.status=='ACCEPTED' && @.request-id=='%s')].code", uuid));
	}
	
	protected boolean isResultInfo(String json) {
		return JsonPathUtil.getInstance().pathExists(json, "$[?(@.result-info)]");
	}
	
	protected boolean isHealthDiagnostic(String json, String uuid) {
		return JsonPathUtil.getInstance().pathExists(json, String.format("$[?(@.result-info.request-id=='%s')].%s", uuid, healthDiagnosticPath));
	}
	
	protected boolean healthDiagnosticSuccessful(String json) {
		return JsonPathUtil.getInstance().pathExists(json, "$." + healthDiagnosticPath + "[?(@.response-status=='Success')]");
	}
	
	protected Optional<String> getStatusMessage(String json) {
		return JsonPathUtil.getInstance().locateResult(json, "$." + healthDiagnosticPath + ".response-details-json");
	}
	
}