@Override public <T extends ProjectFile & ProjectCase> void addListener(T projectCase, ProjectCaseListener listener) { cache.addListener(projectCase, listener); }
@Override public <T extends ProjectFile & ProjectCase> void invalidateCache(T projectCase) { cache.invalidate(projectCase); }
@Override public <T extends ProjectFile & ProjectCase> void removeListener(T projectCase, ProjectCaseListener listener) { cache.removeListener(projectCase, listener); } }
public void addListener(F projectFile, L listener) { Objects.requireNonNull(projectFile); Objects.requireNonNull(listener); getListeners(projectFile.getId()).add(listener); }
@Override public <T extends ProjectFile & ProjectCase> Network getNetwork(T projectCase) { return cache.get(projectCase).getValueOrThrowIfError(projectCase); }
public LocalNetworkCacheService() { cache = new ScriptCache<>(50, 1, projectFile -> { UUID taskId = projectFile.startTask(); try { projectFile.createLogger(taskId).log("Loading network..."); return loadNetworkFromProjectCase((ProjectCase) projectFile); } finally { projectFile.stopTask(taskId); } }, (result, listeners) -> { for (ProjectCaseListener listener : listeners) { listener.networkUpdated(); } }); }
public void removeListener(F projectFile, L listener) { Objects.requireNonNull(projectFile); Objects.requireNonNull(listener); getListeners(projectFile.getId()).remove(listener); } }
public ScriptCache(int maximumSize, int hoursExpiration, Function<F, ScriptResult<V>> loader, BiConsumer<ScriptResult<V>, List<L>> notifier) { this.loader = Objects.requireNonNull(loader); Objects.requireNonNull(notifier); cache = CacheBuilder.newBuilder() .maximumSize(maximumSize) .expireAfterAccess(hoursExpiration, TimeUnit.HOURS) .removalListener(notification -> { String projectFileId = (String) notification.getKey(); LOGGER.info("Project file {} cache removed ({})", projectFileId, notification.getCause()); // notification notifier.accept((ScriptResult<V>) notification.getValue(), getListeners(projectFileId).toList()); }) .build(); }