Skip to content

Commit

Permalink
feat: Implement more sections functions
Browse files Browse the repository at this point in the history
  • Loading branch information
CarmJos committed Feb 21, 2025
1 parent 5c16e98 commit d818556
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
* @author Carm
* @since 4.0.0
*/
public interface ConfigureSection extends Cloneable {
public interface ConfigureSection {

/**
* Gets the parent section of this section.
Expand All @@ -30,6 +30,24 @@ public interface ConfigureSection extends Cloneable {
@Contract(pure = true)
@Nullable ConfigureSection parent();

/**
* Gets if this section is a root section.
*
* @return True if this section is a root section, false otherwise.
*/
default boolean isRoot() {
return parent() == null;
}

/**
* Gets if this section is empty.
*
* @return True if this section is empty, false otherwise.
*/
default boolean isEmpty() {
return getValues(false).isEmpty();
}

/**
* Gets a set containing all keys in this section.
* <p>
Expand Down Expand Up @@ -190,7 +208,10 @@ default boolean isSection(@NotNull String path) {
* @return The section if the path exists and is a section, otherwise null.
*/
@Nullable
ConfigureSection getSection(@NotNull String path);
default ConfigureSection getSection(@NotNull String path) {
Object val = get(path);
return (val instanceof ConfigureSection) ? (ConfigureSection) val : null;
}

/**
* Get the origin value of the path.
Expand Down Expand Up @@ -686,7 +707,8 @@ default boolean isString(@NotNull String path) {
}

static <T, C extends Collection<T>> @NotNull C parseCollection(
@Nullable List<?> data, @NotNull Supplier<C> constructor,
@Nullable List<?> data,
@NotNull Supplier<C> constructor,
@NotNull DataFunction<Object, T> parser
) {
C values = constructor.get();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,11 +108,6 @@ public void remove(@NotNull String path) {
section().remove(path);
}

@Override
public @Nullable ConfigureSection getSection(@NotNull String path) {
return section().getSection(path);
}

@Override
public @Nullable Object get(@NotNull String path) {
return section().get(path);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,6 @@

public abstract class MapSection<R extends MapSection<R>> implements ConfigureSection {

public static RawMapSection of() {
return new RawMapSection(new LinkedHashMap<>(), null);
}

public static RawMapSection of(@NotNull Map<?, ?> data) {
return new RawMapSection(data, null);
}

protected final @NotNull Map<String, Object> data;
protected final @Nullable R parent;

Expand Down Expand Up @@ -57,6 +49,11 @@ public void migrate(Map<?, ?> data) {
return this.data;
}

@Override
public boolean isEmpty() {
return data.isEmpty();
}

@UnmodifiableView
public @NotNull Map<String, Object> rawMap() {
Map<String, Object> output = new LinkedHashMap<>();
Expand Down Expand Up @@ -118,12 +115,6 @@ public void remove(@NotNull String path) {
return section == this ? data.get(path) : section.get(childPath(path));
}

@Override
public @Nullable ConfigureSection getSection(@NotNull String path) {
Object val = get(path);
return (val instanceof ConfigureSection) ? (ConfigureSection) val : null;
}

@SuppressWarnings("unchecked")
private R getSectionFor(String path) {
int index = path.indexOf(pathSeparator());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,27 @@
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.LinkedHashMap;
import java.util.Map;

public class RawMapSection extends MapSection<RawMapSection> {


public static RawMapSection of() {
return of((RawMapSection) null);
}

public static RawMapSection of(@NotNull Map<?, ?> data) {
return of(data, null);
}

public static RawMapSection of(@Nullable RawMapSection parent) {
return of(new LinkedHashMap<>(), parent);
}

public static RawMapSection of(@NotNull Map<?, ?> data, @Nullable RawMapSection parent) {
return new RawMapSection(data, parent);
}

protected RawMapSection(@NotNull Map<?, ?> raw, @Nullable RawMapSection parent) {
super(parent);
migrate(raw);
Expand Down

0 comments on commit d818556

Please sign in to comment.