2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model;
10 import java.util.ArrayList;
11 import java.util.Collection;
12 import java.util.List;
14 import org.opendaylight.controller.config.api.annotations.Description;
15 import org.opendaylight.controller.config.api.annotations.RequireInterface;
16 import org.opendaylight.controller.config.api.annotations.ServiceInterfaceAnnotation;
17 import org.opendaylight.yangtools.yang.binding.annotations.ModuleQName;
18 import org.opendaylight.controller.config.yangjmxgenerator.ServiceInterfaceEntry;
20 import com.google.common.base.Preconditions;
21 import com.google.common.collect.Lists;
23 public class Annotation {
25 final List<Parameter> params;
27 public Annotation(String name, List<Parameter> params) {
32 public String getName() {
36 public List<Parameter> getParams() {
40 public static Annotation createDescriptionAnnotation(String description) {
41 Preconditions.checkNotNull(description,
42 "Cannot create annotation from null description");
43 return new Annotation(Description.class.getCanonicalName(),
44 Lists.newArrayList(new Parameter("value", q(description))));
47 public static Collection<Annotation> createSieAnnotations(ServiceInterfaceEntry sie){
49 String exportedClassName = sie.getExportedOsgiClassName();
50 Preconditions.checkNotNull(sie.getQName(),
51 "Cannot create annotation from null qname");
52 Preconditions.checkNotNull(exportedClassName,
53 "Cannot create annotation from null exportedClassName");
54 List<Annotation> result = new ArrayList<>();
56 List<Parameter> params = Lists.newArrayList(new Parameter("value", q(sie.getQName().toString())));
57 params.add(new Parameter("osgiRegistrationType", exportedClassName + ".class"));
59 params.add(new Parameter("namespace", q(sie.getQName().getNamespace().toString())));
60 params.add(new Parameter("revision", q(sie.getQName().getFormattedRevision())));
61 params.add(new Parameter("localName", q(sie.getQName().getLocalName())));
63 Annotation sieAnnotation = new Annotation(ServiceInterfaceAnnotation.class.getCanonicalName(), params);
64 result.add(sieAnnotation);
68 List<Parameter> params = new ArrayList<>();
69 params.add(new Parameter("namespace", q(sie.getYangModuleQName().getNamespace().toString())));
70 params.add(new Parameter("revision", q(sie.getYangModuleQName().getFormattedRevision())));
71 params.add(new Parameter("name", q(sie.getYangModuleQName().getLocalName())));
73 Annotation moduleQNameAnnotation = new Annotation(ModuleQName.class.getCanonicalName(), params);
74 result.add(moduleQNameAnnotation);
79 public static Annotation createRequireIfcAnnotation(
80 ServiceInterfaceEntry sie) {
81 String reqIfc = sie.getFullyQualifiedName() + ".class";
82 return new Annotation(RequireInterface.class.getCanonicalName(),
83 Lists.newArrayList(new Parameter("value", reqIfc)));
86 private static final String quote = "\"";
88 private static String q(String nullableDescription) {
89 return nullableDescription == null ? null : quote + nullableDescription
93 public static class Parameter {
94 private final String key, value;
96 public Parameter(String key, String value) {
101 public String getKey() {
105 public String getValue() {