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 com.google.common.base.Preconditions;
11 import com.google.common.collect.Lists;
12 import java.util.ArrayList;
13 import java.util.Collection;
14 import java.util.HashMap;
15 import java.util.List;
17 import java.util.Map.Entry;
18 import org.opendaylight.controller.config.api.annotations.Description;
19 import org.opendaylight.controller.config.api.annotations.RequireInterface;
20 import org.opendaylight.controller.config.api.annotations.ServiceInterfaceAnnotation;
21 import org.opendaylight.controller.config.yangjmxgenerator.ServiceInterfaceEntry;
22 import org.opendaylight.yangtools.yang.binding.annotations.ModuleQName;
23 import org.opendaylight.yangtools.yang.common.QName;
24 import org.opendaylight.yangtools.yang.common.Revision;
26 public class Annotation {
28 final List<Parameter> params;
30 public Annotation(final String name, final List<Parameter> params) {
35 public String getName() {
39 public List<Parameter> getParams() {
43 public static Annotation createFromMap(final Class<?> annotationClass, final Map<String, String> parameters) {
44 List<Parameter> parameterList = new ArrayList<>();
45 for(Entry<String, String> entry: parameters.entrySet()) {
46 parameterList.add(new Parameter(entry.getKey(), entry.getValue()));
48 return new Annotation(annotationClass.getCanonicalName(), parameterList);
51 public static Annotation createDescriptionAnnotation(final String description) {
52 Preconditions.checkNotNull(description,
53 "Cannot create annotation from null description");
54 return new Annotation(Description.class.getCanonicalName(),
55 Lists.newArrayList(new Parameter("value", q(description))));
58 public static Annotation createModuleQNameANnotation(final QName qName) {
59 Map<String, String> parameters = new HashMap<>();
60 parameters.put("namespace", q(qName.getNamespace().toString()));
61 parameters.put("revision", q(qName.getRevision().map(Revision::toString).orElse(null)));
62 parameters.put("name", q(qName.getLocalName()));
63 return Annotation.createFromMap(ModuleQName.class, parameters);
66 public static Collection<Annotation> createSieAnnotations(final ServiceInterfaceEntry sie){
68 String exportedClassName = sie.getExportedOsgiClassName();
69 Preconditions.checkNotNull(sie.getQName(),
70 "Cannot create annotation from null qname");
71 Preconditions.checkNotNull(exportedClassName,
72 "Cannot create annotation from null exportedClassName");
73 List<Annotation> result = new ArrayList<>();
75 List<Parameter> params = Lists.newArrayList(new Parameter("value", q(sie.getQName().toString())));
76 params.add(new Parameter("osgiRegistrationType", exportedClassName + ".class"));
77 params.add(new Parameter("registerToOsgi", Boolean.toString(sie.isRegisterToOsgi())));
78 params.add(new Parameter("namespace", q(sie.getQName().getNamespace().toString())));
79 params.add(new Parameter("revision", q(sie.getQName().getRevision().map(Revision::toString).orElse(null))));
80 params.add(new Parameter("localName", q(sie.getQName().getLocalName())));
82 Annotation sieAnnotation = new Annotation(ServiceInterfaceAnnotation.class.getCanonicalName(), params);
83 result.add(sieAnnotation);
87 List<Parameter> params = new ArrayList<>();
88 params.add(new Parameter("namespace", q(sie.getYangModuleQName().getNamespace().toString())));
89 params.add(new Parameter("revision", q(sie.getYangModuleQName().getRevision()
90 .map(Revision::toString).orElse(null))));
91 params.add(new Parameter("name", q(sie.getYangModuleQName().getLocalName())));
93 Annotation moduleQNameAnnotation = new Annotation(ModuleQName.class.getCanonicalName(), params);
94 result.add(moduleQNameAnnotation);
99 public static Annotation createRequireIfcAnnotation(
100 final ServiceInterfaceEntry sie) {
101 String reqIfc = sie.getFullyQualifiedName() + ".class";
102 return new Annotation(RequireInterface.class.getCanonicalName(),
103 Lists.newArrayList(new Parameter("value", reqIfc)));
106 private static final String quote = "\"";
108 public static String q(final String nullableDescription) {
109 return nullableDescription == null ? null : quote + nullableDescription + quote;
112 public static class Parameter {
113 private final String key, value;
115 public Parameter(final String key, final String value) {
120 public String getKey() {
124 public String getValue() {
130 public String toString() {
131 return AnnotationSerializer.toString(this);