Search in sources :

Example 1 with Annotation

use of org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Annotation in project controller by opendaylight.

the class AbsModuleGeneratedObjectFactory method toGeneratedObject.

public GeneratedObject toGeneratedObject(FullyQualifiedName abstractFQN, Optional<String> copyright, Optional<String> header, Optional<String> classJavaDoc, Optional<FullyQualifiedName> extended, List<FullyQualifiedName> implementedInterfaces, List<ModuleField> moduleFields, Optional<FullyQualifiedName> maybeRegistratorType, List<? extends Method> methods, QName yangModuleQName) {
    JavaFileInputBuilder b = new JavaFileInputBuilder();
    Annotation moduleQNameAnnotation = Annotation.createModuleQNameANnotation(yangModuleQName);
    b.addClassAnnotation(moduleQNameAnnotation);
    b.setFqn(abstractFQN);
    b.setTypeName(TypeName.absClassType);
    b.setCopyright(copyright);
    b.setHeader(header);
    b.setClassJavaDoc(classJavaDoc);
    for (FullyQualifiedName implemented : implementedInterfaces) {
        b.addImplementsFQN(implemented);
    }
    if (extended.isPresent()) {
        b.addExtendsFQN(extended.get());
    }
    if (classJavaDoc.isPresent()) {
        b.addClassAnnotation(format("@%s(value=\"%s\")", Description.class.getCanonicalName(), classJavaDoc.get()));
    }
    // add logger:
    b.addToBody(getLoggerDefinition(abstractFQN));
    b.addToBody("//attributes start");
    for (ModuleField moduleField : moduleFields) {
        b.addToBody(moduleField.toString() + "\n");
    }
    b.addToBody("//attributes end");
    b.addToBody(getNewConstructor(abstractFQN));
    b.addToBody(getCopyFromOldConstructor(abstractFQN));
    b.addToBody(getRuntimeRegistratorCode(maybeRegistratorType));
    b.addToBody(getValidationMethods(moduleFields));
    b.addToBody(getCachesOfResolvedDependencies(moduleFields));
    b.addToBody(getCachesOfResolvedIdentityRefs(moduleFields));
    b.addToBody(getResolveDependencies(moduleFields));
    b.addToBody(getReuseLogic(moduleFields, abstractFQN));
    b.addToBody(getEqualsAndHashCode(abstractFQN));
    b.addToBody(getMethods(methods));
    b.addToBody(getGetLogger());
    return new GeneratedObjectBuilder(b.build()).toGeneratedObject();
}
Also used : ModuleField(org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.ModuleField) IdentityRefModuleField(org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.IdentityRefModuleField) GeneratedObjectBuilder(org.opendaylight.controller.config.yangjmxgenerator.plugin.java.GeneratedObjectBuilder) FullyQualifiedName(org.opendaylight.controller.config.yangjmxgenerator.plugin.java.FullyQualifiedName) Annotation(org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Annotation) JavaFileInputBuilder(org.opendaylight.controller.config.yangjmxgenerator.plugin.java.JavaFileInputBuilder)

Example 2 with Annotation

use of org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Annotation in project controller by opendaylight.

the class AbsFactoryGeneratedObjectFactory method toGeneratedObject.

