Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,15 @@
VALUES (#{sid}, #{date_created}, #{date_updated}, #{friendly_name}, #{account_sid}, #{api_version}, #{voice_caller_id_lookup},
#{uri}, #{rcml_url}, #{kind});
</insert>

<select id="getApplication" parameterType="string" resultType="hashmap">
SELECT * FROM restcomm_applications WHERE sid=#{sid};
</select>

<select id="getApplicationByFriendlyName" parameterType="string" resultType="hashmap">
SELECT * FROM restcomm_applications WHERE BINARY friendly_name=#{friendly_name};
</select>

<select id="getApplications" parameterType="string" resultType="hashmap">
SELECT * FROM restcomm_applications WHERE account_sid=#{account_sid} or account_sid is null;
</select>
Expand All @@ -44,18 +44,50 @@
WHERE (app.account_sid=#{account_sid} or app.account_sid is null)
ORDER BY app.date_created, app.sid;
</select>


<select id="getApplicationsUsingFilters" parameterType="org.restcomm.connect.dao.entities.ApplicationFilter" resultType="hashmap">
SELECT * FROM restcomm_applications WHERE (account_sid=#{accountSid} or account_sid is null)
<if test="friendlyName != null">
AND friendly_name=#{friendlyName}
</if>
</select>

<select id="getApplicationsAndNumbersUsingFilters" parameterType="org.restcomm.connect.dao.entities.ApplicationFilter" resultType="hashmap">
SELECT
app.*,
num.sid num_sid,
num.friendly_name num_friendly_name,
num.phone_number num_phone_number,
num.voice_application_sid num_voice_application_sid,
num.sms_application_sid num_sms_application_sid,
num.ussd_application_sid num_ussd_application_sid,
num.refer_application_sid num_refer_application_sid
FROM restcomm_applications app
LEFT OUTER JOIN (
SELECT * from restcomm_incoming_phone_numbers nums WHERE nums.account_sid=#{accountSid}
) num
ON num.voice_application_sid = app.sid
OR num.sms_application_sid = app.sid
OR num.ussd_application_sid = app.sid
OR num.refer_application_sid = app.sid
WHERE (app.account_sid=#{accountSid} or app.account_sid is null)
<if test="friendlyName != null">
AND app.friendly_name=#{friendlyName}
</if>
ORDER BY app.date_created, app.sid;
</select>

<delete id="removeApplication" parameterType="string">
DELETE FROM restcomm_applications WHERE sid=#{sid};
</delete>

<delete id="removeApplications" parameterType="string">
DELETE FROM restcomm_applications WHERE account_sid=#{account_sid};
</delete>

<update id="updateApplication" parameterType="map">
UPDATE restcomm_applications SET friendly_name=#{friendly_name}, date_updated=#{date_updated},
voice_caller_id_lookup=#{voice_caller_id_lookup}, rcml_url=#{rcml_url}, kind=#{kind}
UPDATE restcomm_applications SET friendly_name=#{friendly_name}, date_updated=#{date_updated},
voice_caller_id_lookup=#{voice_caller_id_lookup}, rcml_url=#{rcml_url}, kind=#{kind}
WHERE sid=#{sid};
</update>
</mapper>
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,37 @@
ORDER BY "app"."date_created", "app"."sid";
</select>

<select id="getApplicationsUsingFilters" parameterType="org.restcomm.connect.dao.entities.ApplicationFilter" resultType="hashmap">
SELECT * FROM "restcomm_applications" WHERE ("account_sid"=#{accountSid} or "account_sid" is null)
<if test="friendlyName != null">
AND friendly_name=#{friendlyName}
</if>
</select>

<select id="getApplicationsAndNumbersUsingFilters" parameterType="org.restcomm.connect.dao.entities.ApplicationFilter" resultType="hashmap">
SELECT
"app".*,
"num"."sid" "num_sid",
"num"."friendly_name" "num_friendly_name",
"num"."phone_number" "num_phone_number",
"num"."voice_application_sid" "num_voice_application_sid",
"num"."sms_application_sid" "num_sms_application_sid",
"num"."ussd_application_sid" "num_ussd_application_sid",
"num"."refer_application_sid" "num_refer_application_sid"
FROM "restcomm_applications" "app"
LEFT OUTER JOIN (
SELECT * from "restcomm_incoming_phone_numbers" "nums" WHERE "nums"."account_sid"=#{accountSid}
) "num"
ON "num"."voice_application_sid" = "app"."sid"
OR "num"."sms_application_sid" = "app"."sid"
OR "num"."ussd_application_sid" = "app"."sid"
OR "num"."refer_application_sid" = "app"."sid"
WHERE ("app"."account_sid"=#{accountSid} or "app"."account_sid" is null)
<if test="friendlyName != null">
AND "app"."friendly_name"=#{friendlyName}
</if>
ORDER BY "app"."date_created", "app"."sid";
</select>

<delete id="removeApplication" parameterType="string">
DELETE FROM "restcomm_applications" WHERE "sid"=#{sid};
Expand All @@ -79,4 +110,4 @@
"voice_caller_id_lookup"=#{voice_caller_id_lookup}, "rcml_url"=#{rcml_url}, "kind"=#{kind}
WHERE "sid"=#{sid};
</update>
</mapper>
</mapper>
Original file line number Diff line number Diff line change
Expand Up @@ -23,25 +23,30 @@

import org.restcomm.connect.commons.dao.Sid;
import org.restcomm.connect.dao.entities.Application;
import org.restcomm.connect.dao.entities.ApplicationFilter;

/**
* @author quintana.thomas@gmail.com (Thomas Quintana)
*/
public interface ApplicationsDao {
void addApplication(Application application);
void addApplication ( Application application );

Application getApplication(Sid sid);
Application getApplication ( Sid sid );

Application getApplication(String friendlyName);
Application getApplication ( String friendlyName );

List<Application> getApplications(Sid accountSid);
List<Application> getApplications ( Sid accountSid );

List<Application> getApplications ( ApplicationFilter filter );

// this may optionally return related numbers as part of an Application
List<Application> getApplicationsWithNumbers(Sid accountSid);
List<Application> getApplicationsWithNumbers ( Sid accountSid );

List<Application> getApplicationsWithNumbers ( ApplicationFilter filter );

void removeApplication(Sid sid);
void removeApplication ( Sid sid );

void removeApplications(Sid accountSid);
void removeApplications ( Sid accountSid );

void updateApplication(Application application);
void updateApplication ( Application application );
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
/*
* 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 <http://www.gnu.org/licenses/>
*
*/
package org.restcomm.connect.dao.entities;

import org.restcomm.connect.commons.annotations.concurrency.Immutable;

@Immutable
public class ApplicationFilter {
private final String accountSid;
private final String friendlyName;

public ApplicationFilter ( String accountSid, String friendlyName ) {
this.accountSid = accountSid;
this.friendlyName = friendlyName;
}

public String getAccountSid ( ) {
return accountSid;
}

/**
* @return the friendlyName
*/
public String getFriendlyName ( ) {
return friendlyName;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import org.restcomm.connect.commons.annotations.concurrency.ThreadSafe;
import org.restcomm.connect.dao.ApplicationsDao;
import org.restcomm.connect.dao.entities.Application;
import org.restcomm.connect.dao.entities.ApplicationFilter;
import org.restcomm.connect.commons.dao.Sid;
import org.restcomm.connect.dao.entities.ApplicationNumberSummary;

Expand Down Expand Up @@ -124,6 +125,36 @@ public List<Application> getApplicationsWithNumbers(Sid accountSid) {
}
}

@Override
public List<Application> getApplicationsWithNumbers (ApplicationFilter filter) {
final SqlSession session = sessions.openSession();
try {
final List<Map<String, Object>> results = session.selectList(namespace + "getApplicationsAndNumbersUsingFilters", filter);
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();
}
}

@Override
public List<Application> getApplications(final Sid accountSid) {
final SqlSession session = sessions.openSession();
Expand All @@ -141,6 +172,24 @@ public List<Application> getApplications(final Sid accountSid) {
}
}

// Issue 2615
@Override
public List<Application> getApplications(ApplicationFilter filter) {
final SqlSession session = sessions.openSession();
try {
final List<Map<String, Object>> results = session.selectList(namespace + "getApplicationsUsingFilters", filter);
final List<Application> applications = new ArrayList<Application>();
if (results != null && !results.isEmpty()) {
for (final Map<String, Object> result : results) {
applications.add(toApplication(result));
}
}
return applications;
} finally {
session.close();
}
}

@Override
public void removeApplication(final Sid sid) {
removeApplications("removeApplication", sid);
Expand Down
33 changes: 32 additions & 1 deletion restcomm/restcomm.dao/src/test/resources/applications.xml
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,37 @@
ORDER BY "app"."date_created", "app"."sid";
</select>

<select id="getApplicationsUsingFilters" parameterType="org.restcomm.connect.dao.entities.ApplicationFilter" resultType="hashmap">
SELECT * FROM "restcomm_applications" WHERE ("account_sid"=#{accountSid} or "account_sid" is null)
<if test="friendlyName != null">
AND friendly_name=#{friendlyName}
</if>
</select>

<select id="getApplicationsAndNumbersUsingFilters" parameterType="org.restcomm.connect.dao.entities.ApplicationFilter" resultType="hashmap">
SELECT
"app".*,
"num"."sid" "num_sid",
"num"."friendly_name" "num_friendly_name",
"num"."phone_number" "num_phone_number",
"num"."voice_application_sid" "num_voice_application_sid",
"num"."sms_application_sid" "num_sms_application_sid",
"num"."ussd_application_sid" "num_ussd_application_sid",
"num"."refer_application_sid" "num_refer_application_sid"
FROM "restcomm_applications" "app"
LEFT OUTER JOIN (
SELECT * from "restcomm_incoming_phone_numbers" "nums" WHERE "nums"."account_sid"=#{accountSid}
) "num"
ON "num"."voice_application_sid" = "app"."sid"
OR "num"."sms_application_sid" = "app"."sid"
OR "num"."ussd_application_sid" = "app"."sid"
OR "num"."refer_application_sid" = "app"."sid"
WHERE ("app"."account_sid"=#{accountSid} or "app"."account_sid" is null)
<if test="friendlyName != null">
AND "app"."friendly_name"=#{friendlyName}
</if>
ORDER BY "app"."date_created", "app"."sid";
</select>

<delete id="removeApplication" parameterType="string">
DELETE FROM "restcomm_applications" WHERE "sid"=#{sid};
Expand All @@ -79,4 +110,4 @@
"voice_caller_id_lookup"=#{voice_caller_id_lookup}, "rcml_url"=#{rcml_url}, "kind"=#{kind}
WHERE "sid"=#{sid};
</update>
</mapper>
</mapper>
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,37 @@
ORDER BY "app"."date_created", "app"."sid";
</select>

<select id="getApplicationsUsingFilters" parameterType="org.restcomm.connect.dao.entities.ApplicationFilter" resultType="hashmap">
SELECT * FROM "restcomm_applications" WHERE ("account_sid"=#{accountSid} or "account_sid" is null)
<if test="friendlyName != null">
AND friendly_name=#{friendlyName}
</if>
</select>

<select id="getApplicationsAndNumbersUsingFilters" parameterType="org.restcomm.connect.dao.entities.ApplicationFilter" resultType="hashmap">
SELECT
"app".*,
"num"."sid" "num_sid",
"num"."friendly_name" "num_friendly_name",
"num"."phone_number" "num_phone_number",
"num"."voice_application_sid" "num_voice_application_sid",
"num"."sms_application_sid" "num_sms_application_sid",
"num"."ussd_application_sid" "num_ussd_application_sid",
"num"."refer_application_sid" "num_refer_application_sid"
FROM "restcomm_applications" "app"
LEFT OUTER JOIN (
SELECT * from "restcomm_incoming_phone_numbers" "nums" WHERE "nums"."account_sid"=#{accountSid}
) "num"
ON "num"."voice_application_sid" = "app"."sid"
OR "num"."sms_application_sid" = "app"."sid"
OR "num"."ussd_application_sid" = "app"."sid"
OR "num"."refer_application_sid" = "app"."sid"
WHERE ("app"."account_sid"=#{accountSid} or "app"."account_sid" is null)
<if test="friendlyName != null">
AND "app"."friendly_name"=#{friendlyName}
</if>
ORDER BY "app"."date_created", "app"."sid";
</select>

<delete id="removeApplication" parameterType="string">
DELETE FROM "restcomm_applications" WHERE "sid"=#{sid};
Expand All @@ -79,4 +110,4 @@
"voice_caller_id_lookup"=#{voice_caller_id_lookup}, "rcml_url"=#{rcml_url}, "kind"=#{kind}
WHERE "sid"=#{sid};
</update>
</mapper>
</mapper>
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.thoughtworks.xstream.XStream;

import org.apache.commons.configuration.Configuration;
import org.restcomm.connect.commons.annotations.concurrency.NotThreadSafe;
import org.restcomm.connect.commons.dao.Sid;
Expand All @@ -33,6 +34,7 @@
import org.restcomm.connect.dao.DaoManager;
import org.restcomm.connect.dao.entities.Account;
import org.restcomm.connect.dao.entities.Application;
import org.restcomm.connect.dao.entities.ApplicationFilter;
import org.restcomm.connect.dao.entities.ApplicationList;
import org.restcomm.connect.dao.entities.ApplicationNumberSummary;
import org.restcomm.connect.dao.entities.RestCommResponse;
Expand Down Expand Up @@ -155,13 +157,18 @@ protected Response getApplications(final String accountSid, final MediaType resp
Account account;
account = accountsDao.getAccount(accountSid);
secure(account, "RestComm:Read:Applications", SecuredType.SECURED_APP);

// shall we also return number information with the application ?
boolean includeNumbers = false;
String tmp = uriInfo.getQueryParameters().getFirst("includeNumbers");
if (tmp != null && tmp.equalsIgnoreCase("true"))
includeNumbers = true;

final List<Application> applications = dao.getApplicationsWithNumbers(account.getSid());
String friendlyName = uriInfo.getQueryParameters().getFirst("FriendlyName");

ApplicationFilter filter = new ApplicationFilter(account.getSid().toString(), friendlyName);

final List<Application> applications = dao.getApplicationsWithNumbers(filter);
if (APPLICATION_XML_TYPE == responseType) {
final RestCommResponse response = new RestCommResponse(new ApplicationList(applications));
return ok(xstream.toXML(response), APPLICATION_XML).build();
Expand Down
Loading