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; } }
/** * Populates application.numbers field with information of one or more numbers. The 'numbers' list is created if * already null and an IncomingPhoneNumber is added into it based on information from the map. Invoking the same method * several times to add more numbers to the same list is possible. * * @param application * @param map * @param field_prefix * @return */ private void populateApplicationWithNumber(Application application, final Map<String, Object> map, String field_prefix) { // first create the number ApplicationNumberSummary number = new ApplicationNumberSummary( readString(map.get(field_prefix + "sid")), readString(map.get(field_prefix + "friendly_name")), readString(map.get(field_prefix + "phone_number")), readString(map.get(field_prefix + "voice_application_sid")), readString(map.get(field_prefix + "sms_application_sid")), readString(map.get(field_prefix + "ussd_application_sid")), readString(map.get(field_prefix + "refer_application_sid")) ); List<ApplicationNumberSummary> numbers = application.getNumbers(); if (numbers == null) { numbers = new ArrayList<ApplicationNumberSummary>(); application.setNumbers(numbers); } numbers.add(number); }
protected Response getApplication(final String accountSid, final String sid, final MediaType responseType) { Account account; secure(account = accountsDao.getAccount(accountSid), "RestComm:Read:Applications"); Application application = null; if (Sid.pattern.matcher(sid).matches()) { application = dao.getApplication(new Sid(sid)); } /*else { // disabled support for application retrieval based on FriendlyName. It makes no sense to have it if friendly-name based application uniqueness is no longer supported either. try { // Once not a valid sid, search using the parameter as name String name = URLDecoder.decode(String.valueOf(sid), "UTF-8"); application = dao.getApplication(name); } catch (UnsupportedEncodingException e) { return status(BAD_REQUEST).entity(e.getMessage()).build(); } }*/ if (application == null) { return status(NOT_FOUND).build(); } else { secure(account, application.getAccountSid(), SecuredType.SECURED_APP); if (APPLICATION_XML_TYPE.equals(responseType)) { final RestCommResponse response = new RestCommResponse(application); return ok(xstream.toXML(response), APPLICATION_XML).build(); } else if (APPLICATION_JSON_TYPE.equals(responseType)) { return ok(gson.toJson(application), APPLICATION_JSON).build(); } else { return null; } } }
@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(); } }
protected Response updateApplication(final String accountSid, final String sid, final MultivaluedMap<String, String> data, final MediaType responseType) { Account account; secure(account = accountsDao.getAccount(accountSid), "RestComm:Modify:Applications"); final Application application = dao.getApplication(new Sid(sid)); if (application == null) { return status(NOT_FOUND).build(); } else { secure(account, application.getAccountSid(), SecuredType.SECURED_APP); final Application applicationUpdate = update(application, data); dao.updateApplication(applicationUpdate); if (APPLICATION_XML_TYPE.equals(responseType)) { final RestCommResponse response = new RestCommResponse(applicationUpdate); return ok(xstream.toXML(response), APPLICATION_XML).build(); } else if (APPLICATION_JSON_TYPE.equals(responseType)) { return ok(gson.toJson(applicationUpdate), APPLICATION_JSON).build(); } else { return null; } } }
@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; }
private Response deleteApplication(final String accountSid, final String sid) { Account operatedAccount = accountsDao.getAccount(new Sid(accountSid)); secure(operatedAccount, "RestComm:Modify:Applications", SecuredType.SECURED_APP); Application application = dao.getApplication(new Sid(sid)); if (application != null) { secure(operatedAccount, application.getAccountSid(), SecuredType.SECURED_APP); } dao.removeApplication(new Sid(sid)); return ok().build(); }
@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(); }