package runjettyrun.webapp;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.eclipse.jetty.util.resource.Resource;
import org.eclipse.jetty.webapp.MetaInfConfiguration;
import org.eclipse.jetty.webapp.WebAppContext;
public class RJRMetaInfoConfiguration extends MetaInfConfiguration{
public void preConfigure(final WebAppContext context) throws Exception
{
super.preConfigure(context);
ArrayList<Resource> jars = new ArrayList<Resource>();
jars.addAll(context.getMetaData().getContainerResources());
jars.addAll(context.getMetaData().getWebInfJars());
for(Resource r:jars){
if(r.isDirectory()){
processClassFolderMetaEntry(context,r);
}
}
}
protected void processClassFolderMetaEntry(WebAppContext context,Resource r) throws IOException{
File metainf = new File(r.getFile(), "META-INF");
if(!(metainf.exists() && metainf.isDirectory())){
return ;
}
try
{
File fragXml = new File(metainf,"web-fragment.xml");
if(fragXml.exists() && context.isConfigurationDiscovered()){
Map<Resource, Resource> fragments = (Map<Resource,Resource>)context.getAttribute(METAINF_FRAGMENTS);
if (fragments == null)
{
fragments = new HashMap<Resource, Resource>();
context.setAttribute(METAINF_FRAGMENTS, fragments);
}
fragments.put(r, Resource.newResource(fragXml));
}
File resourcesDir = new File(metainf,"resources");
if(resourcesDir.exists() && context.isConfigurationDiscovered()){
//addResource(context,METAINF_RESOURCES,Resource.newResource(resources));
Set<Resource> dirs = (Set<Resource>)context.getAttribute(METAINF_RESOURCES);
if (dirs == null)
{
dirs = new HashSet<Resource>();
context.setAttribute(METAINF_RESOURCES, dirs);
}
dirs.add(Resource.newResource(resourcesDir));
}
}
catch(Exception e)
{
context.getServletContext().log(r.getFile().getAbsolutePath(),e);
}
}
}