1 package org.opendaylight.alto.manager;
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;
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);
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();
28 private MAP_FORMAT_TYPE format = MAP_FORMAT_TYPE.YANG;
30 @Argument(index = 0, name = "resource-type", description = "Resource Type", required = true, multiValued = false)
31 String resourceType = null;
33 @Argument(index = 1, name = "resource-file", description = "Resource File", required = true, multiValued = false)
34 String resourceFile = null;
41 protected Object doExecute() throws Exception {
42 if (networkMapType().equals(resourceType)) {
44 } else if (costMapType().equals(resourceType)) {
46 } else if (endpointPropertyMapType().equals(resourceType)) {
47 putEndpointPropertyMap();
49 log.warn("Not supported resource type " + resourceType + ". Aborting...");
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);
61 private ModelNetworkMap getYangNetworkMap(String data) throws Exception {
62 if (MAP_FORMAT_TYPE.RFC.equals(format)) {
63 return networkMapConverter.convert(rfcMapper.asNetworkMap(data));
65 return modelMapper.asNetworkMap(data);
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);
75 private ModelCostMap getYangCostMap(String data) throws Exception {
76 if (MAP_FORMAT_TYPE.RFC.equals(format)) {
77 return costMapConverter.convert(rfcMapper.asCostMap(data));
79 return modelMapper.asCostMap(data);
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);
89 private ModelEndpointPropertyMap getYangEndpointPropMap(String data) throws Exception {
90 if (MAP_FORMAT_TYPE.RFC.equals(format)) {
91 endpointPropConverter.convert(rfcMapper.asEndpointPropMap(data));
93 return modelMapper.asEndpointPropMap(data);
96 private void putMap(String baseUrl, String resourceId) throws Exception {
97 if (resourceId == null) {
98 log.info("Cannot parse resourceId. Aborting");
101 httpPut(baseUrl + resourceId, wrapdata());
104 private String wrapdata() throws Exception {
105 if (endpointPropertyMapType().equals(resourceType)) {
106 return "{\"alto-service:resourceType\":" + data + "}";
108 return "{\"alto-service:resourceType\":[" + data + "]}";