mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
Fiz merge conflicts
This commit is contained in:
commit
8841741567
@ -1,18 +1,17 @@
|
|||||||
image: maven:latest
|
image: shinyay/docker-mvn-jdk8:3.5.0
|
||||||
|
|
||||||
variables:
|
variables:
|
||||||
MAVEN_CLI_OPTS: "-s .m2/settings.xml --batch-mode"
|
MAVEN_CLI_OPTS: "-s .m2/settings.xml --batch-mode --errors --show-version"
|
||||||
MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"
|
MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"
|
||||||
|
|
||||||
cache:
|
cache:
|
||||||
paths:
|
paths:
|
||||||
- .m2/repository/
|
- .m2/repository/
|
||||||
- target/
|
|
||||||
|
|
||||||
build:
|
build:
|
||||||
stage: build
|
stage: build
|
||||||
script:
|
script:
|
||||||
- mvn $MAVEN_CLI_OPTS compile
|
- mvn $MAVEN_CLI_OPTS clean install -Dmaven.test.skip=true
|
||||||
|
|
||||||
test:
|
test:
|
||||||
stage: test
|
stage: test
|
||||||
|
|||||||
@ -22,13 +22,13 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>apimgt-extensions</artifactId>
|
<artifactId>apimgt-extensions</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>org.wso2.carbon.apimgt.annotations</artifactId>
|
<artifactId>org.wso2.carbon.apimgt.annotations</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<packaging>bundle</packaging>
|
<packaging>bundle</packaging>
|
||||||
<name>WSO2 Carbon - API Management Annotations</name>
|
<name>WSO2 Carbon - API Management Annotations</name>
|
||||||
<description>WSO2 Carbon - API Management Custom Annotation Module</description>
|
<description>WSO2 Carbon - API Management Custom Annotation Module</description>
|
||||||
|
|||||||
@ -21,12 +21,12 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>apimgt-extensions</artifactId>
|
<artifactId>apimgt-extensions</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<artifactId>org.wso2.carbon.apimgt.application.extension.api</artifactId>
|
<artifactId>org.wso2.carbon.apimgt.application.extension.api</artifactId>
|
||||||
<packaging>war</packaging>
|
<packaging>war</packaging>
|
||||||
<name>WSO2 Carbon - API Application Management API</name>
|
<name>WSO2 Carbon - API Application Management API</name>
|
||||||
|
|||||||
@ -22,12 +22,12 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>apimgt-extensions</artifactId>
|
<artifactId>apimgt-extensions</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<artifactId>org.wso2.carbon.apimgt.application.extension</artifactId>
|
<artifactId>org.wso2.carbon.apimgt.application.extension</artifactId>
|
||||||
<packaging>bundle</packaging>
|
<packaging>bundle</packaging>
|
||||||
<name>WSO2 Carbon - API Application Management</name>
|
<name>WSO2 Carbon - API Application Management</name>
|
||||||
|
|||||||
@ -21,13 +21,13 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>apimgt-extensions</artifactId>
|
<artifactId>apimgt-extensions</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>org.wso2.carbon.apimgt.handlers</artifactId>
|
<artifactId>org.wso2.carbon.apimgt.handlers</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<packaging>bundle</packaging>
|
<packaging>bundle</packaging>
|
||||||
<name>WSO2 Carbon - API Security Handler Component</name>
|
<name>WSO2 Carbon - API Security Handler Component</name>
|
||||||
<description>WSO2 Carbon - API Management Security Handler Module</description>
|
<description>WSO2 Carbon - API Management Security Handler Module</description>
|
||||||
|
|||||||
@ -13,13 +13,13 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>apimgt-extensions</artifactId>
|
<artifactId>apimgt-extensions</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>org.wso2.carbon.apimgt.integration.client</artifactId>
|
<artifactId>org.wso2.carbon.apimgt.integration.client</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<packaging>bundle</packaging>
|
<packaging>bundle</packaging>
|
||||||
<name>WSO2 Carbon - API Management Integration Client</name>
|
<name>WSO2 Carbon - API Management Integration Client</name>
|
||||||
<description>WSO2 Carbon - API Management Integration Client</description>
|
<description>WSO2 Carbon - API Management Integration Client</description>
|
||||||
|
|||||||
@ -13,13 +13,13 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>apimgt-extensions</artifactId>
|
<artifactId>apimgt-extensions</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>org.wso2.carbon.apimgt.integration.generated.client</artifactId>
|
<artifactId>org.wso2.carbon.apimgt.integration.generated.client</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<packaging>bundle</packaging>
|
<packaging>bundle</packaging>
|
||||||
<name>WSO2 Carbon - API Management Integration Generated Client</name>
|
<name>WSO2 Carbon - API Management Integration Generated Client</name>
|
||||||
<description>WSO2 Carbon - API Management Integration Client</description>
|
<description>WSO2 Carbon - API Management Integration Client</description>
|
||||||
|
|||||||
@ -22,13 +22,13 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>apimgt-extensions</artifactId>
|
<artifactId>apimgt-extensions</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>org.wso2.carbon.apimgt.webapp.publisher</artifactId>
|
<artifactId>org.wso2.carbon.apimgt.webapp.publisher</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<packaging>bundle</packaging>
|
<packaging>bundle</packaging>
|
||||||
<name>WSO2 Carbon - API Management Webapp Publisher</name>
|
<name>WSO2 Carbon - API Management Webapp Publisher</name>
|
||||||
<description>WSO2 Carbon - API Management Webapp Publisher</description>
|
<description>WSO2 Carbon - API Management Webapp Publisher</description>
|
||||||
|
|||||||
@ -22,13 +22,13 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>carbon-devicemgt</artifactId>
|
<artifactId>carbon-devicemgt</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>apimgt-extensions</artifactId>
|
<artifactId>apimgt-extensions</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
<name>WSO2 Carbon - API Management Extensions Component</name>
|
<name>WSO2 Carbon - API Management Extensions Component</name>
|
||||||
<url>http://wso2.org</url>
|
<url>http://wso2.org</url>
|
||||||
|
|||||||
@ -45,7 +45,7 @@ public class Application {
|
|||||||
@ApiModelProperty(name = "type",
|
@ApiModelProperty(name = "type",
|
||||||
value = "Type of the application",
|
value = "Type of the application",
|
||||||
required = true,
|
required = true,
|
||||||
example = "Mobile, Web, Web Clip etc")
|
example = "ENTERPRISE, PUBLIC, WEB, WEB_CLIP etc")
|
||||||
private String type;
|
private String type;
|
||||||
|
|
||||||
@ApiModelProperty(name = "subType",
|
@ApiModelProperty(name = "subType",
|
||||||
|
|||||||
@ -111,9 +111,8 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
|||||||
List<ApplicationRelease> applicationReleases = new ArrayList<>();
|
List<ApplicationRelease> applicationReleases = new ArrayList<>();
|
||||||
try {
|
try {
|
||||||
ConnectionManagerUtil.beginDBTransaction();
|
ConnectionManagerUtil.beginDBTransaction();
|
||||||
MAMDeviceConnectorImpl mamDeviceConnector = new MAMDeviceConnectorImpl();
|
|
||||||
// Getting the device type details to get device type ID for internal mappings
|
// Getting the device type details to get device type ID for internal mappings
|
||||||
deviceType = mamDeviceConnector.getDeviceManagementService().getDeviceType(application.getDeviceType());
|
deviceType = Util.getDeviceManagementService().getDeviceType(application.getDeviceType());
|
||||||
|
|
||||||
if (deviceType == null) {
|
if (deviceType == null) {
|
||||||
log.error("Device type is not matched with application type");
|
log.error("Device type is not matched with application type");
|
||||||
@ -836,7 +835,6 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
|||||||
try {
|
try {
|
||||||
ConnectionManagerUtil.openDBConnection();
|
ConnectionManagerUtil.openDBConnection();
|
||||||
applicationRelease = getAppReleaseIfExists(appId, uuid);
|
applicationRelease = getAppReleaseIfExists(appId, uuid);
|
||||||
|
|
||||||
Application application = getApplicationById(appId, null);
|
Application application = getApplicationById(appId, null);
|
||||||
|
|
||||||
List<DeviceType> deviceTypes = Util.getDeviceManagementService().getDeviceTypes();
|
List<DeviceType> deviceTypes = Util.getDeviceManagementService().getDeviceTypes();
|
||||||
@ -923,8 +921,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
|||||||
+ releaseUuid);
|
+ releaseUuid);
|
||||||
|
|
||||||
}
|
}
|
||||||
lifecycleState.setNextStates(new ArrayList<>(getLifecycleManagementService().
|
lifecycleState.setNextStates(new ArrayList<>(lifecycleStateManger.getNextLifecycleStates(lifecycleState.getCurrentState())));
|
||||||
getNextLifecycleStates(lifecycleState.getCurrentState())));
|
|
||||||
|
|
||||||
} catch (ApplicationManagementException e) {
|
} catch (ApplicationManagementException e) {
|
||||||
throw new ApplicationManagementException("Failed to get application and application management", e);
|
throw new ApplicationManagementException("Failed to get application and application management", e);
|
||||||
@ -964,8 +961,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
|||||||
state.setUpdatedBy(userName);
|
state.setUpdatedBy(userName);
|
||||||
|
|
||||||
if (state.getCurrentState() != null && state.getPreviousState() != null) {
|
if (state.getCurrentState() != null && state.getPreviousState() != null) {
|
||||||
if (getLifecycleManagementService()
|
if (lifecycleStateManger.isValidStateChange(state.getPreviousState(), state.getCurrentState())) {
|
||||||
.isValidStateChange(state.getPreviousState(), state.getCurrentState())) {
|
|
||||||
//todo if current state of the adding lifecycle state is PUBLISHED, need to check whether is there
|
//todo if current state of the adding lifecycle state is PUBLISHED, need to check whether is there
|
||||||
//todo any other application release in PUBLISHED state for the application( i.e for the appid)
|
//todo any other application release in PUBLISHED state for the application( i.e for the appid)
|
||||||
this.lifecycleStateDAO.addLifecycleState(state, applicationId, releaseUuid, tenantId);
|
this.lifecycleStateDAO.addLifecycleState(state, applicationId, releaseUuid, tenantId);
|
||||||
@ -1088,15 +1084,4 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LifecycleStateManger getLifecycleManagementService() {
|
|
||||||
PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
|
|
||||||
LifecycleStateManger deviceManagementProviderService =
|
|
||||||
(LifecycleStateManger) ctx.getOSGiService(LifecycleStateManger.class, null);
|
|
||||||
if (deviceManagementProviderService == null) {
|
|
||||||
String msg = "DeviceImpl Management provider service has not initialized.";
|
|
||||||
log.error(msg);
|
|
||||||
throw new IllegalStateException(msg);
|
|
||||||
}
|
|
||||||
return deviceManagementProviderService;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -68,6 +68,7 @@ class Base extends Component {
|
|||||||
|
|
||||||
render() {
|
render() {
|
||||||
if (this.state.user !== null) {
|
if (this.state.user !== null) {
|
||||||
|
console.log(sessionStorage);
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<BaseLayout user={this.state.user}>
|
<BaseLayout user={this.state.user}>
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>certificate-mgt</artifactId>
|
<artifactId>certificate-mgt</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>certificate-mgt</artifactId>
|
<artifactId>certificate-mgt</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
@ -24,7 +24,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>certificate-mgt</artifactId>
|
<artifactId>certificate-mgt</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
@ -21,13 +21,13 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>certificate-mgt</artifactId>
|
<artifactId>certificate-mgt</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>org.wso2.carbon.certificate.mgt.core</artifactId>
|
<artifactId>org.wso2.carbon.certificate.mgt.core</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<packaging>bundle</packaging>
|
<packaging>bundle</packaging>
|
||||||
<name>WSO2 Carbon - Certificate Management Core</name>
|
<name>WSO2 Carbon - Certificate Management Core</name>
|
||||||
<description>WSO2 Carbon - Certificate Management Core</description>
|
<description>WSO2 Carbon - Certificate Management Core</description>
|
||||||
|
|||||||
@ -24,7 +24,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>certificate-mgt</artifactId>
|
<artifactId>certificate-mgt</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
@ -22,14 +22,14 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>carbon-devicemgt</artifactId>
|
<artifactId>carbon-devicemgt</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>certificate-mgt</artifactId>
|
<artifactId>certificate-mgt</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
<name>WSO2 Carbon - Certificate Management Component</name>
|
<name>WSO2 Carbon - Certificate Management Component</name>
|
||||||
<url>http://wso2.org</url>
|
<url>http://wso2.org</url>
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>device-mgt-extensions</artifactId>
|
<artifactId>device-mgt-extensions</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>device-mgt-extensions</artifactId>
|
<artifactId>device-mgt-extensions</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>device-mgt-extensions</artifactId>
|
<artifactId>device-mgt-extensions</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>device-mgt-extensions</artifactId>
|
<artifactId>device-mgt-extensions</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>device-mgt-extensions</artifactId>
|
<artifactId>device-mgt-extensions</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>device-mgt-extensions</artifactId>
|
<artifactId>device-mgt-extensions</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>carbon-devicemgt</artifactId>
|
<artifactId>carbon-devicemgt</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>device-mgt</artifactId>
|
<artifactId>device-mgt</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
@ -20,7 +20,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>device-mgt</artifactId>
|
<artifactId>device-mgt</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@ -49,7 +49,7 @@ public class SubscriptionEndpoint {
|
|||||||
*
|
*
|
||||||
* @param session - Users registered session.
|
* @param session - Users registered session.
|
||||||
*/
|
*/
|
||||||
public void onOpen(Session session) {
|
void onOpen(Session session) {
|
||||||
if (log.isDebugEnabled()) {
|
if (log.isDebugEnabled()) {
|
||||||
log.debug("WebSocket opened, for Session id: " + session.getId());
|
log.debug("WebSocket opened, for Session id: " + session.getId());
|
||||||
}
|
}
|
||||||
@ -68,8 +68,7 @@ public class SubscriptionEndpoint {
|
|||||||
endpoint += "/";
|
endpoint += "/";
|
||||||
}
|
}
|
||||||
endpoint += session.getRequestURI().getSchemeSpecificPart().replace("secured-websocket-proxy","");
|
endpoint += session.getRequestURI().getSchemeSpecificPart().replace("secured-websocket-proxy","");
|
||||||
AnalyticsClient analyticsClient = new AnalyticsClient(session);
|
AnalyticsClient analyticsClient = new AnalyticsClient(session, new URI(endpoint));
|
||||||
analyticsClient.connectClient(new URI(endpoint));
|
|
||||||
analyticsClients.add(analyticsClient);
|
analyticsClients.add(analyticsClient);
|
||||||
} catch (URISyntaxException e) {
|
} catch (URISyntaxException e) {
|
||||||
log.error("Unable to create URL from: " + endpoint, e);
|
log.error("Unable to create URL from: " + endpoint, e);
|
||||||
@ -121,7 +120,7 @@ public class SubscriptionEndpoint {
|
|||||||
* @param session - Users registered session.
|
* @param session - Users registered session.
|
||||||
* @param message - Status code for web-socket close.
|
* @param message - Status code for web-socket close.
|
||||||
*/
|
*/
|
||||||
public void onMessage(Session session, String message) {
|
void onMessage(Session session, String message) {
|
||||||
for (AnalyticsClient analyticsClient : analyticsClientsMap.get(session.getId())) {
|
for (AnalyticsClient analyticsClient : analyticsClientsMap.get(session.getId())) {
|
||||||
if (analyticsClient != null) {
|
if (analyticsClient != null) {
|
||||||
analyticsClient.sendMessage(message);
|
analyticsClient.sendMessage(message);
|
||||||
|
|||||||
@ -42,24 +42,18 @@ public class AnalyticsClient {
|
|||||||
|
|
||||||
private static final Log log = LogFactory.getLog(AnalyticsClient.class);
|
private static final Log log = LogFactory.getLog(AnalyticsClient.class);
|
||||||
|
|
||||||
private WebSocketContainer container;
|
private final Session analyticsSession;
|
||||||
private Session analyticsSession = null;
|
private final Session clientSession;
|
||||||
private Session clientSession;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create {@link AnalyticsClient} instance.
|
* Create {@link AnalyticsClient} instance.
|
||||||
*/
|
*/
|
||||||
public AnalyticsClient(Session clientSession) {
|
public AnalyticsClient(Session clientSession, URI endpointURI) throws WSProxyException {
|
||||||
container = ContainerProvider.getWebSocketContainer();
|
WebSocketContainer container = ContainerProvider.getWebSocketContainer();
|
||||||
this.clientSession = clientSession;
|
this.clientSession = clientSession;
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create web socket client connection using {@link WebSocketContainer}.
|
|
||||||
*/
|
|
||||||
public void connectClient(URI endpointURI) throws WSProxyException {
|
|
||||||
try {
|
try {
|
||||||
analyticsSession = container.connectToServer(this, endpointURI);
|
this.analyticsSession = container.connectToServer(this, endpointURI);
|
||||||
} catch (DeploymentException | IOException e) {
|
} catch (DeploymentException | IOException e) {
|
||||||
String msg = "Error occurred while connecting to remote endpoint " + endpointURI.toString();
|
String msg = "Error occurred while connecting to remote endpoint " + endpointURI.toString();
|
||||||
log.error(msg, e);
|
log.error(msg, e);
|
||||||
@ -79,7 +73,6 @@ public class AnalyticsClient {
|
|||||||
log.debug("Closing web socket session: '" + userSession.getId() + "'. Code: " +
|
log.debug("Closing web socket session: '" + userSession.getId() + "'. Code: " +
|
||||||
reason.getCloseCode().toString() + " Reason: " + reason.getReasonPhrase());
|
reason.getCloseCode().toString() + " Reason: " + reason.getReasonPhrase());
|
||||||
}
|
}
|
||||||
this.analyticsSession = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -91,7 +84,16 @@ public class AnalyticsClient {
|
|||||||
*/
|
*/
|
||||||
@OnMessage
|
@OnMessage
|
||||||
public void onMessage(String message) {
|
public void onMessage(String message) {
|
||||||
this.clientSession.getAsyncRemote().sendText(message);
|
synchronized (this.clientSession) {
|
||||||
|
try {
|
||||||
|
this.clientSession.getBasicRemote().sendText(message);
|
||||||
|
} catch (IOException e) {
|
||||||
|
log.warn("Sending message to client failed due to " + e.getMessage());
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Full stack trace:", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -100,14 +102,23 @@ public class AnalyticsClient {
|
|||||||
* @param message the message which is going to send.
|
* @param message the message which is going to send.
|
||||||
*/
|
*/
|
||||||
public void sendMessage(String message) {
|
public void sendMessage(String message) {
|
||||||
this.analyticsSession.getAsyncRemote().sendText(message);
|
synchronized (this.analyticsSession) {
|
||||||
|
try {
|
||||||
|
this.analyticsSession.getBasicRemote().sendText(message);
|
||||||
|
} catch (IOException e) {
|
||||||
|
log.warn("Sending message to analytics failed due to " + e.getMessage());
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Full stack trace:", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Close current connection.
|
* Close current connection.
|
||||||
*/
|
*/
|
||||||
public void closeConnection(CloseReason closeReason) throws WSProxyException {
|
public void closeConnection(CloseReason closeReason) throws WSProxyException {
|
||||||
if (this.analyticsSession != null) {
|
if (this.analyticsSession.isOpen()) {
|
||||||
try {
|
try {
|
||||||
this.analyticsSession.close(closeReason);
|
this.analyticsSession.close(closeReason);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
@ -115,6 +126,8 @@ public class AnalyticsClient {
|
|||||||
log.error(msg, e);
|
log.error(msg, e);
|
||||||
throw new WSProxyException(msg, e);
|
throw new WSProxyException(msg, e);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
log.warn("Analytics session '" + this.analyticsSession.getId() + "' is already closed");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>device-mgt</artifactId>
|
<artifactId>device-mgt</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
@ -529,6 +529,92 @@ public interface UserManagementService {
|
|||||||
defaultValue = "5")
|
defaultValue = "5")
|
||||||
@QueryParam("limit") int limit);
|
@QueryParam("limit") int limit);
|
||||||
|
|
||||||
|
@GET
|
||||||
|
@Path(("/search"))
|
||||||
|
@ApiOperation(
|
||||||
|
produces = MediaType.APPLICATION_JSON,
|
||||||
|
httpMethod = "GET",
|
||||||
|
value = "Filter details of users based on the given claims",
|
||||||
|
notes = "You are able to manage users in WSO2 IoTS by adding, updating and removing users. If you wish to" +
|
||||||
|
" filter and get a list of users registered with WSO2 IoTS, you can do so using this REST API",
|
||||||
|
tags = "User Management",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = Constants.SCOPE, value = "perm:users:user-details")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@ApiResponses(value = {
|
||||||
|
@ApiResponse(
|
||||||
|
code = 200,
|
||||||
|
message = "OK. \n Successfully fetched the list of users registered with WSO2 IoTS.",
|
||||||
|
response = BasicUserInfoList.class,
|
||||||
|
responseHeaders = {
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Content-Type",
|
||||||
|
description = "The content type of the body"),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "ETag",
|
||||||
|
description = "Entity Tag of the response resource.\n" +
|
||||||
|
"Used by caches, or in conditional requests."),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Last-Modified",
|
||||||
|
description = "Date and time the resource was last modified.\n" +
|
||||||
|
"Used by caches, or in conditional requests."),
|
||||||
|
}),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 304,
|
||||||
|
message = "Not Modified. \n Empty body because the client already has the latest version of " +
|
||||||
|
"the requested resource.\n"),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 406,
|
||||||
|
message = "Not Acceptable.\n The requested media type is not supported",
|
||||||
|
response = ErrorResponse.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 500,
|
||||||
|
message = "Internal Server Error. \n Server error occurred while fetching users.",
|
||||||
|
response = ErrorResponse.class)
|
||||||
|
})
|
||||||
|
Response getUsers(
|
||||||
|
@ApiParam(
|
||||||
|
name = "username",
|
||||||
|
value = "Username of the user",
|
||||||
|
required = false
|
||||||
|
)
|
||||||
|
@QueryParam("username") String username,
|
||||||
|
@ApiParam(
|
||||||
|
name = "firstName",
|
||||||
|
value = "First Name of the user",
|
||||||
|
required = false
|
||||||
|
)
|
||||||
|
@QueryParam("firstName") String firstName,
|
||||||
|
@ApiParam(
|
||||||
|
name = "lastName",
|
||||||
|
value = "Last Name of the user",
|
||||||
|
required = false
|
||||||
|
)
|
||||||
|
@QueryParam("lastName")String lastName,
|
||||||
|
@ApiParam(
|
||||||
|
name = "emailAddress",
|
||||||
|
value = "Email Address of the user",
|
||||||
|
required = false
|
||||||
|
)
|
||||||
|
@QueryParam("emailAddress")String emailAddress,
|
||||||
|
@HeaderParam("If-Modified-Since") String timestamp,
|
||||||
|
@ApiParam(
|
||||||
|
name = "offset",
|
||||||
|
value = "The starting pagination index for the complete list of qualified items.",
|
||||||
|
required = false,
|
||||||
|
defaultValue = "0")
|
||||||
|
@QueryParam("offset") int offset,
|
||||||
|
@ApiParam(
|
||||||
|
name = "limit",
|
||||||
|
value = "Provide how many user details you require from the starting pagination index/offset.",
|
||||||
|
required = false,
|
||||||
|
defaultValue = "5")
|
||||||
|
@QueryParam("limit") int limit
|
||||||
|
);
|
||||||
|
|
||||||
@GET
|
@GET
|
||||||
@Path("/count")
|
@Path("/count")
|
||||||
@ApiOperation(
|
@ApiOperation(
|
||||||
|
|||||||
@ -100,7 +100,7 @@ public class GeoLocationBasedServiceImpl implements GeoLocationBasedService {
|
|||||||
CarbonContext.getThreadLocalCarbonContext().getUsername());
|
CarbonContext.getThreadLocalCarbonContext().getUsername());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
String tenantDomain = MultitenantUtils.getTenantDomain(authorizedUser);
|
String tenantDomain = CarbonContext.getThreadLocalCarbonContext().getTenantDomain();
|
||||||
int tenantId = DeviceMgtAPIUtils.getRealmService().getTenantManager().getTenantId(tenantDomain);
|
int tenantId = DeviceMgtAPIUtils.getRealmService().getTenantManager().getTenantId(tenantDomain);
|
||||||
AnalyticsDataAPI analyticsDataAPI = DeviceMgtAPIUtils.getAnalyticsDataAPI();
|
AnalyticsDataAPI analyticsDataAPI = DeviceMgtAPIUtils.getAnalyticsDataAPI();
|
||||||
List<SearchResultEntry> searchResults = analyticsDataAPI.search(tenantId, tableName, query,
|
List<SearchResultEntry> searchResults = analyticsDataAPI.search(tenantId, tableName, query,
|
||||||
|
|||||||
@ -426,6 +426,104 @@ public class UserManagementServiceImpl implements UserManagementService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GET
|
||||||
|
@Path("/search")
|
||||||
|
@Override
|
||||||
|
public Response getUsers(@QueryParam("username") String username, @QueryParam("firstName") String firstName,
|
||||||
|
@QueryParam("lastName") String lastName, @QueryParam("emailAddress") String emailAddress,
|
||||||
|
@HeaderParam("If-Modified-Since") String timestamp, @QueryParam("offset") int offset,
|
||||||
|
@QueryParam("limit") int limit) {
|
||||||
|
|
||||||
|
if (RequestValidationUtil.isNonFilterRequest(username,firstName, lastName, emailAddress)) {
|
||||||
|
return getUsers(null, timestamp, offset, limit);
|
||||||
|
}
|
||||||
|
|
||||||
|
RequestValidationUtil.validatePaginationParameters(offset, limit);
|
||||||
|
|
||||||
|
if(log.isDebugEnabled()) {
|
||||||
|
log.debug("Filtering users - filter: {username: " + username +", firstName: " + firstName + ", lastName: "
|
||||||
|
+ lastName + ", emailAddress: " + emailAddress + "}");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (limit == 0) {
|
||||||
|
limit = Constants.DEFAULT_PAGE_LIMIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<BasicUserInfo> filteredUserList = new ArrayList<>();
|
||||||
|
List<String> commonUsers = null, tempList;
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (StringUtils.isNotEmpty(username)) {
|
||||||
|
commonUsers = getUserList(null, username);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!skipSearch(commonUsers) && StringUtils.isNotEmpty(firstName)) {
|
||||||
|
tempList = getUserList(Constants.USER_CLAIM_FIRST_NAME, firstName);
|
||||||
|
if (commonUsers == null) {
|
||||||
|
commonUsers = tempList;
|
||||||
|
} else {
|
||||||
|
commonUsers.retainAll(tempList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!skipSearch(commonUsers) && StringUtils.isNotEmpty(lastName)) {
|
||||||
|
tempList = getUserList(Constants.USER_CLAIM_LAST_NAME, lastName);
|
||||||
|
if (commonUsers == null || commonUsers.size() == 0) {
|
||||||
|
commonUsers = tempList;
|
||||||
|
} else {
|
||||||
|
commonUsers.retainAll(tempList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!skipSearch(commonUsers) && StringUtils.isNotEmpty(emailAddress)) {
|
||||||
|
tempList = getUserList(Constants.USER_CLAIM_EMAIL_ADDRESS, emailAddress);
|
||||||
|
if (commonUsers == null || commonUsers.size() == 0) {
|
||||||
|
commonUsers = tempList;
|
||||||
|
} else {
|
||||||
|
commonUsers.retainAll(tempList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BasicUserInfo basicUserInfo;
|
||||||
|
if (commonUsers != null) {
|
||||||
|
for (String user : commonUsers) {
|
||||||
|
basicUserInfo = new BasicUserInfo();
|
||||||
|
basicUserInfo.setUsername(user);
|
||||||
|
basicUserInfo.setEmailAddress(getClaimValue(user, Constants.USER_CLAIM_EMAIL_ADDRESS));
|
||||||
|
basicUserInfo.setFirstname(getClaimValue(user, Constants.USER_CLAIM_FIRST_NAME));
|
||||||
|
basicUserInfo.setLastname(getClaimValue(user, Constants.USER_CLAIM_LAST_NAME));
|
||||||
|
filteredUserList.add(basicUserInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int toIndex = offset + limit;
|
||||||
|
int listSize = filteredUserList.size();
|
||||||
|
int lastIndex = listSize - 1;
|
||||||
|
|
||||||
|
List<BasicUserInfo> offsetList;
|
||||||
|
if (offset <= lastIndex) {
|
||||||
|
if (toIndex <= listSize) {
|
||||||
|
offsetList = filteredUserList.subList(offset, toIndex);
|
||||||
|
} else {
|
||||||
|
offsetList = filteredUserList.subList(offset, listSize);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
offsetList = new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
BasicUserInfoList result = new BasicUserInfoList();
|
||||||
|
result.setList(offsetList);
|
||||||
|
result.setCount(commonUsers != null ? commonUsers.size() : 0);
|
||||||
|
|
||||||
|
return Response.status(Response.Status.OK).entity(result).build();
|
||||||
|
} catch (UserStoreException e) {
|
||||||
|
String msg = "Error occurred while retrieving the list of users.";
|
||||||
|
log.error(msg, e);
|
||||||
|
return Response.serverError().entity(
|
||||||
|
new ErrorResponse.ErrorResponseBuilder().setMessage(msg).build()).build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@GET
|
@GET
|
||||||
@Path("/count")
|
@Path("/count")
|
||||||
@Override
|
@Override
|
||||||
@ -700,4 +798,47 @@ public class UserManagementServiceImpl implements UserManagementService {
|
|||||||
return DeviceManagementConstants.EmailAttributes.DEFAULT_ENROLLMENT_TEMPLATE;
|
return DeviceManagementConstants.EmailAttributes.DEFAULT_ENROLLMENT_TEMPLATE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Searches users which matches a given filter based on a claim
|
||||||
|
*
|
||||||
|
* @param claim the claim value to apply the filter. If <code>null</code> users will be filtered by username.
|
||||||
|
* @param filter the search query.
|
||||||
|
* @return <code>List<String></code> of users which matches.
|
||||||
|
* @throws UserStoreException If unable to search users.
|
||||||
|
*/
|
||||||
|
private ArrayList<String> getUserList(String claim, String filter) throws UserStoreException {
|
||||||
|
String defaultFilter = "*";
|
||||||
|
|
||||||
|
org.wso2.carbon.user.core.UserStoreManager userStoreManager =
|
||||||
|
(org.wso2.carbon.user.core.UserStoreManager) DeviceMgtAPIUtils.getUserStoreManager();
|
||||||
|
|
||||||
|
String appliedFilter = filter + defaultFilter;
|
||||||
|
|
||||||
|
String[] users;
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Searching Users - claim: " + claim + " filter: " + appliedFilter);
|
||||||
|
}
|
||||||
|
if (StringUtils.isEmpty(claim)) {
|
||||||
|
users = userStoreManager.listUsers(appliedFilter, -1);
|
||||||
|
} else {
|
||||||
|
users = userStoreManager.getUserList(claim, appliedFilter, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Returned user count: " + users.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new ArrayList<>(Arrays.asList(users));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User search provides an AND search result and if either of the filter returns an empty set of users, there is no
|
||||||
|
* need to carry on the search further. This method decides whether to carry on the search or not.
|
||||||
|
*
|
||||||
|
* @param commonUsers current filtered user list.
|
||||||
|
* @return <code>true</code> if further search is needed.
|
||||||
|
*/
|
||||||
|
private boolean skipSearch(List<String> commonUsers) {
|
||||||
|
return commonUsers != null && commonUsers.size() == 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,6 +18,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.mgt.jaxrs.service.impl.util;
|
package org.wso2.carbon.device.mgt.jaxrs.service.impl.util;
|
||||||
|
|
||||||
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.wso2.carbon.device.mgt.jaxrs.beans.Scope;
|
import org.wso2.carbon.device.mgt.jaxrs.beans.Scope;
|
||||||
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
|
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
|
||||||
import org.wso2.carbon.device.mgt.common.configuration.mgt.PlatformConfiguration;
|
import org.wso2.carbon.device.mgt.common.configuration.mgt.PlatformConfiguration;
|
||||||
@ -353,4 +354,9 @@ public class RequestValidationUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isNonFilterRequest(String username, String firstName, String lastName, String emailAddress) {
|
||||||
|
return StringUtils.isEmpty(username) && StringUtils.isEmpty(firstName) && StringUtils.isEmpty(lastName)
|
||||||
|
&& StringUtils.isEmpty(emailAddress);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>device-mgt</artifactId>
|
<artifactId>device-mgt</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
@ -37,7 +37,7 @@ public class Operation implements Serializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public enum Status {
|
public enum Status {
|
||||||
IN_PROGRESS, PENDING, COMPLETED, ERROR, REPEATED
|
IN_PROGRESS, PENDING, COMPLETED, ERROR, REPEATED, NOTNOW
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum Control {
|
public enum Control {
|
||||||
|
|||||||
@ -76,6 +76,9 @@ public interface OperationManager {
|
|||||||
*/
|
*/
|
||||||
List<? extends Operation> getPendingOperations(DeviceIdentifier deviceId) throws OperationManagementException;
|
List<? extends Operation> getPendingOperations(DeviceIdentifier deviceId) throws OperationManagementException;
|
||||||
|
|
||||||
|
Operation getNextPendingOperation(DeviceIdentifier deviceId, long notNowOperationFrequency)
|
||||||
|
throws OperationManagementException;
|
||||||
|
|
||||||
Operation getNextPendingOperation(DeviceIdentifier deviceId) throws OperationManagementException;
|
Operation getNextPendingOperation(DeviceIdentifier deviceId) throws OperationManagementException;
|
||||||
|
|
||||||
void updateOperation(DeviceIdentifier deviceId, Operation operation) throws OperationManagementException;
|
void updateOperation(DeviceIdentifier deviceId, Operation operation) throws OperationManagementException;
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>device-mgt</artifactId>
|
<artifactId>device-mgt</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
@ -321,7 +321,7 @@ public class DeviceManagementPluginRepository implements DeviceManagerStartupLis
|
|||||||
getDeviceTaskManagerService();
|
getDeviceTaskManagerService();
|
||||||
OperationMonitoringTaskConfig operationMonitoringTaskConfig = deviceManagementService.
|
OperationMonitoringTaskConfig operationMonitoringTaskConfig = deviceManagementService.
|
||||||
getOperationMonitoringConfig();
|
getOperationMonitoringConfig();
|
||||||
if (operationMonitoringTaskConfig != null) {
|
if (operationMonitoringTaskConfig != null && operationMonitoringTaskConfig.isEnabled()) {
|
||||||
deviceTaskManagerService.stopTask(deviceManagementService.getType(),
|
deviceTaskManagerService.stopTask(deviceManagementService.getType(),
|
||||||
deviceManagementService.getOperationMonitoringConfig());
|
deviceManagementService.getOperationMonitoringConfig());
|
||||||
}
|
}
|
||||||
|
|||||||
@ -23,12 +23,14 @@ import java.util.Properties;
|
|||||||
|
|
||||||
public class Operation implements Serializable {
|
public class Operation implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = -353614864628915060L;
|
||||||
|
|
||||||
public enum Type {
|
public enum Type {
|
||||||
CONFIG, MESSAGE, INFO, COMMAND, PROFILE , POLICY
|
CONFIG, MESSAGE, INFO, COMMAND, PROFILE , POLICY
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum Status {
|
public enum Status {
|
||||||
IN_PROGRESS, PENDING, COMPLETED, ERROR, REPEATED
|
IN_PROGRESS, PENDING, COMPLETED, ERROR, REPEATED, NOTNOW
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum Control {
|
public enum Control {
|
||||||
|
|||||||
@ -51,6 +51,7 @@ import org.wso2.carbon.identity.jwt.client.extension.service.JWTClientManagerSer
|
|||||||
import org.wso2.carbon.registry.api.Registry;
|
import org.wso2.carbon.registry.api.Registry;
|
||||||
import org.wso2.carbon.registry.api.RegistryException;
|
import org.wso2.carbon.registry.api.RegistryException;
|
||||||
import org.wso2.carbon.registry.api.Resource;
|
import org.wso2.carbon.registry.api.Resource;
|
||||||
|
import org.wso2.carbon.stratos.common.util.ClaimsMgtUtil;
|
||||||
|
|
||||||
import javax.net.ssl.KeyManagerFactory;
|
import javax.net.ssl.KeyManagerFactory;
|
||||||
import javax.net.ssl.SSLContext;
|
import javax.net.ssl.SSLContext;
|
||||||
@ -428,6 +429,9 @@ public class GeoLocationProviderServiceImpl implements GeoLocationProviderServic
|
|||||||
} catch (JWTClientException e) {
|
} catch (JWTClientException e) {
|
||||||
throw new GeoLocationBasedServiceException(
|
throw new GeoLocationBasedServiceException(
|
||||||
"JWT token creation failed while " + action + " geo alert '" + alertType, e);
|
"JWT token creation failed while " + action + " geo alert '" + alertType, e);
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new GeoLocationBasedServiceException(
|
||||||
|
"Error occurred while " + action + " geo alert '" + alertType, e);
|
||||||
} finally {
|
} finally {
|
||||||
cleanup(eventprocessorStub);
|
cleanup(eventprocessorStub);
|
||||||
}
|
}
|
||||||
@ -541,6 +545,9 @@ public class GeoLocationProviderServiceImpl implements GeoLocationProviderServic
|
|||||||
throw new GeoLocationBasedServiceException(
|
throw new GeoLocationBasedServiceException(
|
||||||
"JWT token creation failed while " + action + " geo alert '" + alertType + "' for " +
|
"JWT token creation failed while " + action + " geo alert '" + alertType + "' for " +
|
||||||
identifier.getType() + " device with id:" + identifier.getId(), e);
|
identifier.getType() + " device with id:" + identifier.getId(), e);
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new GeoLocationBasedServiceException(
|
||||||
|
"Error occurred while " + action + " geo alert '" + alertType, e);
|
||||||
} finally {
|
} finally {
|
||||||
cleanup(eventprocessorStub);
|
cleanup(eventprocessorStub);
|
||||||
}
|
}
|
||||||
@ -646,6 +653,9 @@ public class GeoLocationProviderServiceImpl implements GeoLocationProviderServic
|
|||||||
executionPlanName + " for " +
|
executionPlanName + " for " +
|
||||||
identifier.getType() + " device with id:" + identifier.getId(), e
|
identifier.getType() + " device with id:" + identifier.getId(), e
|
||||||
);
|
);
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new GeoLocationBasedServiceException(
|
||||||
|
"Error occurred while removing geo alert '" + alertType, e);
|
||||||
} finally {
|
} finally {
|
||||||
cleanup(eventprocessorStub);
|
cleanup(eventprocessorStub);
|
||||||
}
|
}
|
||||||
@ -672,6 +682,9 @@ public class GeoLocationProviderServiceImpl implements GeoLocationProviderServic
|
|||||||
"JWT token creation failed while removing geo alert '" + alertType + "': " +
|
"JWT token creation failed while removing geo alert '" + alertType + "': " +
|
||||||
executionPlanName, e
|
executionPlanName, e
|
||||||
);
|
);
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new GeoLocationBasedServiceException(
|
||||||
|
"Error occurred while removing geo alert '" + alertType, e);
|
||||||
} finally {
|
} finally {
|
||||||
cleanup(eventprocessorStub);
|
cleanup(eventprocessorStub);
|
||||||
}
|
}
|
||||||
@ -702,14 +715,16 @@ public class GeoLocationProviderServiceImpl implements GeoLocationProviderServic
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected EventProcessorAdminServiceStub getEventProcessorAdminServiceStub() throws JWTClientException {
|
protected EventProcessorAdminServiceStub getEventProcessorAdminServiceStub() throws Exception {
|
||||||
//send alert to event-processing
|
//send alert to event-processing
|
||||||
String eventProcessorAdminServiceWSUrl = Utils.replaceSystemProperty(GeoServices.DAS_URL) +
|
String eventProcessorAdminServiceWSUrl = Utils.replaceSystemProperty(GeoServices.DAS_URL) +
|
||||||
"/services/EventProcessorAdminService";
|
"/services/EventProcessorAdminService";
|
||||||
|
|
||||||
//Getting the tenant Domain
|
//Getting the tenant Domain
|
||||||
|
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
|
||||||
String tenantDomain = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantDomain();
|
String tenantDomain = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantDomain();
|
||||||
String username = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername();
|
String username = ClaimsMgtUtil.getAdminUserNameFromTenantId(DeviceManagementDataHolder.getInstance().getRealmService(),
|
||||||
|
tenantId);
|
||||||
String tenantAdminUser = username + "@" + tenantDomain;
|
String tenantAdminUser = username + "@" + tenantDomain;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|||||||
@ -89,7 +89,9 @@ public class DeviceTaskManagerServiceComponent {
|
|||||||
Map<String, OperationMonitoringTaskConfig> deviceConfigMap = DeviceMonitoringOperationDataHolder
|
Map<String, OperationMonitoringTaskConfig> deviceConfigMap = DeviceMonitoringOperationDataHolder
|
||||||
.getInstance().getOperationMonitoringConfigFromMap();
|
.getInstance().getOperationMonitoringConfigFromMap();
|
||||||
for (String platformType : new ArrayList<>(deviceConfigMap.keySet())) {
|
for (String platformType : new ArrayList<>(deviceConfigMap.keySet())) {
|
||||||
deviceTaskManagerService.startTask(platformType, deviceConfigMap.get(platformType));
|
if (deviceConfigMap.get(platformType).isEnabled()){
|
||||||
|
deviceTaskManagerService.startTask(platformType, deviceConfigMap.get(platformType));
|
||||||
|
}
|
||||||
deviceConfigMap.remove(platformType);
|
deviceConfigMap.remove(platformType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -64,6 +64,7 @@ import org.wso2.carbon.device.mgt.core.task.impl.DeviceTaskManagerImpl;
|
|||||||
import org.wso2.carbon.device.mgt.core.util.DeviceManagerUtil;
|
import org.wso2.carbon.device.mgt.core.util.DeviceManagerUtil;
|
||||||
|
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
import java.sql.Timestamp;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@ -251,7 +252,7 @@ public class OperationManagerImpl implements OperationManager {
|
|||||||
}
|
}
|
||||||
OperationManagementDAOFactory.commitTransaction();
|
OperationManagementDAOFactory.commitTransaction();
|
||||||
|
|
||||||
if (isScheduled) {
|
if (!isScheduled) {
|
||||||
for (Device device : authorizedDevices) {
|
for (Device device : authorizedDevices) {
|
||||||
this.sendNotification(operation, device);
|
this.sendNotification(operation, device);
|
||||||
}
|
}
|
||||||
@ -537,6 +538,13 @@ public class OperationManagerImpl implements OperationManager {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Operation getNextPendingOperation(DeviceIdentifier deviceId) throws OperationManagementException {
|
public Operation getNextPendingOperation(DeviceIdentifier deviceId) throws OperationManagementException {
|
||||||
|
// setting notNowOperationFrequency to -1 to avoid picking notnow operations
|
||||||
|
return this.getNextPendingOperation(deviceId, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Operation getNextPendingOperation(DeviceIdentifier deviceId, long notNowOperationFrequency)
|
||||||
|
throws OperationManagementException {
|
||||||
if (log.isDebugEnabled()) {
|
if (log.isDebugEnabled()) {
|
||||||
log.debug("device identifier id:[" + deviceId.getId() + "] type:[" + deviceId.getType() + "]");
|
log.debug("device identifier id:[" + deviceId.getId() + "] type:[" + deviceId.getType() + "]");
|
||||||
}
|
}
|
||||||
@ -565,8 +573,32 @@ public class OperationManagerImpl implements OperationManager {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
OperationManagementDAOFactory.openConnection();
|
OperationManagementDAOFactory.openConnection();
|
||||||
org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation dtoOperation = operationDAO.getNextOperation(
|
org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation dtoOperation = null;
|
||||||
enrolmentInfo.getId());
|
|
||||||
|
// check whether notnow is set
|
||||||
|
if (notNowOperationFrequency > 0) {
|
||||||
|
// retrieve Notnow operations
|
||||||
|
dtoOperation = operationDAO.getNextOperation(enrolmentInfo.getId(),
|
||||||
|
org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation.Status.NOTNOW);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dtoOperation != null) {
|
||||||
|
long currentTime = Calendar.getInstance().getTime().getTime();
|
||||||
|
log.info("Current timestamp:" + currentTime);
|
||||||
|
long updatedTime = Timestamp.valueOf(dtoOperation.getReceivedTimeStamp()).getTime();
|
||||||
|
log.info("Updated timestamp: " + updatedTime);
|
||||||
|
|
||||||
|
// check if notnow frequency is met and set next pending operation if not, otherwise let notnow
|
||||||
|
// operation to proceed
|
||||||
|
if ((currentTime - updatedTime) < notNowOperationFrequency) {
|
||||||
|
dtoOperation = operationDAO.getNextOperation(enrolmentInfo.getId(),
|
||||||
|
org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation.Status.PENDING);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
dtoOperation = operationDAO.getNextOperation(enrolmentInfo.getId(),
|
||||||
|
org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation.Status.PENDING);
|
||||||
|
}
|
||||||
|
|
||||||
if (dtoOperation != null) {
|
if (dtoOperation != null) {
|
||||||
if (org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation.Type.COMMAND.equals(dtoOperation.getType()
|
if (org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation.Type.COMMAND.equals(dtoOperation.getType()
|
||||||
)) {
|
)) {
|
||||||
|
|||||||
@ -46,7 +46,7 @@ public interface OperationDAO {
|
|||||||
|
|
||||||
List<? extends Operation> getOperationsForDevice(int enrolmentId, PaginationRequest request) throws OperationManagementDAOException;
|
List<? extends Operation> getOperationsForDevice(int enrolmentId, PaginationRequest request) throws OperationManagementDAOException;
|
||||||
|
|
||||||
Operation getNextOperation(int enrolmentId) throws OperationManagementDAOException;
|
Operation getNextOperation(int enrolmentId, Operation.Status status) throws OperationManagementDAOException;
|
||||||
|
|
||||||
boolean updateOperationStatus(int enrolmentId, int operationId,Operation.Status status)
|
boolean updateOperationStatus(int enrolmentId, int operationId,Operation.Status status)
|
||||||
throws OperationManagementDAOException;
|
throws OperationManagementDAOException;
|
||||||
|
|||||||
@ -1372,7 +1372,7 @@ public class GenericOperationDAOImpl implements OperationDAO {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Operation getNextOperation(int enrolmentId) throws OperationManagementDAOException {
|
public Operation getNextOperation(int enrolmentId, Operation.Status status) throws OperationManagementDAOException {
|
||||||
PreparedStatement stmt = null;
|
PreparedStatement stmt = null;
|
||||||
ResultSet rs = null;
|
ResultSet rs = null;
|
||||||
try {
|
try {
|
||||||
@ -1383,7 +1383,7 @@ public class GenericOperationDAOImpl implements OperationDAO {
|
|||||||
"WHERE dm.ENROLMENT_ID = ? AND dm.STATUS = ?) om ON o.ID = om.OPERATION_ID " +
|
"WHERE dm.ENROLMENT_ID = ? AND dm.STATUS = ?) om ON o.ID = om.OPERATION_ID " +
|
||||||
"ORDER BY om.UPDATED_TIMESTAMP ASC, om.ID ASC LIMIT 1");
|
"ORDER BY om.UPDATED_TIMESTAMP ASC, om.ID ASC LIMIT 1");
|
||||||
stmt.setInt(1, enrolmentId);
|
stmt.setInt(1, enrolmentId);
|
||||||
stmt.setString(2, Operation.Status.PENDING.toString());
|
stmt.setString(2, status.toString());
|
||||||
rs = stmt.executeQuery();
|
rs = stmt.executeQuery();
|
||||||
|
|
||||||
Operation operation = null;
|
Operation operation = null;
|
||||||
@ -1392,11 +1392,7 @@ public class GenericOperationDAOImpl implements OperationDAO {
|
|||||||
operation.setType(OperationDAOUtil.getType(rs.getString("TYPE")));
|
operation.setType(OperationDAOUtil.getType(rs.getString("TYPE")));
|
||||||
operation.setId(rs.getInt("ID"));
|
operation.setId(rs.getInt("ID"));
|
||||||
operation.setCreatedTimeStamp(rs.getTimestamp("CREATED_TIMESTAMP").toString());
|
operation.setCreatedTimeStamp(rs.getTimestamp("CREATED_TIMESTAMP").toString());
|
||||||
// if (rs.getTimestamp("RECEIVED_TIMESTAMP") == null) {
|
|
||||||
// operation.setReceivedTimeStamp("");
|
|
||||||
// } else {
|
|
||||||
// operation.setReceivedTimeStamp(rs.getTimestamp("RECEIVED_TIMESTAMP").toString());
|
|
||||||
// }
|
|
||||||
if (rs.getLong("UPDATED_TIMESTAMP") == 0) {
|
if (rs.getLong("UPDATED_TIMESTAMP") == 0) {
|
||||||
operation.setReceivedTimeStamp("");
|
operation.setReceivedTimeStamp("");
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -53,7 +53,7 @@ public class ProfileOperationDAOImpl extends GenericOperationDAOImpl {
|
|||||||
|
|
||||||
bao = new ByteArrayOutputStream();
|
bao = new ByteArrayOutputStream();
|
||||||
oos = new ObjectOutputStream(bao);
|
oos = new ObjectOutputStream(bao);
|
||||||
oos.writeObject(operation);
|
oos.writeObject(operation.getPayLoad());
|
||||||
|
|
||||||
stmt.setInt(1, operationId);
|
stmt.setInt(1, operationId);
|
||||||
stmt.setBytes(2, bao.toByteArray());
|
stmt.setBytes(2, bao.toByteArray());
|
||||||
@ -91,7 +91,8 @@ public class ProfileOperationDAOImpl extends GenericOperationDAOImpl {
|
|||||||
ObjectInputStream ois;
|
ObjectInputStream ois;
|
||||||
try {
|
try {
|
||||||
Connection conn = OperationManagementDAOFactory.getConnection();
|
Connection conn = OperationManagementDAOFactory.getConnection();
|
||||||
String sql = "SELECT OPERATION_ID, ENABLED, OPERATION_DETAILS FROM DM_PROFILE_OPERATION WHERE OPERATION_ID=?";
|
String sql = "SELECT o.ID, po.ENABLED, po.OPERATION_DETAILS, o.CREATED_TIMESTAMP, o.OPERATION_CODE " +
|
||||||
|
"FROM DM_PROFILE_OPERATION po INNER JOIN DM_OPERATION o ON po.OPERATION_ID = O.ID WHERE po.OPERATION_ID=?";
|
||||||
|
|
||||||
stmt = conn.prepareStatement(sql);
|
stmt = conn.prepareStatement(sql);
|
||||||
stmt.setInt(1, id);
|
stmt.setInt(1, id);
|
||||||
@ -99,9 +100,20 @@ public class ProfileOperationDAOImpl extends GenericOperationDAOImpl {
|
|||||||
|
|
||||||
if (rs.next()) {
|
if (rs.next()) {
|
||||||
byte[] operationDetails = rs.getBytes("OPERATION_DETAILS");
|
byte[] operationDetails = rs.getBytes("OPERATION_DETAILS");
|
||||||
|
int oppId = rs.getInt("ID");
|
||||||
bais = new ByteArrayInputStream(operationDetails);
|
bais = new ByteArrayInputStream(operationDetails);
|
||||||
ois = new ObjectInputStream(bais);
|
ois = new ObjectInputStream(bais);
|
||||||
profileOperation = (ProfileOperation) ois.readObject();
|
Object obj = ois.readObject();
|
||||||
|
if(obj instanceof String){
|
||||||
|
profileOperation = new ProfileOperation();
|
||||||
|
profileOperation.setCode(rs.getString("OPERATION_CODE"));
|
||||||
|
profileOperation.setId(oppId);
|
||||||
|
profileOperation.setCreatedTimeStamp(rs.getString("CREATED_TIMESTAMP"));
|
||||||
|
profileOperation.setId(oppId);
|
||||||
|
profileOperation.setPayLoad(obj);
|
||||||
|
} else {
|
||||||
|
profileOperation = (ProfileOperation) obj;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new OperationManagementDAOException("IO Error occurred while de serialize the profile " +
|
throw new OperationManagementDAOException("IO Error occurred while de serialize the profile " +
|
||||||
@ -110,7 +122,7 @@ public class ProfileOperationDAOImpl extends GenericOperationDAOImpl {
|
|||||||
throw new OperationManagementDAOException("Class not found error occurred while de serialize the " +
|
throw new OperationManagementDAOException("Class not found error occurred while de serialize the " +
|
||||||
"profile operation object", e);
|
"profile operation object", e);
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
throw new OperationManagementDAOException("SQL Error occurred while retrieving the command " +
|
throw new OperationManagementDAOException("SQL Error occurred while retrieving the profile " +
|
||||||
"operation object " + "available for the id '" + id, e);
|
"operation object " + "available for the id '" + id, e);
|
||||||
} finally {
|
} finally {
|
||||||
OperationManagementDAOUtil.cleanupResources(stmt, rs);
|
OperationManagementDAOUtil.cleanupResources(stmt, rs);
|
||||||
@ -120,7 +132,7 @@ public class ProfileOperationDAOImpl extends GenericOperationDAOImpl {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<? extends Operation> getOperationsByDeviceAndStatus(int enrolmentId,
|
public List<? extends Operation> getOperationsByDeviceAndStatus(int enrolmentId,
|
||||||
Operation.Status status) throws OperationManagementDAOException {
|
Operation.Status status) throws OperationManagementDAOException {
|
||||||
PreparedStatement stmt = null;
|
PreparedStatement stmt = null;
|
||||||
ResultSet rs = null;
|
ResultSet rs = null;
|
||||||
ProfileOperation profileOperation;
|
ProfileOperation profileOperation;
|
||||||
@ -132,10 +144,12 @@ public class ProfileOperationDAOImpl extends GenericOperationDAOImpl {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
Connection conn = OperationManagementDAOFactory.getConnection();
|
Connection conn = OperationManagementDAOFactory.getConnection();
|
||||||
String sql = "Select po.OPERATION_ID, ENABLED, OPERATION_DETAILS from DM_PROFILE_OPERATION po " +
|
String sql = "SELECT o.ID, po1.ENABLED, po1.STATUS, o.TYPE, o.CREATED_TIMESTAMP, o.RECEIVED_TIMESTAMP, " +
|
||||||
"INNER JOIN " +
|
"o.OPERATION_CODE, po1.OPERATION_DETAILS " +
|
||||||
"(Select * From DM_ENROLMENT_OP_MAPPING WHERE ENROLMENT_ID=? " +
|
"FROM (SELECT po.OPERATION_ID, po.ENABLED, po.OPERATION_DETAILS, dm.STATUS " +
|
||||||
"AND STATUS=?) dm ON dm.OPERATION_ID = po.OPERATION_ID";
|
"FROM DM_PROFILE_OPERATION po INNER JOIN (SELECT ENROLMENT_ID, OPERATION_ID, STATUS FROM DM_ENROLMENT_OP_MAPPING " +
|
||||||
|
"WHERE ENROLMENT_ID = ? AND STATUS = ?) dm ON dm.OPERATION_ID = po.OPERATION_ID) po1 " +
|
||||||
|
"INNER JOIN DM_OPERATION o ON po1.OPERATION_ID = o.ID ";
|
||||||
|
|
||||||
stmt = conn.prepareStatement(sql);
|
stmt = conn.prepareStatement(sql);
|
||||||
stmt.setInt(1, enrolmentId);
|
stmt.setInt(1, enrolmentId);
|
||||||
@ -147,9 +161,20 @@ public class ProfileOperationDAOImpl extends GenericOperationDAOImpl {
|
|||||||
byte[] operationDetails = rs.getBytes("OPERATION_DETAILS");
|
byte[] operationDetails = rs.getBytes("OPERATION_DETAILS");
|
||||||
bais = new ByteArrayInputStream(operationDetails);
|
bais = new ByteArrayInputStream(operationDetails);
|
||||||
ois = new ObjectInputStream(bais);
|
ois = new ObjectInputStream(bais);
|
||||||
profileOperation = (ProfileOperation) ois.readObject();
|
Object obj = ois.readObject();
|
||||||
profileOperation.setStatus(status);
|
if(obj instanceof String){
|
||||||
operationList.add(profileOperation);
|
profileOperation = new ProfileOperation();
|
||||||
|
profileOperation.setCode(rs.getString("OPERATION_CODE"));
|
||||||
|
profileOperation.setId(rs.getInt("ID"));
|
||||||
|
profileOperation.setCreatedTimeStamp(rs.getString("CREATED_TIMESTAMP"));
|
||||||
|
profileOperation.setPayLoad(obj);
|
||||||
|
profileOperation.setStatus(status);
|
||||||
|
operationList.add(profileOperation);
|
||||||
|
} else {
|
||||||
|
profileOperation = (ProfileOperation) obj;
|
||||||
|
profileOperation.setStatus(status);
|
||||||
|
operationList.add(profileOperation);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
|||||||
@ -86,11 +86,18 @@ public class PushNotificationSchedulerTask implements Runnable {
|
|||||||
NotificationStrategy notificationStrategy = provider.getNotificationStrategyByDeviceType
|
NotificationStrategy notificationStrategy = provider.getNotificationStrategyByDeviceType
|
||||||
(operationMapping.getDeviceIdentifier().getType());
|
(operationMapping.getDeviceIdentifier().getType());
|
||||||
// Send the push notification on given strategy
|
// Send the push notification on given strategy
|
||||||
notificationStrategy.execute(new NotificationContext(operationMapping.getDeviceIdentifier(),
|
if (notificationStrategy != null) {
|
||||||
provider.getOperation(operationMapping.getDeviceIdentifier().getType(), operationMapping
|
notificationStrategy.execute(new NotificationContext(operationMapping.getDeviceIdentifier(),
|
||||||
.getOperationId())));
|
provider.getOperation(operationMapping.getDeviceIdentifier().getType(), operationMapping
|
||||||
operationMapping.setPushNotificationStatus(Operation.PushNotificationStatus.COMPLETED);
|
.getOperationId())));
|
||||||
operationsCompletedList.add(operationMapping);
|
operationMapping.setPushNotificationStatus(Operation.PushNotificationStatus.COMPLETED);
|
||||||
|
operationsCompletedList.add(operationMapping);
|
||||||
|
} else {
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Tenant '" + PrivilegedCarbonContext.getThreadLocalCarbonContext()
|
||||||
|
.getTenantDomain() + "' does not have push notification strategy.");
|
||||||
|
}
|
||||||
|
}
|
||||||
} catch (DeviceManagementException e) {
|
} catch (DeviceManagementException e) {
|
||||||
log.error("Error occurred while getting notification strategy for operation mapping " +
|
log.error("Error occurred while getting notification strategy for operation mapping " +
|
||||||
operationMapping.getDeviceIdentifier().getType(), e);
|
operationMapping.getDeviceIdentifier().getType(), e);
|
||||||
@ -121,7 +128,7 @@ public class PushNotificationSchedulerTask implements Runnable {
|
|||||||
log.debug("Push notification job running completed.");
|
log.debug("Push notification job running completed.");
|
||||||
}
|
}
|
||||||
} catch (Throwable cause) {
|
} catch (Throwable cause) {
|
||||||
log.error("PushNotificationSchedulerTask failed due to " + cause);
|
log.error("PushNotificationSchedulerTask failed due to " + cause.getMessage(), cause);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -24,6 +24,7 @@ import org.wso2.carbon.device.mgt.common.EnrolmentInfo;
|
|||||||
import org.wso2.carbon.device.mgt.common.FeatureManager;
|
import org.wso2.carbon.device.mgt.common.FeatureManager;
|
||||||
import org.wso2.carbon.device.mgt.common.InvalidDeviceException;
|
import org.wso2.carbon.device.mgt.common.InvalidDeviceException;
|
||||||
import org.wso2.carbon.device.mgt.common.MonitoringOperation;
|
import org.wso2.carbon.device.mgt.common.MonitoringOperation;
|
||||||
|
import org.wso2.carbon.device.mgt.common.OperationMonitoringTaskConfig;
|
||||||
import org.wso2.carbon.device.mgt.common.PaginationRequest;
|
import org.wso2.carbon.device.mgt.common.PaginationRequest;
|
||||||
import org.wso2.carbon.device.mgt.common.PaginationResult;
|
import org.wso2.carbon.device.mgt.common.PaginationResult;
|
||||||
import org.wso2.carbon.device.mgt.common.app.mgt.DeviceApplicationMapping;
|
import org.wso2.carbon.device.mgt.common.app.mgt.DeviceApplicationMapping;
|
||||||
@ -552,6 +553,9 @@ public interface DeviceManagementProviderService {
|
|||||||
|
|
||||||
Operation getNextPendingOperation(DeviceIdentifier deviceId) throws OperationManagementException;
|
Operation getNextPendingOperation(DeviceIdentifier deviceId) throws OperationManagementException;
|
||||||
|
|
||||||
|
Operation getNextPendingOperation(DeviceIdentifier deviceId, long notNowOperationFrequency)
|
||||||
|
throws OperationManagementException;
|
||||||
|
|
||||||
void updateOperation(DeviceIdentifier deviceId, Operation operation) throws OperationManagementException;
|
void updateOperation(DeviceIdentifier deviceId, Operation operation) throws OperationManagementException;
|
||||||
|
|
||||||
boolean updateProperties(DeviceIdentifier deviceId, List<Device.Property> properties) throws DeviceManagementException;
|
boolean updateProperties(DeviceIdentifier deviceId, List<Device.Property> properties) throws DeviceManagementException;
|
||||||
@ -587,6 +591,8 @@ public interface DeviceManagementProviderService {
|
|||||||
|
|
||||||
int getDeviceMonitoringFrequency(String deviceType);
|
int getDeviceMonitoringFrequency(String deviceType);
|
||||||
|
|
||||||
|
OperationMonitoringTaskConfig getDeviceMonitoringConfig(String deviceType);
|
||||||
|
|
||||||
boolean isDeviceMonitoringEnabled(String deviceType);
|
boolean isDeviceMonitoringEnabled(String deviceType);
|
||||||
|
|
||||||
PolicyMonitoringManager getPolicyMonitoringManager(String deviceType);
|
PolicyMonitoringManager getPolicyMonitoringManager(String deviceType);
|
||||||
|
|||||||
@ -1452,8 +1452,15 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Operation getNextPendingOperation(DeviceIdentifier deviceId) throws OperationManagementException {
|
public Operation getNextPendingOperation(DeviceIdentifier deviceId) throws OperationManagementException {
|
||||||
|
// // setting notNowOperationFrequency to -1 to avoid picking notnow operations
|
||||||
return pluginRepository.getOperationManager(deviceId.getType(), this.getTenantId())
|
return pluginRepository.getOperationManager(deviceId.getType(), this.getTenantId())
|
||||||
.getNextPendingOperation(deviceId);
|
.getNextPendingOperation(deviceId, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Operation getNextPendingOperation(DeviceIdentifier deviceId, long notNowOperationFrequency)
|
||||||
|
throws OperationManagementException {
|
||||||
|
return pluginRepository.getOperationManager(deviceId.getType(), this.getTenantId())
|
||||||
|
.getNextPendingOperation(deviceId, notNowOperationFrequency);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -1597,6 +1604,13 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
|
|||||||
return operationMonitoringTaskConfig.getFrequency();
|
return operationMonitoringTaskConfig.getFrequency();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public OperationMonitoringTaskConfig getDeviceMonitoringConfig(String deviceType) {
|
||||||
|
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
||||||
|
DeviceManagementService dms = pluginRepository.getDeviceManagementService(deviceType, tenantId);
|
||||||
|
return dms.getOperationMonitoringConfig();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isDeviceMonitoringEnabled(String deviceType) {
|
public boolean isDeviceMonitoringEnabled(String deviceType) {
|
||||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
||||||
|
|||||||
@ -26,14 +26,23 @@ import java.util.Map;
|
|||||||
|
|
||||||
public class Utils {
|
public class Utils {
|
||||||
|
|
||||||
public static Map<String, Long> getTenantedTaskOperationMap(Map<Integer, Map<String, Long>> map) {
|
public static Map<String, Long> getTenantedTaskOperationMap(Map<Integer, Map<String, Map<String, Long>>> map,
|
||||||
|
String deviceType) {
|
||||||
|
Map<String, Long> taskMap = new HashMap<>();
|
||||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
||||||
if (map.containsKey(tenantId)) {
|
if (map.containsKey(tenantId)) {
|
||||||
return map.get(tenantId);
|
if (map.get(tenantId).containsKey(deviceType)) {
|
||||||
|
return map.get(tenantId).get(deviceType);
|
||||||
|
} else {
|
||||||
|
Map<String, Map<String, Long>> existingTenantMap = map.get(tenantId);
|
||||||
|
existingTenantMap.put(deviceType, taskMap);
|
||||||
|
return taskMap;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
Map<String, Long> mp = new HashMap<>();
|
HashMap<String, Map<String, Long>> typeMap = new HashMap<>();
|
||||||
map.put(tenantId, mp);
|
typeMap.put(deviceType, taskMap);
|
||||||
return mp;
|
map.put(tenantId, typeMap);
|
||||||
|
return taskMap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -16,16 +16,15 @@
|
|||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
package org.wso2.carbon.device.mgt.core.task.impl;
|
package org.wso2.carbon.device.mgt.core.task.impl;
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
||||||
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
|
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
|
||||||
import org.wso2.carbon.device.mgt.common.OperationMonitoringTaskConfig;
|
import org.wso2.carbon.device.mgt.common.OperationMonitoringTaskConfig;
|
||||||
import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder;
|
import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder;
|
||||||
|
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
|
||||||
import org.wso2.carbon.device.mgt.core.task.DeviceMgtTaskException;
|
import org.wso2.carbon.device.mgt.core.task.DeviceMgtTaskException;
|
||||||
import org.wso2.carbon.device.mgt.core.task.DeviceTaskManager;
|
import org.wso2.carbon.device.mgt.core.task.DeviceTaskManager;
|
||||||
import org.wso2.carbon.ntask.core.Task;
|
import org.wso2.carbon.ntask.core.Task;
|
||||||
@ -38,20 +37,13 @@ public class DeviceDetailsRetrieverTask implements Task {
|
|||||||
|
|
||||||
private static Log log = LogFactory.getLog(DeviceDetailsRetrieverTask.class);
|
private static Log log = LogFactory.getLog(DeviceDetailsRetrieverTask.class);
|
||||||
private String deviceType;
|
private String deviceType;
|
||||||
private String oppConfig;
|
|
||||||
private OperationMonitoringTaskConfig operationMonitoringTaskConfig;
|
|
||||||
private boolean executeForTenants = false;
|
private boolean executeForTenants = false;
|
||||||
private final String IS_CLOUD = "is.cloud";
|
private final String IS_CLOUD = "is.cloud";
|
||||||
|
private DeviceManagementProviderService deviceManagementProviderService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setProperties(Map<String, String> map) {
|
public void setProperties(Map<String, String> map) {
|
||||||
deviceType = map.get("DEVICE_TYPE");
|
deviceType = map.get("DEVICE_TYPE");
|
||||||
oppConfig = map.get("OPPCONFIG");
|
|
||||||
|
|
||||||
Gson gson = new Gson();
|
|
||||||
|
|
||||||
operationMonitoringTaskConfig = gson.fromJson(oppConfig,
|
|
||||||
OperationMonitoringTaskConfig.class);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -60,29 +52,33 @@ public class DeviceDetailsRetrieverTask implements Task {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute() {
|
public void execute() {
|
||||||
|
deviceManagementProviderService = DeviceManagementDataHolder.getInstance()
|
||||||
|
.getDeviceManagementProvider();
|
||||||
|
OperationMonitoringTaskConfig operationMonitoringTaskConfig = deviceManagementProviderService
|
||||||
|
.getDeviceMonitoringConfig(deviceType);
|
||||||
|
|
||||||
if(System.getProperty(IS_CLOUD) != null && Boolean.parseBoolean(System.getProperty(IS_CLOUD))){
|
if (System.getProperty(IS_CLOUD) != null && Boolean.parseBoolean(System.getProperty(IS_CLOUD))) {
|
||||||
executeForTenants = true;
|
executeForTenants = true;
|
||||||
}
|
}
|
||||||
if(executeForTenants){
|
if (executeForTenants) {
|
||||||
this.executeForAllTenants();
|
this.executeForAllTenants(operationMonitoringTaskConfig);
|
||||||
} else {
|
} else {
|
||||||
if (log.isDebugEnabled()) {
|
if (log.isDebugEnabled()) {
|
||||||
log.debug("Device details retrieving task started to run.");
|
log.debug("Device details retrieving task started to run.");
|
||||||
}
|
}
|
||||||
DeviceTaskManager deviceTaskManager = new DeviceTaskManagerImpl(deviceType,
|
DeviceTaskManager deviceTaskManager = new DeviceTaskManagerImpl(deviceType, operationMonitoringTaskConfig);
|
||||||
operationMonitoringTaskConfig);
|
|
||||||
//pass the configurations also from here, monitoring tasks
|
//pass the configurations also from here, monitoring tasks
|
||||||
try {
|
try {
|
||||||
deviceTaskManager.addOperations();
|
if (deviceManagementProviderService.isDeviceMonitoringEnabled(deviceType)) {
|
||||||
|
deviceTaskManager.addOperations();
|
||||||
|
}
|
||||||
} catch (DeviceMgtTaskException e) {
|
} catch (DeviceMgtTaskException e) {
|
||||||
log.error(
|
log.error("Error occurred while trying to add the operations to device to retrieve device details.", e);
|
||||||
"Error occurred while trying to add the operations to device to retrieve device details.", e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void executeForAllTenants() {
|
private void executeForAllTenants(OperationMonitoringTaskConfig operationMonitoringTaskConfig) {
|
||||||
|
|
||||||
if (log.isDebugEnabled()) {
|
if (log.isDebugEnabled()) {
|
||||||
log.debug("Device details retrieving task started to run for all tenants.");
|
log.debug("Device details retrieving task started to run for all tenants.");
|
||||||
@ -101,7 +97,9 @@ public class DeviceDetailsRetrieverTask implements Task {
|
|||||||
operationMonitoringTaskConfig);
|
operationMonitoringTaskConfig);
|
||||||
//pass the configurations also from here, monitoring tasks
|
//pass the configurations also from here, monitoring tasks
|
||||||
try {
|
try {
|
||||||
deviceTaskManager.addOperations();
|
if (deviceManagementProviderService.isDeviceMonitoringEnabled(deviceType)) {
|
||||||
|
deviceTaskManager.addOperations();
|
||||||
|
}
|
||||||
} catch (DeviceMgtTaskException e) {
|
} catch (DeviceMgtTaskException e) {
|
||||||
log.error("Error occurred while trying to add the operations to " +
|
log.error("Error occurred while trying to add the operations to " +
|
||||||
"device to retrieve device details.", e);
|
"device to retrieve device details.", e);
|
||||||
|
|||||||
@ -36,17 +36,13 @@ import org.wso2.carbon.device.mgt.core.task.DeviceTaskManager;
|
|||||||
import org.wso2.carbon.device.mgt.core.task.Utils;
|
import org.wso2.carbon.device.mgt.core.task.Utils;
|
||||||
import org.wso2.carbon.device.mgt.core.util.DeviceManagerUtil;
|
import org.wso2.carbon.device.mgt.core.util.DeviceManagerUtil;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class DeviceTaskManagerImpl implements DeviceTaskManager {
|
public class DeviceTaskManagerImpl implements DeviceTaskManager {
|
||||||
|
|
||||||
private static Log log = LogFactory.getLog(DeviceTaskManagerImpl.class);
|
private static Log log = LogFactory.getLog(DeviceTaskManagerImpl.class);
|
||||||
private String deviceType;
|
private String deviceType;
|
||||||
private static Map<Integer, Map<String, Long>> map = new HashMap<>();
|
static volatile Map<Integer, Map<String, Map<String, Long>>> map = new HashMap<>();
|
||||||
private OperationMonitoringTaskConfig operationMonitoringTaskConfig;
|
private OperationMonitoringTaskConfig operationMonitoringTaskConfig;
|
||||||
|
|
||||||
public DeviceTaskManagerImpl(String deviceType,
|
public DeviceTaskManagerImpl(String deviceType,
|
||||||
@ -126,7 +122,7 @@ public class DeviceTaskManagerImpl implements DeviceTaskManager {
|
|||||||
List<String> opNames = new ArrayList<>();
|
List<String> opNames = new ArrayList<>();
|
||||||
Long milliseconds = System.currentTimeMillis();
|
Long milliseconds = System.currentTimeMillis();
|
||||||
int frequency = this.getTaskFrequency();
|
int frequency = this.getTaskFrequency();
|
||||||
Map<String, Long> mp = Utils.getTenantedTaskOperationMap(map);
|
Map<String, Long> mp = Utils.getTenantedTaskOperationMap(map, deviceType);
|
||||||
|
|
||||||
for (MonitoringOperation top : monitoringOperations) {
|
for (MonitoringOperation top : monitoringOperations) {
|
||||||
if (!mp.containsKey(top.getTaskName())) {
|
if (!mp.containsKey(top.getTaskName())) {
|
||||||
|
|||||||
@ -107,10 +107,12 @@ public class DeviceTaskManagerServiceImpl implements DeviceTaskManagerService {
|
|||||||
throws DeviceMgtTaskException {
|
throws DeviceMgtTaskException {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
||||||
TaskService taskService = DeviceManagementDataHolder.getInstance().getTaskService();
|
TaskService taskService = DeviceManagementDataHolder.getInstance().getTaskService();
|
||||||
if (taskService.isServerInit()) {
|
if (taskService.isServerInit()) {
|
||||||
TaskManager taskManager = taskService.getTaskManager(TASK_TYPE);
|
TaskManager taskManager = taskService.getTaskManager(TASK_TYPE);
|
||||||
taskManager.deleteTask(deviceType);
|
String taskName = deviceType + String.valueOf(tenantId);
|
||||||
|
taskManager.deleteTask(taskName);
|
||||||
}
|
}
|
||||||
} catch (TaskException e) {
|
} catch (TaskException e) {
|
||||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
||||||
@ -131,8 +133,8 @@ public class DeviceTaskManagerServiceImpl implements DeviceTaskManagerService {
|
|||||||
TaskManager taskManager = taskService.getTaskManager(TASK_TYPE);
|
TaskManager taskManager = taskService.getTaskManager(TASK_TYPE);
|
||||||
|
|
||||||
if (taskManager.isTaskScheduled(deviceType)) {
|
if (taskManager.isTaskScheduled(deviceType)) {
|
||||||
|
String taskName = deviceType + String.valueOf(tenantId);
|
||||||
taskManager.deleteTask(deviceType);
|
taskManager.deleteTask(taskName);
|
||||||
TaskInfo.TriggerInfo triggerInfo = new TaskInfo.TriggerInfo();
|
TaskInfo.TriggerInfo triggerInfo = new TaskInfo.TriggerInfo();
|
||||||
triggerInfo.setIntervalMillis(operationMonitoringTaskConfig.getFrequency());
|
triggerInfo.setIntervalMillis(operationMonitoringTaskConfig.getFrequency());
|
||||||
triggerInfo.setRepeatCount(-1);
|
triggerInfo.setRepeatCount(-1);
|
||||||
@ -140,7 +142,7 @@ public class DeviceTaskManagerServiceImpl implements DeviceTaskManagerService {
|
|||||||
Map<String, String> properties = new HashMap<>();
|
Map<String, String> properties = new HashMap<>();
|
||||||
properties.put(TENANT_ID, String.valueOf(tenantId));
|
properties.put(TENANT_ID, String.valueOf(tenantId));
|
||||||
|
|
||||||
TaskInfo taskInfo = new TaskInfo(deviceType, TASK_CLASS, properties, triggerInfo);
|
TaskInfo taskInfo = new TaskInfo(taskName, TASK_CLASS, properties, triggerInfo);
|
||||||
|
|
||||||
taskManager.registerTask(taskInfo);
|
taskManager.registerTask(taskInfo);
|
||||||
taskManager.rescheduleTask(taskInfo.getName());
|
taskManager.rescheduleTask(taskInfo.getName());
|
||||||
|
|||||||
@ -43,7 +43,7 @@ public class TestDeviceManagementService implements DeviceManagementService {
|
|||||||
public TestDeviceManagementService(String deviceType, String tenantDomain) {
|
public TestDeviceManagementService(String deviceType, String tenantDomain) {
|
||||||
providerType = deviceType;
|
providerType = deviceType;
|
||||||
this.tenantDomain = tenantDomain;
|
this.tenantDomain = tenantDomain;
|
||||||
this.operationCode = "default";
|
this.operationCode = "DEVICE_INFO";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@ -143,7 +143,7 @@ public class GeoLocationProviderServiceTest {
|
|||||||
Assert.assertEquals(geoFenceNode.getStationaryTime(), SAMPLE_STATIONARY_TIME);
|
Assert.assertEquals(geoFenceNode.getStationaryTime(), SAMPLE_STATIONARY_TIME);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initMocks() throws JWTClientException, RemoteException {
|
private void initMocks() throws Exception {
|
||||||
EventProcessorAdminServiceStub mockEventProcessorAdminServiceStub = Mockito.mock(EventProcessorAdminServiceStub.class);
|
EventProcessorAdminServiceStub mockEventProcessorAdminServiceStub = Mockito.mock(EventProcessorAdminServiceStub.class);
|
||||||
geoLocationProviderServiceImpl = Mockito.mock(GeoLocationProviderServiceImpl.class, Mockito.CALLS_REAL_METHODS);
|
geoLocationProviderServiceImpl = Mockito.mock(GeoLocationProviderServiceImpl.class, Mockito.CALLS_REAL_METHODS);
|
||||||
mockExecutionPlanConfigurationDto[0] = Mockito.mock(ExecutionPlanConfigurationDto.class);
|
mockExecutionPlanConfigurationDto[0] = Mockito.mock(ExecutionPlanConfigurationDto.class);
|
||||||
|
|||||||
@ -18,6 +18,8 @@
|
|||||||
|
|
||||||
package org.wso2.carbon.device.mgt.core.operation;
|
package org.wso2.carbon.device.mgt.core.operation;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
import org.powermock.api.mockito.PowerMockito;
|
import org.powermock.api.mockito.PowerMockito;
|
||||||
import org.testng.Assert;
|
import org.testng.Assert;
|
||||||
import org.testng.annotations.BeforeClass;
|
import org.testng.annotations.BeforeClass;
|
||||||
@ -67,6 +69,7 @@ public class OperationManagementTests extends BaseDeviceManagementTest {
|
|||||||
private static final String POLICY_OPERATION_CODE = "POLICY-TEST";
|
private static final String POLICY_OPERATION_CODE = "POLICY-TEST";
|
||||||
private static final String CONFIG_OPERATION_CODE = "CONFIG-TEST";
|
private static final String CONFIG_OPERATION_CODE = "CONFIG-TEST";
|
||||||
private static final String PROFILE_OPERATION_CODE = "PROFILE-TEST";
|
private static final String PROFILE_OPERATION_CODE = "PROFILE-TEST";
|
||||||
|
private static final String PROFILE_NOTIFICATION_CODE = "NOTIFICATION";
|
||||||
private static final String DATE_FORMAT_NOW = "yyyy-MM-dd HH:mm:ss";
|
private static final String DATE_FORMAT_NOW = "yyyy-MM-dd HH:mm:ss";
|
||||||
private static final int NO_OF_DEVICES = 5;
|
private static final int NO_OF_DEVICES = 5;
|
||||||
private static final String ADMIN_USER = "admin";
|
private static final String ADMIN_USER = "admin";
|
||||||
@ -80,6 +83,8 @@ public class OperationManagementTests extends BaseDeviceManagementTest {
|
|||||||
private Activity commandActivity;
|
private Activity commandActivity;
|
||||||
private long commandActivityBeforeUpdatedTimestamp;
|
private long commandActivityBeforeUpdatedTimestamp;
|
||||||
|
|
||||||
|
private static Log log = LogFactory.getLog(OperationManagementTests.class);
|
||||||
|
|
||||||
@BeforeClass
|
@BeforeClass
|
||||||
public void init() throws Exception {
|
public void init() throws Exception {
|
||||||
for (int i = 0; i < NO_OF_DEVICES; i++) {
|
for (int i = 0; i < NO_OF_DEVICES; i++) {
|
||||||
@ -101,14 +106,14 @@ public class OperationManagementTests extends BaseDeviceManagementTest {
|
|||||||
}
|
}
|
||||||
this.deviceMgmtProvider = DeviceManagementDataHolder.getInstance().getDeviceManagementProvider();
|
this.deviceMgmtProvider = DeviceManagementDataHolder.getInstance().getDeviceManagementProvider();
|
||||||
deviceManagementService = new TestDeviceManagementService(DEVICE_TYPE,
|
deviceManagementService = new TestDeviceManagementService(DEVICE_TYPE,
|
||||||
MultitenantConstants.SUPER_TENANT_DOMAIN_NAME);
|
MultitenantConstants.SUPER_TENANT_DOMAIN_NAME);
|
||||||
this.operationMgtService = PowerMockito.spy(new OperationManagerImpl(DEVICE_TYPE, deviceManagementService));
|
this.operationMgtService = PowerMockito.spy(new OperationManagerImpl(DEVICE_TYPE, deviceManagementService));
|
||||||
PowerMockito.when(this.operationMgtService, "getNotificationStrategy").thenReturn(new TestNotificationStrategy());
|
PowerMockito.when(this.operationMgtService, "getNotificationStrategy").thenReturn(new TestNotificationStrategy());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void addCommandOperation() throws DeviceManagementException, OperationManagementException,
|
public void addCommandOperation() throws DeviceManagementException, OperationManagementException,
|
||||||
InvalidDeviceException {
|
InvalidDeviceException {
|
||||||
OperationManager operationManager = PowerMockito.spy(
|
OperationManager operationManager = PowerMockito.spy(
|
||||||
new OperationManagerImpl(DEVICE_TYPE, deviceManagementService));
|
new OperationManagerImpl(DEVICE_TYPE, deviceManagementService));
|
||||||
try {
|
try {
|
||||||
@ -154,7 +159,7 @@ public class OperationManagementTests extends BaseDeviceManagementTest {
|
|||||||
public void addEmptyDevicesCommandOperation() throws DeviceManagementException, OperationManagementException,
|
public void addEmptyDevicesCommandOperation() throws DeviceManagementException, OperationManagementException,
|
||||||
InvalidDeviceException {
|
InvalidDeviceException {
|
||||||
this.operationMgtService.addOperation(getOperation(new CommandOperation(), Operation.Type.COMMAND,
|
this.operationMgtService.addOperation(getOperation(new CommandOperation(), Operation.Type.COMMAND,
|
||||||
COMMAND_OPERATION_CODE), new ArrayList<>());
|
COMMAND_OPERATION_CODE), new ArrayList<>());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expectedExceptions = InvalidDeviceException.class)
|
@Test(expectedExceptions = InvalidDeviceException.class)
|
||||||
@ -205,8 +210,10 @@ public class OperationManagementTests extends BaseDeviceManagementTest {
|
|||||||
@Test(dependsOnMethods = "addConfigOperation")
|
@Test(dependsOnMethods = "addConfigOperation")
|
||||||
public void addProfileOperation() throws DeviceManagementException, OperationManagementException,
|
public void addProfileOperation() throws DeviceManagementException, OperationManagementException,
|
||||||
InvalidDeviceException {
|
InvalidDeviceException {
|
||||||
Activity activity = this.operationMgtService.addOperation(getOperation(new ProfileOperation(),
|
Operation opp = getOperation(new ProfileOperation(),
|
||||||
Operation.Type.PROFILE, PROFILE_OPERATION_CODE),
|
Operation.Type.PROFILE, PROFILE_NOTIFICATION_CODE);
|
||||||
|
opp.setPayLoad("{\"messageText\":\"xyz\",\"messageTitle\":\"abc\"}");
|
||||||
|
Activity activity = this.operationMgtService.addOperation(opp ,
|
||||||
this.deviceIds);
|
this.deviceIds);
|
||||||
validateOperationResponse(activity, ActivityStatus.Status.PENDING);
|
validateOperationResponse(activity, ActivityStatus.Status.PENDING);
|
||||||
}
|
}
|
||||||
@ -360,6 +367,35 @@ public class OperationManagementTests extends BaseDeviceManagementTest {
|
|||||||
Assert.assertTrue(operation.getType().equals(Operation.Type.POLICY));
|
Assert.assertTrue(operation.getType().equals(Operation.Type.POLICY));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test(dependsOnMethods = "getNextPendingOperation")
|
||||||
|
public void getNextNotNowOperation() throws OperationManagementException {
|
||||||
|
//This is required to introduce a delay for the update operation of the device.
|
||||||
|
try {
|
||||||
|
Thread.sleep(2000);
|
||||||
|
} catch (InterruptedException ignored) {
|
||||||
|
}
|
||||||
|
DeviceIdentifier deviceIdentifier = this.deviceIds.get(0);
|
||||||
|
Operation operation = this.operationMgtService.getNextPendingOperation(deviceIdentifier);
|
||||||
|
int operationId = operation.getId();
|
||||||
|
operation.setStatus(Operation.Status.NOTNOW);
|
||||||
|
operation.setOperationResponse("The operation is successfully completed");
|
||||||
|
this.operationMgtService.updateOperation(deviceIdentifier, operation);
|
||||||
|
//This is required to introduce a delay for the update operation of the device.
|
||||||
|
try {
|
||||||
|
Thread.sleep(2000);
|
||||||
|
} catch (InterruptedException ignored) {
|
||||||
|
}
|
||||||
|
operation = this.operationMgtService.getNextPendingOperation(deviceIdentifier);
|
||||||
|
Assert.assertTrue(operation.getId() != operationId, "Fetched the incorrect operation");
|
||||||
|
log.info("Waiting 10000ms for NotNow operation to be fetched");
|
||||||
|
try {
|
||||||
|
Thread.sleep(10000);
|
||||||
|
} catch (InterruptedException ignored) {
|
||||||
|
}
|
||||||
|
operation = this.operationMgtService.getNextPendingOperation(deviceIdentifier, 7000);
|
||||||
|
Assert.assertTrue(operation.getId() == operationId, "Fetched the incorrect NotNow operation");
|
||||||
|
}
|
||||||
|
|
||||||
@Test(dependsOnMethods = "updateOperation", expectedExceptions = OperationManagementException.class)
|
@Test(dependsOnMethods = "updateOperation", expectedExceptions = OperationManagementException.class)
|
||||||
public void getNextPendingOperationAsNonAdmin() throws OperationManagementException {
|
public void getNextPendingOperationAsNonAdmin() throws OperationManagementException {
|
||||||
startTenantFlowAsNonAdmin();
|
startTenantFlowAsNonAdmin();
|
||||||
@ -403,7 +439,7 @@ public class OperationManagementTests extends BaseDeviceManagementTest {
|
|||||||
DeviceIdentifier deviceIdentifier = this.deviceIds.get(0);
|
DeviceIdentifier deviceIdentifier = this.deviceIds.get(0);
|
||||||
List operation = this.operationMgtService.getOperationsByDeviceAndStatus(deviceIdentifier,
|
List operation = this.operationMgtService.getOperationsByDeviceAndStatus(deviceIdentifier,
|
||||||
Operation.Status.PENDING);
|
Operation.Status.PENDING);
|
||||||
Assert.assertEquals(operation.size(), 3);
|
Assert.assertEquals(operation.size(), 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(dependsOnMethods = "getOperationByDeviceAndOperationId", expectedExceptions = OperationManagementException.class)
|
@Test(dependsOnMethods = "getOperationByDeviceAndOperationId", expectedExceptions = OperationManagementException.class)
|
||||||
@ -476,8 +512,8 @@ public class OperationManagementTests extends BaseDeviceManagementTest {
|
|||||||
public void getActivityCountUpdatedAfter() throws OperationManagementException, ParseException {
|
public void getActivityCountUpdatedAfter() throws OperationManagementException, ParseException {
|
||||||
int activityCount = this.operationMgtService.getActivityCountUpdatedAfter
|
int activityCount = this.operationMgtService.getActivityCountUpdatedAfter
|
||||||
(this.commandActivityBeforeUpdatedTimestamp / 1000);
|
(this.commandActivityBeforeUpdatedTimestamp / 1000);
|
||||||
Assert.assertTrue(activityCount == 1,
|
Assert.assertTrue(activityCount == 2,
|
||||||
"The activities updated after the created should be 1");
|
"The activities updated after the created should be 2");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -531,7 +567,7 @@ public class OperationManagementTests extends BaseDeviceManagementTest {
|
|||||||
expectedExceptions = OperationManagementException.class)
|
expectedExceptions = OperationManagementException.class)
|
||||||
public void getUpdateOperationForInvalidDevice() throws DeviceManagementException, OperationManagementException {
|
public void getUpdateOperationForInvalidDevice() throws DeviceManagementException, OperationManagementException {
|
||||||
this.operationMgtService.updateOperation(new DeviceIdentifier(INVALID_DEVICE, DEVICE_TYPE),
|
this.operationMgtService.updateOperation(new DeviceIdentifier(INVALID_DEVICE, DEVICE_TYPE),
|
||||||
getOperation(new CommandOperation(), Operation.Type.COMMAND, COMMAND_OPERATION_CODE));
|
getOperation(new CommandOperation(), Operation.Type.COMMAND, COMMAND_OPERATION_CODE));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(dependsOnMethods = "getUpdateOperationForInvalidDevice",
|
@Test(dependsOnMethods = "getUpdateOperationForInvalidDevice",
|
||||||
|
|||||||
@ -19,6 +19,7 @@ package org.wso2.carbon.device.mgt.core.task;
|
|||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.mockito.Mockito;
|
||||||
import org.powermock.api.mockito.PowerMockito;
|
import org.powermock.api.mockito.PowerMockito;
|
||||||
import org.testng.Assert;
|
import org.testng.Assert;
|
||||||
import org.testng.annotations.AfterClass;
|
import org.testng.annotations.AfterClass;
|
||||||
@ -27,6 +28,8 @@ import org.testng.annotations.Test;
|
|||||||
import org.wso2.carbon.device.mgt.common.Device;
|
import org.wso2.carbon.device.mgt.common.Device;
|
||||||
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
|
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
|
||||||
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
|
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
|
||||||
|
import org.wso2.carbon.device.mgt.common.MonitoringOperation;
|
||||||
|
import org.wso2.carbon.device.mgt.common.OperationMonitoringTaskConfig;
|
||||||
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
|
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
|
||||||
import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException;
|
import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException;
|
||||||
import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManager;
|
import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManager;
|
||||||
@ -60,8 +63,6 @@ public class DeviceTaskManagerTest extends BaseDeviceManagementTest {
|
|||||||
|
|
||||||
private static final Log log = LogFactory.getLog(DeviceTaskManagerTest.class);
|
private static final Log log = LogFactory.getLog(DeviceTaskManagerTest.class);
|
||||||
private static final String NEW_DEVICE_TYPE = "NEW-DEVICE-TYPE";
|
private static final String NEW_DEVICE_TYPE = "NEW-DEVICE-TYPE";
|
||||||
private static final String DEVICE_DETAIL_RETRIEVER_OPPCONFIG = "{\"isEnabled\":true,\"frequency\":60000," +
|
|
||||||
"\"monitoringOperation\":[{\"taskName\":\"DEVICE_INFO\",\"recurrentTimes\":2}]}";
|
|
||||||
private List<DeviceIdentifier> deviceIds;
|
private List<DeviceIdentifier> deviceIds;
|
||||||
private DeviceTaskManager deviceTaskManager;
|
private DeviceTaskManager deviceTaskManager;
|
||||||
private DeviceManagementProviderService deviceMgtProviderService;
|
private DeviceManagementProviderService deviceMgtProviderService;
|
||||||
@ -76,7 +77,6 @@ public class DeviceTaskManagerTest extends BaseDeviceManagementTest {
|
|||||||
}
|
}
|
||||||
List<Device> devices = TestDataHolder.generateDummyDeviceData(this.deviceIds);
|
List<Device> devices = TestDataHolder.generateDummyDeviceData(this.deviceIds);
|
||||||
this.deviceMgtProviderService = new DeviceManagementProviderServiceImpl();
|
this.deviceMgtProviderService = new DeviceManagementProviderServiceImpl();
|
||||||
|
|
||||||
DeviceManagementServiceComponent.notifyStartupListeners();
|
DeviceManagementServiceComponent.notifyStartupListeners();
|
||||||
DeviceManagementDataHolder.getInstance().setDeviceManagementProvider(this.deviceMgtProviderService);
|
DeviceManagementDataHolder.getInstance().setDeviceManagementProvider(this.deviceMgtProviderService);
|
||||||
DeviceManagementDataHolder.getInstance()
|
DeviceManagementDataHolder.getInstance()
|
||||||
@ -152,7 +152,6 @@ public class DeviceTaskManagerTest extends BaseDeviceManagementTest {
|
|||||||
DeviceDetailsRetrieverTask deviceDetailsRetrieverTask = new DeviceDetailsRetrieverTask();
|
DeviceDetailsRetrieverTask deviceDetailsRetrieverTask = new DeviceDetailsRetrieverTask();
|
||||||
Map<String, String> map = new HashMap<>();
|
Map<String, String> map = new HashMap<>();
|
||||||
map.put("DEVICE_TYPE", TestDataHolder.TEST_DEVICE_TYPE);
|
map.put("DEVICE_TYPE", TestDataHolder.TEST_DEVICE_TYPE);
|
||||||
map.put("OPPCONFIG", DEVICE_DETAIL_RETRIEVER_OPPCONFIG);
|
|
||||||
deviceDetailsRetrieverTask.setProperties(map);
|
deviceDetailsRetrieverTask.setProperties(map);
|
||||||
deviceDetailsRetrieverTask.execute();
|
deviceDetailsRetrieverTask.execute();
|
||||||
for (DeviceIdentifier deviceId : deviceIds) {
|
for (DeviceIdentifier deviceId : deviceIds) {
|
||||||
@ -172,7 +171,6 @@ public class DeviceTaskManagerTest extends BaseDeviceManagementTest {
|
|||||||
System.setProperty("is.cloud", "true");
|
System.setProperty("is.cloud", "true");
|
||||||
Map<String, String> map = new HashMap<>();
|
Map<String, String> map = new HashMap<>();
|
||||||
map.put("DEVICE_TYPE", TestDataHolder.TEST_DEVICE_TYPE);
|
map.put("DEVICE_TYPE", TestDataHolder.TEST_DEVICE_TYPE);
|
||||||
map.put("OPPCONFIG", DEVICE_DETAIL_RETRIEVER_OPPCONFIG);
|
|
||||||
deviceDetailsRetrieverTask.setProperties(map);
|
deviceDetailsRetrieverTask.setProperties(map);
|
||||||
deviceDetailsRetrieverTask.execute();
|
deviceDetailsRetrieverTask.execute();
|
||||||
for (DeviceIdentifier deviceId : deviceIds) {
|
for (DeviceIdentifier deviceId : deviceIds) {
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>device-mgt</artifactId>
|
<artifactId>device-mgt</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>device-mgt</artifactId>
|
<artifactId>device-mgt</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
@ -15,6 +15,9 @@
|
|||||||
"iOSConfigRoot": "%https.ip%/ios-enrollment/",
|
"iOSConfigRoot": "%https.ip%/ios-enrollment/",
|
||||||
"iOSAPIRoot": "%https.ip%/ios/",
|
"iOSAPIRoot": "%https.ip%/ios/",
|
||||||
"adminService": "%https.ip%",
|
"adminService": "%https.ip%",
|
||||||
|
"deviceInfoServiceAPI" : "/api/device-mgt/%device-type%/v1.0/admin/devices/info",
|
||||||
|
"deviceLocationServiceAPI" : "/api/device-mgt/%device-type%/v1.0/admin/devices/location",
|
||||||
|
"iOSDeviceInfoServiceAPI" : "/api/device-mgt/%device-type%/v1.0/admin/devices/info",
|
||||||
"gatewayEnabled": true,
|
"gatewayEnabled": true,
|
||||||
"oauthProvider": {
|
"oauthProvider": {
|
||||||
"appRegistration": {
|
"appRegistration": {
|
||||||
|
|||||||
@ -39,25 +39,25 @@ $("#view-search-param").click(function () {
|
|||||||
$("#view-search-param").addClass('hidden');
|
$("#view-search-param").addClass('hidden');
|
||||||
});
|
});
|
||||||
|
|
||||||
var dynamicForm = '<div class="dynamic-search-param row"><div class="row"><a class="close-button-div icon fw fw-error">' +
|
var dynamicForm = '<div class="dynamic-search-param row"><div class="row"><a class="close-button-div icon fw fw-error">'
|
||||||
'</a></div><div class="form-group wr-input-control col-md-2"><label class="wr-input-label ">State</label>' +
|
+ '</a></div><div class="form-group wr-input-control col-md-2"><label class="wr-input-label ">State</label>'
|
||||||
'<select class="state no-tag form-control select2-custom"><option>AND</option><option>OR</option></select></div><div ' +
|
+ '<select class="state no-tag form-control select2-custom"><option>AND</option><option>OR</option></select></div>'
|
||||||
'class="form-group wr-input-control col-md-4"><label class="wr-input-label ">Key</label><select class=' +
|
+ '<div class="form-group wr-input-control col-md-4"><label class="wr-input-label ">Key</label><select class='
|
||||||
'"txt-key form-control select2-custom"><option value = "deviceModel">Device Model' +
|
+ '"txt-key form-control select2-custom"><option value = "deviceModel">Device Model</option><option value = '
|
||||||
'</option><option value = "PhoneNumber">Phone Number</option><option value = "vendor">Vendor</option><option value = "osVersion">OS Version' +
|
+ '"PhoneNumber">Phone Number</option><option value = "vendor">Vendor</option><option value = "osVersion">'
|
||||||
'</option><option value = "batteryLevel">Battery Level</option><option value =' +
|
+ 'OS Version</option><option value = "batteryLevel">Battery Level</option><option value ='
|
||||||
' "internalTotalMemory">Internal Total Memory</option> <option value ="internalAvailableMemory">' +
|
+ ' "internalTotalMemory">Internal Total Memory</option><option value ="internalAvailableMemory">'
|
||||||
'Internal Available Memory</option> <option value = "externalTotalMemory">External Total Memory</option>' +
|
+ 'Internal Available Memory</option><option value = "externalTotalMemory">External Total Memory</option>'
|
||||||
' <option value = "externalAvailableMemory">External Available Memory' +
|
+ '<option value = "externalAvailableMemory">External Available Memory'
|
||||||
'</option> <option value = "connectionType">Connection Type</option> <option value =' +
|
+ '</option><option value = "connectionType">Connection Type</option> <option value ='
|
||||||
' "ssid">SSID</option><option value = "cpuUsage">CPU Usage</option><option value = "totalRAMMemory">' +
|
+ ' "ssid">SSID</option><option value= "IMEI">IMEI</option><option value = "cpuUsage">CPU Usage</option><option '
|
||||||
'Total RAM Memory</option> <option value = "availableRAMMemory">Available RAM Memory</option>' +
|
+ 'value = "totalRAMMemory">Total RAM Memory</option><option value = "availableRAMMemory">Available RAM Memory'
|
||||||
'<option value = "pluggedIn">Plugged In</option></select></div>' +
|
+ '</option><option value = "pluggedIn">Plugged In</option></select></div>'
|
||||||
'<div class="form-group wr-input-control col-md-2">' +
|
+ '<div class="form-group wr-input-control col-md-2">'
|
||||||
'<label class="wr-input-label ">Operator</label><select id = "operators" class="form-control' +
|
+ '<label class="wr-input-label ">Operator</label><select id = "operators" class="form-control'
|
||||||
' select2-custom no-tag operator"><option>=</option><option> !=</option><option> %</option>' +
|
+ ' select2-custom no-tag operator"><option>=</option><option>!=</option><option>%</option>'
|
||||||
'</select></div><div class="form-group ' + 'wr-input-control col-md-4"><label class="wr-input-label">Value</label>' +
|
+ '</select></div><div class="form-group ' + 'wr-input-control col-md-4"><label class="wr-input-label">Value'
|
||||||
'<input type="text" class="form-control txt-value"/></div></div>';
|
+ '</label><input type="text" class="form-control txt-value"/></div></div>';
|
||||||
|
|
||||||
var nonNumericKeyValuePair = ["deviceModel", "vendor", "osVersion", "connectionType", "ssid", "pluggedIn"];
|
var nonNumericKeyValuePair = ["deviceModel", "vendor", "osVersion", "connectionType", "ssid", "pluggedIn"];
|
||||||
|
|
||||||
|
|||||||
@ -82,7 +82,7 @@
|
|||||||
required.</label>
|
required.</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-2 form-group wr-input-control col-fixed-right">
|
<div class="col-md-2 form-group wr-input-control col-fixed-right">
|
||||||
<button id="device-search-btn add-custom-param" class="wr-btn">Search</button>
|
<button id="device-search-btn" class="wr-btn">Search</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@ -275,10 +275,11 @@ function loadUsers() {
|
|||||||
|
|
||||||
$(data.users).each(function (index) {
|
$(data.users).each(function (index) {
|
||||||
objects.push({
|
objects.push({
|
||||||
filter: htmlspecialchars(data.users[index].username),
|
username: htmlspecialchars(data.users[index].username),
|
||||||
firstname: htmlspecialchars(data.users[index].firstname) ? htmlspecialchars(data.users[index].firstname) : "",
|
firstName: htmlspecialchars(data.users[index].firstname) ? htmlspecialchars(data.users[index].firstname) : "",
|
||||||
lastname: htmlspecialchars(data.users[index].lastname) ? htmlspecialchars(data.users[index].lastname) : "",
|
lastName: htmlspecialchars(data.users[index].lastname) ? htmlspecialchars(data.users[index].lastname) : "",
|
||||||
emailAddress: htmlspecialchars(data.users[index].emailAddress) ? htmlspecialchars(data.users[index].emailAddress) : "",
|
emailAddress: htmlspecialchars(data.users[index].emailAddress) ? htmlspecialchars(data.users[index].emailAddress) : "",
|
||||||
|
namePattern: htmlspecialchars(data.users[index].firstname) + ' ' + htmlspecialchars(data.users[index].lastname),
|
||||||
DT_RowId: "user-" + htmlspecialchars(data.users[index].username)
|
DT_RowId: "user-" + htmlspecialchars(data.users[index].username)
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
@ -304,49 +305,78 @@ function loadUsers() {
|
|||||||
//noinspection JSUnusedLocalSymbols
|
//noinspection JSUnusedLocalSymbols
|
||||||
var columns = [
|
var columns = [
|
||||||
{
|
{
|
||||||
|
targets: 0,
|
||||||
class: "remove-padding icon-only content-fill",
|
class: "remove-padding icon-only content-fill",
|
||||||
data: null,
|
data: 'username',
|
||||||
render: function (data, type, row, meta) {
|
render: function (username, type, row, meta) {
|
||||||
return '<div class="thumbnail icon viewEnabledIcon" data-url="' + context + '/user/view?username=' + data.filter + '">' +
|
return '<div class="thumbnail icon viewEnabledIcon" data-url="' + context + '/user/view?username=' + username + '">' +
|
||||||
'<i class="square-element text fw fw-user" style="font-size: 74px;"></i>' +
|
'<i class="square-element text fw fw-user" style="font-size: 74px;"></i>' +
|
||||||
'</div>';
|
'</div>';
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
targets: 1,
|
||||||
class: "",
|
class: "",
|
||||||
data: null,
|
data: 'namePattern',
|
||||||
render: function (data, type, row, meta) {
|
render: function (namePattern, type, row, meta) {
|
||||||
if (!data.firstname && !data.lastname) {
|
if (!namePattern) {
|
||||||
return "";
|
|
||||||
} else if (data.firstname && data.lastname) {
|
|
||||||
return "<h4>" + data.firstname + " " + data.lastname + "</h4>";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
class: "remove-padding-top",
|
|
||||||
data: 'filter',
|
|
||||||
render: function (filter, type, row, meta) {
|
|
||||||
return '<i class="fw-user"></i>' + filter;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
class: "remove-padding-top",
|
|
||||||
data: null,
|
|
||||||
render: function (data, type, row, meta) {
|
|
||||||
if (!data.emailAddress) {
|
|
||||||
return "";
|
return "";
|
||||||
} else {
|
} else {
|
||||||
return "<a href='mailto:" + data.emailAddress + "' ><i class='fw-mail'></i>" + data.emailAddress + "</a>";
|
return "<h4>" + namePattern + "</h4>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
targets: 2,
|
||||||
|
class: "remove-padding-top",
|
||||||
|
data: 'username',
|
||||||
|
render: function (username, type, row, meta) {
|
||||||
|
return '<i class="fw-user"></i>' + username;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
targets: 3,
|
||||||
|
class: "hidden",
|
||||||
|
data: 'firstName',
|
||||||
|
render: function (firstName, type, row, meta) {
|
||||||
|
if (!firstName) {
|
||||||
|
return "";
|
||||||
|
} else if (firstName) {
|
||||||
|
return "<h4>" + firstName + "</h4>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
targets: 4,
|
||||||
|
class: "hidden",
|
||||||
|
data: 'lastName',
|
||||||
|
render: function (lastName, type, row, meta) {
|
||||||
|
if (!lastName) {
|
||||||
|
return "";
|
||||||
|
} else if (lastName) {
|
||||||
|
return "<h4>" + lastName + "</h4>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
targets: 5,
|
||||||
|
class: "remove-padding-top",
|
||||||
|
data: 'emailAddress',
|
||||||
|
render: function (emailAddress, type, row, meta) {
|
||||||
|
if (!emailAddress) {
|
||||||
|
return "";
|
||||||
|
} else {
|
||||||
|
return "<a href='mailto:" + emailAddress + "' ><i class='fw-mail'></i>" + emailAddress + "</a>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
targets: 6,
|
||||||
class: "text-right content-fill text-left-on-grid-view no-wrap tooltip-overflow-fix",
|
class: "text-right content-fill text-left-on-grid-view no-wrap tooltip-overflow-fix",
|
||||||
data: null,
|
data: null,
|
||||||
render: function (data, type, row, meta) {
|
render: function (data, type, row, meta) {
|
||||||
var editbtn = '<a data-toggle="tooltip" data-placement="top" title="Edit User"href="' + context +
|
var editbtn = '<a data-toggle="tooltip" data-placement="top" title="Edit User"href="' + context +
|
||||||
'/user/edit?username=' + encodeURIComponent(data.filter) + '" data-username="' + data.filter + '" ' +
|
'/user/edit?username=' + encodeURIComponent(data.username) + '" data-username="' + data.username + '" ' +
|
||||||
'data-click-event="edit-form" ' +
|
'data-click-event="edit-form" ' +
|
||||||
'class="btn padding-reduce-on-grid-view edit-user-link" data-placement="top" data-toggle="tooltip" data-original-title="Edit"> ' +
|
'class="btn padding-reduce-on-grid-view edit-user-link" data-placement="top" data-toggle="tooltip" data-original-title="Edit"> ' +
|
||||||
'<span class="fw-stack"> ' +
|
'<span class="fw-stack"> ' +
|
||||||
@ -354,18 +384,18 @@ function loadUsers() {
|
|||||||
'<i class="fw fw-edit fw-stack-1x"></i>' +
|
'<i class="fw fw-edit fw-stack-1x"></i>' +
|
||||||
'</span><span class="hidden-xs hidden-on-grid-view">Edit</span></a>';
|
'</span><span class="hidden-xs hidden-on-grid-view">Edit</span></a>';
|
||||||
|
|
||||||
var resetPasswordbtn = '<a data-toggle="tooltip" data-placement="top" title="Reset Password" href="#" data-username="' + data.filter + '" data-userid="' + data.filter + '" ' +
|
var resetPasswordbtn = '<a data-toggle="tooltip" data-placement="top" title="Reset Password" href="#" data-username="' + data.username + '" data-userid="' + data.username + '" ' +
|
||||||
'data-click-event="edit-form" ' +
|
'data-click-event="edit-form" ' +
|
||||||
'onclick="javascript:resetPassword(\'' + data.filter + '\')" ' +
|
'onclick="javascript:resetPassword(\'' + data.username + '\')" ' +
|
||||||
'class="btn padding-reduce-on-grid-view remove-user-link" data-placement="top" data-toggle="tooltip" data-original-title="Reset Password">' +
|
'class="btn padding-reduce-on-grid-view remove-user-link" data-placement="top" data-toggle="tooltip" data-original-title="Reset Password">' +
|
||||||
'<span class="fw-stack">' +
|
'<span class="fw-stack">' +
|
||||||
'<i class="fw fw-circle-outline fw-stack-2x"></i>' +
|
'<i class="fw fw-circle-outline fw-stack-2x"></i>' +
|
||||||
'<i class="fw fw-key fw-stack-1x"></i>' +
|
'<i class="fw fw-key fw-stack-1x"></i>' +
|
||||||
'</span><span class="hidden-xs hidden-on-grid-view">Reset Password</span></a>';
|
'</span><span class="hidden-xs hidden-on-grid-view">Reset Password</span></a>';
|
||||||
|
|
||||||
var removebtn = '<a data-toggle="tooltip" data-placement="top" title="Remove User" href="#" data-username="' + data.filter + '" data-userid="' + data.filter + '" ' +
|
var removebtn = '<a data-toggle="tooltip" data-placement="top" title="Remove User" href="#" data-username="' + data.username + '" data-userid="' + data.username + '" ' +
|
||||||
'data-click-event="remove-form" ' +
|
'data-click-event="remove-form" ' +
|
||||||
'onclick="javascript:removeUser(\'' + data.filter + '\')" ' +
|
'onclick="javascript:removeUser(\'' + data.username + '\')" ' +
|
||||||
'class="btn padding-reduce-on-grid-view remove-user-link" data-placement="top" data-toggle="tooltip" data-original-title="Remove">' +
|
'class="btn padding-reduce-on-grid-view remove-user-link" data-placement="top" data-toggle="tooltip" data-original-title="Remove">' +
|
||||||
'<span class="fw-stack">' +
|
'<span class="fw-stack">' +
|
||||||
'<i class="fw fw-circle-outline fw-stack-2x"></i>' +
|
'<i class="fw fw-circle-outline fw-stack-2x"></i>' +
|
||||||
@ -375,20 +405,19 @@ function loadUsers() {
|
|||||||
var returnbtnSet = '';
|
var returnbtnSet = '';
|
||||||
var adminUser = $("#user-table").data("user");
|
var adminUser = $("#user-table").data("user");
|
||||||
var currentUser = $("#user-table").data("logged-user");
|
var currentUser = $("#user-table").data("logged-user");
|
||||||
if ($("#can-edit").length > 0 && adminUser !== data.filter) {
|
if ($("#can-edit").length > 0 && adminUser !== data.username) {
|
||||||
returnbtnSet = returnbtnSet + editbtn;
|
returnbtnSet = returnbtnSet + editbtn;
|
||||||
}
|
}
|
||||||
if ($("#can-reset-password").length > 0 && adminUser !== data.filter) {
|
if ($("#can-reset-password").length > 0 && adminUser !== data.username) {
|
||||||
returnbtnSet = returnbtnSet + resetPasswordbtn;
|
returnbtnSet = returnbtnSet + resetPasswordbtn;
|
||||||
}
|
}
|
||||||
if ($("#can-remove").length > 0 && adminUser !== data.filter && currentUser !== data.filter) {
|
if ($("#can-remove").length > 0 && adminUser !== data.username && currentUser !== data.username) {
|
||||||
returnbtnSet = returnbtnSet + removebtn;
|
returnbtnSet = returnbtnSet + removebtn;
|
||||||
}
|
}
|
||||||
|
|
||||||
return returnbtnSet;
|
return returnbtnSet;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|
||||||
var options = {
|
var options = {
|
||||||
@ -400,18 +429,31 @@ function loadUsers() {
|
|||||||
"sorting": false
|
"sorting": false
|
||||||
};
|
};
|
||||||
|
|
||||||
$('#user-grid').datatables_extended_serverside_paging(settings, '/api/device-mgt/v1.0/users', dataFilter, columns, fnCreatedRow, null, options);
|
$('#user-grid').datatables_extended_serverside_paging(
|
||||||
|
settings,
|
||||||
|
'/api/device-mgt/v1.0/users/search',
|
||||||
|
dataFilter,
|
||||||
|
columns,
|
||||||
|
fnCreatedRow,
|
||||||
|
null,
|
||||||
|
options
|
||||||
|
);
|
||||||
|
|
||||||
$(loadingContentView).hide();
|
$(loadingContentView).hide();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
loadUsers();
|
loadUsers();
|
||||||
|
|
||||||
$(function () {
|
$(function () {
|
||||||
$('[data-toggle="tooltip"]').tooltip()
|
$('[data-toggle="tooltip"]').tooltip()
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!$("#can-invite").val()) {
|
if (!$("#can-invite").val()) {
|
||||||
$("#invite-user-button").remove();
|
$("#invite-user-button").remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$("#user-grid_filter").hide();
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|||||||
@ -75,10 +75,25 @@
|
|||||||
id="user-grid">
|
id="user-grid">
|
||||||
<thead>
|
<thead>
|
||||||
<tr class="sort-row">
|
<tr class="sort-row">
|
||||||
|
<th class="no-sort"></th>
|
||||||
|
<th class="no-sort"></th>
|
||||||
<th>By Username</th>
|
<th>By Username</th>
|
||||||
|
<th>By First Name</th>
|
||||||
|
<th>By Last Name</th>
|
||||||
|
<th>By Email</th>
|
||||||
|
<th class="no-sort"></th>
|
||||||
|
</tr>
|
||||||
|
<tr class="filter-row filter-box">
|
||||||
|
<th class="no-sort"></th>
|
||||||
|
<th class="no-sort"></th>
|
||||||
|
<th data-for="By Username" class="text-filter"></th>
|
||||||
|
<th data-for="By First Name" class="text-filter"></th>
|
||||||
|
<th data-for="By Last Name" class="text-filter"></th>
|
||||||
|
<th data-for="By Email" class="text-filter"></th>
|
||||||
|
<th class="no-sort"></th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="bulk-action-row hidden">
|
<tr class="bulk-action-row hidden">
|
||||||
<th colspan="3">
|
<th colspan="7">
|
||||||
<ul class="tiles">
|
<ul class="tiles">
|
||||||
<li class="square">
|
<li class="square">
|
||||||
<a id="invite-user-link" href="#" data-click-event="remove-form" class="btn square-element"
|
<a id="invite-user-link" href="#" data-click-event="remove-form" class="btn square-element"
|
||||||
@ -101,6 +116,9 @@
|
|||||||
<div class="sort-title">Sort By</div>
|
<div class="sort-title">Sort By</div>
|
||||||
<div class="sort-options">
|
<div class="sort-options">
|
||||||
<a href="#">By Username</a>
|
<a href="#">By Username</a>
|
||||||
|
<a href="#">By First Name</a>
|
||||||
|
<a href="#">By Last Name</a>
|
||||||
|
<a href="#">By Email</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@ -279,10 +279,12 @@ var getProviderData = function (timeFrom, timeTo) {
|
|||||||
var serviceUrl = '/api/device-mgt/v1.0/geo-services/stats/' + deviceType + '/' + deviceId + '?from=' + timeFrom + '&to=' + timeTo;
|
var serviceUrl = '/api/device-mgt/v1.0/geo-services/stats/' + deviceType + '/' + deviceId + '?from=' + timeFrom + '&to=' + timeTo;
|
||||||
invokerUtil.get(serviceUrl,
|
invokerUtil.get(serviceUrl,
|
||||||
function (data) {
|
function (data) {
|
||||||
if(data === ""){showCurrentLocation(tableData);}
|
if (data === "") {
|
||||||
|
showCurrentLocation(tableData);
|
||||||
|
}
|
||||||
tableData = JSON.parse(data);
|
tableData = JSON.parse(data);
|
||||||
if (tableData.length === 0) {
|
if (tableData.length === 0) {
|
||||||
showCurrentLocation(tableData);
|
showCurrentLocation(tableData);
|
||||||
}
|
}
|
||||||
}, function (message) {
|
}, function (message) {
|
||||||
showCurrentLocation(tableData);
|
showCurrentLocation(tableData);
|
||||||
@ -552,5 +554,5 @@ function formatDate(date) {
|
|||||||
hours = hours ? hours : 12; // the hour '0' should be '12'
|
hours = hours ? hours : 12; // the hour '0' should be '12'
|
||||||
minutes = minutes < 10 ? '0'+minutes : minutes;
|
minutes = minutes < 10 ? '0'+minutes : minutes;
|
||||||
var strTime = hours + ':' + minutes + ' ' + ampm;
|
var strTime = hours + ':' + minutes + ' ' + ampm;
|
||||||
return date.getDate() + "/" + date.getMonth()+1 + "/" + date.getFullYear() + " " + strTime;
|
return date.getDate() + "/" + (date.getMonth() + 1) + "/" + date.getFullYear() + " " + strTime;
|
||||||
}
|
}
|
||||||
@ -91,7 +91,7 @@ function initializeGeoLocation(geoFencingEnabled) {
|
|||||||
InitSpatialObject(geoFencingEnabled);
|
InitSpatialObject(geoFencingEnabled);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
noty({text: 'Invalid Access! No device information provided to track!', type: 'error'});
|
noty({text: 'Invalid Access! No device information provided to track!', type: 'error', timeout: 10000});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -493,7 +493,7 @@ GeoAreaObject.prototype.update = function (geoJSON) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
function notifyAlert(message) {
|
function notifyAlert(message) {
|
||||||
noty({text: "Alert: " + message, type: 'warning'});
|
noty({text: "Alert: " + message, type: 'warning', timeout: 10000});
|
||||||
}
|
}
|
||||||
|
|
||||||
function Alert(type, message, level) {
|
function Alert(type, message, level) {
|
||||||
@ -505,7 +505,7 @@ function Alert(type, message, level) {
|
|||||||
this.level = 'information';
|
this.level = 'information';
|
||||||
|
|
||||||
this.notify = function () {
|
this.notify = function () {
|
||||||
noty({text: this.type + ' ' + this.message, type: level});
|
noty({text: this.type + ' ' + this.message, type: level, timeout: 10000});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -575,7 +575,7 @@ var webSocketOnAlertError = function (e) {
|
|||||||
wsURL = wsURL.replace("wss://","https://");
|
wsURL = wsURL.replace("wss://","https://");
|
||||||
var uriParts = wsURL.split("/");
|
var uriParts = wsURL.split("/");
|
||||||
wsURL = uriParts[0] + "//" + uriParts[2];
|
wsURL = uriParts[0] + "//" + uriParts[2];
|
||||||
noty({text: 'Something went wrong when trying to connect to <b>' + wsURL + '<b/>', type: 'error'});
|
noty({text: 'Something went wrong when trying to connect to <b>' + wsURL + '<b/>', type: 'error', timeout: 10000});
|
||||||
};
|
};
|
||||||
|
|
||||||
var webSocketSpatialOnOpen = function () {
|
var webSocketSpatialOnOpen = function () {
|
||||||
@ -606,7 +606,7 @@ var webSocketSpatialOnError = function (err) {
|
|||||||
wsURL = wsURL.replace("wss://","https://");
|
wsURL = wsURL.replace("wss://","https://");
|
||||||
var uriParts = wsURL.split("/");
|
var uriParts = wsURL.split("/");
|
||||||
wsURL = uriParts[0] + "//" + uriParts[2];
|
wsURL = uriParts[0] + "//" + uriParts[2];
|
||||||
noty({text: 'Something went wrong when trying to connect to <b>' + wsURL + '<b/>', type: 'error'});
|
noty({text: 'Something went wrong when trying to connect to <b>' + wsURL + '<b/>', type: 'error', timeout: 10000});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -419,7 +419,7 @@ function formatDate(date) {
|
|||||||
hours = hours ? hours : 12; // the hour '0' should be '12'
|
hours = hours ? hours : 12; // the hour '0' should be '12'
|
||||||
minutes = minutes < 10 ? '0' + minutes : minutes;
|
minutes = minutes < 10 ? '0' + minutes : minutes;
|
||||||
var strTime = hours + ':' + minutes + ' ' + ampm;
|
var strTime = hours + ':' + minutes + ' ' + ampm;
|
||||||
return date.getDate() + "/" + date.getMonth() + 1 + "/" + date.getFullYear() + " " + strTime;
|
return date.getDate() + "/" + (date.getMonth() + 1) + "/" + date.getFullYear() + " " + strTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
function timeSince(date) {
|
function timeSince(date) {
|
||||||
|
|||||||
@ -113,8 +113,7 @@
|
|||||||
conf: appConfigurations
|
conf: appConfigurations
|
||||||
},
|
},
|
||||||
uri: errorPage.definition[constants.PAGE_DEFINITION_URI],
|
uri: errorPage.definition[constants.PAGE_DEFINITION_URI],
|
||||||
uriParams: {},
|
uriParams: {}
|
||||||
user: utils.getCurrentUser()
|
|
||||||
};
|
};
|
||||||
var templateContext = {status: status, message: message};
|
var templateContext = {status: status, message: message};
|
||||||
var renderer = require("/lib/dynamic-files-renderer.js").renderer;
|
var renderer = require("/lib/dynamic-files-renderer.js").renderer;
|
||||||
|
|||||||
@ -23,7 +23,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>device-mgt</artifactId>
|
<artifactId>device-mgt</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>device-mgt</artifactId>
|
<artifactId>device-mgt</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>carbon-devicemgt</artifactId>
|
<artifactId>carbon-devicemgt</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>email-sender</artifactId>
|
<artifactId>email-sender</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>carbon-devicemgt</artifactId>
|
<artifactId>carbon-devicemgt</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
@ -22,13 +22,13 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>identity-extensions</artifactId>
|
<artifactId>identity-extensions</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>org.wso2.carbon.device.mgt.oauth.extensions</artifactId>
|
<artifactId>org.wso2.carbon.device.mgt.oauth.extensions</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<packaging>bundle</packaging>
|
<packaging>bundle</packaging>
|
||||||
<name>WSO2 Carbon - OAuth Extensions</name>
|
<name>WSO2 Carbon - OAuth Extensions</name>
|
||||||
<url>http://wso2.org</url>
|
<url>http://wso2.org</url>
|
||||||
|
|||||||
@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>identity-extensions</artifactId>
|
<artifactId>identity-extensions</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>identity-extensions</artifactId>
|
<artifactId>identity-extensions</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
@ -22,12 +22,11 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>carbon-devicemgt</artifactId>
|
<artifactId>carbon-devicemgt</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
|
||||||
<artifactId>identity-extensions</artifactId>
|
<artifactId>identity-extensions</artifactId>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
<name>WSO2 Carbon - Identity Extensions Component</name>
|
<name>WSO2 Carbon - Identity Extensions Component</name>
|
||||||
|
|||||||
@ -22,14 +22,14 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>policy-mgt</artifactId>
|
<artifactId>policy-mgt</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>org.wso2.carbon.complex.policy.decision.point</artifactId>
|
<artifactId>org.wso2.carbon.complex.policy.decision.point</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<packaging>bundle</packaging>
|
<packaging>bundle</packaging>
|
||||||
<name>WSO2 Carbon - Policy Decision Point</name>
|
<name>WSO2 Carbon - Policy Decision Point</name>
|
||||||
<description>WSO2 Carbon - Policy Decision Point</description>
|
<description>WSO2 Carbon - Policy Decision Point</description>
|
||||||
|
|||||||
@ -3,14 +3,14 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>policy-mgt</artifactId>
|
<artifactId>policy-mgt</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>org.wso2.carbon.policy.decision.point</artifactId>
|
<artifactId>org.wso2.carbon.policy.decision.point</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<packaging>bundle</packaging>
|
<packaging>bundle</packaging>
|
||||||
<name>WSO2 Carbon - Policy Decision Point</name>
|
<name>WSO2 Carbon - Policy Decision Point</name>
|
||||||
<description>WSO2 Carbon - Policy Decision Point</description>
|
<description>WSO2 Carbon - Policy Decision Point</description>
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>policy-mgt</artifactId>
|
<artifactId>policy-mgt</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@ -11,7 +11,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>org.wso2.carbon.policy.information.point</artifactId>
|
<artifactId>org.wso2.carbon.policy.information.point</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<packaging>bundle</packaging>
|
<packaging>bundle</packaging>
|
||||||
<name>WSO2 Carbon - Policy Information Point</name>
|
<name>WSO2 Carbon - Policy Information Point</name>
|
||||||
<description>WSO2 Carbon - Policy Information Point</description>
|
<description>WSO2 Carbon - Policy Information Point</description>
|
||||||
|
|||||||
@ -22,14 +22,14 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>policy-mgt</artifactId>
|
<artifactId>policy-mgt</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>org.wso2.carbon.policy.mgt.common</artifactId>
|
<artifactId>org.wso2.carbon.policy.mgt.common</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<packaging>bundle</packaging>
|
<packaging>bundle</packaging>
|
||||||
<name>WSO2 Carbon - Policy Management Common</name>
|
<name>WSO2 Carbon - Policy Management Common</name>
|
||||||
<description>WSO2 Carbon - Policy Management Common</description>
|
<description>WSO2 Carbon - Policy Management Common</description>
|
||||||
|
|||||||
@ -22,14 +22,14 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>policy-mgt</artifactId>
|
<artifactId>policy-mgt</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>org.wso2.carbon.policy.mgt.core</artifactId>
|
<artifactId>org.wso2.carbon.policy.mgt.core</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<packaging>bundle</packaging>
|
<packaging>bundle</packaging>
|
||||||
<name>WSO2 Carbon - Policy Management Core</name>
|
<name>WSO2 Carbon - Policy Management Core</name>
|
||||||
<description>WSO2 Carbon - Policy Management Core</description>
|
<description>WSO2 Carbon - Policy Management Core</description>
|
||||||
|
|||||||
@ -23,13 +23,13 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>carbon-devicemgt</artifactId>
|
<artifactId>carbon-devicemgt</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>policy-mgt</artifactId>
|
<artifactId>policy-mgt</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
<name>WSO2 Carbon - Policy Management Component</name>
|
<name>WSO2 Carbon - Policy Management Component</name>
|
||||||
<url>http://wso2.org</url>
|
<url>http://wso2.org</url>
|
||||||
|
|||||||
@ -21,7 +21,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>carbon-devicemgt</artifactId>
|
<artifactId>carbon-devicemgt</artifactId>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|||||||
@ -21,14 +21,14 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>webapp-authenticator-framework</artifactId>
|
<artifactId>webapp-authenticator-framework</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>org.wso2.carbon.webapp.authenticator.framework</artifactId>
|
<artifactId>org.wso2.carbon.webapp.authenticator.framework</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<packaging>bundle</packaging>
|
<packaging>bundle</packaging>
|
||||||
<name>WSO2 Carbon - Web Application Authenticator Framework Bundle</name>
|
<name>WSO2 Carbon - Web Application Authenticator Framework Bundle</name>
|
||||||
<description>WSO2 Carbon - Web Application Authenticator Framework Bundle</description>
|
<description>WSO2 Carbon - Web Application Authenticator Framework Bundle</description>
|
||||||
|
|||||||
@ -22,14 +22,14 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>carbon-devicemgt</artifactId>
|
<artifactId>carbon-devicemgt</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>webapp-authenticator-framework</artifactId>
|
<artifactId>webapp-authenticator-framework</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
<name>WSO2 Carbon - Webapp Authenticator Framework</name>
|
<name>WSO2 Carbon - Webapp Authenticator Framework</name>
|
||||||
<url>http://wso2.org</url>
|
<url>http://wso2.org</url>
|
||||||
|
|||||||
@ -21,14 +21,14 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>apimgt-extensions-feature</artifactId>
|
<artifactId>apimgt-extensions-feature</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>org.wso2.carbon.apimgt.application.extension.feature</artifactId>
|
<artifactId>org.wso2.carbon.apimgt.application.extension.feature</artifactId>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<name>WSO2 Carbon - API Management Application Extension Feature</name>
|
<name>WSO2 Carbon - API Management Application Extension Feature</name>
|
||||||
<url>http://wso2.org</url>
|
<url>http://wso2.org</url>
|
||||||
<description>This feature contains an implementation of a api application registration, which takes care of subscription
|
<description>This feature contains an implementation of a api application registration, which takes care of subscription
|
||||||
|
|||||||
@ -22,14 +22,14 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>apimgt-extensions-feature</artifactId>
|
<artifactId>apimgt-extensions-feature</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>org.wso2.carbon.apimgt.handler.server.feature</artifactId>
|
<artifactId>org.wso2.carbon.apimgt.handler.server.feature</artifactId>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<name>WSO2 Carbon - Device Management - APIM handler Server Feature</name>
|
<name>WSO2 Carbon - Device Management - APIM handler Server Feature</name>
|
||||||
<url>http://wso2.org</url>
|
<url>http://wso2.org</url>
|
||||||
<description>This feature contains the handler for the api authentications
|
<description>This feature contains the handler for the api authentications
|
||||||
|
|||||||
@ -21,13 +21,13 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>apimgt-extensions-feature</artifactId>
|
<artifactId>apimgt-extensions-feature</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>org.wso2.carbon.apimgt.integration.client.feature</artifactId>
|
<artifactId>org.wso2.carbon.apimgt.integration.client.feature</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
<name>WSO2 Carbon - APIM Integration Client Feature</name>
|
<name>WSO2 Carbon - APIM Integration Client Feature</name>
|
||||||
<url>http://wso2.org</url>
|
<url>http://wso2.org</url>
|
||||||
|
|||||||
@ -21,14 +21,14 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>apimgt-extensions-feature</artifactId>
|
<artifactId>apimgt-extensions-feature</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>org.wso2.carbon.apimgt.webapp.publisher.feature</artifactId>
|
<artifactId>org.wso2.carbon.apimgt.webapp.publisher.feature</artifactId>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<name>WSO2 Carbon - API Management Webapp Publisher Feature</name>
|
<name>WSO2 Carbon - API Management Webapp Publisher Feature</name>
|
||||||
<url>http://wso2.org</url>
|
<url>http://wso2.org</url>
|
||||||
<description>This feature contains an implementation of a Tomcat lifecycle listener, which takes care of publishing
|
<description>This feature contains an implementation of a Tomcat lifecycle listener, which takes care of publishing
|
||||||
|
|||||||
@ -22,14 +22,14 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>carbon-devicemgt</artifactId>
|
<artifactId>carbon-devicemgt</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>apimgt-extensions-feature</artifactId>
|
<artifactId>apimgt-extensions-feature</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
<name>WSO2 Carbon - API Management Extensions Feature</name>
|
<name>WSO2 Carbon - API Management Extensions Feature</name>
|
||||||
<url>http://wso2.org</url>
|
<url>http://wso2.org</url>
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>certificate-mgt-feature</artifactId>
|
<artifactId>certificate-mgt-feature</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>certificate-mgt-feature</artifactId>
|
<artifactId>certificate-mgt-feature</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|||||||
@ -22,14 +22,14 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>certificate-mgt-feature</artifactId>
|
<artifactId>certificate-mgt-feature</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>org.wso2.carbon.certificate.mgt.server.feature</artifactId>
|
<artifactId>org.wso2.carbon.certificate.mgt.server.feature</artifactId>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<name>WSO2 Carbon - Certificate Management Server Feature</name>
|
<name>WSO2 Carbon - Certificate Management Server Feature</name>
|
||||||
<url>http://wso2.org</url>
|
<url>http://wso2.org</url>
|
||||||
<description>This feature contains the core bundles required for back-end Certificate Management functionality
|
<description>This feature contains the core bundles required for back-end Certificate Management functionality
|
||||||
|
|||||||
@ -22,14 +22,14 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>carbon-devicemgt</artifactId>
|
<artifactId>carbon-devicemgt</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>certificate-mgt-feature</artifactId>
|
<artifactId>certificate-mgt-feature</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
<name>WSO2 Carbon - Certificate Management Feature</name>
|
<name>WSO2 Carbon - Certificate Management Feature</name>
|
||||||
<url>http://wso2.org</url>
|
<url>http://wso2.org</url>
|
||||||
|
|||||||
@ -22,14 +22,14 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>device-mgt-extensions-feature</artifactId>
|
<artifactId>device-mgt-extensions-feature</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>org.wso2.carbon.device.mgt.extensions.device.type.deployer.feature</artifactId>
|
<artifactId>org.wso2.carbon.device.mgt.extensions.device.type.deployer.feature</artifactId>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<name>WSO2 Carbon - Device Type Deployer Feature</name>
|
<name>WSO2 Carbon - Device Type Deployer Feature</name>
|
||||||
<url>http://wso2.org</url>
|
<url>http://wso2.org</url>
|
||||||
<description>WSO2 Carbon - Device Type Deployer Feature</description>
|
<description>WSO2 Carbon - Device Type Deployer Feature</description>
|
||||||
|
|||||||
@ -22,14 +22,14 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>device-mgt-extensions-feature</artifactId>
|
<artifactId>device-mgt-extensions-feature</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>org.wso2.carbon.device.mgt.extensions.push.notification.provider.fcm.feature</artifactId>
|
<artifactId>org.wso2.carbon.device.mgt.extensions.push.notification.provider.fcm.feature</artifactId>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<name>WSO2 Carbon - FCM Based Push Notification Provider Feature</name>
|
<name>WSO2 Carbon - FCM Based Push Notification Provider Feature</name>
|
||||||
<url>http://wso2.org</url>
|
<url>http://wso2.org</url>
|
||||||
<description>WSO2 Carbon - MQTT Based Push Notification Provider Feature</description>
|
<description>WSO2 Carbon - MQTT Based Push Notification Provider Feature</description>
|
||||||
|
|||||||
@ -22,14 +22,14 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>device-mgt-extensions-feature</artifactId>
|
<artifactId>device-mgt-extensions-feature</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>org.wso2.carbon.device.mgt.extensions.push.notification.provider.http.feature</artifactId>
|
<artifactId>org.wso2.carbon.device.mgt.extensions.push.notification.provider.http.feature</artifactId>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<name>WSO2 Carbon - MQTT Based Push Notification Provider Feature</name>
|
<name>WSO2 Carbon - MQTT Based Push Notification Provider Feature</name>
|
||||||
<url>http://wso2.org</url>
|
<url>http://wso2.org</url>
|
||||||
<description>WSO2 Carbon - MQTT Based Push Notification Provider Feature</description>
|
<description>WSO2 Carbon - MQTT Based Push Notification Provider Feature</description>
|
||||||
|
|||||||
@ -22,14 +22,14 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>device-mgt-extensions-feature</artifactId>
|
<artifactId>device-mgt-extensions-feature</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt.feature</artifactId>
|
<artifactId>org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt.feature</artifactId>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<name>WSO2 Carbon - MQTT Based Push Notification Provider Feature</name>
|
<name>WSO2 Carbon - MQTT Based Push Notification Provider Feature</name>
|
||||||
<url>http://wso2.org</url>
|
<url>http://wso2.org</url>
|
||||||
<description>WSO2 Carbon - MQTT Based Push Notification Provider Feature</description>
|
<description>WSO2 Carbon - MQTT Based Push Notification Provider Feature</description>
|
||||||
|
|||||||
@ -22,14 +22,14 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>device-mgt-extensions-feature</artifactId>
|
<artifactId>device-mgt-extensions-feature</artifactId>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>org.wso2.carbon.device.mgt.extensions.push.notification.provider.xmpp.feature</artifactId>
|
<artifactId>org.wso2.carbon.device.mgt.extensions.push.notification.provider.xmpp.feature</artifactId>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
<version>3.2.1-SNAPSHOT</version>
|
<version>3.2.2-SNAPSHOT</version>
|
||||||
<name>WSO2 Carbon - XMPP Based Push Notification Provider Feature</name>
|
<name>WSO2 Carbon - XMPP Based Push Notification Provider Feature</name>
|
||||||
<url>http://wso2.org</url>
|
<url>http://wso2.org</url>
|
||||||
<description>WSO2 Carbon - XMPP Based Push Notification Provider Feature</description>
|
<description>WSO2 Carbon - XMPP Based Push Notification Provider Feature</description>
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user