All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.tenmg.flink.jobs.utils.AnnotationUtils Maven / Gradle / Ivy

package cn.tenmg.flink.jobs.utils;

import java.io.IOException;
import java.lang.annotation.Annotation;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import cn.tenmg.dsl.annotion.Macro;
import cn.tenmg.dsl.utils.FileUtils;

public class AnnotationUtils {

	private static final String CLASS_SUFFIX = ".class";

	private static final int CLASS_SUFFIX_LENTH = CLASS_SUFFIX.length();

	public static  Set> discoverClasses(Class annotationClass,
			Set basePackages) {
		Set> classes = new HashSet>();
		if (basePackages != null) {
			Class c;
			List paths;
			for (Iterator it = basePackages.iterator(); it.hasNext();) {
				try {
					paths = FileUtils.scanPackage(it.next(), CLASS_SUFFIX);
					if (paths != null) {
						A annotation;
						for (int i = 0, size = paths.size(); i < size; i++) {
							try {
								c = Class.forName(toClassName(paths.get(i)));
								annotation = c.getAnnotation(annotationClass);
								if (annotation != null) {
									classes.add(c);
								}
							} catch (ClassNotFoundException e) {
								e.printStackTrace();
							}
						}
					}
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return classes;
	}

	public static Map>> discoverAnnotationClasses(Set basePackages) {
		Map>> classes = new HashMap>>();
		if (basePackages != null) {
			Class c;
			Set> set;
			List paths;
			Annotation annotations[], annotation;
			for (Iterator it = basePackages.iterator(); it.hasNext();) {
				try {
					paths = FileUtils.scanPackage(it.next(), CLASS_SUFFIX);
					if (paths != null) {

						for (int i = 0, size = paths.size(); i < size; i++) {
							try {
								c = Class.forName(toClassName(paths.get(i)));
								annotations = c.getAnnotations();
								if (annotations != null) {
									for (int j = 0; j < annotations.length; j++) {
										annotation = annotations[j];
										set = classes.get(annotation);
										if (set == null) {
											set = new HashSet>();
											classes.put(annotation, set);
										}
										set.add(c);
									}
								}
							} catch (ClassNotFoundException e) {
								e.printStackTrace();
							}
						}
					}
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return classes;
	}

	private static String toClassName(String path) {
		return path.substring(0, path.length() - CLASS_SUFFIX_LENTH).replaceAll("/", ".");
	}

	public static void main(String[] args) {
		System.out.println(discoverClasses(Macro.class, new HashSet() {
			{
				add("");
			}
		}));

		System.out.println(discoverAnnotationClasses(new HashSet() {
			{
				add("");
			}
		}));
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy