mirror of
https://github.com/SimplexDevelopment/Configurations.git
synced 2024-12-22 08:07:37 +00:00
More implementations
This commit is contained in:
parent
c69709a4a1
commit
cce307035b
6
.idea/vcs.xml
generated
Normal file
6
.idea/vcs.xml
generated
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
@ -3,8 +3,6 @@ package io.github.simplexdev.configurations;
|
||||
import io.github.simplexdev.configurations.api.INode;
|
||||
import io.github.simplexdev.configurations.api.ISection;
|
||||
|
||||
import java.math.BigInteger;
|
||||
|
||||
public class ConfigFactory {
|
||||
public ISection createNewSection(String name) {
|
||||
ISection section = new Section(name);
|
||||
@ -32,7 +30,7 @@ public class ConfigFactory {
|
||||
return new Node<>(name, value);
|
||||
}
|
||||
|
||||
public INode<BigInteger> bigIntegerNode(String name, BigInteger value) {
|
||||
public INode<Double> doubleNode(String name, Double value) {
|
||||
return new Node<>(name, value);
|
||||
}
|
||||
}
|
||||
|
@ -2,7 +2,6 @@ package io.github.simplexdev.configurations;
|
||||
|
||||
import io.github.simplexdev.configurations.api.ISection;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
@ -16,7 +16,7 @@ public class Group implements IGroup {
|
||||
private final List<INode<?>> nodes = new ArrayList<>();
|
||||
private final String name;
|
||||
private final ISection section;
|
||||
private IGroup group;
|
||||
private IGroup group = null;
|
||||
|
||||
public Group(ISection section, String name, INode<?>... nodes) {
|
||||
this.nodes.addAll(Arrays.asList(nodes));
|
||||
@ -24,47 +24,86 @@ public class Group implements IGroup {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public Group(ISection section, String name) {
|
||||
/**
|
||||
* Initializes this group as an empty group.
|
||||
*
|
||||
* @param section The parent section for this group.
|
||||
* @param name The name of this group.
|
||||
*/
|
||||
public Group(@NotNull ISection section, @NotNull String name) {
|
||||
this.section = section;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public Group(ISection section, IGroup group, String name) {
|
||||
this.section = section;
|
||||
/**
|
||||
* Initializes this Group as a nested group.
|
||||
* It is important to note that the section assigned to this group will be the section assigned to the parent group.
|
||||
* If this is a nested group of a nested group, it will search upwards until the parent group is discovered,
|
||||
* and the parent section of that group will be assigned.
|
||||
*
|
||||
* @param group The parent group of this group.
|
||||
* @param name The name of this group.
|
||||
*/
|
||||
public Group(@NotNull IGroup group, @NotNull String name) {
|
||||
this.section = group.getSection();
|
||||
this.group = group;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
/**
|
||||
* Creates a nested group
|
||||
*
|
||||
* @param name The name of the nested group
|
||||
* @param nodes The node entries to include in the group
|
||||
* @return The created nested group.
|
||||
*/
|
||||
@Override
|
||||
public IGroup createNestedGroup(IGroup group, String name, INode<?>... nodes) {
|
||||
IGroup f = new Group(this, name);
|
||||
nestedGroups.add(f);
|
||||
return f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IGroup createGroup(String name, INode<?>... nodes) {
|
||||
IGroup group = new Group(section, name, nodes);
|
||||
/**
|
||||
* Creates an empty nested group.
|
||||
*
|
||||
* @param group The parent group.
|
||||
* @param name The name of the nested group.
|
||||
* @return The nested group.
|
||||
*/
|
||||
public IGroup emptyGroup(IGroup group, String name) {
|
||||
IGroup f = new Group(group, name);
|
||||
nestedGroups.add(group);
|
||||
return f;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the parent group. If there is no parent group, this will return null.
|
||||
* Please remember to use proper null catching when implementing this.
|
||||
*
|
||||
* @return The parent group, or null if there is no parent.
|
||||
*/
|
||||
@Override
|
||||
@Nullable
|
||||
public IGroup getParentGroup() {
|
||||
return group;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a group as a child of this group.
|
||||
* @param name The name of the nested group.
|
||||
* @return The nested group.
|
||||
* @return The name of this group.
|
||||
*/
|
||||
public IGroup emptyGroup(String name) {
|
||||
IGroup group = new Group(section, name);
|
||||
nestedGroups.add(group);
|
||||
return group;
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a nested group.
|
||||
* Can return null if no nested group exists.
|
||||
*
|
||||
* @param name The name of the nested group
|
||||
* @return The nested group.
|
||||
*/
|
||||
@Override
|
||||
public @Nullable IGroup getGroup(String name) {
|
||||
public @Nullable IGroup getNestedGroup(String name) {
|
||||
for (IGroup nested : nestedGroups) {
|
||||
if (nested.getName().equalsIgnoreCase(name)) {
|
||||
return nested;
|
||||
@ -73,6 +112,12 @@ public class Group implements IGroup {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the parent section associated with this group.
|
||||
* This will get the parent section regardless of nesting because sections are singular.
|
||||
*
|
||||
* @return The parent section of this group.
|
||||
*/
|
||||
@Override
|
||||
public @NotNull ISection getSection() {
|
||||
return section;
|
||||
|
@ -7,7 +7,7 @@ public class Node<T> implements INode<T> {
|
||||
private final T value;
|
||||
|
||||
/**
|
||||
* @param name The name of the entry.
|
||||
* @param name The name of the entry.
|
||||
* @param value The value of the entry
|
||||
*/
|
||||
public Node(String name, T value) {
|
||||
@ -36,9 +36,19 @@ public class Node<T> implements INode<T> {
|
||||
return (getName() + ": " + getValue().toString());
|
||||
}
|
||||
|
||||
// Not sure how to deserialize here.
|
||||
// I think this might work
|
||||
@Override
|
||||
public INode<T> deserialize(String serializedInput) {
|
||||
return null;
|
||||
public INode deserialize(String serializedInput) {
|
||||
String[] split = serializedInput.split(":\t");
|
||||
String name = split[0].trim();
|
||||
String value = split[1].trim();
|
||||
Utils utils = new Utils();
|
||||
|
||||
if (utils.checkForBoolean(value)) return new Node<>(name, Boolean.parseBoolean(value));
|
||||
if (utils.checkForFloat(value)) return new Node<>(name, Float.parseFloat(value));
|
||||
if (utils.checkForInt(value)) return new Node<>(name, Integer.parseInt(value));
|
||||
if (utils.checkForLong(value)) return new Node<>(name, Long.parseLong(value));
|
||||
if (utils.checkForDouble(value)) return new Node<>(name, Double.parseDouble(value));
|
||||
return new Node<>(name, value);
|
||||
}
|
||||
}
|
||||
|
@ -10,9 +10,9 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Section implements ISection {
|
||||
private static final List<Node<?>> ungroupedNodes = new ArrayList<>();
|
||||
private final String name;
|
||||
private final List<IGroup> groupList;
|
||||
private static final List<Node<?>> ungroupedNodes = new ArrayList<>();
|
||||
|
||||
public Section(String name) {
|
||||
this.name = name;
|
||||
|
@ -1,8 +1,12 @@
|
||||
package io.github.simplexdev.configurations;
|
||||
|
||||
public final class Utils {
|
||||
Utils() {}
|
||||
import org.jetbrains.annotations.Contract;
|
||||
|
||||
public final class Utils {
|
||||
public Utils() {
|
||||
}
|
||||
|
||||
@Contract(pure = true)
|
||||
public boolean checkForInt(String input) {
|
||||
try {
|
||||
Integer.parseInt(input);
|
||||
@ -12,31 +16,41 @@ public final class Utils {
|
||||
}
|
||||
}
|
||||
|
||||
@Contract(pure = true)
|
||||
public boolean checkForFloat(String input) {
|
||||
if (!input.endsWith("F")) {
|
||||
if (!input.endsWith("f") || !input.endsWith("F")) {
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
Float.parseFloat(input.split("F")[0]);
|
||||
Float.parseFloat(input);
|
||||
return true;
|
||||
} catch (NumberFormatException ignored) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Contract(pure = true)
|
||||
public boolean checkForBoolean(String input) {
|
||||
if (input.equalsIgnoreCase("true")) {
|
||||
return true;
|
||||
}
|
||||
return input.equalsIgnoreCase("false");
|
||||
return input.equalsIgnoreCase("true");
|
||||
}
|
||||
|
||||
@Contract(pure = true)
|
||||
public boolean checkForLong(String input) {
|
||||
if (!input.endsWith("L")) return false;
|
||||
|
||||
try {
|
||||
Long.parseLong(input.split("L")[0]);
|
||||
Long.parseLong(input);
|
||||
return true;
|
||||
} catch (NumberFormatException ignored) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Contract(pure = true)
|
||||
public boolean checkForDouble(String value) {
|
||||
try {
|
||||
Double.parseDouble(value);
|
||||
return true;
|
||||
} catch (NumberFormatException ignored) {
|
||||
return false;
|
||||
|
@ -1,29 +1,29 @@
|
||||
package io.github.simplexdev.configurations.api;
|
||||
|
||||
import org.jetbrains.annotations.Contract;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
public interface IGroup extends Serializable<IGroup>{
|
||||
IGroup createGroup(String name, INode<?>... nodes);
|
||||
public interface IGroup extends Serializable<IGroup> {
|
||||
IGroup createNestedGroup(IGroup group, String name, INode<?>... nodes);
|
||||
|
||||
String getName();
|
||||
|
||||
/**
|
||||
* Gets the parent group that this group is in.
|
||||
* This will return null if there is no parent group associated with this group.
|
||||
* @param name
|
||||
*
|
||||
* @return The parent group this group is associated to. Returns null if there is no parent group.
|
||||
*/
|
||||
@Nullable
|
||||
IGroup getGroup(String name);
|
||||
IGroup getParentGroup();
|
||||
|
||||
/**
|
||||
* Gets the parent section associated to this group.
|
||||
* Groups cannot exist outside a parent section.
|
||||
* Groups may be nested.
|
||||
*
|
||||
* @return The parent section of this group.
|
||||
*/
|
||||
@NotNull
|
||||
@ -34,8 +34,12 @@ public interface IGroup extends Serializable<IGroup>{
|
||||
*/
|
||||
@Nullable
|
||||
Collection<? extends INode<?>> getNodes();
|
||||
|
||||
IGroup addNodes(INode<?>... nodes);
|
||||
|
||||
IGroup removeNodes(INode<?>... nodes);
|
||||
|
||||
IGroup addNode(INode<?> node);
|
||||
|
||||
IGroup removeNode(INode<?> node);
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
package io.github.simplexdev.configurations.api;
|
||||
|
||||
public interface INode<T> extends Serializable<INode<T>> {
|
||||
public interface INode<T> extends Serializable<INode> {
|
||||
/**
|
||||
* @return The name of the configuration entry.
|
||||
*/
|
||||
|
@ -7,10 +7,13 @@ import org.jetbrains.annotations.Nullable;
|
||||
public interface ISection extends Serializable<ISection> {
|
||||
@NotNull
|
||||
String getName();
|
||||
|
||||
@Nullable
|
||||
INode<?> getNode(String name);
|
||||
|
||||
@Contract(pure = true)
|
||||
<T> void setNode(String name, T node);
|
||||
|
||||
@Nullable
|
||||
IGroup getGroup(String name);
|
||||
}
|
||||
|
@ -0,0 +1,5 @@
|
||||
package io.github.simplexdev.configurations.api;
|
||||
|
||||
public abstract class Json {
|
||||
|
||||
}
|
@ -2,5 +2,6 @@ package io.github.simplexdev.configurations.api;
|
||||
|
||||
public interface Serializable<T> {
|
||||
String serialize();
|
||||
|
||||
T deserialize(String serializedInput);
|
||||
}
|
||||
|
@ -0,0 +1,5 @@
|
||||
package io.github.simplexdev.configurations.api;
|
||||
|
||||
public abstract class TOML {
|
||||
|
||||
}
|
@ -1,11 +1,11 @@
|
||||
package io.github.simplexdev.configurations;
|
||||
package io.github.simplexdev.configurations.api;
|
||||
|
||||
import io.github.simplexdev.configurations.api.IGroup;
|
||||
import io.github.simplexdev.configurations.api.INode;
|
||||
import io.github.simplexdev.configurations.api.ISection;
|
||||
import io.github.simplexdev.configurations.Configurations;
|
||||
import io.github.simplexdev.configurations.Utils;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import java.io.*;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
@ -26,29 +26,18 @@ public abstract class Yaml {
|
||||
|
||||
File dataFolder = plugin.getDataFolder();
|
||||
if (!dataFolder.exists()) dataFolder.mkdir();
|
||||
|
||||
this.dataFolder = dataFolder;
|
||||
File file = new File(dataFolder, fileName);
|
||||
if (copyResource) {
|
||||
try {
|
||||
file.createNewFile();
|
||||
InputStream inputStream = plugin.getResource(fileName);
|
||||
FileOutputStream outputStream = new FileOutputStream(file);
|
||||
byte[] buffer = inputStream.readAllBytes();
|
||||
outputStream.write(buffer);
|
||||
outputStream.flush();
|
||||
outputStream.close();
|
||||
} catch (FileNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
file.createNewFile();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
if (copyResource) {
|
||||
plugin.saveResource(fileName, true);
|
||||
}
|
||||
this.configFile = file;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user