1 package org.simantics.filesystem.services.internal.sizetracker;
3 import java.io.IOException;
4 import java.nio.file.Path;
5 import java.util.HashMap;
8 import org.osgi.service.component.annotations.Activate;
9 import org.osgi.service.component.annotations.Component;
10 import org.osgi.service.component.annotations.Deactivate;
11 import org.simantics.filesystem.services.sizetracker.DirectorySizeService;
12 import org.simantics.filesystem.services.sizetracker.SizeTracker;
13 import org.slf4j.Logger;
14 import org.slf4j.LoggerFactory;
17 * @author Tuukka Lehtonen
21 public class DirectorySizeServiceImpl implements DirectorySizeService {
23 private Logger logger = LoggerFactory.getLogger(DirectorySizeServiceImpl.class);
25 private final Map<Path, SizeTrackerImpl> trackers = new HashMap<>();
28 public SizeTracker track(Path directory) throws IOException {
29 synchronized (trackers) {
30 SizeTrackerImpl tracker = trackers.get(directory);
33 tracker = new SizeTrackerImpl(this, directory);
36 trackers.put(directory, tracker);
38 } catch (IOException e) {
39 safeCloseTracker(tracker);
45 void removeTracker(Path path) {
46 synchronized (trackers) {
47 trackers.remove(path);
51 public void shutdown() {
52 synchronized (trackers) {
53 trackers.forEach((p,t) -> safeCloseTracker(t));
58 private void safeCloseTracker(SizeTrackerImpl t) {
61 } catch (IOException e) {
62 logger.error("Error closing size tracker {}", t, e);
67 public void activate() {
68 //System.out.println("Activated DirectorySizeServiceImpl");
72 public void deactivate() {
73 //System.out.println("Deactivated DirectorySizeServiceImpl");