blob: 7875aa4f12c1557f0d3415ccbcd56225a9315b9b [file] [log] [blame]
Ray Milkeyc95bb9d2015-01-06 10:28:24 -08001/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2015-present Open Networking Laboratory
Ray Milkeyc95bb9d2015-01-06 10:28:24 -08003 *
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.codec.impl;
17
18import org.onosproject.codec.CodecContext;
19import org.onosproject.codec.JsonCodec;
20import org.onosproject.net.ConnectPoint;
21import org.onosproject.net.intent.ConnectivityIntent;
22import org.onosproject.net.intent.PointToPointIntent;
23
24import com.fasterxml.jackson.databind.node.ObjectNode;
25
26import static com.google.common.base.Preconditions.checkNotNull;
Ray Milkeyb82c42b2015-06-30 09:42:20 -070027import static org.onlab.util.Tools.nullIsIllegal;
Ray Milkeyc95bb9d2015-01-06 10:28:24 -080028
29/**
30 * Point to point intent codec.
31 */
Ray Milkey540b2ce2015-02-04 17:50:20 -080032public final class PointToPointIntentCodec extends JsonCodec<PointToPointIntent> {
Ray Milkeyc95bb9d2015-01-06 10:28:24 -080033
Ray Milkeyb82c42b2015-06-30 09:42:20 -070034 private static final String INGRESS_POINT = "ingressPoint";
35 private static final String EGRESS_POINT = "egressPoint";
36
Ray Milkeyc95bb9d2015-01-06 10:28:24 -080037 @Override
38 public ObjectNode encode(PointToPointIntent intent, CodecContext context) {
39 checkNotNull(intent, "Point to point intent cannot be null");
40
41 final JsonCodec<ConnectivityIntent> connectivityIntentCodec =
42 context.codec(ConnectivityIntent.class);
43 final ObjectNode result = connectivityIntentCodec.encode(intent, context);
44
45 final JsonCodec<ConnectPoint> connectPointCodec =
46 context.codec(ConnectPoint.class);
47 final ObjectNode ingress =
48 connectPointCodec.encode(intent.ingressPoint(), context);
49 final ObjectNode egress =
50 connectPointCodec.encode(intent.egressPoint(), context);
51
Ray Milkeyb82c42b2015-06-30 09:42:20 -070052 result.set(INGRESS_POINT, ingress);
53 result.set(EGRESS_POINT, egress);
Ray Milkeyc95bb9d2015-01-06 10:28:24 -080054
55 return result;
56 }
Ray Milkeyb82c42b2015-06-30 09:42:20 -070057
58
59 @Override
60 public PointToPointIntent decode(ObjectNode json, CodecContext context) {
61 PointToPointIntent.Builder builder = PointToPointIntent.builder();
62
63 IntentCodec.intentAttributes(json, context, builder);
64 ConnectivityIntentCodec.intentAttributes(json, context, builder);
65
66 ObjectNode ingressJson = nullIsIllegal(get(json, INGRESS_POINT),
67 INGRESS_POINT + IntentCodec.MISSING_MEMBER_MESSAGE);
68 ConnectPoint ingress = context.codec(ConnectPoint.class)
69 .decode(ingressJson, context);
70 builder.ingressPoint(ingress);
71
72 ObjectNode egressJson = nullIsIllegal(get(json, EGRESS_POINT),
73 EGRESS_POINT + IntentCodec.MISSING_MEMBER_MESSAGE);
74 ConnectPoint egress = context.codec(ConnectPoint.class)
75 .decode(egressJson, context);
76 builder.egressPoint(egress);
77
78 return builder.build();
79 }
Ray Milkeyc95bb9d2015-01-06 10:28:24 -080080}