Adding in a preprocessor to avoid using the SerializedName annotation.

This commit is contained in:
Olof Larsson 2013-04-25 09:49:39 +02:00
parent 8e59017cb1
commit c10b6f5edc
6 changed files with 71 additions and 8 deletions

View File

@ -4,6 +4,7 @@ import com.massivecraft.factions.adapter.BoardAdapter;
import com.massivecraft.factions.adapter.BoardMapAdapter; import com.massivecraft.factions.adapter.BoardMapAdapter;
import com.massivecraft.factions.adapter.FFlagAdapter; import com.massivecraft.factions.adapter.FFlagAdapter;
import com.massivecraft.factions.adapter.FPermAdapter; import com.massivecraft.factions.adapter.FPermAdapter;
import com.massivecraft.factions.adapter.FactionPreprocessAdapter;
import com.massivecraft.factions.adapter.RelAdapter; import com.massivecraft.factions.adapter.RelAdapter;
import com.massivecraft.factions.adapter.TerritoryAccessAdapter; import com.massivecraft.factions.adapter.TerritoryAccessAdapter;
import com.massivecraft.factions.chat.modifier.ChatModifierLc; import com.massivecraft.factions.chat.modifier.ChatModifierLc;
@ -21,6 +22,7 @@ import com.massivecraft.factions.chat.tag.ChatTagTitle;
import com.massivecraft.factions.cmd.*; import com.massivecraft.factions.cmd.*;
import com.massivecraft.factions.entity.Board; import com.massivecraft.factions.entity.Board;
import com.massivecraft.factions.entity.BoardColls; import com.massivecraft.factions.entity.BoardColls;
import com.massivecraft.factions.entity.Faction;
import com.massivecraft.factions.entity.UPlayerColls; import com.massivecraft.factions.entity.UPlayerColls;
import com.massivecraft.factions.entity.FactionColls; import com.massivecraft.factions.entity.FactionColls;
import com.massivecraft.factions.entity.MConfColl; import com.massivecraft.factions.entity.MConfColl;
@ -41,6 +43,7 @@ import com.massivecraft.mcore.usys.Aspect;
import com.massivecraft.mcore.usys.AspectColl; import com.massivecraft.mcore.usys.AspectColl;
import com.massivecraft.mcore.usys.Multiverse; import com.massivecraft.mcore.usys.Multiverse;
import com.massivecraft.mcore.util.MUtil; import com.massivecraft.mcore.util.MUtil;
import com.massivecraft.mcore.xlib.gson.Gson;
import com.massivecraft.mcore.xlib.gson.GsonBuilder; import com.massivecraft.mcore.xlib.gson.GsonBuilder;
@ -76,6 +79,9 @@ public class Factions extends MPlugin
public PowerMixin getPowerMixin() { return this.powerMixin == null ? PowerMixinDefault.get() : this.powerMixin; } public PowerMixin getPowerMixin() { return this.powerMixin == null ? PowerMixinDefault.get() : this.powerMixin; }
public void setPowerMixin(PowerMixin powerMixin) { this.powerMixin = powerMixin; } public void setPowerMixin(PowerMixin powerMixin) { this.powerMixin = powerMixin; }
// Gson without preprocessors
public final Gson gsonWithoutPreprocessors = this.getGsonBuilderWithotPreprocessors().create();
// -------------------------------------------- // // -------------------------------------------- //
// OVERRIDE // OVERRIDE
// -------------------------------------------- // // -------------------------------------------- //
@ -153,8 +159,7 @@ public class Factions extends MPlugin
postEnable(); postEnable();
} }
@Override public GsonBuilder getGsonBuilderWithotPreprocessors()
public GsonBuilder getGsonBuilder()
{ {
return super.getGsonBuilder() return super.getGsonBuilder()
.registerTypeAdapter(TerritoryAccess.class, TerritoryAccessAdapter.get()) .registerTypeAdapter(TerritoryAccess.class, TerritoryAccessAdapter.get())
@ -166,4 +171,12 @@ public class Factions extends MPlugin
; ;
} }
@Override
public GsonBuilder getGsonBuilder()
{
return this.getGsonBuilderWithotPreprocessors()
.registerTypeAdapter(Faction.class, FactionPreprocessAdapter.get())
;
}
} }

View File

