Skip to content
This repository has been archived by the owner on Jan 27, 2025. It is now read-only.

Commit

Permalink
Convert String to Value as soon as possible.
Browse files Browse the repository at this point in the history
So we can mostly deal with `Value`s internally.
  • Loading branch information
blackwinter committed Dec 23, 2021
1 parent 5080460 commit 35e4e34
Showing 1 changed file with 15 additions and 17 deletions.
32 changes: 15 additions & 17 deletions metafix/src/main/java/org/metafacture/metafix/Value.java
Original file line number Diff line number Diff line change
Expand Up @@ -302,14 +302,14 @@ protected enum InsertMode {

REPLACE {
@Override
void apply(final Hash hash, final String field, final String value) {
hash.put(field, new Value(value));
void apply(final Hash hash, final String field, final Value value) {
hash.put(field, value);
}
},
APPEND {
@Override
void apply(final Hash hash, final String field, final String value) {
hash.add(field, new Value(value));
void apply(final Hash hash, final String field, final Value value) {
hash.add(field, value);
}
},
/* For an indexed representation of arrays as hashes with 1, 2, 3 etc. keys.
Expand All @@ -319,18 +319,16 @@ void apply(final Hash hash, final String field, final String value) {
* in every value being either a hash or a string, no more separate array type.*/
INDEXED {
@Override
void apply(final Hash hash, final String field, final String value) {
final Value newValue = field.equals(ReservedField.$append.name()) ? new Value(value) :
newHash(h -> h.put(field, new Value(value)));
hash.add(nextIndex(hash), newValue);
void apply(final Hash hash, final String field, final Value value) {
hash.add(nextIndex(hash), field.equals(ReservedField.$append.name()) ? value : newHash(h -> h.put(field, value)));
}

private String nextIndex(final Hash hash) {
return "" + (hash.size() + 1) /* TODO? check if keys are actually all ints? */;
}
};

abstract void apply(Hash hash, String field, String value);
abstract void apply(Hash hash, String field, Value value);

}

Expand Down Expand Up @@ -466,7 +464,7 @@ private void transformFields(final int index, final String[] fields, final Unary
}
}

private void insert(final InsertMode mode, final String[] fields, final String newValue) {
private void insert(final InsertMode mode, final String[] fields, final Value newValue) {
if (fields[0].equals(ASTERISK)) {
return; // TODO: WDCD? descend into the array?
}
Expand All @@ -478,12 +476,12 @@ private void insert(final InsertMode mode, final String[] fields, final String n
}
}

private void insertIntoReferencedObject(final InsertMode mode, final String[] fields, final String newValue) {
private void insertIntoReferencedObject(final InsertMode mode, final String[] fields, final Value newValue) {
// TODO replace switch, extract to enum behavior like reservedField.insertIntoReferencedObject(this)?
switch (ReservedField.fromString(fields[0])) {
case $append:
if (fields.length == 1) {
add(new Value(newValue));
add(newValue);
}
else {
add(newHash(h -> h.insert(mode, tail(fields), newValue)));
Expand All @@ -507,11 +505,11 @@ private void insertIntoReferencedObject(final InsertMode mode, final String[] fi
}
}

private void processDefault(final InsertMode mode, final String[] fields, final String newValue) {
private void processDefault(final InsertMode mode, final String[] fields, final Value newValue) {
if (isNumber(fields[0])) {
// TODO: WDCD? insert at the given index? also descend into the array?
if (fields.length == 1) {
add(new Value(newValue));
add(newValue);
}
else if (fields.length > 1) {
final Value newHash;
Expand Down Expand Up @@ -683,10 +681,10 @@ public void add(final String field, final Value newValue) {
}

public Value insert(final InsertMode mode, final String fieldPath, final String newValue) {
return insert(mode, split(fieldPath), newValue);
return insert(mode, split(fieldPath), new Value(newValue));
}

private Value insert(final InsertMode mode, final String[] fields, final String newValue) {
private Value insert(final InsertMode mode, final String[] fields, final Value newValue) {
final String field = fields[0];
if (fields.length == 1) {
if (field.equals(ASTERISK)) {
Expand Down Expand Up @@ -717,7 +715,7 @@ private Value insert(final InsertMode mode, final String[] fields, final String
return new Value(this);
}

private Value processRef(final InsertMode mode, final String newValue, final String field, final String[] tail) {
private Value processRef(final InsertMode mode, final Value newValue, final String field, final String[] tail) {
final Value referencedValue = getReferencedValue(field);
if (referencedValue != null) {
return referencedValue.asHash().insert(insertMode(mode, field, tail), tail, newValue);
Expand Down

0 comments on commit 35e4e34

Please sign in to comment.