|
|
@@ -9,19 +9,29 @@ import java.util.stream.Collectors;
|
|
|
|
|
|
import org.leumasjaffe.observer.Observable;
|
|
|
|
|
|
-import com.fasterxml.jackson.annotation.JsonGetter;
|
|
|
-import com.fasterxml.jackson.annotation.JsonSetter;
|
|
|
+import com.fasterxml.jackson.annotation.JsonCreator;
|
|
|
+import com.fasterxml.jackson.annotation.JsonValue;
|
|
|
|
|
|
import lombok.AccessLevel;
|
|
|
-import lombok.Data;
|
|
|
+import lombok.AllArgsConstructor;
|
|
|
import lombok.EqualsAndHashCode;
|
|
|
+import lombok.Getter;
|
|
|
import lombok.NonNull;
|
|
|
+import lombok.Setter;
|
|
|
+import lombok.ToString;
|
|
|
import lombok.experimental.FieldDefaults;
|
|
|
|
|
|
-@Data
|
|
|
+@Getter
|
|
|
+@Setter
|
|
|
+@ToString
|
|
|
@EqualsAndHashCode(callSuper=false)
|
|
|
@FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
|
|
|
public class DDInventory extends Observable {
|
|
|
+ @AllArgsConstructor
|
|
|
+ public static class Serializable {
|
|
|
+ @NonNull List<DDItem> items;
|
|
|
+ @NonNull Map<EquipmentSlot, String> equipment;
|
|
|
+ }
|
|
|
|
|
|
@NonNull List<DDItem> items;
|
|
|
@NonNull Map<EquipmentSlot, DDItem> equipment;
|
|
|
@@ -31,21 +41,23 @@ public class DDInventory extends Observable {
|
|
|
equipment = new EnumMap<>(EquipmentSlot.class);
|
|
|
}
|
|
|
|
|
|
- @JsonSetter("equipment")
|
|
|
- private void setEquipmentSerial(final Map<EquipmentSlot, String> serial) {
|
|
|
+ @JsonCreator
|
|
|
+ public DDInventory(DDInventory.Serializable data) {
|
|
|
+ items = new ArrayList<>(data.items);
|
|
|
+ equipment = new EnumMap<>(EquipmentSlot.class);
|
|
|
final Map<String, DDItem> named = items.stream().collect(
|
|
|
Collectors.toMap(DDItem::getName, i -> i));
|
|
|
- serial.entrySet().stream().forEach(
|
|
|
+ data.equipment.entrySet().stream().forEach(
|
|
|
e -> equipment.put(e.getKey(), named.get(e.getValue())));
|
|
|
}
|
|
|
|
|
|
- @JsonGetter("equipment")
|
|
|
- private Map<EquipmentSlot, String> getEquipmentSerial() {
|
|
|
+ @JsonValue
|
|
|
+ private DDInventory.Serializable getSerial() {
|
|
|
final Map<EquipmentSlot, String> m = new EnumMap<>(EquipmentSlot.class);
|
|
|
equipment.entrySet().stream().forEach(
|
|
|
e -> m.put(e.getKey(), e.getValue().getName())
|
|
|
);
|
|
|
- return m;
|
|
|
+ return new DDInventory.Serializable(items, m);
|
|
|
}
|
|
|
|
|
|
public Map<EquipmentSlot, DDItem> getEquipment() {
|