From 9271de5ef78a3d08b7dbabbf85345b4e294abc1e Mon Sep 17 00:00:00 2001 From: Orestis Tsakiridis Date: Thu, 9 Nov 2017 09:49:54 +0200 Subject: [PATCH 1/3] New 'applicationSid' filter value for IncomingPhoneNumbersFilter, unit test and mybatis layer update (for test only) Refers #2608 --- .../entities/IncomingPhoneNumberFilter.java | 9 +- .../mybatis/IncomingPhoneNumbersDaoTest.java | 2 +- .../IncomingPhoneNumbersRetrievalTest.java | 84 +++++++++++++++++++ .../incoming-phone-numbers.xml | 6 ++ .../http/IncomingPhoneNumbersEndpoint.java | 2 +- 5 files changed, 98 insertions(+), 5 deletions(-) create mode 100644 restcomm/restcomm.dao/src/test/java/org/restcomm/connect/dao/mybatis/IncomingPhoneNumbersRetrievalTest.java diff --git a/restcomm/restcomm.dao/src/main/java/org/restcomm/connect/dao/entities/IncomingPhoneNumberFilter.java b/restcomm/restcomm.dao/src/main/java/org/restcomm/connect/dao/entities/IncomingPhoneNumberFilter.java index 00d91b35f6..b7576f5221 100644 --- a/restcomm/restcomm.dao/src/main/java/org/restcomm/connect/dao/entities/IncomingPhoneNumberFilter.java +++ b/restcomm/restcomm.dao/src/main/java/org/restcomm/connect/dao/entities/IncomingPhoneNumberFilter.java @@ -31,13 +31,14 @@ public class IncomingPhoneNumberFilter { private final String accountSid; private final String friendlyName; private final String phoneNumber; + private final String applicationSid; private final String sortBy; private final String sortDirection; private final Integer limit; private final Integer offset; - public IncomingPhoneNumberFilter(String accountSid, String friendlyName, String phoneNumber, String sortBy, - String sortDirection, Integer limit, Integer offset) { + public IncomingPhoneNumberFilter(String accountSid, String friendlyName, String phoneNumber, String applicationSid, String sortBy, + String sortDirection, Integer limit, Integer offset) { this.accountSid = accountSid; this.friendlyName = friendlyName; // The LIKE keyword uses '%' to match any (including 0) number of characters, and '_' to match exactly one character @@ -48,13 +49,14 @@ public IncomingPhoneNumberFilter(String accountSid, String friendlyName, String } this.phoneNumber = phoneNumber; + this.applicationSid = applicationSid; this.sortBy = sortBy; this.sortDirection = sortDirection; this.limit = limit; this.offset = offset; } - public IncomingPhoneNumberFilter(String accountSid, String friendlyName, String phoneNumber) { + public IncomingPhoneNumberFilter(String accountSid, String friendlyName, String phoneNumber, String applicationSid) { super(); this.accountSid = accountSid; this.friendlyName = friendlyName; @@ -65,6 +67,7 @@ public IncomingPhoneNumberFilter(String accountSid, String friendlyName, String phoneNumber = phoneNumber.replaceAll("\\*", "_"); } this.phoneNumber = phoneNumber; + this.applicationSid = applicationSid; this.sortBy = null; this.sortDirection = null; this.offset = null; diff --git a/restcomm/restcomm.dao/src/test/java/org/restcomm/connect/dao/mybatis/IncomingPhoneNumbersDaoTest.java b/restcomm/restcomm.dao/src/test/java/org/restcomm/connect/dao/mybatis/IncomingPhoneNumbersDaoTest.java index 41dc37a013..cb62717a52 100644 --- a/restcomm/restcomm.dao/src/test/java/org/restcomm/connect/dao/mybatis/IncomingPhoneNumbersDaoTest.java +++ b/restcomm/restcomm.dao/src/test/java/org/restcomm/connect/dao/mybatis/IncomingPhoneNumbersDaoTest.java @@ -168,7 +168,7 @@ public void createReadUpdateDelete() { @Test public void applicationFriendlyNameReturned() { final IncomingPhoneNumbersDao dao = manager.getIncomingPhoneNumbersDao(); - IncomingPhoneNumberFilter incomingPhoneNumberFilter = new IncomingPhoneNumberFilter("ACae6e420f425248d6a26948c17a9e2acf", null, null,"phone_number","ASC",50,0); + IncomingPhoneNumberFilter incomingPhoneNumberFilter = new IncomingPhoneNumberFilter("ACae6e420f425248d6a26948c17a9e2acf", null, null, null, "phone_number","ASC",50,0); List phoneNumbers = dao.getIncomingPhoneNumbersByFilter(incomingPhoneNumberFilter); Assert.assertEquals("Only a single phone number expected",1, phoneNumbers.size()); IncomingPhoneNumber number = phoneNumbers.get(0); diff --git a/restcomm/restcomm.dao/src/test/java/org/restcomm/connect/dao/mybatis/IncomingPhoneNumbersRetrievalTest.java b/restcomm/restcomm.dao/src/test/java/org/restcomm/connect/dao/mybatis/IncomingPhoneNumbersRetrievalTest.java new file mode 100644 index 0000000000..12b4ca9ece --- /dev/null +++ b/restcomm/restcomm.dao/src/test/java/org/restcomm/connect/dao/mybatis/IncomingPhoneNumbersRetrievalTest.java @@ -0,0 +1,84 @@ +/* + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2014, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.restcomm.connect.dao.mybatis; + +import junit.framework.Assert; +import org.apache.ibatis.session.SqlSessionFactory; +import org.apache.ibatis.session.SqlSessionFactoryBuilder; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.restcomm.connect.dao.IncomingPhoneNumbersDao; +import org.restcomm.connect.dao.entities.IncomingPhoneNumber; +import org.restcomm.connect.dao.entities.IncomingPhoneNumberFilter; + +import java.io.FileInputStream; +import java.io.InputStream; +import java.util.List; + +/** + * @author otsakir@gmail.com - Orestis Tsakiridis + */ +public class IncomingPhoneNumbersRetrievalTest extends DaoTest { + private static MybatisDaoManager manager; + + @Before + public void before() throws Exception { + sandboxRoot = createTempDir("IncomingPhoneNumbersRetrievalTest"); + String mybatisFilesPath = getClass().getResource("/applicationsDao").getFile(); + setupSandbox(mybatisFilesPath, sandboxRoot); + + String mybatisXmlPath = sandboxRoot.getPath() + "/mybatis_updated.xml"; + final InputStream data = new FileInputStream(mybatisXmlPath); + final SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); + final SqlSessionFactory factory = builder.build(data); + manager = new MybatisDaoManager(); + manager.start(factory); + } + + @After + public void after() throws Exception { + manager.shutdown(); + removeTempDir(sandboxRoot.getAbsolutePath()); + } + + @Test + public void retrieveNumbersForApplication() { + IncomingPhoneNumbersDao dao = manager.getIncomingPhoneNumbersDao(); + // application AP73926e7113fa4d95981aa96b76eca854 is bound with 3 numbers + IncomingPhoneNumberFilter filter = new IncomingPhoneNumberFilter("ACae6e420f425248d6a26948c17a9e2acf", null, null, "AP73926e7113fa4d95981aa96b76eca854", null, null, 100, 0); + List numbers = dao.getIncomingPhoneNumbersByFilter(filter); + Assert.assertEquals(3, numbers.size()); + // application AP00000000000000000000000000000004 is bound with no numbers + filter = new IncomingPhoneNumberFilter("ACae6e420f425248d6a26948c17a9e2acf", null, null, "AP00000000000000000000000000000004", null, null, 100, 0); + numbers = dao.getIncomingPhoneNumbersByFilter(filter); + Assert.assertEquals(0, numbers.size()); + } + + @Test + public void countTotalNumbersForApplication() { + IncomingPhoneNumbersDao dao = manager.getIncomingPhoneNumbersDao(); + IncomingPhoneNumberFilter filter = new IncomingPhoneNumberFilter("ACae6e420f425248d6a26948c17a9e2acf", null, null, "AP73926e7113fa4d95981aa96b76eca854", null, null, 100, 0); + int total = dao.getTotalIncomingPhoneNumbers(filter); + Assert.assertEquals(3, total); + } + +} diff --git a/restcomm/restcomm.dao/src/test/resources/applicationsDao/incoming-phone-numbers.xml b/restcomm/restcomm.dao/src/test/resources/applicationsDao/incoming-phone-numbers.xml index b026fbf9aa..2ca7bf38b2 100644 --- a/restcomm/restcomm.dao/src/test/resources/applicationsDao/incoming-phone-numbers.xml +++ b/restcomm/restcomm.dao/src/test/resources/applicationsDao/incoming-phone-numbers.xml @@ -88,6 +88,9 @@ AND "n"."phone_number" like #{phoneNumber} + + AND ("n"."voice_application_sid" = #{applicationSid} OR "n"."sms_application_sid" = #{applicationSid} OR "n"."ussd_application_sid" = #{applicationSid} OR "n"."refer_application_sid" = #{applicationSid}) + order by "n"."phone_number" ${sortDirection} @@ -112,6 +115,9 @@ AND "phone_number" like #{phoneNumber} + + AND ("voice_application_sid" = #{applicationSid} OR "sms_application_sid" = #{applicationSid} OR "ussd_application_sid" = #{applicationSid} OR "refer_application_sid" = #{applicationSid}) + diff --git a/restcomm/restcomm.http/src/main/java/org/restcomm/connect/http/IncomingPhoneNumbersEndpoint.java b/restcomm/restcomm.http/src/main/java/org/restcomm/connect/http/IncomingPhoneNumbersEndpoint.java index 70eb5a605a..fc866b58a9 100644 --- a/restcomm/restcomm.http/src/main/java/org/restcomm/connect/http/IncomingPhoneNumbersEndpoint.java +++ b/restcomm/restcomm.http/src/main/java/org/restcomm/connect/http/IncomingPhoneNumbersEndpoint.java @@ -313,7 +313,7 @@ protected Response getIncomingPhoneNumbers(final String accountSid, final PhoneN return status(javax.ws.rs.core.Response.Status.BAD_REQUEST).build(); } - incomingPhoneNumberFilter = new IncomingPhoneNumberFilter(accountSid, friendlyNameFilter, phoneNumberFilter, sortBy, + incomingPhoneNumberFilter = new IncomingPhoneNumberFilter(accountSid, friendlyNameFilter, phoneNumberFilter, null, sortBy, reverse, limit, offset); final List incomingPhoneNumbers = dao.getIncomingPhoneNumbersByFilter(incomingPhoneNumberFilter); From 20d7a240202676a8898025d363bb5b828269ef96 Mon Sep 17 00:00:00 2001 From: Orestis Tsakiridis Date: Thu, 9 Nov 2017 10:56:12 +0200 Subject: [PATCH 2/3] Copied changes to numbers mybatis descriptor to all places throughout the codebase (tests, mysql descriptors etc.) Refers #2608 --- .../mariadb/sql/incoming-phone-numbers.xml | 6 +++ .../WEB-INF/sql/incoming-phone-numbers.xml | 9 ++++- .../incoming-phone-numbers.xml | 20 ---------- .../test/resources/incoming-phone-numbers.xml | 37 +++++++++++-------- .../http/IncomingPhoneNumbersEndpoint.java | 5 ++- .../mappers/incoming-phone-numbers.xml | 36 +++++++++++++++++- .../mappers/incoming-phone-numbers.xml | 36 +++++++++++++++++- .../mappers/incoming-phone-numbers.xml | 36 +++++++++++++++++- 8 files changed, 139 insertions(+), 46 deletions(-) diff --git a/restcomm/restcomm.application/src/main/webapp/WEB-INF/scripts/mariadb/sql/incoming-phone-numbers.xml b/restcomm/restcomm.application/src/main/webapp/WEB-INF/scripts/mariadb/sql/incoming-phone-numbers.xml index 9c92ba4fe0..e342fccfa6 100644 --- a/restcomm/restcomm.application/src/main/webapp/WEB-INF/scripts/mariadb/sql/incoming-phone-numbers.xml +++ b/restcomm/restcomm.application/src/main/webapp/WEB-INF/scripts/mariadb/sql/incoming-phone-numbers.xml @@ -67,6 +67,9 @@ AND n.phone_number like #{phoneNumber} + + + AND (n.voice_application_sid = #{applicationSid} OR n.sms_application_sid = #{applicationSid} OR n.ussd_application_sid = #{applicationSid} OR n.refer_application_sid = #{applicationSid}) @@ -90,6 +93,9 @@ AND phone_number like #{phoneNumber} + + AND (voice_application_sid = #{applicationSid} OR sms_application_sid = #{applicationSid} OR ussd_application_sid = #{applicationSid} OR refer_application_sid = #{applicationSid}) + diff --git a/restcomm/restcomm.application/src/main/webapp/WEB-INF/sql/incoming-phone-numbers.xml b/restcomm/restcomm.application/src/main/webapp/WEB-INF/sql/incoming-phone-numbers.xml index ab0efedf70..4ed5ff53ea 100644 --- a/restcomm/restcomm.application/src/main/webapp/WEB-INF/sql/incoming-phone-numbers.xml +++ b/restcomm/restcomm.application/src/main/webapp/WEB-INF/sql/incoming-phone-numbers.xml @@ -68,6 +68,9 @@ AND "n"."phone_number" like #{phoneNumber} + + AND ("n"."voice_application_sid" = #{applicationSid} OR "n"."sms_application_sid" = #{applicationSid} OR "n"."ussd_application_sid" = #{applicationSid} OR "n"."refer_application_sid" = #{applicationSid}) + order by "n"."phone_number" ${sortDirection} @@ -92,8 +95,10 @@ AND "phone_number" like #{phoneNumber} - - + + AND ("voice_application_sid" = #{applicationSid} OR "sms_application_sid" = #{applicationSid} OR "ussd_application_sid" = #{applicationSid} OR "refer_application_sid" = #{applicationSid}) + + diff --git a/restcomm/restcomm.dao/src/test/resources/applicationsDao/incoming-phone-numbers.xml b/restcomm/restcomm.dao/src/test/resources/applicationsDao/incoming-phone-numbers.xml index 2ca7bf38b2..8619119538 100644 --- a/restcomm/restcomm.dao/src/test/resources/applicationsDao/incoming-phone-numbers.xml +++ b/restcomm/restcomm.dao/src/test/resources/applicationsDao/incoming-phone-numbers.xml @@ -1,24 +1,4 @@ - - - SELECT "n".*, "a_voice"."friendly_name" "voice_application_name", "a_sms"."friendly_name" "sms_application_name", - "a_ussd"."friendly_name" "ussd_application_name" + "a_ussd"."friendly_name" "ussd_application_name", + "a_refer"."friendly_name" "refer_application_name" FROM "restcomm_incoming_phone_numbers" "n" LEFT OUTER JOIN "restcomm_applications" "a_voice" ON "n"."voice_application_sid" = "a_voice"."sid" LEFT OUTER JOIN "restcomm_applications" "a_sms" ON "n"."sms_application_sid" = "a_sms"."sid" LEFT OUTER JOIN "restcomm_applications" "a_ussd" ON "n"."ussd_application_sid" = "a_ussd"."sid" + LEFT OUTER JOIN "restcomm_applications" "a_refer" ON "n"."refer_application_sid" = "a_refer"."sid" WHERE "account_sid"=#{accountSid} AND "n"."friendly_name"=#{friendlyName} @@ -57,6 +59,36 @@ AND "n"."phone_number" like #{phoneNumber} + + AND ("n"."voice_application_sid" = #{applicationSid} OR "n"."sms_application_sid" = #{applicationSid} OR "n"."ussd_application_sid" = #{applicationSid} OR "n"."refer_application_sid" = #{applicationSid}) + + + + order by "n"."phone_number" ${sortDirection} + + + order by "n"."friendly_name" ${sortDirection} + + + order by "n"."phone_number" ${sortDirection} + + + + LIMIT #{limit} OFFSET #{offset} + + + diff --git a/restcomm/restcomm.telephony/resources/mappers/incoming-phone-numbers.xml b/restcomm/restcomm.telephony/resources/mappers/incoming-phone-numbers.xml index aa6f5ea0af..0d3df8752d 100644 --- a/restcomm/restcomm.telephony/resources/mappers/incoming-phone-numbers.xml +++ b/restcomm/restcomm.telephony/resources/mappers/incoming-phone-numbers.xml @@ -40,16 +40,18 @@ --> - SELECT "n".*, "a_voice"."friendly_name" "voice_application_name", "a_sms"."friendly_name" "sms_application_name", - "a_ussd"."friendly_name" "ussd_application_name" + "a_ussd"."friendly_name" "ussd_application_name", + "a_refer"."friendly_name" "refer_application_name" FROM "restcomm_incoming_phone_numbers" "n" LEFT OUTER JOIN "restcomm_applications" "a_voice" ON "n"."voice_application_sid" = "a_voice"."sid" LEFT OUTER JOIN "restcomm_applications" "a_sms" ON "n"."sms_application_sid" = "a_sms"."sid" LEFT OUTER JOIN "restcomm_applications" "a_ussd" ON "n"."ussd_application_sid" = "a_ussd"."sid" + LEFT OUTER JOIN "restcomm_applications" "a_refer" ON "n"."refer_application_sid" = "a_refer"."sid" WHERE "account_sid"=#{accountSid} AND "n"."friendly_name"=#{friendlyName} @@ -57,6 +59,36 @@ AND "n"."phone_number" like #{phoneNumber} + + AND ("n"."voice_application_sid" = #{applicationSid} OR "n"."sms_application_sid" = #{applicationSid} OR "n"."ussd_application_sid" = #{applicationSid} OR "n"."refer_application_sid" = #{applicationSid}) + + + + order by "n"."phone_number" ${sortDirection} + + + order by "n"."friendly_name" ${sortDirection} + + + order by "n"."phone_number" ${sortDirection} + + + + LIMIT #{limit} OFFSET #{offset} + + + diff --git a/restcomm/restcomm.telephony/src/test/resources/mappers/incoming-phone-numbers.xml b/restcomm/restcomm.telephony/src/test/resources/mappers/incoming-phone-numbers.xml index aa6f5ea0af..0d3df8752d 100644 --- a/restcomm/restcomm.telephony/src/test/resources/mappers/incoming-phone-numbers.xml +++ b/restcomm/restcomm.telephony/src/test/resources/mappers/incoming-phone-numbers.xml @@ -40,16 +40,18 @@ --> - SELECT "n".*, "a_voice"."friendly_name" "voice_application_name", "a_sms"."friendly_name" "sms_application_name", - "a_ussd"."friendly_name" "ussd_application_name" + "a_ussd"."friendly_name" "ussd_application_name", + "a_refer"."friendly_name" "refer_application_name" FROM "restcomm_incoming_phone_numbers" "n" LEFT OUTER JOIN "restcomm_applications" "a_voice" ON "n"."voice_application_sid" = "a_voice"."sid" LEFT OUTER JOIN "restcomm_applications" "a_sms" ON "n"."sms_application_sid" = "a_sms"."sid" LEFT OUTER JOIN "restcomm_applications" "a_ussd" ON "n"."ussd_application_sid" = "a_ussd"."sid" + LEFT OUTER JOIN "restcomm_applications" "a_refer" ON "n"."refer_application_sid" = "a_refer"."sid" WHERE "account_sid"=#{accountSid} AND "n"."friendly_name"=#{friendlyName} @@ -57,6 +59,36 @@ AND "n"."phone_number" like #{phoneNumber} + + AND ("n"."voice_application_sid" = #{applicationSid} OR "n"."sms_application_sid" = #{applicationSid} OR "n"."ussd_application_sid" = #{applicationSid} OR "n"."refer_application_sid" = #{applicationSid}) + + + + order by "n"."phone_number" ${sortDirection} + + + order by "n"."friendly_name" ${sortDirection} + + + order by "n"."phone_number" ${sortDirection} + + + + LIMIT #{limit} OFFSET #{offset} + + + From e594b09e4bdf4bdc90098327ee8147aa2563086d Mon Sep 17 00:00:00 2001 From: Orestis Tsakiridis Date: Fri, 10 Nov 2017 11:36:41 +0200 Subject: [PATCH 3/3] Updated docs about numbers 'ApplicationSid' based filtering Refers #2608 --- .../src/main/asciidoc/api/incoming-phone-numbers-api.adoc | 1 + 1 file changed, 1 insertion(+) diff --git a/restcomm/restcomm.docs/sources-asciidoc/src/main/asciidoc/api/incoming-phone-numbers-api.adoc b/restcomm/restcomm.docs/sources-asciidoc/src/main/asciidoc/api/incoming-phone-numbers-api.adoc index 7cb1345250..51a4205c44 100644 --- a/restcomm/restcomm.docs/sources-asciidoc/src/main/asciidoc/api/incoming-phone-numbers-api.adoc +++ b/restcomm/restcomm.docs/sources-asciidoc/src/main/asciidoc/api/incoming-phone-numbers-api.adoc @@ -176,6 +176,7 @@ The following query string parameters allow you to limit the list returned. Note |*Parameter* |*Description* |PhoneNumber |Only show the incoming phone number resources that match this pattern. You can specify partial numbers and use '*' as a wildcard for any digit. |FriendlyName |Only show the incoming phone number resources with friendly names that exactly match this name. +|ApplicationSid |Only show the incoming phone number resources associated with the specified application sid. |Beta |Include phone numbers new to the Restcomm platform. Possible values are either true or false. Default is true. |============================================================================================================================================================