All Downloads are FREE. Search and download functionalities are using the official Maven repository.

es.urjc.etsii.grafo.events.MemoryEventStorage Maven / Gradle / Ivy

package es.urjc.etsii.grafo.events;

import es.urjc.etsii.grafo.events.types.MorkEvent;
import es.urjc.etsii.grafo.events.types.SolutionGeneratedEvent;
import es.urjc.etsii.grafo.io.Instance;
import es.urjc.etsii.grafo.solution.Solution;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentSkipListMap;
import java.util.stream.Stream;

/**
 * Store historical event data
 */
@Service
public class MemoryEventStorage, I extends Instance> extends AbstractEventStorage {
    /**
     * Use a tree as events may be processed unordered, but should be retrieved ordered by range query
     */
    private final ConcurrentSkipListMap eventLog = new ConcurrentSkipListMap<>();

    /**
     * 

Constructor for MemoryEventStorage.

*/ protected MemoryEventStorage(){} /** * Store in memory the given event * * @param event event to save */ public void storeEvent(MorkEvent event){ int eventId = event.getEventId(); if(eventLog.containsKey(eventId)){ throw new IllegalStateException("Repeated event id + " + eventId); } eventLog.put(eventId, event); } /** * {@inheritDoc} * * Retrieve events by range [from, to). */ public List getEvents(int from, int to){ if(to < from){ throw new IllegalArgumentException(String.format("Invalid parameters: 'to' is less or equals to 'from', %s <= %s", to, from)); } return new ArrayList<>(eventLog.subMap(from, to).values()); } @Override public MorkEvent getEvent(int id) { var event = eventLog.get(id); if(event == null){ throw new IllegalArgumentException("No event with ID " + id); } return event; } /** {@inheritDoc} */ @SuppressWarnings("unchecked") public Stream> getGeneratedSolEventForExp(String experimentName){ return this.eventLog.values().stream() .filter(e -> e instanceof SolutionGeneratedEvent) .map(e -> (SolutionGeneratedEvent) e) .filter(e -> e.getExperimentName().equals(experimentName)); } /** {@inheritDoc} */ @SuppressWarnings("unchecked") public Stream getEventsByType(Class type){ return (Stream) this.eventLog.values().stream() .filter(type::isInstance); } /** *

getAllEvents.

* * @return a {@link java.util.stream.Stream} object. */ public Stream getAllEvents(){ return this.eventLog.values().stream(); } /** *

getLastEvent.

* * @return a {@link MorkEvent} object. */ public MorkEvent getLastEvent(){ return eventLog.lastEntry().getValue(); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy