]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.ui.workspace.tracker/src/org/simantics/ui/workspace/tracker/internal/contributions/WorkspaceSizeTrackerContribution.java
Added org.simantics.ui.workspace.tracker for tracking workspace size
[simantics/platform.git] / bundles / org.simantics.ui.workspace.tracker / src / org / simantics / ui / workspace / tracker / internal / contributions / WorkspaceSizeTrackerContribution.java
1 package org.simantics.ui.workspace.tracker.internal.contributions;
2
3 import java.io.IOException;
4 import java.nio.file.Files;
5 import java.nio.file.Path;
6
7 import javax.annotation.PostConstruct;
8 import javax.annotation.PreDestroy;
9
10 import org.eclipse.core.runtime.IPath;
11 import org.eclipse.core.runtime.Platform;
12 import org.eclipse.e4.core.contexts.IEclipseContext;
13 import org.eclipse.e4.ui.model.application.MApplication;
14 import org.eclipse.e4.ui.model.application.ui.MUIElement;
15 import org.eclipse.e4.ui.model.application.ui.menu.MToolControl;
16 import org.eclipse.e4.ui.workbench.modeling.EModelService;
17 import org.eclipse.swt.SWT;
18 import org.eclipse.swt.widgets.Composite;
19 import org.eclipse.swt.widgets.Control;
20 import org.eclipse.ui.PlatformUI;
21 import org.simantics.filesystem.services.sizetracker.DirectorySizeService;
22 import org.simantics.filesystem.services.sizetracker.SizeTracker;
23 import org.simantics.ui.workspace.tracker.internal.Activator;
24 import org.slf4j.Logger;
25 import org.slf4j.LoggerFactory;
26
27 /**
28  * @author Tuukka Lehtonen
29  * @since 1.31.0
30  */
31 public class WorkspaceSizeTrackerContribution {
32
33         private Logger logger = LoggerFactory.getLogger(WorkspaceSizeTrackerContribution.class);
34
35         private SizeTracker workspaceSizeTracker;
36
37         @PostConstruct
38         void createControls(Composite parent, MToolControl toolControl) {
39                 String trackSize = System.getProperty("org.simantics.filesystem.services.sizeTracker", null);
40                 if (trackSize != null && trackSize.equalsIgnoreCase("false"))
41                         return;
42                 Path ws = getWorkspacePath();
43                 if (ws != null && !Files.isDirectory(ws))
44                         return;
45                 DirectorySizeService dss = Activator.getDefault().getDirectorySizeService();
46                 if (dss == null)
47                         return;
48
49                 try {
50                         workspaceSizeTracker = dss.track(ws);
51                         new WorkspaceSizeTrackerTrim(parent, toolControl, workspaceSizeTracker, Activator.getDefault().getPreferenceStore());
52                 } catch (IOException e) {
53                         logger.error("Failed to start workspace size tracking for {}", ws, e);
54                 }
55         }
56
57         @PreDestroy
58         void dispose() {
59                 try (SizeTracker t = workspaceSizeTracker) {
60                 } catch (IOException e) {
61                         logger.error("Failed to shutdown workspace size tracking for {}", workspaceSizeTracker, e);
62                 } finally {
63                         workspaceSizeTracker = null;
64                 }
65         }
66
67         private static Path getWorkspacePath() {
68                 IPath ip = Platform.getLocation();
69                 return ip != null ? ip.toFile().toPath() : null;
70         }
71
72         public static void showTracker(boolean show) {
73                 IEclipseContext context = PlatformUI.getWorkbench().getService(IEclipseContext.class);
74                 if (context == null)
75                         return;
76
77                 EModelService modelService = context.get(EModelService.class);
78                 MApplication app = context.get(MApplication.class);
79                 if (modelService == null || app == null)
80                         return;
81
82                 MUIElement element = modelService.find("org.simantics.ui.workspace.tracker.toolcontrol.0", app);
83                 if (element != null && element.isToBeRendered() != show) {
84                         element.setToBeRendered(show);
85                         Object widget = element.getWidget();
86                         if (widget instanceof Control) {
87                                 ((Control) widget).getShell().layout(null, SWT.ALL | SWT.CHANGED | SWT.DEFER);
88                         }
89                 }
90         }
91
92 }