Make an adapter for the board to serialize the one and only inner map only
This commit is contained in:
		@@ -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);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user