package com.google.wallet.objects.utils; import java.util.ArrayList; import java.util.List; import com.google.api.client.json.GenericJson; import com.google.api.client.json.JsonFactory; import com.google.api.client.json.gson.GsonFactory; import com.google.api.services.walletobjects.model.GiftCardClass; import com.google.api.services.walletobjects.model.GiftCardObject; import com.google.api.services.walletobjects.model.LoyaltyClass; import com.google.api.services.walletobjects.model.LoyaltyObject; import com.google.api.services.walletobjects.model.OfferClass; import com.google.api.services.walletobjects.model.OfferObject; import com.google.gson.Gson; import com.google.wallet.objects.webservice.WebserviceResponse; /** * Bean to represent the Wob payload object. To add an object to the WobPayload, * use the addObject method. This classes uses reflection to determine the * correct array to insert into. * * @author pying */ public class WobPayload { private List<GenericJson> loyaltyClasses = new ArrayList<GenericJson>(); private List<GenericJson> offerClasses = new ArrayList<GenericJson>(); private List<GenericJson> giftCardClasses = new ArrayList<GenericJson>(); private List<GenericJson> loyaltyObjects = new ArrayList<GenericJson>(); private List<GenericJson> offerObjects = new ArrayList<GenericJson>(); private List<GenericJson> giftCardObjects = new ArrayList<GenericJson>(); private WebserviceResponse webserviceResponse; private transient Gson gson = new Gson(); private transient JsonFactory jsonFactory = new GsonFactory(); /** * Empty default constructor for Gson deserialization */ public WobPayload() { } /** * Adds the object to the appropriate list * * @param object */ public void addObject(GenericJson object) { object.setFactory(jsonFactory); if (LoyaltyObject.class.isAssignableFrom(object.getClass())) { addLoyaltyObject(gson.fromJson(object.toString(), GenericJson.class)); } else if (OfferObject.class.isAssignableFrom(object.getClass())) { addOfferObject(gson.fromJson(object.toString(), GenericJson.class)); } else if (GiftCardObject.class.isAssignableFrom(object.getClass())) { addGiftCardObject(gson.fromJson(object.toString(), GenericJson.class)); } else if (LoyaltyClass.class.isAssignableFrom(object.getClass())) { addLoyaltyClass(gson.fromJson(object.toString(), GenericJson.class)); } else if (OfferClass.class.isAssignableFrom(object.getClass())) { addOfferClass(gson.fromJson(object.toString(), GenericJson.class)); } else if (GiftCardClass.class.isAssignableFrom(object.getClass())) { addGiftCardClass(gson.fromJson(object.toString(), GenericJson.class)); } else throw new IllegalArgumentException("Invalid Object type: " + object.getClass()); } public void addLoyaltyObject(GenericJson object) { loyaltyObjects.add(object); } public List<GenericJson> getLoyaltyObjects() { return loyaltyObjects; } public void setLoyaltyObjects(List<GenericJson> loyaltyObject) { this.loyaltyObjects = loyaltyObject; } public void addOfferObject(GenericJson object) { offerObjects.add(object); } public List<GenericJson> getOfferObjects() { return offerObjects; } public void setOfferObjects(List<GenericJson> offerObject) { this.offerObjects = offerObject; } public void addGiftCardObject(GenericJson object) { giftCardObjects.add(object); } public List<GenericJson> getGiftCardObjects() { return giftCardObjects; } public WebserviceResponse getResponse() { return webserviceResponse; } public void setResponse(WebserviceResponse resp) { this.webserviceResponse = resp; } /** * @return the loyaltyClasses */ public List<GenericJson> getLoyaltyClasses() { return loyaltyClasses; } /** * @param loyaltyClasses the loyaltyClasses to set */ public void setLoyaltyClasses(List<GenericJson> loyaltyClasses) { this.loyaltyClasses = loyaltyClasses; } public void addLoyaltyClass(GenericJson object) { loyaltyClasses.add(object); } /** * @return the offerClasses */ public List<GenericJson> getOfferClasses() { return offerClasses; } /** * @param offerClasses the offerClasses to set */ public void setOfferClasses(List<GenericJson> offerClasses) { this.offerClasses = offerClasses; } public void addOfferClass(GenericJson object) { offerClasses.add(object); } /** * @return the giftCardClasses */ public List<GenericJson> getGiftCardClasses() { return giftCardClasses; } /** * @param giftCardClasses the offerClasses to set */ public void setGiftCardClasses(List<GenericJson> giftCardClasses) { this.giftCardClasses = giftCardClasses; } public void addGiftCardClass(GenericJson object) { giftCardClasses.add(object); } }