@ -0,0 +1,53 @@
package com.massivecraft.factions.adapter;
import java.lang.reflect.Type;
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.JsonObject;
import com.massivecraft.mcore.xlib.gson.JsonParseException;
import com.massivecraft.factions.Factions;
import com.massivecraft.factions.entity.Faction;
public class FactionPreprocessAdapter implements JsonDeserializer<Faction>
{
// -------------------------------------------- //
// INSTANCE & CONSTRUCT
// -------------------------------------------- //
private static FactionPreprocessAdapter i = new FactionPreprocessAdapter();
public static FactionPreprocessAdapter get() { return i; }
// -------------------------------------------- //
// OVERRIDE
// -------------------------------------------- //
@Override
public Faction deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException
{
preprocess(json);
return Factions.get().gsonWithoutPreprocessors.fromJson(json, typeOfT);
}
public void preprocess(JsonElement json)
{
JsonObject jsonObject = json.getAsJsonObject();
// Renamed fields
// 1.8.X --> 2.0.0
rename(jsonObject, "tag", "name");
rename(jsonObject, "invites", "invitedPlayerIds");
rename(jsonObject, "relationWish", "relationWishes");
rename(jsonObject, "flagOverrides", "flags");
rename(jsonObject, "permOverrides", "perms");
}
public void rename(final JsonObject jsonObject, final String from, final String to)
{
JsonElement element = jsonObject.remove(from);
if (element != null) jsonObject.add(to, element);
}
}

View File

@ -57,6 +57,7 @@ public class BoardColls extends XColls<BoardColl, Board> implements BoardInterfa
this.migrate(); this.migrate();
} }
// This method is for the 1.8.X --> 2.0.0 migration
public void migrate() public void migrate()
{ {
// Create file objects // Create file objects

View File

@ -22,7 +22,6 @@ import com.massivecraft.mcore.ps.PS;
import com.massivecraft.mcore.store.Entity; import com.massivecraft.mcore.store.Entity;
import com.massivecraft.mcore.util.MUtil; import com.massivecraft.mcore.util.MUtil;
import com.massivecraft.mcore.util.SenderUtil; import com.massivecraft.mcore.util.SenderUtil;
import com.massivecraft.mcore.xlib.gson.annotations.SerializedName;
public class Faction extends Entity<Faction> implements EconomyParticipator public class Faction extends Entity<Faction> implements EconomyParticipator
@ -65,7 +64,6 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
// The actual faction id looks something like "54947df8-0e9e-4471-a2f9-9af509fb5889" and that is not too easy to remember for humans. // The actual faction id looks something like "54947df8-0e9e-4471-a2f9-9af509fb5889" and that is not too easy to remember for humans.
// Thus we make use of a name. Since the id is used in all foreign key situations changing the name is fine. // Thus we make use of a name. Since the id is used in all foreign key situations changing the name is fine.
// Null should never happen. The name must not be null. // Null should never happen. The name must not be null.
@SerializedName("tag")
private String name = null; private String name = null;
// Factions can optionally set a description for themselves. // Factions can optionally set a description for themselves.
@ -92,22 +90,18 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
// This is the ids of the invited players. // This is the ids of the invited players.
// They are actually "senderIds" since you can invite "@console" to your faction. // They are actually "senderIds" since you can invite "@console" to your faction.
// Null means no one is invited // Null means no one is invited
@SerializedName("invites")
private Set<String> invitedPlayerIds = null; private Set<String> invitedPlayerIds = null;
// The keys in this map are factionIds. // The keys in this map are factionIds.
// Null means no special relation whishes. // Null means no special relation whishes.
@SerializedName("relationWish")
private Map<String, Rel> relationWishes = null; private Map<String, Rel> relationWishes = null;
// The flag overrides are modifications to the default values. // The flag overrides are modifications to the default values.
// Null means default for the universe. // Null means default for the universe.
@SerializedName("flagOverrides")
private Map<FFlag, Boolean> flags = null; private Map<FFlag, Boolean> flags = null;
// The perm overrides are modifications to the default values. // The perm overrides are modifications to the default values.
// Null means default for the universe. // Null means default for the universe.
@SerializedName("permOverrides")
private Map<FPerm, Set<Rel>> perms = null; private Map<FPerm, Set<Rel>> perms = null;
// -------------------------------------------- // // -------------------------------------------- //

View File

@ -51,6 +51,7 @@ public class FactionColls extends XColls<FactionColl, Faction>
this.migrate(); this.migrate();
} }
// This method is for the 1.8.X --> 2.0.0 migration
public void migrate() public void migrate()
{ {
// Create file objects // Create file objects

View File

@ -51,6 +51,7 @@ public class UPlayerColls extends XColls<UPlayerColl, UPlayer>
this.migrate(); this.migrate();
} }
// This method is for the 1.8.X --> 2.0.0 migration
public void migrate() public void migrate()
{ {
// Create file objects // Create file objects