package org.jboss.as.patching.runner;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* @author Emanuel Muckenhuber
*/
public class PatchReenableJarTool {
static FilenameFilter JAR_FILTER = new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".jar");
}
};
public static void main(String... args) throws IOException {
final String path = args[0];
final File jbossHome = new File(path);
if (!jbossHome.exists()) {
throw notFound(jbossHome);
}
final File modules = new File(jbossHome, "modules");
if (!modules.exists()) {
throw notFound(modules);
}
final File base = new File(modules, "system/layers/base");
if (!base.exists()) {
throw notFound(base);
}
final List<File> jars = new ArrayList<>();
findModuleRoots(base, jars);
for (final File file : jars) {
PatchModuleInvalidationUtils.processFile(null, file, PatchingTaskContext.Mode.ROLLBACK);
}
}
static void findModuleRoots(final File file, final List<File> jars) {
final File moduleXml = new File(file, "module.xml");
if (moduleXml.exists()) {
findJars(file, jars);
} else {
final File[] files = file.listFiles();
if (files != null) {
for (final File child : files) {
if (child.getName().equals(".overlays")) {
continue;
}
if (child.isDirectory()) {
findModuleRoots(child, jars);
}
}
}
}
}
static void findJars(final File moduleRoot, final List<File> jars) {
final File[] files = moduleRoot.listFiles(JAR_FILTER);
if (files != null) {
for (final File jar : files) {
jars.add(jar);
}
}
}
static FileNotFoundException notFound(File file) {
return new FileNotFoundException(file.getAbsolutePath() + " does not exist");
}
}