X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fconfig%2Fyang-jmx-generator-plugin%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fyangjmxgenerator%2Fplugin%2Fftl%2Fdirectives%2FConstructorsDirective.java;fp=opendaylight%2Fconfig%2Fyang-jmx-generator-plugin%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fyangjmxgenerator%2Fplugin%2Fftl%2Fdirectives%2FConstructorsDirective.java;h=56b7286eb599ee3a50e377da2ecf9049caa3c58a;hb=9fb64948564e252018f9b1e13e7cea2c92f991aa;hp=0000000000000000000000000000000000000000;hpb=1742b3894614be478c333a1043ced8ef1bc5dc84;p=controller.git diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/directives/ConstructorsDirective.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/directives/ConstructorsDirective.java new file mode 100644 index 0000000000..56b7286eb5 --- /dev/null +++ b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/directives/ConstructorsDirective.java @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.directives; + +import java.io.IOException; +import java.io.Writer; +import java.util.List; +import java.util.Map; + +import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.GeneralClassTemplate; +import org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Constructor; + +import com.google.common.collect.Lists; + +import freemarker.core.Environment; +import freemarker.template.SimpleSequence; +import freemarker.template.TemplateDirectiveBody; +import freemarker.template.TemplateDirectiveModel; +import freemarker.template.TemplateException; +import freemarker.template.TemplateModel; + +/** + * Add annotations to freemarker template. + */ +public class ConstructorsDirective implements TemplateDirectiveModel { + + private static final String OBJECT = "object"; + + @Override + public void execute(Environment env, Map params, TemplateModel[] loopVars, + TemplateDirectiveBody body) throws TemplateException, IOException { + Object object = params.get(OBJECT); + List constructors = Lists.newArrayList(); + + if (object != null) { + if (object instanceof SimpleSequence) + constructors = ((SimpleSequence) object).toList(); + else if (object instanceof GeneralClassTemplate) { + constructors = ((GeneralClassTemplate) object) + .getConstructors(); + } else + throw new IllegalArgumentException( + "Object must be a SimpleSequence or instance of " + + GeneralClassTemplate.class + "but was " + + object.getClass()); + } + + Writer out = env.getOut(); + StringBuilder build = new StringBuilder(); + for (Constructor constr : constructors) { + build.append(" "); + if (constr.isPublic()) + build.append("public "); + build.append(constr.getTypeName() + " "); + build.append("() {"); + build.append(System.lineSeparator()); + build.append(" "); + build.append(" "); + build.append(constr.getBody()); + build.append(System.lineSeparator()); + build.append(" "); + build.append("}"); + build.append(System.lineSeparator()); + build.append(System.lineSeparator()); + } + + if (!constructors.isEmpty()) + out.write(build.toString().toCharArray()); + } + +}