From a819f703da417e3927814c134544a77841ad7723 Mon Sep 17 00:00:00 2001 From: Geoffroy Jamgotchian Date: Tue, 25 Jul 2017 15:00:39 +0200 Subject: [PATCH] Add parameter to specify if a file system has to be accessible remotely (#161) --- .../eu/itesla_project/afs/core/AppData.java | 23 ++++++++-- .../afs/core/AppFileSystem.java | 13 +++++- .../afs/core/AbstractProjectFileTest.java | 2 +- .../itesla_project/afs/core/AfsBaseTest.java | 6 ++- .../afs/core/AppFileSystemToolTest.java | 2 +- .../afs/local/LocalAppFileSystem.java | 3 +- .../afs/local/LocalAppFileSystemConfig.java | 30 +++++-------- .../local/LocalAppFileSystemConfigTest.java | 6 ++- .../local/LocalAppFileSystemProviderTest.java | 3 +- .../afs/mapdb/MapDbAppFileSystem.java | 11 +---- .../afs/mapdb/MapDbAppFileSystemConfig.java | 30 +++++-------- .../afs/mapdb/MapDbAppFileSystemProvider.java | 5 ++- .../mapdb/MapDbAppFileSystemConfigTest.java | 6 ++- .../mapdb/MapDbAppFileSystemProviderTest.java | 3 +- .../storage/AbstractAppFileSystemConfig.java | 44 +++++++++++++++++++ 15 files changed, 125 insertions(+), 62 deletions(-) create mode 100644 afs/afs-storage/src/main/java/eu/itesla_project/afs/storage/AbstractAppFileSystemConfig.java diff --git a/afs/afs-core/src/main/java/eu/itesla_project/afs/core/AppData.java b/afs/afs-core/src/main/java/eu/itesla_project/afs/core/AppData.java index 3550031a..33743374 100644 --- a/afs/afs-core/src/main/java/eu/itesla_project/afs/core/AppData.java +++ b/afs/afs-core/src/main/java/eu/itesla_project/afs/core/AppData.java @@ -6,6 +6,7 @@ */ package eu.itesla_project.afs.core; +import eu.itesla_project.afs.storage.AppFileSystemStorage; import eu.itesla_project.commons.util.ServiceLoaderCache; import eu.itesla_project.computation.ComputationManager; import eu.itesla_project.computation.local.LocalComputationManager; @@ -13,6 +14,7 @@ import eu.itesla_project.iidm.import_.ImportersServiceLoader; import java.util.*; +import java.util.stream.Collectors; /** * @author Geoffroy Jamgotchian @@ -101,7 +103,7 @@ public Set> getProjectFileClasses() { return projectFileClasses; } - public FileExtension getFileExtension(Class fileClass) { + FileExtension getFileExtension(Class fileClass) { Objects.requireNonNull(fileClass); FileExtension extension = fileExtensions.get(fileClass); if (extension == null) { @@ -110,7 +112,7 @@ public FileExtension getFileExtension(Class fileClass) { return extension; } - public FileExtension getFileExtensionByPseudoClass(String filePseudoClass) { + FileExtension getFileExtensionByPseudoClass(String filePseudoClass) { Objects.requireNonNull(filePseudoClass); FileExtension extension = fileExtensionsByPseudoClass.get(filePseudoClass); if (extension == null) { @@ -119,7 +121,7 @@ public FileExtension getFileExtensionByPseudoClass(String filePseudoClass) { return extension; } - public ProjectFileExtension getProjectFileExtension(Class projectFileOrProjectFileBuilderClass) { + ProjectFileExtension getProjectFileExtension(Class projectFileOrProjectFileBuilderClass) { Objects.requireNonNull(projectFileOrProjectFileBuilderClass); ProjectFileExtension extension = projectFileExtensions.get(projectFileOrProjectFileBuilderClass); if (extension == null) { @@ -129,7 +131,7 @@ public ProjectFileExtension getProjectFileExtension(Class projectFileOrProjec return extension; } - public ProjectFileExtension getProjectFileExtensionByPseudoClass(String projectFilePseudoClass) { + ProjectFileExtension getProjectFileExtensionByPseudoClass(String projectFilePseudoClass) { Objects.requireNonNull(projectFilePseudoClass); ProjectFileExtension extension = projectFileExtensionsByPseudoClass.get(projectFilePseudoClass); if (extension == null) { @@ -147,6 +149,19 @@ public ComputationManager getComputationManager() { return computationManager; } + public List getRemotelyAccessibleFileSystemNames() { + return fileSystems.entrySet().stream() + .map(Map.Entry::getValue) + .filter(AppFileSystem::isRemotelyAccessible) + .map(AppFileSystem::getName) + .collect(Collectors.toList()); + } + + public AppFileSystemStorage getRemotelyAccessibleStorage(String fileSystemName) { + AppFileSystem afs = fileSystems.get(fileSystemName); + return afs != null ? afs.getStorage() : null; + } + @Override public void close() throws Exception { getFileSystems().forEach(AppFileSystem::close); diff --git a/afs/afs-core/src/main/java/eu/itesla_project/afs/core/AppFileSystem.java b/afs/afs-core/src/main/java/eu/itesla_project/afs/core/AppFileSystem.java index 588c3089..402f3fb6 100644 --- a/afs/afs-core/src/main/java/eu/itesla_project/afs/core/AppFileSystem.java +++ b/afs/afs-core/src/main/java/eu/itesla_project/afs/core/AppFileSystem.java @@ -21,12 +21,15 @@ public class AppFileSystem implements AutoCloseable { private final String name; + private final boolean remotelyAccessible; + private final AppFileSystemStorage storage; private AppData data; - public AppFileSystem(String name, AppFileSystemStorage storage) { + public AppFileSystem(String name, boolean remotelyAccessible, AppFileSystemStorage storage) { this.name = Objects.requireNonNull(name); + this.remotelyAccessible = remotelyAccessible; this.storage = Objects.requireNonNull(storage); } @@ -34,6 +37,14 @@ public String getName() { return name; } + public boolean isRemotelyAccessible() { + return remotelyAccessible; + } + + AppFileSystemStorage getStorage() { + return storage; + } + public Folder getRootFolder() { return new Folder(storage.getRootNode(), storage, this); } diff --git a/afs/afs-core/src/test/java/eu/itesla_project/afs/core/AbstractProjectFileTest.java b/afs/afs-core/src/test/java/eu/itesla_project/afs/core/AbstractProjectFileTest.java index 078751da..be557aff 100644 --- a/afs/afs-core/src/test/java/eu/itesla_project/afs/core/AbstractProjectFileTest.java +++ b/afs/afs-core/src/test/java/eu/itesla_project/afs/core/AbstractProjectFileTest.java @@ -54,7 +54,7 @@ public void setup() throws IOException { ImportersLoader importersLoader = new ImportersLoaderList(getImporters(), Collections.emptyList()); ComputationManager computationManager = Mockito.mock(ComputationManager.class); storage = createStorage(); - afs = new AppFileSystem("mem", storage); + afs = new AppFileSystem("mem", false, storage); ad = new AppData(computationManager, importersLoader, Collections.singletonList(computationManager1 -> Collections.singletonList(afs)), diff --git a/afs/afs-core/src/test/java/eu/itesla_project/afs/core/AfsBaseTest.java b/afs/afs-core/src/test/java/eu/itesla_project/afs/core/AfsBaseTest.java index 8c63b8a3..8e03c246 100644 --- a/afs/afs-core/src/test/java/eu/itesla_project/afs/core/AfsBaseTest.java +++ b/afs/afs-core/src/test/java/eu/itesla_project/afs/core/AfsBaseTest.java @@ -7,9 +7,9 @@ package eu.itesla_project.afs.core; import com.google.common.collect.ImmutableList; +import eu.itesla_project.afs.mapdb.storage.MapDbAppFileSystemStorage; import eu.itesla_project.afs.storage.AppFileSystemStorage; import eu.itesla_project.afs.storage.NodeId; -import eu.itesla_project.afs.mapdb.storage.MapDbAppFileSystemStorage; import eu.itesla_project.computation.ComputationManager; import eu.itesla_project.iidm.import_.ImportersLoader; import eu.itesla_project.iidm.import_.ImportersLoaderList; @@ -109,7 +109,7 @@ public void setup() throws IOException { ImportersLoader importersLoader = new ImportersLoaderList(Collections.emptyList(), Collections.emptyList()); ComputationManager computationManager = Mockito.mock(ComputationManager.class); - afs = new AppFileSystem("mem", storage); + afs = new AppFileSystem("mem", true, storage); ad = new AppData(computationManager, importersLoader, Collections.singletonList(computationManager1 -> Collections.singletonList(afs)), Collections.emptyList(), Collections.singletonList(new FooFileExtension())); } @@ -123,6 +123,8 @@ public void tearDown() throws Exception { public void baseTest() throws IOException { assertSame(afs, ad.getFileSystem("mem")); assertNull(ad.getFileSystem("???")); + assertEquals(Collections.singletonList("mem"), ad.getRemotelyAccessibleFileSystemNames()); + assertNotNull(ad.getRemotelyAccessibleStorage("mem")); assertEquals("mem", afs.getName()); assertEquals(1, ad.getProjectFileClasses().size()); Folder root = afs.getRootFolder(); diff --git a/afs/afs-core/src/test/java/eu/itesla_project/afs/core/AppFileSystemToolTest.java b/afs/afs-core/src/test/java/eu/itesla_project/afs/core/AppFileSystemToolTest.java index 145f6ae3..abaec733 100644 --- a/afs/afs-core/src/test/java/eu/itesla_project/afs/core/AppFileSystemToolTest.java +++ b/afs/afs-core/src/test/java/eu/itesla_project/afs/core/AppFileSystemToolTest.java @@ -37,7 +37,7 @@ public AppFileSystemToolTest() { @Override protected AppData createAppData() { AppFileSystemStorage storage = MapDbAppFileSystemStorage.createHeap("mem"); - AppFileSystem afs = new AppFileSystem("mem", storage); + AppFileSystem afs = new AppFileSystem("mem", false, storage); AppData appData = new AppData(computationManager, importersLoader, Collections.singletonList(computationManager1 -> Collections.singletonList(afs)), Collections.emptyList(), Collections.emptyList()); afs.getRootFolder().createProject("test_project1", ""); diff --git a/afs/afs-local/src/main/java/eu/itesla_project/afs/local/LocalAppFileSystem.java b/afs/afs-local/src/main/java/eu/itesla_project/afs/local/LocalAppFileSystem.java index e854b66b..6448099d 100644 --- a/afs/afs-local/src/main/java/eu/itesla_project/afs/local/LocalAppFileSystem.java +++ b/afs/afs-local/src/main/java/eu/itesla_project/afs/local/LocalAppFileSystem.java @@ -21,6 +21,7 @@ public class LocalAppFileSystem extends AppFileSystem { public LocalAppFileSystem(LocalAppFileSystemConfig config, ComputationManager computationManager, ImportConfig importConfig, ImportersLoader importersLoader) { super(config.getDriveName(), - new LocalAppFileSystemStorage(config.getRootDir(), config.getDriveName(), computationManager, importConfig, importersLoader)); + config.isRemotelyAccessible(), + new LocalAppFileSystemStorage(config.getRootDir(), config.getDriveName(), computationManager, importConfig, importersLoader)); } } \ No newline at end of file diff --git a/afs/afs-local/src/main/java/eu/itesla_project/afs/local/LocalAppFileSystemConfig.java b/afs/afs-local/src/main/java/eu/itesla_project/afs/local/LocalAppFileSystemConfig.java index e4529558..c4437cac 100644 --- a/afs/afs-local/src/main/java/eu/itesla_project/afs/local/LocalAppFileSystemConfig.java +++ b/afs/afs-local/src/main/java/eu/itesla_project/afs/local/LocalAppFileSystemConfig.java @@ -7,6 +7,7 @@ package eu.itesla_project.afs.local; import eu.itesla_project.afs.core.AfsException; +import eu.itesla_project.afs.storage.AbstractAppFileSystemConfig; import eu.itesla_project.commons.config.ModuleConfig; import eu.itesla_project.commons.config.PlatformConfig; @@ -19,9 +20,7 @@ /** * @author Geoffroy Jamgotchian */ -public class LocalAppFileSystemConfig { - - private String driveName; +public class LocalAppFileSystemConfig extends AbstractAppFileSystemConfig { private Path rootDir; @@ -33,17 +32,21 @@ public static List load(PlatformConfig platformConfig) List configs = new ArrayList<>(); ModuleConfig moduleConfig = platformConfig.getModuleConfigIfExists("local-app-file-system"); if (moduleConfig != null) { - if (moduleConfig.hasProperty("drive-name") && moduleConfig.hasProperty("root-dir")) { + if (moduleConfig.hasProperty("drive-name") + && moduleConfig.hasProperty("root-dir")) { String driveName = moduleConfig.getStringProperty("drive-name"); + boolean remotelyAccessible = moduleConfig.getBooleanProperty("remotely-accessible", DEFAULT_REMOTELY_ACCESSIBLE); Path rootDir = moduleConfig.getPathProperty("root-dir"); - configs.add(new LocalAppFileSystemConfig(driveName, rootDir)); + configs.add(new LocalAppFileSystemConfig(driveName, remotelyAccessible, rootDir)); } int maxAdditionalDriveCount = moduleConfig.getIntProperty("max-additional-drive-count", 0); for (int i = 0; i < maxAdditionalDriveCount; i++) { - if (moduleConfig.hasProperty("drive-name-" + i) && moduleConfig.hasProperty("root-dir-" + i)) { + if (moduleConfig.hasProperty("drive-name-" + i) + && moduleConfig.hasProperty("root-dir-" + i)) { String driveName = moduleConfig.getStringProperty("drive-name-" + i); + boolean remotelyAccessible = moduleConfig.getBooleanProperty("remotely-accessible-" + i, DEFAULT_REMOTELY_ACCESSIBLE); Path rootDir = moduleConfig.getPathProperty("root-dir-" + i); - configs.add(new LocalAppFileSystemConfig(driveName, rootDir)); + configs.add(new LocalAppFileSystemConfig(driveName, remotelyAccessible, rootDir)); } } } @@ -58,20 +61,11 @@ private static Path checkRootDir(Path rootDir) { return rootDir; } - public LocalAppFileSystemConfig(String driveName, Path rootDir) { - this.driveName = Objects.requireNonNull(driveName); + public LocalAppFileSystemConfig(String driveName, boolean remotelyAccessible, Path rootDir) { + super(driveName, remotelyAccessible); this.rootDir = checkRootDir(rootDir).toAbsolutePath(); } - public String getDriveName() { - return driveName; - } - - public LocalAppFileSystemConfig setDriveName(String driveName) { - this.driveName = Objects.requireNonNull(driveName); - return this; - } - public Path getRootDir() { return rootDir; } diff --git a/afs/afs-local/src/test/java/eu/itesla_project/afs/local/LocalAppFileSystemConfigTest.java b/afs/afs-local/src/test/java/eu/itesla_project/afs/local/LocalAppFileSystemConfigTest.java index bb2d267f..5e3642d3 100644 --- a/afs/afs-local/src/test/java/eu/itesla_project/afs/local/LocalAppFileSystemConfigTest.java +++ b/afs/afs-local/src/test/java/eu/itesla_project/afs/local/LocalAppFileSystemConfigTest.java @@ -18,8 +18,7 @@ import java.nio.file.Files; import java.util.List; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; +import static org.junit.Assert.*; /** * @author Geoffroy Jamgotchian @@ -41,6 +40,7 @@ public void setUp() throws Exception { moduleConfig.setPathProperty("root-dir", fileSystem.getPath("/work")); moduleConfig.setStringProperty("max-additional-drive-count", "2"); moduleConfig.setStringProperty("drive-name-1", "local1"); + moduleConfig.setStringProperty("remotely-accessible-1", "true"); moduleConfig.setPathProperty("root-dir-1", fileSystem.getPath("/work")); } @@ -56,8 +56,10 @@ public void loadTest() { LocalAppFileSystemConfig config = configs.get(0); LocalAppFileSystemConfig config1 = configs.get(1); assertEquals("local", config.getDriveName()); + assertFalse(config.isRemotelyAccessible()); assertEquals(fileSystem.getPath("/work"), config.getRootDir()); assertEquals("local1", config1.getDriveName()); + assertTrue(config1.isRemotelyAccessible()); assertEquals(fileSystem.getPath("/work"), config1.getRootDir()); config.setDriveName("local2"); config.setRootDir(fileSystem.getPath("/tmp")); diff --git a/afs/afs-local/src/test/java/eu/itesla_project/afs/local/LocalAppFileSystemProviderTest.java b/afs/afs-local/src/test/java/eu/itesla_project/afs/local/LocalAppFileSystemProviderTest.java index fbb55309..4e7cecd2 100644 --- a/afs/afs-local/src/test/java/eu/itesla_project/afs/local/LocalAppFileSystemProviderTest.java +++ b/afs/afs-local/src/test/java/eu/itesla_project/afs/local/LocalAppFileSystemProviderTest.java @@ -44,7 +44,7 @@ public void tearDown() throws Exception { @Test public void test() { ComputationManager computationManager = Mockito.mock(ComputationManager.class); - LocalAppFileSystemConfig config = new LocalAppFileSystemConfig("drive", fileSystem.getPath("/work")); + LocalAppFileSystemConfig config = new LocalAppFileSystemConfig("drive", true, fileSystem.getPath("/work")); List fileSystems = new LocalAppFileSystemProvider(Collections.singletonList(config), new ImportConfig(), new ImportersLoaderList(Collections.emptyList(), Collections.emptyList())) @@ -52,5 +52,6 @@ public void test() { assertEquals(1, fileSystems.size()); assertTrue(fileSystems.get(0) instanceof LocalAppFileSystem); assertEquals("drive", fileSystems.get(0).getName()); + assertTrue(fileSystems.get(0).isRemotelyAccessible()); } } \ No newline at end of file diff --git a/afs/afs-mapdb/src/main/java/eu/itesla_project/afs/mapdb/MapDbAppFileSystem.java b/afs/afs-mapdb/src/main/java/eu/itesla_project/afs/mapdb/MapDbAppFileSystem.java index afbdce83..f6896889 100644 --- a/afs/afs-mapdb/src/main/java/eu/itesla_project/afs/mapdb/MapDbAppFileSystem.java +++ b/afs/afs-mapdb/src/main/java/eu/itesla_project/afs/mapdb/MapDbAppFileSystem.java @@ -9,19 +9,12 @@ import eu.itesla_project.afs.core.AppFileSystem; import eu.itesla_project.afs.mapdb.storage.MapDbAppFileSystemStorage; -import java.nio.file.Path; -import java.util.Objects; -import java.util.function.BiFunction; - /** * @author Geoffroy Jamgotchian */ public class MapDbAppFileSystem extends AppFileSystem { - public MapDbAppFileSystem(MapDbAppFileSystemConfig config, - BiFunction storageProvider) { - super(Objects.requireNonNull(config).getDriveName(), - Objects.requireNonNull(storageProvider).apply(config.getDriveName(), - config.getDbFile())); + public MapDbAppFileSystem(String driveName, boolean remotelyAccessible, MapDbAppFileSystemStorage storage) { + super(driveName, remotelyAccessible, storage); } } diff --git a/afs/afs-mapdb/src/main/java/eu/itesla_project/afs/mapdb/MapDbAppFileSystemConfig.java b/afs/afs-mapdb/src/main/java/eu/itesla_project/afs/mapdb/MapDbAppFileSystemConfig.java index 9f19f7cd..7d650e95 100644 --- a/afs/afs-mapdb/src/main/java/eu/itesla_project/afs/mapdb/MapDbAppFileSystemConfig.java +++ b/afs/afs-mapdb/src/main/java/eu/itesla_project/afs/mapdb/MapDbAppFileSystemConfig.java @@ -7,6 +7,7 @@ package eu.itesla_project.afs.mapdb; import eu.itesla_project.afs.core.AfsException; +import eu.itesla_project.afs.storage.AbstractAppFileSystemConfig; import eu.itesla_project.commons.config.ModuleConfig; import eu.itesla_project.commons.config.PlatformConfig; @@ -19,9 +20,7 @@ /** * @author Geoffroy Jamgotchian */ -public class MapDbAppFileSystemConfig { - - private String driveName; +public class MapDbAppFileSystemConfig extends AbstractAppFileSystemConfig { private Path dbFile; @@ -33,17 +32,21 @@ public static List load(PlatformConfig platformConfig) List configs = new ArrayList<>(); ModuleConfig moduleConfig = platformConfig.getModuleConfigIfExists("mapdb-app-file-system"); if (moduleConfig != null) { - if (moduleConfig.hasProperty("drive-name") && moduleConfig.hasProperty("db-file")) { + if (moduleConfig.hasProperty("drive-name") + && moduleConfig.hasProperty("db-file")) { String driveName = moduleConfig.getStringProperty("drive-name"); + boolean remotelyAccessible = moduleConfig.getBooleanProperty("remotely-accessible", DEFAULT_REMOTELY_ACCESSIBLE); Path rootDir = moduleConfig.getPathProperty("db-file"); - configs.add(new MapDbAppFileSystemConfig(driveName, rootDir)); + configs.add(new MapDbAppFileSystemConfig(driveName, remotelyAccessible, rootDir)); } int maxAdditionalDriveCount = moduleConfig.getIntProperty("max-additional-drive-count", 0); for (int i = 0; i < maxAdditionalDriveCount; i++) { - if (moduleConfig.hasProperty("drive-name-" + i) && moduleConfig.hasProperty("db-file-" + i)) { + if (moduleConfig.hasProperty("drive-name-" + i) + && moduleConfig.hasProperty("db-file-" + i)) { String driveName = moduleConfig.getStringProperty("drive-name-" + i); + boolean remotelyAccessible = moduleConfig.getBooleanProperty("remotely-accessible-" + i, DEFAULT_REMOTELY_ACCESSIBLE); Path rootDir = moduleConfig.getPathProperty("db-file-" + i); - configs.add(new MapDbAppFileSystemConfig(driveName, rootDir)); + configs.add(new MapDbAppFileSystemConfig(driveName, remotelyAccessible, rootDir)); } } } @@ -58,20 +61,11 @@ private static Path checkDbFile(Path dbFile) { return dbFile; } - public MapDbAppFileSystemConfig(String driveName, Path dbFile) { - this.driveName = Objects.requireNonNull(driveName); + public MapDbAppFileSystemConfig(String driveName, boolean remotelyAccessible, Path dbFile) { + super(driveName, remotelyAccessible); this.dbFile = checkDbFile(dbFile); } - public String getDriveName() { - return driveName; - } - - public MapDbAppFileSystemConfig setDriveName(String driveName) { - this.driveName = Objects.requireNonNull(driveName); - return this; - } - public Path getDbFile() { return dbFile; } diff --git a/afs/afs-mapdb/src/main/java/eu/itesla_project/afs/mapdb/MapDbAppFileSystemProvider.java b/afs/afs-mapdb/src/main/java/eu/itesla_project/afs/mapdb/MapDbAppFileSystemProvider.java index 4413d21d..0e3b3168 100644 --- a/afs/afs-mapdb/src/main/java/eu/itesla_project/afs/mapdb/MapDbAppFileSystemProvider.java +++ b/afs/afs-mapdb/src/main/java/eu/itesla_project/afs/mapdb/MapDbAppFileSystemProvider.java @@ -42,7 +42,10 @@ public MapDbAppFileSystemProvider(List configs, @Override public List getFileSystems(ComputationManager computationManager) { return configs.stream() - .map(config -> new MapDbAppFileSystem(config, storageProvider)) + .map(config -> { + MapDbAppFileSystemStorage storage = storageProvider.apply(config.getDriveName(), config.getDbFile()); + return new MapDbAppFileSystem(config.getDriveName(), config.isRemotelyAccessible(), storage); + }) .collect(Collectors.toList()); } } diff --git a/afs/afs-mapdb/src/test/java/eu/itesla_project/afs/mapdb/MapDbAppFileSystemConfigTest.java b/afs/afs-mapdb/src/test/java/eu/itesla_project/afs/mapdb/MapDbAppFileSystemConfigTest.java index 50cb4d95..3a9b0ed8 100644 --- a/afs/afs-mapdb/src/test/java/eu/itesla_project/afs/mapdb/MapDbAppFileSystemConfigTest.java +++ b/afs/afs-mapdb/src/test/java/eu/itesla_project/afs/mapdb/MapDbAppFileSystemConfigTest.java @@ -18,8 +18,7 @@ import java.nio.file.Files; import java.util.List; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; +import static org.junit.Assert.*; /** * @author Geoffroy Jamgotchian @@ -39,6 +38,7 @@ public void setUp() throws Exception { platformConfig = new InMemoryPlatformConfig(fileSystem); MapModuleConfig moduleConfig = platformConfig.createModuleConfig("mapdb-app-file-system"); moduleConfig.setStringProperty("drive-name", "db"); + moduleConfig.setStringProperty("remotely-accessible", "true"); moduleConfig.setPathProperty("db-file", fileSystem.getPath("/db")); moduleConfig.setStringProperty("max-additional-drive-count", "1"); moduleConfig.setStringProperty("drive-name-0", "db0"); @@ -57,8 +57,10 @@ public void loadTest() { MapDbAppFileSystemConfig config = configs.get(0); MapDbAppFileSystemConfig config1 = configs.get(1); assertEquals("db", config.getDriveName()); + assertTrue(config.isRemotelyAccessible()); assertEquals(fileSystem.getPath("/db"), config.getDbFile()); assertEquals("db0", config1.getDriveName()); + assertFalse(config1.isRemotelyAccessible()); assertEquals(fileSystem.getPath("/db0"), config1.getDbFile()); config.setDriveName("db2"); config.setDbFile(fileSystem.getPath("/db2")); diff --git a/afs/afs-mapdb/src/test/java/eu/itesla_project/afs/mapdb/MapDbAppFileSystemProviderTest.java b/afs/afs-mapdb/src/test/java/eu/itesla_project/afs/mapdb/MapDbAppFileSystemProviderTest.java index 48799c99..6470834f 100644 --- a/afs/afs-mapdb/src/test/java/eu/itesla_project/afs/mapdb/MapDbAppFileSystemProviderTest.java +++ b/afs/afs-mapdb/src/test/java/eu/itesla_project/afs/mapdb/MapDbAppFileSystemProviderTest.java @@ -49,12 +49,13 @@ public void tearDown() throws Exception { @Test public void test() { ComputationManager computationManager = Mockito.mock(ComputationManager.class); - MapDbAppFileSystemConfig config = new MapDbAppFileSystemConfig("drive", dbFile); + MapDbAppFileSystemConfig config = new MapDbAppFileSystemConfig("drive", true, dbFile); List fileSystems = new MapDbAppFileSystemProvider(Collections.singletonList(config), (name, file) -> MapDbAppFileSystemStorage.createHeap(name)) .getFileSystems(computationManager); assertEquals(1, fileSystems.size()); assertTrue(fileSystems.get(0) instanceof MapDbAppFileSystem); assertEquals("drive", fileSystems.get(0).getName()); + assertTrue(fileSystems.get(0).isRemotelyAccessible()); } } \ No newline at end of file diff --git a/afs/afs-storage/src/main/java/eu/itesla_project/afs/storage/AbstractAppFileSystemConfig.java b/afs/afs-storage/src/main/java/eu/itesla_project/afs/storage/AbstractAppFileSystemConfig.java new file mode 100644 index 00000000..00c8fca8 --- /dev/null +++ b/afs/afs-storage/src/main/java/eu/itesla_project/afs/storage/AbstractAppFileSystemConfig.java @@ -0,0 +1,44 @@ +/** + * Copyright (c) 2017, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package eu.itesla_project.afs.storage; + +import java.util.Objects; + +/** + * @author Geoffroy Jamgotchian + */ +public abstract class AbstractAppFileSystemConfig> { + + protected static final boolean DEFAULT_REMOTELY_ACCESSIBLE = false; + + protected String driveName; + + protected boolean remotelyAccessible; + + public AbstractAppFileSystemConfig(String driveName, boolean remotelyAccessible) { + this.driveName = Objects.requireNonNull(driveName); + this.remotelyAccessible = remotelyAccessible; + } + + public String getDriveName() { + return driveName; + } + + public T setDriveName(String driveName) { + this.driveName = Objects.requireNonNull(driveName); + return (T) this; + } + + public boolean isRemotelyAccessible() { + return remotelyAccessible; + } + + public T setRemotelyAccessible(boolean remotelyAccessible) { + this.remotelyAccessible = remotelyAccessible; + return (T) this; + } +}