Selaa lähdekoodia

Create a Serializable intermediate class for DDInventory.

Sam Jaffe 9 vuotta sitten
vanhempi
commit
d4198cded6
1 muutettua tiedostoa jossa 22 lisäystä ja 10 poistoa
  1. 22 10
      src/org/leumasjaffe/charsheet/model/inventory/DDInventory.java

+ 22 - 10
src/org/leumasjaffe/charsheet/model/inventory/DDInventory.java

@@ -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() {