Skip to content

Commit 77cf5b8

Browse files
RESTCOMM-2064: Add ExtensionContext interface. Decorate ExtensionController with ExtensionContext. Implement getEffectiveConfiguration in impl. Add init to ExtensionController to initialize ServletContext.
1 parent 082d788 commit 77cf5b8

3 files changed

Lines changed: 76 additions & 1 deletion

File tree

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/*
2+
* TeleStax, Open Source Cloud Communications
3+
* Copyright 2011-2013, Telestax Inc and individual contributors
4+
* by the @authors tag.
5+
*
6+
* This is free software; you can redistribute it and/or modify it
7+
* under the terms of the GNU Lesser General Public License as
8+
* published by the Free Software Foundation; either version 2.1 of
9+
* the License, or (at your option) any later version.
10+
*
11+
* This software is distributed in the hope that it will be useful,
12+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14+
* Lesser General Public License for more details.
15+
*
16+
* You should have received a copy of the GNU Lesser General Public
17+
* License along with this software; if not, write to the Free
18+
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
19+
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
20+
*/
21+
package org.restcomm.connect.extension.api;
22+
23+
public interface ExtensionContext {
24+
ExtensionConfiguration getEffectiveConfiguration(String extensionSid, String scopeSid);
25+
}

restcomm/restcomm.extension.controller/src/main/java/org/restcomm/connect/extension/controller/ExtensionBootstrapper.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
*/
2121
package org.restcomm.connect.extension.controller;
2222

23+
import org.restcomm.connect.extension.api.ExtensionContext;
2324
import org.restcomm.connect.extension.api.RestcommExtensionGeneric;
2425
import org.apache.commons.configuration.Configuration;
2526
import org.apache.commons.configuration.HierarchicalConfiguration;
@@ -43,6 +44,8 @@ public class ExtensionBootstrapper {
4344
public ExtensionBootstrapper(final ServletContext context, final Configuration configuration) {
4445
this.configuration = configuration;
4546
this.context = context;
47+
this.context.setAttribute(ExtensionContext.class.getName(), ExtensionController.getInstance());
48+
ExtensionController.getInstance().init(this.context);
4649
}
4750

4851
public void start() throws ClassNotFoundException, IllegalAccessException, InstantiationException {

restcomm/restcomm.extension.controller/src/main/java/org/restcomm/connect/extension/controller/ExtensionController.java

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,19 @@
11
package org.restcomm.connect.extension.controller;
22

3+
import org.restcomm.connect.commons.dao.Sid;
4+
import org.restcomm.connect.dao.AccountsDao;
5+
import org.restcomm.connect.dao.ClientsDao;
6+
import org.restcomm.connect.dao.DaoManager;
7+
import org.restcomm.connect.dao.ExtensionsConfigurationDao;
8+
import org.restcomm.connect.dao.OrganizationsDao;
9+
import org.restcomm.connect.dao.entities.Account;
10+
import org.restcomm.connect.dao.entities.Client;
11+
import org.restcomm.connect.dao.entities.Organization;
312
import org.restcomm.connect.extension.api.ApiRequest;
13+
import org.restcomm.connect.extension.api.ExtensionConfiguration;
414
import org.restcomm.connect.extension.api.ExtensionResponse;
515
import org.restcomm.connect.extension.api.ExtensionType;
16+
import org.restcomm.connect.extension.api.ExtensionContext;
617
import org.restcomm.connect.extension.api.IExtensionRequest;
718
import org.restcomm.connect.extension.api.RestcommExtension;
819
import org.restcomm.connect.extension.api.RestcommExtensionGeneric;
@@ -11,10 +22,12 @@
1122
import java.util.List;
1223
import java.util.concurrent.CopyOnWriteArrayList;
1324

25+
import javax.servlet.ServletContext;
26+
1427
/**
1528
* Created by gvagenas on 21/09/16.
1629
*/
17-
public class ExtensionController {
30+
public class ExtensionController implements ExtensionContext{
1831
private static Logger logger = Logger.getLogger(ExtensionController.class);
1932

2033
private static ExtensionController instance;
@@ -24,6 +37,10 @@ public class ExtensionController {
2437
private List restApiExtensions;
2538
private List featureAccessControlExtensions;
2639

40+
private DaoManager daoManager;
41+
42+
private ServletContext context;
43+
2744
private ExtensionController(){
2845
this.callManagerExtensions = new CopyOnWriteArrayList();
2946
this.smsSessionExtensions = new CopyOnWriteArrayList();
@@ -32,6 +49,11 @@ private ExtensionController(){
3249
this.featureAccessControlExtensions = new CopyOnWriteArrayList();
3350
}
3451

52+
public void init(ServletContext context) {
53+
this.context = context;
54+
daoManager = (DaoManager)context.getAttribute(DaoManager.class.getName());
55+
}
56+
3557
public static ExtensionController getInstance() {
3658
if (instance == null) {
3759
instance = new ExtensionController();
@@ -282,4 +304,29 @@ public ExtensionResponse executePostApiAction(final ApiRequest apiRequest, List<
282304
}
283305
return response;
284306
}
307+
308+
@Override
309+
public ExtensionConfiguration getEffectiveConfiguration(String extensionSid, String scopeSid) {
310+
ExtensionsConfigurationDao ecd = daoManager.getExtensionsConfigurationDao();
311+
ClientsDao cd = daoManager.getClientsDao();
312+
AccountsDao ad = daoManager.getAccountsDao();
313+
OrganizationsDao od = daoManager.getOrganizationsDao();
314+
ExtensionConfiguration extCfg = ecd.getAccountExtensionConfiguration(scopeSid, extensionSid);
315+
316+
Sid sid = new Sid(scopeSid);
317+
Client client = cd.getClient(sid);
318+
Account account = ad.getAccount(sid);
319+
Organization organization = od.getOrganization(sid);
320+
321+
//check parent
322+
323+
//check org
324+
325+
//check default
326+
if(extCfg==null) {
327+
//if no account specific entry is defined, we use the extension config
328+
extCfg = ecd.getConfigurationBySid(new Sid(extensionSid));
329+
}
330+
return extCfg;
331+
}
285332
}

0 commit comments

Comments
 (0)