Committed by
Gerrit Code Review
ONOS-4077: REST API's for virtual links.
Change-Id: Idc838f24735e75ad2729393a03dcac4d256239bb
Showing
7 changed files
with
149 additions
and
3 deletions
... | @@ -28,6 +28,7 @@ import org.onosproject.codec.JsonCodec; | ... | @@ -28,6 +28,7 @@ import org.onosproject.codec.JsonCodec; |
28 | import org.onosproject.core.Application; | 28 | import org.onosproject.core.Application; |
29 | import org.onosproject.incubator.net.virtual.TenantId; | 29 | import org.onosproject.incubator.net.virtual.TenantId; |
30 | import org.onosproject.incubator.net.virtual.VirtualDevice; | 30 | import org.onosproject.incubator.net.virtual.VirtualDevice; |
31 | +import org.onosproject.incubator.net.virtual.VirtualLink; | ||
31 | import org.onosproject.incubator.net.virtual.VirtualNetwork; | 32 | import org.onosproject.incubator.net.virtual.VirtualNetwork; |
32 | import org.onosproject.incubator.net.virtual.VirtualPort; | 33 | import org.onosproject.incubator.net.virtual.VirtualPort; |
33 | import org.onosproject.net.Annotations; | 34 | import org.onosproject.net.Annotations; |
... | @@ -134,6 +135,7 @@ public class CodecManager implements CodecService { | ... | @@ -134,6 +135,7 @@ public class CodecManager implements CodecService { |
134 | registerCodec(VirtualNetwork.class, new VirtualNetworkCodec()); | 135 | registerCodec(VirtualNetwork.class, new VirtualNetworkCodec()); |
135 | registerCodec(VirtualDevice.class, new VirtualDeviceCodec()); | 136 | registerCodec(VirtualDevice.class, new VirtualDeviceCodec()); |
136 | registerCodec(VirtualPort.class, new VirtualPortCodec()); | 137 | registerCodec(VirtualPort.class, new VirtualPortCodec()); |
138 | + registerCodec(VirtualLink.class, new VirtualLinkCodec()); | ||
137 | log.info("Started"); | 139 | log.info("Started"); |
138 | } | 140 | } |
139 | 141 | ... | ... |
1 | +package org.onosproject.codec.impl; | ||
2 | + | ||
3 | +import com.fasterxml.jackson.databind.node.ObjectNode; | ||
4 | +import org.onosproject.codec.CodecContext; | ||
5 | +import org.onosproject.codec.JsonCodec; | ||
6 | +import org.onosproject.incubator.net.tunnel.TunnelId; | ||
7 | +import org.onosproject.incubator.net.virtual.DefaultVirtualLink; | ||
8 | +import org.onosproject.incubator.net.virtual.NetworkId; | ||
9 | +import org.onosproject.incubator.net.virtual.VirtualLink; | ||
10 | +import org.onosproject.net.Link; | ||
11 | + | ||
12 | +import static com.google.common.base.Preconditions.checkNotNull; | ||
13 | +import static org.onlab.util.Tools.nullIsIllegal; | ||
14 | + | ||
15 | +/** | ||
16 | + * Codec for the VirtualLink class. | ||
17 | + */ | ||
18 | +public class VirtualLinkCodec extends JsonCodec<VirtualLink> { | ||
19 | + | ||
20 | + // JSON field names | ||
21 | + private static final String NETWORK_ID = "networkId"; | ||
22 | + private static final String TUNNEL_ID = "tunnelId"; | ||
23 | + | ||
24 | + private static final String NULL_OBJECT_MSG = "VirtualLink cannot be null"; | ||
25 | + private static final String MISSING_MEMBER_MSG = " member is required in VirtualLink"; | ||
26 | + | ||
27 | + @Override | ||
28 | + public ObjectNode encode(VirtualLink vLink, CodecContext context) { | ||
29 | + checkNotNull(vLink, NULL_OBJECT_MSG); | ||
30 | + | ||
31 | + JsonCodec<Link> codec = context.codec(Link.class); | ||
32 | + ObjectNode result = codec.encode(vLink, context); | ||
33 | + result.put(NETWORK_ID, vLink.networkId().toString()); | ||
34 | + // TODO check if tunnelId needs to be part of VirtualLink interface. | ||
35 | + if (vLink instanceof DefaultVirtualLink) { | ||
36 | + result.put(TUNNEL_ID, ((DefaultVirtualLink) vLink).tunnelId().toString()); | ||
37 | + } | ||
38 | + return result; | ||
39 | + } | ||
40 | + | ||
41 | + @Override | ||
42 | + public VirtualLink decode(ObjectNode json, CodecContext context) { | ||
43 | + if (json == null || !json.isObject()) { | ||
44 | + return null; | ||
45 | + } | ||
46 | + JsonCodec<Link> codec = context.codec(Link.class); | ||
47 | + Link link = codec.decode(json, context); | ||
48 | + NetworkId nId = NetworkId.networkId(Long.parseLong(extractMember(NETWORK_ID, json))); | ||
49 | + String tunnelIdStr = json.path(TUNNEL_ID).asText(); | ||
50 | + TunnelId tunnelId = tunnelIdStr != null ? TunnelId.valueOf(tunnelIdStr) | ||
51 | + : TunnelId.valueOf(0); | ||
52 | + return new DefaultVirtualLink(nId, link.src(), link.dst(), tunnelId); | ||
53 | + } | ||
54 | + | ||
55 | + /** | ||
56 | + * Extract member from JSON ObjectNode. | ||
57 | + * | ||
58 | + * @param key key for which value is needed | ||
59 | + * @param json JSON ObjectNode | ||
60 | + * @return member value | ||
61 | + */ | ||
62 | + private String extractMember(String key, ObjectNode json) { | ||
63 | + return nullIsIllegal(json.get(key), key + MISSING_MEMBER_MSG).asText(); | ||
64 | + } | ||
65 | +} |
... | @@ -131,7 +131,7 @@ public class TenantWebResource extends AbstractWebResource { | ... | @@ -131,7 +131,7 @@ public class TenantWebResource extends AbstractWebResource { |
131 | * | 131 | * |
132 | * @param stream TenantId JSON stream | 132 | * @param stream TenantId JSON stream |
133 | * @return TenantId | 133 | * @return TenantId |
134 | - * @throws IOException | 134 | + * @throws IOException if unable to parse the request |
135 | */ | 135 | */ |
136 | private TenantId getTenantIdFromJsonStream(InputStream stream) throws IOException { | 136 | private TenantId getTenantIdFromJsonStream(InputStream stream) throws IOException { |
137 | ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream); | 137 | ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream); |
... | @@ -146,11 +146,11 @@ public class TenantWebResource extends AbstractWebResource { | ... | @@ -146,11 +146,11 @@ public class TenantWebResource extends AbstractWebResource { |
146 | /** | 146 | /** |
147 | * Get the matching tenant identifier from existing tenant identifiers in system. | 147 | * Get the matching tenant identifier from existing tenant identifiers in system. |
148 | * | 148 | * |
149 | - * @param vnetAdminSvc | 149 | + * @param vnetAdminSvc virtual network administration service |
150 | * @param tidIn tenant identifier | 150 | * @param tidIn tenant identifier |
151 | * @return TenantId | 151 | * @return TenantId |
152 | */ | 152 | */ |
153 | - private static TenantId getExistingTenantId(VirtualNetworkAdminService vnetAdminSvc, | 153 | + static TenantId getExistingTenantId(VirtualNetworkAdminService vnetAdminSvc, |
154 | TenantId tidIn) { | 154 | TenantId tidIn) { |
155 | final TenantId resultTid = vnetAdminSvc | 155 | final TenantId resultTid = vnetAdminSvc |
156 | .getTenantIds() | 156 | .getTenantIds() | ... | ... |
This diff is collapsed. Click to expand it.
1 | +{ | ||
2 | + "type": "object", | ||
3 | + "title": "vlink", | ||
4 | + "required": [ | ||
5 | + "networkId", | ||
6 | + "src", | ||
7 | + "dst", | ||
8 | + "type", | ||
9 | + "state" | ||
10 | + ], | ||
11 | + "properties": { | ||
12 | + "networkId": { | ||
13 | + "type": "String", | ||
14 | + "example": "Network identifier" | ||
15 | + }, | ||
16 | + "src": { | ||
17 | + "type": "object", | ||
18 | + "title": "src", | ||
19 | + "required": [ | ||
20 | + "port", | ||
21 | + "device" | ||
22 | + ], | ||
23 | + "properties": { | ||
24 | + "port": { | ||
25 | + "type": "string", | ||
26 | + "example": "3" | ||
27 | + }, | ||
28 | + "device": { | ||
29 | + "type": "string", | ||
30 | + "example": "of:0000000000000002" | ||
31 | + } | ||
32 | + } | ||
33 | + }, | ||
34 | + "dst": { | ||
35 | + "type": "object", | ||
36 | + "title": "dst", | ||
37 | + "required": [ | ||
38 | + "port", | ||
39 | + "device" | ||
40 | + ], | ||
41 | + "properties": { | ||
42 | + "port": { | ||
43 | + "type": "string", | ||
44 | + "example": "2" | ||
45 | + }, | ||
46 | + "device": { | ||
47 | + "type": "string", | ||
48 | + "example": "of:0000000000000003" | ||
49 | + } | ||
50 | + } | ||
51 | + }, | ||
52 | + "type": { | ||
53 | + "type": "string", | ||
54 | + "example": "DIRECT" | ||
55 | + }, | ||
56 | + "state": { | ||
57 | + "type": "string", | ||
58 | + "example": "ACTIVE" | ||
59 | + }, | ||
60 | + "tunnelId": { | ||
61 | + "type": "int64", | ||
62 | + "example": "Tunnel identifier" | ||
63 | + } | ||
64 | + } | ||
65 | +} |
This diff is collapsed. Click to expand it.
-
Please register or login to post a comment