aboutsummaryrefslogtreecommitdiffstats
path: root/appc-event-listener/appc-event-listener-bundle/src/main/java/org/openecomp/appc/listener/demo/model/OutgoingMessage.java
blob: 24b40c78e9c6c8dcdd73ba90fb4040e4b96451a3 (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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
/*-
 * ============LICENSE_START=======================================================
 * openECOMP : APP-C
 * ================================================================================
 * Copyright (C) 2017 AT&T Intellectual Property. All rights
 * 						reserved.
 * ================================================================================
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * ============LICENSE_END=========================================================
 */

package org.openecomp.appc.listener.demo.model;

import java.net.InetAddress;
import java.security.SecureRandom;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

import org.json.JSONObject;
import org.openecomp.appc.listener.util.Mapper;
import org.openecomp.appc.util.Time;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize.Inclusion;

/**
 * This class represents a message being sent out to DMaaP by APPC to update listeners on the status of a request
 *
 */
@JsonSerialize(include = Inclusion.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class OutgoingMessage extends CommonMessage {

    public OutgoingMessage() {

    }

    public OutgoingMessage(IncomingMessage msg) {
    	setHeader(msg.getHeader());
    	setPayload(msg.getPayload());
//        setId(msg.getId());
//        setOriginalRequest(msg.getRequest());
//        setRequestClient(msg.getRequestClient());
//        setRequestTime(msg.getRequestTime());
//        setVmName(msg.getVmName());
//        setFromSystem(generateFrom());
//        setResponse(Status.PENDING);
//        setPolicyName(msg.getPolicyName());
//        setPolicyVersion(msg.getPolicyVersion());
//        setStartTime(msg.getStartTime());
    }
    
    private static final long serialVersionUID = -5447940920271469613L;
    /*
     * The status of the response
     */
    @JsonProperty("Status")
    private OutStatus status;

    /**
	 * @return the status
	 */
	public OutStatus getStatus() {
		return status;
	}

	/**
	 * @param status the status to set
	 */
	public void setStatus(OutStatus status) {
		this.status = status;
	}

	public void updateResponseTime() {
        SecureRandom rand = new SecureRandom();
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss.SSS");
        df.setTimeZone(TimeZone.getTimeZone("UTC"));
        String date = df.format(new Date(Time.utcTime()));
        //this.responseTime = String.format("%s%03d", date, rand.nextInt(1000));
    }

    public String generateFrom() {
        String name;
        try {
            InetAddress iAddress = InetAddress.getLocalHost();
            name = iAddress.getCanonicalHostName();
        } catch (Exception e) {
            // Could not get anything from the InetAddress
            name = "UnknownHost";
        }
        return "appc@" + name;
    }

    public JSONObject toResponse() {
        updateResponseTime();
        JSONObject json = Mapper.toJsonObject(this);

        if (!json.has("message")) {
            // If there is no message, parrot the status (response field)
            // TODO - Can this be removed for 1602 making message truely optional?
            //json.put("message", this.getResponse().toString());
        }

        // Removed duplication of status from message for 1602
        // json.put("message", String.format("%s: %s", request, json.get("message")));

        return json;
    }

//    @Override
//    public String toString() {
//        return String.format("%s - %s", getId(), getResponse());
//    }
    
    public static class OutStatus{
    	@JsonProperty("Code")
    	private String code;
    	
    	@JsonProperty("Value")
    	private String value;

		/**
		 * @return the code
		 */
		public String getCode() {
			return code;
		}

		/**
		 * @param code the code to set
		 */
		public void setCode(String code) {
			this.code = code;
		}

		/**
		 * @return the value
		 */
		public String getValue() {
			return value;
		}

		/**
		 * @param value the value to set
		 */
		public void setValue(String value) {
			this.value = value;
		}
    	
    }

	public void setResponse(Status newStatus) {
		if(this.status == null){
			this.status = new OutStatus();
		}
		
		switch (newStatus){
		case ACCEPTED:
			this.status.setValue(newStatus.getValue());
			this.status.setCode("100");
			break;

		case FAILURE:
			this.status.setValue(newStatus.getValue());
			this.status.setCode("500");
			break;

		case SUCCESS:
			this.status.setValue(newStatus.getValue());
			this.status.setCode("400");
			break;
		default:
			break;
			
		}
		
	}
}