Make an adapter for the board to serialize the one and only inner map only
This commit is contained in:
parent
1ebb6a3f69
commit
2c12fb7739
@ -1,6 +1,7 @@
|
|||||||
package com.massivecraft.factions;
|
package com.massivecraft.factions;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
@ -50,8 +51,24 @@ public class Board extends Entity<Board, String> implements BoardInterface
|
|||||||
// FIELDS
|
// FIELDS
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
// TODO: Make TerritoryAccess immutable!
|
// TODO: Make TerritoryAccess immutable.
|
||||||
private ConcurrentSkipListMap<PS, TerritoryAccess> map = new ConcurrentSkipListMap<PS, TerritoryAccess>();
|
|
||||||
|
private ConcurrentSkipListMap<PS, TerritoryAccess> map;
|
||||||
|
public Map<PS, TerritoryAccess> getMap() { return Collections.unmodifiableMap(this.map); }
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public Board()
|
||||||
|
{
|
||||||
|
this.map = new ConcurrentSkipListMap<PS, TerritoryAccess>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Board(Map<PS, TerritoryAccess> map)
|
||||||
|
{
|
||||||
|
this.map = new ConcurrentSkipListMap<PS, TerritoryAccess>(map);
|
||||||
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// OVERRIDE: BOARD
|
// OVERRIDE: BOARD
|
||||||
|
@ -4,6 +4,7 @@ import java.lang.reflect.Modifier;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import com.massivecraft.factions.adapters.BoardAdapter;
|
||||||
import com.massivecraft.factions.adapters.FFlagAdapter;
|
import com.massivecraft.factions.adapters.FFlagAdapter;
|
||||||
import com.massivecraft.factions.adapters.FPermAdapter;
|
import com.massivecraft.factions.adapters.FPermAdapter;
|
||||||
import com.massivecraft.factions.adapters.LazyLocationAdapter;
|
import com.massivecraft.factions.adapters.LazyLocationAdapter;
|
||||||
@ -135,6 +136,7 @@ public class Factions extends MPlugin
|
|||||||
.excludeFieldsWithModifiers(Modifier.TRANSIENT, Modifier.VOLATILE)
|
.excludeFieldsWithModifiers(Modifier.TRANSIENT, Modifier.VOLATILE)
|
||||||
.registerTypeAdapter(LazyLocation.class, new LazyLocationAdapter())
|
.registerTypeAdapter(LazyLocation.class, new LazyLocationAdapter())
|
||||||
.registerTypeAdapter(TerritoryAccess.class, TerritoryAccessAdapter.get())
|
.registerTypeAdapter(TerritoryAccess.class, TerritoryAccessAdapter.get())
|
||||||
|
.registerTypeAdapter(Board.class, BoardAdapter.get())
|
||||||
.registerTypeAdapter(Rel.class, new RelAdapter())
|
.registerTypeAdapter(Rel.class, new RelAdapter())
|
||||||
.registerTypeAdapter(FPerm.class, new FPermAdapter())
|
.registerTypeAdapter(FPerm.class, new FPermAdapter())
|
||||||
.registerTypeAdapter(FFlag.class, new FFlagAdapter());
|
.registerTypeAdapter(FFlag.class, new FFlagAdapter());
|
||||||
|
46
src/com/massivecraft/factions/adapters/BoardAdapter.java
Normal file
46
src/com/massivecraft/factions/adapters/BoardAdapter.java
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
package com.massivecraft.factions.adapters;
|
||||||
|
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import com.massivecraft.mcore.ps.PS;
|
||||||
|
import com.massivecraft.mcore.xlib.gson.JsonDeserializationContext;
|
||||||
|
import com.massivecraft.mcore.xlib.gson.JsonDeserializer;
|
||||||
|
import com.massivecraft.mcore.xlib.gson.JsonElement;
|
||||||
|
import com.massivecraft.mcore.xlib.gson.JsonParseException;
|
||||||
|
import com.massivecraft.mcore.xlib.gson.JsonSerializationContext;
|
||||||
|
import com.massivecraft.mcore.xlib.gson.JsonSerializer;
|
||||||
|
import com.massivecraft.mcore.xlib.gson.reflect.TypeToken;
|
||||||
|
|
||||||
|
import com.massivecraft.factions.Board;
|
||||||
|
import com.massivecraft.factions.TerritoryAccess;
|
||||||
|
|
||||||
|
public class BoardAdapter implements JsonDeserializer<Board>, JsonSerializer<Board>
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// INSTANCE & CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private static BoardAdapter i = new BoardAdapter();
|
||||||
|
public static BoardAdapter get() { return i; }
|
||||||
|
|
||||||
|
//----------------------------------------------//
|
||||||
|
// OVERRIDE
|
||||||
|
//----------------------------------------------//
|
||||||
|
|
||||||
|
private static final Type mapType = new TypeToken<Map<PS, TerritoryAccess>>(){}.getType();
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
@Override
|
||||||
|
public Board deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException
|
||||||
|
{
|
||||||
|
return new Board((Map<PS, TerritoryAccess>) context.deserialize(json, mapType));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JsonElement serialize(Board src, Type typeOfSrc, JsonSerializationContext context)
|
||||||
|
{
|
||||||
|
return context.serialize(src.getMap(), mapType);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user