org.commonjava.vertx.vabr.anno.proc.AbstractTemplateInfo.java Source code

Java tutorial

Introduction

Here is the source code for org.commonjava.vertx.vabr.anno.proc.AbstractTemplateInfo.java

Source

/*******************************************************************************
 * Copyright (c) 2014 Red Hat, Inc..
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the GNU Public License v3.0
 * which accompanies this distribution, and is available at
 * http://www.gnu.org/licenses/gpl.html
 * 
 * Contributors:
 *     Red Hat, Inc. - initial API and implementation
 ******************************************************************************/
package org.commonjava.vertx.vabr.anno.proc;

import static org.apache.commons.lang.StringUtils.isEmpty;

import java.util.ArrayList;
import java.util.List;

import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.PackageElement;
import javax.lang.model.element.TypeElement;

import org.commonjava.vertx.vabr.anno.Handles;
import org.commonjava.vertx.vabr.types.Method;
import org.commonjava.vertx.vabr.util.AnnotationUtils;

public abstract class AbstractTemplateInfo {

    private final int priority;

    private final String packagename;

    private final String qualifiedClassname;

    private final String classname;

    private final String methodname;

    private final Method httpMethod;

    private final String httpPath;

    private final String handlerKey;

    private final List<String> versions;

    private boolean fork;

    private final String routePathFragment;

    private final String handlerPathFragment;

    protected AbstractTemplateInfo(final Element elem, final Handles handles, final int priority,
            final Method method, final String path, final String defPath, final String[] routeVersions,
            final boolean fork) {
        this.priority = priority;
        this.httpMethod = method;
        this.fork = fork;
        this.httpPath = AnnotationUtils.pathOf(handles, path, defPath);
        this.routePathFragment = isEmpty(path) ? defPath : path;
        this.handlerPathFragment = isEmpty(handles.prefix()) ? handles.value() : handles.prefix();

        // it only applies to methods...
        final ExecutableElement eelem = (ExecutableElement) elem;

        methodname = eelem.getSimpleName().toString();

        final TypeElement cls = (TypeElement) eelem.getEnclosingElement();

        Element parent = cls.getEnclosingElement();
        while (parent.getKind() != ElementKind.PACKAGE) {
            parent = parent.getEnclosingElement();
        }

        final PackageElement pkg = (PackageElement) parent;

        qualifiedClassname = cls.getQualifiedName().toString();

        classname = cls.getSimpleName().toString();

        packagename = pkg.getQualifiedName().toString();

        this.handlerKey = AnnotationUtils.getHandlerKey(handles, qualifiedClassname);

        this.versions = new ArrayList<>();
        if (routeVersions != null && routeVersions.length > 0) {
            for (final String rv : routeVersions) {
                this.versions.add(rv);
            }
        } else {
            final String[] handlerVersions = handles.versions();
            if (handlerVersions != null) {
                for (final String rv : handlerVersions) {
                    this.versions.add(rv);
                }
            }
        }
    }

    public List<String> getVersions() {
        return versions;
    }

    public String getPackagename() {
        return packagename;
    }

    public String getQualifiedClassname() {
        return qualifiedClassname;
    }

    public String getClassname() {
        return classname;
    }

    public String getMethodname() {
        return methodname;
    }

    public Method getHttpMethod() {
        return httpMethod;
    }

    public String getHttpPath() {
        return httpPath;
    }

    public String getRoutePathFragment() {
        return routePathFragment;
    }

    public String getHandlerPathFragment() {
        return handlerPathFragment;
    }

    public int getPriority() {
        return priority;
    }

    public String getHandlerKey() {
        return handlerKey;
    }

    public void setFork(final boolean fork) {
        this.fork = fork;
    }

    public boolean isFork() {
        return fork;
    }

}