package com.massivecraft.factions.util; import com.massivecraft.factions.FLocation; import com.massivecraft.factions.P; import org.bukkit.craftbukkit.libs.com.google.gson.*; import java.lang.reflect.Type; import java.util.HashSet; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Level; public class MapFLocToStringSetTypeAdapter implements JsonDeserializer>>, JsonSerializer>> { @Override public Map> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { try { JsonObject obj = json.getAsJsonObject(); if (obj == null) { return null; } Map> locationMap = new ConcurrentHashMap>(); Set nameSet; Iterator iter; String worldName; String[] coords; int x, z; for (Entry entry : obj.entrySet()) { worldName = entry.getKey(); for (Entry entry2 : entry.getValue().getAsJsonObject().entrySet()) { coords = entry2.getKey().trim().split("[,\\s]+"); x = Integer.parseInt(coords[0]); z = Integer.parseInt(coords[1]); nameSet = new HashSet(); iter = entry2.getValue().getAsJsonArray().iterator(); while (iter.hasNext()) { nameSet.add(iter.next().getAsString()); } locationMap.put(new FLocation(worldName, x, z), nameSet); } } return locationMap; } catch (Exception ex) { ex.printStackTrace(); P.p.log(Level.WARNING, "Error encountered while deserializing a Map of FLocations to String Sets."); return null; } } @Override public JsonElement serialize(Map> src, Type typeOfSrc, JsonSerializationContext context) { JsonObject obj = new JsonObject(); try { if (src != null) { FLocation loc; String locWorld; Set nameSet; Iterator iter; JsonArray nameArray; JsonPrimitive nameElement; for (Entry> entry : src.entrySet()) { loc = entry.getKey(); locWorld = loc.getWorldName(); nameSet = entry.getValue(); if (nameSet == null || nameSet.isEmpty()) { continue; } nameArray = new JsonArray(); iter = nameSet.iterator(); while (iter.hasNext()) { nameElement = new JsonPrimitive(iter.next()); nameArray.add(nameElement); } if (!obj.has(locWorld)) { obj.add(locWorld, new JsonObject()); } obj.get(locWorld).getAsJsonObject().add(loc.getCoordString(), nameArray); } } return obj; } catch (Exception ex) { ex.printStackTrace(); P.p.log(Level.WARNING, "Error encountered while serializing a Map of FLocations to String Sets."); return obj; } } }