List<RecordedEvent> deserializeRecordedEvents(String path) { List<RecordedEvent> events = new ArrayList<>(); createInputEventClassMap(); JsonObject jsonObject; try (FileReader fileReader = new FileReader(path)) { JsonParser parser = new JsonParser(); JsonElement jsonElement = parser.parse(fileReader); jsonObject = jsonElement.getAsJsonObject(); JsonArray jsonEvents = jsonObject.getAsJsonArray("events"); for (JsonElement element : jsonEvents) { jsonObject = element.getAsJsonObject(); String className = jsonObject.get("event_class").getAsString(); long refId = jsonObject.get("entityRef_ID").getAsLong(); long index = jsonObject.get("index").getAsLong(); long timestamp = jsonObject.get("timestamp").getAsLong(); Event event = deserializeSpecificEventData(jsonObject.get("event_data").getAsJsonObject(), className); RecordedEvent re = new RecordedEvent(refId, event, timestamp, index); events.add(re); } } catch (Exception e) { logger.error("Error while deserializing event:", e); } return events; }
/** * Receives a PendingEvent and add it as a RecordedEvent in the RecordedEventStore if it is an event type that should be * recorded. * @param pendingEvent PendingEvent to be checked and added * @return If the event was added to the RecordedEventStore */ public boolean addEvent(PendingEvent pendingEvent) { if (shouldRecordEvent(pendingEvent)) { long timestamp = System.currentTimeMillis() - this.startTime; Event e = this.eventCopier.copyEvent(pendingEvent.getEvent()); PendingEvent newPendingEvent = new PendingEvent(pendingEvent.getEntity(), e); RecordedEvent recordedEvent; if (pendingEvent.getComponent() == null) { recordedEvent = new RecordedEvent(newPendingEvent.getEntity().getId(), newPendingEvent.getEvent(), timestamp, this.eventCounter); } else { recordedEvent = new RecordedEvent(newPendingEvent.getEntity().getId(), newPendingEvent.getEvent(), newPendingEvent.getComponent(), timestamp, eventCounter); } this.eventCounter++; return recordedEventStore.add(recordedEvent); } else { return false; } }
entity = entityManager.create(); Long id = entity.getId(); eventStore.add(new RecordedEvent(id, new AttackButton(), 1, 1)); eventStore.add(new RecordedEvent(id, new AttackButton(), 2, 2)); eventStore.add(new RecordedEvent(id, new AttackButton(), 3, 3));