1 | package genius.core.events;
|
---|
2 |
|
---|
3 | import java.util.ArrayList;
|
---|
4 | import java.util.HashMap;
|
---|
5 | import java.util.List;
|
---|
6 | import java.util.Map;
|
---|
7 |
|
---|
8 | import genius.core.logging.XmlLogger;
|
---|
9 | import genius.core.misc.ExceptionTool;
|
---|
10 | import genius.core.session.Participant;
|
---|
11 | import genius.core.session.Session;
|
---|
12 | import genius.core.session.SessionConfiguration;
|
---|
13 | import genius.gui.progress.DataKey;
|
---|
14 | import genius.gui.progress.DataKeyTableModel;
|
---|
15 |
|
---|
16 | /**
|
---|
17 | * Indicates that a session failed in abnormal way, typically due to an
|
---|
18 | * exception, timeout etc.
|
---|
19 | *
|
---|
20 | * @author W.Pasman 15jul15
|
---|
21 | *
|
---|
22 | */
|
---|
23 | public class SessionFailedEvent implements SessionEndedEvent {
|
---|
24 |
|
---|
25 | private final BrokenPartyException exception;
|
---|
26 |
|
---|
27 | /**
|
---|
28 | * @param e
|
---|
29 | * the exception that caused the problem.
|
---|
30 | */
|
---|
31 | public SessionFailedEvent(BrokenPartyException e) {
|
---|
32 | if (e == null)
|
---|
33 | throw new NullPointerException("SessionFailed without cause");
|
---|
34 | exception = e;
|
---|
35 | }
|
---|
36 |
|
---|
37 | public BrokenPartyException getException() {
|
---|
38 | return exception;
|
---|
39 | }
|
---|
40 |
|
---|
41 | public String toString() {
|
---|
42 | return "Session " + exception.getSession() + " failed: " + new ExceptionTool(exception).getFullMessage() + ":"
|
---|
43 | + exception.getConfiguration().getParticipantNames();
|
---|
44 | }
|
---|
45 |
|
---|
46 | /**
|
---|
47 | * Convert the agreement into a hashmap of < {@link DataKey}, {@link Object}
|
---|
48 | * > pairs. Object will usually be a {@link String}, {@link Number} or
|
---|
49 | * {@link List}. This data can be inserted directly into a
|
---|
50 | * {@link DataKeyTableModel}. This is similar to code in {@link XmlLogger}.
|
---|
51 | *
|
---|
52 | * @return {@link Map} of agreement evaluations.
|
---|
53 | */
|
---|
54 | public Map<DataKey, Object> getValues() {
|
---|
55 | Map<DataKey, Object> values = new HashMap<DataKey, Object>();
|
---|
56 | Session session = exception.getSession();
|
---|
57 | SessionConfiguration configuration = exception.getConfiguration();
|
---|
58 |
|
---|
59 | try {
|
---|
60 | values.put(DataKey.EXCEPTION, toString());
|
---|
61 | values.put(DataKey.ROUND, "" + (session.getRoundNumber() + 1));
|
---|
62 | values.put(DataKey.DEADLINE, session.getDeadlines().valueString());
|
---|
63 |
|
---|
64 | // discounted and agreement
|
---|
65 | boolean isDiscounted = false;
|
---|
66 | // for (Participant party : configuration.getParties()) {
|
---|
67 | values.put(DataKey.IS_AGREEMENT, "No");
|
---|
68 |
|
---|
69 | // number of agreeing parties
|
---|
70 | values.put(DataKey.NUM_AGREE, 0);
|
---|
71 |
|
---|
72 | // utils=reservation values.
|
---|
73 | List<Double> utils = new ArrayList<>();
|
---|
74 | List<String> agts = new ArrayList<String>();
|
---|
75 | List<String> files = new ArrayList<String>();
|
---|
76 | for (Participant party : configuration.getParties()) {
|
---|
77 | agts.add(party.getStrategy().getUniqueName());
|
---|
78 | Double utility = 0d;
|
---|
79 | try {
|
---|
80 | utility = party.getProfile().create().getReservationValue();
|
---|
81 | } catch (Exception e) {
|
---|
82 | System.out.println("Failed to read profile of " + party + ". using 0");
|
---|
83 | }
|
---|
84 |
|
---|
85 | utils.add(utility);
|
---|
86 | files.add(party.getProfile().getName());
|
---|
87 |
|
---|
88 | }
|
---|
89 |
|
---|
90 | values.put(DataKey.AGENTS, agts);
|
---|
91 | values.put(DataKey.FILES, files);
|
---|
92 |
|
---|
93 | values.put(DataKey.UTILS, utils);
|
---|
94 | values.put(DataKey.DISCOUNTED_UTILS, utils);
|
---|
95 |
|
---|
96 | } catch (Exception e) {
|
---|
97 | e.printStackTrace();
|
---|
98 | }
|
---|
99 | return values;
|
---|
100 |
|
---|
101 | }
|
---|
102 |
|
---|
103 | }
|
---|