Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/navigator/FolderItem.java')
-rw-r--r--experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/navigator/FolderItem.java47
1 files changed, 46 insertions, 1 deletions
diff --git a/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/navigator/FolderItem.java b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/navigator/FolderItem.java
index 3775e3564..b5138b09a 100644
--- a/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/navigator/FolderItem.java
+++ b/experimental/compensator/org.eclipse.fx.code.compensator.project/src/org/eclipse/fx/code/compensator/project/navigator/FolderItem.java
@@ -3,14 +3,19 @@ package org.eclipse.fx.code.compensator.project.navigator;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
+import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.BiFunction;
import java.util.stream.Collectors;
+import javafx.application.Platform;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import org.eclipse.fx.code.compensator.project.ProjectNavigatorItem;
+import org.eclipse.fx.core.FilesystemService;
+import org.eclipse.fx.core.FilesystemService.Kind;
import org.eclipse.fx.core.URI;
+import org.eclipse.fx.core.Util;
public class FolderItem extends PathItem {
private ObservableList<ProjectNavigatorItem> items;
@@ -28,6 +33,29 @@ public class FolderItem extends PathItem {
public FolderItem(ProjectNavigatorItem parent, Path path, BiFunction<Path, FolderItem, PathItem> pathItemFactory) {
super(parent,path);
this.pathItemFactory = pathItemFactory;
+ Util.lookupService(FilesystemService.class).observePath(path, this::handleFilesystemMod);
+ }
+
+ private void handleFilesystemMod(Kind kind, Path path) {
+ Platform.runLater(() -> _handleFilesystemMod(kind,path));
+ }
+
+ public void _handleFilesystemMod(Kind kind, Path path) {
+ if( items != null ) {
+ if( path.startsWith(getDomainObject()) ) {
+ PathItem item = null;
+ for( ProjectNavigatorItem i : items ) {
+ PathItem pi = (PathItem) i;
+ if( path.startsWith(pi.getDomainObject()) ) {
+ item = pi;
+ }
+ }
+
+ if( item == null ) {
+ refresh();
+ }
+ }
+ }
}
public FolderItem(ProjectNavigatorItem parent, Path path) {
@@ -49,6 +77,23 @@ public class FolderItem extends PathItem {
// TODO Auto-generated method stub
return null;
}
+
+ public void refresh() {
+ AtomicInteger idx = new AtomicInteger();
+
+ //TODO Need to fix that we remove items currently shown if not yet found anymore
+ try {
+ Files.newDirectoryStream(path).forEach((p) -> {
+ if( ! items.stream().filter( i -> ((Path)i.getDomainObject()).equals(p) ).findFirst().isPresent() ) {
+ items.add(idx.get(), pathItemFactory.apply(p.toAbsolutePath(), this));
+ }
+ idx.incrementAndGet();
+ });
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
@Override
public ObservableList<ProjectNavigatorItem> getChildren() {
@@ -63,7 +108,7 @@ public class FolderItem extends PathItem {
}
return items;
}
-
+
@Override
public boolean isLeaf() {
// TODO Auto-generated method stub

Back to the top