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

com.ajaxjs.util.io.resource.ScanClass Maven / Gradle / Ivy

There is a newer version: 1.2.6
Show newest version
/**
 * Copyright 2015 Sp42 [email protected]
 *
 * Licensed 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 com.ajaxjs.util.io.resource;

import java.io.File;
import java.io.FileFilter;
import java.util.Set;

import com.ajaxjs.util.ReflectUtil;

/**
 * Speical for Java Class Scanning
 * 
 * @author Sp42 [email protected]
 *
 */
public class ScanClass extends AbstractScanner> {
	/**
	 * 用于查找 class 文件的过滤器
	 */
	private final static FileFilter fileFilter = new FileFilter() {
		@Override
		public boolean accept(File file) {
			return file.isDirectory() || file.getName().endsWith(".class");
		}
	};

	@Override
	public FileFilter getFileFilter() {
		return fileFilter;
	}

	@SuppressWarnings("unchecked")
	@Override
	public void onFileAdding(Set> target, File resourceFile, String packageJavaName) {
		Class clazz = (Class) ReflectUtil.getClassByName(getClassName(resourceFile, packageJavaName));
		target.add(clazz);
	}

	@SuppressWarnings("unchecked")
	@Override
	public void onJarAdding(Set> target, String resourcePath) {
		Class clazz = (Class) ReflectUtil.getClassByName(resourcePath);
		target.add(clazz);
	}

	/**
	 * 输入包名,获取所有的 classs
	 * 
	 * @param packageJavaName 包名
	 * @return 结果
	 */
	public static Set> scanClass(String packageJavaName) {
		return new ScanClass().scan(packageJavaName);
	}

	/**
	 * 输入多个包名,获取所有的 class。多个 set 可以用 addAll 合并之
	 * 
	 * @param packageJavaNames 包名
	 * @return 结果
	 */
	public static Set> scanClass(String... packageJavaNames) {
		Set> classes = null;
		ScanClass scanner = new ScanClass<>();

		for (String packageJavaName : packageJavaNames) {
			if (classes == null) {
				classes = scanner.scan(packageJavaName);
			} else {
				classes.addAll(classes);
			}
		}

		return classes;
	}

	/**
	 * Java 类文件 去掉后面的 .class 只留下类名
	 * 
	 * @param file            Java 类文件
	 * @param packageJavaName 包名称
	 * @return 类名
	 */
	public static String getClassName(File file, String packageJavaName) {
		String className = file.getName().substring(0, file.getName().length() - 6);
		className = packageJavaName + '.' + className;

		return className;
	}

}