1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
package ftbsc.lll.mapper.writer;
import ftbsc.lll.mapper.IMapper;
import ftbsc.lll.mapper.MapperProvider;
import org.apache.commons.cli.*;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.*;
/**
* Writes a mapping to a certain format.
*/
public class MappingWriter {
/**
* The main function, must be passed exactly two arguments
* @param args the command line arguments
* @throws IOException if something goes wrong while writing the file
* @throws ParseException if something goes wrong while parsin arguments
*/
public static void main(String[] args) throws IOException, ParseException {
Options options = new Options()
.addOption("r", "reverse", false, "Writes down inverted mappings");
DefaultParser parser = new DefaultParser();
CommandLine cmdLine = parser.parse(options, args);
args = cmdLine.getArgs();
//separate normal args from custom args
int cursor;
for(cursor = 0; cursor < args.length; cursor++)
if(args[cursor].equals("-a"))
break;
String[] customArgs;
if(cursor != args.length) {
int len = args.length - cursor - 1;
customArgs = new String[len];
System.arraycopy(args, cursor + 1, customArgs, 0, len);
String[] newArgs = new String[cursor];
System.arraycopy(args, 0, newArgs, 0, cursor);
args = newArgs;
} else customArgs = new String[0];
if(args.length < 4) {
System.err.println("Bad argument count!");
System.err.println("java -jar mapping-writer.jar [-r] <location> <format> <output> [-a <custom args]");
return;
}
//load the mapper
List<String> lines = MapperProvider.fetchFromLocalOrRemote(args[0]);
IMapper mapper = MapperProvider.getMapper(lines);
mapper.populate(lines, false);
if(cmdLine.hasOption("reverse"))
mapper = mapper.getInverted();
//load the writers
Map<String, IWriter> writerMap = new HashMap<>();
for(IWriter w : ServiceLoader.load(IWriter.class))
writerMap.put(w.uniqueId(), w);
//get the one we need
IWriter writer = writerMap.get(args[1]);
if(writer == null) {
System.err.printf("%s was not recognised as a valid format!", args[1]);
return;
}
//now for the file
File targetFile = new File(args[2]);
if(!targetFile.createNewFile()) {
System.err.println("File already exists!");
return;
}
if(!targetFile.canWrite()) {
System.err.println("Failed to write to file: access denied.");
return;
}
//call the writer
PrintWriter printWriter = new PrintWriter(new FileWriter(targetFile));
writer.write(mapper, printWriter, customArgs);
printWriter.close();
}
}
|