diff options
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.java | 47 |
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 |