Skip to content

Commit

Permalink
Refactored: moved array looping logic up to UpgradeOrderDecider
Browse files Browse the repository at this point in the history
  • Loading branch information
luontola committed Nov 1, 2012
1 parent 59a67f3 commit 3e61e18
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 44 deletions.
22 changes: 0 additions & 22 deletions src/main/java/fi/solita/jsonmigraine/ArrayUpgrader.java

This file was deleted.

23 changes: 21 additions & 2 deletions src/main/java/fi/solita/jsonmigraine/UpgradeOrderDecider.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
package fi.solita.jsonmigraine;

import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.node.ObjectNode;
import org.codehaus.jackson.node.*;

import java.util.List;

Expand Down Expand Up @@ -33,7 +33,26 @@ public JsonNode upgrade(JsonNode data, DataVersions from, HowToUpgrade how) {
} else {
ObjectNode obj = (ObjectNode) data;
String fieldName = path.get(0);
JsonNode upgraded = upgrade(obj.get(fieldName), dataVersion, upgrader);
JsonNode original = obj.get(fieldName);

JsonNode upgraded;
if (original instanceof ArrayNode) {
ArrayNode values = (ArrayNode) original;
ArrayNode result = JsonNodeFactory.instance.arrayNode();

for (JsonNode value : values) {
try {
result.add(upgrade(value, dataVersion, upgrader));
} catch (ValueRemovedException e) {
// removed
}
}

upgraded = result;
} else {
upgraded = upgrade(original, dataVersion, upgrader);
}

obj.put(fieldName, upgraded); // XXX: not tested
data = obj;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import fi.solita.jsonmigraine.*;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.node.*;
import org.codehaus.jackson.node.JsonNodeFactory;
import org.junit.Test;

import static org.hamcrest.MatcherAssert.assertThat;
Expand Down Expand Up @@ -70,38 +70,24 @@ public JsonNode upgrade(JsonNode data, int version) {
}
}

static class EnumUpgraderV2 extends ArrayUpgrader {
static class EnumUpgraderV2 implements Upgrader {

@Override
public int version() {
return 2;
}

@Override
public ArrayNode upgrade(ArrayNode data, int version) {
// TODO: move this loop higher
ArrayNode result = JsonNodeFactory.instance.arrayNode();
for (JsonNode value : data) {
try {
JsonNode upgraded = upgradeValue(value, version);
result.add(upgraded);
} catch (ValueRemovedException e) {
// removed
}
}
return result;
}

private JsonNode upgradeValue(JsonNode value, int version) {
public JsonNode upgrade(JsonNode data, int version) {
if (version == 1) {
if (value.asText().equals("BAR")) {
if (data.asText().equals("BAR")) {
throw new ValueRemovedException();
}
if (value.asText().equals("FOO")) {
if (data.asText().equals("FOO")) {
return JsonNodeFactory.instance.textNode("FOO_RENAMED");
}
}
return value;
return data;
}
}

Expand Down

0 comments on commit 3e61e18

Please sign in to comment.