]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - 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
diff --git a/bundles/org.simantics.ui.workspace.tracker/src/org/simantics/ui/workspace/tracker/internal/contributions/WorkspaceSizeTrackerContribution.java b/bundles/org.simantics.ui.workspace.tracker/src/org/simantics/ui/workspace/tracker/internal/contributions/WorkspaceSizeTrackerContribution.java
new file mode 100644 (file)
index 0000000..f393ab6
--- /dev/null
@@ -0,0 +1,92 @@
+package org.simantics.ui.workspace.tracker.internal.contributions;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.e4.core.contexts.IEclipseContext;
+import org.eclipse.e4.ui.model.application.MApplication;
+import org.eclipse.e4.ui.model.application.ui.MUIElement;
+import org.eclipse.e4.ui.model.application.ui.menu.MToolControl;
+import org.eclipse.e4.ui.workbench.modeling.EModelService;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.ui.PlatformUI;
+import org.simantics.filesystem.services.sizetracker.DirectorySizeService;
+import org.simantics.filesystem.services.sizetracker.SizeTracker;
+import org.simantics.ui.workspace.tracker.internal.Activator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author Tuukka Lehtonen
+ * @since 1.31.0
+ */
+public class WorkspaceSizeTrackerContribution {
+
+       private Logger logger = LoggerFactory.getLogger(WorkspaceSizeTrackerContribution.class);
+
+       private SizeTracker workspaceSizeTracker;
+
+       @PostConstruct
+       void createControls(Composite parent, MToolControl toolControl) {
+               String trackSize = System.getProperty("org.simantics.filesystem.services.sizeTracker", null);
+               if (trackSize != null && trackSize.equalsIgnoreCase("false"))
+                       return;
+               Path ws = getWorkspacePath();
+               if (ws != null && !Files.isDirectory(ws))
+                       return;
+               DirectorySizeService dss = Activator.getDefault().getDirectorySizeService();
+               if (dss == null)
+                       return;
+
+               try {
+                       workspaceSizeTracker = dss.track(ws);
+                       new WorkspaceSizeTrackerTrim(parent, toolControl, workspaceSizeTracker, Activator.getDefault().getPreferenceStore());
+               } catch (IOException e) {
+                       logger.error("Failed to start workspace size tracking for {}", ws, e);
+               }
+       }
+
+       @PreDestroy
+       void dispose() {
+               try (SizeTracker t = workspaceSizeTracker) {
+               } catch (IOException e) {
+                       logger.error("Failed to shutdown workspace size tracking for {}", workspaceSizeTracker, e);
+               } finally {
+                       workspaceSizeTracker = null;
+               }
+       }
+
+       private static Path getWorkspacePath() {
+               IPath ip = Platform.getLocation();
+               return ip != null ? ip.toFile().toPath() : null;
+       }
+
+       public static void showTracker(boolean show) {
+               IEclipseContext context = PlatformUI.getWorkbench().getService(IEclipseContext.class);
+               if (context == null)
+                       return;
+
+               EModelService modelService = context.get(EModelService.class);
+               MApplication app = context.get(MApplication.class);
+               if (modelService == null || app == null)
+                       return;
+
+               MUIElement element = modelService.find("org.simantics.ui.workspace.tracker.toolcontrol.0", app);
+               if (element != null && element.isToBeRendered() != show) {
+                       element.setToBeRendered(show);
+                       Object widget = element.getWidget();
+                       if (widget instanceof Control) {
+                               ((Control) widget).getShell().layout(null, SWT.ALL | SWT.CHANGED | SWT.DEFER);
+                       }
+               }
+       }
+
+}
\ No newline at end of file