mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
Merge with upstream master
This commit is contained in:
commit
7f0be5f28b
1
.gitignore
vendored
1
.gitignore
vendored
@ -8,6 +8,7 @@ target
|
||||
*.ipr
|
||||
.idea
|
||||
*.ids
|
||||
.editorconfig
|
||||
# Mac crap
|
||||
.DS_Store
|
||||
|
||||
|
||||
@ -22,13 +22,13 @@
|
||||
<parent>
|
||||
<artifactId>apimgt-extensions</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.apimgt.annotations</artifactId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<packaging>bundle</packaging>
|
||||
<name>WSO2 Carbon - API Management Annotations</name>
|
||||
<description>WSO2 Carbon - API Management Custom Annotation Module</description>
|
||||
|
||||
@ -21,12 +21,12 @@
|
||||
<parent>
|
||||
<artifactId>apimgt-extensions</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<artifactId>org.wso2.carbon.apimgt.application.extension.api</artifactId>
|
||||
<packaging>war</packaging>
|
||||
<name>WSO2 Carbon - API Application Management API</name>
|
||||
|
||||
@ -22,12 +22,12 @@
|
||||
<parent>
|
||||
<artifactId>apimgt-extensions</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<artifactId>org.wso2.carbon.apimgt.application.extension</artifactId>
|
||||
<packaging>bundle</packaging>
|
||||
<name>WSO2 Carbon - API Application Management</name>
|
||||
|
||||
@ -21,13 +21,13 @@
|
||||
<parent>
|
||||
<artifactId>apimgt-extensions</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.apimgt.handlers</artifactId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<packaging>bundle</packaging>
|
||||
<name>WSO2 Carbon - API Security Handler Component</name>
|
||||
<description>WSO2 Carbon - API Management Security Handler Module</description>
|
||||
|
||||
@ -13,13 +13,13 @@
|
||||
<parent>
|
||||
<artifactId>apimgt-extensions</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.apimgt.integration.client</artifactId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<packaging>bundle</packaging>
|
||||
<name>WSO2 Carbon - API Management Integration Client</name>
|
||||
<description>WSO2 Carbon - API Management Integration Client</description>
|
||||
|
||||
@ -13,13 +13,13 @@
|
||||
<parent>
|
||||
<artifactId>apimgt-extensions</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.apimgt.integration.generated.client</artifactId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<packaging>bundle</packaging>
|
||||
<name>WSO2 Carbon - API Management Integration Generated Client</name>
|
||||
<description>WSO2 Carbon - API Management Integration Client</description>
|
||||
|
||||
@ -22,13 +22,13 @@
|
||||
<parent>
|
||||
<artifactId>apimgt-extensions</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.apimgt.webapp.publisher</artifactId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<packaging>bundle</packaging>
|
||||
<name>WSO2 Carbon - API Management Webapp Publisher</name>
|
||||
<description>WSO2 Carbon - API Management Webapp Publisher</description>
|
||||
|
||||
@ -22,13 +22,13 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>carbon-devicemgt</artifactId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>apimgt-extensions</artifactId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<packaging>pom</packaging>
|
||||
<name>WSO2 Carbon - API Management Extensions Component</name>
|
||||
<url>http://wso2.org</url>
|
||||
|
||||
@ -5,12 +5,12 @@
|
||||
<parent>
|
||||
<artifactId>application-mgt</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.device.application.mgt.addons</artifactId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<name>WSO2 Carbon - Application Management Add-Ons</name>
|
||||
<description>WSO2 Carbon - Application Management Add-Ons</description>
|
||||
<url>http://wso2.org</url>
|
||||
|
||||
@ -22,13 +22,13 @@
|
||||
<parent>
|
||||
<artifactId>application-mgt</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.device.application.mgt.api</artifactId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<packaging>war</packaging>
|
||||
<name>WSO2 Carbon - Application Management API</name>
|
||||
<description>WSO2 Carbon - Application Management API</description>
|
||||
|
||||
@ -21,13 +21,13 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>application-mgt</artifactId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.device.application.mgt.common</artifactId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<packaging>bundle</packaging>
|
||||
<name>WSO2 Carbon - Application Management Common</name>
|
||||
<description>WSO2 Carbon - Application Management Common</description>
|
||||
|
||||
@ -21,13 +21,13 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>application-mgt</artifactId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.device.application.mgt.core</artifactId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<packaging>bundle</packaging>
|
||||
<name>WSO2 Carbon - Application Management Core</name>
|
||||
<description>WSO2 Carbon - Application Management Core</description>
|
||||
|
||||
@ -24,11 +24,11 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>application-mgt</artifactId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>org.wso2.carbon.device.application.mgt.handler</artifactId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<packaging>war</packaging>
|
||||
<name>WSO2 Carbon - Application Management Authentication Handler API</name>
|
||||
<description>Proxy Service for Authentication Handling in WSO2 App Manager.</description>
|
||||
|
||||
@ -22,13 +22,13 @@
|
||||
<parent>
|
||||
<artifactId>application-mgt</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.device.application.mgt.publisher.api</artifactId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<packaging>war</packaging>
|
||||
<name>WSO2 Carbon - Application Management Publisher API</name>
|
||||
<description>WSO2 Carbon - Application Management Publisher API</description>
|
||||
|
||||
@ -24,10 +24,10 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>application-mgt</artifactId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>org.wso2.carbon.device.application.mgt.publisher.ui</artifactId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<packaging>war</packaging>
|
||||
<name>WSO2 Carbon - Application Management Publisher UI Component</name>
|
||||
<url>http://wso2.org</url>
|
||||
|
||||
@ -22,13 +22,13 @@
|
||||
<parent>
|
||||
<artifactId>application-mgt</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.device.application.mgt.store.api</artifactId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<packaging>war</packaging>
|
||||
<name>WSO2 Carbon - Application Management Store API</name>
|
||||
<description>WSO2 Carbon - Application Management Store API</description>
|
||||
|
||||
@ -24,10 +24,10 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>application-mgt</artifactId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>org.wso2.carbon.device.application.mgt.store.ui</artifactId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<packaging>war</packaging>
|
||||
<name>WSO2 Carbon - Application Management Store UI Component</name>
|
||||
<url>http://wso2.org</url>
|
||||
|
||||
@ -22,13 +22,13 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>carbon-devicemgt</artifactId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>application-mgt</artifactId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<packaging>pom</packaging>
|
||||
<name>WSO2 Carbon - Application Management Component</name>
|
||||
<description>WSO2 Carbon - Application Management Component</description>
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<artifactId>certificate-mgt</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<artifactId>certificate-mgt</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -49,6 +49,8 @@ import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
@Path("/admin/certificates")
|
||||
public class CertificateManagementAdminServiceImpl implements CertificateManagementAdminService {
|
||||
@ -242,6 +244,11 @@ public class CertificateManagementAdminServiceImpl implements CertificateManagem
|
||||
String challengeToken = certMgtService.extractChallengeToken(cert);
|
||||
|
||||
if (challengeToken != null) {
|
||||
Pattern regexPattern = Pattern.compile("[a-zA-Z0-9][a-zA-Z0-9-]+$");
|
||||
Matcher regexMatcher = regexPattern.matcher(challengeToken);
|
||||
if (regexMatcher.find()) {
|
||||
challengeToken = regexMatcher.group();
|
||||
}
|
||||
challengeToken = challengeToken.substring(challengeToken.indexOf("(") + 1).trim();
|
||||
|
||||
SCEPManager scepManager = CertificateMgtAPIUtils.getSCEPManagerService();
|
||||
|
||||
@ -21,13 +21,13 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>certificate-mgt</artifactId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.certificate.mgt.core</artifactId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<packaging>bundle</packaging>
|
||||
<name>WSO2 Carbon - Certificate Management Core</name>
|
||||
<description>WSO2 Carbon - Certificate Management Core</description>
|
||||
|
||||
@ -22,14 +22,14 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>carbon-devicemgt</artifactId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>certificate-mgt</artifactId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<packaging>pom</packaging>
|
||||
<name>WSO2 Carbon - Certificate Management Component</name>
|
||||
<url>http://wso2.org</url>
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<artifactId>device-mgt-extensions</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<artifactId>device-mgt-extensions</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<artifactId>device-mgt-extensions</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<artifactId>device-mgt-extensions</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<artifactId>device-mgt-extensions</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<artifactId>device-mgt-extensions</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<artifactId>carbon-devicemgt</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>device-mgt</artifactId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -20,7 +20,7 @@
|
||||
<parent>
|
||||
<artifactId>device-mgt</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<artifactId>device-mgt</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -32,6 +32,10 @@ public class BasicUserInfo {
|
||||
private String lastname;
|
||||
@ApiModelProperty(name = "emailAddress", value = "The email address of the user.", required = true )
|
||||
private String emailAddress;
|
||||
@ApiModelProperty(name = "createdDate", value = "User creation date." )
|
||||
private String createdDate;
|
||||
@ApiModelProperty(name = "modifiedDate", value = "User modifiedDate date." )
|
||||
private String modifiedDate;
|
||||
|
||||
public String getUsername() {
|
||||
return username;
|
||||
@ -65,4 +69,20 @@ public class BasicUserInfo {
|
||||
this.emailAddress = emailAddress;
|
||||
}
|
||||
|
||||
public String getCreatedDate() {
|
||||
return createdDate;
|
||||
}
|
||||
|
||||
public void setCreatedDate(String createdDate) {
|
||||
this.createdDate = createdDate;
|
||||
}
|
||||
|
||||
public String getModifiedDate() {
|
||||
return modifiedDate;
|
||||
}
|
||||
|
||||
public void setModifiedDate(String modifiedDate) {
|
||||
this.modifiedDate = modifiedDate;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -16,6 +16,24 @@
|
||||
* under the License.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.wso2.carbon.device.mgt.jaxrs.service.api;
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
@ -456,6 +474,82 @@ public interface DeviceManagementService {
|
||||
@HeaderParam("If-Modified-Since")
|
||||
String ifModifiedSince);
|
||||
|
||||
@GET
|
||||
@Path("/type/any/id/{id}")
|
||||
@ApiOperation(
|
||||
produces = MediaType.APPLICATION_JSON,
|
||||
httpMethod = "GET",
|
||||
value = "Getting Details of a Device",
|
||||
notes = "Get the details of a device by specifying the device identifier.",
|
||||
tags = "Device Management",
|
||||
extensions = {
|
||||
@Extension(properties = {
|
||||
@ExtensionProperty(name = Constants.SCOPE, value = "perm:devices:details")
|
||||
})
|
||||
}
|
||||
)
|
||||
@ApiResponses(
|
||||
value = {
|
||||
@ApiResponse(
|
||||
code = 200,
|
||||
message = "OK. \n Successfully fetched the details of the device.",
|
||||
response = Device.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. Empty body because the client already has the latest version" +
|
||||
" of the requested resource.\n"),
|
||||
@ApiResponse(
|
||||
code = 400,
|
||||
message = "Bad Request. \n Invalid request or validation error.",
|
||||
response = ErrorResponse.class),
|
||||
@ApiResponse(
|
||||
code = 404,
|
||||
message = "Not Found. \n A device with the specified device type and id was not found.",
|
||||
response = ErrorResponse.class),
|
||||
@ApiResponse(
|
||||
code = 500,
|
||||
message = "Internal Server Error. \n " +
|
||||
"Server error occurred while retrieving the device details.",
|
||||
response = ErrorResponse.class)
|
||||
})
|
||||
Response getDeviceByID(
|
||||
@ApiParam(
|
||||
name = "id",
|
||||
value = "The device identifier of the device you want ot get details.",
|
||||
required = true)
|
||||
@PathParam("id")
|
||||
@Size(max = 45)
|
||||
String id,
|
||||
@ApiParam(
|
||||
name = "If-Modified-Since",
|
||||
value = "Checks if the requested variant was modified, since the specified date-time.\n" +
|
||||
"Provide the value in the following format: EEE, d MMM yyyy HH:mm:ss Z\n" +
|
||||
"Example: Mon, 05 Jan 2014 15:10:00 +0200",
|
||||
required = false)
|
||||
@HeaderParam("If-Modified-Since")
|
||||
String timestamp,
|
||||
@ApiParam(
|
||||
name = "requireDeviceInfo",
|
||||
value = "Boolean flag indicating whether to include device-info \n" +
|
||||
"(location, application list etc) to the device object.",
|
||||
required = false)
|
||||
@QueryParam("requireDeviceInfo")
|
||||
boolean requireDeviceInfo);
|
||||
|
||||
|
||||
@PUT
|
||||
@Path("/{type}/{id}")
|
||||
@ApiOperation(
|
||||
@ -587,7 +681,6 @@ public interface DeviceManagementService {
|
||||
String ifModifiedSince);
|
||||
|
||||
|
||||
|
||||
@GET
|
||||
@Path("/{type}/{id}/info")
|
||||
@ApiOperation(
|
||||
@ -806,7 +899,12 @@ public interface DeviceManagementService {
|
||||
required = true)
|
||||
@PathParam("device-id")
|
||||
@Size(max = 45)
|
||||
String deviceId);
|
||||
String deviceId,
|
||||
@ApiParam(
|
||||
name = "permanentDelete",
|
||||
value = "Boolean flag indicating whether to permanently delete the device.",
|
||||
required = false)
|
||||
@QueryParam("permanentDelete") boolean permanentDelete);
|
||||
|
||||
@GET
|
||||
@Path("/{type}/{id}/features")
|
||||
|
||||
@ -14,11 +14,12 @@
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
*
|
||||
*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||
* Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
@ -32,22 +33,22 @@
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.wso2.carbon.device.mgt.jaxrs.service.api;
|
||||
|
||||
import io.swagger.annotations.SwaggerDefinition;
|
||||
import io.swagger.annotations.Info;
|
||||
import io.swagger.annotations.ExtensionProperty;
|
||||
import io.swagger.annotations.Extension;
|
||||
import io.swagger.annotations.Tag;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import io.swagger.annotations.ApiResponse;
|
||||
import io.swagger.annotations.ApiResponses;
|
||||
import io.swagger.annotations.Extension;
|
||||
import io.swagger.annotations.ExtensionProperty;
|
||||
import io.swagger.annotations.Info;
|
||||
import io.swagger.annotations.ResponseHeader;
|
||||
import io.swagger.annotations.SwaggerDefinition;
|
||||
import io.swagger.annotations.Tag;
|
||||
import org.wso2.carbon.apimgt.annotations.api.Scope;
|
||||
import org.wso2.carbon.apimgt.annotations.api.Scopes;
|
||||
import org.wso2.carbon.device.mgt.common.Feature;
|
||||
import org.wso2.carbon.device.mgt.common.configuration.mgt.PlatformConfiguration;
|
||||
import org.wso2.carbon.device.mgt.core.dto.DeviceType;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.beans.DeviceTypeList;
|
||||
@ -61,9 +62,9 @@ import javax.ws.rs.HeaderParam;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.PathParam;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.QueryParam;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
import java.util.List;
|
||||
|
||||
@SwaggerDefinition(
|
||||
info = @Info(
|
||||
@ -279,8 +280,18 @@ public interface DeviceTypeManagementService {
|
||||
value = "The device type name, such as ios, android, windows or fire-alarm.",
|
||||
required = true)
|
||||
@PathParam("type")
|
||||
@Size(max = 45)
|
||||
String type,
|
||||
@Size(max = 45) String type,
|
||||
@ApiParam(
|
||||
name = "featureType",
|
||||
value = "Type of the feature, such as operation or policy"
|
||||
)
|
||||
@QueryParam("featureType")
|
||||
String featureType,
|
||||
@ApiParam(
|
||||
name = "hidden",
|
||||
value = "true for hidden operations and false for non hidden operations"
|
||||
)
|
||||
String hidden,
|
||||
@ApiParam(
|
||||
name = "If-Modified-Since",
|
||||
value = "Checks if the requested variant was modified, since the specified date-time.\n" +
|
||||
|
||||
@ -16,6 +16,24 @@
|
||||
* under the License.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.wso2.carbon.device.mgt.jaxrs.service.impl;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
@ -305,7 +323,9 @@ public class DeviceManagementServiceImpl implements DeviceManagementService {
|
||||
@DELETE
|
||||
@Override
|
||||
@Path("/type/{device-type}/id/{device-id}")
|
||||
public Response deleteDevice(@PathParam("device-type") String deviceType, @PathParam("device-id") String deviceId) {
|
||||
public Response deleteDevice(@PathParam("device-type") String deviceType,
|
||||
@PathParam("device-id") String deviceId,
|
||||
@QueryParam("permanentDelete") boolean permanentDelete) {
|
||||
DeviceManagementProviderService deviceManagementProviderService =
|
||||
DeviceMgtAPIUtils.getDeviceManagementService();
|
||||
try {
|
||||
@ -315,13 +335,19 @@ public class DeviceManagementServiceImpl implements DeviceManagementService {
|
||||
return Response.status(Response.Status.NOT_FOUND).build();
|
||||
}
|
||||
|
||||
boolean response = deviceManagementProviderService.disenrollDevice(deviceIdentifier);
|
||||
boolean response;
|
||||
|
||||
if (permanentDelete) {
|
||||
response = deviceManagementProviderService.deleteDevice(deviceIdentifier);
|
||||
} else {
|
||||
response = deviceManagementProviderService.disenrollDevice(deviceIdentifier);
|
||||
}
|
||||
return Response.status(Response.Status.OK).entity(response).build();
|
||||
|
||||
} catch (DeviceManagementException e) {
|
||||
String msg = "Error encountered while deleting device of type : " + deviceType + " and " +
|
||||
"ID : " + deviceId;
|
||||
log.error(msg);
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.BAD_REQUEST).entity(
|
||||
new ErrorResponse.ErrorResponseBuilder().setMessage(msg).build()
|
||||
).build();
|
||||
@ -447,6 +473,77 @@ public class DeviceManagementServiceImpl implements DeviceManagementService {
|
||||
return Response.status(Response.Status.OK).entity(device).build();
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("/type/any/id/{id}")
|
||||
@Override
|
||||
public Response getDeviceByID(
|
||||
@PathParam("id") @Size(max = 45) String id,
|
||||
@HeaderParam("If-Modified-Since") String ifModifiedSince,
|
||||
@QueryParam("requireDeviceInfo") boolean requireDeviceInfo) {
|
||||
Device device;
|
||||
try {
|
||||
RequestValidationUtil.validateDeviceIdentifier("any", id);
|
||||
DeviceManagementProviderService dms = DeviceMgtAPIUtils.getDeviceManagementService();
|
||||
DeviceAccessAuthorizationService deviceAccessAuthorizationService =
|
||||
DeviceMgtAPIUtils.getDeviceAccessAuthorizationService();
|
||||
|
||||
// this is the user who initiates the request
|
||||
String authorizedUser = CarbonContext.getThreadLocalCarbonContext().getUsername();
|
||||
|
||||
Date sinceDate = null;
|
||||
if (ifModifiedSince != null && !ifModifiedSince.isEmpty()) {
|
||||
SimpleDateFormat format = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z");
|
||||
try {
|
||||
sinceDate = format.parse(ifModifiedSince);
|
||||
} catch (ParseException e) {
|
||||
String message = "Error occurred while parse the since date.Invalid date string is provided in " +
|
||||
"'If-Modified-Since' header";
|
||||
log.error(message, e);
|
||||
return Response.status(Response.Status.BAD_REQUEST).entity(
|
||||
new ErrorResponse.ErrorResponseBuilder().setMessage("Invalid date " +
|
||||
"string is provided in 'If-Modified-Since' header").build()).build();
|
||||
}
|
||||
}
|
||||
if (sinceDate != null) {
|
||||
device = dms.getDevice(id, sinceDate, requireDeviceInfo);
|
||||
if (device == null) {
|
||||
String message = "No device is modified after the timestamp provided in 'If-Modified-Since' header";
|
||||
log.error(message);
|
||||
return Response.status(Response.Status.NOT_MODIFIED).entity("No device is modified " +
|
||||
"after the timestamp provided in 'If-Modified-Since' header").build();
|
||||
}
|
||||
} else {
|
||||
device = dms.getDevice(id, requireDeviceInfo);
|
||||
}
|
||||
if (device == null) {
|
||||
String message = "Device does not exist with id '" + id + "'";
|
||||
log.error(message);
|
||||
return Response.status(Response.Status.NOT_FOUND).entity(
|
||||
new ErrorResponse.ErrorResponseBuilder().setCode(404l).setMessage(message).build()).build();
|
||||
}
|
||||
DeviceIdentifier deviceIdentifier = new DeviceIdentifier(id, device.getType());
|
||||
// check whether the user is authorized
|
||||
if (!deviceAccessAuthorizationService.isUserAuthorized(deviceIdentifier, authorizedUser)) {
|
||||
String message = "User '" + authorizedUser + "' is not authorized to retrieve the given " +
|
||||
"device id '" + id + "'";
|
||||
log.error(message);
|
||||
return Response.status(Response.Status.UNAUTHORIZED).entity(
|
||||
new ErrorResponse.ErrorResponseBuilder().setCode(401l).setMessage(message).build()).build();
|
||||
}
|
||||
} catch (DeviceManagementException e) {
|
||||
String message = "Error occurred while fetching the device information.";
|
||||
log.error(message, e);
|
||||
return Response.serverError().entity(
|
||||
new ErrorResponse.ErrorResponseBuilder().setMessage(message).build()).build();
|
||||
} catch (DeviceAccessAuthorizationException e) {
|
||||
String message = "Error occurred while checking the device authorization.";
|
||||
log.error(message, e);
|
||||
return Response.serverError().entity(
|
||||
new ErrorResponse.ErrorResponseBuilder().setMessage(message).build()).build();
|
||||
}
|
||||
return Response.status(Response.Status.OK).entity(device).build();
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("/{type}/{id}/location")
|
||||
@Override
|
||||
|
||||
@ -14,11 +14,12 @@
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
*
|
||||
*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||
* Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
@ -31,10 +32,10 @@
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*
|
||||
*/
|
||||
package org.wso2.carbon.device.mgt.jaxrs.service.impl;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.device.mgt.common.exceptions.DeviceManagementException;
|
||||
@ -55,6 +56,7 @@ import javax.ws.rs.GET;
|
||||
import javax.ws.rs.HeaderParam;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.PathParam;
|
||||
import javax.ws.rs.QueryParam;
|
||||
import javax.ws.rs.core.Response;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@ -107,27 +109,42 @@ public class DeviceTypeManagementServiceImpl implements DeviceTypeManagementServ
|
||||
@Override
|
||||
@Path("/{type}/features")
|
||||
public Response getFeatures(@PathParam("type") @Size(max = 45) String type,
|
||||
@QueryParam("featureType") String featureType,
|
||||
@QueryParam("hidden") String hidden,
|
||||
@HeaderParam("If-Modified-Since") String ifModifiedSince) {
|
||||
List<Feature> features = new ArrayList<>();
|
||||
List<Feature> features;
|
||||
DeviceManagementProviderService dms;
|
||||
try {
|
||||
dms = DeviceMgtAPIUtils.getDeviceManagementService();
|
||||
FeatureManager fm;
|
||||
try {
|
||||
fm = dms.getFeatureManager(type);
|
||||
} catch (DeviceTypeNotFoundException e) {
|
||||
return Response.status(Response.Status.NOT_FOUND).entity(
|
||||
new ErrorResponse.ErrorResponseBuilder()
|
||||
.setMessage("No device type found with name '" + type + "'").build()).build();
|
||||
if (StringUtils.isEmpty(type)) {
|
||||
return Response.status(Response.Status.BAD_REQUEST).entity(
|
||||
new ErrorResponse.ErrorResponseBuilder().setMessage("Type cannot be empty.").build()).build();
|
||||
}
|
||||
if (fm != null) {
|
||||
features = fm.getFeatures();
|
||||
dms = DeviceMgtAPIUtils.getDeviceManagementService();
|
||||
FeatureManager fm = dms.getFeatureManager(type);
|
||||
|
||||
if (fm == null) {
|
||||
return Response.status(Response.Status.NOT_FOUND).entity(
|
||||
new ErrorResponse.ErrorResponseBuilder().setMessage("No feature manager is " +
|
||||
"registered with the given type '" + type + "'").build()).build();
|
||||
}
|
||||
|
||||
if (StringUtils.isEmpty(hidden)) {
|
||||
features = fm.getFeatures(featureType);
|
||||
} else {
|
||||
features = fm.getFeatures(featureType, Boolean.valueOf(hidden));
|
||||
}
|
||||
} catch (DeviceManagementException e) {
|
||||
String msg = "Error occurred while retrieving the list of features of '" + type + "' device type";
|
||||
String msg = "Error occurred while retrieving the list of [" + type + "] features with params " +
|
||||
"{featureType: " + featureType + ", hidden: " + hidden + "}";
|
||||
log.error(msg, e);
|
||||
return Response.serverError().entity(
|
||||
new ErrorResponse.ErrorResponseBuilder().setMessage(msg).build()).build();
|
||||
} catch (DeviceTypeNotFoundException e) {
|
||||
String msg = "No device type found with name '" + type + "'";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.NOT_FOUND).entity(
|
||||
new ErrorResponse.ErrorResponseBuilder()
|
||||
.setMessage(msg).build()).build();
|
||||
}
|
||||
return Response.status(Response.Status.OK).entity(features).build();
|
||||
}
|
||||
|
||||
@ -94,6 +94,7 @@ import java.net.URISyntaxException;
|
||||
import java.security.SecureRandom;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.Instant;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
@ -143,10 +144,16 @@ public class UserManagementServiceImpl implements UserManagementService {
|
||||
"was refused.").build()).build();
|
||||
}
|
||||
|
||||
String initialUserPassword = this.generateInitialUserPassword();
|
||||
String initialUserPassword;
|
||||
if (userInfo.getPassword() != null) {
|
||||
initialUserPassword = userInfo.getPassword();
|
||||
} else {
|
||||
initialUserPassword = this.generateInitialUserPassword();
|
||||
}
|
||||
|
||||
Map<String, String> defaultUserClaims =
|
||||
this.buildDefaultUserClaims(userInfo.getFirstname(), userInfo.getLastname(),
|
||||
userInfo.getEmailAddress());
|
||||
userInfo.getEmailAddress(), true);
|
||||
// calling addUser method of carbon user api
|
||||
List<String> tmpRoles = new ArrayList<>();
|
||||
String[] userInfoRoles = userInfo.getRoles();
|
||||
@ -273,7 +280,7 @@ public class UserManagementServiceImpl implements UserManagementService {
|
||||
|
||||
Map<String, String> defaultUserClaims =
|
||||
this.buildDefaultUserClaims(userInfo.getFirstname(), userInfo.getLastname(),
|
||||
userInfo.getEmailAddress());
|
||||
userInfo.getEmailAddress(), false);
|
||||
if (StringUtils.isNotEmpty(userInfo.getPassword())) {
|
||||
// Decoding Base64 encoded password
|
||||
userStoreManager.updateCredentialByAdmin(username,
|
||||
@ -421,11 +428,7 @@ public class UserManagementServiceImpl implements UserManagementService {
|
||||
userList = new ArrayList<>(users.length);
|
||||
BasicUserInfo user;
|
||||
for (String username : users) {
|
||||
user = new BasicUserInfo();
|
||||
user.setUsername(username);
|
||||
user.setEmailAddress(getClaimValue(username, Constants.USER_CLAIM_EMAIL_ADDRESS));
|
||||
user.setFirstname(getClaimValue(username, Constants.USER_CLAIM_FIRST_NAME));
|
||||
user.setLastname(getClaimValue(username, Constants.USER_CLAIM_LAST_NAME));
|
||||
user = getBasicUserInfo(username);
|
||||
userList.add(user);
|
||||
}
|
||||
|
||||
@ -893,11 +896,17 @@ public class UserManagementServiceImpl implements UserManagementService {
|
||||
}
|
||||
}
|
||||
|
||||
private Map<String, String> buildDefaultUserClaims(String firstName, String lastName, String emailAddress) {
|
||||
private Map<String, String> buildDefaultUserClaims(String firstName, String lastName, String emailAddress,
|
||||
boolean isFresh) {
|
||||
Map<String, String> defaultUserClaims = new HashMap<>();
|
||||
defaultUserClaims.put(Constants.USER_CLAIM_FIRST_NAME, firstName);
|
||||
defaultUserClaims.put(Constants.USER_CLAIM_LAST_NAME, lastName);
|
||||
defaultUserClaims.put(Constants.USER_CLAIM_EMAIL_ADDRESS, emailAddress);
|
||||
if (isFresh) {
|
||||
defaultUserClaims.put(Constants.USER_CLAIM_CREATED, String.valueOf(Instant.now().getEpochSecond()));
|
||||
} else {
|
||||
defaultUserClaims.put(Constants.USER_CLAIM_MODIFIED, String.valueOf(Instant.now().getEpochSecond()));
|
||||
}
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Default claim map is created for new user: " + defaultUserClaims.toString());
|
||||
}
|
||||
@ -930,6 +939,8 @@ public class UserManagementServiceImpl implements UserManagementService {
|
||||
userInfo.setEmailAddress(getClaimValue(username, Constants.USER_CLAIM_EMAIL_ADDRESS));
|
||||
userInfo.setFirstname(getClaimValue(username, Constants.USER_CLAIM_FIRST_NAME));
|
||||
userInfo.setLastname(getClaimValue(username, Constants.USER_CLAIM_LAST_NAME));
|
||||
userInfo.setCreatedDate(getClaimValue(username, Constants.USER_CLAIM_CREATED));
|
||||
userInfo.setModifiedDate(getClaimValue(username, Constants.USER_CLAIM_MODIFIED));
|
||||
return userInfo;
|
||||
}
|
||||
|
||||
|
||||
@ -26,6 +26,8 @@ public class Constants {
|
||||
public static final String USER_CLAIM_EMAIL_ADDRESS = "http://wso2.org/claims/emailaddress";
|
||||
public static final String USER_CLAIM_FIRST_NAME = "http://wso2.org/claims/givenname";
|
||||
public static final String USER_CLAIM_LAST_NAME = "http://wso2.org/claims/lastname";
|
||||
public static final String USER_CLAIM_CREATED = "http://wso2.org/claims/created";
|
||||
public static final String USER_CLAIM_MODIFIED = "http://wso2.org/claims/modified";
|
||||
public static final String PRIMARY_USER_STORE = "PRIMARY";
|
||||
public static final String DEFAULT_STREAM_VERSION = "1.0.0";
|
||||
public static final String SCOPE = "scope";
|
||||
|
||||
@ -154,9 +154,9 @@ public class DeviceAgentServiceTest {
|
||||
public void testEnrollExistingDevice() throws DeviceManagementException {
|
||||
PowerMockito.stub(PowerMockito.method(DeviceMgtAPIUtils.class, "getDeviceManagementService"))
|
||||
.toReturn(this.deviceManagementProviderService);
|
||||
Mockito.when(this.deviceManagementProviderService.getDevice(Mockito.any())).thenReturn(demoDevice);
|
||||
Mockito.when(this.deviceManagementProviderService.getDevice((DeviceIdentifier) Mockito.any())).thenReturn(demoDevice);
|
||||
Device device = DeviceMgtAPITestHelper.generateDummyDevice(TEST_DEVICE_TYPE, TEST_DEVICE_IDENTIFIER);
|
||||
Mockito.when(this.deviceManagementProviderService.getDevice(Mockito.any())).thenReturn(device);
|
||||
Mockito.when(this.deviceManagementProviderService.getDevice((DeviceIdentifier) Mockito.any())).thenReturn(device);
|
||||
Response response = this.deviceAgentService.enrollDevice(device);
|
||||
Assert.assertNotNull(response, "Response should not be null");
|
||||
Assert.assertEquals(response.getStatus(), Response.Status.BAD_REQUEST.getStatusCode(),
|
||||
@ -173,7 +173,7 @@ public class DeviceAgentServiceTest {
|
||||
EnrolmentInfo enrolmentInfo = demoDevice.getEnrolmentInfo();
|
||||
enrolmentInfo.setStatus(EnrolmentInfo.Status.INACTIVE);
|
||||
demoDevice.setEnrolmentInfo(enrolmentInfo);
|
||||
Mockito.when(this.deviceManagementProviderService.getDevice(Mockito.any())).thenReturn(demoDevice);
|
||||
Mockito.when(this.deviceManagementProviderService.getDevice((DeviceIdentifier) Mockito.any())).thenReturn(demoDevice);
|
||||
Response response = this.deviceAgentService.enrollDevice(demoDevice);
|
||||
Assert.assertNotNull(response, "Response should not be null");
|
||||
Assert.assertEquals(response.getStatus(), Response.Status.OK.getStatusCode(),
|
||||
@ -191,7 +191,7 @@ public class DeviceAgentServiceTest {
|
||||
EnrolmentInfo enrolmentInfo = device.getEnrolmentInfo();
|
||||
enrolmentInfo.setStatus(EnrolmentInfo.Status.INACTIVE);
|
||||
device.setEnrolmentInfo(enrolmentInfo);
|
||||
Mockito.when(this.deviceManagementProviderService.getDevice(Mockito.any())).thenReturn(device);
|
||||
Mockito.when(this.deviceManagementProviderService.getDevice((DeviceIdentifier) Mockito.any())).thenReturn(device);
|
||||
Mockito.when(this.deviceManagementProviderService.enrollDevice(Mockito.any()))
|
||||
.thenThrow(new DeviceManagementException());
|
||||
Response response = this.deviceAgentService.enrollDevice(device);
|
||||
@ -240,7 +240,7 @@ public class DeviceAgentServiceTest {
|
||||
public void testUpdateDeviceWithDeviceManagementException() throws DeviceManagementException {
|
||||
PowerMockito.stub(PowerMockito.method(DeviceMgtAPIUtils.class, "getDeviceManagementService"))
|
||||
.toReturn(this.deviceManagementProviderService);
|
||||
Mockito.when(this.deviceManagementProviderService.getDevice(Mockito.any())).thenThrow(new
|
||||
Mockito.when(this.deviceManagementProviderService.getDevice((DeviceIdentifier) Mockito.any())).thenThrow(new
|
||||
DeviceManagementException());
|
||||
Device testDevice = DeviceMgtAPITestHelper.generateDummyDevice(TEST_DEVICE_TYPE, TEST_DEVICE_IDENTIFIER);
|
||||
Response response = deviceAgentService.updateDevice(TEST_DEVICE_TYPE, TEST_DEVICE_IDENTIFIER, testDevice);
|
||||
@ -264,7 +264,7 @@ public class DeviceAgentServiceTest {
|
||||
public void testUpdateDeviceWithNonExistingDevice() throws DeviceManagementException {
|
||||
PowerMockito.stub(PowerMockito.method(DeviceMgtAPIUtils.class, "getDeviceManagementService"))
|
||||
.toReturn(this.deviceManagementProviderService);
|
||||
Mockito.when(this.deviceManagementProviderService.getDevice(Mockito.any())).thenReturn(null);
|
||||
Mockito.when(this.deviceManagementProviderService.getDevice((DeviceIdentifier) Mockito.any())).thenReturn(null);
|
||||
Device testDevice = DeviceMgtAPITestHelper.generateDummyDevice(TEST_DEVICE_TYPE, TEST_DEVICE_IDENTIFIER);
|
||||
Response response = deviceAgentService.updateDevice(TEST_DEVICE_TYPE, TEST_DEVICE_IDENTIFIER, testDevice);
|
||||
Assert.assertNotNull(response, "Response should not be null");
|
||||
@ -281,7 +281,7 @@ public class DeviceAgentServiceTest {
|
||||
PowerMockito.stub(PowerMockito.method(DeviceMgtAPIUtils.class,
|
||||
"getDeviceAccessAuthorizationService")).toReturn(this.deviceAccessAuthorizationService);
|
||||
Device testDevice = DeviceMgtAPITestHelper.generateDummyDevice(TEST_DEVICE_TYPE, TEST_DEVICE_IDENTIFIER);
|
||||
Mockito.when(this.deviceManagementProviderService.getDevice(Mockito.any())).thenReturn(testDevice);
|
||||
Mockito.when(this.deviceManagementProviderService.getDevice((DeviceIdentifier) Mockito.any())).thenReturn(testDevice);
|
||||
Mockito.when(this.deviceAccessAuthorizationService.isUserAuthorized(Mockito.any(DeviceIdentifier.class)))
|
||||
.thenThrow(new DeviceAccessAuthorizationException());
|
||||
Response response = deviceAgentService.updateDevice(TEST_DEVICE_TYPE, TEST_DEVICE_IDENTIFIER, testDevice);
|
||||
@ -300,7 +300,7 @@ public class DeviceAgentServiceTest {
|
||||
PowerMockito.stub(PowerMockito.method(DeviceMgtAPIUtils.class,
|
||||
"getDeviceAccessAuthorizationService")).toReturn(this.deviceAccessAuthorizationService);
|
||||
Device testDevice = DeviceMgtAPITestHelper.generateDummyDevice(TEST_DEVICE_TYPE, TEST_DEVICE_IDENTIFIER);
|
||||
Mockito.when(this.deviceManagementProviderService.getDevice(Mockito.any())).thenReturn(testDevice);
|
||||
Mockito.when(this.deviceManagementProviderService.getDevice((DeviceIdentifier) Mockito.any())).thenReturn(testDevice);
|
||||
Mockito.when(this.deviceAccessAuthorizationService.isUserAuthorized(Mockito.any(DeviceIdentifier.class)))
|
||||
.thenReturn(false);
|
||||
Response response = deviceAgentService.updateDevice(TEST_DEVICE_TYPE, TEST_DEVICE_IDENTIFIER, testDevice);
|
||||
@ -321,7 +321,7 @@ public class DeviceAgentServiceTest {
|
||||
PowerMockito.stub(PowerMockito.method(DeviceMgtAPIUtils.class,
|
||||
"getAuthenticatedUser")).toReturn(AUTHENTICATED_USER);
|
||||
Device testDevice = DeviceMgtAPITestHelper.generateDummyDevice(TEST_DEVICE_TYPE, TEST_DEVICE_IDENTIFIER);
|
||||
Mockito.when(this.deviceManagementProviderService.getDevice(Mockito.any())).thenReturn(testDevice);
|
||||
Mockito.when(this.deviceManagementProviderService.getDevice((DeviceIdentifier) Mockito.any())).thenReturn(testDevice);
|
||||
Mockito.when(this.deviceAccessAuthorizationService.isUserAuthorized(Mockito.any(DeviceIdentifier.class)))
|
||||
.thenReturn(true);
|
||||
Mockito.when(this.deviceManagementProviderService.modifyEnrollment(Mockito.any())).thenReturn(false);
|
||||
@ -343,7 +343,7 @@ public class DeviceAgentServiceTest {
|
||||
PowerMockito.stub(PowerMockito.method(DeviceMgtAPIUtils.class,
|
||||
"getAuthenticatedUser")).toReturn(AUTHENTICATED_USER);
|
||||
Device testDevice = DeviceMgtAPITestHelper.generateDummyDevice(TEST_DEVICE_TYPE, TEST_DEVICE_IDENTIFIER);
|
||||
Mockito.when(this.deviceManagementProviderService.getDevice(Mockito.any())).thenReturn(testDevice);
|
||||
Mockito.when(this.deviceManagementProviderService.getDevice((DeviceIdentifier) Mockito.any())).thenReturn(testDevice);
|
||||
Mockito.when(this.deviceAccessAuthorizationService.isUserAuthorized(Mockito.any(DeviceIdentifier.class)))
|
||||
.thenReturn(true);
|
||||
Mockito.when(this.deviceManagementProviderService.modifyEnrollment(Mockito.any()))
|
||||
@ -365,7 +365,7 @@ public class DeviceAgentServiceTest {
|
||||
PowerMockito.stub(PowerMockito.method(DeviceMgtAPIUtils.class,
|
||||
"getAuthenticatedUser")).toReturn(AUTHENTICATED_USER);
|
||||
Device testDevice = DeviceMgtAPITestHelper.generateDummyDevice(TEST_DEVICE_TYPE, TEST_DEVICE_IDENTIFIER);
|
||||
Mockito.when(this.deviceManagementProviderService.getDevice(Mockito.any())).thenReturn(testDevice);
|
||||
Mockito.when(this.deviceManagementProviderService.getDevice((DeviceIdentifier) Mockito.any())).thenReturn(testDevice);
|
||||
Mockito.when(this.deviceAccessAuthorizationService.isUserAuthorized(Mockito.any(DeviceIdentifier.class)))
|
||||
.thenReturn(true);
|
||||
Mockito.when(this.deviceManagementProviderService.modifyEnrollment(Mockito.any())).thenReturn((true));
|
||||
|
||||
@ -1,10 +1,28 @@
|
||||
/*
|
||||
* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* you may obtain a copy of the License at
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
@ -31,6 +49,7 @@ import org.testng.annotations.BeforeClass;
|
||||
import org.testng.annotations.ObjectFactory;
|
||||
import org.testng.annotations.Test;
|
||||
import org.wso2.carbon.context.CarbonContext;
|
||||
import org.wso2.carbon.device.mgt.common.Device;
|
||||
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
|
||||
import org.wso2.carbon.device.mgt.common.exceptions.DeviceManagementException;
|
||||
import org.wso2.carbon.device.mgt.common.exceptions.DeviceTypeNotFoundException;
|
||||
@ -51,13 +70,17 @@ import org.wso2.carbon.device.mgt.core.search.mgt.SearchMgtException;
|
||||
import org.wso2.carbon.device.mgt.core.search.mgt.impl.SearchManagerServiceImpl;
|
||||
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
|
||||
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderServiceImpl;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.service.api.DeviceAgentService;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.service.api.DeviceManagementService;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.service.impl.util.DeviceMgtAPITestHelper;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.util.DeviceMgtAPIUtils;
|
||||
import org.wso2.carbon.policy.mgt.common.PolicyManagementException;
|
||||
import org.wso2.carbon.policy.mgt.core.PolicyManagerService;
|
||||
import org.wso2.carbon.utils.multitenancy.MultitenantUtils;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.UUID;
|
||||
import javax.ws.rs.core.Response;
|
||||
@ -74,6 +97,7 @@ import static org.mockito.MockitoAnnotations.initMocks;
|
||||
public class DeviceManagementServiceImplTest {
|
||||
|
||||
private static final Log log = LogFactory.getLog(DeviceManagementServiceImplTest.class);
|
||||
private static final String TEST_DEVICE_IDENTIFIER = "TEST_DEVICE_IDENTIFIER";
|
||||
private static final String TEST_DEVICE_TYPE = "TEST-DEVICE-TYPE";
|
||||
private static final String TEST_DEVICE_NAME = "TEST-DEVICE";
|
||||
private static final String DEFAULT_USERNAME = "admin";
|
||||
@ -85,6 +109,7 @@ public class DeviceManagementServiceImplTest {
|
||||
private DeviceManagementService deviceManagementService;
|
||||
private DeviceAccessAuthorizationService deviceAccessAuthorizationService;
|
||||
private DeviceManagementProviderService deviceManagementProviderService;
|
||||
private static Device demoDevice;
|
||||
|
||||
@ObjectFactory
|
||||
public IObjectFactory getObjectFactory() {
|
||||
@ -99,6 +124,7 @@ public class DeviceManagementServiceImplTest {
|
||||
.mock(DeviceManagementProviderServiceImpl.class, Mockito.RETURNS_MOCKS);
|
||||
this.deviceManagementService = new DeviceManagementServiceImpl();
|
||||
this.deviceAccessAuthorizationService = Mockito.mock(DeviceAccessAuthorizationServiceImpl.class);
|
||||
demoDevice = DeviceMgtAPITestHelper.generateDummyDevice(TEST_DEVICE_TYPE, TEST_DEVICE_IDENTIFIER);
|
||||
}
|
||||
|
||||
@Test(description = "Testing if the device is enrolled when the device is enrolled.")
|
||||
@ -180,6 +206,103 @@ public class DeviceManagementServiceImplTest {
|
||||
Assert.assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
|
||||
}
|
||||
|
||||
@Test(description = "Testing get devices by identifier with correct request.")
|
||||
public void testGetDeviceByID() throws DeviceAccessAuthorizationException {
|
||||
String ifModifiedSince = new SimpleDateFormat(DEFAULT_DATE_FORMAT).format(new Date());
|
||||
PowerMockito.stub(PowerMockito.method(DeviceMgtAPIUtils.class, "getDeviceManagementService"))
|
||||
.toReturn(this.deviceManagementProviderService);
|
||||
PowerMockito.stub(PowerMockito.method(DeviceMgtAPIUtils.class, "getAuthenticatedUser"))
|
||||
.toReturn(DEFAULT_USERNAME);
|
||||
CarbonContext carbonContext = Mockito.mock(CarbonContext.class, Mockito.RETURNS_MOCKS);
|
||||
DeviceAccessAuthorizationService deviceAccessAuthorizationService =
|
||||
Mockito.mock(DeviceAccessAuthorizationService.class, Mockito.RETURNS_MOCKS);
|
||||
PowerMockito.stub(PowerMockito.method(DeviceMgtAPIUtils.class,
|
||||
"getDeviceAccessAuthorizationService"))
|
||||
.toReturn(deviceAccessAuthorizationService);
|
||||
PowerMockito.stub(PowerMockito.method(CarbonContext.class, "getThreadLocalCarbonContext"))
|
||||
.toReturn(carbonContext);
|
||||
Mockito.when(carbonContext.getTenantId()).thenReturn(-1234);
|
||||
Mockito.when(carbonContext.getUsername()).thenReturn(DEFAULT_USERNAME);
|
||||
Mockito.when(deviceAccessAuthorizationService.isUserAuthorized(Mockito.any(DeviceIdentifier.class),
|
||||
Mockito.anyString())).thenReturn(true);
|
||||
|
||||
Response response = this.deviceManagementService
|
||||
.getDeviceByID(TEST_DEVICE_IDENTIFIER, ifModifiedSince,true);
|
||||
Assert.assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
|
||||
response = this.deviceManagementService
|
||||
.getDeviceByID(TEST_DEVICE_IDENTIFIER, null,true);
|
||||
Assert.assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
|
||||
|
||||
}
|
||||
|
||||
@Test(description = "Testing get devices by identifier when unauthorized user.")
|
||||
public void testGetDeviceByIDWithErroneousUnauthorizedException()
|
||||
throws DeviceAccessAuthorizationException {
|
||||
String ifModifiedSince = new SimpleDateFormat(DEFAULT_DATE_FORMAT).format(new Date());
|
||||
PowerMockito.stub(PowerMockito.method(DeviceMgtAPIUtils.class, "getDeviceManagementService"))
|
||||
.toReturn(this.deviceManagementProviderService);
|
||||
PowerMockito.stub(PowerMockito.method(DeviceMgtAPIUtils.class, "getAuthenticatedUser"))
|
||||
.toReturn(DEFAULT_USERNAME);
|
||||
CarbonContext carbonContext = Mockito.mock(CarbonContext.class, Mockito.RETURNS_MOCKS);
|
||||
DeviceAccessAuthorizationService deviceAccessAuthorizationService =
|
||||
Mockito.mock(DeviceAccessAuthorizationService.class, Mockito.RETURNS_MOCKS);
|
||||
PowerMockito.stub(PowerMockito.method(DeviceMgtAPIUtils.class,
|
||||
"getDeviceAccessAuthorizationService"))
|
||||
.toReturn(deviceAccessAuthorizationService);
|
||||
PowerMockito.stub(PowerMockito.method(CarbonContext.class, "getThreadLocalCarbonContext"))
|
||||
.toReturn(carbonContext);
|
||||
Mockito.when(carbonContext.getTenantId()).thenReturn(-1234);
|
||||
Mockito.when(carbonContext.getUsername()).thenReturn(DEFAULT_USERNAME);
|
||||
Mockito.when(deviceAccessAuthorizationService.isDeviceAdminUser()).thenReturn(false);
|
||||
|
||||
Response response = this.deviceManagementService
|
||||
.getDeviceByID(TEST_DEVICE_IDENTIFIER, ifModifiedSince,true);
|
||||
Assert.assertEquals(response.getStatus(), Response.Status.UNAUTHORIZED.getStatusCode());
|
||||
|
||||
}
|
||||
|
||||
@Test(description = "Testing get device when DeviceAccessAuthorizationService is not available",
|
||||
expectedExceptions = ExceptionInInitializerError.class)
|
||||
public void testGetDeviceByIDWithErroneousDeviceAccessAuthorizationService()
|
||||
throws DeviceAccessAuthorizationException {
|
||||
String ifModifiedSince = new SimpleDateFormat(DEFAULT_DATE_FORMAT).format(new Date());
|
||||
PowerMockito.stub(PowerMockito.method(DeviceMgtAPIUtils.class, "getDeviceManagementService"))
|
||||
.toReturn(this.deviceManagementProviderService);
|
||||
PowerMockito.stub(PowerMockito.method(DeviceMgtAPIUtils.class, "getAuthenticatedUser"))
|
||||
.toReturn(DEFAULT_USERNAME);
|
||||
CarbonContext carbonContext = Mockito.mock(CarbonContext.class, Mockito.RETURNS_MOCKS);
|
||||
PowerMockito.stub(PowerMockito.method(CarbonContext.class, "getThreadLocalCarbonContext"))
|
||||
.toReturn(carbonContext);
|
||||
Mockito.when(carbonContext.getTenantId()).thenReturn(-1234);
|
||||
Mockito.when(carbonContext.getUsername()).thenReturn(DEFAULT_USERNAME);
|
||||
Mockito.when(deviceAccessAuthorizationService.isDeviceAdminUser()).thenReturn(true);
|
||||
|
||||
this.deviceManagementService.getDeviceByID(TEST_DEVICE_IDENTIFIER, ifModifiedSince,true);
|
||||
|
||||
}
|
||||
|
||||
@Test(description = "Testing get device when DeviceManagementProviderService is not available",
|
||||
expectedExceptions = NoClassDefFoundError.class)
|
||||
public void testGetDeviceByIDWithErroneousDeviceManagementProviderService()
|
||||
throws DeviceAccessAuthorizationException {
|
||||
String ifModifiedSince = new SimpleDateFormat(DEFAULT_DATE_FORMAT).format(new Date());
|
||||
PowerMockito.stub(PowerMockito.method(DeviceMgtAPIUtils.class, "getAuthenticatedUser"))
|
||||
.toReturn(DEFAULT_USERNAME);
|
||||
CarbonContext carbonContext = Mockito.mock(CarbonContext.class, Mockito.RETURNS_MOCKS);
|
||||
DeviceAccessAuthorizationService deviceAccessAuthorizationService =
|
||||
Mockito.mock(DeviceAccessAuthorizationService.class, Mockito.RETURNS_MOCKS);
|
||||
PowerMockito.stub(PowerMockito.method(DeviceMgtAPIUtils.class,
|
||||
"getDeviceAccessAuthorizationService"))
|
||||
.toReturn(deviceAccessAuthorizationService);
|
||||
PowerMockito.stub(PowerMockito.method(CarbonContext.class, "getThreadLocalCarbonContext"))
|
||||
.toReturn(carbonContext);
|
||||
Mockito.when(carbonContext.getTenantId()).thenReturn(-1234);
|
||||
Mockito.when(carbonContext.getUsername()).thenReturn(DEFAULT_USERNAME);
|
||||
Mockito.when(deviceAccessAuthorizationService.isDeviceAdminUser()).thenReturn(true);
|
||||
|
||||
this.deviceManagementService.getDeviceByID(TEST_DEVICE_IDENTIFIER, ifModifiedSince,true);
|
||||
}
|
||||
|
||||
@Test(description = "Testing get devices when DeviceAccessAuthorizationService is not available")
|
||||
public void testGetDevicesWithErroneousDeviceAccessAuthorizationService() {
|
||||
PowerMockito.stub(PowerMockito.method(DeviceMgtAPIUtils.class, "getDeviceManagementService"))
|
||||
@ -358,7 +481,8 @@ public class DeviceManagementServiceImplTest {
|
||||
public void testDeleteDevice() {
|
||||
PowerMockito.stub(PowerMockito.method(DeviceMgtAPIUtils.class, "getDeviceManagementService"))
|
||||
.toReturn(this.deviceManagementProviderService);
|
||||
Response response = this.deviceManagementService.deleteDevice(TEST_DEVICE_TYPE, UUID.randomUUID().toString());
|
||||
Response response = this.deviceManagementService.deleteDevice(TEST_DEVICE_TYPE, UUID.randomUUID().toString()
|
||||
, false);
|
||||
Assert.assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
|
||||
}
|
||||
|
||||
@ -368,7 +492,8 @@ public class DeviceManagementServiceImplTest {
|
||||
.toReturn(this.deviceManagementProviderService);
|
||||
Mockito.when(this.deviceManagementProviderService
|
||||
.getDevice(Mockito.any(DeviceIdentifier.class), Mockito.anyBoolean())).thenReturn(null);
|
||||
Response response = this.deviceManagementService.deleteDevice(TEST_DEVICE_TYPE, UUID.randomUUID().toString());
|
||||
Response response = this.deviceManagementService.deleteDevice(TEST_DEVICE_TYPE, UUID.randomUUID().toString()
|
||||
, false);
|
||||
Assert.assertEquals(response.getStatus(), Response.Status.NOT_FOUND.getStatusCode());
|
||||
Mockito.reset(this.deviceManagementProviderService);
|
||||
}
|
||||
@ -379,7 +504,8 @@ public class DeviceManagementServiceImplTest {
|
||||
.toReturn(this.deviceManagementProviderService);
|
||||
Mockito.when(this.deviceManagementProviderService.disenrollDevice(Mockito.any(DeviceIdentifier.class)))
|
||||
.thenThrow(new DeviceManagementException());
|
||||
Response response = this.deviceManagementService.deleteDevice(TEST_DEVICE_TYPE, UUID.randomUUID().toString());
|
||||
Response response = this.deviceManagementService.deleteDevice(TEST_DEVICE_TYPE, UUID.randomUUID().toString()
|
||||
, false);
|
||||
Assert.assertEquals(response.getStatus(), Response.Status.BAD_REQUEST.getStatusCode());
|
||||
Mockito.reset(this.deviceManagementProviderService);
|
||||
}
|
||||
|
||||
@ -113,7 +113,7 @@ public class DeviceTypeManagementServiceTest {
|
||||
public void testGetDeviceTypeFeatures() throws Exception {
|
||||
PowerMockito.stub(PowerMockito.method(DeviceMgtAPIUtils.class, "getDeviceManagementService"))
|
||||
.toReturn(this.deviceManagementProviderService);
|
||||
Response response = this.deviceTypeManagementService.getFeatures(TEST_DEVICE_TYPE, MODIFIED_SINCE);
|
||||
Response response = this.deviceTypeManagementService.getFeatures(TEST_DEVICE_TYPE, null, "false", MODIFIED_SINCE);
|
||||
Assert.assertNotNull(response, "The response object is null.");
|
||||
Assert.assertEquals(response.getStatus(), Response.Status.OK.getStatusCode(),
|
||||
"The response status should be 200.");
|
||||
@ -126,8 +126,9 @@ public class DeviceTypeManagementServiceTest {
|
||||
FeatureManager featureManager = Mockito.mock(FeatureManager.class);
|
||||
Mockito.when(this.deviceManagementProviderService.getFeatureManager(Mockito.anyString())).thenReturn
|
||||
(featureManager);
|
||||
Mockito.when((featureManager).getFeatures()).thenThrow(new DeviceManagementException());
|
||||
Response response = this.deviceTypeManagementService.getFeatures(TEST_DEVICE_TYPE, MODIFIED_SINCE);
|
||||
Mockito.when((featureManager).getFeatures(Mockito.anyString())).thenThrow(new DeviceManagementException());
|
||||
Mockito.when((featureManager).getFeatures(Mockito.anyString(), Mockito.anyBoolean())).thenThrow(new DeviceManagementException());
|
||||
Response response = this.deviceTypeManagementService.getFeatures(TEST_DEVICE_TYPE, null, "false", MODIFIED_SINCE);
|
||||
Assert.assertNotNull(response, "The response object is null.");
|
||||
Assert.assertEquals(response.getStatus(), Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(),
|
||||
"The response status should be 500.");
|
||||
@ -140,11 +141,10 @@ public class DeviceTypeManagementServiceTest {
|
||||
PowerMockito.stub(PowerMockito.method(DeviceMgtAPIUtils.class, "getDeviceManagementService"))
|
||||
.toReturn(this.deviceManagementProviderService);
|
||||
Mockito.when(this.deviceManagementProviderService.getFeatureManager(Mockito.anyString())).thenReturn(null);
|
||||
Response response = this.deviceTypeManagementService.getFeatures(TEST_DEVICE_TYPE, MODIFIED_SINCE);
|
||||
Response response = this.deviceTypeManagementService.getFeatures(TEST_DEVICE_TYPE, null, "false", MODIFIED_SINCE);
|
||||
Assert.assertNotNull(response, "The response object is null.");
|
||||
Assert.assertEquals(response.getStatus(), Response.Status.OK.getStatusCode(),
|
||||
"The response status should be 200.");
|
||||
Assert.assertEquals(response.getEntity().toString(), "[]", "The response should be [].");
|
||||
Assert.assertEquals(response.getStatus(), Response.Status.NOT_FOUND.getStatusCode(),
|
||||
"The response status should be 404.");
|
||||
Mockito.reset(deviceManagementProviderService);
|
||||
}
|
||||
|
||||
|
||||
@ -21,7 +21,7 @@
|
||||
<parent>
|
||||
<artifactId>device-mgt</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -15,32 +15,92 @@
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.wso2.carbon.device.mgt.common;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAttribute;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
import io.swagger.annotations.*;
|
||||
|
||||
@ApiModel(value = "Feature", description = "This class carries all information related to a devices enrollment" +
|
||||
" status.")
|
||||
@ApiModel(
|
||||
value = "Feature",
|
||||
description = "This class carries all information related to a device feature."
|
||||
)
|
||||
public class Feature implements Serializable {
|
||||
|
||||
@ApiModelProperty(name = "id", value = "Feature Id.", required = true )
|
||||
@ApiModelProperty(
|
||||
name = "id",
|
||||
value = "Feature Id.",
|
||||
required = true
|
||||
)
|
||||
private int id;
|
||||
@ApiModelProperty(name = "code", value = "The code of the feature. For example the code to lock a device" +
|
||||
" is DEVICE_LOCK.", required = true )
|
||||
|
||||
@ApiModelProperty(
|
||||
name = "code",
|
||||
value = "The code of the feature. For example the code to lock a device is DEVICE_LOCK.",
|
||||
required = true
|
||||
)
|
||||
private String code;
|
||||
@ApiModelProperty(name = "name", value = "A name that describes a feature.", required = true )
|
||||
|
||||
@ApiModelProperty(
|
||||
name = "name",
|
||||
value = "A name that describes a feature.",
|
||||
required = true
|
||||
)
|
||||
private String name;
|
||||
@ApiModelProperty(name = "description", value = "Provides a description of the features..", required = true )
|
||||
|
||||
@ApiModelProperty(
|
||||
name = "description",
|
||||
value = "Provides a description of the features.",
|
||||
required = true
|
||||
)
|
||||
private String description;
|
||||
@ApiModelProperty(name = "deviceType", value = "Provide the device type for the respective feature. " +
|
||||
"Features allow you to perform operations on any device type, " +
|
||||
"such as android, iOS or windows..", required = true )
|
||||
|
||||
@ApiModelProperty(
|
||||
name = "type",
|
||||
value = "Type of the feature.",
|
||||
required = true
|
||||
)
|
||||
private String type;
|
||||
|
||||
@ApiModelProperty(
|
||||
name = "hidden",
|
||||
value = "If the feature is hidden from the UI."
|
||||
)
|
||||
private boolean hidden;
|
||||
|
||||
@ApiModelProperty(
|
||||
name = "deviceType",
|
||||
value = "Provide the device type for the respective feature. Features allow you to perform operations " +
|
||||
"on any device type, such as android, iOS or windows.",
|
||||
required = true
|
||||
)
|
||||
private String deviceType;
|
||||
|
||||
@ApiModelProperty(name = "metadataEntries", value = "Properties related to features.", required = true )
|
||||
@ApiModelProperty(
|
||||
name = "metadataEntries",
|
||||
value = "Properties related to features.",
|
||||
required = true
|
||||
)
|
||||
private List<MetadataEntry> metadataEntries;
|
||||
|
||||
@XmlElement
|
||||
@ -96,9 +156,27 @@ public class Feature implements Serializable {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
@XmlAttribute
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public boolean isHidden() {
|
||||
return hidden;
|
||||
}
|
||||
|
||||
public void setHidden(boolean hidden) {
|
||||
this.hidden = hidden;
|
||||
}
|
||||
|
||||
public static class MetadataEntry implements Serializable {
|
||||
|
||||
private int id;
|
||||
private String name;
|
||||
private Object value;
|
||||
|
||||
public int getId() {
|
||||
@ -109,6 +187,14 @@ public class Feature implements Serializable {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public Object getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
@ -14,7 +14,24 @@
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.wso2.carbon.device.mgt.common;
|
||||
|
||||
@ -32,6 +49,10 @@ public interface FeatureManager {
|
||||
|
||||
List<Feature> getFeatures() throws DeviceManagementException;
|
||||
|
||||
List<Feature> getFeatures(String type) throws DeviceManagementException;
|
||||
|
||||
List<Feature> getFeatures(String type, boolean isHidden) throws DeviceManagementException;
|
||||
|
||||
boolean removeFeature(String name) throws DeviceManagementException;
|
||||
|
||||
boolean addSupportedFeaturesToDB() throws DeviceManagementException;
|
||||
|
||||
@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.wso2.carbon.device.mgt.common;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class StartupOperationConfig {
|
||||
|
||||
private List<String> startupOperations;
|
||||
|
||||
public List<String> getStartupOperations() {
|
||||
return startupOperations;
|
||||
}
|
||||
|
||||
public void setStartupOperations(List<String> startupOperations) {
|
||||
this.startupOperations = startupOperations;
|
||||
}
|
||||
}
|
||||
@ -15,6 +15,22 @@
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*
|
||||
*
|
||||
* Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.wso2.carbon.device.mgt.common.spi;
|
||||
|
||||
@ -51,6 +67,8 @@ public interface DeviceManagementService {
|
||||
|
||||
InitialOperationConfig getInitialOperationConfig();
|
||||
|
||||
StartupOperationConfig getStartupOperationConfig();
|
||||
|
||||
PullNotificationSubscriber getPullNotificationSubscriber();
|
||||
|
||||
DeviceStatusTaskPluginConfig getDeviceStatusTaskPluginConfig();
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>device-mgt</artifactId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -15,6 +15,23 @@
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.wso2.carbon.device.mgt.core.dao;
|
||||
|
||||
@ -128,6 +145,17 @@ public interface DeviceDAO {
|
||||
*/
|
||||
Device getDevice(DeviceIdentifier deviceIdentifier, int tenantId) throws DeviceManagementDAOException;
|
||||
|
||||
|
||||
/**
|
||||
* This method is used to retrieve a device of a given device-identifier and tenant-id.
|
||||
*
|
||||
* @param deviceIdentifier device id.
|
||||
* @param tenantId tenant id.
|
||||
* @return returns the device object.
|
||||
* @throws DeviceManagementDAOException
|
||||
*/
|
||||
Device getDevice(String deviceIdentifier, int tenantId) throws DeviceManagementDAOException;
|
||||
|
||||
/**
|
||||
* This method is used to retrieve a device of a given device-identifier and owner and tenant-id.
|
||||
*
|
||||
@ -152,6 +180,19 @@ public interface DeviceDAO {
|
||||
Device getDevice(DeviceIdentifier deviceIdentifier, Date ifModifiedSince, int tenantId) throws
|
||||
DeviceManagementDAOException;
|
||||
|
||||
/**
|
||||
* This method is used to retrieve a device of a given device-identifier and tenant-id which modified
|
||||
* later than the ifModifiedSince param.
|
||||
*
|
||||
* @param deviceIdentifier device id.
|
||||
* @param ifModifiedSince last modified time.
|
||||
* @param tenantId tenant id.
|
||||
* @return returns the device object.
|
||||
* @throws DeviceManagementDAOException
|
||||
*/
|
||||
Device getDevice(String deviceIdentifier, Date ifModifiedSince, int tenantId) throws
|
||||
DeviceManagementDAOException;
|
||||
|
||||
/**
|
||||
* This method is used to retrieve a device of a given device-identifier and owner and tenant-id which modified
|
||||
* later than the ifModifiedSince param.
|
||||
@ -437,5 +478,13 @@ public interface DeviceDAO {
|
||||
* fails.
|
||||
*/
|
||||
List<Device> getDevicesByIdentifiers(List<String> deviceIdentifiers, int tenantId) throws DeviceManagementDAOException;
|
||||
|
||||
/**
|
||||
* This method is used to permanently delete the device and its related details
|
||||
* @param deviceIdentifier device id
|
||||
* @param tenantId tenant id
|
||||
* @throws DeviceManagementDAOException
|
||||
*/
|
||||
void deleteDevice(DeviceIdentifier deviceIdentifier, int tenantId) throws DeviceManagementDAOException;
|
||||
}
|
||||
|
||||
|
||||
@ -14,10 +14,29 @@
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.wso2.carbon.device.mgt.core.dao.impl;
|
||||
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.device.mgt.common.Device;
|
||||
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
|
||||
import org.wso2.carbon.device.mgt.common.EnrolmentInfo;
|
||||
@ -44,6 +63,8 @@ import java.util.StringJoiner;
|
||||
|
||||
public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
|
||||
|
||||
private static final org.apache.commons.logging.Log log = LogFactory.getLog(AbstractDeviceDAOImpl.class);
|
||||
|
||||
@Override
|
||||
public int addDevice(int typeId, Device device, int tenantId) throws DeviceManagementDAOException {
|
||||
Connection conn;
|
||||
@ -145,6 +166,53 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
|
||||
return device;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Device getDevice(String deviceIdentifier, int tenantId) throws DeviceManagementDAOException {
|
||||
Connection conn;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
Device device = null;
|
||||
try {
|
||||
conn = this.getConnection();
|
||||
String sql = "SELECT " +
|
||||
"d1.ID AS DEVICE_ID, d1.DESCRIPTION, d1.NAME AS DEVICE_NAME, d1.DEVICE_TYPE, " +
|
||||
"d1.DEVICE_IDENTIFICATION, e.OWNER, e.OWNERSHIP, e.STATUS, e.DATE_OF_LAST_UPDATE, " +
|
||||
"e.DATE_OF_ENROLMENT, e.ID AS ENROLMENT_ID " +
|
||||
"FROM " +
|
||||
"DM_ENROLMENT e," +
|
||||
" (SELECT d.ID, d.DESCRIPTION, d.NAME, t.NAME AS DEVICE_TYPE, d.DEVICE_IDENTIFICATION " +
|
||||
"FROM " +
|
||||
"DM_DEVICE d, DM_DEVICE_TYPE t " +
|
||||
"WHERE " +
|
||||
"t.ID = d.DEVICE_TYPE_ID AND d.DEVICE_IDENTIFICATION = ? AND d.TENANT_ID = ?) d1 " +
|
||||
"WHERE " +
|
||||
"d1.ID = e.DEVICE_ID " +
|
||||
"AND TENANT_ID = ? " +
|
||||
"ORDER BY e.DATE_OF_LAST_UPDATE DESC, e.STATUS ASC";
|
||||
// Status adeed as an orderby clause to fix a bug : when an existing device is
|
||||
// re-enrolled, earlier enrollment is marked as removed and a new enrollment is added.
|
||||
// However, both enrollments share the same time stamp. When retrieving the device
|
||||
// due to same timestamp, enrollment information is incorrect, intermittently. Hence
|
||||
// status also should be taken into consideration when ordering. This should not present a
|
||||
// problem for other status transitions, as there would be an intermediary removed
|
||||
// state in between.
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setString(1, deviceIdentifier);
|
||||
stmt.setInt(2, tenantId);
|
||||
stmt.setInt(3, tenantId);
|
||||
rs = stmt.executeQuery();
|
||||
if (rs.next()) {
|
||||
device = DeviceManagementDAOUtil.loadMatchingDevice(rs, false);
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while listing device " +
|
||||
"'" + deviceIdentifier + "'", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
}
|
||||
return device;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Device getDevice(DeviceIdentifier deviceIdentifier, String owner, int tenantId)
|
||||
throws DeviceManagementDAOException {
|
||||
@ -214,6 +282,51 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
|
||||
return device;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Device getDevice(String deviceIdentifier, Date since, int tenantId)
|
||||
throws DeviceManagementDAOException {
|
||||
Connection conn;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
Device device = null;
|
||||
try {
|
||||
conn = this.getConnection();
|
||||
String sql = "SELECT d1.ID AS DEVICE_ID, d1.DESCRIPTION, d1.NAME AS DEVICE_NAME, d1.DEVICE_TYPE, " +
|
||||
"d1.DEVICE_IDENTIFICATION, e.OWNER, e.OWNERSHIP, e.STATUS, e.DATE_OF_LAST_UPDATE, " +
|
||||
"e.DATE_OF_ENROLMENT, e.ID AS ENROLMENT_ID " +
|
||||
"FROM" +
|
||||
" DM_ENROLMENT e, " +
|
||||
"(SELECT d.ID, d.DESCRIPTION, d.NAME, " +
|
||||
"t.NAME AS DEVICE_TYPE, d.DEVICE_IDENTIFICATION " +
|
||||
"FROM" +
|
||||
" DM_DEVICE d, DM_DEVICE_TYPE t," +
|
||||
" DM_DEVICE_DETAIL dt " +
|
||||
"WHERE " +
|
||||
"t.ID = d.DEVICE_TYPE_ID AND d.DEVICE_IDENTIFICATION = ? AND d.TENANT_ID = ? AND" +
|
||||
" dt.DEVICE_ID = d.ID AND dt.UPDATE_TIMESTAMP > ?) d1 " +
|
||||
"WHERE" +
|
||||
" d1.ID = e.DEVICE_ID AND TENANT_ID = ? " +
|
||||
"ORDER BY " +
|
||||
"e.DATE_OF_LAST_UPDATE DESC";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
int paramIdx = 1;
|
||||
stmt.setString(paramIdx++, deviceIdentifier);
|
||||
stmt.setInt(paramIdx++, tenantId);
|
||||
stmt.setLong(paramIdx++, since.getTime());
|
||||
stmt.setInt(paramIdx, tenantId);
|
||||
rs = stmt.executeQuery();
|
||||
if (rs.next()) {
|
||||
device = DeviceManagementDAOUtil.loadMatchingDevice(rs, false);
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while listing device for id " +
|
||||
"'" + deviceIdentifier + "'", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
}
|
||||
return device;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Device getDevice(DeviceIdentifier deviceIdentifier, String owner, Date since, int tenantId)
|
||||
throws DeviceManagementDAOException {
|
||||
@ -250,8 +363,8 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Device getDevice(DeviceIdentifier deviceIdentifier, EnrolmentInfo.Status status, int tenantId) throws
|
||||
DeviceManagementDAOException {
|
||||
public Device getDevice(DeviceIdentifier deviceIdentifier, EnrolmentInfo.Status status, int tenantId)
|
||||
throws DeviceManagementDAOException {
|
||||
Connection conn;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
@ -1295,4 +1408,378 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
|
||||
}
|
||||
}
|
||||
|
||||
public void deleteDevice(DeviceIdentifier deviceIdentifier, int tenantId) throws DeviceManagementDAOException {
|
||||
Connection conn;
|
||||
try {
|
||||
conn = this.getConnection();
|
||||
int deviceId = getDeviceId(conn, deviceIdentifier, tenantId);
|
||||
if (deviceId == -1) {
|
||||
String msg = "Device " + deviceIdentifier.getId() + " of type " + deviceIdentifier.getType() +
|
||||
" is not found";
|
||||
log.error(msg);
|
||||
throw new DeviceManagementDAOException(msg);
|
||||
} else {
|
||||
int enrollmentId = getEnrollmentId(conn, deviceId, tenantId);
|
||||
if (enrollmentId == -1) {
|
||||
String msg = "Enrollment not found for the device " + deviceIdentifier.getId() + " of type " +
|
||||
deviceIdentifier.getType();
|
||||
log.error(msg);
|
||||
throw new DeviceManagementDAOException(msg);
|
||||
} else {
|
||||
removeDeviceDetail(conn, deviceId);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Successfully removed device detail data");
|
||||
}
|
||||
removeDeviceLocation(conn, deviceId);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Successfully removed device location data");
|
||||
}
|
||||
removeDeviceInfo(conn, deviceId);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Successfully removed device info data");
|
||||
}
|
||||
removeDeviceNotification(conn, deviceId);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Successfully removed device notification data");
|
||||
}
|
||||
removeDeviceApplicationMapping(conn, deviceId);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Successfully removed device application mapping data");
|
||||
}
|
||||
removeDevicePolicyApplied(conn, deviceId);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Successfully removed device applied policy data");
|
||||
}
|
||||
removeDevicePolicy(conn, deviceId);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Successfully removed device policy data");
|
||||
}
|
||||
removeEnrollmentDeviceDetail(conn, enrollmentId);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Successfully removed enrollment device detail data");
|
||||
}
|
||||
removeEnrollmentDeviceLocation(conn, enrollmentId);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Successfully removed enrollment device location data");
|
||||
}
|
||||
removeEnrollmentDeviceInfo(conn, enrollmentId);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Successfully removed enrollment device info data");
|
||||
}
|
||||
removeEnrollmentDeviceApplicationMapping(conn, enrollmentId);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Successfully removed enrollment device application mapping data");
|
||||
}
|
||||
removeDeviceOperationResponse(conn, enrollmentId);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Successfully removed device operation response data");
|
||||
}
|
||||
removeEnrollmentOperationMapping(conn, enrollmentId);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Successfully removed enrollment operation mapping data");
|
||||
}
|
||||
removeDeviceEnrollment(conn, deviceId);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Successfully removed device enrollment data");
|
||||
}
|
||||
removeDeviceGroupMapping(conn, deviceId);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Successfully removed device group mapping data");
|
||||
}
|
||||
removeDevice(conn, deviceId);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Successfully permanently deleted the device");
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while deleting the device", e);
|
||||
}
|
||||
}
|
||||
|
||||
private int getDeviceId(Connection conn, DeviceIdentifier deviceIdentifier, int tenantId)
|
||||
throws DeviceManagementDAOException {
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
int deviceId = -1;
|
||||
try {
|
||||
String sql = "SELECT ID FROM DM_DEVICE WHERE DEVICE_IDENTIFICATION = ? AND TENANT_ID = ?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setString(1, deviceIdentifier.getId());
|
||||
stmt.setInt(2, tenantId);
|
||||
rs = stmt.executeQuery();
|
||||
if (rs.next()) {
|
||||
deviceId = rs.getInt("ID");
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while retrieving device id of the device", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
}
|
||||
return deviceId;
|
||||
}
|
||||
|
||||
private int getEnrollmentId(Connection conn, int deviceId, int tenantId) throws DeviceManagementDAOException {
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
int enrollmentId = -1;
|
||||
try {
|
||||
String sql = "SELECT ID FROM DM_ENROLMENT WHERE DEVICE_ID = ? AND TENANT_ID = ?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(1, deviceId);
|
||||
stmt.setInt(2, tenantId);
|
||||
rs = stmt.executeQuery();
|
||||
if (rs.next()) {
|
||||
enrollmentId = rs.getInt("ID");
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while retrieving enrollment id of the device", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
}
|
||||
return enrollmentId;
|
||||
}
|
||||
|
||||
private void removeDeviceDetail(Connection conn, int deviceId) throws DeviceManagementDAOException {
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
String sql = "DELETE FROM DM_DEVICE_DETAIL WHERE DEVICE_ID = ?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(1, deviceId);
|
||||
stmt.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while removing device detail", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
}
|
||||
}
|
||||
|
||||
private void removeDeviceLocation(Connection conn, int deviceId) throws DeviceManagementDAOException {
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
String sql = "DELETE FROM DM_DEVICE_LOCATION WHERE DEVICE_ID = ?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(1, deviceId);
|
||||
stmt.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while removing device location", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
}
|
||||
}
|
||||
|
||||
private void removeDeviceInfo(Connection conn, int deviceId) throws DeviceManagementDAOException {
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
String sql = "DELETE FROM DM_DEVICE_INFO WHERE DEVICE_ID = ?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(1, deviceId);
|
||||
stmt.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while removing device info", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
}
|
||||
}
|
||||
|
||||
private void removeDeviceNotification(Connection conn, int deviceId) throws DeviceManagementDAOException {
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
String sql = "DELETE FROM DM_NOTIFICATION WHERE DEVICE_ID = ?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(1, deviceId);
|
||||
stmt.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while removing device notification", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
}
|
||||
}
|
||||
|
||||
private void removeDeviceApplicationMapping(Connection conn, int deviceId) throws DeviceManagementDAOException {
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
String sql = "DELETE FROM DM_DEVICE_APPLICATION_MAPPING WHERE DEVICE_ID = ?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(1, deviceId);
|
||||
stmt.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while removing device application mapping", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
}
|
||||
}
|
||||
|
||||
private void removeDevicePolicyApplied(Connection conn, int deviceId) throws DeviceManagementDAOException {
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
String sql = "DELETE FROM DM_DEVICE_POLICY_APPLIED WHERE DEVICE_ID = ?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(1, deviceId);
|
||||
stmt.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while removing device policy applied", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
}
|
||||
}
|
||||
|
||||
private void removeDevicePolicy(Connection conn, int deviceId) throws DeviceManagementDAOException {
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
String sql = "DELETE FROM DM_DEVICE_POLICY WHERE DEVICE_ID = ?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(1, deviceId);
|
||||
stmt.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while removing device policy", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
}
|
||||
}
|
||||
|
||||
private void removeEnrollmentDeviceDetail(Connection conn, int enrollmentId) throws DeviceManagementDAOException {
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
String sql = "DELETE FROM DM_DEVICE_DETAIL WHERE ENROLMENT_ID = ?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(1, enrollmentId);
|
||||
stmt.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while removing enrollment device detail", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
}
|
||||
}
|
||||
|
||||
private void removeEnrollmentDeviceLocation(Connection conn, int enrollmentId) throws DeviceManagementDAOException {
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
String sql = "DELETE FROM DM_DEVICE_LOCATION WHERE ENROLMENT_ID = ?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(1, enrollmentId);
|
||||
stmt.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while removing enrollment device location", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
}
|
||||
}
|
||||
|
||||
private void removeEnrollmentDeviceInfo(Connection conn, int enrollmentId) throws DeviceManagementDAOException {
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
String sql = "DELETE FROM DM_DEVICE_INFO WHERE ENROLMENT_ID = ?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(1, enrollmentId);
|
||||
stmt.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while removing enrollment device info", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
}
|
||||
}
|
||||
|
||||
private void removeEnrollmentDeviceApplicationMapping(Connection conn, int enrollmentId)
|
||||
throws DeviceManagementDAOException {
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
String sql = "DELETE FROM DM_DEVICE_APPLICATION_MAPPING WHERE ENROLMENT_ID = ?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(1, enrollmentId);
|
||||
stmt.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while removing enrollment device application " +
|
||||
"mapping", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
}
|
||||
}
|
||||
|
||||
private void removeDeviceOperationResponse(Connection conn, int enrollmentId) throws DeviceManagementDAOException {
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
String sql = "DELETE FROM DM_DEVICE_OPERATION_RESPONSE WHERE ENROLMENT_ID = ?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(1, enrollmentId);
|
||||
stmt.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while removing device operation response", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
}
|
||||
}
|
||||
|
||||
private void removeEnrollmentOperationMapping(Connection conn, int enrollmentId)
|
||||
throws DeviceManagementDAOException {
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
String sql = "DELETE FROM DM_ENROLMENT_OP_MAPPING WHERE ENROLMENT_ID = ?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(1, enrollmentId);
|
||||
stmt.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while removing enrollment operation mapping", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
}
|
||||
}
|
||||
|
||||
private void removeDeviceEnrollment(Connection conn, int deviceId) throws DeviceManagementDAOException {
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
String sql = "DELETE FROM DM_ENROLMENT WHERE DEVICE_ID = ?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(1, deviceId);
|
||||
stmt.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while removing device enrollment", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
}
|
||||
}
|
||||
|
||||
private void removeDeviceGroupMapping(Connection conn, int deviceId) throws DeviceManagementDAOException {
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
String sql = "DELETE FROM DM_DEVICE_GROUP_MAP WHERE DEVICE_ID = ?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(1, deviceId);
|
||||
stmt.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while removing device group mapping", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
}
|
||||
}
|
||||
|
||||
private void removeDevice(Connection conn, int deviceId) throws DeviceManagementDAOException {
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
String sql = "DELETE FROM DM_DEVICE WHERE ID = ?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(1, deviceId);
|
||||
stmt.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while removing device", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1129,7 +1129,7 @@ public class OperationManagerImpl implements OperationManager {
|
||||
DeviceManagementDAOFactory.beginTransaction();
|
||||
int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId();
|
||||
String user = this.getUser();
|
||||
updateStatus = enrollmentDAO.setStatus(enrolmentId, user, status, tenantId);
|
||||
updateStatus = enrollmentDAO.setStatus(enrolmentId, status, tenantId);
|
||||
DeviceManagementDAOFactory.commitTransaction();
|
||||
} catch (DeviceManagementDAOException e) {
|
||||
DeviceManagementDAOFactory.rollbackTransaction();
|
||||
|
||||
@ -92,7 +92,8 @@ public class ProfileOperationDAOImpl extends GenericOperationDAOImpl {
|
||||
try {
|
||||
Connection conn = OperationManagementDAOFactory.getConnection();
|
||||
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=?";
|
||||
"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.setInt(1, id);
|
||||
|
||||
@ -15,6 +15,24 @@
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.wso2.carbon.device.mgt.core.service;
|
||||
|
||||
import org.wso2.carbon.device.mgt.common.Device;
|
||||
@ -29,6 +47,7 @@ import org.wso2.carbon.device.mgt.common.OperationMonitoringTaskConfig;
|
||||
import org.wso2.carbon.device.mgt.common.PaginationRequest;
|
||||
import org.wso2.carbon.device.mgt.common.PaginationResult;
|
||||
import org.wso2.carbon.device.mgt.common.exceptions.UserNotFoundException;
|
||||
import org.wso2.carbon.device.mgt.common.StartupOperationConfig;
|
||||
import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationManagementException;
|
||||
import org.wso2.carbon.device.mgt.common.configuration.mgt.PlatformConfiguration;
|
||||
import org.wso2.carbon.device.mgt.common.license.mgt.License;
|
||||
@ -190,6 +209,17 @@ public interface DeviceManagementProviderService {
|
||||
*/
|
||||
Device getDevice(DeviceIdentifier deviceId, boolean requireDeviceInfo) throws DeviceManagementException;
|
||||
|
||||
/**
|
||||
* Returns the device of specified id.
|
||||
*
|
||||
* @param deviceId device Id
|
||||
* @param requireDeviceInfo - A boolean indicating whether the device-info (location, app-info etc) is also required
|
||||
* along with the device data.
|
||||
* @return Device returns null when device is not available.
|
||||
* @throws DeviceManagementException
|
||||
*/
|
||||
Device getDevice(String deviceId, boolean requireDeviceInfo) throws DeviceManagementException;
|
||||
|
||||
/**
|
||||
* Returns the device of specified id owned by user with given username.
|
||||
*
|
||||
@ -225,6 +255,18 @@ public interface DeviceManagementProviderService {
|
||||
*/
|
||||
Device getDevice(DeviceIdentifier deviceId, Date since, boolean requireDeviceInfo) throws DeviceManagementException;
|
||||
|
||||
/**
|
||||
* Returns the device of specified id.
|
||||
*
|
||||
* @param deviceId device Id
|
||||
* @param since - Date value where the resource was last modified
|
||||
* @param requireDeviceInfo - A boolean indicating whether the device-info (location, app-info etc) is also required
|
||||
* along with the device data.
|
||||
* @return Device returns null when device is not available.
|
||||
* @throws DeviceManagementException
|
||||
*/
|
||||
Device getDevice(String deviceId, Date since, boolean requireDeviceInfo) throws DeviceManagementException;
|
||||
|
||||
/**
|
||||
* Returns the device of specified id and owned by user with given username.
|
||||
*
|
||||
@ -541,6 +583,8 @@ public interface DeviceManagementProviderService {
|
||||
|
||||
boolean disenrollDevice(DeviceIdentifier deviceId) throws DeviceManagementException;
|
||||
|
||||
boolean deleteDevice(DeviceIdentifier deviceId) throws DeviceManagementException;
|
||||
|
||||
boolean isEnrolled(DeviceIdentifier deviceId) throws DeviceManagementException;
|
||||
|
||||
boolean isActive(DeviceIdentifier deviceId) throws DeviceManagementException;
|
||||
@ -614,10 +658,14 @@ public interface DeviceManagementProviderService {
|
||||
|
||||
List<MonitoringOperation> getMonitoringOperationList(String deviceType);
|
||||
|
||||
List<String> getStartupOperations(String deviceType);
|
||||
|
||||
int getDeviceMonitoringFrequency(String deviceType);
|
||||
|
||||
OperationMonitoringTaskConfig getDeviceMonitoringConfig(String deviceType);
|
||||
|
||||
StartupOperationConfig getStartupOperationConfig(String deviceType);
|
||||
|
||||
boolean isDeviceMonitoringEnabled(String deviceType);
|
||||
|
||||
PolicyMonitoringManager getPolicyMonitoringManager(String deviceType);
|
||||
|
||||
@ -15,6 +15,23 @@
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.wso2.carbon.device.mgt.core.service;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
@ -50,6 +67,7 @@ import org.wso2.carbon.device.mgt.common.PaginationRequest;
|
||||
import org.wso2.carbon.device.mgt.common.PaginationResult;
|
||||
import org.wso2.carbon.device.mgt.common.exceptions.TransactionManagementException;
|
||||
import org.wso2.carbon.device.mgt.common.exceptions.UserNotFoundException;
|
||||
import org.wso2.carbon.device.mgt.common.StartupOperationConfig;
|
||||
import org.wso2.carbon.device.mgt.common.app.mgt.Application;
|
||||
import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationManagementException;
|
||||
import org.wso2.carbon.device.mgt.common.configuration.mgt.PlatformConfiguration;
|
||||
@ -497,6 +515,67 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
|
||||
return deviceManager.disenrollDevice(deviceId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean deleteDevice(DeviceIdentifier deviceId) throws DeviceManagementException {
|
||||
if (deviceId == null) {
|
||||
String msg = "Required values are not set to permanently delete device";
|
||||
log.error(msg);
|
||||
throw new DeviceManagementException(msg);
|
||||
}
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Permanently deleting device: " + deviceId.getId() + " of type '" + deviceId.getType() + "'");
|
||||
}
|
||||
DeviceManager deviceManager = this.getDeviceManager(deviceId.getType());
|
||||
if (deviceManager == null) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Device Manager associated with the device type '" + deviceId.getType() + "' is null. " +
|
||||
"Therefore, not attempting method 'deleteDevice'");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
int tenantId = this.getTenantId();
|
||||
|
||||
Device device = this.getDevice(deviceId, false);
|
||||
if (device == null) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Device not found for id '" + deviceId.getId() + "'");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!device.getEnrolmentInfo().getStatus().equals(EnrolmentInfo.Status.REMOVED)) {
|
||||
String msg = "Device " + deviceId.getId() + " of type " + deviceId.getType() + " is not dis-enrolled to " +
|
||||
"permanently delete the device";
|
||||
log.error(msg);
|
||||
throw new DeviceManagementException(msg);
|
||||
} else {
|
||||
try {
|
||||
DeviceManagementDAOFactory.beginTransaction();
|
||||
deviceDAO.deleteDevice(deviceId, tenantId);
|
||||
DeviceManagementDAOFactory.commitTransaction();
|
||||
this.removeDeviceFromCache(deviceId);
|
||||
} catch (DeviceManagementDAOException e) {
|
||||
DeviceManagementDAOFactory.rollbackTransaction();
|
||||
String msg = "Error occurred while permanently deleting '" + deviceId.getType() +
|
||||
"' device with the identifier '" + deviceId.getId() + "'";
|
||||
log.error(msg, e);
|
||||
throw new DeviceManagementException(msg, e);
|
||||
} catch (TransactionManagementException e) {
|
||||
String msg = "Error occurred while initiating transaction";
|
||||
log.error(msg, e);
|
||||
throw new DeviceManagementException(msg, e);
|
||||
} catch (Exception e) {
|
||||
String msg = "Error occurred while permanently deleting device: " + deviceId.getId();
|
||||
log.error(msg, e);
|
||||
throw new DeviceManagementException(msg, e);
|
||||
} finally {
|
||||
DeviceManagementDAOFactory.closeConnection();
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnrolled(DeviceIdentifier deviceId) throws DeviceManagementException {
|
||||
Device device = this.getDevice(deviceId, false);
|
||||
@ -816,6 +895,53 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
|
||||
return device;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Device getDevice(String deviceId, boolean requireDeviceInfo) throws DeviceManagementException {
|
||||
if (deviceId == null) {
|
||||
String message = "Received null device identifier for method getDevice";
|
||||
log.error(message);
|
||||
throw new DeviceManagementException(message);
|
||||
}
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Get device by device id :" + deviceId + " '" +
|
||||
"' and requiredDeviceInfo: " + requireDeviceInfo);
|
||||
}
|
||||
int tenantId = this.getTenantId();
|
||||
Device device;
|
||||
try {
|
||||
DeviceManagementDAOFactory.openConnection();
|
||||
device = deviceDAO.getDevice(deviceId, tenantId);
|
||||
if (device == null) {
|
||||
String message = "No device is found upon the id '" +
|
||||
deviceId + "'";
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug(message);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
DeviceIdentifier deviceIdentifier = new DeviceIdentifier(deviceId, device.getType());
|
||||
this.addDeviceToCache(deviceIdentifier, device);
|
||||
} catch (DeviceManagementDAOException e) {
|
||||
String message = "Error occurred while obtaining the device for '" + deviceId + "'";
|
||||
log.error(message, e);
|
||||
throw new DeviceManagementException(message, e);
|
||||
} catch (SQLException e) {
|
||||
String message = "Error occurred while opening a connection to the data source";
|
||||
log.error(message);
|
||||
throw new DeviceManagementException(message, e);
|
||||
} catch (Exception e) {
|
||||
String message = "Error occurred in getDevice: " + deviceId;
|
||||
log.error(message, e);
|
||||
throw new DeviceManagementException(message, e);
|
||||
} finally {
|
||||
DeviceManagementDAOFactory.closeConnection();
|
||||
}
|
||||
if (requireDeviceInfo) {
|
||||
device = this.getAllDeviceInfo(device);
|
||||
}
|
||||
return device;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Device getDevice(DeviceIdentifier deviceId, String owner, boolean requireDeviceInfo)
|
||||
throws DeviceManagementException {
|
||||
@ -1075,6 +1201,47 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
|
||||
return device;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Device getDevice(String deviceId, Date since, boolean requireDeviceInfo) throws DeviceManagementException {
|
||||
if (deviceId == null || since == null) {
|
||||
String message = "Received incomplete data for getDevice";
|
||||
log.error(message);
|
||||
throw new DeviceManagementException(message);
|
||||
}
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Get device since '" + since.toString() + "' with identifier: " + deviceId + "");
|
||||
}
|
||||
Device device;
|
||||
try {
|
||||
DeviceManagementDAOFactory.openConnection();
|
||||
device = deviceDAO.getDevice(deviceId, since, this.getTenantId());
|
||||
if (device == null) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("No device is found upon the id '" + deviceId + "'");
|
||||
}
|
||||
return null;
|
||||
}
|
||||
} catch (DeviceManagementDAOException e) {
|
||||
String message = "Error occurred while obtaining the device for id '" + deviceId + "'";
|
||||
log.error(message, e);
|
||||
throw new DeviceManagementException(message, e);
|
||||
} catch (SQLException e) {
|
||||
String message = "Error occurred while opening a connection to the data source";
|
||||
log.error(message, e);
|
||||
throw new DeviceManagementException(message, e);
|
||||
} catch (Exception e) {
|
||||
String message = "Error occurred in getDevice for device: " + deviceId;
|
||||
log.error(message, e);
|
||||
throw new DeviceManagementException(message, e);
|
||||
} finally {
|
||||
DeviceManagementDAOFactory.closeConnection();
|
||||
}
|
||||
if (requireDeviceInfo) {
|
||||
device = this.getAllDeviceInfo(device);
|
||||
}
|
||||
return device;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Device getDevice(DeviceIdentifier deviceId, String owner, Date since, boolean requireDeviceInfo)
|
||||
throws DeviceManagementException {
|
||||
@ -1321,7 +1488,7 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
|
||||
EnrolmentInfo enrolmentInfo = device.getEnrolmentInfo();
|
||||
DeviceManagementDAOFactory.beginTransaction();
|
||||
if (enrolmentInfo != null) {
|
||||
success = enrollmentDAO.setStatus(enrolmentInfo.getId(), currentOwner, status, tenantId);
|
||||
success = enrollmentDAO.setStatus(enrolmentInfo.getId(), status, tenantId);
|
||||
}
|
||||
DeviceManagementDAOFactory.commitTransaction();
|
||||
this.removeDeviceFromCache(deviceId);
|
||||
@ -1631,6 +1798,19 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
|
||||
return operationMonitoringTaskConfig.getMonitoringOperation();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getStartupOperations(String deviceType) {
|
||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
||||
|
||||
DeviceManagementService dms = pluginRepository.getDeviceManagementService(deviceType, tenantId);
|
||||
|
||||
StartupOperationConfig startupOperationConfig = dms.getStartupOperationConfig();
|
||||
if (startupOperationConfig != null) {
|
||||
return startupOperationConfig.getStartupOperations();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getDeviceMonitoringFrequency(String deviceType) {
|
||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
||||
@ -1646,6 +1826,13 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
|
||||
return dms.getOperationMonitoringConfig();
|
||||
}
|
||||
|
||||
@Override
|
||||
public StartupOperationConfig getStartupOperationConfig(String deviceType) {
|
||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
||||
DeviceManagementService dms = pluginRepository.getDeviceManagementService(deviceType, tenantId);
|
||||
return dms.getStartupOperationConfig();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDeviceMonitoringEnabled(String deviceType) {
|
||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
||||
|
||||
@ -14,6 +14,23 @@
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*
|
||||
*
|
||||
* Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
|
||||
@ -21,7 +38,9 @@ package org.wso2.carbon.device.mgt.core.task;
|
||||
|
||||
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class Utils {
|
||||
@ -46,5 +65,25 @@ public class Utils {
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean getIsTenantedStartupConfig(Map<Integer, List<String>> map, String deviceType) {
|
||||
List<String> deviceTypes;
|
||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
||||
if (map.containsKey(tenantId)) {
|
||||
if (map.get(tenantId).contains(deviceType)) {
|
||||
return false;
|
||||
} else {
|
||||
deviceTypes = map.get(tenantId);
|
||||
deviceTypes.add(deviceType);
|
||||
map.put(tenantId, deviceTypes);
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
deviceTypes = new ArrayList<>();
|
||||
deviceTypes.add(deviceType);
|
||||
map.put(tenantId, deviceTypes);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -14,6 +14,23 @@
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*
|
||||
*
|
||||
* Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.wso2.carbon.device.mgt.core.task.impl;
|
||||
@ -23,6 +40,7 @@ import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
||||
import org.wso2.carbon.device.mgt.common.exceptions.DeviceManagementException;
|
||||
import org.wso2.carbon.device.mgt.common.OperationMonitoringTaskConfig;
|
||||
import org.wso2.carbon.device.mgt.common.StartupOperationConfig;
|
||||
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;
|
||||
@ -56,17 +74,20 @@ public class DeviceDetailsRetrieverTask implements Task {
|
||||
.getDeviceManagementProvider();
|
||||
OperationMonitoringTaskConfig operationMonitoringTaskConfig = deviceManagementProviderService
|
||||
.getDeviceMonitoringConfig(deviceType);
|
||||
StartupOperationConfig startupOperationConfig = deviceManagementProviderService
|
||||
.getStartupOperationConfig(deviceType);
|
||||
|
||||
if (System.getProperty(IS_CLOUD) != null && Boolean.parseBoolean(System.getProperty(IS_CLOUD))) {
|
||||
executeForTenants = true;
|
||||
}
|
||||
if (executeForTenants) {
|
||||
this.executeForAllTenants(operationMonitoringTaskConfig);
|
||||
this.executeForAllTenants(operationMonitoringTaskConfig, startupOperationConfig);
|
||||
} else {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Device details retrieving task started to run.");
|
||||
}
|
||||
DeviceTaskManager deviceTaskManager = new DeviceTaskManagerImpl(deviceType, operationMonitoringTaskConfig);
|
||||
DeviceTaskManager deviceTaskManager = new DeviceTaskManagerImpl(deviceType, operationMonitoringTaskConfig,
|
||||
startupOperationConfig);
|
||||
//pass the configurations also from here, monitoring tasks
|
||||
try {
|
||||
if (deviceManagementProviderService.isDeviceMonitoringEnabled(deviceType)) {
|
||||
@ -78,7 +99,8 @@ public class DeviceDetailsRetrieverTask implements Task {
|
||||
}
|
||||
}
|
||||
|
||||
private void executeForAllTenants(OperationMonitoringTaskConfig operationMonitoringTaskConfig) {
|
||||
private void executeForAllTenants(OperationMonitoringTaskConfig operationMonitoringTaskConfig,
|
||||
StartupOperationConfig startupOperationConfig) {
|
||||
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Device details retrieving task started to run for all tenants.");
|
||||
@ -98,7 +120,8 @@ public class DeviceDetailsRetrieverTask implements Task {
|
||||
PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantDomain(tenantDomain);
|
||||
PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantId(tenant);
|
||||
DeviceTaskManager deviceTaskManager = new DeviceTaskManagerImpl(deviceType,
|
||||
operationMonitoringTaskConfig);
|
||||
operationMonitoringTaskConfig,
|
||||
startupOperationConfig);
|
||||
//pass the configurations also from here, monitoring tasks
|
||||
try {
|
||||
if (deviceManagementProviderService.isDeviceMonitoringEnabled(deviceType)) {
|
||||
|
||||
@ -14,6 +14,22 @@
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*
|
||||
* Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
|
||||
@ -21,16 +37,19 @@ package org.wso2.carbon.device.mgt.core.task.impl;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.base.ServerConfiguration;
|
||||
import org.wso2.carbon.device.mgt.common.Device;
|
||||
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
|
||||
import org.wso2.carbon.device.mgt.common.exceptions.DeviceManagementException;
|
||||
import org.wso2.carbon.device.mgt.common.exceptions.InvalidDeviceException;
|
||||
import org.wso2.carbon.device.mgt.common.MonitoringOperation;
|
||||
import org.wso2.carbon.device.mgt.common.OperationMonitoringTaskConfig;
|
||||
import org.wso2.carbon.device.mgt.common.StartupOperationConfig;
|
||||
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.core.internal.DeviceManagementDataHolder;
|
||||
import org.wso2.carbon.device.mgt.core.operation.mgt.CommandOperation;
|
||||
import org.wso2.carbon.device.mgt.core.operation.mgt.ProfileOperation;
|
||||
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.DeviceTaskManager;
|
||||
@ -44,7 +63,17 @@ public class DeviceTaskManagerImpl implements DeviceTaskManager {
|
||||
private static Log log = LogFactory.getLog(DeviceTaskManagerImpl.class);
|
||||
private String deviceType;
|
||||
static volatile Map<Integer, Map<String, Map<String, Long>>> map = new HashMap<>();
|
||||
private static volatile Map<Integer, List<String>> startupConfigMap = new HashMap<>();
|
||||
private OperationMonitoringTaskConfig operationMonitoringTaskConfig;
|
||||
private StartupOperationConfig startupOperationConfig;
|
||||
|
||||
public DeviceTaskManagerImpl(String deviceType,
|
||||
OperationMonitoringTaskConfig operationMonitoringTaskConfig,
|
||||
StartupOperationConfig startupOperationConfig) {
|
||||
this.deviceType = deviceType;
|
||||
this.operationMonitoringTaskConfig = operationMonitoringTaskConfig;
|
||||
this.startupOperationConfig = startupOperationConfig;
|
||||
}
|
||||
|
||||
public DeviceTaskManagerImpl(String deviceType,
|
||||
OperationMonitoringTaskConfig operationMonitoringTaskConfig) {
|
||||
@ -61,6 +90,13 @@ public class DeviceTaskManagerImpl implements DeviceTaskManager {
|
||||
return operationMonitoringTaskConfig.getMonitoringOperation();
|
||||
}
|
||||
|
||||
private List<String> getStartupOperations() {
|
||||
if (startupOperationConfig != null) {
|
||||
return startupOperationConfig.getStartupOperations();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getTaskFrequency() throws DeviceMgtTaskException {
|
||||
return operationMonitoringTaskConfig.getFrequency();
|
||||
@ -86,6 +122,7 @@ public class DeviceTaskManagerImpl implements DeviceTaskManager {
|
||||
List<Device> devices;
|
||||
List<String> operations;
|
||||
List<DeviceIdentifier> validDeviceIdentifiers;
|
||||
List<String> startupOperations;
|
||||
operations = this.getValidOperationNames(); //list operations for each device type
|
||||
devices = deviceManagementProviderService.getAllDevices(deviceType, false);//list devices for each type
|
||||
|
||||
@ -106,6 +143,11 @@ public class DeviceTaskManagerImpl implements DeviceTaskManager {
|
||||
operation.setCode(str);
|
||||
deviceManagementProviderService.addOperation(deviceType, operation, validDeviceIdentifiers);
|
||||
}
|
||||
startupOperations = getStartupOperations();
|
||||
if (startupOperations != null && !startupOperations.isEmpty()) {
|
||||
addStartupOperations(startupOperations, validDeviceIdentifiers,
|
||||
deviceManagementProviderService);
|
||||
}
|
||||
} else {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("No operations are available.");
|
||||
@ -153,6 +195,32 @@ public class DeviceTaskManagerImpl implements DeviceTaskManager {
|
||||
return opNames;
|
||||
}
|
||||
|
||||
private void addStartupOperations(List<String> startupOperations, List<DeviceIdentifier> validDeviceIdentifiers
|
||||
, DeviceManagementProviderService deviceManagementProviderService) throws DeviceMgtTaskException {
|
||||
boolean isStartupConfig = Utils.getIsTenantedStartupConfig(startupConfigMap, deviceType);
|
||||
if (isStartupConfig) {
|
||||
try {
|
||||
Operation operation;
|
||||
for (String startupOp : startupOperations) {
|
||||
if ("SERVER_VERSION".equals(startupOp)) {
|
||||
operation = new ProfileOperation();
|
||||
operation.setPayLoad(ServerConfiguration.getInstance().getFirstProperty("Version"));
|
||||
} else {
|
||||
operation = new CommandOperation();
|
||||
}
|
||||
operation.setType(Operation.Type.COMMAND);
|
||||
operation.setEnabled(true);
|
||||
operation.setCode(startupOp);
|
||||
deviceManagementProviderService.addOperation(deviceType, operation, validDeviceIdentifiers);
|
||||
}
|
||||
} catch (InvalidDeviceException e) {
|
||||
throw new DeviceMgtTaskException("Invalid DeviceIdentifiers found.", e);
|
||||
} catch (OperationManagementException e) {
|
||||
throw new DeviceMgtTaskException("Error occurred while adding the operations to devices", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private List<MonitoringOperation> getOperationListforTask() throws DeviceMgtTaskException {
|
||||
|
||||
DeviceManagementProviderService deviceManagementProviderService = DeviceManagementDataHolder
|
||||
@ -163,17 +231,31 @@ public class DeviceTaskManagerImpl implements DeviceTaskManager {
|
||||
deviceType);//Get task list from each device type
|
||||
}
|
||||
|
||||
private List<String> getStartupOperationListForTask() {
|
||||
DeviceManagementProviderService deviceManagementProviderService = DeviceManagementDataHolder.getInstance()
|
||||
.getDeviceManagementProvider();
|
||||
return deviceManagementProviderService.getStartupOperations(deviceType);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean isTaskOperation(String opName) {
|
||||
|
||||
try {
|
||||
List<MonitoringOperation> monitoringOperations = this.getOperationListforTask();
|
||||
List<String> startupOperations = this.getStartupOperationListForTask();
|
||||
for (MonitoringOperation taop : monitoringOperations) {
|
||||
if (taop.getTaskName().equalsIgnoreCase(opName)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (startupOperations != null && !startupOperations.isEmpty()) {
|
||||
for (String operation : startupOperations) {
|
||||
if (opName.equalsIgnoreCase(operation)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (DeviceMgtTaskException e) {
|
||||
// ignoring the error, no need to throw, If error occurs, return value will be false.
|
||||
}
|
||||
|
||||
@ -14,6 +14,22 @@
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*
|
||||
* Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.wso2.carbon.device.mgt.core;
|
||||
|
||||
@ -102,6 +118,11 @@ public class TestDeviceManagementService implements DeviceManagementService {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public StartupOperationConfig getStartupOperationConfig() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PullNotificationSubscriber getPullNotificationSubscriber() {
|
||||
return null;
|
||||
|
||||
@ -1,18 +1,39 @@
|
||||
/*
|
||||
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.wso2.carbon.device.mgt.core.service;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
@ -70,6 +91,7 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes
|
||||
private static final String ALTERNATE_DEVICE_ID = "1128";
|
||||
private DeviceManagementProviderService providerService;
|
||||
private static final String DEVICE_TYPE = "RANDOM_DEVICE_TYPE";
|
||||
private static final String DEVICE_OWNER = "admin";
|
||||
private DeviceDetailsDAO deviceDetailsDAO = DeviceManagementDAOFactory.getDeviceDetailsDAO();
|
||||
|
||||
DeviceManagementProviderService deviceMgtService;
|
||||
@ -350,7 +372,6 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes
|
||||
Assert.assertTrue(device.getDeviceIdentifier().equalsIgnoreCase(DEVICE_ID));
|
||||
}
|
||||
|
||||
|
||||
@Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"})
|
||||
public void testGetDeviceWithInfo() throws DeviceManagementException {
|
||||
Device device = deviceMgtService.getDevice(new DeviceIdentifier(DEVICE_ID, DEVICE_TYPE)
|
||||
@ -360,6 +381,52 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes
|
||||
}
|
||||
}
|
||||
|
||||
@Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"})
|
||||
public void testGetDeviceByID() throws DeviceManagementException {
|
||||
Device device = deviceMgtService.getDevice(DEVICE_ID, true);
|
||||
if (!isMock()) {
|
||||
Assert.assertTrue(device.getDeviceIdentifier().equalsIgnoreCase(DEVICE_ID));
|
||||
}
|
||||
}
|
||||
|
||||
@Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}, expectedExceptions =
|
||||
DeviceManagementException.class)
|
||||
public void testGetDeviceByIDWithNullID() throws DeviceManagementException {
|
||||
deviceMgtService.getDevice((String) null, true);
|
||||
}
|
||||
|
||||
@Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"})
|
||||
public void testGetDeviceByIDAndSinceDate() throws DeviceManagementException, DeviceDetailsMgtDAOException
|
||||
, TransactionManagementException {
|
||||
Device initialDevice = deviceMgtService.getDevice(new DeviceIdentifier(DEVICE_ID,
|
||||
DEVICE_TYPE));
|
||||
addDeviceInformation(initialDevice);
|
||||
Device device = deviceMgtService.getDevice(DEVICE_ID, yesterday(), true);
|
||||
if (!isMock()) {
|
||||
Assert.assertTrue(device != null);
|
||||
}
|
||||
}
|
||||
|
||||
@Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}, expectedExceptions =
|
||||
DeviceManagementException.class)
|
||||
public void testGetDeviceByIDAndSinceDateWithNullID() throws DeviceManagementException, DeviceDetailsMgtDAOException
|
||||
, TransactionManagementException {
|
||||
Device initialDevice = deviceMgtService.getDevice(new DeviceIdentifier(DEVICE_ID,
|
||||
DEVICE_TYPE));
|
||||
addDeviceInformation(initialDevice);
|
||||
deviceMgtService.getDevice((String)null, yesterday(), true);
|
||||
}
|
||||
|
||||
@Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}, expectedExceptions =
|
||||
DeviceManagementException.class)
|
||||
public void testGetDeviceByIDAndSinceDateWithNullDate() throws DeviceManagementException,
|
||||
DeviceDetailsMgtDAOException, TransactionManagementException {
|
||||
Device initialDevice = deviceMgtService.getDevice(new DeviceIdentifier(DEVICE_ID,
|
||||
DEVICE_TYPE));
|
||||
addDeviceInformation(initialDevice);
|
||||
deviceMgtService.getDevice(DEVICE_ID, (Date)null, true);
|
||||
}
|
||||
|
||||
@Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"})
|
||||
public void testGetDeviceTypeWithProps() throws DeviceManagementException, NoSuchFieldException,
|
||||
IllegalAccessException {
|
||||
@ -435,7 +502,7 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes
|
||||
@Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}, expectedExceptions =
|
||||
DeviceManagementException.class)
|
||||
public void testDeviceByOwnerWithNullDeviceID() throws DeviceManagementException {
|
||||
deviceMgtService.getDevice(null, "admin", true);
|
||||
deviceMgtService.getDevice((DeviceIdentifier) null, "admin", true);
|
||||
}
|
||||
|
||||
@Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"})
|
||||
@ -496,7 +563,7 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes
|
||||
@Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}, expectedExceptions =
|
||||
DeviceManagementException.class)
|
||||
public void testDeviceByDateWithNullDeviceID() throws DeviceManagementException {
|
||||
deviceMgtService.getDevice(null, yesterday());
|
||||
deviceMgtService.getDevice((DeviceIdentifier) null, yesterday());
|
||||
}
|
||||
|
||||
private void addDeviceInformation(Device initialDevice) throws TransactionManagementException, DeviceDetailsMgtDAOException {
|
||||
|
||||
@ -416,7 +416,7 @@ CREATE TABLE IF NOT EXISTS DM_DEVICE_INFO (
|
||||
DEVICE_ID INT NULL,
|
||||
ENROLMENT_ID INT NOT NULL,
|
||||
KEY_FIELD VARCHAR(45) NULL,
|
||||
VALUE_FIELD VARCHAR(100) NULL,
|
||||
VALUE_FIELD VARCHAR(1000) NULL,
|
||||
PRIMARY KEY (ID),
|
||||
CONSTRAINT DM_DEVICE_INFO_DEVICE
|
||||
FOREIGN KEY (DEVICE_ID)
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<artifactId>device-mgt</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -15,6 +15,22 @@
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*
|
||||
*
|
||||
* Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.wso2.carbon.device.mgt.extensions.device.type.template;
|
||||
|
||||
@ -27,6 +43,7 @@ import org.wso2.carbon.device.mgt.common.InitialOperationConfig;
|
||||
import org.wso2.carbon.device.mgt.common.MonitoringOperation;
|
||||
import org.wso2.carbon.device.mgt.common.OperationMonitoringTaskConfig;
|
||||
import org.wso2.carbon.device.mgt.common.ProvisioningConfig;
|
||||
import org.wso2.carbon.device.mgt.common.StartupOperationConfig;
|
||||
import org.wso2.carbon.device.mgt.common.app.mgt.ApplicationManager;
|
||||
import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationEntry;
|
||||
import org.wso2.carbon.device.mgt.common.configuration.mgt.PlatformConfiguration;
|
||||
@ -71,6 +88,7 @@ public class DeviceTypeManagerService implements DeviceManagementService {
|
||||
private List<MonitoringOperation> monitoringOperations;
|
||||
private PolicyMonitoringManager policyMonitoringManager;
|
||||
private InitialOperationConfig initialOperationConfig;
|
||||
private StartupOperationConfig startupOperationConfig;
|
||||
private PullNotificationSubscriber pullNotificationSubscriber;
|
||||
private DeviceStatusTaskPluginConfig deviceStatusTaskPluginConfig;
|
||||
private DeviceTypePlatformDetails deviceTypePlatformDetails;
|
||||
@ -89,6 +107,8 @@ public class DeviceTypeManagerService implements DeviceManagementService {
|
||||
this.setOperationMonitoringConfig(deviceTypeConfiguration);
|
||||
this.initialOperationConfig = new InitialOperationConfig();
|
||||
this.setInitialOperationConfig(deviceTypeConfiguration);
|
||||
this.startupOperationConfig = new StartupOperationConfig();
|
||||
this.setStartupOperationConfig(deviceTypeConfiguration);
|
||||
this.deviceStatusTaskPluginConfig = new DeviceStatusTaskPluginConfig();
|
||||
this.deviceTypePlatformDetails = new DeviceTypePlatformDetails();
|
||||
this.setDeviceTypePlatformDetails(deviceTypeConfiguration);
|
||||
@ -214,6 +234,11 @@ public class DeviceTypeManagerService implements DeviceManagementService {
|
||||
return initialOperationConfig;
|
||||
}
|
||||
|
||||
@Override
|
||||
public StartupOperationConfig getStartupOperationConfig() {
|
||||
return startupOperationConfig;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PullNotificationSubscriber getPullNotificationSubscriber() {
|
||||
return pullNotificationSubscriber;
|
||||
@ -276,6 +301,15 @@ public class DeviceTypeManagerService implements DeviceManagementService {
|
||||
}
|
||||
}
|
||||
|
||||
private void setStartupOperationConfig(DeviceTypeConfiguration deviceTypeConfiguration) {
|
||||
if (deviceTypeConfiguration.getOperations() != null) {
|
||||
List<String> startupOperations = deviceTypeConfiguration.getStartupOperations();
|
||||
if (startupOperations != null && !startupOperations.isEmpty()) {
|
||||
startupOperationConfig.setStartupOperations(startupOperations);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
@ -15,6 +15,22 @@
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*
|
||||
*
|
||||
* Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.wso2.carbon.device.mgt.extensions.device.type.template.config;
|
||||
|
||||
@ -99,6 +115,10 @@ public class DeviceTypeConfiguration {
|
||||
this.deviceTypePlatformDetails = deviceTypePlatformDetails;
|
||||
}
|
||||
|
||||
@XmlElementWrapper(name = "StartupOperationConfig")
|
||||
@XmlElement(name = "Operation", required = true)
|
||||
protected List<String> startupOperations;
|
||||
|
||||
public List<String> getOperations() {
|
||||
return operations;
|
||||
}
|
||||
@ -375,4 +395,24 @@ public class DeviceTypeConfiguration {
|
||||
public void setDeviceAuthorizationConfig(DeviceAuthorizationConfig value) {
|
||||
this.deviceAuthorizationConfig = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the value of startup operation config
|
||||
*
|
||||
* @return possible object is
|
||||
* {@link List<String>}
|
||||
*/
|
||||
public List<String> getStartupOperations() {
|
||||
return startupOperations;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the value for startup operation config
|
||||
*
|
||||
* @param startupOperations possible object is
|
||||
* {@link List<String>}
|
||||
*/
|
||||
public void setStartupOperations(List<String> startupOperations) {
|
||||
this.startupOperations = startupOperations;
|
||||
}
|
||||
}
|
||||
|
||||
@ -14,8 +14,26 @@
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.wso2.carbon.device.mgt.extensions.device.type.template.config;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
@ -33,41 +51,46 @@ import java.util.List;
|
||||
* <p>The following schema fragment specifies the expected content contained within this class.
|
||||
*
|
||||
* <pre>
|
||||
* <complexType name="Feature">
|
||||
* <complexContent>
|
||||
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
||||
* <sequence>
|
||||
* <element name="Name" type="{http://www.w3.org/2001/XMLSchema}string"/>
|
||||
* <element name="Description" type="{http://www.w3.org/2001/XMLSchema}string"/>
|
||||
* <element name="Operation" type="{}Operation"/>
|
||||
* </sequence>
|
||||
* <attribute name="code" type="{http://www.w3.org/2001/XMLSchema}string" />
|
||||
* </restriction>
|
||||
* </complexContent>
|
||||
* </complexType>
|
||||
* <xs:element name="Feature">
|
||||
* <xs:complexType>
|
||||
* <xs:sequence>
|
||||
* <xs:element name="Name" type="xs:string" />
|
||||
* <xs:element name="Description" type="xs:string" />
|
||||
* <xs:element name="Operation" type="{}Operation" />
|
||||
* </xs:sequence>
|
||||
* <xs:attribute name="type" type="xs:string" />
|
||||
* <xs:attribute name="code" type="xs:string" />
|
||||
* </xs:complexType>
|
||||
* </xs:element>
|
||||
* </pre>
|
||||
*
|
||||
*
|
||||
*/
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
@XmlType(name = "Feature", propOrder = {
|
||||
"name",
|
||||
"description",
|
||||
"operation", "metaData"
|
||||
"operation",
|
||||
"metaData"
|
||||
})
|
||||
public class Feature {
|
||||
|
||||
@XmlElement(name = "Name", required = true)
|
||||
protected String name;
|
||||
|
||||
@XmlElement(name = "Description", required = true)
|
||||
protected String description;
|
||||
@XmlElement(name = "Operation", required = true)
|
||||
|
||||
@XmlElement(name = "Operation")
|
||||
protected Operation operation;
|
||||
|
||||
@XmlAttribute(name = "type", required = true)
|
||||
protected String type;
|
||||
|
||||
@XmlAttribute(name = "code")
|
||||
protected String code;
|
||||
|
||||
@XmlElementWrapper(name = "MetaData")
|
||||
@XmlElement(name = "Property", required = true)
|
||||
protected List<String> metaData;
|
||||
private List<String> metaData;
|
||||
|
||||
/**
|
||||
* Gets the value of the name property.
|
||||
@ -172,4 +195,12 @@ public class Feature {
|
||||
public void setMetaData(List<String> metaData) {
|
||||
this.metaData = metaData;
|
||||
}
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
}
|
||||
|
||||
@ -32,15 +32,15 @@ import java.util.List;
|
||||
* <p>The following schema fragment specifies the expected content contained within this class.
|
||||
*
|
||||
* <pre>
|
||||
* <complexType name="Features">
|
||||
* <complexContent>
|
||||
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
||||
* <sequence>
|
||||
* <element name="Feature" type="{}Feature"/>
|
||||
* </sequence>
|
||||
* </restriction>
|
||||
* </complexContent>
|
||||
* </complexType>
|
||||
* <complexType name="Features">
|
||||
* <complexContent>
|
||||
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
||||
* <sequence>
|
||||
* <element name="Feature" type="{}Feature"/>
|
||||
* </sequence>
|
||||
* </restriction>
|
||||
* </complexContent>
|
||||
* </complexType>
|
||||
* </pre>
|
||||
*
|
||||
*
|
||||
|
||||
@ -0,0 +1,76 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.wso2.carbon.device.mgt.extensions.device.type.template.config;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
|
||||
/**
|
||||
* Java class for filter complex type.
|
||||
*
|
||||
* The following schema fragment specifies the expected content contained within this class.
|
||||
*
|
||||
* <pre>
|
||||
* <xs:element name="uiParam" maxOccurs="unbounded">
|
||||
* <xs:complexType>
|
||||
* <xs:sequence>
|
||||
* <xs:element name="property" type="xs:string" />
|
||||
* <xs:element name="value" type="xs:string" />
|
||||
* <xs:element name="description" type="xs:string" />
|
||||
* </xs:sequence>
|
||||
* </xs:complexType>
|
||||
* </xs:element>
|
||||
* </pre>
|
||||
*/
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
public class Filter {
|
||||
@XmlElement(name = "property", required = true)
|
||||
private String property;
|
||||
|
||||
@XmlElement(name = "value", required = true)
|
||||
private String value;
|
||||
|
||||
@XmlElement(name = "description", required = true)
|
||||
private String description;
|
||||
|
||||
public String getProperty() {
|
||||
return property;
|
||||
}
|
||||
|
||||
public void setProperty(String property) {
|
||||
this.property = property;
|
||||
}
|
||||
|
||||
public String getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public void setValue(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public void setDescription(String description) {
|
||||
this.description = description;
|
||||
}
|
||||
}
|
||||
@ -14,7 +14,24 @@
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.wso2.carbon.device.mgt.extensions.device.type.template.config;
|
||||
|
||||
@ -27,26 +44,24 @@ import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* <p>Java class for FormParameters complex type.
|
||||
* <p>Java class for fromParams complex type.
|
||||
*
|
||||
* <p>The following schema fragment specifies the expected content contained within this class.
|
||||
*
|
||||
* <pre>
|
||||
* <complexType name="FormParameters">
|
||||
* <complexContent>
|
||||
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
||||
* <sequence>
|
||||
* <element name="Parameter" type="{http://www.w3.org/2001/XMLSchema}string"/>
|
||||
* </sequence>
|
||||
* </restriction>
|
||||
* </complexContent>
|
||||
* </complexType>
|
||||
* <complexType name="formParams">
|
||||
* <complexContent>
|
||||
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
||||
* <sequence>
|
||||
* <element name="Parameter" type="{http://www.w3.org/2001/XMLSchema}string"/>
|
||||
* </sequence>
|
||||
* </restriction>
|
||||
* </complexContent>
|
||||
* </complexType>
|
||||
* </pre>
|
||||
*
|
||||
*
|
||||
*/
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
@XmlType(name = "FormParameters", propOrder = {
|
||||
@XmlType(name = "formParams", propOrder = {
|
||||
"parameter"
|
||||
})
|
||||
public class FormParameters {
|
||||
@ -56,7 +71,7 @@ public class FormParameters {
|
||||
|
||||
public List<String> getParameter() {
|
||||
if (parameter == null) {
|
||||
parameter = new ArrayList<String>();
|
||||
parameter = new ArrayList<>();
|
||||
}
|
||||
return this.parameter;
|
||||
}
|
||||
|
||||
@ -14,8 +14,26 @@
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.wso2.carbon.device.mgt.extensions.device.type.template.config;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
@ -26,164 +44,71 @@ import javax.xml.bind.annotation.XmlType;
|
||||
|
||||
|
||||
/**
|
||||
* <p>Java class for Operation complex type.
|
||||
* Java class for Operation complex type.
|
||||
*
|
||||
* <p>The following schema fragment specifies the expected content contained within this class.
|
||||
* The following schema fragment specifies the expected content contained within this class.
|
||||
*
|
||||
* <pre>
|
||||
* <complexType name="Operation">
|
||||
* <complexContent>
|
||||
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
||||
* <sequence>
|
||||
* <element name="QueryParameters" type="{}QueryParameters"/>
|
||||
* <element name="FormParameters" type="{}FormParameters"/>
|
||||
* </sequence>
|
||||
* <attribute name="context" type="{http://www.w3.org/2001/XMLSchema}string" />
|
||||
* <attribute name="method" type="{http://www.w3.org/2001/XMLSchema}string" />
|
||||
* <attribute name="type" type="{http://www.w3.org/2001/XMLSchema}string" />
|
||||
* </restriction>
|
||||
* </complexContent>
|
||||
* </complexType>
|
||||
* <xs:element name="Operation">
|
||||
* <xs:complexType>
|
||||
* <xs:sequence>
|
||||
* <xs:element name="params" type="{}Params"/>
|
||||
* <xs:element name="metadata" type="{}OperationMetadata"/>
|
||||
* </xs:sequence>
|
||||
* <xs:attribute name="hidden" type="xs:boolean"/>
|
||||
* <xs:attribute name="icon" type="xs:string"/>
|
||||
* </xs:complexType>
|
||||
* </xs:element>
|
||||
* </pre>
|
||||
*
|
||||
*
|
||||
*/
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
@XmlType(name = "Operation", propOrder = {
|
||||
"queryParameters",
|
||||
"formParameters"
|
||||
"params",
|
||||
"metadata"
|
||||
})
|
||||
public class Operation {
|
||||
|
||||
@XmlElement(name = "QueryParameters")
|
||||
protected QueryParameters queryParameters;
|
||||
@XmlElement(name = "FormParameters")
|
||||
protected FormParameters formParameters;
|
||||
@XmlAttribute(name = "context")
|
||||
protected String context;
|
||||
@XmlAttribute(name = "method")
|
||||
protected String method;
|
||||
@XmlAttribute(name = "type")
|
||||
protected String type;
|
||||
@XmlElement(name = "params")
|
||||
private Params params;
|
||||
|
||||
/**
|
||||
* Gets the value of the Content Type property.
|
||||
*
|
||||
* @return
|
||||
* possible object is
|
||||
* {@link String }
|
||||
*
|
||||
*/
|
||||
public String getType() {
|
||||
return type;
|
||||
@XmlElement(name = "metadata", required = true)
|
||||
private OperationMetadata metadata;
|
||||
|
||||
@XmlAttribute(name = "hidden", required = true)
|
||||
private boolean hidden;
|
||||
|
||||
@XmlAttribute(name = "icon")
|
||||
private String icon;
|
||||
|
||||
public Params getParams() {
|
||||
return params;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the value of the Content Type property.
|
||||
*
|
||||
* @param type
|
||||
* allowed object is
|
||||
* {@link String }
|
||||
*
|
||||
*/
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
public void setParams(Params params) {
|
||||
this.params = params;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the value of the queryParameters property.
|
||||
*
|
||||
* @return
|
||||
* possible object is
|
||||
* {@link QueryParameters }
|
||||
*
|
||||
*/
|
||||
public QueryParameters getQueryParameters() {
|
||||
return queryParameters;
|
||||
public OperationMetadata getMetadata() {
|
||||
return metadata;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the value of the queryParameters property.
|
||||
*
|
||||
* @param value
|
||||
* allowed object is
|
||||
* {@link QueryParameters }
|
||||
*
|
||||
*/
|
||||
public void setQueryParameters(QueryParameters value) {
|
||||
this.queryParameters = value;
|
||||
public void setMetadata(OperationMetadata metadata) {
|
||||
this.metadata = metadata;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the value of the formParameters property.
|
||||
*
|
||||
* @return
|
||||
* possible object is
|
||||
* {@link FormParameters }
|
||||
*
|
||||
*/
|
||||
public FormParameters getFormParameters() {
|
||||
return formParameters;
|
||||
public String getIcon() {
|
||||
return icon;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the value of the formParameters property.
|
||||
*
|
||||
* @param value
|
||||
* allowed object is
|
||||
* {@link FormParameters }
|
||||
*
|
||||
*/
|
||||
public void setFormParameters(FormParameters value) {
|
||||
this.formParameters = value;
|
||||
public void setIcon(String icon) {
|
||||
this.icon = icon;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the value of the context property.
|
||||
*
|
||||
* @return
|
||||
* possible object is
|
||||
* {@link String }
|
||||
*
|
||||
*/
|
||||
public String getContext() {
|
||||
return context;
|
||||
public boolean isHidden() {
|
||||
return hidden;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the value of the context property.
|
||||
*
|
||||
* @param value
|
||||
* allowed object is
|
||||
* {@link String }
|
||||
*
|
||||
*/
|
||||
public void setContext(String value) {
|
||||
this.context = value;
|
||||
public void setHidden(boolean hidden) {
|
||||
this.hidden = hidden;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the value of the method property.
|
||||
*
|
||||
* @return
|
||||
* possible object is
|
||||
* {@link String }
|
||||
*
|
||||
*/
|
||||
public String getMethod() {
|
||||
return method;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the value of the method property.
|
||||
*
|
||||
* @param value
|
||||
* allowed object is
|
||||
* {@link String }
|
||||
*
|
||||
*/
|
||||
public void setMethod(String value) {
|
||||
this.method = value;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,120 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.wso2.carbon.device.mgt.extensions.device.type.template.config;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlElementWrapper;
|
||||
import javax.xml.bind.annotation.XmlType;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Java class for metadata complex type.
|
||||
*
|
||||
* The following schema fragment specifies the expected content contained within this class.
|
||||
*
|
||||
* <pre>
|
||||
* <xs:element name="metadata">
|
||||
* <xs:complexType>
|
||||
* <xs:sequence>
|
||||
* <xs:element name="uri" type="xs:string" />
|
||||
* <xs:element name="method" type="xs:string" />
|
||||
* <xs:element name="contentType" type="xs:string" />
|
||||
* <xs:element name="permission" type="xs:string" />
|
||||
* <xs:element name="filters">
|
||||
* <xs:complexType>
|
||||
* <xs:sequence>
|
||||
* <xs:element name="property" type="xs:string" />
|
||||
* <xs:element name="value" type="xs:string" />
|
||||
* <xs:element name="description" type="xs:string" />
|
||||
* </xs:sequence>
|
||||
* </xs:complexType>
|
||||
* </xs:element>
|
||||
* </xs:sequence>
|
||||
* </xs:complexType>
|
||||
* </xs:element>
|
||||
* </pre>
|
||||
*/
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
@XmlType(name = "metadata", propOrder = {
|
||||
"uri",
|
||||
"method",
|
||||
"contentType",
|
||||
"permission",
|
||||
"filterList"
|
||||
})
|
||||
public class OperationMetadata {
|
||||
|
||||
@XmlElement(name = "uri", required = true)
|
||||
private String uri;
|
||||
|
||||
@XmlElement(name = "method", required = true)
|
||||
private String method;
|
||||
|
||||
@XmlElement(name = "contentType")
|
||||
private String contentType;
|
||||
|
||||
@XmlElement(name = "permission")
|
||||
private String permission;
|
||||
|
||||
@XmlElementWrapper(name = "filters")
|
||||
@XmlElement(name = "filter")
|
||||
private List<Filter> filterList;
|
||||
|
||||
public String getUri() {
|
||||
return uri;
|
||||
}
|
||||
|
||||
public void setUri(String uri) {
|
||||
this.uri = uri;
|
||||
}
|
||||
|
||||
public String getMethod() {
|
||||
return method;
|
||||
}
|
||||
|
||||
public void setMethod(String method) {
|
||||
this.method = method;
|
||||
}
|
||||
|
||||
public String getContentType() {
|
||||
return contentType;
|
||||
}
|
||||
|
||||
public void setContentType(String contentType) {
|
||||
this.contentType = contentType;
|
||||
}
|
||||
|
||||
public String getPermission() {
|
||||
return permission;
|
||||
}
|
||||
|
||||
public void setPermission(String permission) {
|
||||
this.permission = permission;
|
||||
}
|
||||
|
||||
public List<Filter> getFilterList() {
|
||||
return filterList;
|
||||
}
|
||||
|
||||
public void setFilters(List<Filter> filterList) {
|
||||
this.filterList = filterList;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,78 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.wso2.carbon.device.mgt.extensions.device.type.template.config;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlType;
|
||||
|
||||
/**
|
||||
* Java class for params complex type.
|
||||
*
|
||||
* The following schema fragment specifies the expected content contained within this class.
|
||||
*
|
||||
* <pre>
|
||||
* <xs:element name="params">
|
||||
* <xs:complexType>
|
||||
* <xs:sequence>
|
||||
* <xs:element name="queryParams" type="{}QueryParameters"/>
|
||||
* <xs:element name="formParams" type="{}FormParameters"/>
|
||||
* <xs:element name="uiParams" type="{}UIParameters"/>
|
||||
* </xs:sequence>
|
||||
* </xs:complexType>
|
||||
* </pre>
|
||||
*/
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
@XmlType(name = "params")
|
||||
public class Params {
|
||||
|
||||
@XmlElement(name = "queryParams")
|
||||
private QueryParameters queryParameters;
|
||||
|
||||
@XmlElement(name = "formParams")
|
||||
private FormParameters formParameters;
|
||||
|
||||
@XmlElement(name = "uiParams")
|
||||
private UIParameters uiParameters;
|
||||
|
||||
public QueryParameters getQueryParameters() {
|
||||
return queryParameters;
|
||||
}
|
||||
|
||||
public void setQueryParameters(QueryParameters queryParameters) {
|
||||
this.queryParameters = queryParameters;
|
||||
}
|
||||
|
||||
public FormParameters getFormParameters() {
|
||||
return formParameters;
|
||||
}
|
||||
|
||||
public void setFormParameters(FormParameters formParameters) {
|
||||
this.formParameters = formParameters;
|
||||
}
|
||||
|
||||
public UIParameters getUiParameters() {
|
||||
return uiParameters;
|
||||
}
|
||||
|
||||
public void setUiParameters(UIParameters uiParameters) {
|
||||
this.uiParameters = uiParameters;
|
||||
}
|
||||
}
|
||||
@ -14,8 +14,26 @@
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.wso2.carbon.device.mgt.extensions.device.type.template.config;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
@ -27,26 +45,24 @@ import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* <p>Java class for QueryParameters complex type.
|
||||
* Java class for queryParams complex type.
|
||||
*
|
||||
* <p>The following schema fragment specifies the expected content contained within this class.
|
||||
* The following schema fragment specifies the expected content contained within this class.
|
||||
*
|
||||
* <pre>
|
||||
* <complexType name="QueryParameters">
|
||||
* <complexContent>
|
||||
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
||||
* <sequence>
|
||||
* <element name="Parameter" type="{http://www.w3.org/2001/XMLSchema}string"/>
|
||||
* </sequence>
|
||||
* </restriction>
|
||||
* </complexContent>
|
||||
* </complexType>
|
||||
* <complexType name="queryParams">
|
||||
* <complexContent>
|
||||
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
||||
* <sequence>
|
||||
* <element name="Parameter" type="{http://www.w3.org/2001/XMLSchema}string"/>
|
||||
* </sequence>
|
||||
* </restriction>
|
||||
* </complexContent>
|
||||
* </complexType>
|
||||
* </pre>
|
||||
*
|
||||
*
|
||||
*/
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
@XmlType(name = "QueryParameters", propOrder = {
|
||||
@XmlType(name = "queryParams", propOrder = {
|
||||
"parameter"
|
||||
})
|
||||
public class QueryParameters {
|
||||
@ -56,7 +72,7 @@ public class QueryParameters {
|
||||
|
||||
public List<String> getParameter() {
|
||||
if (parameter == null) {
|
||||
parameter = new ArrayList<String>();
|
||||
parameter = new ArrayList<>();
|
||||
}
|
||||
return this.parameter;
|
||||
}
|
||||
|
||||
@ -0,0 +1,134 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.wso2.carbon.device.mgt.extensions.device.type.template.config;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlAttribute;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlElementWrapper;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Java class for uiParams complex type.
|
||||
*
|
||||
* The following schema fragment specifies the expected content contained within this class.
|
||||
*
|
||||
* <pre>
|
||||
* <xs:element name="uiParam" maxOccurs="unbounded">
|
||||
* <xs:complexType>
|
||||
* <xs:sequence>
|
||||
* <xs:element name="type" type="xs:string" />
|
||||
* <xs:element name="name" type="xs:string" />
|
||||
* <xs:element name="id" type="xs:string" />
|
||||
* <xs:element name="values">
|
||||
* <xs:complexType>
|
||||
* <xs:sequence>
|
||||
* <xs:element name="value" type="xs:string" />
|
||||
* </xs:sequence>
|
||||
* </xs:complexType>
|
||||
* </xs:element>
|
||||
* </xs:sequence>
|
||||
* <xs:attribute name="optional" type="xs:string" />
|
||||
* </xs:complexType>
|
||||
* </xs:element>
|
||||
* </pre>
|
||||
*
|
||||
*/
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
public class UIParameter {
|
||||
|
||||
@XmlElement(name = "id", required = true)
|
||||
protected String id;
|
||||
|
||||
@XmlAttribute(name = "optional", required = true)
|
||||
private boolean optional;
|
||||
|
||||
@XmlElement(name = "type", required = true)
|
||||
protected String type;
|
||||
|
||||
@XmlElement(name = "name")
|
||||
protected String name;
|
||||
|
||||
@XmlElement(name = "label")
|
||||
private String label;
|
||||
|
||||
@XmlElement(name = "helper")
|
||||
private String helper;
|
||||
|
||||
@XmlElementWrapper(name = "values")
|
||||
@XmlElement(name = "value")
|
||||
protected List<String> value;
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getLabel() {
|
||||
return label;
|
||||
}
|
||||
|
||||
public void setLabel(String label) {
|
||||
this.label = label;
|
||||
}
|
||||
|
||||
public String getHelper() {
|
||||
return helper;
|
||||
}
|
||||
|
||||
public void setHelper(String helper) {
|
||||
this.helper = helper;
|
||||
}
|
||||
|
||||
public List<String> getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public void setValue(List<String> value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public boolean isOptional() {
|
||||
return optional;
|
||||
}
|
||||
|
||||
public void setOptional(boolean optional) {
|
||||
this.optional = optional;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,48 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.wso2.carbon.device.mgt.extensions.device.type.template.config;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Java class for uiParams complex type.
|
||||
*
|
||||
* The following schema fragment specifies the expected content contained within this class.
|
||||
*
|
||||
* <pre>
|
||||
* <xs:element name="uiParams">
|
||||
* <xs:complexType>
|
||||
* <xs:sequence>
|
||||
* <xs:element name="uiParam" type="{}UIParameter"/>
|
||||
* </xs:sequence>
|
||||
* </xs:complexType>
|
||||
* </xs:element>
|
||||
* </pre>
|
||||
*
|
||||
*/
|
||||
public class UIParameters {
|
||||
|
||||
@XmlElement(name = "uiParam")
|
||||
private List<UIParameter> uiParams;
|
||||
|
||||
public List<UIParameter> getUiParameterList() {
|
||||
return this.uiParams;
|
||||
}
|
||||
}
|
||||
@ -16,12 +16,35 @@
|
||||
* under the License.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.wso2.carbon.device.mgt.extensions.device.type.template.feature;
|
||||
|
||||
import org.wso2.carbon.device.mgt.common.exceptions.DeviceManagementException;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.wso2.carbon.device.mgt.common.Feature;
|
||||
import org.wso2.carbon.device.mgt.common.FeatureManager;
|
||||
import org.wso2.carbon.device.mgt.extensions.device.type.template.config.Operation;
|
||||
import org.wso2.carbon.device.mgt.extensions.device.type.template.config.OperationMetadata;
|
||||
import org.wso2.carbon.device.mgt.extensions.device.type.template.config.Params;
|
||||
import org.wso2.carbon.device.mgt.extensions.device.type.template.config.UIParameter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
@ -37,10 +60,15 @@ public class ConfigurationBasedFeatureManager implements FeatureManager {
|
||||
private List<Feature> features = new ArrayList<>();
|
||||
private static final String METHOD = "method";
|
||||
private static final String URI = "uri";
|
||||
private static final String OPERATION_META = "operationMeta";
|
||||
private static final String CONTENT_TYPE = "contentType";
|
||||
private static final String PERMISSION = "permission";
|
||||
private static final String ICON = "icon";
|
||||
private static final String FILTERS = "filters";
|
||||
private static final String PATH_PARAMS = "pathParams";
|
||||
private static final String QUERY_PARAMS = "queryParams";
|
||||
private static final String FORM_PARAMS = "formParams";
|
||||
private static final String UI_PARAMS = "uiParams";
|
||||
private static final Pattern PATH_PARAM_REGEX = Pattern.compile("\\{(.*?)\\}");
|
||||
|
||||
public ConfigurationBasedFeatureManager(
|
||||
@ -50,6 +78,7 @@ public class ConfigurationBasedFeatureManager implements FeatureManager {
|
||||
deviceFeature.setCode(feature.getCode());
|
||||
deviceFeature.setName(feature.getName());
|
||||
deviceFeature.setDescription(feature.getDescription());
|
||||
deviceFeature.setType(feature.getType());
|
||||
Operation operation = feature.getOperation();
|
||||
List<Feature.MetadataEntry> metadataEntries = null;
|
||||
if (feature.getMetaData() != null) {
|
||||
@ -64,31 +93,53 @@ public class ConfigurationBasedFeatureManager implements FeatureManager {
|
||||
}
|
||||
}
|
||||
if (operation != null) {
|
||||
Map<String, Object> apiParams = new HashMap<>();
|
||||
apiParams.put(METHOD, operation.getMethod().toUpperCase());
|
||||
apiParams.put(URI, operation.getContext());
|
||||
apiParams.put(CONTENT_TYPE, operation.getType());
|
||||
deviceFeature.setHidden(operation.isHidden());
|
||||
Map<String, Object> operationMeta = new HashMap<>();
|
||||
OperationMetadata metadata = operation.getMetadata();
|
||||
|
||||
List<String> pathParams = new ArrayList<>();
|
||||
List<String> queryParams = new ArrayList<>();
|
||||
List<String> formParams = new ArrayList<>();
|
||||
setPathParams(operation.getContext(), pathParams);
|
||||
apiParams.put(PATH_PARAMS, pathParams);
|
||||
if (operation.getQueryParameters() != null) {
|
||||
queryParams = operation.getQueryParameters().getParameter();
|
||||
|
||||
if (metadata != null) {
|
||||
operationMeta.put(METHOD, metadata.getMethod().toUpperCase());
|
||||
operationMeta.put(URI, metadata.getUri());
|
||||
if (StringUtils.isNotEmpty(metadata.getContentType())) {
|
||||
operationMeta.put(CONTENT_TYPE, metadata.getContentType());
|
||||
}
|
||||
apiParams.put(QUERY_PARAMS, queryParams);
|
||||
if (operation.getFormParameters() != null) {
|
||||
formParams = operation.getFormParameters().getParameter();
|
||||
if (StringUtils.isNotEmpty(metadata.getPermission())) {
|
||||
operationMeta.put(PERMISSION, metadata.getPermission());
|
||||
}
|
||||
apiParams.put(FORM_PARAMS, formParams);
|
||||
if (metadata.getFilterList() != null && metadata.getFilterList().size() > 0) {
|
||||
operationMeta.put(FILTERS, metadata.getFilterList());
|
||||
}
|
||||
operationMeta.put(ICON, operation.getIcon());
|
||||
setPathParams(metadata.getUri(), pathParams);
|
||||
}
|
||||
operationMeta.put(PATH_PARAMS, pathParams);
|
||||
|
||||
Params params = operation.getParams();
|
||||
if (params != null) {
|
||||
List<String> queryParams = params.getQueryParameters() != null ?
|
||||
params.getQueryParameters().getParameter() : new ArrayList<>();
|
||||
List<String> formParams = params.getFormParameters() != null ?
|
||||
params.getFormParameters().getParameter() : new ArrayList<>();
|
||||
List<UIParameter> uiParams = params.getUiParameters() != null ?
|
||||
params.getUiParameters().getUiParameterList() : new ArrayList<>();
|
||||
operationMeta.put(QUERY_PARAMS, queryParams);
|
||||
operationMeta.put(UI_PARAMS, uiParams);
|
||||
operationMeta.put(FORM_PARAMS, formParams);
|
||||
}
|
||||
|
||||
if (metadataEntries == null) {
|
||||
metadataEntries = new ArrayList<>();
|
||||
}
|
||||
Feature.MetadataEntry metadataEntry = new Feature.MetadataEntry();
|
||||
metadataEntry.setId(-1);
|
||||
metadataEntry.setValue(apiParams);
|
||||
metadataEntry.setId(0);
|
||||
metadataEntry.setName(OPERATION_META);
|
||||
metadataEntry.setValue(operationMeta);
|
||||
metadataEntries.add(metadataEntry);
|
||||
deviceFeature.setMetadataEntries(metadataEntries);
|
||||
} else {
|
||||
deviceFeature.setHidden(true);
|
||||
}
|
||||
this.features.add(deviceFeature);
|
||||
}
|
||||
@ -120,6 +171,49 @@ public class ConfigurationBasedFeatureManager implements FeatureManager {
|
||||
return features;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Feature> getFeatures(String type) throws DeviceManagementException {
|
||||
if (StringUtils.isEmpty(type)) {
|
||||
return this.getFeatures();
|
||||
}
|
||||
|
||||
if (features == null) {
|
||||
return null;
|
||||
} else {
|
||||
List<Feature> filteredFeatures = new ArrayList<>();
|
||||
for (Feature feature : this.getFeatures()) {
|
||||
if (type.equals(feature.getType())) {
|
||||
filteredFeatures.add(feature);
|
||||
}
|
||||
}
|
||||
return filteredFeatures;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Feature> getFeatures(String type, boolean isHidden) throws DeviceManagementException {
|
||||
if (features == null) {
|
||||
return null;
|
||||
} else {
|
||||
List<Feature> filteredFeatures = new ArrayList<>();
|
||||
if (StringUtils.isEmpty(type)) {
|
||||
for (Feature feature : this.getFeatures()) {
|
||||
if (isHidden == feature.isHidden()) {
|
||||
filteredFeatures.add(feature);
|
||||
}
|
||||
}
|
||||
return filteredFeatures;
|
||||
} else {
|
||||
for (Feature feature : this.getFeatures()) {
|
||||
if (isHidden == feature.isHidden() && type.equals(feature.getType())) {
|
||||
filteredFeatures.add(feature);
|
||||
}
|
||||
}
|
||||
return filteredFeatures;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean removeFeature(String name) throws DeviceManagementException {
|
||||
return false;
|
||||
|
||||
@ -92,256 +92,474 @@
|
||||
</DataSource>
|
||||
|
||||
<Features>
|
||||
<Feature code="DEVICE_RING">
|
||||
<Feature type="operation" code="DEVICE_RING">
|
||||
<Name>Ring</Name>
|
||||
<Description>Ring the device</Description>
|
||||
<Operation context="/api/device-mgt/android/v1.0/admin/devices/ring" method="POST" type="application/json">
|
||||
<Operation hidden="false" icon="fw-dial-up">
|
||||
<params/>
|
||||
<metadata>
|
||||
<uri>/api/device-mgt/android/v1.0/admin/devices/ring</uri>
|
||||
<method>POST</method>
|
||||
<contentType>application/json</contentType>
|
||||
<permission>/device-mgt/devices/owning-device/operations/android/ring</permission>
|
||||
</metadata>
|
||||
</Operation>
|
||||
<MetaData>
|
||||
<Property>test</Property>
|
||||
</MetaData>
|
||||
</Feature>
|
||||
<Feature code="DEVICE_LOCK">
|
||||
<Feature type="operation" code="DEVICE_LOCK">
|
||||
<Name>Device Lock</Name>
|
||||
<Description>Lock the device</Description>
|
||||
<Operation context="/api/device-mgt/android/v1.0/admin/devices/lock-devices" method="POST" type="application/json">
|
||||
<Operation hidden="false" icon="fw-lock">
|
||||
<params>
|
||||
<uiParams>
|
||||
<uiParam optional="true">
|
||||
<type>text</type>
|
||||
<id>lock-message</id>
|
||||
<label>Message to be sent to the device</label>
|
||||
</uiParam>
|
||||
<uiParam optional="true">
|
||||
<type>checkbox</type>
|
||||
<id>hard-lock</id>
|
||||
<label>Hard lock enabled</label>
|
||||
</uiParam>
|
||||
</uiParams>
|
||||
</params>
|
||||
<metadata>
|
||||
<uri>/api/device-mgt/android/v1.0/admin/devices/lock-devices</uri>
|
||||
<method>POST</method>
|
||||
<contentType>application/json</contentType>
|
||||
<permission>/device-mgt/devices/owning-device/operations/android/ring</permission>
|
||||
</metadata>
|
||||
</Operation>
|
||||
</Feature>
|
||||
<Feature code="DEVICE_LOCATION">
|
||||
<Feature type="operation" code="DEVICE_LOCATION">
|
||||
<Name>Location</Name>
|
||||
<Description>Request coordinates of device location</Description>
|
||||
<Operation context="/api/device-mgt/android/v1.0/admin/devices/location" method="POST" type="application/json">
|
||||
<Operation hidden="false" icon="fw-map-location">
|
||||
<params/>
|
||||
<metadata>
|
||||
<uri>/api/device-mgt/android/v1.0/admin/devices/location</uri>
|
||||
<method>POST</method>
|
||||
<contentType>application/json</contentType>
|
||||
<permission>/device-mgt/devices/owning-device/operations/android/location</permission>
|
||||
</metadata>
|
||||
</Operation>
|
||||
</Feature>
|
||||
<Feature code="CLEAR_PASSWORD">
|
||||
<Feature type="operation" code="CLEAR_PASSWORD">
|
||||
<Name>Clear Password</Name>
|
||||
<Description>Clear current password</Description>
|
||||
<Operation context="/api/device-mgt/android/v1.0/admin/devices/clear-password" method="POST" type="application/json">
|
||||
<Description>Clear current password (This functionality is only working with profile owners from Android 7.0 API 24 onwards.)</Description>
|
||||
<Operation hidden="false" icon="fw-clear">
|
||||
<params/>
|
||||
<metadata>
|
||||
<uri>/api/device-mgt/android/v1.0/admin/devices/clear-password</uri>
|
||||
<method>POST</method>
|
||||
<contentType>application/json</contentType>
|
||||
<permission>/device-mgt/devices/owning-device/operations/android/clear-passwor</permission>
|
||||
</metadata>
|
||||
</Operation>
|
||||
</Feature>
|
||||
<Feature code="DEVICE_REBOOT">
|
||||
<Feature type="operation" code="DEVICE_REBOOT">
|
||||
<Name>Reboot</Name>
|
||||
<Description>Reboot the device</Description>
|
||||
<Operation context="/api/device-mgt/android/v1.0/admin/devices/reboot" method="POST" type="application/json">
|
||||
<Operation hidden="false" icon="fw-refresh">
|
||||
<params/>
|
||||
<metadata>
|
||||
<uri>/api/device-mgt/android/v1.0/admin/devices/reboot</uri>
|
||||
<method>POST</method>
|
||||
<contentType>application/json</contentType>
|
||||
<permission>/device-mgt/devices/owning-device/operations/android/reboot</permission>
|
||||
<filters>
|
||||
<filter>
|
||||
<property>ownership</property>
|
||||
<value>COPE</value>
|
||||
<description>This feature is only available in COPE/COSU</description>
|
||||
</filter>
|
||||
</filters>
|
||||
</metadata>
|
||||
</Operation>
|
||||
</Feature>
|
||||
<Feature code="UPGRADE_FIRMWARE">
|
||||
<Feature type="operation" code="UPGRADE_FIRMWARE">
|
||||
<Name>Upgrade Firmware</Name>
|
||||
<Description>Upgrade Firmware</Description>
|
||||
<Operation context="/api/device-mgt/android/v1.0/admin/devices/upgrade-firmware" method="POST" type="application/json">
|
||||
<Operation hidden="false" icon="fw-hardware">
|
||||
<params>
|
||||
<uiParams>
|
||||
<uiParam optional="true">
|
||||
<type>checkbox</type>
|
||||
<id>immediate</id>
|
||||
<label>Instant Upgrade</label>
|
||||
<helper>Once enabled, device firmware upgrade process will start instantly.</helper>
|
||||
</uiParam>
|
||||
<uiParam optional="false">
|
||||
<type>text</type>
|
||||
<id>schedule</id>
|
||||
<label>Enter the date and time to schedule firmware upgrade.</label>
|
||||
</uiParam>
|
||||
<uiParam optional="true">
|
||||
<type>text</type>
|
||||
<id>server</id>
|
||||
<label>Enter firmware upgrade server URL (ie. http://abc.com or http://abc.com/ota)</label>
|
||||
</uiParam>
|
||||
</uiParams>
|
||||
</params>
|
||||
<metadata>
|
||||
<uri>/api/device-mgt/android/v1.0/admin/devices/reboot</uri>
|
||||
<method>POST</method>
|
||||
<contentType>application/json</contentType>
|
||||
<permission>/device-mgt/devices/owning-device/operations/android/upgrade-firmware</permission>
|
||||
<filters>
|
||||
<filter>
|
||||
<property>ownership</property>
|
||||
<value>COPE</value>
|
||||
<description>This feature is only available in COPE/COSU</description>
|
||||
</filter>
|
||||
</filters>
|
||||
</metadata>
|
||||
</Operation>
|
||||
</Feature>
|
||||
<Feature code="DEVICE_MUTE">
|
||||
<Feature type="operation" code="DEVICE_MUTE">
|
||||
<Name>Mute</Name>
|
||||
<Description>Enable mute in the device</Description>
|
||||
<Operation context="/api/device-mgt/android/v1.0/admin/devices/mute" method="POST" type="application/json">
|
||||
<Operation hidden="false" icon="fw-mute">
|
||||
<params/>
|
||||
<metadata>
|
||||
<uri>/api/device-mgt/android/v1.0/admin/devices/mute</uri>
|
||||
<method>POST</method>
|
||||
<contentType>application/json</contentType>
|
||||
<permission>/device-mgt/devices/owning-device/operations/android/mute</permission>
|
||||
</metadata>
|
||||
</Operation>
|
||||
</Feature>
|
||||
<Feature code="NOTIFICATION">
|
||||
<Feature type="operation" code="NOTIFICATION">
|
||||
<Name>Message</Name>
|
||||
<Description>Send message</Description>
|
||||
<Operation context="/api/device-mgt/android/v1.0/admin/devices/send-notification" method="POST" type="application/json">
|
||||
<Operation hidden="false" icon="fw-message">
|
||||
<params>
|
||||
<uiParams>
|
||||
<uiParam optional="false">
|
||||
<type>text</type>
|
||||
<id>messageTitle</id>
|
||||
<label>Title Here...</label>
|
||||
</uiParam>
|
||||
<uiParam optional="false">
|
||||
<type>text</type>
|
||||
<id>messageText</id>
|
||||
<label>Message Here...</label>
|
||||
</uiParam>
|
||||
</uiParams>
|
||||
</params>
|
||||
<metadata>
|
||||
<uri>/api/device-mgt/android/v1.0/admin/devices/send-notification</uri>
|
||||
<method>POST</method>
|
||||
<contentType>application/json</contentType>
|
||||
<permission>/device-mgt/devices/owning-device/operations/android/send-notification</permission>
|
||||
</metadata>
|
||||
</Operation>
|
||||
</Feature>
|
||||
<Feature code="CHANGE_LOCK_CODE">
|
||||
<Feature type="operation" code="CHANGE_LOCK_CODE">
|
||||
<Name>Change Lock-code</Name>
|
||||
<Description>Change current lock code</Description>
|
||||
<Operation context="/api/device-mgt/android/v1.0/admin/devices/change-lock-code" method="POST" type="application/json">
|
||||
<Description>Change current lock code (This functionality is only working with profile owners from Android 7.0 API 24 onwards.)</Description>
|
||||
<Operation hidden="false" icon="fw-security">
|
||||
<params/>
|
||||
<metadata>
|
||||
<uri>/api/device-mgt/android/v1.0/admin/devices/change-lock-code</uri>
|
||||
<method>POST</method>
|
||||
<contentType>application/json</contentType>
|
||||
<permission>/device-mgt/devices/owning-device/operations/android/change-lock-code</permission>
|
||||
</metadata>
|
||||
</Operation>
|
||||
</Feature>
|
||||
<Feature code="ENTERPRISE_WIPE">
|
||||
<Feature type="operation" code="FILE_TRANSFER">
|
||||
<Name>File Transfer</Name>
|
||||
<Description>Transfer file to the device</Description>
|
||||
<Operation hidden="false" icon="fw-save">
|
||||
<params>
|
||||
<uiParams>
|
||||
<uiParam optional="false">
|
||||
<type>radio</type>
|
||||
<name>directionSelection</name>
|
||||
<id>upload</id>
|
||||
<values>
|
||||
<value>To device</value>
|
||||
</values>
|
||||
</uiParam>
|
||||
<uiParam optional="false">
|
||||
<type>radio</type>
|
||||
<name>directionSelection</name>
|
||||
<id>download</id>
|
||||
<values>
|
||||
<value>From device</value>
|
||||
</values>
|
||||
</uiParam>
|
||||
<uiParam optional="false">
|
||||
<type>select</type>
|
||||
<name>protocolSelection</name>
|
||||
<id>protocol</id>
|
||||
<values>
|
||||
<value>HTTP</value>
|
||||
<value>FTP</value>
|
||||
<value>SFTP</value>
|
||||
</values>
|
||||
<label>Protocol</label>
|
||||
</uiParam>
|
||||
<uiParam optional="false">
|
||||
<type>text</type>
|
||||
<id>fileURL</id>
|
||||
<label>URL to upload file from device</label>
|
||||
</uiParam>
|
||||
<uiParam optional="false">
|
||||
<type>info</type>
|
||||
<id>defaultFileLocation</id>
|
||||
<label>File will be saved in Default download directory if not specified.</label>
|
||||
</uiParam>
|
||||
<uiParam optional="false">
|
||||
<type>text</type>
|
||||
<id>fileLocation</id>
|
||||
<label>File location in the device</label>
|
||||
</uiParam>
|
||||
<uiParam optional="false">
|
||||
<type>checkbox</type>
|
||||
<id>authentication</id>
|
||||
<label>Authentication required</label>
|
||||
</uiParam>
|
||||
<uiParam optional="false">
|
||||
<type>text</type>
|
||||
<id>userName</id>
|
||||
<label>Username</label>
|
||||
</uiParam>
|
||||
<uiParam optional="false">
|
||||
<type>password</type>
|
||||
<id>ftpPassword</id>
|
||||
<label>Password (Ignore if not needed)</label>
|
||||
</uiParam>
|
||||
</uiParams>
|
||||
</params>
|
||||
<metadata>
|
||||
<uri>/api/device-mgt/android/v1.0/admin/devices/file-transfer</uri>
|
||||
<method>POST</method>
|
||||
<contentType>application/json</contentType>
|
||||
<permission>/device-mgt/devices/owning-device/operations/android/file-transfer</permission>
|
||||
</metadata>
|
||||
</Operation>
|
||||
</Feature>
|
||||
<Feature type="operation" code="ENTERPRISE_WIPE">
|
||||
<Name>Enterprise Wipe</Name>
|
||||
<Description>Remove enterprise applications</Description>
|
||||
<Operation context="/api/device-mgt/android/v1.0/admin/devices/enterprise-wipe" method="POST" type="application/json">
|
||||
<Operation hidden="false" icon="fw-block">
|
||||
<params/>
|
||||
<metadata>
|
||||
<uri>/api/device-mgt/android/v1.0/admin/devices/enterprise-wipe</uri>
|
||||
<method>POST</method>
|
||||
<contentType>application/json</contentType>
|
||||
<permission>/device-mgt/devices/owning-device/operations/android/enterprise-wipe</permission>
|
||||
</metadata>
|
||||
</Operation>
|
||||
</Feature>
|
||||
<Feature code="WIPE_DATA">
|
||||
<Feature type="operation" code="WIPE_DATA">
|
||||
<Name>Wipe Data</Name>
|
||||
<Description>Factory reset the device</Description>
|
||||
<Operation context="/api/device-mgt/android/v1.0/admin/devices/wipe" method="POST" type="application/json">
|
||||
<Operation hidden="false" icon="fw-delete">
|
||||
<params>
|
||||
<uiParams>
|
||||
<uiParam optional="false">
|
||||
<type>text</type>
|
||||
<id>pin</id>
|
||||
<label>Enter PIN code* of the device.</label>
|
||||
</uiParam>
|
||||
</uiParams>
|
||||
</params>
|
||||
<metadata>
|
||||
<uri>/api/device-mgt/android/v1.0/admin/devices/wipe</uri>
|
||||
<method>POST</method>
|
||||
<contentType>application/json</contentType>
|
||||
<permission>/device-mgt/devices/owning-device/operations/android/wipe</permission>
|
||||
</metadata>
|
||||
</Operation>
|
||||
</Feature>
|
||||
<Feature code="WIFI">
|
||||
<Feature type="policy" code="WIFI">
|
||||
<Name>Wifi</Name>
|
||||
<Description>Setting up wifi configuration</Description>
|
||||
</Feature>
|
||||
<Feature code="CAMERA">
|
||||
<Feature type="policy" code="GLOBAL_PROXY">
|
||||
<Name>Global Proxy</Name>
|
||||
<Description>Setting up a network-independent global HTTP proxy on a device.</Description>
|
||||
</Feature>
|
||||
<Feature type="policy" code="CAMERA">
|
||||
<Name>Camera</Name>
|
||||
<Description>Enable or disable camera</Description>
|
||||
</Feature>
|
||||
<Feature code="EMAIL">
|
||||
<Feature type="policy" code="EMAIL">
|
||||
<Name>Email</Name>
|
||||
<Description>Configure email settings</Description>
|
||||
</Feature>
|
||||
<Feature code="DEVICE_INFO">
|
||||
<Feature type="operation" code="DEVICE_INFO">
|
||||
<Name>Device info</Name>
|
||||
<Description>Request device information</Description>
|
||||
</Feature>
|
||||
<Feature code="APPLICATION_LIST">
|
||||
<Feature type="operation" code="APPLICATION_LIST">
|
||||
<Name>Application List</Name>
|
||||
<Description>Request list of current installed applications</Description>
|
||||
</Feature>
|
||||
<Feature code="INSTALL_APPLICATION">
|
||||
<Feature type="operation" code="INSTALL_APPLICATION">
|
||||
<Name>Install App</Name>
|
||||
<Description>Install App</Description>
|
||||
</Feature>
|
||||
<Feature code="UNINSTALL_APPLICATION">
|
||||
<Feature type="operation" code="UNINSTALL_APPLICATION">
|
||||
<Name>Uninstall App</Name>
|
||||
<Description>Uninstall App</Description>
|
||||
</Feature>
|
||||
<Feature code="BLACKLIST_APPLICATIONS">
|
||||
<Feature type="policy" code="BLACKLIST_APPLICATIONS">
|
||||
<Name>Blacklist app</Name>
|
||||
<Description>Blacklist applications</Description>
|
||||
</Feature>
|
||||
<Feature code="ENCRYPT_STORAGE">
|
||||
<Feature type="policy" code="ENCRYPT_STORAGE">
|
||||
<Name>Encrypt Storage</Name>
|
||||
<Description>Encrypt storage</Description>
|
||||
</Feature>
|
||||
<Feature code="PASSCODE_POLICY">
|
||||
<Feature type="policy" code="PASSCODE_POLICY">
|
||||
<Name>Password Policy</Name>
|
||||
<Description>Set passcode policy</Description>
|
||||
</Feature>
|
||||
<Feature code="VPN">
|
||||
<Feature type="policy" code="VPN">
|
||||
<Name>Configure VPN</Name>
|
||||
<Description>Configure VPN settings</Description>
|
||||
</Feature>
|
||||
<Feature code="DISALLOW_ADJUST_VOLUME">
|
||||
<Feature type="policy" code="DISALLOW_ADJUST_VOLUME">
|
||||
<Name>Disallow user to change volume</Name>
|
||||
<Description>Allow or disallow user to change volume"</Description>
|
||||
</Feature>
|
||||
<Feature code="DISALLOW_CONFIG_BLUETOOTH">
|
||||
<Feature type="policy" code="DISALLOW_CONFIG_BLUETOOTH">
|
||||
<Name>Disallow bluetooth configuration</Name>
|
||||
<Description>Allow or disallow bluetooth configuration</Description>
|
||||
</Feature>
|
||||
<Feature code="DISALLOW_CONFIG_CELL_BROADCASTS">
|
||||
<Feature type="policy" code="DISALLOW_CONFIG_CELL_BROADCASTS">
|
||||
<Name>Disallow user to change cell broadcast configurations</Name>
|
||||
<Description>Allow or disallow user to change cell broadcast configurations</Description>
|
||||
</Feature>
|
||||
<Feature code="DISALLOW_CONFIG_CREDENTIALS">
|
||||
<Feature type="policy" code="DISALLOW_CONFIG_CREDENTIALS">
|
||||
<Name>Disallow user to change user credentials</Name>
|
||||
<Description>Allow or disallow user to change user credentials</Description>
|
||||
</Feature>
|
||||
<Feature code="DISALLOW_CONFIG_MOBILE_NETWORKS">
|
||||
<Feature type="policy" code="DISALLOW_CONFIG_MOBILE_NETWORKS">
|
||||
<Name>Disallow user to change mobile networks configurations</Name>
|
||||
<Description>Allow or disallow user to change mobile networks configurations</Description>
|
||||
</Feature>
|
||||
<Feature code="DISALLOW_CONFIG_TETHERING">
|
||||
<Feature type="policy" code="DISALLOW_CONFIG_TETHERING">
|
||||
<Name>Disallow user to change tethering configurations</Name>
|
||||
<Description>Allow or disallow user to change tethering configurations</Description>
|
||||
</Feature>
|
||||
<Feature code="DISALLOW_CONFIG_VPN">
|
||||
<Feature type="policy" code="DISALLOW_CONFIG_VPN">
|
||||
<Name>Disallow user to change VPN configurations</Name>
|
||||
<Description>Allow or disallow user to change VPN configurations</Description>
|
||||
</Feature>
|
||||
<Feature code="DISALLOW_CONFIG_WIFI">
|
||||
<Feature type="policy" code="DISALLOW_CONFIG_WIFI">
|
||||
<Name>Disallow user to change WIFI configurations</Name>
|
||||
<Description>Allow or disallow user to change WIFI configurations</Description>
|
||||
</Feature>
|
||||
<Feature code="DISALLOW_APPS_CONTROL">
|
||||
<Feature type="policy" code="DISALLOW_APPS_CONTROL">
|
||||
<Name>Disallow user to change app control</Name>
|
||||
<Description>Allow or disallow user to change app control</Description>
|
||||
</Feature>
|
||||
<Feature code="DISALLOW_CREATE_WINDOWS">
|
||||
<Feature type="policy" code="DISALLOW_CREATE_WINDOWS">
|
||||
<Name>Disallow window creation</Name>
|
||||
<Description>Allow or disallow window creation</Description>
|
||||
</Feature>
|
||||
<Feature code="DISALLOW_APPS_CONTROL">
|
||||
<Feature type="policy" code="DISALLOW_APPS_CONTROL">
|
||||
<Name>Disallow user to change app control configurations</Name>
|
||||
<Description>Allow or disallow user to change app control configurations</Description>
|
||||
</Feature>
|
||||
<Feature code="DISALLOW_CROSS_PROFILE_COPY_PASTE">
|
||||
<Feature type="policy" code="DISALLOW_CROSS_PROFILE_COPY_PASTE">
|
||||
<Name>Disallow cross profile copy paste</Name>
|
||||
<Description>Allow or disallow cross profile copy paste</Description>
|
||||
</Feature>
|
||||
<Feature code="DISALLOW_DEBUGGING_FEATURES">
|
||||
<Feature type="policy" code="DISALLOW_DEBUGGING_FEATURES">
|
||||
<Name>Disallow debugging features</Name>
|
||||
<Description>Allow or disallow debugging features</Description>
|
||||
</Feature>
|
||||
<Feature code="DISALLOW_FACTORY_RESET">
|
||||
<Feature type="policy" code="DISALLOW_FACTORY_RESET">
|
||||
<Name>Disallow factory reset</Name>
|
||||
<Description>Allow or disallow factory reset</Description>
|
||||
</Feature>
|
||||
<Feature code="DISALLOW_ADD_USER">
|
||||
<Feature type="policy" code="DISALLOW_ADD_USER">
|
||||
<Name>Disallow add user</Name>
|
||||
<Description>Allow or disallow add user</Description>
|
||||
</Feature>
|
||||
<Feature code="DISALLOW_INSTALL_APPS">
|
||||
<Feature type="policy" code="DISALLOW_INSTALL_APPS">
|
||||
<Name>Disallow install apps</Name>
|
||||
<Description>Allow or disallow install apps</Description>
|
||||
</Feature>
|
||||
<Feature code="DISALLOW_INSTALL_UNKNOWN_SOURCES">
|
||||
<Feature type="policy" code="DISALLOW_INSTALL_UNKNOWN_SOURCES">
|
||||
<Name>Disallow install unknown sources</Name>
|
||||
<Description>Allow or disallow install unknown sources</Description>
|
||||
</Feature>
|
||||
<Feature code="DISALLOW_MODIFY_ACCOUNTS">
|
||||
<Feature type="policy" code="DISALLOW_MODIFY_ACCOUNTS">
|
||||
<Name>Disallow modify account</Name>
|
||||
<Description>Allow or disallow modify account</Description>
|
||||
</Feature>
|
||||
<Feature code="DISALLOW_MOUNT_PHYSICAL_MEDIA">
|
||||
<Feature type="policy" code="DISALLOW_MOUNT_PHYSICAL_MEDIA">
|
||||
<Name>Disallow mount physical media</Name>
|
||||
<Description>Allow or disallow mount physical media</Description>
|
||||
</Feature>
|
||||
<Feature code="DISALLOW_NETWORK_RESET">
|
||||
<Feature type="policy" code="DISALLOW_NETWORK_RESET">
|
||||
<Name>Disallow network reset</Name>
|
||||
<Description>Allow or disallow network reset</Description>
|
||||
</Feature>
|
||||
<Feature code="DISALLOW_OUTGOING_BEAM">
|
||||
<Feature type="policy" code="DISALLOW_OUTGOING_BEAM">
|
||||
<Name>Disallow outgoing beam</Name>
|
||||
<Description>Allow or disallow outgoing beam</Description>
|
||||
</Feature>
|
||||
<Feature code="DISALLOW_OUTGOING_CALLS">
|
||||
<Feature type="policy" code="DISALLOW_OUTGOING_CALLS">
|
||||
<Name>Disallow outgoing calls</Name>
|
||||
<Description>Allow or disallow outgoing calls</Description>
|
||||
</Feature>
|
||||
<Feature code="DISALLOW_REMOVE_USER">
|
||||
<Feature type="policy" code="DISALLOW_REMOVE_USER">
|
||||
<Name>Disallow remove users</Name>
|
||||
<Description>Allow or disallow remove users</Description>
|
||||
</Feature>
|
||||
<Feature code="DISALLOW_SAFE_BOOT">
|
||||
<Feature type="policy" code="DISALLOW_SAFE_BOOT">
|
||||
<Name>Disallow safe boot</Name>
|
||||
<Description>Allow or disallow safe boot</Description>
|
||||
</Feature>
|
||||
<Feature code="DISALLOW_SHARE_LOCATION">
|
||||
<Feature type="policy" code="DISALLOW_SHARE_LOCATION">
|
||||
<Name>Disallow share location</Name>
|
||||
<Description>Allow or disallow share location</Description>
|
||||
</Feature>
|
||||
<Feature code="DISALLOW_SMS">
|
||||
<Feature type="policy" code="DISALLOW_SMS">
|
||||
<Name>Disallow sms</Name>
|
||||
<Description>Allow or disallow sms</Description>
|
||||
</Feature>
|
||||
<Feature code="DISALLOW_UNINSTALL_APPS">
|
||||
<Feature type="policy" code="DISALLOW_UNINSTALL_APPS">
|
||||
<Name>Disallow uninstall app</Name>
|
||||
<Description>Allow or disallow uninstall app</Description>
|
||||
</Feature>
|
||||
<Feature code="DISALLOW_UNMUTE_MICROPHONE">
|
||||
<Feature type="policy" code="DISALLOW_UNMUTE_MICROPHONE">
|
||||
<Name>Disallow unmute mic</Name>
|
||||
<Description>Allow or disallow unmute mic</Description>
|
||||
</Feature>
|
||||
<Feature code="DISALLOW_USB_FILE_TRANSFER">
|
||||
<Feature type="policy" code="DISALLOW_USB_FILE_TRANSFER">
|
||||
<Name>Disallow usb file transfer</Name>
|
||||
<Description>Allow or disallow usb file transfer</Description>
|
||||
</Feature>
|
||||
<Feature code="ALLOW_PARENT_PROFILE_APP_LINKING">
|
||||
<Feature type="policy" code="ALLOW_PARENT_PROFILE_APP_LINKING">
|
||||
<Name>Disallow parent profile app linking</Name>
|
||||
<Description>Allow or disallow parent profile app linking</Description>
|
||||
</Feature>
|
||||
<Feature code="ENSURE_VERIFY_APPS">
|
||||
<Feature type="policy" code="ENSURE_VERIFY_APPS">
|
||||
<Name>Disallow ensure verify apps</Name>
|
||||
<Description>Allow or disallow ensure verify apps</Description>
|
||||
</Feature>
|
||||
<Feature code="AUTO_TIME">
|
||||
<Feature type="policy" code="AUTO_TIME">
|
||||
<Name>Disallow auto timing</Name>
|
||||
<Description>Allow or disallow auto timing</Description>
|
||||
</Feature>
|
||||
<Feature code="REMOVE_DEVICE_OWNER">
|
||||
<Feature type="policy" code="REMOVE_DEVICE_OWNER">
|
||||
<Name>Remove device owner</Name>
|
||||
<Description>Remove device owner</Description>
|
||||
</Feature>
|
||||
<Feature code="LOGCAT">
|
||||
<Feature type="policy" code="LOGCAT">
|
||||
<Name>Fetch device logcat</Name>
|
||||
<Description>Fetch device logcat</Description>
|
||||
</Feature>
|
||||
<Feature code="DEVICE_UNLOCK">
|
||||
<Feature type="operation" hidden="false" code="DEVICE_UNLOCK">
|
||||
<Name>Unlock the device</Name>
|
||||
<Description>Unlock the device</Description>
|
||||
</Feature>
|
||||
|
||||
@ -19,15 +19,15 @@
|
||||
-->
|
||||
<DeviceTypeConfiguration name="android_sense">
|
||||
<Features>
|
||||
<Feature code="keywords">
|
||||
<Feature type="operation" code="keywords">
|
||||
<Name>Add Keywords</Name>
|
||||
<Description>Send keywords to the device</Description>
|
||||
</Feature>
|
||||
<Feature code="threshold">
|
||||
<Feature type="operation" code="threshold">
|
||||
<Name>Add Threshold</Name>
|
||||
<Description>Send Threshold to the device</Description>
|
||||
</Feature>
|
||||
<Feature code="remove_words">
|
||||
<Feature type="operation" code="remove_words">
|
||||
<Name>Remove words</Name>
|
||||
<Description>Remove Threshold from the device</Description>
|
||||
</Feature>
|
||||
|
||||
@ -19,13 +19,19 @@
|
||||
-->
|
||||
<DeviceTypeConfiguration name="arduino">
|
||||
<Features>
|
||||
<Feature code="bulb">
|
||||
<Feature type="operation" code="bulb">
|
||||
<Name>Control Bulb</Name>
|
||||
<Description>Control Bulb on Arduino Uno</Description>
|
||||
<Operation context="/arduino/device/{deviceId}/bulb" method="POST">
|
||||
<QueryParameters>
|
||||
<Operation hidden="true">
|
||||
<params>
|
||||
<queryParams>
|
||||
<Parameter>state</Parameter>
|
||||
</QueryParameters>
|
||||
</queryParams>
|
||||
</params>
|
||||
<metadata>
|
||||
<uri>/arduino/device/{deviceId}/bulb</uri>
|
||||
<method>POST</method>
|
||||
</metadata>
|
||||
</Operation>
|
||||
</Feature>
|
||||
</Features>
|
||||
|
||||
@ -21,13 +21,19 @@
|
||||
<DeviceDetails table-id="DEFECTIVE_DEVICE"/>
|
||||
|
||||
<Features>
|
||||
<Feature code="bulb">
|
||||
<Feature type="operation" code="bulb">
|
||||
<Name>Control Bulb</Name>
|
||||
<Description>Control Bulb on Arduino Uno</Description>
|
||||
<Operation context="/arduino/device/{deviceId}/bulb" method="POST">
|
||||
<QueryParameters>
|
||||
<Operation hidden="true">
|
||||
<params>
|
||||
<queryParams>
|
||||
<Parameter>state</Parameter>
|
||||
</QueryParameters>
|
||||
</queryParams>
|
||||
</params>
|
||||
<metadata>
|
||||
<uri>/arduino/device/{deviceId}/bulb</uri>
|
||||
<method>POST</method>
|
||||
</metadata>
|
||||
</Operation>
|
||||
</Feature>
|
||||
</Features>
|
||||
|
||||
@ -27,13 +27,19 @@
|
||||
</DeviceDetails>
|
||||
|
||||
<Features>
|
||||
<Feature code="bulb">
|
||||
<Feature type="operation" code="bulb">
|
||||
<Name>Control Bulb</Name>
|
||||
<Description>Control Bulb on Arduino Uno</Description>
|
||||
<Operation context="/arduino/device/{deviceId}/bulb" method="POST">
|
||||
<QueryParameters>
|
||||
<Operation hidden="false">
|
||||
<params>
|
||||
<queryParams>
|
||||
<Parameter>state</Parameter>
|
||||
</QueryParameters>
|
||||
</queryParams>
|
||||
</params>
|
||||
<metadata>
|
||||
<uri>/arduino/device/{deviceId}/bulb</uri>
|
||||
<method>POST</method>
|
||||
</metadata>
|
||||
</Operation>
|
||||
</Feature>
|
||||
</Features>
|
||||
|
||||
@ -19,13 +19,19 @@
|
||||
-->
|
||||
<DeviceTypeConfiguration name="raspberrypi">
|
||||
<Features>
|
||||
<Feature code="bulb">
|
||||
<Feature type="operation" code="bulb">
|
||||
<Name>Control Bulb</Name>
|
||||
<Description>Control Bulb on Raspberrypi</Description>
|
||||
<Operation context="/raspberrypi/device/{deviceId}/bulb" method="POST">
|
||||
<QueryParameters>
|
||||
<Operation hidden="false">
|
||||
<params>
|
||||
<queryParams>
|
||||
<Parameter>state</Parameter>
|
||||
</QueryParameters>
|
||||
</queryParams>
|
||||
</params>
|
||||
<metadata>
|
||||
<uri>/raspberrypi/device/{deviceId}/bulb</uri>
|
||||
<method>POST</method>
|
||||
</metadata>
|
||||
</Operation>
|
||||
</Feature>
|
||||
</Features>
|
||||
|
||||
@ -31,16 +31,23 @@
|
||||
<!--END-->
|
||||
|
||||
<Features>
|
||||
<Feature code="abc">
|
||||
<Feature type="operation" hidden="true" code="abc">
|
||||
<Name>abc</Name>
|
||||
<Description>this is a feature</Description>
|
||||
<Operation context="/bulb/{state}" method="PUT" type="application/json">
|
||||
<QueryParameters>
|
||||
<Operation hidden="true">
|
||||
<params>
|
||||
<queryParams>
|
||||
<Parameter>deviceId</Parameter>
|
||||
</QueryParameters>
|
||||
<FormParameters>
|
||||
</queryParams>
|
||||
<formParams>
|
||||
<Parameter>test</Parameter>
|
||||
</FormParameters>
|
||||
</formParams>
|
||||
</params>
|
||||
<metadata>
|
||||
<uri>/bulb/{state}</uri>
|
||||
<method>POST</method>
|
||||
<contentType>application/json</contentType>
|
||||
</metadata>
|
||||
</Operation>
|
||||
</Feature>
|
||||
</Features>
|
||||
|
||||
@ -400,7 +400,7 @@ CREATE TABLE IF NOT EXISTS DM_DEVICE_INFO (
|
||||
ID INTEGER AUTO_INCREMENT NOT NULL,
|
||||
DEVICE_ID INT NULL,
|
||||
KEY_FIELD VARCHAR(45) NULL,
|
||||
VALUE_FIELD VARCHAR(100) NULL,
|
||||
VALUE_FIELD VARCHAR(1000) NULL,
|
||||
PRIMARY KEY (ID),
|
||||
CONSTRAINT DM_DEVICE_INFO_DEVICE
|
||||
FOREIGN KEY (DEVICE_ID)
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<artifactId>device-mgt</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -16,6 +16,24 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
var operationModule = function () {
|
||||
var log = new Log("/app/modules/business-controllers/operation.js");
|
||||
var utility = require('/app/modules/utility.js').utility;
|
||||
@ -38,8 +56,9 @@ var operationModule = function () {
|
||||
}
|
||||
|
||||
privateMethods.getOperationsFromFeatures = function (deviceType, operationType) {
|
||||
var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + "/device-types/" + deviceType + "/features";
|
||||
var featuresList = serviceInvokers.XMLHttp.get(url, function (responsePayload) {
|
||||
var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + "/device-types/"
|
||||
+ deviceType + "/features?featureType=" + operationType + "&hidden=false";
|
||||
return serviceInvokers.XMLHttp.get(url, function (responsePayload) {
|
||||
var features = JSON.parse(responsePayload.responseText);
|
||||
var featureList = [];
|
||||
var feature;
|
||||
@ -51,20 +70,40 @@ var operationModule = function () {
|
||||
feature["contentType"] = features[i].contentType;
|
||||
feature["deviceType"] = deviceType;
|
||||
feature["params"] = [];
|
||||
var featuresEntry = utility.getDeviceTypeConfig(deviceType)["deviceType"]["features"];
|
||||
if (featuresEntry) {
|
||||
var featureEntry = featuresEntry[features[i].code];
|
||||
if (featureEntry) {
|
||||
var permissionEntry = featureEntry["permission"];
|
||||
if (permissionEntry) {
|
||||
feature["permission"] = permissionEntry
|
||||
}
|
||||
}
|
||||
}
|
||||
var metaData = features[i].metadataEntries;
|
||||
if (metaData) {
|
||||
for (var j = 0; j < metaData.length; j++) {
|
||||
feature["params"].push(metaData[j].value);
|
||||
if (metaData[j].name === "operationMeta") {
|
||||
var operationMeta = metaData[j].value;
|
||||
var params = {};
|
||||
params["method"] = operationMeta.method;
|
||||
params["pathParams"] = operationMeta.pathParams;
|
||||
params["queryParams"] = operationMeta.queryParams;
|
||||
params["formParams"] = operationMeta.formParams ? operationMeta.formParams : [];
|
||||
params["uri"] = operationMeta.uri;
|
||||
params["contentType"] = operationMeta.contentType;
|
||||
feature["params"].push(params);
|
||||
feature["permission"] = operationMeta.permission;
|
||||
if (operationMeta.icon) {
|
||||
//Check if icon is a path or font
|
||||
if (operationMeta.icon.indexOf("path:") === 0) {
|
||||
feature["icon"] = operationMeta.icon.replace("path:", "");
|
||||
} else {
|
||||
feature["iconFont"] = operationMeta.icon;
|
||||
}
|
||||
}
|
||||
if (operationMeta.uiParams && operationMeta.uiParams.length > 0) {
|
||||
feature["uiParams"] = operationMeta.uiParams;
|
||||
}
|
||||
if (operationMeta.filters) {
|
||||
feature["filters"] = operationMeta.filters;
|
||||
}
|
||||
if (operationMeta.ownershipDescription) {
|
||||
feature["ownershipDescription"] = operationMeta.ownershipDescription;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
feature["metadata"].push(metaData[j].value);
|
||||
}
|
||||
featureList.push(feature);
|
||||
}
|
||||
@ -76,39 +115,27 @@ var operationModule = function () {
|
||||
return response;
|
||||
}
|
||||
);
|
||||
return featuresList;
|
||||
};
|
||||
|
||||
publicMethods.getControlOperations = function (device) {
|
||||
var deviceType = device.type;
|
||||
var operations = privateMethods.getOperationsFromFeatures(deviceType, "operation");
|
||||
var features = utility.getDeviceTypeConfig(deviceType).deviceType.features;
|
||||
for (var op in operations) {
|
||||
var iconIdentifier = operations[op].operation;
|
||||
if (features && features[iconIdentifier]) {
|
||||
var icon = features[iconIdentifier].icon;
|
||||
//TODO: need improve this check to get feature availability from agent side
|
||||
var filter = features[iconIdentifier].filter;
|
||||
if (device && filter && filter.property && device[filter.property] !== filter.value) {
|
||||
operations[op]["isDisabled"] = true;
|
||||
operations[op]["disabledText"] = filter.text;
|
||||
} else {
|
||||
if (operations.hasOwnProperty(op)) {
|
||||
operations[op]["isDisabled"] = false;
|
||||
if (device && operations[op].filters && operations[op].filters.length > 0) {
|
||||
var filters = operations[op].filters;
|
||||
for (var filter in filters) {
|
||||
if (filters.hasOwnProperty(filter)) {
|
||||
if (device[filters[filter].property] !== filters[filter].value) {
|
||||
operations[op]["isDisabled"] = true;
|
||||
operations[op]["disabledText"] = operations[op]["disabledText"] ?
|
||||
operations[op]["disabledText"] + ", " + filters[filter].description :
|
||||
filters[filter].description;
|
||||
}
|
||||
}
|
||||
if (icon) {
|
||||
operations[op]["iconFont"] = icon;
|
||||
} else if (iconPath) {
|
||||
var iconPath = utility.getOperationIcon(deviceType, iconIdentifier);
|
||||
operations[op]["icon"] = iconPath;
|
||||
}
|
||||
var formParams = features[iconIdentifier].formParams;
|
||||
if (formParams) {
|
||||
operations[op]["uiParams"] = formParams;
|
||||
}
|
||||
// var icon = utility.getOperationIcon(deviceType, iconIdentifier);
|
||||
// if (icon) {
|
||||
// log.error("icon found : " + icon );
|
||||
// operations[op]["icon"] = icon;
|
||||
}
|
||||
}
|
||||
return operations;
|
||||
|
||||
@ -15,6 +15,24 @@
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
}}
|
||||
|
||||
{{!
|
||||
Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
|
||||
Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
Version 2.0 (the "License"); you may not use this file except
|
||||
in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
}}
|
||||
{{unit "cdmf.unit.ui.title" pageTitle="Device Management"}}
|
||||
|
||||
{{unit "cdmf.unit.data-tables-extended"}}
|
||||
@ -181,7 +199,7 @@
|
||||
<ul class="tiles">
|
||||
{{#unless group}}
|
||||
<li>
|
||||
<a href="#" style="width: 100px;height: 80px;;"
|
||||
<a href="#"
|
||||
data-click-event="remove-form"
|
||||
class="btn square-element add-devices-to-group-link"
|
||||
data-toggle="modal" data-target="#modalDemo">
|
||||
@ -194,7 +212,7 @@
|
||||
</li>
|
||||
{{/unless}}
|
||||
<li>
|
||||
<a href="#" style="width: 100px;height: 80px;"
|
||||
<a href="#"
|
||||
data-click-event="remove-form"
|
||||
class="btn square-element remove-device-link"
|
||||
data-toggle="modal" data-target="#modalDemo">
|
||||
@ -225,9 +243,27 @@
|
||||
</li>
|
||||
{{/if}}
|
||||
<!--/update enrollment-->
|
||||
<!-- Add operation for selected devices -->
|
||||
<li>
|
||||
<a href="#" data-click-event="remove-form"
|
||||
class="btn square-element add-operation-link"
|
||||
data-toggle="modal" data-target="#modalDemo">
|
||||
<span class="icon fw-stack">
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-dgm-action fw-stack-1x"></i>
|
||||
</span>
|
||||
Add Operation
|
||||
</a>
|
||||
</li>
|
||||
<!-- Add operation for selected devices -->
|
||||
</ul>
|
||||
</th>
|
||||
</tr>
|
||||
<tr id="device-type-operations-bar" class="bulk-action-row sub-action hidden">
|
||||
<th colspan="7">
|
||||
<div id="device-type-operations"></div>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="ast-container">
|
||||
|
||||
@ -508,7 +544,6 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="no-device-selected" class="hide">
|
||||
<div class="modal-content">
|
||||
<div class="row">
|
||||
@ -525,7 +560,39 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="multiple-device-types-selected" class="hide">
|
||||
<div class="modal-content">
|
||||
<div class="row">
|
||||
<div class="col-lg-5 col-md-6 col-centered">
|
||||
<h3>Adding operations to devices of multiple device types is not supported.
|
||||
Please select one or more devices in the same device type.</h3>
|
||||
<br/>
|
||||
<div class="buttons">
|
||||
<a href="#" id="multiple-device-types-selected-link"
|
||||
class="btn-operations">
|
||||
Ok
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="no-features-available" class="hide">
|
||||
<div class="modal-content">
|
||||
<div class="row">
|
||||
<div class="col-lg-5 col-md-6 col-centered">
|
||||
<h3>No compatible operations are available for the selected device type.</h3>
|
||||
<br/>
|
||||
<div class="buttons">
|
||||
<a href="#" id="no-features-available-selected-link"
|
||||
class="btn-operations">
|
||||
Ok
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -588,7 +655,7 @@
|
||||
|
||||
{{#zone "bottomJs"}}
|
||||
<script id="device-listing" data-server-url="{{serverUrl}}" data-current-user="{{@user.username}}" data-device-types="{{deviceTypes}}"
|
||||
data-portal-url="{{portalUrl}}" data-user-domain="{{userDomain}}" type="text/x-handlebars-template"></script>
|
||||
data-portal-url="{{portalUrl}}" data-user-domain="{{userDomain}}" data-api-context="{{apiContext}}" type="text/x-handlebars-template"></script>
|
||||
{{js "js/listing.js"}}
|
||||
{{/zone}}
|
||||
|
||||
|
||||
@ -96,9 +96,11 @@ function onRequest(context) {
|
||||
var mdmProps = require("/app/modules/conf-reader/main.js")["conf"];
|
||||
var serverUrl = mdmProps["httpsURL"];
|
||||
var portalUrl = mdmProps["portalURL"];
|
||||
var backendRestEndpoints = mdmProps["backendRestEndpoints"];
|
||||
var userDomain = context.user.domain;
|
||||
viewModel.serverUrl = serverUrl;
|
||||
viewModel.portalUrl = portalUrl;
|
||||
viewModel.userDomain = userDomain;
|
||||
viewModel.apiContext = backendRestEndpoints["deviceMgt"];
|
||||
return viewModel;
|
||||
}
|
||||
|
||||
@ -16,6 +16,24 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Following function would execute
|
||||
* when a user clicks on the list item
|
||||
@ -952,6 +970,121 @@ function attachDeviceEvents() {
|
||||
hidePopup();
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* Following click function would execute when a user clicks on "Add Operation" link
|
||||
* on Device Management page in device mgt Console.
|
||||
*/
|
||||
$('a.add-operation-link').click(function () {
|
||||
var operationsRow = $("#device-type-operations-bar");
|
||||
if (!operationsRow.hasClass("hidden")) {
|
||||
operationsRow.addClass("hidden");
|
||||
$("#device-type-operations").html("");
|
||||
return;
|
||||
}
|
||||
var deviceIdentifiers = getSelectedDevices();
|
||||
if (deviceIdentifiers.length === 0) {
|
||||
$(modalPopupContent).html($('#no-device-selected').html());
|
||||
$("a#no-device-selected-link").click(function () {
|
||||
hidePopup();
|
||||
});
|
||||
showPopup();
|
||||
return;
|
||||
}
|
||||
|
||||
var selectedDeviceType = deviceIdentifiers[0].type;
|
||||
var deviceList = "";
|
||||
var count = 1;
|
||||
deviceIdentifiers.forEach(function (deviceIdentifier) {
|
||||
if (selectedDeviceType !== deviceIdentifier.type) {
|
||||
++count;
|
||||
}
|
||||
deviceList = !deviceList ? deviceIdentifier.id : deviceList + "," + deviceIdentifier.id;
|
||||
});
|
||||
|
||||
// If multiple devices of multiple device types selected
|
||||
if (count > 1) {
|
||||
$(modalPopupContent).html($('#multiple-device-types-selected').html());
|
||||
$("a#multiple-device-types-selected-link").click(function () {
|
||||
hidePopup();
|
||||
});
|
||||
showPopup();
|
||||
return;
|
||||
}
|
||||
var apiContext = $("#device-listing").data("api-context");
|
||||
var serviceURL = apiContext + "/device-types/" + selectedDeviceType + "/features?featureType=operation" +
|
||||
"&hidden=false";
|
||||
invokerUtil.get(serviceURL, function (data) {
|
||||
showOperationBar(JSON.parse(data), selectedDeviceType, deviceList);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function showOperationBar(features, deviceType, deviceList) {
|
||||
var featureList = [];
|
||||
var feature;
|
||||
for (var i = 0; i < features.length; i++) {
|
||||
feature = {};
|
||||
feature.operation = features[i].code;
|
||||
feature.name = features[i].name;
|
||||
feature.description = features[i].description;
|
||||
feature.deviceType = deviceType;
|
||||
feature.params = [];
|
||||
var metaData = features[i].metadataEntries;
|
||||
if (metaData) {
|
||||
for (var j = 0; j < metaData.length; j++) {
|
||||
if (metaData[j].name === "operationMeta") {
|
||||
var operationMeta = metaData[j].value;
|
||||
var params = {};
|
||||
params.method = operationMeta.method;
|
||||
params.pathParams = operationMeta.pathParams;
|
||||
params.queryParams = operationMeta.queryParams;
|
||||
params.formParams = operationMeta.formParams ? operationMeta.formParams : [];
|
||||
params.uri = operationMeta.uri;
|
||||
params.contentType = operationMeta.contentType;
|
||||
feature.params.push(params);
|
||||
feature.permission = operationMeta.permission;
|
||||
if (operationMeta.icon) {
|
||||
if (operationMeta.icon.indexOf("path:") === 0) {
|
||||
feature.icon = operationMeta.icon.replace("path:", "");
|
||||
} else {
|
||||
feature.iconFont = operationMeta.icon;
|
||||
}
|
||||
}
|
||||
if (operationMeta.uiParams && operationMeta.uiParams.length > 0) {
|
||||
feature.uiParams = operationMeta.uiParams;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
feature.metadata.push(metaData[j].value);
|
||||
}
|
||||
featureList.push(feature);
|
||||
}
|
||||
}
|
||||
|
||||
if (featureList.length > 0) {
|
||||
var baseUnitPath = context + "/public/cdmf.unit.device.type." + deviceType + ".operation-bar";
|
||||
var operationBarScriptSrc = baseUnitPath + "/js/operation-bar.js";
|
||||
var operationBarTemplateSrc = baseUnitPath + "/templates/operation-bar.hbs";
|
||||
var operationBarCacheKey = deviceType + "-operation-bar";
|
||||
|
||||
$.template(operationBarCacheKey, operationBarTemplateSrc, function (template) {
|
||||
var content = template({"controlOperations": featureList, "devices" : deviceList});
|
||||
$("#device-type-operations").html(content);
|
||||
var operationRow = $("#device-type-operations-bar");
|
||||
var script = document.createElement("script");
|
||||
script.type = "text/javascript";
|
||||
script.src = operationBarScriptSrc;
|
||||
operationRow.prepend(script);
|
||||
operationRow.removeClass("hidden");
|
||||
});
|
||||
} else {
|
||||
$(modalPopupContent).html($('#no-features-available').html());
|
||||
$("a#no-features-available-selected-link").click(function () {
|
||||
hidePopup();
|
||||
});
|
||||
showPopup();
|
||||
}
|
||||
}
|
||||
|
||||
function removeDevices(deviceIdentifiers) {
|
||||
|
||||
@ -291,7 +291,7 @@ $.fn.datatables_extended = function (settings) {
|
||||
thisTable = $(this).closest('.dataTables_wrapper').find('.dataTable').dataTable();
|
||||
if ($(button).html() == 'Select All') {
|
||||
$(button).html('Deselect All');
|
||||
$('.bulk-action-row').removeClass('hidden');
|
||||
$('.bulk-action-row:not(.sub-action)').removeClass('hidden');
|
||||
thisTable.api().rows().every(function () {
|
||||
$(this.node()).addClass(rowSelectedClass);
|
||||
});
|
||||
@ -312,7 +312,7 @@ $.fn.datatables_extended = function (settings) {
|
||||
var rowSelectedClass = 'DTTT_selected selected';
|
||||
$(this).toggleClass(rowSelectedClass);
|
||||
if ($('.table-selectable .DTTT_selected').length > 0) {
|
||||
$('.bulk-action-row').removeClass('hidden');
|
||||
$('.bulk-action-row:not(.sub-action)').removeClass('hidden');
|
||||
} else {
|
||||
$('.bulk-action-row').addClass('hidden');
|
||||
}
|
||||
|
||||
@ -356,7 +356,7 @@ $.fn.datatables_extended_serverside_paging = function (settings, url, dataFilter
|
||||
if (!$(button).hasClass('disabled')) {
|
||||
if ($(button).html() == 'Select All') {
|
||||
$(button).html('Deselect All');
|
||||
$('.bulk-action-row').removeClass('hidden');
|
||||
$('.bulk-action-row:not(.sub-action)').removeClass('hidden');
|
||||
thisTable.api().rows().every(function () {
|
||||
$(this.node()).addClass(rowSelectedClass);
|
||||
});
|
||||
@ -378,7 +378,7 @@ $.fn.datatables_extended_serverside_paging = function (settings, url, dataFilter
|
||||
var rowSelectedClass = 'DTTT_selected selected';
|
||||
$(this).toggleClass(rowSelectedClass);
|
||||
if ($('.table-selectable .DTTT_selected').length > 0) {
|
||||
$('.bulk-action-row').removeClass('hidden');
|
||||
$('.bulk-action-row:not(.sub-action)').removeClass('hidden');
|
||||
} else {
|
||||
$('.bulk-action-row').addClass('hidden');
|
||||
}
|
||||
|
||||
@ -2969,8 +2969,8 @@ tbody.collapse.in {
|
||||
|
||||
.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus {
|
||||
text-decoration: none;
|
||||
color: #262626;
|
||||
background-color: #f5f5f5;
|
||||
color: #ffffff;
|
||||
background-color: #008CC4;
|
||||
}
|
||||
|
||||
.dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus {
|
||||
@ -3426,6 +3426,7 @@ tbody.collapse.in {
|
||||
}
|
||||
.nav .open > a, .nav .open > a:hover, .nav .open > a:focus {
|
||||
background-color: #eeeeee;
|
||||
color: #008cc4;
|
||||
border-color: #004675;
|
||||
}
|
||||
.nav .nav-divider {
|
||||
|
||||
@ -385,7 +385,7 @@ var responsiveTextRatio = 0.2,
|
||||
$('body').on('click', '[data-type=selectable]', function(){
|
||||
$(this).toggleClass(ROW_SELECTED_CLASS);
|
||||
if ($('.table-selectable .DTTT_selected').length > 0) {
|
||||
$('.bulk-action-row').removeClass('hidden');
|
||||
$('.bulk-action-row:not(.sub-action)').removeClass('hidden');
|
||||
} else {
|
||||
$('.bulk-action-row').addClass('hidden');
|
||||
}
|
||||
|
||||
@ -23,7 +23,7 @@
|
||||
<parent>
|
||||
<artifactId>device-mgt</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>carbon-devicemgt</artifactId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>email-sender</artifactId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>carbon-devicemgt</artifactId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -22,13 +22,13 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>identity-extensions</artifactId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.device.mgt.oauth.extensions</artifactId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<packaging>bundle</packaging>
|
||||
<name>WSO2 Carbon - OAuth Extensions</name>
|
||||
<url>http://wso2.org</url>
|
||||
|
||||
@ -21,7 +21,7 @@
|
||||
<parent>
|
||||
<artifactId>identity-extensions</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>identity-extensions</artifactId>
|
||||
<version>3.2.5-SNAPSHOT</version>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user