Skip to content

Commit

Permalink
Define submapping
Browse files Browse the repository at this point in the history
  • Loading branch information
mcmonkey4eva committed Mar 27, 2021
1 parent b1116c1 commit af4a2f8
Show file tree
Hide file tree
Showing 6 changed files with 37 additions and 45 deletions.
Expand Up @@ -216,6 +216,9 @@ public void putDeepObject(String key, ObjectTag value) {
for (int i = 0; i < subkeys.size() - 1; i++) {
ObjectTag subValue = current.getObject(subkeys.get(i));
if (!(subValue instanceof MapTag)) {
if (value == null) {
return;
}
subValue = new MapTag();
current.putObject(subkeys.get(i), subValue);
}
Expand Down Expand Up @@ -424,7 +427,7 @@ public static void registerTags() {
// then ".deep_get[root.leaf]" will return "myvalue".
// If a list is given as input, returns a list of values.
// -->
registerTag("deep_get", (attribute, object) -> {
TagRunnable.ObjectInterface<MapTag> deepGetRunnable = (attribute, object) -> {
if (!attribute.hasContext(1)) {
attribute.echoError("The tag 'MapTag.deep_get' must have an input value.");
return null;
Expand All @@ -438,7 +441,9 @@ public static void registerTags() {
return valList;
}
return object.getDeepObject(attribute.getContext(1));
});
};
registerTag("deep_get", deepGetRunnable);
registerTag("", deepGetRunnable);

// <--[tag]
// @attribute <MapTag.get_subset[<key>|...]>
Expand Down
Expand Up @@ -15,7 +15,6 @@
import com.denizenscript.denizencore.utilities.debugging.Debug;

import java.util.Collection;
import java.util.Map;

public class QueueTag implements ObjectTag, Adjustable, FlaggableObject {

Expand Down Expand Up @@ -128,7 +127,7 @@ public void setRootMap(String key, MapTag map) {

@Override
public Collection<String> listAllFlags() {
return getQueue().getAllDefinitions().keySet();
return getQueue().getAllDefinitions().keys();
}
}

Expand Down Expand Up @@ -249,7 +248,7 @@ else if (object.getQueue().is_stopping) {
// Returns the names of all definitions that were added to the current queue.
// -->
registerTag("definitions", (attribute, object) -> {
return new ListTag(object.getQueue().getAllDefinitions().keySet());
return object.getQueue().getAllDefinitions().keys();
});

// <--[tag]
Expand All @@ -259,11 +258,7 @@ else if (object.getQueue().is_stopping) {
// Returns a map of all definitions on the queue.
// -->
registerTag("definition_map", (attribute, object) -> {
MapTag map = new MapTag();
for (Map.Entry<String, ObjectTag> entry : object.getQueue().getAllDefinitions().entrySet()) {
map.putObject(entry.getKey(), entry.getValue());
}
return map;
return object.getQueue().getAllDefinitions().duplicate();
});

// <--[tag]
Expand Down
@@ -1,10 +1,7 @@
package com.denizenscript.denizencore.scripts.queues;

import com.denizenscript.denizencore.objects.*;
import com.denizenscript.denizencore.objects.core.DurationTag;
import com.denizenscript.denizencore.objects.core.ElementTag;
import com.denizenscript.denizencore.objects.core.ListTag;
import com.denizenscript.denizencore.objects.core.ScriptTag;
import com.denizenscript.denizencore.objects.core.*;
import com.denizenscript.denizencore.scripts.queues.core.TimedQueue;
import com.denizenscript.denizencore.utilities.CoreUtilities;
import com.denizenscript.denizencore.utilities.DefinitionProvider;
Expand Down Expand Up @@ -93,7 +90,7 @@ public static boolean queueExists(String id) {
*/
private long delay_time = 0;

private final HashMap<String, ObjectTag> definitions = new HashMap<>();
public MapTag definitions = new MapTag();

public ListTag determinations = null;

Expand Down Expand Up @@ -141,39 +138,39 @@ public ObjectTag getDefinitionObject(String definition) {
if (definition == null) {
return null;
}
return definitions.get(CoreUtilities.toLowerCase(definition));
return definitions.getDeepObject(CoreUtilities.toLowerCase(definition));
}

@Override
public void addDefinition(String definition, ObjectTag value) {
definitions.putDeepObject(definition, value);
}

@Override
public String getDefinition(String definition) {
if (definition == null) {
return null;
}
return CoreUtilities.stringifyNullPass(definitions.get(CoreUtilities.toLowerCase(definition)));
return CoreUtilities.stringifyNullPass(getDefinitionObject(definition));
}

@Override
public boolean hasDefinition(String definition) {
return definitions.containsKey(CoreUtilities.toLowerCase(definition));
}

@Override
public void addDefinition(String definition, ObjectTag value) {
definitions.put(CoreUtilities.toLowerCase(definition), value);
return getDefinitionObject(definition) != null;
}

@Override
public void addDefinition(String definition, String value) {
definitions.put(CoreUtilities.toLowerCase(definition), new ElementTag(value));
addDefinition(definition, new ElementTag(value));
}

@Override
public void removeDefinition(String definition) {
definitions.remove(CoreUtilities.toLowerCase(definition));
addDefinition(definition, (ObjectTag) null);
}

@Override
public Map<String, ObjectTag> getAllDefinitions() {
public MapTag getAllDefinitions() {
return definitions;
}

Expand Down Expand Up @@ -243,9 +240,7 @@ public TimedQueue forceToTimed(TimedQueue.DelayTracker delay) {
entry.updateContext();
}
newQueue.addEntries(getEntries());
for (Map.Entry<String, ObjectTag> def : getAllDefinitions().entrySet()) {
newQueue.addDefinition(def.getKey(), def.getValue());
}
newQueue.definitions = definitions.duplicate();
newQueue.setContextSource(contextSource);
newQueue.determinationTarget = determinationTarget;
for (Map.Entry<String, ScriptEntry> entry : held_entries.entrySet()) {
Expand Down
@@ -1,9 +1,9 @@
package com.denizenscript.denizencore.tags;

import com.denizenscript.denizencore.exceptions.InvalidArgumentsException;
import com.denizenscript.denizencore.exceptions.TagProcessingException;
import com.denizenscript.denizencore.objects.ObjectTag;
import com.denizenscript.denizencore.objects.core.ElementTag;
import com.denizenscript.denizencore.objects.core.MapTag;
import com.denizenscript.denizencore.scripts.ScriptEntry;
import com.denizenscript.denizencore.utilities.CoreUtilities;
import com.denizenscript.denizencore.utilities.DefinitionProvider;
Expand Down Expand Up @@ -241,7 +241,7 @@ public void addDefinition(String definition, ObjectTag value) {
originalProvider.addDefinition(definition, value);
}
@Override
public Map<String, ObjectTag> getAllDefinitions() {
public MapTag getAllDefinitions() {
return originalProvider.getAllDefinitions();
}
@Override
Expand Down
@@ -1,16 +1,15 @@
package com.denizenscript.denizencore.utilities;

import com.denizenscript.denizencore.objects.ObjectTag;

import java.util.Map;
import com.denizenscript.denizencore.objects.core.MapTag;

public interface DefinitionProvider {

void addDefinition(String definition, String value);

void addDefinition(String definition, ObjectTag value);

Map<String, ObjectTag> getAllDefinitions();
MapTag getAllDefinitions();

ObjectTag getDefinitionObject(String definition);

Expand Down
Expand Up @@ -2,26 +2,24 @@

import com.denizenscript.denizencore.objects.core.ElementTag;
import com.denizenscript.denizencore.objects.ObjectTag;

import java.util.HashMap;
import java.util.Map;
import com.denizenscript.denizencore.objects.core.MapTag;

public class SimpleDefinitionProvider implements DefinitionProvider {

private final Map<String, ObjectTag> definitions = new HashMap<>();
private final MapTag definitions = new MapTag();

@Override
public void addDefinition(String definition, ObjectTag value) {
this.definitions.put(CoreUtilities.toLowerCase(definition), value);
definitions.putDeepObject(definition, value);
}

@Override
public void addDefinition(String definition, String value) {
this.addDefinition(definition, new ElementTag(value));
addDefinition(definition, new ElementTag(value));
}

@Override
public Map<String, ObjectTag> getAllDefinitions() {
public MapTag getAllDefinitions() {
return this.definitions;
}

Expand All @@ -30,24 +28,24 @@ public ObjectTag getDefinitionObject(String definition) {
if (definition == null) {
return null;
}
return definitions.get(CoreUtilities.toLowerCase(definition));
return definitions.getDeepObject(definition);
}

@Override
public String getDefinition(String definition) {
if (definition == null) {
return null;
}
return CoreUtilities.stringifyNullPass(definitions.get(CoreUtilities.toLowerCase(definition)));
return CoreUtilities.stringifyNullPass(getDefinitionObject(definition));
}

@Override
public boolean hasDefinition(String definition) {
return definitions.containsKey(CoreUtilities.toLowerCase(definition));
return getDefinitionObject(definition) != null;
}

@Override
public void removeDefinition(String definition) {
definitions.remove(CoreUtilities.toLowerCase(definition));
addDefinition(definition, (ObjectTag) null);
}
}

0 comments on commit af4a2f8

Please sign in to comment.