package org.jboss.windup.config.tags;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.jboss.forge.furnace.Furnace;
import org.jboss.forge.furnace.addons.Addon;
import org.jboss.windup.util.furnace.FileExtensionFilter;
import org.jboss.windup.util.furnace.FurnaceClasspathScanner;
/**
* Loads the tags relations from tags definition files
* and provides API to query these relations.
*
* @author Ondrej Zizka, ozizka at redhat.com
*/
@Singleton
public class TagServiceHolder
{
private static final Logger log = Logger.getLogger(TagServiceHolder.class.getName() );
private TagService tagService = new TagService();
@Inject
private Furnace furnace;
@Inject
private FurnaceClasspathScanner scanner;
/**
* Loads the tag definitions from the files with a ".tags.xml" suffix from the addons.
*/
@PostConstruct
public void loadTagDefinitions()
{
Map<Addon, List<URL>> addonToResourcesMap = scanner.scanForAddonMap(new FileExtensionFilter("tags.xml"));
for (Map.Entry<Addon, List<URL>> entry : addonToResourcesMap.entrySet())
{
for (URL resource : entry.getValue())
{
log.info("Reading tags definitions from: " + resource.toString() + " from addon " + entry.getKey().getId());
try(InputStream is = resource.openStream())
{
tagService.readTags(is);
}
catch( IOException ex )
{
log.warning("Couldn't read tags definition: " + resource.toString() + " from addon " + entry.getKey().getId());
}
}
}
}
public TagService getTagService()
{
return tagService;
}
}