blob: 82cbd5fb5b3e4047be641b11ddc39a718efef6e6 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.drill.common.scanner.persistence;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
/**
* describe a class that was annotated with one of the configured annotations
*/
public final class AnnotatedClassDescriptor {
private final String className;
private final List<AnnotationDescriptor> annotations;
private final List<FieldDescriptor> fields;
private final Map<String, AnnotationDescriptor> annotationMap;
@JsonCreator public AnnotatedClassDescriptor(
@JsonProperty("className") String className,
@JsonProperty("annotations") List<AnnotationDescriptor> annotations,
@JsonProperty("fields") List<FieldDescriptor> fields) {
this.className = className;
this.annotations = Collections.unmodifiableList(annotations);
this.fields = Collections.unmodifiableList(fields);
this.annotationMap = AnnotationDescriptor.buildAnnotationsMap(annotations);
}
/**
* @return the fully qualified name of the annotated class
*/
public String getClassName() {
return className;
}
/**
* @return the class level annotations
*/
public List<AnnotationDescriptor> getAnnotations() {
return annotations;
}
/**
* @return the fields declared by the class
*/
public List<FieldDescriptor> getFields() {
return fields;
}
/**
* @param clazz the annotation type
* @return the corresponding annotation descriptor
*/
public AnnotationDescriptor getAnnotation(Class<?> clazz) {
return annotationMap.get(clazz.getName());
}
/**
* @param clazz the annotation type
* @return a bytecode based implementation of the annotation
*/
public <T> T getAnnotationProxy(Class<T> clazz) {
final AnnotationDescriptor annotationDescriptor = getAnnotation(clazz);
if (annotationDescriptor == null) {
return null;
}
return annotationDescriptor.getProxy(clazz);
}
@Override
public String toString() {
return "Function [className=" + className + ", annotations=" + annotations
+ ", fields=" + fields + "]";
}
}