public GeneratedObject toGeneratedObject(FullyQualifiedName absFactoryFQN, Optional<String> copyright, Optional<String> header, Optional<String> classJavaDoc, QName yangModuleQName, String globallyUniqueName, List<FullyQualifiedName> providedServices, FullyQualifiedName moduleFQN, List<Field> moduleFields) {
    JavaFileInputBuilder b = new JavaFileInputBuilder();
    b.addImportFQN(new FullyQualifiedName(Module.class));
    b.addImportFQN(new FullyQualifiedName(ModuleIdentifier.class));
    Annotation moduleQNameAnnotation = Annotation.createModuleQNameANnotation(yangModuleQName);
    b.addClassAnnotation(moduleQNameAnnotation);
    b.setFqn(absFactoryFQN);
    b.setTypeName(TypeName.absClassType);
    b.setCopyright(copyright);
    b.setHeader(header);
    b.setClassJavaDoc(classJavaDoc);
    b.addImplementsFQN(new FullyQualifiedName(ModuleFactory.class));
    if (classJavaDoc.isPresent()) {
        b.addClassAnnotation(format("@%s(value=\"%s\")", Description.class.getCanonicalName(), classJavaDoc.get()));
    }
    b.addToBody(format("public static final java.lang.String NAME = \"%s\";", globallyUniqueName));
    b.addToBody(format("private static final java.util.Set<Class<? extends %s>> serviceIfcs;", AbstractServiceInterface.class.getCanonicalName()));
    b.addToBody("@Override\n public final String getImplementationName() { \n return NAME; \n}");
    b.addToBody(getServiceIfcsInitialization(providedServices));
    // createModule
    b.addToBody(format("\n" + "@Override\n" + "public %s createModule(String instanceName, %s dependencyResolver, %s bundleContext) {\n" + "return instantiateModule(instanceName, dependencyResolver, bundleContext);\n" + "}\n", Module.class.getCanonicalName(), DependencyResolver.class.getCanonicalName(), BUNDLE_CONTEXT));
    b.addToBody(getCreateModule(moduleFQN, moduleFields));
    b.addToBody(format("\n" + "public %s instantiateModule(String instanceName, %s dependencyResolver, %s oldModule, %s oldInstance, %s bundleContext) {\n" + "return new %s(new %s(NAME, instanceName), dependencyResolver, oldModule, oldInstance);\n" + "}\n", moduleFQN, DependencyResolver.class.getCanonicalName(), moduleFQN, AutoCloseable.class.getCanonicalName(), BUNDLE_CONTEXT, moduleFQN, ModuleIdentifier.class.getCanonicalName()));
    b.addToBody(format("\n" + "public %s instantiateModule(String instanceName, %s dependencyResolver, %s bundleContext) {\n" + "return new %s(new %s(NAME, instanceName), dependencyResolver);\n" + "}\n", moduleFQN, DependencyResolver.class.getCanonicalName(), BUNDLE_CONTEXT, moduleFQN, ModuleIdentifier.class.getCanonicalName()));
    b.addToBody(format("\n" + "public %s handleChangedClass(%s dependencyResolver, %s old, %s bundleContext) throws Exception {\n" + // "// @Deprecated return handleChangedClass(old);\n" +
    "String instanceName = old.getModule().getIdentifier().getInstanceName();\n" + "%1$s newModule = new %1$s(new ModuleIdentifier(NAME, instanceName), dependencyResolver);\n" + "Module oldModule = old.getModule();\n" + "Class<? extends Module> oldModuleClass = oldModule.getClass();\n" + genCodeToCopyAttributes(moduleFields) + "return newModule;\n" + "}\n", moduleFQN, DependencyResolver.class.getCanonicalName(), DynamicMBeanWithInstance.class.getCanonicalName(), BUNDLE_CONTEXT));
    b.addToBody(format("\n@Deprecated\n" + "public %s handleChangedClass(%s old) throws Exception {\n" + "throw new UnsupportedOperationException(\"Class reloading is not supported\");\n" + "}\n", moduleFQN, DynamicMBeanWithInstance.class.getCanonicalName()));
    b.addToBody(format("\n" + "@Override\n" + "public java.util.Set<%s> getDefaultModules(org.opendaylight.controller.config.api.DependencyResolverFactory dependencyResolverFactory, %s bundleContext) {\n" + "return new java.util.HashSet<>();\n" + "}\n", moduleFQN, BUNDLE_CONTEXT));
    return new GeneratedObjectBuilder(b.build()).toGeneratedObject();
}
Also used : ModuleFactory(org.opendaylight.controller.config.spi.ModuleFactory) GeneratedObjectBuilder(org.opendaylight.controller.config.yangjmxgenerator.plugin.java.GeneratedObjectBuilder) FullyQualifiedName(org.opendaylight.controller.config.yangjmxgenerator.plugin.java.FullyQualifiedName) ModuleIdentifier(org.opendaylight.controller.config.api.ModuleIdentifier) Module(org.opendaylight.controller.config.spi.Module) Annotation(org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Annotation) JavaFileInputBuilder(org.opendaylight.controller.config.yangjmxgenerator.plugin.java.JavaFileInputBuilder)

