*/
@Override
protected Set<String> parsePersistentTypeNames(ClassLoader loader)
throws IOException {
ClassArgParser cparser = newClassArgParser();
String[] clss;
Set<String> names = new HashSet<String>();
if (files != null) {
File file;
for (Iterator itr = files.iterator(); itr.hasNext();) {
file = (File) itr.next();
if ((AccessController.doPrivileged(J2DoPrivHelper.isDirectoryAction(file))).booleanValue()) {
if (log.isTraceEnabled()) {
log.trace(_loc.get("scanning-directory", file));
}
scan(new FileMetaDataIterator(file, newMetaDataFilter()), cparser, names, true, file);
} else if (file.getName().endsWith(".jar")) {
if (log.isTraceEnabled()) {
log.trace(_loc.get("scanning-jar", file));
}
try {
ZipFile zFile = AccessController.doPrivileged(J2DoPrivHelper.newZipFileAction(file));
scan(new ZipFileMetaDataIterator(zFile, newMetaDataFilter()), cparser, names, true, file);
} catch (PrivilegedActionException pae) {
throw (IOException) pae.getException();
}
} else {
if (log.isTraceEnabled()) {
log.trace(_loc.get("scanning-file", file));
}
clss = cparser.parseTypeNames(new FileMetaDataIterator(file));
List<String> newNames = Arrays.asList(clss);
if (log.isTraceEnabled()) {
log.trace(_loc.get("scan-found-names", newNames, file));
}
names.addAll(newNames);
File f = AccessController.doPrivileged(J2DoPrivHelper.getAbsoluteFileAction(file));
try {
mapPersistentTypeNames(AccessController.doPrivileged(J2DoPrivHelper.toURLAction(f)), clss);
} catch (PrivilegedActionException pae) {
throw (FileNotFoundException) pae.getException();
}
}
}
}
URL url;
if (urls != null) {
for (Iterator itr = urls.iterator(); itr.hasNext();) {
url = (URL) itr.next();
if ("file".equals(url.getProtocol())) {
File file = AccessController.doPrivileged(J2DoPrivHelper.getAbsoluteFileAction(
new File(url.getFile())));
if (files != null && files.contains(file)) {
continue;
} else if ((AccessController.doPrivileged(J2DoPrivHelper.isDirectoryAction(file))).booleanValue()) {
if (log.isTraceEnabled()) {
log.trace(_loc.get("scanning-directory", file));
}
scan(new FileMetaDataIterator(file, newMetaDataFilter()), cparser, names, true, file);
continue;
}
}
// OPENJPA-2229 - begin
if ("vfs".equals(url.getProtocol())) {
if (log.isTraceEnabled()) {
log.trace(_loc.get("scanning-vfs-url", url));
}
URLConnection conn = url.openConnection();
Object vfsContent = conn.getContent();
try {
Class virtualFileClass = Class.forName("org.jboss.vfs.VirtualFile");
Method getPhysicalFile = virtualFileClass.getDeclaredMethod("getPhysicalFile");
File file = (File) getPhysicalFile.invoke(vfsContent);
scan(new FileMetaDataIterator(file, newMetaDataFilter()), cparser, names, true, file);
} catch (Exception e) {
log.error(_loc.get("while-scanning-vfs-url", url), e);
}
continue;
}
// OPENJPA-2229 - end
if ("jar".equals(url.getProtocol())) {
if (url.getPath().endsWith("!/")) {
if (log.isTraceEnabled()) {
log.trace(_loc.get("scanning-jar-url", url));
}
scan(new ZipFileMetaDataIterator(url, newMetaDataFilter()), cparser, names, true, url);
} else {
if (log.isTraceEnabled()) {
log.trace(_loc.get("scanning-jar-url", url));
}
scan(new JarFileURLMetaDataIterator(url, newMetaDataFilter()), cparser, names, true, url);
}
} else if (url.getPath().endsWith(".jar")) {
if (log.isTraceEnabled()) {
log.trace(_loc.get("scanning-jar-at-url", url));
}
try {
InputStream is = (InputStream) AccessController.doPrivileged(
J2DoPrivHelper.openStreamAction(url));
scan(new ZipStreamMetaDataIterator(new ZipInputStream(is), newMetaDataFilter()),
cparser, names, true, url);
} catch (PrivilegedActionException pae) {
throw (IOException) pae.getException();
}
} else {
if (log.isTraceEnabled()) {
log.trace(_loc.get("scanning-url", url));
}
clss = cparser.parseTypeNames(new URLMetaDataIterator(url));
List<String> newNames = Arrays.asList(clss);
if (log.isTraceEnabled()) {
log.trace(_loc.get("scan-found-names", newNames, url));
}
names.addAll(newNames);
mapPersistentTypeNames(url, clss);
}
}
}
if (rsrcs != null) {
String rsrc;
MetaDataIterator mitr;
for (Iterator itr = rsrcs.iterator(); itr.hasNext();) {
rsrc = (String) itr.next();
if (rsrc.endsWith(".jar")) {
url = AccessController.doPrivileged(
J2DoPrivHelper.getResourceAction(loader, rsrc));
if (url != null) {
if (log.isTraceEnabled()) {
log.trace(_loc.get("scanning-jar-stream-url", url));
}
try {
InputStream is = (InputStream) AccessController.doPrivileged(
J2DoPrivHelper.openStreamAction(url));
scan(new ZipStreamMetaDataIterator(new ZipInputStream(is), newMetaDataFilter()), cparser,
names, true, url);
} catch (PrivilegedActionException pae) {
throw (IOException) pae.getException();
}
}
} else {
if (log.isTraceEnabled()) {
log.trace(_loc.get("scanning-resource", rsrc));
}
mitr = new ResourceMetaDataIterator(rsrc, loader);
OpenJPAConfiguration conf = repos.getConfiguration();
Map peMap = null;
if (conf instanceof OpenJPAConfigurationImpl) {
peMap = ((OpenJPAConfigurationImpl) conf).getPersistenceEnvironment();
}
URL puUrl = peMap == null ? null : (URL) peMap.get(PERSISTENCE_UNIT_ROOT_URL);
List<String> mappingFileNames =
peMap == null ? null : (List<String>) peMap.get(MAPPING_FILE_NAMES);
List<URL> jars = peMap == null ? null : (List<URL>) peMap.get(JAR_FILE_URLS);
String puUrlString = puUrl == null ? null : puUrl.toString();
if (log.isTraceEnabled()) {
log.trace(_loc.get("pu-root-url", puUrlString));
}
List<URL> mitrUrls = new ArrayList<URL>(3);
while (mitr.hasNext()) {
url = (URL) mitr.next();
String urlString = url.toString();
if (log.isTraceEnabled()) {
log.trace(_loc.get("resource-url", urlString));
}
if (peMap != null) {
//OPENJPA-2102: decode the URL to remove such things a spaces (' ') encoded as '%20'
if (puUrlString != null && decode(urlString).indexOf(decode(puUrlString)) != -1) {
mitrUrls.add(url);
}
if (mappingFileNames != null && !mappingFileNames.isEmpty()) {
for (String mappingFileName : mappingFileNames) {
if (log.isTraceEnabled()) {
log.trace(_loc.get("mapping-file-name", mappingFileName));
}
if (urlString.indexOf(mappingFileName) != -1) {
mitrUrls.add(url);
}
}
}
if (jars != null && !jars.isEmpty()) {
for (URL jarUrl : jars) {
if (log.isTraceEnabled()) {
log.trace(_loc.get("jar-file-url", jarUrl));
}
if (urlString.indexOf(jarUrl.toString()) != -1) {
mitrUrls.add(url);
}
}
}
} else {
mitrUrls.add(url);
}
}
mitr.close();
for (Object obj : mitrUrls) {
url = (URL) obj;
clss = cparser.parseTypeNames(new URLMetaDataIterator(url));
List<String> newNames = Arrays.asList(clss);
if (log.isTraceEnabled()) {
log.trace(_loc.get("scan-found-names", newNames, rsrc));
}
names.addAll(newNames);