classNames.put(type, new HashSet<String>());
}
try {
for (Resource resource : resResolver.getResources("classpath*:**/*.class")) {
ClassMetadata metadata = factory.getMetadataReader(resource).getClassMetadata();
try {
Class<?> clazz = ClassUtils.forName(metadata.getClassName(), ClassUtils.getDefaultClassLoader());
Set<Class<?>> interfaces = ClassUtils.getAllInterfacesForClassAsSet(clazz);
if (interfaces.contains(Reportlet.class) && !metadata.isAbstract()) {
classNames.get(Type.REPORTLET).add(clazz.getName());
}
if ((interfaces.contains(TaskJob.class))
&& !metadata.isAbstract()
&& !SyncJob.class.getName().equals(metadata.getClassName())
&& !PushJob.class.getName().equals(metadata.getClassName())) {
classNames.get(Type.TASKJOB).add(metadata.getClassName());
}
if (interfaces.contains(SyncActions.class) && !metadata.isAbstract()) {
classNames.get(Type.SYNC_ACTIONS).add(metadata.getClassName());
}
if (interfaces.contains(PushActions.class) && !metadata.isAbstract()) {
classNames.get(Type.PUSH_ACTIONS).add(metadata.getClassName());
}
if (interfaces.contains(SyncCorrelationRule.class) && !metadata.isAbstract()) {
classNames.get(Type.SYNC_CORRELATION_RULES).add(metadata.getClassName());
}
// TODO: add push correlation rules management
if (interfaces.contains(PropagationActions.class) && !metadata.isAbstract()) {
classNames.get(Type.PROPAGATION_ACTIONS).add(metadata.getClassName());
}
if (interfaces.contains(Validator.class) && !metadata.isAbstract()) {
classNames.get(Type.VALIDATOR).add(metadata.getClassName());
}
} catch (ClassNotFoundException e) {
LOG.warn("Could not load class {}", metadata.getClassName());
} catch (LinkageError e) {
LOG.warn("Could not link class {}", metadata.getClassName());
}
}
} catch (IOException e) {
LOG.error("While searching for implementatiom classes", e);
}