package org.jboss.seam.wiki.core.upload.importers.metamodel;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Create;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.Startup;
import org.jboss.seam.annotations.intercept.BypassInterceptors;
import org.jboss.seam.log.LogProvider;
import org.jboss.seam.log.Logging;
import org.jboss.seam.wiki.core.upload.importers.annotations.UploadImporter;
import org.jboss.seam.wiki.util.AnnotationDeploymentHelper;
import java.util.*;
@Name("importerRegistry")
@Scope(ScopeType.APPLICATION)
@Startup
@BypassInterceptors
public class ImporterRegistry {
private static final LogProvider log = Logging.getLogProvider(ImporterRegistry.class);
SortedMap<String, UploadImporter> importerComponents = new TreeMap<String, UploadImporter>();
@Create
public void startup() {
log.debug("initializing upload importer registry");
Set<Class<?>> importerClasses = AnnotationDeploymentHelper.getAnnotatedClasses(UploadImporter.class);
if (importerClasses == null) return;
for (Class<?> importerClass : importerClasses) {
importerComponents.put(
importerClass.getAnnotation(Name.class).value(),
importerClass.getAnnotation(UploadImporter.class)
);
log.debug("added upload importer to registry: " + importerClass.getAnnotation(Name.class).value());
}
}
public SortedMap<String, UploadImporter> getImporterComponents() {
return importerComponents;
}
public List<String> getImporterComponentNames() {
return new ArrayList(importerComponents.keySet());
}
public List<String> getAvailableImporters(String mimeType, String extension) {
List<String> availableImporters = new ArrayList<String>();
for (Map.Entry<String, UploadImporter> importerEntry : importerComponents.entrySet()) {
List<String> supportedMimeTypes = Arrays.asList(importerEntry.getValue().handledMimeTypes());
List<String> supportedExtensions = Arrays.asList(importerEntry.getValue().handledExtensions());
if (supportedMimeTypes.contains(mimeType) && supportedExtensions.contains(extension) ) {
availableImporters.add(importerEntry.getKey());
}
}
return availableImporters;
}
}