blob: 7231dcf767a6ba701d73ae6468c37515a9850efd [file] [log] [blame]
Simon Huntd2747a02015-04-30 22:41:16 -07001/*
2 * Copyright 2015 Open Networking Laboratory
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package org.onosproject.ui;
17
18import com.fasterxml.jackson.databind.ObjectMapper;
19import com.fasterxml.jackson.databind.node.ObjectNode;
20
21/**
22 * Abstraction of an entity that handles a specific request from the
23 * user interface client.
24 *
25 * @see UiMessageHandlerTwo
26 */
27public abstract class RequestHandler {
28
29 protected static final ObjectMapper MAPPER = new ObjectMapper();
30
31 private final String eventType;
32 private UiMessageHandlerTwo parent;
33
34
35 public RequestHandler(String eventType) {
36 this.eventType = eventType;
37 }
38
39 // package private
40 void setParent(UiMessageHandlerTwo parent) {
41 this.parent = parent;
42 }
43
44 /**
45 * Returns the event type that this handler handles.
46 *
47 * @return event type
48 */
49 public String eventType() {
50 return eventType;
51 }
52
53 /**
54 * Processes the incoming message payload from the client.
55 *
56 * @param sid message sequence identifier
57 * @param payload request message payload
58 */
59 public abstract void process(long sid, ObjectNode payload);
60
61
62
63 // ===================================================================
64 // === Convenience methods...
65
66 /**
67 * Returns implementation of the specified service class.
68 *
69 * @param serviceClass service class
70 * @param <T> type of service
71 * @return implementation class
72 * @throws org.onlab.osgi.ServiceNotFoundException if no implementation found
73 */
74 protected <T> T get(Class<T> serviceClass) {
75 return parent.directory().get(serviceClass);
76 }
77
78 /**
79 * Sends a message back to the client.
80 *
81 * @param eventType message event type
82 * @param sid message sequence identifier
83 * @param payload message payload
84 */
85 protected void sendMessage(String eventType, long sid, ObjectNode payload) {
86 parent.connection().sendMessage(eventType, sid, payload);
87 }
88
89 /**
90 * Sends a message back to the client.
91 * Here, the message is preformatted; the assumption is it has its
92 * eventType, sid and payload attributes already filled in.
93 *
94 * @param message the message to send
95 */
96 protected void sendMessage(ObjectNode message) {
97 parent.connection().sendMessage(message);
98 }
99
100 /**
101 * Allows one request handler to pass the event on to another for
102 * further processing.
103 * Note that the message handlers must be defined in the same parent.
104 *
105 * @param eventType event type
106 * @param sid sequence identifier
107 * @param payload message payload
108 */
109 protected void chain(String eventType, long sid, ObjectNode payload) {
110 parent.exec(eventType, sid, payload);
111 }
112
113 // ===================================================================
114
115
116 // FIXME : Javadocs
117 protected String string(ObjectNode node, String key) {
118 return JsonUtils.string(node, key);
119 }
120
121 protected String string(ObjectNode node, String key, String defValue) {
122 return JsonUtils.string(node, key, defValue);
123 }
124
125}