1 package org.opendaylight.alto.manager;
3 import java.util.ArrayList;
6 import org.apache.felix.gogo.commands.Argument;
7 import org.apache.felix.gogo.commands.Command;
8 import org.opendaylight.alto.commons.types.converter.RFC2ModelCostMapConverter;
9 import org.opendaylight.alto.commons.types.converter.RFC2ModelEndpointPropMapConverter;
10 import org.opendaylight.alto.commons.types.converter.RFC2ModelNetworkMapConverter;
11 import org.opendaylight.alto.commons.types.model150404.ModelCostMap;
12 import org.opendaylight.alto.commons.types.model150404.ModelEndpointPropertyMap;
13 import org.opendaylight.alto.commons.types.model150404.ModelJSONMapper;
14 import org.opendaylight.alto.commons.types.model150404.ModelNetworkMap;
15 import org.opendaylight.alto.commons.types.rfc7285.RFC7285CostMap;
16 import org.opendaylight.alto.commons.types.rfc7285.RFC7285JSONMapper;
17 import org.opendaylight.alto.commons.types.rfc7285.RFC7285NetworkMap;
18 import org.opendaylight.alto.manager.AltoManagerConstants.MAP_FORMAT_TYPE;
19 import org.slf4j.Logger;
20 import org.slf4j.LoggerFactory;
22 @Command(scope = "alto", name = "create", description = "Create resource by resource type and resource file")
23 public class AltoCreate extends AltoManager {
24 private static final Logger log = LoggerFactory.getLogger(AltoCreate.class);
25 private RFC7285JSONMapper rfcMapper = new RFC7285JSONMapper();
26 private ModelJSONMapper modelMapper = new ModelJSONMapper();
27 private RFC2ModelNetworkMapConverter networkMapConverter = new RFC2ModelNetworkMapConverter();
28 private RFC2ModelCostMapConverter costMapConverter = new RFC2ModelCostMapConverter();
29 private RFC2ModelEndpointPropMapConverter endpointPropConverter = new RFC2ModelEndpointPropMapConverter();
30 private MAP_FORMAT_TYPE format = MAP_FORMAT_TYPE.RFC;
32 @Argument(index = 0, name = "resource-type", description = "Resource Type", required = true, multiValued = false)
33 String resourceType = null;
35 @Argument(index = 1, name = "resource-file", description = "Resource File", required = true, multiValued = false)
36 String resourceFile = null;
43 protected Object doExecute() throws Exception {
44 if (networkMapType().equals(resourceType)) {
46 } else if (costMapType().equals(resourceType)) {
48 } else if (endpointPropertyMapType().equals(resourceType)) {
49 putEndpointPropertyMap();
51 throw new UnsupportedOperationException("Unsupported resource type \"" + resourceType + "\".");
56 private void putNetworkMaps() throws Exception {
57 log.info("Loading network maps from " + this.resourceFile);
58 List<ModelNetworkMap> networkMaps = getYangNetworkMaps(readFromFile(resourceFile));
59 for (ModelNetworkMap map : networkMaps) {
60 log.info("Putting network map \"" + map.rid + "\"...");
61 String data = modelMapper.asJSON(map);
62 putMap(AltoManagerConstants.NETWORK_MAP_URL, map.rid, data);
66 private List<ModelNetworkMap> getYangNetworkMaps(String data) throws Exception {
67 if (MAP_FORMAT_TYPE.RFC.equals(format)) {
68 List<ModelNetworkMap> modelNetworkMaps = new ArrayList<ModelNetworkMap>();
69 for (RFC7285NetworkMap networkMap : rfcMapper.asNetworkMapList(data)) {
70 modelNetworkMaps.add(networkMapConverter.convert(networkMap));
72 return modelNetworkMaps;
74 return modelMapper.asNetworkMapList(data);
77 private void putCostMaps() throws Exception {
78 log.info("Loading cost map from " + this.resourceFile);
79 List<ModelCostMap> costMaps = getYangCostMaps(readFromFile(resourceFile));
80 for (ModelCostMap map : costMaps) {
81 log.info("Putting cost map " + map.rid + "...");
82 String data = modelMapper.asJSON(map);
83 putMap(AltoManagerConstants.COST_MAP_URL, map.rid, data);
87 private List<ModelCostMap> getYangCostMaps(String data) throws Exception {
88 if (MAP_FORMAT_TYPE.RFC.equals(format)) {
89 List<ModelCostMap> modelCostMaps = new ArrayList<ModelCostMap>();
90 for (RFC7285CostMap costMap : rfcMapper.asCostMapList(data)) {
91 modelCostMaps.add(costMapConverter.convert(costMap));
95 return modelMapper.asCostMapList(data);
98 private void putEndpointPropertyMap() throws Exception {
99 log.info("Loading endpoint property map from " + this.resourceFile);
100 ModelEndpointPropertyMap endpointPropMap = getYangEndpointPropMap(readFromFile(resourceFile));
101 String data = modelMapper.asJSON(endpointPropMap);
102 httpPut(AltoManagerConstants.ENDPOINT_PROP_MAP_URL, wrapdata(data));
105 private ModelEndpointPropertyMap getYangEndpointPropMap(String data) throws Exception {
106 if (MAP_FORMAT_TYPE.RFC.equals(format)) {
107 return endpointPropConverter.convert(rfcMapper.asEndpointPropMap(data));
109 return modelMapper.asEndpointPropMap(data);
112 private void putMap(String baseUrl, String resourceId, String data) throws Exception {
113 if (resourceId == null) {
114 throw new RuntimeException("No ResourceId Specified.");
116 httpPut(baseUrl + resourceId, wrapdata(data));
119 private String wrapdata(String data) throws Exception {
120 if (endpointPropertyMapType().equals(resourceType)) {
121 return "{\"alto-service:" + resourceType + "\":" + data + "}";
123 return "{\"alto-service:" + resourceType + "\":[" + data + "]}";