Example 3 with Annotation

use of org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Annotation in project controller by opendaylight.

the class GenericGeneratedObjectFactory method toGeneratedObject.

public GeneratedObject toGeneratedObject(FtlTemplate template, Optional<String> copyright) {
    JavaFileInputBuilder b = new JavaFileInputBuilder();
    b.setHeader(template.getHeaderString());
    b.setFqn(new FullyQualifiedName(template.getPackageName(), template.getTypeDeclaration().getName()));
    b.setClassJavaDoc(template.getMaybeJavadoc());
    for (Annotation annotation : template.getAnnotations()) {
        b.addClassAnnotation(annotation);
    }
    // type declaration
    for (String extended : template.getTypeDeclaration().getExtended()) {
        b.addExtendsFQN(FullyQualifiedName.fromString(extended));
    }
    for (String implemented : template.getTypeDeclaration().getImplemented()) {
        b.addImplementsFQN(FullyQualifiedName.fromString(implemented));
    }
    b.setCopyright(copyright);
    b.setTypeName(template.getTypeDeclaration().toTypeName());
    // fields
    for (Field field : template.getFields()) {
        b.addToBody(field.toString());
    }
    // constructors
    for (Constructor constructor : template.getConstructors()) {
        b.addToBody(constructor.toString());
    }
    // methods
    for (Method method : template.getMethods()) {
        b.addToBody(method.toString());
    }
    return new GeneratedObjectBuilder(b.build()).toGeneratedObject();
}
Also used : Field(org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Field) Constructor(org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Constructor) GeneratedObjectBuilder(org.opendaylight.controller.config.yangjmxgenerator.plugin.java.GeneratedObjectBuilder) FullyQualifiedName(org.opendaylight.controller.config.yangjmxgenerator.plugin.java.FullyQualifiedName) Method(org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Method) Annotation(org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Annotation) JavaFileInputBuilder(org.opendaylight.controller.config.yangjmxgenerator.plugin.java.JavaFileInputBuilder)

Example 4 with Annotation

use of org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Annotation in project controller by opendaylight.

the class RuntimeRegistratorFtlTemplate method createCloseMethodToCloseField.

private static MethodDefinition createCloseMethodToCloseField(Field field) {
    String body = field.getName() + ".close();";
    // TODO Thrown exception breaks build
    // return new MethodDefinition(Collections.<String> emptyList(), "void",
    // "close", Collections.<Field> emptyList(),
    // Arrays.asList(IOException.class.getCanonicalName()),
    // Collections.<Annotation> emptyList(), body);
    List<Annotation> annotations = Lists.newArrayList(new Annotation("Override", Collections.emptyList()));
    return new MethodDefinition(Collections.emptyList(), "void", "close", Collections.emptyList(), Collections.emptyList(), annotations, body);
}
Also used : MethodDefinition(org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.MethodDefinition) Annotation(org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Annotation)

Aggregations

Annotation (org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Annotation)4 FullyQualifiedName (org.opendaylight.controller.config.yangjmxgenerator.plugin.java.FullyQualifiedName)3 GeneratedObjectBuilder (org.opendaylight.controller.config.yangjmxgenerator.plugin.java.GeneratedObjectBuilder)3 JavaFileInputBuilder (org.opendaylight.controller.config.yangjmxgenerator.plugin.java.JavaFileInputBuilder)3 ModuleIdentifier (org.opendaylight.controller.config.api.ModuleIdentifier)1 Module (org.opendaylight.controller.config.spi.Module)1 ModuleFactory (org.opendaylight.controller.config.spi.ModuleFactory)1 Constructor (org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Constructor)1 Field (org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Field)1 IdentityRefModuleField (org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.IdentityRefModuleField)1 Method (org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.Method)1 MethodDefinition (org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.MethodDefinition)1 ModuleField (org.opendaylight.controller.config.yangjmxgenerator.plugin.ftl.model.ModuleField)1