0beeb0a3e34acfe8f8e7a4c76b7318414fd595ae
[genius.git] / srm / shell / src / main / java / org / opendaylight / genius / srm / shell / SrmCliUtils.java
1 /*
2  * Copyright (c) 2017 Ericsson India Global Services Pvt Ltd. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.genius.srm.shell;
10
11 import com.google.common.collect.ImmutableMap;
12 import java.util.Locale;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.srm.types.rev170711.EntityNameBase;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.srm.types.rev170711.EntityTypeBase;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.srm.types.rev170711.EntityTypeInstance;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.srm.types.rev170711.EntityTypeService;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.srm.types.rev170711.GeniusIfm;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.srm.types.rev170711.GeniusIfmInterface;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.srm.types.rev170711.GeniusItm;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.srm.types.rev170711.GeniusItmTep;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.srm.types.rev170711.GeniusItmTz;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.srm.types.rev170711.NetvirtAcl;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.srm.types.rev170711.NetvirtAclInstance;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.srm.types.rev170711.NetvirtAclInterface;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.srm.types.rev170711.NetvirtElan;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.srm.types.rev170711.NetvirtElanInstance;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.srm.types.rev170711.NetvirtQos;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.srm.types.rev170711.NetvirtQosPolicyInstance;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.srm.types.rev170711.NetvirtVpn;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.srm.types.rev170711.NetvirtVpnInstance;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.srm.types.rev170711.Ofplugin;
32 import org.slf4j.Logger;
33 import org.slf4j.LoggerFactory;
34
35 /**
36  * The Utility class for SRM Shell.
37  */
38 public final class SrmCliUtils {
39
40     private static final Logger LOG = LoggerFactory.getLogger(SrmCliUtils.class);
41
42     private SrmCliUtils() { }
43
44     private static final ImmutableMap<String, Class<? extends EntityTypeBase>> ENTITY_TYPE_MAP =
45         new ImmutableMap.Builder<String, Class<? extends EntityTypeBase>>()
46             .put("SERVICE", EntityTypeService.class)
47             .put("INSTANCE", EntityTypeInstance.class)
48             .build();
49
50     private static final ImmutableMap<String, Class<? extends EntityNameBase>> SERVICE_NAME_MAP =
51         new ImmutableMap.Builder<String, Class<? extends EntityNameBase>>()
52             .put("ITM", GeniusItm.class)
53             .put("IFM", GeniusIfm.class)
54             .put("VPN", NetvirtVpn.class)
55             .put("ELAN", NetvirtElan.class)
56             .put("ACL", NetvirtAcl.class)
57             .put("OFPLUGIN", Ofplugin.class)
58             .put("QOS", NetvirtQos.class)
59             .build();
60
61     private static final ImmutableMap<String, Class<? extends EntityNameBase>> INSTANCE_NAME_MAP =
62         new ImmutableMap.Builder<String, Class<? extends EntityNameBase>>()
63             .put("ITM-TEP", GeniusItmTep.class)
64             .put("ITM-TZ", GeniusItmTz.class)
65             .put("IFM-IFACE", GeniusIfmInterface.class)
66             .put("VPN-INSTANCE", NetvirtVpnInstance.class)
67             .put("ELAN-INSTANCE", NetvirtElanInstance.class)
68             .put("QOS-POLICY-INSTANCE", NetvirtQosPolicyInstance.class)
69             .put("ACL-INTERFACE", NetvirtAclInterface.class)
70             .put("ACL-INSTANCE", NetvirtAclInstance.class)
71             .build();
72
73     /**
74      * Get EntityName given name in string.
75      *
76      * @param strType Entity Type as a string
77      * @return EntityName for use
78      */
79     public static Class<? extends EntityTypeBase> getEntityType(String strType) {
80         LOG.debug("Getting entityType for type {}", strType);
81         return ENTITY_TYPE_MAP.get(strType.toUpperCase(Locale.ROOT));
82     }
83
84     /**
85      * Get EntityName given name in string.
86      *
87      * @param type    Entity Type class
88      * @param strName Entity Name as a string
89      * @return EntityName for use
90      */
91     public static Class<? extends EntityNameBase> getEntityName(Class<? extends EntityTypeBase> type, String strName) {
92         LOG.debug("Getting entityName for type {} and name: {}", type, strName);
93         if (EntityTypeService.class.equals(type)) {
94             return SERVICE_NAME_MAP.get(strName.toUpperCase(Locale.ROOT));
95         } else if (EntityTypeInstance.class.equals(type)) {
96             return INSTANCE_NAME_MAP.get(strName.toUpperCase(Locale.ROOT));
97         } else {
98             return null;
99         }
100     }
101
102     public static String getTypeHelp() {
103         StringBuilder help = new StringBuilder("Supported Entity Types are:\n");
104         for (String entityType : SrmCliUtils.ENTITY_TYPE_MAP.keySet()) {
105             help.append("\t").append(entityType).append("/").append(entityType.toLowerCase(Locale.ROOT)).append("\n");
106         }
107         return help.toString();
108     }
109
110     public static String getNameHelp(Class<? extends EntityTypeBase> entityType) {
111         StringBuilder help = new StringBuilder("Supported Entity Names for type");
112
113         if (EntityTypeService.class.equals(entityType)) {
114             help.append(" SERVICE are:\n");
115             for (String entityName : SrmCliUtils.SERVICE_NAME_MAP.keySet()) {
116                 help.append(String.format("\t%s/%s%n", entityName.toLowerCase(Locale.ROOT), entityName));
117             }
118         } else if (EntityTypeInstance.class.equals(entityType)) {
119             help.append(" INSTANCE are:\n");
120             for (String entityName : SrmCliUtils.INSTANCE_NAME_MAP.keySet()) {
121                 help.append(String.format("\t%s/%s%n", entityName.toLowerCase(Locale.ROOT), entityName));
122             }
123         }
124         return help.toString();
125     }
126
127 }