765b690137bbd17ffd5e492668e0e2e21749fc4b
[onosfw.git] /
1 /*
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  */
16 package org.onosproject.openstackswitching.web;
17
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;
28
29 import java.util.HashMap;
30
31 /**
32  * It encodes and decodes the OpenstackPort.
33  */
34 public class OpenstackPortCodec extends JsonCodec<OpenstackPort> {
35
36     private static Logger log = LoggerFactory
37             .getLogger(OpenstackPortCodec.class);
38
39     // JSON field names
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";
55
56     @Override
57     public OpenstackPort decode(ObjectNode json, CodecContext context) {
58
59         HashMap<String, Ip4Address> fixedIpMap = new HashMap<>();
60         JsonNode portInfo = json.get(PORT);
61
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);
76             }
77         }
78         String id = portInfo.path(ID).asText();
79         String securityGroups = portInfo.path(SECURITY_GROUPS).asText();
80         String deviceId = portInfo.path(DEVICE_ID).asText();
81
82         OpenstackPort.Builder openstackPortBuilder = OpenstackPort.builder();
83         openstackPortBuilder.portStatus(OpenstackPort.PortStatus.valueOf(status))
84                 .name(name)
85                 .adminState(adminStateUp)
86                 .netwrokId(networkId)
87                 .tenantId(tenantId)
88                 .deviceOwner(deviceOwner)
89                 .macAddress(MacAddress.valueOf(macStr))
90                 .fixedIps(fixedIpMap)
91                 .id(id)
92                 .deviceId(deviceId);
93
94         // FIX ME
95         if (!securityGroups.isEmpty()) {
96             openstackPortBuilder.securityGroup(securityGroups);
97         }
98
99         OpenstackPort openstackPort = openstackPortBuilder.build();
100
101         return openstackPort;
102     }
103
104 }