1 package org.simantics.ui.workspace.tracker.internal.contributions;
3 import java.io.IOException;
4 import java.nio.file.Files;
5 import java.nio.file.Path;
7 import javax.annotation.PostConstruct;
8 import javax.annotation.PreDestroy;
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;
28 * @author Tuukka Lehtonen
31 public class WorkspaceSizeTrackerContribution {
33 private Logger logger = LoggerFactory.getLogger(WorkspaceSizeTrackerContribution.class);
35 private SizeTracker workspaceSizeTracker;
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"))
42 Path ws = getWorkspacePath();
43 if (ws != null && !Files.isDirectory(ws))
45 DirectorySizeService dss = Activator.getDefault().getDirectorySizeService();
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);
59 try (SizeTracker t = workspaceSizeTracker) {
60 } catch (IOException e) {
61 logger.error("Failed to shutdown workspace size tracking for {}", workspaceSizeTracker, e);
63 workspaceSizeTracker = null;
67 private static Path getWorkspacePath() {
68 IPath ip = Platform.getLocation();
69 return ip != null ? ip.toFile().toPath() : null;
72 public static void showTracker(boolean show) {
73 IEclipseContext context = PlatformUI.getWorkbench().getService(IEclipseContext.class);
77 EModelService modelService = context.get(EModelService.class);
78 MApplication app = context.get(MApplication.class);
79 if (modelService == null || app == null)
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);