2 * Copyright 2015 Open Networking Laboratory
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
16 package org.onosproject.openstackswitching.web;
18 import com.fasterxml.jackson.databind.JsonNode;
19 import com.fasterxml.jackson.databind.node.ArrayNode;
20 import com.fasterxml.jackson.databind.node.ObjectNode;
21 import org.onlab.packet.Ip4Address;
22 import org.onlab.packet.MacAddress;
23 import org.onosproject.codec.CodecContext;
24 import org.onosproject.codec.JsonCodec;
25 import org.onosproject.openstackswitching.OpenstackPort;
26 import org.slf4j.Logger;
27 import org.slf4j.LoggerFactory;
29 import java.util.HashMap;
32 * It encodes and decodes the OpenstackPort.
34 public class OpenstackPortCodec extends JsonCodec<OpenstackPort> {
36 private static Logger log = LoggerFactory
37 .getLogger(OpenstackPortCodec.class);
40 private static final String PORT = "port";
41 private static final String STATUS = "status";
42 private static final String NAME = "name";
43 private static final String ADDRESS_PAIR = "allowed_address_pairs";
44 private static final String ADMIN_STATUS = "admin_status";
45 private static final String NETWORK_ID = "network_id";
46 private static final String TENANT_ID = "tenant_id";
47 private static final String DEVICE_OWNER = "device_owner";
48 private static final String MAC_ADDRESS = "mac_address";
49 private static final String FIXED_IPS = "fixed_ips";
50 private static final String SUBNET_ID = "subnet_id";
51 private static final String IP_ADDRESS = "ip_address";
52 private static final String ID = "id";
53 private static final String SECURITY_GROUPS = "security_groups";
54 private static final String DEVICE_ID = "device_id";
57 public OpenstackPort decode(ObjectNode json, CodecContext context) {
59 HashMap<String, Ip4Address> fixedIpMap = new HashMap<>();
60 JsonNode portInfo = json.get(PORT);
62 String status = portInfo.path(STATUS).asText();
63 String name = portInfo.path(NAME).asText();
64 boolean adminStateUp = portInfo.path(ADMIN_STATUS).asBoolean();
65 String networkId = portInfo.path(NETWORK_ID).asText();
66 String tenantId = portInfo.path(TENANT_ID).asText();
67 String deviceOwner = portInfo.path(DEVICE_OWNER).asText();
68 String macStr = portInfo.path(MAC_ADDRESS).asText();
69 ArrayNode fixedIpList = (ArrayNode) portInfo.path(FIXED_IPS);
70 for (JsonNode fixedIpInfo: fixedIpList) {
71 String subnetId = fixedIpInfo.path(SUBNET_ID).asText();
72 String ipAddressStr = fixedIpInfo.path(IP_ADDRESS).asText();
73 if (ipAddressStr != null) {
74 Ip4Address ipAddress = Ip4Address.valueOf(ipAddressStr);
75 fixedIpMap.put(subnetId, ipAddress);
78 String id = portInfo.path(ID).asText();
79 String securityGroups = portInfo.path(SECURITY_GROUPS).asText();
80 String deviceId = portInfo.path(DEVICE_ID).asText();
82 OpenstackPort.Builder openstackPortBuilder = OpenstackPort.builder();
83 openstackPortBuilder.portStatus(OpenstackPort.PortStatus.valueOf(status))
85 .adminState(adminStateUp)
88 .deviceOwner(deviceOwner)
89 .macAddress(MacAddress.valueOf(macStr))
95 if (!securityGroups.isEmpty()) {
96 openstackPortBuilder.securityGroup(securityGroups);
99 OpenstackPort openstackPort = openstackPortBuilder.build();
101 return openstackPort;