/*
* EventDatabase.java
*
* Created on July 25, 2006, 5:31 PM
*/
package eug.specific.eu2;
import eug.parser.EUGFileIO;
import eug.parser.ParserSettings;
import eug.shared.GenericObject;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
*
* @author Michael Myers
*/
public class EventDatabase {
public static final List<Event> database = new ArrayList<Event>();
public static final Map<Integer, Event> byId = new HashMap<Integer, Event>();
public static final Map<Integer, List<Integer>> triggers = new HashMap<Integer, List<Integer>>();
public static final Map<Integer, List<Integer>> triggeredBy = new HashMap<Integer, List<Integer>>();
public static final Map<Integer, List<Integer>> prereqOf = new HashMap<Integer, List<Integer>>();
public static final Map<Integer, List<Integer>> prereqs = new HashMap<Integer, List<Integer>>();
/** Creates a new instance of EventDatabase */
private EventDatabase() { }
private static void addEvent(Event evt) {
if (byId.get(evt.getId()) != null)
System.out.println("Error: Multiple events found with id = " + evt.getId());
else {
if (evt.getId() < 0)
System.out.println("Event " + evt.go.getInt("ID"));
database.add(evt);
byId.put(evt.getId(), evt);
}
}
public static void loadEvents(String filename, EU2Scenario scen) {
ParserSettings settings = ParserSettings.getDefaults().setIgnoreComments(false).setPrintTimingInfo(false);
// EUGFileIO.ignoreComments = false;
// EUGFileIO.setTimingInfo(false);
GenericObject root = EUGFileIO.load(filename, settings);
if (root == null) {
root = EUGFileIO.load(scen.eu2FolderPath + scen.modPath + filename);
if (root == null) {
root = EUGFileIO.load(scen.eu2FolderPath + filename);
if (root == null) {
System.err.println("Error: Cannot find file " + filename + " in any known location!");
return;
}
}
}
for (GenericObject evt : root.children) {
if (!evt.name.equals("event")) {
if (!evt.name.equalsIgnoreCase("event")) {
System.err.println("Error: Non-event found in file " + filename);
continue;
}
}
addEvent(new Event(evt, scen));
}
}
public static int numEvents() {
return database.size();
}
public static void clear() {
database.clear();
byId.clear();
triggers.clear();
triggeredBy.clear();
prereqOf.clear();
prereqs.clear();
}
/* e1 triggers e2 */
static void addTrigger(int e1, int e2) {
if (triggers.get(e1) == null)
triggers.put(e1, new ArrayList<Integer>());
if (triggeredBy.get(e2) == null)
triggeredBy.put(e2, new ArrayList<Integer>());
triggers.get(e1).add(e2);
triggeredBy.get(e2).add(e1);
}
/* e1 is a prereq of e2 */
static void addPrereq(int e1, int e2) {
if (prereqOf.get(e1) == null)
prereqOf.put(e1, new ArrayList<Integer>());
if (prereqs.get(e2) == null)
prereqs.put(e2, new ArrayList<Integer>());
prereqOf.get(e1).add(e2);
prereqs.get(e2).add(e1);
}
public static String triggeredBy(Event evt) {
List<Integer> list = triggeredBy.get(evt.getId());
if (list == null)
return "none";
StringBuilder ret = new StringBuilder();
for (int id : list) {
ret.append(id).append(" ");
}
return ret.toString();
}
public static String triggers(Event evt) {
List<Integer> list = triggers.get(evt.getId());
if (list == null)
return "none";
StringBuilder ret = new StringBuilder();
for (int id : list) {
ret.append(id).append(" ");
}
return ret.toString();
}
public static String prereqOf(Event evt) {
List<Integer> list = prereqOf.get(evt.getId());
if (list == null)
return "none";
StringBuilder ret = new StringBuilder();
for (int id : list) {
ret.append(id).append(" ");
}
return ret.toString();
}
public static String prereqs(Event evt) {
List<Integer> list = prereqs.get(evt.getId());
if (list == null)
return "none";
StringBuilder ret = new StringBuilder();
for (int id : list) {
ret.append(id).append(" ");
}
return ret.toString();
}
}