blob: 97c5f8aa42240f510f82fbcf81fc3f746b0791f4 [file] [log] [blame]
// Copyright 2007 The Apache Software Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package org.apache.tapestry5.integration.app1.pages;
import org.apache.tapestry5.annotations.Component;
import org.apache.tapestry5.annotations.Persist;
import org.apache.tapestry5.corelib.components.Form;
import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
import org.apache.tapestry5.ioc.internal.util.InternalUtils;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.JarURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.Enumeration;
import java.util.List;
import java.util.jar.JarEntry;
public class ClassLoaderInspect
{
private static final ClassLoader CLASS_LOADER = Thread.currentThread().getContextClassLoader();
private ClassLoader loader;
@Persist
private String resource;
@Component
private Form search;
@Persist
private List<URL> URLs;
@Persist
private boolean showMatches;
private URL URL;
private JarEntry jarEntry;
public URL getURL()
{
return URL;
}
public void setURL(URL url)
{
URL = url;
}
public ClassLoader getClassLoader()
{
return CLASS_LOADER;
}
public ClassLoader getLoader()
{
return loader;
}
public void setLoader(ClassLoader loader)
{
this.loader = loader;
}
public List<ClassLoader> getLoaders()
{
List<ClassLoader> result = CollectionFactory.newList();
ClassLoader current = getClass().getClassLoader();
while (current != null)
{
result.add(0, current);
current = current.getParent();
}
return result;
}
public int getListSize()
{
return URLs == null ? 0 : URLs.size();
}
void onFailure()
{
showMatches = false;
URLs = null;
}
void onSuccess()
{
showMatches = false;
URLs = null;
try
{
List<URL> urls = CollectionFactory.newList();
Enumeration<URL> e = CLASS_LOADER.getResources(resource);
while (e.hasMoreElements())
urls.add(e.nextElement());
URLs = urls;
showMatches = true;
}
catch (Exception ex)
{
String message = ex.getMessage();
if (InternalUtils.isBlank(message))
message = ex.getClass().getName();
search.recordError(message);
}
}
public String getResource()
{
return resource;
}
public void setResource(String resource)
{
this.resource = resource;
}
public List<URL> getURLs()
{
return URLs;
}
public boolean getShowMatches()
{
return showMatches;
}
public String getContentStreamContents()
{
StringBuilder builder = new StringBuilder();
try
{
InputStream is = URL.openStream();
InputStreamReader reader = new InputStreamReader(is);
char[] buffer = new char[1000];
while (true)
{
int length = reader.read(buffer);
if (length < 0)
break;
builder.append(buffer, 0, length);
}
reader.close();
return builder.toString();
}
catch (Exception ex)
{
return ex.getMessage();
}
}
public List<JarEntry> getJarEntries()
{
try
{
URLConnection rawConnection = URL.openConnection();
JarURLConnection jarConnection = (JarURLConnection) rawConnection;
JarEntry rootEntry = jarConnection.getJarEntry();
List<JarEntry> result = CollectionFactory.newList();
if (rootEntry.isDirectory())
{
Enumeration<JarEntry> e = jarConnection.getJarFile().entries();
while (e.hasMoreElements())
result.add(e.nextElement());
}
else
{
result.add(rootEntry);
}
return result;
}
catch (Exception ex)
{
return null;
}
}
public URLConnection getURLConnection()
{
try
{
return URL.openConnection();
}
catch (IOException ex)
{
return null;
}
}
public JarEntry getJarEntry()
{
return jarEntry;
}
public void setJarEntry(JarEntry jarEntry)
{
this.jarEntry = jarEntry;
}
}