1 | package genius.cli;
|
---|
2 |
|
---|
3 | import java.io.File;
|
---|
4 | import java.io.IOException;
|
---|
5 | import java.text.DateFormat;
|
---|
6 | import java.text.SimpleDateFormat;
|
---|
7 | import java.util.Date;
|
---|
8 | import java.util.Scanner;
|
---|
9 |
|
---|
10 | import javax.xml.bind.JAXBException;
|
---|
11 |
|
---|
12 | import genius.AgentsInstaller;
|
---|
13 | import genius.ProtocolsInstaller;
|
---|
14 | import genius.core.config.MultilateralTournamentConfiguration;
|
---|
15 | import genius.core.config.MultilateralTournamentsConfiguration;
|
---|
16 | import genius.core.exceptions.InstantiateException;
|
---|
17 | import genius.core.session.TournamentManager;
|
---|
18 | import genius.domains.DomainInstaller;
|
---|
19 | import genius.gui.About;
|
---|
20 | import genius.gui.negosession.MultiPartyDataModel;
|
---|
21 | import genius.gui.progress.MultipartyNegoEventLogger;
|
---|
22 |
|
---|
23 | /**
|
---|
24 | * Genius console entry point for running a
|
---|
25 | * {@link MultilateralTournamentsConfiguration}.
|
---|
26 | * <p>
|
---|
27 | * Use this entry point to run genius negotiations from an xml file.
|
---|
28 | * multilateraltournament.xml contains an example file.
|
---|
29 | */
|
---|
30 | public class Runner {
|
---|
31 |
|
---|
32 | /**
|
---|
33 | * Genius console entry point
|
---|
34 | * <p>
|
---|
35 | * Use this entry point to run genius negotiations from an xml file. Example
|
---|
36 | * xml file can be found at xml-runner/example.xml
|
---|
37 | * <p>
|
---|
38 | * When no arguments are given, input and output file are prompted at the
|
---|
39 | * console. Input file is expected to be an .xml file and output is expected
|
---|
40 | * to be an .csv file, although you are free to give different extensions.
|
---|
41 | *
|
---|
42 | * @param args
|
---|
43 | * 1st argument: input file or empty to be prompted. 2nd
|
---|
44 | * argument: output file or empty to be prompted
|
---|
45 | * @throws JAXBException
|
---|
46 | * @throws IOException
|
---|
47 | * @throws InstantiateException
|
---|
48 | */
|
---|
49 | public static void main(String[] args)
|
---|
50 | throws JAXBException, IOException, InstantiateException {
|
---|
51 |
|
---|
52 | ProtocolsInstaller.run();
|
---|
53 | DomainInstaller.run();
|
---|
54 | AgentsInstaller.run();
|
---|
55 |
|
---|
56 | // print welcome message
|
---|
57 | System.out.println(
|
---|
58 | "This is the Genius multilateral tournament runner command line tool");
|
---|
59 | System.out.println("Currently you are using using Genius "
|
---|
60 | + About.class.getPackage().getImplementationVersion());
|
---|
61 |
|
---|
62 | // request input and output files
|
---|
63 | Scanner sc = new Scanner(System.in);
|
---|
64 | String input = requestInputFile(args, sc);
|
---|
65 | String output = requestOutputFile(args, sc);
|
---|
66 | sc.close();
|
---|
67 |
|
---|
68 | // run xml configuration
|
---|
69 | MultilateralTournamentsConfiguration multiconfig = MultilateralTournamentsConfiguration
|
---|
70 | .load(new File(input));
|
---|
71 |
|
---|
72 | // init data model, GUI, logger.
|
---|
73 | Integer numParties = multiconfig.getMaxNumNonMediators();
|
---|
74 | MultiPartyDataModel dataModel = new MultiPartyDataModel(numParties);
|
---|
75 | MultipartyNegoEventLogger myLogger = new MultipartyNegoEventLogger(
|
---|
76 | output, numParties, dataModel);
|
---|
77 | dataModel.addTableModelListener(myLogger);
|
---|
78 |
|
---|
79 | for (MultilateralTournamentConfiguration config : multiconfig
|
---|
80 | .getTournaments()) {
|
---|
81 | System.out.println("Starting tournament " + config);
|
---|
82 | TournamentManager manager = new TournamentManager(config);
|
---|
83 | manager.addListener(dataModel);
|
---|
84 | manager.run(); // runs the manager thread in sync
|
---|
85 | }
|
---|
86 |
|
---|
87 | System.out.println("Runner completed succesfully.");
|
---|
88 |
|
---|
89 | }
|
---|
90 |
|
---|
91 | /** Requests the input file from System.in (or from args[0] if defined) */
|
---|
92 | private static String requestInputFile(String[] args, Scanner sc) {
|
---|
93 | // init
|
---|
94 | File f = null;
|
---|
95 | String filename = null;
|
---|
96 |
|
---|
97 | // if in args
|
---|
98 | if (args.length >= 1) {
|
---|
99 | System.out.println("Input file: " + args[0]);
|
---|
100 | return args[0];
|
---|
101 | }
|
---|
102 |
|
---|
103 | // Request filename
|
---|
104 | System.out.print("Provide path to xml input file: ");
|
---|
105 | while (f == null || !f.exists()) {
|
---|
106 | if (f != null) {
|
---|
107 | System.out.println(
|
---|
108 | "Xml input file could not be found: " + f.getName());
|
---|
109 | System.out.print("Provide path to xml input file: ");
|
---|
110 | }
|
---|
111 | filename = sc.nextLine();
|
---|
112 | f = new File(filename);
|
---|
113 | }
|
---|
114 |
|
---|
115 | // return filename
|
---|
116 | return filename;
|
---|
117 | }
|
---|
118 |
|
---|
119 | /** Requests the output file from System.in (or from args[1] if defined) */
|
---|
120 | private static String requestOutputFile(String[] args, Scanner sc) {
|
---|
121 | // init
|
---|
122 | File f = null;
|
---|
123 | String filename = null;
|
---|
124 | DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd-HHmmss");
|
---|
125 | String defaultName = String.format("logs/Log-XmlRunner-%s.csv",
|
---|
126 | dateFormat.format(new Date()));
|
---|
127 |
|
---|
128 | // if in args
|
---|
129 | if (args.length >= 2) {
|
---|
130 | System.out.println("Output file: " + args[1]);
|
---|
131 | return args[1];
|
---|
132 | }
|
---|
133 |
|
---|
134 | // Request filename
|
---|
135 | System.out.print(String.format(
|
---|
136 | "Provide path to output logfile [default: %s]: ", defaultName));
|
---|
137 | while (f == null) {
|
---|
138 | filename = sc.nextLine();
|
---|
139 | if (filename.isEmpty()) {
|
---|
140 | filename = defaultName;
|
---|
141 | }
|
---|
142 | f = new File(filename);
|
---|
143 | }
|
---|
144 |
|
---|
145 | // return filename
|
---|
146 | return filename;
|
---|
147 | }
|
---|
148 | }
|
---|