1d9b662d522469fa2e913ac8f51ca50c42de3197
[alto.git] / alto-manager / src / main / java / org / opendaylight / alto / manager / AltoCreate.java
1 package org.opendaylight.alto.manager;
2
3 import org.apache.felix.gogo.commands.Argument;
4 import org.apache.felix.gogo.commands.Command;
5 import org.opendaylight.alto.commons.types.converter.RFC2ModelCostMapConverter;
6 import org.opendaylight.alto.commons.types.converter.RFC2ModelEndpointPropMapConverter;
7 import org.opendaylight.alto.commons.types.converter.RFC2ModelNetworkMapConverter;
8 import org.opendaylight.alto.commons.types.model150404.ModelCostMap;
9 import org.opendaylight.alto.commons.types.model150404.ModelEndpointPropertyMap;
10 import org.opendaylight.alto.commons.types.model150404.ModelJSONMapper;
11 import org.opendaylight.alto.commons.types.model150404.ModelNetworkMap;
12 import org.opendaylight.alto.commons.types.rfc7285.RFC7285JSONMapper;
13 import org.opendaylight.alto.manager.AltoManagerConstants.MAP_FORMAT_TYPE;
14 import org.slf4j.Logger;
15 import org.slf4j.LoggerFactory;
16
17 @Command(scope = "alto", name = "create", description = "Create resource by resource type and resource file")
18 public class AltoCreate extends AltoManager {
19   private static final Logger log = LoggerFactory.getLogger(AltoCreate.class);
20   
21   private RFC7285JSONMapper rfcMapper = new RFC7285JSONMapper();
22   private ModelJSONMapper modelMapper = new ModelJSONMapper();
23   private RFC2ModelNetworkMapConverter networkMapConverter = new RFC2ModelNetworkMapConverter();
24   private RFC2ModelCostMapConverter costMapConverter = new RFC2ModelCostMapConverter();
25   private RFC2ModelEndpointPropMapConverter endpointPropConverter = new RFC2ModelEndpointPropMapConverter();
26
27   private String data;
28   private MAP_FORMAT_TYPE format = MAP_FORMAT_TYPE.YANG;
29   
30   @Argument(index = 0, name = "resource-type", description = "Resource Type", required = true, multiValued = false)
31   String resourceType = null;
32
33   @Argument(index = 1, name = "resource-file", description = "Resource File", required = true, multiValued = false)
34   String resourceFile = null;
35   
36   public AltoCreate() {
37     super();
38   }
39   
40   @Override
41   protected Object doExecute() throws Exception {
42     if (networkMapType().equals(resourceType)) {
43       putNetworkMap();
44     } else if (costMapType().equals(resourceType)) {
45       putCostMap();
46     } else if (endpointPropertyMapType().equals(resourceType)) {
47       putEndpointPropertyMap();
48     } else {
49       log.warn("Not supported resource type " + resourceType + ". Aborting...");
50     }
51     return null;
52   }
53   
54   private void putNetworkMap() throws Exception {
55     log.info("Loading network map from " + this.resourceFile);
56     ModelNetworkMap networkMap = getYangNetworkMap(readFromFile(resourceFile));
57     data = modelMapper.asJSON(networkMap);
58     putMap(AltoManagerConstants.NETWORK_MAP_URL, networkMap.rid);
59   }
60   
61   private ModelNetworkMap getYangNetworkMap(String data) throws Exception {
62     if (MAP_FORMAT_TYPE.RFC.equals(format)) {
63       return networkMapConverter.convert(rfcMapper.asNetworkMap(data));
64     }
65     return modelMapper.asNetworkMap(data);
66   }
67   
68   private void putCostMap() throws Exception {
69     log.info("Loading cost map from " + this.resourceFile);
70     ModelCostMap costMap = getYangCostMap(data);
71     data = modelMapper.asJSON(costMap);
72     putMap(AltoManagerConstants.COST_MAP_URL, costMap.rid);
73   }
74   
75   private ModelCostMap getYangCostMap(String data) throws Exception {
76     if (MAP_FORMAT_TYPE.RFC.equals(format)) {
77       return costMapConverter.convert(rfcMapper.asCostMap(data));
78     }
79     return modelMapper.asCostMap(data);
80   }
81   
82   private void putEndpointPropertyMap() throws Exception {
83     log.info("Loading endpoint property map from " + this.resourceFile);
84     ModelEndpointPropertyMap endpointPropMap = getYangEndpointPropMap(readFromFile(resourceFile));
85     data = modelMapper.asJSON(endpointPropMap);
86     putMap(AltoManagerConstants.RESOURCES_URL, AltoManagerConstants.ENDPOINT_PROPERTY_MAP_NODE);
87   }
88   
89   private ModelEndpointPropertyMap getYangEndpointPropMap(String data) throws Exception {
90     if (MAP_FORMAT_TYPE.RFC.equals(format)) {
91        endpointPropConverter.convert(rfcMapper.asEndpointPropMap(data));
92     }
93     return modelMapper.asEndpointPropMap(data);
94   }
95   
96   private void putMap(String baseUrl, String resourceId) throws Exception {
97     if (resourceId == null) {
98       log.info("Cannot parse resourceId. Aborting");
99       return;
100     }
101     httpPut(baseUrl + resourceId, wrapdata());
102   }
103   
104   private String wrapdata() throws Exception {
105     if (endpointPropertyMapType().equals(resourceType)) {
106       return "{\"alto-service:resourceType\":" + data + "}";
107     } else {
108       return "{\"alto-service:resourceType\":[" + data + "]}";
109     }
110   }
111 }