28ea837e3633c5d73b7057eb8f3086ef441b7f68
[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.NetvirtElan;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.srm.types.rev170711.NetvirtElanInstance;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.srm.types.rev170711.NetvirtQos;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.srm.types.rev170711.NetvirtQosPolicyInstance;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.srm.types.rev170711.NetvirtVpn;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.srm.types.rev170711.NetvirtVpnInstance;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.srm.types.rev170711.Ofplugin;
29 import org.slf4j.Logger;
30 import org.slf4j.LoggerFactory;
31
32 /**
33  * The Utility class for SRM Shell.
34  */
35 public final class SrmCliUtils {
36
37     private static final Logger LOG = LoggerFactory.getLogger(SrmCliUtils.class);
38
39     private SrmCliUtils() { }
40
41     private static final ImmutableMap<String, Class<? extends EntityTypeBase>> ENTITY_TYPE_MAP =
42         new ImmutableMap.Builder<String, Class<? extends EntityTypeBase>>()
43             .put("SERVICE", EntityTypeService.class)
44             .put("INSTANCE", EntityTypeInstance.class)
45             .build();
46
47     private static final ImmutableMap<String, Class<? extends EntityNameBase>> SERVICE_NAME_MAP =
48         new ImmutableMap.Builder<String, Class<? extends EntityNameBase>>()
49             .put("ITM", GeniusItm.class)
50             .put("IFM", GeniusIfm.class)
51             .put("VPN", NetvirtVpn.class)
52             .put("ELAN", NetvirtElan.class)
53             .put("OFPLUGIN", Ofplugin.class)
54             .put("QOS", NetvirtQos.class)
55             .build();
56
57     private static final ImmutableMap<String, Class<? extends EntityNameBase>> INSTANCE_NAME_MAP =
58         new ImmutableMap.Builder<String, Class<? extends EntityNameBase>>()
59             .put("ITM-TEP", GeniusItmTep.class)
60             .put("ITM-TZ", GeniusItmTz.class)
61             .put("IFM-IFACE", GeniusIfmInterface.class)
62             .put("VPN-INSTANCE", NetvirtVpnInstance.class)
63             .put("ELAN-INSTANCE", NetvirtElanInstance.class)
64             .put("QOS-POLICY-INSTANCE", NetvirtQosPolicyInstance.class)
65             .build();
66
67     /**
68      * Get EntityName given name in string.
69      *
70      * @param strType Entity Type as a string
71      * @return EntityName for use
72      */
73     public static Class<? extends EntityTypeBase> getEntityType(String strType) {
74         LOG.debug("Getting entityType for type {}", strType);
75         return ENTITY_TYPE_MAP.get(strType.toUpperCase(Locale.ROOT));
76     }
77
78     /**
79      * Get EntityName given name in string.
80      *
81      * @param type    Entity Type class
82      * @param strName Entity Name as a string
83      * @return EntityName for use
84      */
85     public static Class<? extends EntityNameBase> getEntityName(Class<? extends EntityTypeBase> type, String strName) {
86         LOG.debug("Getting entityName for type {} and name: {}", type, strName);
87         if (EntityTypeService.class.equals(type)) {
88             return SERVICE_NAME_MAP.get(strName.toUpperCase(Locale.ROOT));
89         } else if (EntityTypeInstance.class.equals(type)) {
90             return INSTANCE_NAME_MAP.get(strName.toUpperCase(Locale.ROOT));
91         } else {
92             return null;
93         }
94     }
95
96     public static String getTypeHelp() {
97         StringBuilder help = new StringBuilder("Supported Entity Types are:\n");
98         for (String entityType : SrmCliUtils.ENTITY_TYPE_MAP.keySet()) {
99             help.append("\t").append(entityType).append("/").append(entityType.toLowerCase(Locale.ROOT)).append("\n");
100         }
101         return help.toString();
102     }
103
104     public static String getNameHelp(Class<? extends EntityTypeBase> entityType) {
105         StringBuilder help = new StringBuilder("Supported Entity Names for type");
106
107         if (EntityTypeService.class.equals(entityType)) {
108             help.append(" SERVICE are:\n");
109             for (String entityName : SrmCliUtils.SERVICE_NAME_MAP.keySet()) {
110                 help.append(String.format("\t%s/%s%n", entityName.toLowerCase(Locale.ROOT), entityName));
111             }
112         } else if (EntityTypeInstance.class.equals(entityType)) {
113             help.append(" INSTANCE are:\n");
114             for (String entityName : SrmCliUtils.INSTANCE_NAME_MAP.keySet()) {
115                 help.append(String.format("\t%s/%s%n", entityName.toLowerCase(Locale.ROOT), entityName));
116             }
117         }
118         return help.toString();
119     }
120
121 }