@Override public List<Application> getApplicationsWithNumbers(Sid accountSid) { final SqlSession session = sessions.openSession(); try { final List<Map<String, Object>> results = session.selectList(namespace + "getApplicationsAndNumbers", accountSid.toString()); final List<Application> applications = new ArrayList<Application>(); if (results != null && !results.isEmpty()) { Application previousApp = null; Application app = null; for (final Map<String, Object> result : results) { app = toApplication(result); if (previousApp != null && previousApp.getSid().equals(app.getSid()) ) app = previousApp; // if there is a number bound to this application populate the latter with the number details if (result.get("num_sid") != null) { populateApplicationWithNumber(app, result, "num_"); } if (previousApp == null || !previousApp.getSid().equals(app.getSid())) { // is this is a new application in the result map add it to the list. Remember, the same app can be returned many times if it's related to many numbers applications.add(app); } previousApp = app; } } return applications; } finally { session.close(); } }
private Map<String, Object> toMap(final Application application) { final Map<String, Object> map = new HashMap<String, Object>(); map.put("sid", writeSid(application.getSid())); map.put("date_created", writeDateTime(application.getDateCreated())); map.put("date_updated", writeDateTime(application.getDateUpdated())); map.put("friendly_name", application.getFriendlyName()); map.put("account_sid", writeSid(application.getAccountSid())); map.put("api_version", application.getApiVersion()); map.put("voice_caller_id_lookup", application.hasVoiceCallerIdLookup()); map.put("uri", writeUri(application.getUri())); map.put("rcml_url", writeUri(application.getRcmlUrl())); map.put("kind", writeApplicationKind(application.getKind())); return map; } }
@Override public JsonElement serialize(final Application application, final Type type, final JsonSerializationContext context) { final JsonObject object = new JsonObject(); writeSid(application.getSid(), object); writeDateCreated(application.getDateCreated(), object); writeDateUpdated(application.getDateUpdated(), object); writeFriendlyName(application.getFriendlyName(), object); writeAccountSid(application.getAccountSid(), object); writeApiVersion(application.getApiVersion(), object); writeVoiceCallerIdLookup(application.hasVoiceCallerIdLookup(), object); writeUri(application.getUri(), object); writeRcmlUrl(application.getRcmlUrl(), object); writeKind(application.getKind(), object); object.add("numbers",context.serialize(application.getNumbers())); return object; }
@Override public void marshal(final Object object, final HierarchicalStreamWriter writer, final MarshallingContext context) { final Application application = (Application) object; writer.startNode("Application"); writeSid(application.getSid(), writer); writeDateCreated(application.getDateCreated(), writer); writeDateUpdated(application.getDateUpdated(), writer); writeFriendlyName(application.getFriendlyName(), writer); writeAccountSid(application.getAccountSid(), writer); writeApiVersion(application.getApiVersion(), writer); writeVoiceCallerIdLookup(application.hasVoiceCallerIdLookup(), writer); writeUri(application.getUri(), writer); writeRcmlUrl(application.getRcmlUrl(), writer); writeKind(application.getKind(), writer); writeNumbers(application.getNumbers(), writer, context); writer.endNode(); }