public void scan(@Observes final ProcessBean<Resource<?>> event, final BeanManager manager) { Bean<?> bean = event.getBean(); Class<?> clazz = bean.getBeanClass(); if (clazz.isAnnotationPresent(ResourceHandles.class)) { for (String pspec : clazz.getAnnotation(ResourceHandles.class).value()) { Pattern p = Pattern.compile(pathspecToRegEx(pspec)); CreationalContext<?> creationalCtx = manager.createCreationalContext(bean); Resource<?> rInst = (Resource<?>) manager.getReference(bean, bean.getBeanClass(), creationalCtx); resourceGenerators.add(new ResourceGenerator(p, rInst)); } } }
public Resource<File> getResourceFrom(File file) { /** * Special case for directories required. */ file = file.getAbsoluteFile(); if (file.isDirectory()) { return new DirectoryResource(this, file); } final String name = file.getName(); synchronized (this) { if (lastTypeLoaded.matches(name)) { return lastTypeLoaded.getResource(File.class).createFrom(file); } for (ResourceGenerator gen : resourceGenerators) { if (gen.matches(name)) { return (lastTypeLoaded = gen).getResource(File.class).createFrom(file); } } } return new UnknownFileResource(this, file); }
@SuppressWarnings("unchecked") public <E, T extends Resource<E>> T createFromType(final Class<T> type, final E underlyingResource) { synchronized (this) { for (ResourceGenerator gen : resourceGenerators) { Resource<?> resource = gen.getResource(); if (type.isAssignableFrom(resource.getClass())) { /* * This little <T> hack is required due to bug in javac: * http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6302954 */ T result = (lastTypeLoaded = gen).<T> getResource(); return (T) result.createFrom(underlyingResource); } } } return null; }