package net.codjo.segmentation.server.participant.context; import java.util.Collection; import java.util.Set; import java.util.concurrent.TimeUnit; import net.codjo.segmentation.server.blackboard.DefaultErrorLogLimiter; import net.codjo.segmentation.server.blackboard.ErrorLogLimiter; import net.codjo.segmentation.server.blackboard.message.Todo; import net.codjo.util.time.SystemTimeSource; import org.apache.log4j.Logger; /** * */ public class SessionContext extends AbstractContext<String, FamilyContext> { private static final Logger LOGGER = Logger.getLogger(SessionContext.class); private final SegmentationReport report; private final ErrorLogLimiter errorLogLimiter; public SessionContext(SegmentationReport report, long timeWindowValue, TimeUnit timeWindowUnit) { this.report = (report == null) ? SegmentationReporter.NONE.create() : report; if (timeWindowValue <= 0) { errorLogLimiter = ErrorLogLimiter.NONE; } else { errorLogLimiter = new DefaultErrorLogLimiter(SystemTimeSource.defaultIfNull(null), timeWindowValue, timeWindowUnit); } LOGGER.info("errorLogLimiter=" + errorLogLimiter); } public SegmentationReport getReport() { return report; } public FamilyContext getFamilyContext(Todo<TodoContent> todo) { synchronized (lock) { return get(todo.getContent().getFamilyId()); } } public Set<String> getFamilyIds() { synchronized (lock) { return getContexts().keySet(); } } public Collection<FamilyContext> getFamilyContexts() { synchronized (lock) { return getContexts().values(); } } public final ErrorLogLimiter getErrorLogLimiter() { return errorLogLimiter; } }