Skip to content
This repository has been archived by the owner on Mar 11, 2024. It is now read-only.

Commit

Permalink
File API
Browse files Browse the repository at this point in the history
This code won't compile.
  • Loading branch information
BelgianDev committed Nov 18, 2023
1 parent 5a5e0b9 commit 415f906
Show file tree
Hide file tree
Showing 9 changed files with 163 additions and 16 deletions.
16 changes: 16 additions & 0 deletions api/src/main/java/fr/atlasworld/network/api/file/FileManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,22 @@ public interface FileManager {
*/
void registerModuleFile(Module module, File file);

/**
* Checks if a file is registered.
* @see
* @param file
* @return
*/
boolean isFileRegistered(File file);

/**
* Gets the module registered as the owner of the specified file.
*
* @param file file to check.
* @return owner module of the file.
*/
Module whoIsOwner(File file);

/**
* Register a configuration file for a module.
*
Expand Down
27 changes: 27 additions & 0 deletions api/src/main/java/fr/atlasworld/network/api/file/FileOwner.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package fr.atlasworld.network.api.file;

import org.jetbrains.annotations.NotNull;

/**
* Member of AtlasNetworks file api, This is not a file system owner!
* <p>
* FileOwner are used by the cleanup system to prevent deletion of used files or directories.
* File can be registered by a module when its activating.
* @see fr.atlasworld.network.api.file.FileManager
*/
public interface FileOwner {

/**
* Unique ID of the owner, your module ID is being used here.
*/
@NotNull
String ownerId();

/**
* Checks if this owner allows other owners to read/write to file registered by him by default.
* AtlasNetwork Core System will always have access to the owner's files.
*/
boolean allowsExternalOwnerUsage();


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package fr.atlasworld.network.api.file;

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.io.File;

/**
* Registered File information.
*/
public interface RegisteredFile {

/**
* Retrieve the file owner.
* @return null if the file does not have an owner.
*/
@Nullable
FileOwner getOwner();

/**
* Get the file.
*/
@NotNull
File sourceFile();

/**
* Checks if reading the file is allowed.
*/
boolean readAllowed();

/**
* Checks if writing to the file is allowed.
*/
boolean writeAllowed();
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import com.google.gson.Gson;
import com.google.gson.JsonElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

/**
* Configuration Schema, sets all the required information for the configuration to work properly.
Expand All @@ -13,6 +15,7 @@ public interface ConfigurationSchema<T extends ConfigurationFile> {
* Defines the configuration file path inside the {@code configurations/} directory.
* @return configuration file path.
*/
@NotNull
String filepath();

/**
Expand All @@ -25,13 +28,15 @@ public interface ConfigurationSchema<T extends ConfigurationFile> {
* Get the default configuration.
* @return default configuration.
*/
@NotNull
T defaultConfiguration();

/**
* Retrieve the class of the configuration file.
* Used internally to parse the file.
* @return configuration file class.
*/
@NotNull
Class<T> configurationClass();

/**
Expand All @@ -49,5 +54,6 @@ public interface ConfigurationSchema<T extends ConfigurationFile> {
*
* @return the updated configuration file
*/
@Nullable
T updateConfiguration(JsonElement json, Gson gson, int currentVersion);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import fr.atlasworld.network.api.file.configuration.ConfigurationSchema;
import org.jetbrains.annotations.NotNull;

public class TestConfigurationSchema implements ConfigurationSchema<TestConfiguration> {
@Override
public String filepath() {
public @NotNull String filepath() {
return "test_dir/test";
}

Expand All @@ -16,12 +17,12 @@ public int configurationVersion() {
}

@Override
public TestConfiguration defaultConfiguration() {
public @NotNull TestConfiguration defaultConfiguration() {
return new TestConfiguration(true);
}

@Override
public Class<TestConfiguration> configurationClass() {
public @NotNull Class<TestConfiguration> configurationClass() {
return TestConfiguration.class;
}

Expand Down
13 changes: 12 additions & 1 deletion src/main/java/fr/atlasworld/network/core/AtlasNetwork.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,25 @@
package fr.atlasworld.network.core;

import fr.atlasworld.network.api.AtlasNetworkServer;
import fr.atlasworld.network.api.file.FileManager;
import fr.atlasworld.network.boot.LaunchArgs;
import fr.atlasworld.network.core.module.ModuleManager;

public class AtlasNetwork {
public class AtlasNetwork implements AtlasNetworkServer {
private final FileManager fileManager;

private AtlasNetwork(final LaunchArgs args) {
ModuleManager moduleManager = ModuleManager.init(args);
moduleManager.load();

//Module Manager -> Load Modules -> Done Later once AtlasNetwork is initialized
moduleManager.initialize();


}

@Override
public FileManager getFileManager() {
return
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package fr.atlasworld.network.core.file;

import fr.atlasworld.network.api.file.FileManager;
import fr.atlasworld.network.api.file.configuration.ConfigurationFile;
import fr.atlasworld.network.api.file.configuration.ConfigurationReader;
import fr.atlasworld.network.api.file.configuration.ConfigurationSchema;
import fr.atlasworld.network.api.file.exception.unchecked.FileRegistrationException;
import fr.atlasworld.network.api.module.Module;
import fr.atlasworld.network.boot.LaunchArgs;

import java.io.File;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class SystemFileManager implements FileManager {
private final Map<File, Module> registeredFilesMap = new ConcurrentHashMap<>();

@Override
public void registerModuleFile(Module module, File file) throws FileRegistrationException {
this.registeredFilesMap.containsKey(file)
}

@Override
public <T extends ConfigurationFile> ConfigurationReader<T> registerConfiguration(Module module, ConfigurationSchema<T> schema) throws FileRegistrationException {
String filename = schema.filepath().endsWith(".json") ? schema.filepath() : schema.filepath() + ".json";
File configurationFile = SystemFileManager.getConfigurationFile(filename);

this.registerModuleFile(module, configurationFile); // Try to register the file


}

// Static fields
public static final File WORKING_DIRECTORY = new File(System.getProperty("user.dir"));

public static File getDataDirectory() {
return LaunchArgs.getArguments().getDataDirectory();
}

public static File getModuleDirectory() {
return LaunchArgs.getArguments().getModuleDirectory();
}

public static File getConfigurationDirectory() {
return LaunchArgs.getArguments().getConfigurationDirectory();
}

public static File getConfigurationFile(String name) {
return new File(getConfigurationDirectory(), name);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,17 @@
package fr.atlasworld.network.core.module.lifecycle;

import fr.atlasworld.network.api.AtlasNetworkServer;
import fr.atlasworld.network.api.module.lifecycle.ModuleActivationContext;

public class ModuleActivateContextImpl implements ModuleActivationContext {
private final AtlasNetworkServer server;

public ModuleActivateContextImpl(AtlasNetworkServer server) {
this.server = server;
}

@Override
public AtlasNetworkServer getServer() {
return this.server;
}
}
12 changes: 0 additions & 12 deletions src/main/java/fr/atlasworld/network/core/util/FileManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,5 @@
import java.io.File;

public class FileManager {
public static final File WORKING_DIRECTORY = new File(System.getProperty("user.dir"));

public static File getDataDirectory() {
return LaunchArgs.getArguments().getDataDirectory();
}

public static File getModuleDirectory() {
return LaunchArgs.getArguments().getModuleDirectory();
}

public static File getConfigurationDirectory() {
return LaunchArgs.getArguments().getConfigurationDirectory();
}
}

0 comments on commit 415f906

Please sign in to comment.