package digitalwallet; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public enum TemplateTypeEnum { BOARDING_PASS(1L, "boardingPass", "Boarding Pass", 1), COUPON(2L, "coupon", "Coupon", 1), EVENT_TICKET(3L, "eventTicket", "Event Ticket", 1), GENERIC(4L, "generic", "Generic", 1), STORE_CARD(5L, "storeCard", "Store Card", 1), LOYALTY_1(6L, "loyalty1", "Loyalty1", 2), LOYALTY_2(7L, "loyalty2", "Loyalty2", 2), OFFER_1(8L, "offer1", "Offer1", 2), GENERIC_1(9L, "generic1", "Generic1", 2), GENERIC_2(10L, "generic2", "Generic2", 2), GENERIC_3(11L, "generic3", "Generic3", 2); private final Long code; private final String jsonName; private final String displayName; private final int vendorId; private static List<TemplateTypeEnum> appleTemplateTypes; private static List<TemplateTypeEnum> googleTemplateTypes; private static Map<Long, String> jsonNameLookup; private static Map<Long, String> displayNameLookup; static { appleTemplateTypes = new ArrayList<TemplateTypeEnum>(); googleTemplateTypes = new ArrayList<TemplateTypeEnum>(); jsonNameLookup = new HashMap<Long, String>(); displayNameLookup = new HashMap<Long, String>(); for (TemplateTypeEnum current : TemplateTypeEnum.values()) { if (current.getVendorId() == 1) { appleTemplateTypes.add(current); } else if (current.getVendorId() == 2) { googleTemplateTypes.add(current); } jsonNameLookup.put(current.getCode(), current.getJsonName()); displayNameLookup.put(current.getCode(), current.getDisplayName()); } } private TemplateTypeEnum(Long code, String jsonName, String displayName, int vendorId) { this.vendorId = vendorId; this.code = code; this.jsonName = jsonName; this.displayName = displayName; } public Long getCode() { return code; } public String getJsonName() { return jsonName; } public String getDisplayName() { return displayName; } public int getVendorId() { return vendorId; } public static String jsonKeyName(Long code) { if (jsonNameLookup.containsKey(code)) { return jsonNameLookup.get(code); } throw new RuntimeException("invalid template type " + code); } public static String jsonKeyName(Long code, int vendorId) { for (TemplateTypeEnum current : TemplateTypeEnum.values()) { if (current.code.equals(code) && (vendorId == current.vendorId)) { return current.jsonName; } } switch (vendorId) { case 2: return LOYALTY_1.jsonName; case 1: default: return GENERIC.jsonName; } } public static String displayName(Long code) { if (displayNameLookup.containsKey(code)) { return displayNameLookup.get(code); } throw new RuntimeException("invalid template type " + code); } public static TemplateTypeEnum fromJsonKeyName(String json) { for (TemplateTypeEnum current : TemplateTypeEnum.values()) { if (current.jsonName.equals(json) || current.displayName.equals(json)) { return current; } } throw new RuntimeException("invalid template type " + json); } public static TemplateTypeEnum fromCode(Long code) { for (TemplateTypeEnum current : TemplateTypeEnum.values()) { if (current.code.equals(code)) { return current; } } throw new RuntimeException("invalid template code " + code); } public static TemplateTypeEnum fromCode(Long code, int vendorId) { for (TemplateTypeEnum current : TemplateTypeEnum.values()) { if (current.code.equals(code) && (current.vendorId == vendorId)) { return current; } } switch (vendorId) { case 2: return LOYALTY_1; case 1: default: return GENERIC; } } public static TemplateTypeEnum getRandomAppleTemplateType() { List<TemplateTypeEnum> types = getAppleTemplateTypes(); int ndx = (int)(Math.random() * types.size()); return types.get(ndx); } public static TemplateTypeEnum getRandomGoogleTemplateType() { List<TemplateTypeEnum> types = getGoogleTemplateTypes(); int ndx = (int)(Math.random() * types.size()); return types.get(ndx); } private static List<TemplateTypeEnum> getGoogleTemplateTypes() { return googleTemplateTypes; } private static List<TemplateTypeEnum> getAppleTemplateTypes() { return appleTemplateTypes; } }