Move loadMappings() dir/file logic to JarMapping

Instead of in the command-line interface.. this allows
other code providing an interface to SpecialSource to
easily pass user-supplied options for loading mappings.
This commit is contained in:
Agaricus 2013-03-01 19:10:06 -08:00
parent 91803d03ea
commit a6e18b0665
2 changed files with 48 additions and 27 deletions

View File

@ -142,6 +142,47 @@ public class JarMapping {
loadMappings(new BufferedReader(new FileReader(file)), null, null, false);
}
/**
*
* @param filename A filename of a .srg/.csrg or an MCP directory of .srg+.csv, local or remote
* @param reverse Swap input and output mappings
* @param numeric When reading mapping directory, ignore .csv
* @param inShadeRelocation Apply relocation on mapping input
* @param outShadeRelocation Apply relocation on mapping output
* @throws IOException
*/
public void loadMappings(String filename, boolean reverse, boolean numeric, String inShadeRelocation, String outShadeRelocation) throws IOException {
// Optional shade relocation, on input or output names
JarMappingLoadTransformer inputTransformer = null;
JarMappingLoadTransformer outputTransformer = null;
if (inShadeRelocation != null) {
inputTransformer = new ShadeRelocationSimulator(inShadeRelocation);
}
if (outShadeRelocation != null) {
outputTransformer = new ShadeRelocationSimulator(outShadeRelocation);
}
if (new File(filename).isDirectory() || filename.endsWith("/")) {
// Existing local dir or dir URL
if (inputTransformer != null || outputTransformer != null) {
throw new IllegalArgumentException("loadMappings("+filename+"): shade relocation not supported on directories"); // yet
}
loadMappingsDir(filename, reverse, numeric);
} else {
// File
if (numeric) {
throw new IllegalArgumentException("loadMappings("+filename+"): numeric only supported on directories, not files");
}
loadMappings(new BufferedReader(new FileReader(URLDownloader.getLocalFile(filename))), inputTransformer, outputTransformer, reverse);
}
}
/**
* Load a mapping given a .csrg file
*

View File

@ -71,12 +71,10 @@ public class SpecialSource {
acceptsAll(asList("n", "numeric-srg"), "Use numeric .srg mappings (not .csv) with srg-in dir");
acceptsAll(asList("R", "in-shade-relocation", "shade-relocation"), "Simulate maven-shade-plugin relocation patterns on srg-in input names")
.withRequiredArg()
.withValuesSeparatedBy(',');
.withRequiredArg();
acceptsAll(asList("out-shade-relocation"), "Simulate maven-shade-plugin relocation patterns on srg-in output names")
.withRequiredArg()
.withValuesSeparatedBy(',');
.withRequiredArg();
acceptsAll(asList("r", "reverse"), "Reverse input/output names on srg-in");
@ -141,35 +139,17 @@ public class SpecialSource {
jarMapping = new JarMapping();
// Optional shade relocation, on input or output names
JarMappingLoadTransformer inputTransformer = null;
JarMappingLoadTransformer outputTransformer = null;
if (options.has("in-shade-relocation")) {
@SuppressWarnings("unchecked")
List<String> relocations = (List<String>) options.valuesOf("in-shade-relocation");
inputTransformer = new ShadeRelocationSimulator(relocations);
}
if (options.has("out-shade-relocation")) {
@SuppressWarnings("unchecked")
List<String> relocations = (List<String>) options.valuesOf("out-shade-relocation");
outputTransformer = new ShadeRelocationSimulator(relocations);
}
// Loading options
boolean reverse = options.has("reverse");
boolean numeric = options.has("numeric-srg");
String inShadeRelocation = (String) options.valueOf("in-shade-relocation");
String outShadeRelocation = (String) options.valueOf("out-shade-relocation");
// Load each mapping
@SuppressWarnings("unchecked")
List<String> filenames = (List<String>) options.valuesOf("srg-in");
for (String filename : filenames) {
if (new File(filename).isDirectory() || filename.endsWith("/")) { // existing local dir or dir URL
jarMapping.loadMappingsDir(filename, reverse, options.has("numeric-srg"));
} else {
jarMapping.loadMappings(new BufferedReader(new FileReader(URLDownloader.getLocalFile(filename))), inputTransformer, outputTransformer, reverse);
}
jarMapping.loadMappings(filename, reverse, numeric, inShadeRelocation, outShadeRelocation);
}
} else {
System.err.println("No mappings given, first-jar/second-jar or srg-in required");