mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
Merge remote-tracking branch 'upstream/application-mgt-new' into application-mgt-new
# Conflicts: # components/application-mgt/org.wso2.carbon.device.application.mgt.store.ui/react-app/src/components/apps/release/install/DeviceInstall.js
This commit is contained in:
commit
d8ce0ec746
@ -22,13 +22,13 @@
|
||||
<parent>
|
||||
<artifactId>apimgt-extensions</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.apimgt.annotations</artifactId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-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.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-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.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-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.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.apimgt.handlers</artifactId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-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.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.apimgt.integration.client</artifactId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-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.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.apimgt.integration.generated.client</artifactId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-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.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.apimgt.webapp.publisher</artifactId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-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.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>apimgt-extensions</artifactId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-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.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.device.application.mgt.addons</artifactId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-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.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.device.application.mgt.api</artifactId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<packaging>war</packaging>
|
||||
<name>WSO2 Carbon - Application Management API</name>
|
||||
<description>WSO2 Carbon - Application Management API</description>
|
||||
|
||||
@ -57,7 +57,7 @@ import javax.ws.rs.core.Response;
|
||||
public interface ArtifactDownloadAPI {
|
||||
|
||||
@GET
|
||||
@Path("/{uuid}/{fileName}")
|
||||
@Path("/{uuid}/{folderName}/{fileName}")
|
||||
@Produces(MediaType.APPLICATION_OCTET_STREAM)
|
||||
@ApiOperation(
|
||||
produces = MediaType.APPLICATION_OCTET_STREAM,
|
||||
@ -86,6 +86,11 @@ public interface ArtifactDownloadAPI {
|
||||
value = "UUID of the application release.",
|
||||
required = true)
|
||||
@PathParam("uuid") String uuid,
|
||||
@ApiParam(
|
||||
name = "folderName",
|
||||
value = "Name of the folder where the artifact store.",
|
||||
required = true)
|
||||
@PathParam("folderName") String folderName,
|
||||
@ApiParam(
|
||||
name = "fileName",
|
||||
value = "Name of the artifact",
|
||||
|
||||
@ -47,12 +47,14 @@ public class ArtifactDownloadAPIImpl implements ArtifactDownloadAPI {
|
||||
@GET
|
||||
@Override
|
||||
@Produces(MediaType.APPLICATION_OCTET_STREAM)
|
||||
@Path("/{uuid}/{fileName}")
|
||||
public Response getArtifact(@PathParam("uuid") String uuid,
|
||||
@Path("/{uuid}/{folderName}/{fileName}")
|
||||
public Response getArtifact(
|
||||
@PathParam("uuid") String uuid,
|
||||
@PathParam("folderName") String folderName,
|
||||
@PathParam("fileName") String fileName) {
|
||||
AppmDataHandler dataHandler = APIUtil.getDataHandler();
|
||||
try {
|
||||
InputStream fileInputStream = dataHandler.getArtifactStream(uuid, fileName);
|
||||
InputStream fileInputStream = dataHandler.getArtifactStream(uuid, folderName, fileName);
|
||||
Response.ResponseBuilder response = Response
|
||||
.ok(fileInputStream, MediaType.APPLICATION_OCTET_STREAM);
|
||||
response.status(Response.Status.OK);
|
||||
|
||||
@ -21,13 +21,13 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>application-mgt</artifactId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.device.application.mgt.common</artifactId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<packaging>bundle</packaging>
|
||||
<name>WSO2 Carbon - Application Management Common</name>
|
||||
<description>WSO2 Carbon - Application Management Common</description>
|
||||
|
||||
@ -0,0 +1,40 @@
|
||||
/* 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.application.mgt.common.config;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
|
||||
public class MDMConfig {
|
||||
|
||||
private String artifactDownloadProtocol;
|
||||
private String artifactDownloadEndpoint;
|
||||
|
||||
@XmlElement(name = "ArtifactDownloadProtocol", required=true)
|
||||
public String getArtifactDownloadProtocol() { return artifactDownloadProtocol; }
|
||||
|
||||
public void setArtifactDownloadProtocol(String artifactDownloadProtocol) {
|
||||
this.artifactDownloadProtocol = artifactDownloadProtocol;
|
||||
}
|
||||
|
||||
@XmlElement(name = "ArtifactDownloadEndpoint", required=true)
|
||||
public String getArtifactDownloadEndpoint() { return artifactDownloadEndpoint; }
|
||||
|
||||
public void setArtifactDownloadEndpoint(String artifactDownloadEndpoint) {
|
||||
this.artifactDownloadEndpoint = artifactDownloadEndpoint;
|
||||
}
|
||||
}
|
||||
@ -72,7 +72,7 @@ public interface ApplicationStorageManager {
|
||||
*
|
||||
* @throws ApplicationStorageManagementException Not Found Exception.
|
||||
*/
|
||||
void deleteAppReleaseArtifact(String appReleaseHashVal, String fileName) throws ApplicationStorageManagementException;
|
||||
void deleteAppReleaseArtifact(String appReleaseHashVal, String folderName, String fileName) throws ApplicationStorageManagementException;
|
||||
|
||||
/**
|
||||
* To delete all release artifacts related with particular ApplicationDTO Release.
|
||||
@ -84,9 +84,9 @@ public interface ApplicationStorageManager {
|
||||
|
||||
/***
|
||||
* Get the InputStream of the file which is located in filePath
|
||||
* @param path file path
|
||||
* @param hashVal Hash Value of the application release.
|
||||
* @return {@link InputStream}
|
||||
* @throws ApplicationStorageManagementException throws if an error occurs when accessing the file.
|
||||
*/
|
||||
InputStream getFileSttream(String path) throws ApplicationStorageManagementException;
|
||||
InputStream getFileStream(String hashVal, String folderName, String fileName) throws ApplicationStorageManagementException;
|
||||
}
|
||||
|
||||
@ -35,5 +35,6 @@ public interface AppmDataHandler {
|
||||
|
||||
Map<String, LifecycleState> getLifecycleConfiguration() throws LifecycleManagementException;
|
||||
|
||||
InputStream getArtifactStream(String uuid, String artifactName) throws ApplicationManagementException;
|
||||
InputStream getArtifactStream(String uuid, String folderName, String artifactName)
|
||||
throws ApplicationManagementException;
|
||||
}
|
||||
|
||||
@ -21,13 +21,13 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>application-mgt</artifactId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.device.application.mgt.core</artifactId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<packaging>bundle</packaging>
|
||||
<name>WSO2 Carbon - Application Management Core</name>
|
||||
<description>WSO2 Carbon - Application Management Core</description>
|
||||
|
||||
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 176 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 40 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 40 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 40 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 40 KiB |
@ -18,6 +18,7 @@
|
||||
*/
|
||||
package org.wso2.carbon.device.application.mgt.core.config;
|
||||
|
||||
import org.wso2.carbon.device.application.mgt.common.config.MDMConfig;
|
||||
import org.wso2.carbon.device.application.mgt.common.config.RatingConfiguration;
|
||||
import org.wso2.carbon.device.application.mgt.common.config.UIConfiguration;
|
||||
import org.wso2.carbon.device.application.mgt.common.config.LifecycleState;
|
||||
@ -37,20 +38,16 @@ public class Configuration {
|
||||
|
||||
private List<Extension> extensions;
|
||||
|
||||
private Artifacts artifacts;
|
||||
|
||||
private PaginationConfiguration paginationConfiguration;
|
||||
|
||||
private List<LifecycleState> lifecycleStates;
|
||||
|
||||
private UIConfiguration uiConfiguration;
|
||||
|
||||
private List<String> appCategories;
|
||||
|
||||
private String artifactDownloadEndpoint;
|
||||
|
||||
private RatingConfiguration ratingConfiguration;
|
||||
|
||||
private MDMConfig mdmConfig;
|
||||
|
||||
@XmlElement(name = "DatasourceName", required = true)
|
||||
public String getDatasourceName() {
|
||||
return datasourceName;
|
||||
@ -70,11 +67,6 @@ public class Configuration {
|
||||
this.extensions = extensions;
|
||||
}
|
||||
|
||||
@XmlElement(name = "PaginationConfiguration", required = true)
|
||||
public PaginationConfiguration getPaginationConfiguration() {
|
||||
return paginationConfiguration;
|
||||
}
|
||||
|
||||
@XmlElementWrapper(name = "LifecycleStates")
|
||||
@XmlElement(name = "LifecycleState")
|
||||
public List<LifecycleState> getLifecycleStates() {
|
||||
@ -100,15 +92,6 @@ public class Configuration {
|
||||
public void setRatingConfiguration(
|
||||
RatingConfiguration ratingConfiguration) { this.ratingConfiguration = ratingConfiguration; }
|
||||
|
||||
@XmlElement(name = "ArtifactDownloadEndpoint", required = true)
|
||||
public String getArtifactDownloadEndpoint() {
|
||||
return artifactDownloadEndpoint;
|
||||
}
|
||||
|
||||
public void setArtifactDownloadEndpoint(String artifactDownloadEndpoint) {
|
||||
this.artifactDownloadEndpoint = artifactDownloadEndpoint;
|
||||
}
|
||||
|
||||
@XmlElementWrapper(name = "AppCategories")
|
||||
@XmlElement(name = "Category")
|
||||
public List<String> getAppCategories() {
|
||||
@ -118,5 +101,12 @@ public class Configuration {
|
||||
public void setAppCategories(List<String> appCategories) {
|
||||
this.appCategories = appCategories;
|
||||
}
|
||||
|
||||
@XmlElement(name = "MDMConfig", required = true)
|
||||
public MDMConfig getMdmConfig() { return mdmConfig; }
|
||||
|
||||
public void setMdmConfig(MDMConfig mdmConfig) {
|
||||
this.mdmConfig = mdmConfig;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -77,7 +77,8 @@ public interface SubscriptionDAO {
|
||||
void updateSubscriptions(int tenantId, String updateBy, List<String> paramList,
|
||||
int releaseId, String subType, String action) throws ApplicationManagementDAOException;
|
||||
|
||||
List<Integer> getSubscribedDeviceIds(List<Integer> deviceIds, int tenantId) throws ApplicationManagementDAOException;
|
||||
List<Integer> getSubscribedDeviceIds(List<Integer> deviceIds, int applicationReleaseId, int tenantId)
|
||||
throws ApplicationManagementDAOException;
|
||||
|
||||
List<Integer> getDeviceSubIdsForOperation (int operationId, int tenantId) throws ApplicationManagementDAOException;
|
||||
|
||||
|
||||
@ -533,7 +533,8 @@ public class GenericSubscriptionDAOImpl extends AbstractDAOImpl implements Subsc
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Integer> getSubscribedDeviceIds(List<Integer> deviceIds, int tenantId)
|
||||
public List<Integer> getSubscribedDeviceIds(List<Integer> deviceIds, int applicationReleaseId,
|
||||
int tenantId)
|
||||
throws ApplicationManagementDAOException {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Request received to DAO Layer to get already subscribed dvice Ids for given list of device Ids.");
|
||||
@ -545,14 +546,15 @@ public class GenericSubscriptionDAOImpl extends AbstractDAOImpl implements Subsc
|
||||
StringJoiner joiner = new StringJoiner(",",
|
||||
"SELECT DS.DM_DEVICE_ID "
|
||||
+ "FROM AP_DEVICE_SUBSCRIPTION DS "
|
||||
+ "WHERE DS.DM_DEVICE_ID IN (", ") AND TENANT_ID = ?");
|
||||
+ "WHERE DS.DM_DEVICE_ID IN (", ") AND AP_APP_RELEASE_ID = ? AND TENANT_ID = ?");
|
||||
deviceIds.stream().map(ignored -> "?").forEach(joiner::add);
|
||||
String query = joiner.toString();
|
||||
try (PreparedStatement ps = conn.prepareStatement(query)) {
|
||||
for (Integer deviceId : deviceIds) {
|
||||
ps.setObject(index++, deviceId);
|
||||
}
|
||||
ps.setInt(index, tenantId);
|
||||
ps.setInt(index++, tenantId);
|
||||
ps.setInt(index, applicationReleaseId);
|
||||
try (ResultSet rs = ps.executeQuery()) {
|
||||
while (rs.next()) {
|
||||
subscribedDevices.add(rs.getInt("DM_DEVICE_ID"));
|
||||
|
||||
@ -32,6 +32,7 @@ import org.wso2.carbon.device.application.mgt.common.ApplicationInstaller;
|
||||
import org.wso2.carbon.device.application.mgt.common.DeviceTypes;
|
||||
import org.wso2.carbon.device.application.mgt.common.LifecycleChanger;
|
||||
import org.wso2.carbon.device.application.mgt.common.Pagination;
|
||||
import org.wso2.carbon.device.application.mgt.common.config.MDMConfig;
|
||||
import org.wso2.carbon.device.application.mgt.common.config.RatingConfiguration;
|
||||
import org.wso2.carbon.device.application.mgt.common.dto.ApplicationDTO;
|
||||
import org.wso2.carbon.device.application.mgt.common.ApplicationList;
|
||||
@ -451,12 +452,14 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
||||
ApplicationStorageManager applicationStorageManager = DAOUtil.getApplicationStorageManager();
|
||||
|
||||
if (!StringUtils.isEmpty(applicationArtifact.getIconName())) {
|
||||
applicationStorageManager.deleteAppReleaseArtifact(applicationReleaseDTO.getAppHashValue(),
|
||||
applicationStorageManager
|
||||
.deleteAppReleaseArtifact(applicationReleaseDTO.getAppHashValue(), Constants.ICON_ARTIFACT,
|
||||
applicationReleaseDTO.getIconName());
|
||||
applicationReleaseDTO.setIconName(applicationArtifact.getIconName());
|
||||
}
|
||||
if (!StringUtils.isEmpty(applicationArtifact.getBannerName())){
|
||||
applicationStorageManager.deleteAppReleaseArtifact(applicationReleaseDTO.getAppHashValue(),
|
||||
applicationStorageManager
|
||||
.deleteAppReleaseArtifact(applicationReleaseDTO.getAppHashValue(), Constants.BANNER_ARTIFACT,
|
||||
applicationReleaseDTO.getBannerName());
|
||||
applicationReleaseDTO.setBannerName(applicationArtifact.getBannerName());
|
||||
}
|
||||
@ -470,16 +473,20 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
||||
|
||||
int counter = 1;
|
||||
for (String scName : screenshotNames) {
|
||||
String folderPath = Constants.SCREENSHOT_ARTIFACT + counter;
|
||||
if (counter == 1) {
|
||||
applicationStorageManager.deleteAppReleaseArtifact(applicationReleaseDTO.getAppHashValue(),
|
||||
applicationStorageManager
|
||||
.deleteAppReleaseArtifact(applicationReleaseDTO.getAppHashValue(), folderPath,
|
||||
applicationReleaseDTO.getScreenshotName1());
|
||||
applicationReleaseDTO.setScreenshotName1(scName);
|
||||
} else if (counter == 2) {
|
||||
applicationStorageManager.deleteAppReleaseArtifact(applicationReleaseDTO.getAppHashValue(),
|
||||
applicationStorageManager
|
||||
.deleteAppReleaseArtifact(applicationReleaseDTO.getAppHashValue(), folderPath,
|
||||
applicationReleaseDTO.getScreenshotName2());
|
||||
applicationReleaseDTO.setScreenshotName2(scName);
|
||||
} else if (counter == 3) {
|
||||
applicationStorageManager.deleteAppReleaseArtifact(applicationReleaseDTO.getAppHashValue(),
|
||||
applicationStorageManager
|
||||
.deleteAppReleaseArtifact(applicationReleaseDTO.getAppHashValue(), folderPath,
|
||||
applicationReleaseDTO.getScreenshotName3());
|
||||
applicationReleaseDTO.setScreenshotName3(scName);
|
||||
}
|
||||
@ -583,12 +590,14 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
||||
log.error(msg);
|
||||
throw new ApplicationManagementException(msg, e);
|
||||
} catch (UserStoreException e) {
|
||||
throw new ApplicationManagementException(
|
||||
"User-store exception while checking whether the user " + userName + " of tenant " + tenantId
|
||||
+ " has the publisher permission", e);
|
||||
String msg = "User-store exception while checking whether the user " + userName + " of tenant " + tenantId
|
||||
+ " has the publisher permission";
|
||||
log.error(msg);
|
||||
throw new ApplicationManagementException(msg, e);
|
||||
} catch (ApplicationManagementDAOException e) {
|
||||
throw new ApplicationManagementException(
|
||||
"DAO exception while getting applications for the user " + userName + " of tenant " + tenantId, e);
|
||||
String msg = "DAO exception while getting applications for the user " + userName + " of tenant " + tenantId;
|
||||
log.error(msg);
|
||||
throw new ApplicationManagementException(msg, e);
|
||||
} finally {
|
||||
ConnectionManagerUtil.closeDBConnection();
|
||||
}
|
||||
@ -792,23 +801,26 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
||||
ConnectionManagerUtil.commitDBTransaction();
|
||||
return applicationRelease;
|
||||
} catch (TransactionManagementException e) {
|
||||
throw new ApplicationManagementException(
|
||||
"Error occurred while staring application release creating transaction for application Id: "
|
||||
+ applicationId, e);
|
||||
String msg = "Error occurred while staring application release creating transaction for application Id: "
|
||||
+ applicationId;
|
||||
log.error(msg);
|
||||
throw new ApplicationManagementException(msg, e);
|
||||
} catch (DBConnectionException e) {
|
||||
throw new ApplicationManagementException(
|
||||
"Error occurred while adding application release into IoTS app management ApplicationDTO id of the "
|
||||
+ "application release: " + applicationId, e);
|
||||
|
||||
String msg = "Error occurred while adding application release into IoTS app management ApplicationDTO id of"
|
||||
+ " the application release: " + applicationId;
|
||||
log.error(msg);
|
||||
throw new ApplicationManagementException(msg, e);
|
||||
} catch (LifeCycleManagementDAOException e) {
|
||||
ConnectionManagerUtil.rollbackDBTransaction();
|
||||
throw new ApplicationManagementException(
|
||||
"Error occurred while adding new application release lifecycle state to the application release: "
|
||||
+ applicationId, e);
|
||||
String msg = "Error occurred while adding new application release lifecycle state to the application"
|
||||
+ " release: " + applicationId;
|
||||
log.error(msg);
|
||||
throw new ApplicationManagementException(msg, e);
|
||||
} catch (ApplicationManagementDAOException e) {
|
||||
ConnectionManagerUtil.rollbackDBTransaction();
|
||||
throw new ApplicationManagementException(
|
||||
"Error occurred while adding new application release for application " + applicationId, e);
|
||||
String msg = "Error occurred while adding new application release for application " + applicationId;
|
||||
log.error(msg);
|
||||
throw new ApplicationManagementException(msg, e);
|
||||
} finally {
|
||||
ConnectionManagerUtil.closeDBConnection();
|
||||
}
|
||||
@ -2857,14 +2869,8 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
||||
throw new NotFoundException(msg);
|
||||
}
|
||||
ApplicationReleaseDTO applicationReleaseDTO = applicationDTO.getApplicationReleaseDTOs().get(0);
|
||||
String host = System.getProperty(Constants.IOT_HOST_PROPERTY);
|
||||
String port = System.getProperty(Constants.IOT_PORT_PROPERTY);
|
||||
String artifactDownloadEndpoint = ConfigurationManager.getInstance().getConfiguration()
|
||||
.getArtifactDownloadEndpoint();
|
||||
String artifactDownloadURL =
|
||||
Constants.ARTIFACT_DOWNLOAD_PROTOCOL + "://" + host + ":" + port + artifactDownloadEndpoint
|
||||
+ Constants.FORWARD_SLASH + applicationReleaseDTO.getUuid() + Constants.FORWARD_SLASH
|
||||
+ applicationReleaseDTO.getInstallerName();
|
||||
String artifactDownloadURL = APIUtil.getArtifactDownloadBaseURL() + applicationReleaseDTO.getUuid()
|
||||
+ Constants.FORWARD_SLASH + applicationReleaseDTO.getInstallerName();
|
||||
String plistContent = "<!DOCTYPE plist PUBLIC "-//Apple//DTDPLIST1.0//EN" "" +
|
||||
"http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="" +
|
||||
"1.0"><dict><key>items</key><array><dict><" +
|
||||
|
||||
@ -30,6 +30,7 @@ import org.wso2.carbon.device.application.mgt.common.exception.ResourceManagemen
|
||||
import org.wso2.carbon.device.application.mgt.common.services.ApplicationStorageManager;
|
||||
import org.wso2.carbon.device.application.mgt.core.exception.ParsingException;
|
||||
import org.wso2.carbon.device.application.mgt.core.util.ArtifactsParser;
|
||||
import org.wso2.carbon.device.application.mgt.core.util.Constants;
|
||||
import org.wso2.carbon.device.application.mgt.core.util.StorageManagementUtil;
|
||||
|
||||
import java.io.*;
|
||||
@ -60,21 +61,24 @@ public class ApplicationStorageManagerImpl implements ApplicationStorageManager
|
||||
public ApplicationReleaseDTO uploadImageArtifacts(ApplicationReleaseDTO applicationReleaseDTO,
|
||||
InputStream iconFileStream, InputStream bannerFileStream, List<InputStream> screenShotStreams)
|
||||
throws ResourceManagementException {
|
||||
String artifactDirectoryPath;
|
||||
String iconStoredLocation;
|
||||
String bannerStoredLocation;
|
||||
String scStoredLocation = null;
|
||||
|
||||
try {
|
||||
artifactDirectoryPath = storagePath + applicationReleaseDTO.getAppHashValue();
|
||||
StorageManagementUtil.createArtifactDirectory(artifactDirectoryPath);
|
||||
String artifactStoringBaseDirPath = storagePath + applicationReleaseDTO.getAppHashValue();
|
||||
StorageManagementUtil.createArtifactDirectory(artifactStoringBaseDirPath);
|
||||
|
||||
if (iconFileStream != null) {
|
||||
iconStoredLocation = artifactDirectoryPath + File.separator + applicationReleaseDTO.getIconName();
|
||||
String iconStoringDir = artifactStoringBaseDirPath + File.separator + Constants.ICON_ARTIFACT;
|
||||
StorageManagementUtil.createArtifactDirectory(iconStoringDir);
|
||||
iconStoredLocation = iconStoringDir + File.separator + applicationReleaseDTO.getIconName();
|
||||
saveFile(iconFileStream, iconStoredLocation);
|
||||
}
|
||||
if (bannerFileStream != null) {
|
||||
bannerStoredLocation = artifactDirectoryPath + File.separator + applicationReleaseDTO.getBannerName();
|
||||
String bannerStoringDir = artifactStoringBaseDirPath + File.separator + Constants.BANNER_ARTIFACT;
|
||||
StorageManagementUtil.createArtifactDirectory(bannerStoringDir);
|
||||
bannerStoredLocation = bannerStoringDir + File.separator + applicationReleaseDTO.getBannerName();
|
||||
saveFile(bannerFileStream, bannerStoredLocation);
|
||||
}
|
||||
if (!screenShotStreams.isEmpty()) {
|
||||
@ -86,14 +90,16 @@ public class ApplicationStorageManagerImpl implements ApplicationStorageManager
|
||||
}
|
||||
int count = 1;
|
||||
for (InputStream screenshotStream : screenShotStreams) {
|
||||
String scStoringDir = artifactStoringBaseDirPath + File.separator + Constants.SCREENSHOT_ARTIFACT + count;
|
||||
StorageManagementUtil.createArtifactDirectory(scStoringDir);
|
||||
if (count == 1) {
|
||||
scStoredLocation = artifactDirectoryPath + File.separator + applicationReleaseDTO.getScreenshotName1();
|
||||
scStoredLocation = scStoringDir + File.separator + applicationReleaseDTO.getScreenshotName1();
|
||||
}
|
||||
if (count == 2) {
|
||||
scStoredLocation = artifactDirectoryPath + File.separator + applicationReleaseDTO.getScreenshotName2();
|
||||
scStoredLocation = scStoringDir + File.separator + applicationReleaseDTO.getScreenshotName2();
|
||||
}
|
||||
if (count == 3) {
|
||||
scStoredLocation = artifactDirectoryPath + File.separator + applicationReleaseDTO.getScreenshotName3();
|
||||
scStoredLocation = scStoringDir + File.separator + applicationReleaseDTO.getScreenshotName3();
|
||||
}
|
||||
saveFile(screenshotStream, scStoredLocation);
|
||||
count++;
|
||||
@ -101,8 +107,10 @@ public class ApplicationStorageManagerImpl implements ApplicationStorageManager
|
||||
}
|
||||
return applicationReleaseDTO;
|
||||
} catch (IOException e) {
|
||||
throw new ApplicationStorageManagementException("IO Exception while saving the screens hots for " +
|
||||
"the application " + applicationReleaseDTO.getUuid(), e);
|
||||
String msg = "IO Exception occurred while saving application artifacts for the application which has UUID "
|
||||
+ applicationReleaseDTO.getUuid();
|
||||
log.error(msg);
|
||||
throw new ApplicationStorageManagementException(msg, e);
|
||||
}
|
||||
}
|
||||
|
||||
@ -142,7 +150,8 @@ public class ApplicationStorageManagerImpl implements ApplicationStorageManager
|
||||
String artifactPath;
|
||||
byte [] content = IOUtils.toByteArray(binaryFile);
|
||||
|
||||
artifactDirectoryPath = storagePath + applicationReleaseDTO.getAppHashValue();
|
||||
artifactDirectoryPath =
|
||||
storagePath + applicationReleaseDTO.getAppHashValue() + File.separator + Constants.APP_ARTIFACT;
|
||||
StorageManagementUtil.createArtifactDirectory(artifactDirectoryPath);
|
||||
artifactPath = artifactDirectoryPath + File.separator + applicationReleaseDTO.getInstallerName();
|
||||
saveFile(new ByteArrayInputStream(content), artifactPath);
|
||||
@ -168,24 +177,38 @@ public class ApplicationStorageManagerImpl implements ApplicationStorageManager
|
||||
String screenshot3 = applicationReleaseDTO.getScreenshotName3();
|
||||
|
||||
if (bannerName != null) {
|
||||
StorageManagementUtil.copy(storagePath + deletingAppHashValue + File.separator + bannerName,
|
||||
storagePath + appHashValue + File.separator + bannerName);
|
||||
StorageManagementUtil
|
||||
.copy(storagePath + deletingAppHashValue + File.separator + Constants.BANNER_ARTIFACT
|
||||
+ File.separator + bannerName,
|
||||
storagePath + appHashValue + File.separator + Constants.BANNER_ARTIFACT + File.separator
|
||||
+ bannerName);
|
||||
}
|
||||
if (iconName != null) {
|
||||
StorageManagementUtil.copy(storagePath + deletingAppHashValue + File.separator + iconName,
|
||||
storagePath + appHashValue + File.separator + iconName);
|
||||
StorageManagementUtil.copy(storagePath + deletingAppHashValue + File.separator + Constants.ICON_ARTIFACT
|
||||
+ File.separator + iconName,
|
||||
storagePath + appHashValue + File.separator + Constants.ICON_ARTIFACT + File.separator
|
||||
+ iconName);
|
||||
}
|
||||
if (screenshot1 != null) {
|
||||
StorageManagementUtil.copy(storagePath + deletingAppHashValue + File.separator + screenshot1,
|
||||
storagePath + appHashValue + File.separator + screenshot1);
|
||||
StorageManagementUtil
|
||||
.copy(storagePath + deletingAppHashValue + File.separator + Constants.SCREENSHOT_ARTIFACT + 1
|
||||
+ File.separator + screenshot1,
|
||||
storagePath + appHashValue + File.separator + Constants.SCREENSHOT_ARTIFACT + 1
|
||||
+ File.separator + screenshot1);
|
||||
}
|
||||
if (screenshot2 != null) {
|
||||
StorageManagementUtil.copy(storagePath + deletingAppHashValue + File.separator + screenshot2,
|
||||
storagePath + appHashValue + File.separator + screenshot2);
|
||||
StorageManagementUtil
|
||||
.copy(storagePath + deletingAppHashValue + File.separator + Constants.SCREENSHOT_ARTIFACT + 2
|
||||
+ File.separator + screenshot2,
|
||||
storagePath + appHashValue + File.separator + Constants.SCREENSHOT_ARTIFACT + 2
|
||||
+ File.separator + screenshot2);
|
||||
}
|
||||
if (screenshot3 != null) {
|
||||
StorageManagementUtil.copy(storagePath + deletingAppHashValue + File.separator + screenshot3,
|
||||
storagePath + appHashValue + File.separator + screenshot3);
|
||||
StorageManagementUtil
|
||||
.copy(storagePath + deletingAppHashValue + File.separator + Constants.SCREENSHOT_ARTIFACT + 3
|
||||
+ File.separator + screenshot3,
|
||||
storagePath + appHashValue + File.separator + Constants.SCREENSHOT_ARTIFACT + 3
|
||||
+ File.separator + screenshot3);
|
||||
}
|
||||
deleteAppReleaseArtifact( storagePath + deletingAppHashValue);
|
||||
} catch (IOException e) {
|
||||
@ -198,8 +221,9 @@ public class ApplicationStorageManagerImpl implements ApplicationStorageManager
|
||||
|
||||
|
||||
@Override
|
||||
public void deleteAppReleaseArtifact(String appReleaseHashVal, String fileName) throws ApplicationStorageManagementException {
|
||||
String artifactPath = storagePath + appReleaseHashVal + File.separator + fileName;
|
||||
public void deleteAppReleaseArtifact(String appReleaseHashVal, String folderName, String fileName)
|
||||
throws ApplicationStorageManagementException {
|
||||
String artifactPath = storagePath + appReleaseHashVal + File.separator + folderName + File.separator + fileName;
|
||||
deleteAppReleaseArtifact(artifactPath);
|
||||
}
|
||||
|
||||
@ -212,8 +236,9 @@ public class ApplicationStorageManagerImpl implements ApplicationStorageManager
|
||||
}
|
||||
|
||||
@Override
|
||||
public InputStream getFileSttream (String path) throws ApplicationStorageManagementException {
|
||||
String filePath = storagePath + path;
|
||||
public InputStream getFileStream(String hashVal, String folderName, String fileName)
|
||||
throws ApplicationStorageManagementException {
|
||||
String filePath = storagePath + hashVal + File.separator + folderName + File.separator + fileName;
|
||||
try {
|
||||
return StorageManagementUtil.getInputStream(filePath);
|
||||
} catch (IOException e) {
|
||||
|
||||
@ -64,12 +64,11 @@ public class AppmDataHandlerImpl implements AppmDataHandler {
|
||||
return lifecycleStateManager.getLifecycleConfig();
|
||||
}
|
||||
|
||||
@Override
|
||||
public InputStream getArtifactStream(String uuid, String artifactName) throws ApplicationManagementException {
|
||||
@Override public InputStream getArtifactStream(String uuid, String folderName, String artifactName)
|
||||
throws ApplicationManagementException {
|
||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
|
||||
ApplicationStorageManager applicationStorageManager = DAOUtil.getApplicationStorageManager();
|
||||
ApplicationReleaseDAO applicationReleaseDAO = ApplicationManagementDAOFactory.getApplicationReleaseDAO();
|
||||
String artifactPath;
|
||||
String appReleaseHashValue;
|
||||
try {
|
||||
ConnectionManagerUtil.openDBConnection();
|
||||
@ -79,10 +78,10 @@ public class AppmDataHandlerImpl implements AppmDataHandler {
|
||||
log.error(msg);
|
||||
throw new NotFoundException(msg);
|
||||
}
|
||||
artifactPath = appReleaseHashValue + Constants.FORWARD_SLASH + artifactName;
|
||||
InputStream inputStream = applicationStorageManager.getFileSttream(artifactPath);
|
||||
InputStream inputStream = applicationStorageManager
|
||||
.getFileStream(appReleaseHashValue, folderName, artifactName);
|
||||
if (inputStream == null) {
|
||||
String msg = "Couldn't file the file in the file system. File path: " + artifactPath;
|
||||
String msg = "Couldn't file the file in the file system.";
|
||||
log.error(msg);
|
||||
throw new ApplicationManagementException(msg);
|
||||
}
|
||||
|
||||
@ -27,6 +27,7 @@ import org.wso2.carbon.device.application.mgt.common.DeviceTypes;
|
||||
import org.wso2.carbon.device.application.mgt.common.SubAction;
|
||||
import org.wso2.carbon.device.application.mgt.common.SubsciptionType;
|
||||
import org.wso2.carbon.device.application.mgt.common.SubscribingDeviceIdHolder;
|
||||
import org.wso2.carbon.device.application.mgt.common.config.MDMConfig;
|
||||
import org.wso2.carbon.device.application.mgt.common.dto.ApplicationDTO;
|
||||
import org.wso2.carbon.device.application.mgt.common.dto.DeviceSubscriptionDTO;
|
||||
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationManagementException;
|
||||
@ -335,36 +336,38 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
|
||||
ConnectionManagerUtil.beginDBTransaction();
|
||||
List<Integer> deviceSubIds = new ArrayList<>();
|
||||
|
||||
List<String> subscribedEntities = new ArrayList<>();
|
||||
if (SubsciptionType.USER.toString().equalsIgnoreCase(subType)) {
|
||||
subscribedEntities = subscriptionDAO.getSubscribedUserNames(params, tenantId);
|
||||
List<String> subscribedEntities = subscriptionDAO.getSubscribedUserNames(params, tenantId);
|
||||
if (SubAction.INSTALL.toString().equalsIgnoreCase(action)) {
|
||||
params.removeAll(subscribedEntities);
|
||||
subscriptionDAO.addUserSubscriptions(tenantId, username, params, applicationReleaseId);
|
||||
}
|
||||
subscriptionDAO.updateSubscriptions(tenantId, username, subscribedEntities, applicationReleaseId, subType,
|
||||
action);
|
||||
} else if (SubsciptionType.ROLE.toString().equalsIgnoreCase(subType)) {
|
||||
subscribedEntities = subscriptionDAO.getSubscribedRoleNames(params, tenantId);
|
||||
List<String> subscribedEntities = subscriptionDAO.getSubscribedRoleNames(params, tenantId);
|
||||
if (SubAction.INSTALL.toString().equalsIgnoreCase(action)) {
|
||||
params.removeAll(subscribedEntities);
|
||||
subscriptionDAO.addRoleSubscriptions(tenantId, username, params, applicationReleaseId);
|
||||
|
||||
}
|
||||
subscriptionDAO.updateSubscriptions(tenantId, username, subscribedEntities, applicationReleaseId, subType,
|
||||
action);
|
||||
} else if (SubsciptionType.GROUP.toString().equalsIgnoreCase(subType)) {
|
||||
subscribedEntities = subscriptionDAO.getSubscribedGroupNames(params, tenantId);
|
||||
List<String> subscribedEntities = subscriptionDAO.getSubscribedGroupNames(params, tenantId);
|
||||
if (SubAction.INSTALL.toString().equalsIgnoreCase(action)) {
|
||||
params.removeAll(subscribedEntities);
|
||||
subscriptionDAO.addGroupSubscriptions(tenantId, username, params, applicationReleaseId);
|
||||
}
|
||||
}
|
||||
subscriptionDAO.updateSubscriptions(tenantId, username, subscribedEntities, applicationReleaseId, subType,
|
||||
action);
|
||||
}
|
||||
|
||||
for (Activity activity : activities) {
|
||||
int operationId = Integer.parseInt(activity.getActivityId().split("ACTIVITY_")[1]);
|
||||
List<Integer> operationAddedDeviceIds = getOperationAddedDeviceIds(activity,
|
||||
subscribingDeviceIdHolder.getSubscribableDevices());
|
||||
List<Integer> alreadySubscribedDevices = subscriptionDAO
|
||||
.getSubscribedDeviceIds(operationAddedDeviceIds, tenantId);
|
||||
.getSubscribedDeviceIds(operationAddedDeviceIds, applicationReleaseId, tenantId);
|
||||
if (SubAction.INSTALL.toString().equalsIgnoreCase(action)) {
|
||||
if (!alreadySubscribedDevices.isEmpty()) {
|
||||
List<Integer> deviceResubscribingIds = subscriptionDAO
|
||||
@ -478,14 +481,9 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
|
||||
}
|
||||
} else if (DeviceTypes.IOS.toString().equalsIgnoreCase(deviceType)) {
|
||||
if (SubAction.INSTALL.toString().equalsIgnoreCase(action)) {
|
||||
String host = System.getProperty(Constants.IOT_HOST_PROPERTY);
|
||||
String port = System.getProperty(Constants.IOT_PORT_PROPERTY);
|
||||
String artifactDownloadEndpoint = ConfigurationManager.getInstance().getConfiguration()
|
||||
.getArtifactDownloadEndpoint();
|
||||
String plistDownloadEndpoint =
|
||||
Constants.ARTIFACT_DOWNLOAD_PROTOCOL + "://" + host + ":" + port + artifactDownloadEndpoint
|
||||
+ Constants.FORWARD_SLASH + MDMAppConstants.IOSConstants.PLIST
|
||||
+ Constants.FORWARD_SLASH + application.getApplicationReleases().get(0).getUuid();
|
||||
String plistDownloadEndpoint = APIUtil.getArtifactDownloadBaseURL()
|
||||
+ MDMAppConstants.IOSConstants.PLIST + Constants.FORWARD_SLASH
|
||||
+ application.getApplicationReleases().get(0).getUuid();
|
||||
mobileApp.setType(mobileAppType);
|
||||
mobileApp.setLocation(plistDownloadEndpoint);
|
||||
Properties properties = new Properties();
|
||||
|
||||
@ -24,8 +24,10 @@ import org.apache.commons.logging.LogFactory;
|
||||
import org.apache.commons.validator.routines.UrlValidator;
|
||||
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
||||
import org.wso2.carbon.device.application.mgt.common.ApplicationType;
|
||||
import org.wso2.carbon.device.application.mgt.common.config.MDMConfig;
|
||||
import org.wso2.carbon.device.application.mgt.common.dto.ApplicationDTO;
|
||||
import org.wso2.carbon.device.application.mgt.common.dto.ApplicationReleaseDTO;
|
||||
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationManagementException;
|
||||
import org.wso2.carbon.device.application.mgt.common.response.Application;
|
||||
import org.wso2.carbon.device.application.mgt.common.response.ApplicationRelease;
|
||||
import org.wso2.carbon.device.application.mgt.common.services.*;
|
||||
@ -306,8 +308,7 @@ public class APIUtil {
|
||||
return applicationReleaseDTO;
|
||||
}
|
||||
|
||||
public static Application appDtoToAppResponse(ApplicationDTO applicationDTO)
|
||||
throws BadRequestException, UnexpectedServerErrorException {
|
||||
public static Application appDtoToAppResponse(ApplicationDTO applicationDTO) throws ApplicationManagementException {
|
||||
|
||||
Application application = new Application();
|
||||
if (!ApplicationType.WEB_CLIP.toString().equals(applicationDTO.getType())) {
|
||||
@ -326,19 +327,18 @@ public class APIUtil {
|
||||
application.setTags(applicationDTO.getTags());
|
||||
application.setUnrestrictedRoles(applicationDTO.getUnrestrictedRoles());
|
||||
application.setRating(applicationDTO.getAppRating());
|
||||
List<ApplicationRelease> applicationReleases = applicationDTO.getApplicationReleaseDTOs()
|
||||
.stream().map(APIUtil::releaseDtoToRelease).collect(Collectors.toList());
|
||||
List<ApplicationRelease> applicationReleases = new ArrayList<>();
|
||||
for (ApplicationReleaseDTO applicationReleaseDTO : applicationDTO.getApplicationReleaseDTOs()) {
|
||||
ApplicationRelease applicationRelease = releaseDtoToRelease(applicationReleaseDTO);
|
||||
applicationReleases.add(applicationRelease);
|
||||
}
|
||||
application.setApplicationReleases(applicationReleases);
|
||||
return application;
|
||||
}
|
||||
|
||||
public static ApplicationRelease releaseDtoToRelease(ApplicationReleaseDTO applicationReleaseDTO){
|
||||
String host = System.getProperty(Constants.IOT_HOST_PROPERTY);
|
||||
String port = System.getProperty(Constants.IOT_PORT_PROPERTY);
|
||||
String artifactDownloadEndpoint = ConfigurationManager.getInstance().getConfiguration()
|
||||
.getArtifactDownloadEndpoint();
|
||||
String basePath = Constants.ARTIFACT_DOWNLOAD_PROTOCOL + "://" + host + ":" + port + artifactDownloadEndpoint
|
||||
+ Constants.FORWARD_SLASH + applicationReleaseDTO.getUuid()
|
||||
public static ApplicationRelease releaseDtoToRelease(ApplicationReleaseDTO applicationReleaseDTO)
|
||||
throws ApplicationManagementException {
|
||||
String basePath = getArtifactDownloadBaseURL() + applicationReleaseDTO.getUuid()
|
||||
+ Constants.FORWARD_SLASH;
|
||||
|
||||
List<String> screenshotPaths = new ArrayList<>();
|
||||
@ -356,31 +356,58 @@ public class APIUtil {
|
||||
applicationRelease.setIsSharedWithAllTenants(applicationReleaseDTO.getIsSharedWithAllTenants());
|
||||
applicationRelease.setSupportedOsVersions(applicationReleaseDTO.getSupportedOsVersions());
|
||||
applicationRelease.setRating(applicationReleaseDTO.getRating());
|
||||
applicationRelease.setIconPath(basePath + applicationReleaseDTO.getIconName());
|
||||
applicationRelease.setIconPath(
|
||||
basePath + Constants.ICON_ARTIFACT + Constants.FORWARD_SLASH + applicationReleaseDTO.getIconName());
|
||||
|
||||
if (!StringUtils.isEmpty(applicationReleaseDTO.getBannerName())){
|
||||
applicationRelease.setBannerPath(basePath + applicationReleaseDTO.getBannerName());
|
||||
applicationRelease.setBannerPath(
|
||||
basePath + Constants.BANNER_ARTIFACT + Constants.FORWARD_SLASH + applicationReleaseDTO
|
||||
.getBannerName());
|
||||
}
|
||||
|
||||
if (urlValidator.isValid(applicationReleaseDTO.getInstallerName())){
|
||||
applicationRelease
|
||||
.setInstallerPath(applicationReleaseDTO.getInstallerName());
|
||||
if (urlValidator.isValid(applicationReleaseDTO.getInstallerName())) {
|
||||
applicationRelease.setInstallerPath(applicationReleaseDTO.getInstallerName());
|
||||
} else {
|
||||
applicationRelease
|
||||
.setInstallerPath(basePath + applicationReleaseDTO.getInstallerName());
|
||||
applicationRelease.setInstallerPath(
|
||||
basePath + Constants.APP_ARTIFACT + Constants.FORWARD_SLASH + applicationReleaseDTO
|
||||
.getInstallerName());
|
||||
}
|
||||
|
||||
if (!StringUtils.isEmpty(applicationReleaseDTO.getScreenshotName1())) {
|
||||
screenshotPaths.add(basePath + applicationReleaseDTO.getScreenshotName1());
|
||||
screenshotPaths
|
||||
.add(basePath + Constants.SCREENSHOT_ARTIFACT + 1 + Constants.FORWARD_SLASH + applicationReleaseDTO
|
||||
.getScreenshotName1());
|
||||
}
|
||||
if (!StringUtils.isEmpty(applicationReleaseDTO.getScreenshotName2())) {
|
||||
screenshotPaths.add(basePath + applicationReleaseDTO.getScreenshotName2());
|
||||
screenshotPaths
|
||||
.add(basePath + Constants.SCREENSHOT_ARTIFACT + 2 + Constants.FORWARD_SLASH + applicationReleaseDTO
|
||||
.getScreenshotName2());
|
||||
}
|
||||
if (!StringUtils.isEmpty(applicationReleaseDTO.getScreenshotName3())) {
|
||||
screenshotPaths.add(basePath + applicationReleaseDTO.getScreenshotName3());
|
||||
screenshotPaths
|
||||
.add(basePath + Constants.SCREENSHOT_ARTIFACT + 3 + Constants.FORWARD_SLASH + applicationReleaseDTO
|
||||
.getScreenshotName3());
|
||||
}
|
||||
applicationRelease.setScreenshots(screenshotPaths);
|
||||
return applicationRelease;
|
||||
}
|
||||
|
||||
public static String getArtifactDownloadBaseURL() throws ApplicationManagementException {
|
||||
String host = System.getProperty(Constants.IOT_HOST_PROPERTY);
|
||||
MDMConfig mdmConfig = ConfigurationManager.getInstance().getConfiguration().getMdmConfig();
|
||||
String port;
|
||||
if (Constants.HTTP_PROTOCOL.equals(mdmConfig.getArtifactDownloadProtocol())){
|
||||
port = System.getProperty(Constants.IOT_HTTP_PORT_PROPERTY);
|
||||
} else if( Constants.HTTPS_PROTOCOL.equals(mdmConfig.getArtifactDownloadProtocol())){
|
||||
port = System.getProperty(Constants.IOT_HTTPS_PORT_PROPERTY);
|
||||
} else {
|
||||
String msg = "In order to download application artifacts invalid protocols are defined.";
|
||||
log.error(msg);
|
||||
throw new ApplicationManagementException(msg);
|
||||
}
|
||||
String artifactDownloadEndpoint = mdmConfig.getArtifactDownloadEndpoint();
|
||||
return mdmConfig.getArtifactDownloadProtocol() + "://" + host + ":" + port
|
||||
+ artifactDownloadEndpoint + Constants.FORWARD_SLASH;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -37,8 +37,10 @@ public class Constants {
|
||||
public static final String CF_BUNDLE_VERSION = "CFBundleVersion";
|
||||
public static final String APP_EXTENSION = ".app";
|
||||
public static final String IOT_HOST_PROPERTY = "iot.core.host";
|
||||
public static final String IOT_PORT_PROPERTY = "iot.core.http.port";
|
||||
public static final String ARTIFACT_DOWNLOAD_PROTOCOL = "http";
|
||||
public static final String IOT_HTTP_PORT_PROPERTY = "iot.core.http.port";
|
||||
public static final String IOT_HTTPS_PORT_PROPERTY = "iot.core.https.port";
|
||||
public static final String HTTPS_PROTOCOL = "https";
|
||||
public static final String HTTP_PROTOCOL = "http";
|
||||
|
||||
public static final String FORWARD_SLASH = "/";
|
||||
public static final String ANY = "ANY";
|
||||
@ -61,16 +63,25 @@ public class Constants {
|
||||
public static final String DB_TYPE_POSTGRESQL = "PostgreSQL";
|
||||
}
|
||||
|
||||
/**
|
||||
* Directory name of the icon artifact that are saved in the file system.
|
||||
*/
|
||||
public static final String ICON_ARTIFACT = "icon";
|
||||
|
||||
/**
|
||||
* Name of the image artifacts that are saved in the file system.
|
||||
* Directory name of the banner artifact that are saved in the file system.
|
||||
*/
|
||||
public static final String[] IMAGE_ARTIFACTS = {"icon", "banner", "screenshot"};
|
||||
public static final String BANNER_ARTIFACT = "banner";
|
||||
|
||||
/**
|
||||
* Directory name of the release artifacts that are saved in the file system.
|
||||
* Common directory name of the screenshot artifact that are saved in the file system.
|
||||
*/
|
||||
public static final String RELEASE_ARTIFACT = "artifact";
|
||||
public static final String SCREENSHOT_ARTIFACT = "screenshot";
|
||||
|
||||
/**
|
||||
* Naming directory name of the application artifact that are saved in the file system.
|
||||
*/
|
||||
public static final String APP_ARTIFACT = "app";
|
||||
|
||||
public static final int REVIEW_PARENT_ID = -1;
|
||||
|
||||
|
||||
@ -23,17 +23,13 @@ import org.apache.commons.logging.LogFactory;
|
||||
import org.json.JSONException;
|
||||
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
||||
import org.wso2.carbon.device.application.mgt.common.dto.ApplicationDTO;
|
||||
import org.wso2.carbon.device.application.mgt.common.PaginationRequest;
|
||||
|
||||
import org.wso2.carbon.device.application.mgt.common.dto.ApplicationReleaseDTO;
|
||||
import org.wso2.carbon.device.application.mgt.common.dto.DeviceSubscriptionDTO;
|
||||
import org.wso2.carbon.device.application.mgt.common.dto.ReviewDTO;
|
||||
import org.wso2.carbon.device.application.mgt.common.exception.ReviewManagementException;
|
||||
import org.wso2.carbon.device.application.mgt.common.services.ApplicationManager;
|
||||
import org.wso2.carbon.device.application.mgt.common.services.ApplicationStorageManager;
|
||||
import org.wso2.carbon.device.application.mgt.common.services.SubscriptionManager;
|
||||
import org.wso2.carbon.device.application.mgt.core.config.Configuration;
|
||||
import org.wso2.carbon.device.application.mgt.core.config.ConfigurationManager;
|
||||
import org.wso2.carbon.device.application.mgt.core.exception.UnexpectedServerErrorException;
|
||||
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
|
||||
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderServiceImpl;
|
||||
@ -264,21 +260,6 @@ public class DAOUtil {
|
||||
}
|
||||
}
|
||||
|
||||
public static PaginationRequest validateCommentListPageSize(PaginationRequest paginationRequest) throws
|
||||
ReviewManagementException {
|
||||
if (paginationRequest.getLimit() == 0) {
|
||||
Configuration commentManagementConfig = ConfigurationManager.getInstance().getConfiguration();
|
||||
if (commentManagementConfig != null) {
|
||||
paginationRequest.setLimit(
|
||||
commentManagementConfig.getPaginationConfiguration().getCommentListPageSize());
|
||||
} else {
|
||||
throw new ReviewManagementException(
|
||||
"ApplicationDTO Management configuration has not initialized. Please check the application-mgt.xml file.");
|
||||
}
|
||||
}
|
||||
return paginationRequest;
|
||||
}
|
||||
|
||||
private static ApplicationManager applicationManager;
|
||||
private static ApplicationStorageManager applicationStorageManager;
|
||||
private static SubscriptionManager subscriptionManager;
|
||||
|
||||
@ -6,6 +6,7 @@ import org.apache.commons.logging.LogFactory;
|
||||
import org.testng.annotations.BeforeClass;
|
||||
import org.testng.annotations.Test;
|
||||
import org.wso2.carbon.device.application.mgt.core.BaseTestCase;
|
||||
import org.wso2.carbon.device.application.mgt.core.config.ConfigurationManager;
|
||||
import org.wso2.carbon.device.application.mgt.core.dao.common.ApplicationManagementDAOFactory;
|
||||
import org.wso2.carbon.device.application.mgt.core.dto.ApplicationsDTO;
|
||||
import org.wso2.carbon.device.application.mgt.core.dto.DeviceTypeCreator;
|
||||
@ -22,12 +23,12 @@ public class ApplicationManagementDAOTest extends BaseTestCase {
|
||||
@BeforeClass
|
||||
public void initialize() throws Exception {
|
||||
log.info("Initializing ApplicationManagementDAOTest tests");
|
||||
ConfigurationManager configurationManager = ConfigurationManager.getInstance();
|
||||
// super.initializeServices();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAddApplication() throws Exception {
|
||||
|
||||
ApplicationDAO applicationDAO = ApplicationManagementDAOFactory.getApplicationDAO();
|
||||
ConnectionManagerUtil.beginDBTransaction();
|
||||
applicationDAO.createApplication(ApplicationsDTO.getApp1(), -1234);
|
||||
@ -52,6 +53,4 @@ public class ApplicationManagementDAOTest extends BaseTestCase {
|
||||
DeviceManagementDAOFactory.closeConnection();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -18,7 +18,7 @@
|
||||
-->
|
||||
<ApplicationManagementConfiguration>
|
||||
|
||||
<!-- ApplicationDTO Mgt DB schema -->
|
||||
<!-- Application Mgt DB schema -->
|
||||
<DatasourceName>jdbc/APPM_DS</DatasourceName>
|
||||
|
||||
<Extensions>
|
||||
@ -135,7 +135,6 @@
|
||||
<UIConfigs>
|
||||
<EnableOAuth>true</EnableOAuth>
|
||||
<EnableSSO>false</EnableSSO>
|
||||
<EnableSSO>false</EnableSSO>
|
||||
<AppRegistration>
|
||||
<Tags>
|
||||
<Tag>application_management</Tag>
|
||||
@ -150,13 +149,18 @@
|
||||
<Scope>perm:app:review:update</Scope>
|
||||
<Scope>perm:app:publisher:view</Scope>
|
||||
<Scope>perm:app:publisher:update</Scope>
|
||||
<Scope>perm:app:store:view</Scope>
|
||||
<Scope>perm:app:subscription:install</Scope>
|
||||
<Scope>perm:app:subscription:uninstall</Scope>
|
||||
<Scope>perm:admin:app:review:update</Scope>
|
||||
<Scope>perm:admin:app:review:view</Scope>
|
||||
<Scope>perm:admin:app:publisher:update</Scope>
|
||||
<Scope>perm:admin:app:review:update</Scope>
|
||||
</Scopes>
|
||||
<SSOConfiguration>
|
||||
<Issuer>app-mgt</Issuer>
|
||||
</SSOConfiguration>
|
||||
<LoginResponse>
|
||||
<SuccessCallback>/application-mgt</SuccessCallback>
|
||||
<FailureCallback>
|
||||
<ErrorCallback>
|
||||
<BadRequest>/pages/error/client-errors/400</BadRequest>
|
||||
<Unauthorized>/pages/error/client-errors/401</Unauthorized>
|
||||
<Forbidden>/pages/error/client-errors/403</Forbidden>
|
||||
@ -166,7 +170,21 @@
|
||||
<UnsupportedMediaType>/pages/error/client-errors/415</UnsupportedMediaType>
|
||||
<InternalServerError>/pages/error/server-errors/500</InternalServerError>
|
||||
<DefaultPage>/pages/error/default</DefaultPage>
|
||||
</FailureCallback>
|
||||
</LoginResponse>
|
||||
</ErrorCallback>
|
||||
</UIConfigs>
|
||||
|
||||
<AppCategories>
|
||||
<Category>EMM</Category>
|
||||
<Category>IoT</Category>
|
||||
</AppCategories>
|
||||
|
||||
<RatingConfig>
|
||||
<MinRatingValue>1</MinRatingValue>
|
||||
<MaxRatingValue>10</MaxRatingValue>
|
||||
</RatingConfig>
|
||||
|
||||
<MDMConfig>
|
||||
<ArtifactDownloadProtocol>https</ArtifactDownloadProtocol>
|
||||
<ArtifactDownloadEndpoint>/api/application-mgt/v1.0/artifact</ArtifactDownloadEndpoint>
|
||||
</MDMConfig>
|
||||
</ApplicationManagementConfiguration>
|
||||
|
||||
@ -37,7 +37,7 @@
|
||||
<Extension name="ApplicationStorageManager">
|
||||
<ClassName>org.wso2.carbon.device.application.mgt.core.impl.ApplicationStorageManagerImpl</ClassName>
|
||||
<Parameters>
|
||||
<Parameter name="StoragePath">/tmp/apps/</Parameter>
|
||||
<Parameter name="StoragePath">repository/resources/apps/</Parameter>
|
||||
<Parameter name="MaxScreenShotCount">6</Parameter>
|
||||
</Parameters>
|
||||
</Extension>
|
||||
@ -135,7 +135,6 @@
|
||||
<UIConfigs>
|
||||
<EnableOAuth>true</EnableOAuth>
|
||||
<EnableSSO>false</EnableSSO>
|
||||
<EnableSSO>false</EnableSSO>
|
||||
<AppRegistration>
|
||||
<Tags>
|
||||
<Tag>application_management</Tag>
|
||||
@ -151,13 +150,17 @@
|
||||
<Scope>perm:app:publisher:view</Scope>
|
||||
<Scope>perm:app:publisher:update</Scope>
|
||||
<Scope>perm:app:store:view</Scope>
|
||||
<Scope>perm:app:subscription:install</Scope>
|
||||
<Scope>perm:app:subscription:uninstall</Scope>
|
||||
<Scope>perm:admin:app:review:update</Scope>
|
||||
<Scope>perm:admin:app:review:view</Scope>
|
||||
<Scope>perm:admin:app:publisher:update</Scope>
|
||||
<Scope>perm:admin:app:review:update</Scope>
|
||||
</Scopes>
|
||||
<SSOConfiguration>
|
||||
<Issuer>app-mgt</Issuer>
|
||||
</SSOConfiguration>
|
||||
<LoginResponse>
|
||||
<SuccessCallback>/apps</SuccessCallback>
|
||||
<FailureCallback>
|
||||
<ErrorCallback>
|
||||
<BadRequest>/pages/error/client-errors/400</BadRequest>
|
||||
<Unauthorized>/pages/error/client-errors/401</Unauthorized>
|
||||
<Forbidden>/pages/error/client-errors/403</Forbidden>
|
||||
@ -167,11 +170,9 @@
|
||||
<UnsupportedMediaType>/pages/error/client-errors/415</UnsupportedMediaType>
|
||||
<InternalServerError>/pages/error/server-errors/500</InternalServerError>
|
||||
<DefaultPage>/pages/error/default</DefaultPage>
|
||||
</FailureCallback>
|
||||
</LoginResponse>
|
||||
</ErrorCallback>
|
||||
</UIConfigs>
|
||||
|
||||
<ArtifactDownloadEndpoint>https://localhost:9443/api/application-mgt/v1.0/artifact</ArtifactDownloadEndpoint>
|
||||
<AppCategories>
|
||||
<Category>EMM</Category>
|
||||
<Category>IoT</Category>
|
||||
@ -181,4 +182,9 @@
|
||||
<MinRatingValue>1</MinRatingValue>
|
||||
<MaxRatingValue>10</MaxRatingValue>
|
||||
</RatingConfig>
|
||||
|
||||
<MDMConfig>
|
||||
<ArtifactDownloadProtocol>https</ArtifactDownloadProtocol>
|
||||
<ArtifactDownloadEndpoint>/api/application-mgt/v1.0/artifact</ArtifactDownloadEndpoint>
|
||||
</MDMConfig>
|
||||
</ApplicationManagementConfiguration>
|
||||
|
||||
@ -22,13 +22,13 @@
|
||||
<parent>
|
||||
<artifactId>application-mgt</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-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.7-SNAPSHOT</version>
|
||||
<version>3.2.9-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.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>org.wso2.carbon.device.application.mgt.publisher.ui</artifactId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-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.7-SNAPSHOT</version>
|
||||
<version>3.2.9-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.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<packaging>war</packaging>
|
||||
<name>WSO2 Carbon - Application Management Store API</name>
|
||||
<description>WSO2 Carbon - Application Management Store API</description>
|
||||
|
||||
@ -82,7 +82,7 @@ public interface SubscriptionManagementAPI {
|
||||
String SCOPE = "scope";
|
||||
|
||||
@POST
|
||||
@Path("/install/{uuid}/devices/{action}")
|
||||
@Path("/{uuid}/devices/{action}")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
@Consumes(MediaType.APPLICATION_JSON)
|
||||
@ApiOperation(
|
||||
@ -124,7 +124,7 @@ public interface SubscriptionManagementAPI {
|
||||
);
|
||||
|
||||
@POST
|
||||
@Path("/install/{uuid}/{subType}/{action}")
|
||||
@Path("/{uuid}/{subType}/{action}")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
@Consumes(MediaType.APPLICATION_JSON)
|
||||
@ApiOperation(
|
||||
|
||||
@ -49,7 +49,7 @@ public class SubscriptionManagementAPIImpl implements SubscriptionManagementAPI{
|
||||
|
||||
@Override
|
||||
@POST
|
||||
@Path("/install/{uuid}/devices/{action}")
|
||||
@Path("/{uuid}/devices/{action}")
|
||||
public Response performAppOperationForDevices(
|
||||
@PathParam("uuid") String uuid,
|
||||
@PathParam("action") String action,
|
||||
@ -83,7 +83,7 @@ public class SubscriptionManagementAPIImpl implements SubscriptionManagementAPI{
|
||||
|
||||
@Override
|
||||
@POST
|
||||
@Path("/install/{uuid}/{subType}/{action}")
|
||||
@Path("/{uuid}/{subType}/{action}")
|
||||
public Response performBulkAppOperation(
|
||||
@PathParam("uuid") String uuid,
|
||||
@PathParam("subType") String subType,
|
||||
|
||||
@ -24,10 +24,10 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>application-mgt</artifactId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>org.wso2.carbon.device.application.mgt.store.ui</artifactId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<packaging>war</packaging>
|
||||
<name>WSO2 Carbon - Application Management Store UI Component</name>
|
||||
<url>http://wso2.org</url>
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import React from "react";
|
||||
import {Button, Modal, Tabs} from "antd";
|
||||
import {Modal, Tabs} from "antd";
|
||||
import UserInstall from "./UserInstall";
|
||||
import GroupInstall from "./GroupInstall";
|
||||
import RoleInstall from "./RoleInstall";
|
||||
|
||||
@ -131,7 +131,8 @@ class DeviceInstall extends React.Component {
|
||||
|
||||
//send request to the invoker
|
||||
axios.get(
|
||||
window.location.origin+ config.serverConfig.invoker.uri + config.serverConfig.invoker.deviceMgt+"/devices?" + encodedExtraParams,
|
||||
window.location.origin+
|
||||
+ config.serverConfig.invoker.uri + config.serverConfig.invoker.deviceMgt+"/devices?" + encodedExtraParams,
|
||||
|
||||
).then(res => {
|
||||
if (res.status === 200) {
|
||||
@ -186,15 +187,17 @@ class DeviceInstall extends React.Component {
|
||||
type: device.type
|
||||
});
|
||||
});
|
||||
this.props.onInstall("device", payload);
|
||||
this.props.onInstall("devices", payload);
|
||||
};
|
||||
|
||||
|
||||
render() {
|
||||
const {data,pagination,loading,selectedRows} = this.state;
|
||||
return (
|
||||
<div>
|
||||
<Text>Start installing the application for one or more users by entering the corresponding user name. Select install to automatically start downloading the application for the respective user/users. </Text>
|
||||
<Text>
|
||||
Start installing the application for one or more users by entering the corresponding user name.
|
||||
Select install to automatically start downloading the application for the respective user/users.
|
||||
</Text>
|
||||
<Table
|
||||
style={{paddingTop:20}}
|
||||
columns={columns}
|
||||
@ -213,7 +216,9 @@ class DeviceInstall extends React.Component {
|
||||
scroll={{x: 1000}}
|
||||
/>
|
||||
<div style={{paddingTop: 10, textAlign: "right"}}>
|
||||
<Button disabled={selectedRows.length===0} htmlType="button" type="primary" onClick={this.install}>Install</Button>
|
||||
<Button disabled={selectedRows.length===0} htmlType="button" type="primary" onClick={this.install}>
|
||||
Install
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
||||
@ -22,13 +22,13 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>carbon-devicemgt</artifactId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>application-mgt</artifactId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-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.7-SNAPSHOT</version>
|
||||
<version>3.2.9-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.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -21,13 +21,13 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>certificate-mgt</artifactId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.certificate.mgt.core</artifactId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-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.7-SNAPSHOT</version>
|
||||
<version>3.2.9-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.7-SNAPSHOT</version>
|
||||
<version>3.2.9-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.7-SNAPSHOT</version>
|
||||
<version>3.2.9-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.7-SNAPSHOT</version>
|
||||
<version>3.2.9-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.7-SNAPSHOT</version>
|
||||
<version>3.2.9-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.7-SNAPSHOT</version>
|
||||
<version>3.2.9-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.7-SNAPSHOT</version>
|
||||
<version>3.2.9-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.7-SNAPSHOT</version>
|
||||
<version>3.2.9-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.7-SNAPSHOT</version>
|
||||
<version>3.2.9-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.7-SNAPSHOT</version>
|
||||
<version>3.2.9-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.7-SNAPSHOT</version>
|
||||
<version>3.2.9-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.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -58,6 +58,7 @@ import org.wso2.carbon.device.mgt.common.operation.mgt.Activity;
|
||||
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
|
||||
import org.wso2.carbon.device.mgt.common.policy.mgt.Policy;
|
||||
import org.wso2.carbon.device.mgt.common.policy.mgt.monitor.NonComplianceData;
|
||||
import org.wso2.carbon.device.mgt.common.search.PropertyMap;
|
||||
import org.wso2.carbon.device.mgt.common.search.SearchContext;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.beans.DeviceList;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.beans.ErrorResponse;
|
||||
@ -79,6 +80,7 @@ import javax.ws.rs.QueryParam;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Device related REST-API. This can be used to manipulated device related details.
|
||||
@ -1074,6 +1076,84 @@ public interface DeviceManagementService {
|
||||
required = true)
|
||||
SearchContext searchContext);
|
||||
|
||||
@POST
|
||||
@Path("/query-devices")
|
||||
@ApiOperation(
|
||||
produces = MediaType.APPLICATION_JSON,
|
||||
consumes = MediaType.APPLICATION_JSON,
|
||||
httpMethod = "POST",
|
||||
value = "Property based Search for Devices",
|
||||
notes = "Search for devices based on properties",
|
||||
tags = "Device Management",
|
||||
extensions = {
|
||||
@Extension(properties = {
|
||||
@ExtensionProperty(name = Constants.SCOPE, value = "perm:devices:search")
|
||||
})
|
||||
}
|
||||
)
|
||||
@ApiResponses(
|
||||
value = {
|
||||
@ApiResponse(
|
||||
code = 200,
|
||||
message = "OK. \n Successfully retrieved the device information.",
|
||||
response = DeviceList.class,
|
||||
responseHeaders = {
|
||||
@ResponseHeader(
|
||||
name = "Content-Type",
|
||||
description = "The content type of the body"),
|
||||
@ResponseHeader(
|
||||
name = "ETag",
|
||||
description = "Entity Tag of the response resource.\n" +
|
||||
"Used by caches, or in conditional requests."),
|
||||
@ResponseHeader(
|
||||
name = "Last-Modified",
|
||||
description = "Date and time the resource was last modified. \n" +
|
||||
"Used by caches, or in conditional requests.")}),
|
||||
@ApiResponse(
|
||||
code = 304,
|
||||
message = "Not Modified. \n " +
|
||||
"Empty body because the client already has the latest version of the requested resource.\n"),
|
||||
@ApiResponse(
|
||||
code = 400,
|
||||
message = "Bad Request. \n Invalid request or validation error.",
|
||||
response = ErrorResponse.class),
|
||||
@ApiResponse(
|
||||
code = 404,
|
||||
message = "Not Acceptable.\n The existing device did not match the values specified in the device search.",
|
||||
response = ErrorResponse.class),
|
||||
@ApiResponse(
|
||||
code = 406,
|
||||
message = "Not Acceptable.\n The requested media type is not supported"),
|
||||
@ApiResponse(
|
||||
code = 415,
|
||||
message = "Unsupported media type. \n The format of the requested entity was not supported."),
|
||||
@ApiResponse(
|
||||
code = 500,
|
||||
message = "Internal Server Error. \n " +
|
||||
"Server error occurred while getting the device details.",
|
||||
response = ErrorResponse.class)
|
||||
})
|
||||
Response queryDevicesByProperties(
|
||||
@ApiParam(
|
||||
name = "offset",
|
||||
value = "The starting pagination index for the complete list of qualified items.",
|
||||
required = false,
|
||||
defaultValue = "0")
|
||||
@QueryParam("offset")
|
||||
int offset,
|
||||
@ApiParam(
|
||||
name = "limit",
|
||||
value = "Provide how many activity details you require from the starting pagination index/offset.",
|
||||
required = false,
|
||||
defaultValue = "5")
|
||||
@QueryParam("limit")
|
||||
int limit,
|
||||
@ApiParam(
|
||||
name = "device property map",
|
||||
value = "properties by which devices need filtered",
|
||||
required = true)
|
||||
PropertyMap map);
|
||||
|
||||
@GET
|
||||
@Path("/{type}/{id}/applications")
|
||||
@ApiOperation(
|
||||
|
||||
@ -63,6 +63,7 @@ import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementExcept
|
||||
import org.wso2.carbon.device.mgt.common.policy.mgt.Policy;
|
||||
import org.wso2.carbon.device.mgt.common.policy.mgt.monitor.NonComplianceData;
|
||||
import org.wso2.carbon.device.mgt.common.policy.mgt.monitor.PolicyComplianceException;
|
||||
import org.wso2.carbon.device.mgt.common.search.PropertyMap;
|
||||
import org.wso2.carbon.device.mgt.common.search.SearchContext;
|
||||
import org.wso2.carbon.device.mgt.core.app.mgt.ApplicationManagementProviderService;
|
||||
import org.wso2.carbon.device.mgt.core.device.details.mgt.DeviceDetailsMgtException;
|
||||
@ -104,6 +105,7 @@ import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Path("/devices")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
@ -652,6 +654,30 @@ public class DeviceManagementServiceImpl implements DeviceManagementService {
|
||||
return Response.status(Response.Status.OK).entity(deviceList).build();
|
||||
}
|
||||
|
||||
@POST
|
||||
@Path("/query-devices")
|
||||
@Override
|
||||
public Response queryDevicesByProperties(@QueryParam("offset") int offset,
|
||||
@QueryParam("limit") int limit, PropertyMap map) {
|
||||
List<Device> devices;
|
||||
DeviceList deviceList = new DeviceList();
|
||||
try {
|
||||
DeviceManagementProviderService dms = DeviceMgtAPIUtils.getDeviceManagementService();
|
||||
devices = dms.getDevicesBasedOnProperties(map.getProperties());
|
||||
if(devices == null || devices.isEmpty()){
|
||||
return Response.status(Response.Status.OK).entity("No device found matching query criteria.").build();
|
||||
}
|
||||
} catch (DeviceManagementException e) {
|
||||
String msg = "Error occurred while searching for devices that matches the provided device properties";
|
||||
log.error(msg, e);
|
||||
return Response.serverError().entity(
|
||||
new ErrorResponse.ErrorResponseBuilder().setMessage(msg).build()).build();
|
||||
}
|
||||
deviceList.setList(devices);
|
||||
deviceList.setCount(devices.size());
|
||||
return Response.status(Response.Status.OK).entity(deviceList).build();
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("/{type}/{id}/applications")
|
||||
@Override
|
||||
|
||||
@ -21,7 +21,7 @@
|
||||
<parent>
|
||||
<artifactId>device-mgt</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -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://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;
|
||||
|
||||
@ -80,6 +97,15 @@ public interface DeviceManager {
|
||||
*/
|
||||
boolean disenrollDevice(DeviceIdentifier deviceId) throws DeviceManagementException;
|
||||
|
||||
/**
|
||||
* Method to delete a particular device from CDM.
|
||||
*
|
||||
* @param deviceId Fully qualified device identifier
|
||||
* @return A boolean indicating the status of the operation.
|
||||
* @throws DeviceManagementException If some unusual behaviour is observed while deleting a device
|
||||
*/
|
||||
boolean deleteDevice(DeviceIdentifier deviceId, Device device) throws DeviceManagementException;
|
||||
|
||||
/**
|
||||
* Method to retrieve the status of the registration process of a particular device.
|
||||
*
|
||||
|
||||
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* 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
|
||||
*
|
||||
* 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.search;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
@ApiModel(value = "PropertyMap", description = "Search properties based on which devices need to be found.")
|
||||
public class PropertyMap {
|
||||
|
||||
@ApiModelProperty(name = "properties", value = "Contains the properties for search.",
|
||||
required = true)
|
||||
private Map<String, String> properties;
|
||||
|
||||
public Map<String, String> getProperties() {
|
||||
return properties;
|
||||
}
|
||||
|
||||
public void setProperties(Map<String, String> properties) {
|
||||
this.properties = properties;
|
||||
}
|
||||
}
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>device-mgt</artifactId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -47,6 +47,7 @@ import org.wso2.carbon.device.mgt.core.geo.geoHash.GeoCoordinate;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* This class represents the key operations associated with persisting device related information.
|
||||
@ -180,6 +181,26 @@ public interface DeviceDAO {
|
||||
Device getDevice(DeviceIdentifier deviceIdentifier, Date ifModifiedSince, int tenantId) throws
|
||||
DeviceManagementDAOException;
|
||||
|
||||
/**
|
||||
* Retrieves a list of devices based on a given criteria of properties
|
||||
* @param deviceProps properties by which devices need to be filtered
|
||||
* @param tenantId tenant id
|
||||
* @return list of devices with properties
|
||||
* @throws DeviceManagementDAOException
|
||||
*/
|
||||
List<Device> getDeviceBasedOnDeviceProperties(Map<String, String> deviceProps, int tenantId) throws DeviceManagementDAOException;
|
||||
|
||||
|
||||
/**
|
||||
* Retrieves properties of given device identifier
|
||||
*
|
||||
* @param deviceId identifier of device that need to be retrieved
|
||||
* @param tenantId tenant ID
|
||||
* @return list of devices with properties
|
||||
* @throws DeviceManagementDAOException
|
||||
*/
|
||||
Device getDeviceProps(String deviceId, 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.
|
||||
|
||||
@ -56,15 +56,22 @@ import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Timestamp;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.StringJoiner;
|
||||
|
||||
public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
|
||||
|
||||
private static final org.apache.commons.logging.Log log = LogFactory.getLog(AbstractDeviceDAOImpl.class);
|
||||
|
||||
private static final String PROPERTY_KEY_COLUMN_NAME = "PROPERTY_NAME";
|
||||
private static final String PROPERTY_VALUE_COLUMN_NAME = "PROPERTY_VALUE";
|
||||
private static final String PROPERTY_DEVICE_TYPE_NAME = "DEVICE_TYPE_NAME";
|
||||
private static final String PROPERTY_DEVICE_IDENTIFICATION = "DEVICE_IDENTIFICATION";
|
||||
|
||||
@Override
|
||||
public int addDevice(int typeId, Device device, int tenantId) throws DeviceManagementDAOException {
|
||||
Connection conn;
|
||||
@ -282,6 +289,103 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
|
||||
return device;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Device> getDeviceBasedOnDeviceProperties(Map<String,String> deviceProps, int tenantId)
|
||||
throws DeviceManagementDAOException {
|
||||
Connection conn = null;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet resultSet = null;
|
||||
List<Device> devices = new ArrayList<>();
|
||||
try {
|
||||
List<List<String>> outputLists = new ArrayList<>();
|
||||
List<String> deviceList = null;
|
||||
conn = this.getConnection();
|
||||
for (Map.Entry<String, String> entry : deviceProps.entrySet()) {
|
||||
|
||||
stmt = conn.prepareStatement("SELECT DEVICE_IDENTIFICATION FROM DM_DEVICE_PROPERTIES " +
|
||||
"WHERE (PROPERTY_NAME , PROPERTY_VALUE) IN " +
|
||||
"((? , ?)) AND TENANT_ID = ?");
|
||||
stmt.setString(1, entry.getKey());
|
||||
stmt.setString(2, entry.getValue());
|
||||
stmt.setInt(3, tenantId);
|
||||
resultSet = stmt.executeQuery();
|
||||
|
||||
deviceList = new ArrayList<>();
|
||||
while (resultSet.next()) {
|
||||
deviceList.add(resultSet.getString(PROPERTY_DEVICE_IDENTIFICATION));
|
||||
}
|
||||
outputLists.add(deviceList);
|
||||
}
|
||||
List<String> deviceIds = findIntersection(outputLists);
|
||||
for(String deviceId : deviceIds){
|
||||
devices.add(getDeviceProps(deviceId, tenantId));
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
String msg = "Error occurred while fetching devices against criteria : '" + deviceProps;
|
||||
log.error(msg, e);
|
||||
throw new DeviceManagementDAOException(msg, e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, resultSet);
|
||||
}
|
||||
return devices;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Device getDeviceProps(String deviceId, int tenantId) throws DeviceManagementDAOException {
|
||||
Connection conn = null;
|
||||
PreparedStatement stmt = null;
|
||||
Device device = null;
|
||||
ResultSet resultSet = null;
|
||||
String deviceType = null;
|
||||
try {
|
||||
conn = this.getConnection();
|
||||
stmt = conn.prepareStatement(
|
||||
"SELECT * FROM DM_DEVICE_PROPERTIES WHERE DEVICE_IDENTIFICATION = ? AND TENANT_ID = ?");
|
||||
stmt.setString(1, deviceId);
|
||||
stmt.setInt(2, tenantId);
|
||||
resultSet = stmt.executeQuery();
|
||||
List<Device.Property> properties = new ArrayList<>();
|
||||
while (resultSet.next()) {
|
||||
Device.Property property = new Device.Property();
|
||||
property.setName(resultSet.getString(PROPERTY_KEY_COLUMN_NAME));
|
||||
property.setValue(resultSet.getString(PROPERTY_VALUE_COLUMN_NAME));
|
||||
properties.add(property);
|
||||
//We are repeatedly assigning device type here. Yes. This was done intentionally, as there would be
|
||||
//No other efficient/simple/inexpensive way of retrieving device type of a particular device from the database
|
||||
//Note that device-identification will be unique across device types
|
||||
deviceType = resultSet.getString(PROPERTY_DEVICE_TYPE_NAME);
|
||||
}
|
||||
device = new Device();
|
||||
device.setDeviceIdentifier(deviceId);
|
||||
device.setType(deviceType);
|
||||
device.setProperties(properties);
|
||||
|
||||
} catch (SQLException e) {
|
||||
String msg = "Error occurred while fetching properties for device : '" + deviceId;
|
||||
log.error(msg, e);
|
||||
throw new DeviceManagementDAOException(msg, e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, resultSet);
|
||||
}
|
||||
|
||||
return device;
|
||||
}
|
||||
|
||||
private List<String> findIntersection(List<List<String>> collections) {
|
||||
boolean first = true;
|
||||
List<String> intersectedResult = new ArrayList<>();
|
||||
for (Collection<String> collection : collections) {
|
||||
if (first) {
|
||||
intersectedResult.addAll(collection);
|
||||
first = false;
|
||||
} else {
|
||||
intersectedResult.retainAll(collection);
|
||||
}
|
||||
}
|
||||
return intersectedResult;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Device getDevice(String deviceIdentifier, Date since, int tenantId)
|
||||
throws DeviceManagementDAOException {
|
||||
@ -1409,91 +1513,97 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
|
||||
}
|
||||
|
||||
public void deleteDevice(DeviceIdentifier deviceIdentifier, int tenantId) throws DeviceManagementDAOException {
|
||||
String deviceIdentifierId = deviceIdentifier.getId();
|
||||
String deviceType = deviceIdentifier.getType();
|
||||
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";
|
||||
String msg = "Device " + deviceIdentifierId + " of type " + deviceType + " 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();
|
||||
List<Integer> enrollmentIds = getEnrollmentIds(conn, deviceId, tenantId);
|
||||
if (enrollmentIds == null || enrollmentIds.isEmpty()) {
|
||||
String msg = "Enrollments not found for the device " + deviceIdentifierId + " of type "
|
||||
+ deviceType;
|
||||
log.error(msg);
|
||||
throw new DeviceManagementDAOException(msg);
|
||||
} else {
|
||||
removeDeviceDetail(conn, deviceId);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Successfully removed device detail data");
|
||||
log.debug("Successfully removed device detail data of device " + deviceIdentifierId
|
||||
+ " of type " + deviceType);
|
||||
}
|
||||
removeDeviceLocation(conn, deviceId);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Successfully removed device location data");
|
||||
log.debug("Successfully removed device location data of device " + deviceIdentifierId
|
||||
+ " of type " + deviceType);
|
||||
}
|
||||
removeDeviceInfo(conn, deviceId);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Successfully removed device info data");
|
||||
log.debug("Successfully removed device info data of device " + deviceIdentifierId
|
||||
+ " of type " + deviceType);
|
||||
}
|
||||
removeDeviceNotification(conn, deviceId);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Successfully removed device notification data");
|
||||
log.debug("Successfully removed device notification data of device " + deviceIdentifierId
|
||||
+ " of type " + deviceType);
|
||||
}
|
||||
removeDeviceApplicationMapping(conn, deviceId);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Successfully removed device application mapping data");
|
||||
log.debug("Successfully removed device application mapping data of device "
|
||||
+ deviceIdentifierId + " of type " + deviceType);
|
||||
}
|
||||
removeDevicePolicyApplied(conn, deviceId);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Successfully removed device applied policy data");
|
||||
log.debug("Successfully removed device applied policy data of device " + deviceIdentifierId
|
||||
+ " of type " + deviceType);
|
||||
}
|
||||
removeDevicePolicy(conn, deviceId);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Successfully removed device policy data");
|
||||
log.debug("Successfully removed device policy data of device " + deviceIdentifierId
|
||||
+ " of type " + deviceType);
|
||||
}
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Starting to remove " + enrollmentIds.size() + " enrollment data of device "
|
||||
+ deviceIdentifierId + " of type " + deviceType);
|
||||
}
|
||||
for (Integer enrollmentId : enrollmentIds) {
|
||||
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");
|
||||
log.debug("Successfully removed enrollment device details, enrollment device location, " +
|
||||
"enrollment device info, enrollment device application mapping, " +
|
||||
"enrollment device operation response, enrollment operation mapping data of device "
|
||||
+ deviceIdentifierId + " of type " + deviceType);
|
||||
}
|
||||
removeDeviceEnrollment(conn, deviceId);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Successfully removed device enrollment data");
|
||||
log.debug("Successfully removed device enrollment data of device " + deviceIdentifierId
|
||||
+ " of type " + deviceType);
|
||||
}
|
||||
removeDeviceGroupMapping(conn, deviceId);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Successfully removed device group mapping data");
|
||||
log.debug("Successfully removed device group mapping data of device " + deviceIdentifierId
|
||||
+ " of type " + deviceType);
|
||||
}
|
||||
removeDevice(conn, deviceId);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Successfully permanently deleted the device");
|
||||
log.debug("Successfully permanently deleted the device of device " + deviceIdentifierId
|
||||
+ " of type " + deviceType);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while deleting the device", e);
|
||||
throw new DeviceManagementDAOException("Error occurred while deleting the device " + deviceIdentifierId
|
||||
+ " of type " + deviceType, e);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1519,30 +1629,29 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
|
||||
return deviceId;
|
||||
}
|
||||
|
||||
private int getEnrollmentId(Connection conn, int deviceId, int tenantId) throws DeviceManagementDAOException {
|
||||
private List<Integer> getEnrollmentIds(Connection conn, int deviceId, int tenantId) throws DeviceManagementDAOException {
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
int enrollmentId = -1;
|
||||
List<Integer> enrollmentIds = new ArrayList<>();
|
||||
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");
|
||||
while (rs.next()) {
|
||||
enrollmentIds.add(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;
|
||||
return enrollmentIds;
|
||||
}
|
||||
|
||||
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);
|
||||
@ -1551,13 +1660,12 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while removing device detail", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, null);
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
@ -1566,13 +1674,12 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while removing device location", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, null);
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
@ -1581,13 +1688,12 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while removing device info", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, null);
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
@ -1596,13 +1702,12 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while removing device notification", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, null);
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
@ -1611,13 +1716,12 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while removing device application mapping", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, null);
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
@ -1626,13 +1730,12 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while removing device policy applied", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, null);
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
@ -1641,13 +1744,12 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while removing device policy", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, null);
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
@ -1656,13 +1758,12 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while removing enrollment device detail", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, null);
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
@ -1671,13 +1772,12 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while removing enrollment device location", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, null);
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
@ -1686,14 +1786,13 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while removing enrollment device info", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, null);
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
@ -1703,13 +1802,12 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
|
||||
throw new DeviceManagementDAOException("Error occurred while removing enrollment device application " +
|
||||
"mapping", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, null);
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
@ -1718,14 +1816,13 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while removing device operation response", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, null);
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
@ -1734,13 +1831,12 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while removing enrollment operation mapping", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, null);
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
@ -1749,13 +1845,12 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while removing device enrollment", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, null);
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
@ -1764,13 +1859,12 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while removing device group mapping", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, null);
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
@ -1779,7 +1873,7 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while removing device", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
DeviceManagementDAOUtil.cleanupResources(stmt, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -66,6 +66,7 @@ import org.wso2.carbon.device.mgt.core.geo.geoHash.GeoCoordinate;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Proxy class for all Device Management related operations that take the corresponding plugin type in
|
||||
@ -255,6 +256,15 @@ public interface DeviceManagementProviderService {
|
||||
*/
|
||||
Device getDevice(DeviceIdentifier deviceId, Date since, boolean requireDeviceInfo) throws DeviceManagementException;
|
||||
|
||||
/**
|
||||
* Retrieves a list of devices based on a given criteria of properties
|
||||
*
|
||||
* @param deviceProps properties by which devices need to be drawn
|
||||
* @return list of devices
|
||||
* @throws DeviceManagementException
|
||||
*/
|
||||
List<Device> getDevicesBasedOnProperties(Map deviceProps) throws DeviceManagementException;
|
||||
|
||||
/**
|
||||
* Returns the device of specified id.
|
||||
*
|
||||
|
||||
@ -14,11 +14,11 @@
|
||||
* 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,
|
||||
*
|
||||
* 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
|
||||
@ -553,6 +553,14 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
|
||||
try {
|
||||
DeviceManagementDAOFactory.beginTransaction();
|
||||
deviceDAO.deleteDevice(deviceId, tenantId);
|
||||
try {
|
||||
deviceManager.deleteDevice(deviceId, device);
|
||||
} catch (DeviceManagementException e) {
|
||||
String msg = "Error occurred while permanently deleting '" + deviceId.getType() +
|
||||
"' device with the identifier '" + deviceId.getId() + "' in plugin.";
|
||||
log.error(msg, e);
|
||||
throw new DeviceManagementDAOException(msg, e);
|
||||
}
|
||||
DeviceManagementDAOFactory.commitTransaction();
|
||||
this.removeDeviceFromCache(deviceId);
|
||||
} catch (DeviceManagementDAOException e) {
|
||||
@ -1201,6 +1209,46 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
|
||||
return device;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<Device> getDevicesBasedOnProperties(Map deviceProps) throws DeviceManagementException {
|
||||
if (deviceProps == null || deviceProps.isEmpty()) {
|
||||
String msg = "Devices retrieval criteria cannot be null or empty.";
|
||||
log.error(msg);
|
||||
throw new DeviceManagementException(msg);
|
||||
}
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Attempting to get devices based on criteria : " + deviceProps);
|
||||
}
|
||||
List<Device> devices;
|
||||
try {
|
||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
||||
DeviceManagementDAOFactory.openConnection();
|
||||
devices = deviceDAO.getDeviceBasedOnDeviceProperties(deviceProps, tenantId);
|
||||
if (devices == null) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("No device is found against criteria : " + deviceProps + " and tenantId "+ tenantId);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
} catch (DeviceManagementDAOException e) {
|
||||
String msg = "Error occurred while obtaining devices based on criteria : " + deviceProps;
|
||||
log.error(msg, e);
|
||||
throw new DeviceManagementException(msg, e);
|
||||
} catch (SQLException e) {
|
||||
String msg = "Error occurred while opening a connection to the data source";
|
||||
log.error(msg, e);
|
||||
throw new DeviceManagementException(msg, e);
|
||||
} catch (Exception e) {
|
||||
String msg = "Error occurred while obtaining devices based on criteria : " + deviceProps;
|
||||
log.error(msg, e);
|
||||
throw new DeviceManagementException(msg, e);
|
||||
} finally {
|
||||
DeviceManagementDAOFactory.closeConnection();
|
||||
}
|
||||
return devices;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Device getDevice(String deviceId, Date since, boolean requireDeviceInfo) throws DeviceManagementException {
|
||||
if (deviceId == null || since == null) {
|
||||
|
||||
@ -60,6 +60,11 @@ public class TestDeviceManager implements DeviceManager {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean deleteDevice(DeviceIdentifier deviceId, Device device) throws DeviceManagementException {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnrolled(DeviceIdentifier deviceId) throws DeviceManagementException {
|
||||
return true;
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<artifactId>device-mgt</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-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://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;
|
||||
|
||||
@ -568,4 +584,35 @@ public class DeviceTypeManager implements DeviceManager {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean deleteDevice(DeviceIdentifier deviceIdentifier, Device device) throws DeviceManagementException {
|
||||
if (propertiesExist) {
|
||||
boolean status;
|
||||
Device existingDevice = this.getDevice(deviceIdentifier);
|
||||
if (existingDevice == null) {
|
||||
return false;
|
||||
}
|
||||
try {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Deleting the details of " + deviceType + " device : " + device.getDeviceIdentifier());
|
||||
}
|
||||
deviceTypePluginDAOManager.getDeviceTypeDAOHandler().beginTransaction();
|
||||
status = deviceTypePluginDAOManager.getDeviceDAO().deleteDevice(existingDevice);
|
||||
deviceTypePluginDAOManager.getDeviceTypeDAOHandler().commitTransaction();
|
||||
} catch (DeviceTypeMgtPluginException e) {
|
||||
try {
|
||||
deviceTypePluginDAOManager.getDeviceTypeDAOHandler().rollbackTransaction();
|
||||
} catch (DeviceTypeMgtPluginException e1) {
|
||||
log.warn("Error occurred while roll back the delete device info transaction : '" +
|
||||
device.toString() + "'", e1);
|
||||
}
|
||||
throw new DeviceManagementException(
|
||||
"Error occurred while deleting the " + deviceType + " device: '" +
|
||||
device.getDeviceIdentifier() + "'", e);
|
||||
}
|
||||
return status;
|
||||
}
|
||||
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://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.dao;
|
||||
@ -45,6 +62,7 @@ public class DeviceTypePluginDAOImpl implements PluginDAO {
|
||||
private String createDBqueryForAddDevice;
|
||||
private String updateDBQueryForUpdateDevice;
|
||||
private String selectDBQueryToGetAllDevice;
|
||||
private String deleteDBQueryForDeleteDevice;
|
||||
|
||||
public DeviceTypePluginDAOImpl(DeviceDAODefinition deviceDAODefinition,
|
||||
DeviceTypeDAOHandler deviceTypeDAOHandler) {
|
||||
@ -196,6 +214,33 @@ public class DeviceTypePluginDAOImpl implements PluginDAO {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean deleteDevice(Device device) throws DeviceTypeMgtPluginException {
|
||||
boolean status = false;
|
||||
Connection conn;
|
||||
PreparedStatement stmt = null;
|
||||
try {
|
||||
conn = deviceTypeDAOHandler.getConnection();
|
||||
stmt = conn.prepareStatement(deleteDBQueryForDeleteDevice);
|
||||
stmt.setString(1, device.getDeviceIdentifier());
|
||||
int rows = stmt.executeUpdate();
|
||||
if (rows > 0) {
|
||||
status = true;
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Device " + device.getDeviceIdentifier() + " data has been deleted.");
|
||||
}
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
String msg = "Error occurred while deleting the device '" + device.getDeviceIdentifier() + "' data in "
|
||||
+ deviceDAODefinition.getDeviceTableName();
|
||||
log.error(msg, e);
|
||||
throw new DeviceTypeMgtPluginException(msg, e);
|
||||
} finally {
|
||||
DeviceTypeUtils.cleanupResources(stmt, null);
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
private String getDeviceTableColumnNames() {
|
||||
return StringUtils.join(deviceDAODefinition.getColumnNames(), ", ");
|
||||
}
|
||||
@ -239,5 +284,8 @@ public class DeviceTypePluginDAOImpl implements PluginDAO {
|
||||
selectDBQueryToGetAllDevice =
|
||||
"SELECT " + getDeviceTableColumnNames() + "," + deviceDAODefinition.getPrimaryKey() + " FROM "
|
||||
+ deviceDAODefinition.getDeviceTableName();
|
||||
|
||||
deleteDBQueryForDeleteDevice = "DELETE FROM " + deviceDAODefinition.getDeviceTableName() + " WHERE "
|
||||
+ deviceDAODefinition.getPrimaryKey() + " = ?";
|
||||
}
|
||||
}
|
||||
|
||||
@ -14,12 +14,30 @@
|
||||
* 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.extensions.device.type.template.dao;
|
||||
|
||||
import org.wso2.carbon.device.mgt.common.Device;
|
||||
import org.wso2.carbon.device.mgt.extensions.device.type.template.exception.DeviceTypeMgtPluginException;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface PluginDAO {
|
||||
@ -31,4 +49,6 @@ public interface PluginDAO {
|
||||
boolean updateDevice(Device device) throws DeviceTypeMgtPluginException;
|
||||
|
||||
List<Device> getAllDevices() throws DeviceTypeMgtPluginException;
|
||||
|
||||
boolean deleteDevice(Device device) throws DeviceTypeMgtPluginException;
|
||||
}
|
||||
|
||||
@ -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://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.dao;
|
||||
@ -31,7 +48,6 @@ import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@ -201,6 +217,27 @@ public class PropertyBasedPluginDAOImpl implements PluginDAO {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean deleteDevice(Device device) throws DeviceTypeMgtPluginException {
|
||||
Connection conn;
|
||||
PreparedStatement stmt = null;
|
||||
try {
|
||||
conn = deviceTypeDAOHandler.getConnection();
|
||||
stmt = conn.prepareStatement("DELETE FROM DM_DEVICE_PROPERTIES WHERE DEVICE_IDENTIFICATION = ?");
|
||||
stmt.setString(1, device.getDeviceIdentifier());
|
||||
stmt.executeUpdate();
|
||||
return true;
|
||||
} catch (SQLException e) {
|
||||
String msg = "Error occurred while deleting the device '" + device.getDeviceIdentifier() + "' data on"
|
||||
+ deviceType;
|
||||
log.error(msg, e);
|
||||
throw new DeviceTypeMgtPluginException(msg, e);
|
||||
} finally {
|
||||
DeviceTypeUtils.cleanupResources(stmt, null);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private String getPropertyValue(List<Device.Property> properties, String propertyName) {
|
||||
for (Device.Property property : properties) {
|
||||
if (property.getName() != null && property.getName().equals(propertyName)) {
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<artifactId>device-mgt</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -26,14 +26,14 @@
|
||||
|
||||
<div class="panel-body">
|
||||
<h3>About Entgra IoT Server</h3>
|
||||
<p>Entgra IoT Server 3.5.0 is a complete solution that enables device manufacturers and enterprises to
|
||||
<p>Entgra IoT Server 3.6.0 is a complete solution that enables device manufacturers and enterprises to
|
||||
connect and manage their devices, build apps, manage events, secure devices and data, and visualize
|
||||
sensor data in a scalable manner.</p>
|
||||
<p>It also offers a complete and secure Enterprise Mobility Management (EMM/MDM) solution that aims to
|
||||
address mobile computing challenges faced by enterprises today. Supporting iOS, Android, and Windows
|
||||
devices, it helps organizations deal with both Corporate Owned, Personally Enabled (COPE) and
|
||||
employee-owned devices with the Bring Your Own Device (BYOD) concept.</p>
|
||||
<p>Entgra IoT Server 3.5.0 comes with advanced analytics, enabling users to analyze speed, proximity, and
|
||||
<p>Entgra IoT Server 3.6.0 comes with advanced analytics, enabling users to analyze speed, proximity, and
|
||||
geo-fencing information of devices including details of those in motion and stationary state.</p>
|
||||
</p>
|
||||
<h2>Cookie Policy</h2>
|
||||
@ -45,12 +45,12 @@
|
||||
apps remember things about you. Other technologies, including Web storage and identifiers associated
|
||||
with your device, may be used for similar purposes. In this policy, we use the term “cookies” to
|
||||
discuss all of these technologies.</p>
|
||||
<h3>How does Entgra IoT Server 3.5.0 process cookies?</h3>
|
||||
<p>Entgra IoT Server 3.5.0 uses cookies to store and retrieve information on your browser. This
|
||||
<h3>How does Entgra IoT Server 3.6.0 process cookies?</h3>
|
||||
<p>Entgra IoT Server 3.6.0 uses cookies to store and retrieve information on your browser. This
|
||||
information is used to provide a better user experience. Some cookies serve the purpose of allowing a
|
||||
user to log in to the system, maintain sessions, and keep track of activities within the login
|
||||
session.</p>
|
||||
<p>Some cookies in Entgra IoT Server 3.5.0 are used to personally identify you. However, the cookie
|
||||
<p>Some cookies in Entgra IoT Server 3.6.0 are used to personally identify you. However, the cookie
|
||||
lifetime ends once your session ends, i.e., after you log-out, or after the session expiry time has
|
||||
elapsed.</p>
|
||||
<p>Some cookies are simply used to give you a more personalised web experience, and these cannot be used
|
||||
@ -58,42 +58,42 @@
|
||||
<p>This Cookie Policy is part of the IoT Server <a href="{{@app.context}}/privacy-policy">Privacy Policy.</a>
|
||||
</p>
|
||||
<h3>What does Entgra IoT Server 3.0.0 use cookies for?</h3>
|
||||
<p>Cookies are used for two purposes in Entgra IoT Server 3.5.0.</p>
|
||||
<p>Cookies are used for two purposes in Entgra IoT Server 3.6.0.</p>
|
||||
<ol>
|
||||
<li>To identify you and provide security</li>
|
||||
<li>To provide a satisfying user experience.</li>
|
||||
</ol>
|
||||
|
||||
<h4><u>Preferences</u></h4>
|
||||
<p>Entgra IoT Server 3.5.0 uses cookies to remember your settings and preferences and to auto-fill the
|
||||
<p>Entgra IoT Server 3.6.0 uses cookies to remember your settings and preferences and to auto-fill the
|
||||
fields to make your interactions with the site easier.</p>
|
||||
<p>These cookies can not be used to personally identify you.</p>
|
||||
|
||||
<h4><u>Security</u></h4>
|
||||
<ol>
|
||||
<li>Entgra IoT Server 3.5.0 uses selected cookies to identify and prevent security risks. For example,
|
||||
Entgra IoT Server 3.5.0 may use cookies to store your session information to prevent others from
|
||||
<li>Entgra IoT Server 3.6.0 uses selected cookies to identify and prevent security risks. For example,
|
||||
Entgra IoT Server 3.6.0 may use cookies to store your session information to prevent others from
|
||||
changing your password without your username and password.
|
||||
</li>
|
||||
<li>Entgra IoT Server 3.5.0 uses session cookie to maintain your active session.</li>
|
||||
<li>Entgra IoT Server 3.5.0 may use a temporary cookie when performing multi-factor authentication and
|
||||
<li>Entgra IoT Server 3.6.0 uses session cookie to maintain your active session.</li>
|
||||
<li>Entgra IoT Server 3.6.0 may use a temporary cookie when performing multi-factor authentication and
|
||||
federated authentication.
|
||||
</li>
|
||||
<li>Entgra IoT Server 3.5.0 may use permanent cookies to detect the devices you have logged in
|
||||
<li>Entgra IoT Server 3.6.0 may use permanent cookies to detect the devices you have logged in
|
||||
previously. This is to to calculate the <b>risk level</b> associated with your current login
|
||||
attempt. Using these cookies protects you and your account from possible attacks.
|
||||
</li>
|
||||
</ol>
|
||||
<h4><u>Performance</u></h4>
|
||||
<p>Entgra IoT Server 3.5.0 may use cookies to allow <b>Remember Me</b> functionalities.</p>
|
||||
<p>Entgra IoT Server 3.6.0 may use cookies to allow <b>Remember Me</b> functionalities.</p>
|
||||
<h4><u>Analytics</u></h4>
|
||||
<p>Entgra IoT Server 3.5.0 as a product does not use cookies for analytical purposes.</p>
|
||||
<p>Entgra IoT Server 3.6.0 as a product does not use cookies for analytical purposes.</p>
|
||||
<h4><u>Third party cookies</u></h4>
|
||||
<p>Using Entgra IoT Server 3.5.0 may cause third-party cookie to be set in your browser. Entgra IoT Server
|
||||
3.5.0 has no control over how any of them operate. The third-party cookies that maybe set
|
||||
<p>Using Entgra IoT Server 3.6.0 may cause third-party cookie to be set in your browser. Entgra IoT Server
|
||||
3.6.0 has no control over how any of them operate. The third-party cookies that maybe set
|
||||
include:</p>
|
||||
<ol>
|
||||
<li>Any social login sites. For example, third-party cookies may be set when Entgra IoT Server 3.5.0
|
||||
<li>Any social login sites. For example, third-party cookies may be set when Entgra IoT Server 3.6.0
|
||||
is configured to use “social” or “federated” login, and you opt to login with your “Social
|
||||
Account”.
|
||||
</li>
|
||||
@ -101,11 +101,11 @@
|
||||
</ol>
|
||||
<p>Entgra strongly advises you to refer the respective cookie policies of such sites carefully as Entgra has
|
||||
no knowledge or use on these cookies.</p>
|
||||
<h3>What type of cookies does Entgra IoT Server 3.5.0 use?</h3>
|
||||
<p>Entgra IoT Server 3.5.0 uses persistent cookies and session cookies. A persistent cookie helps Entgra IS
|
||||
3.5.0 to recognize you as an existing user so that it is easier to return to Entgra or interact with
|
||||
Entgra IS 3.5.0 without signing in again. After you sign in, a persistent cookie stays in your browser
|
||||
and will be read by Entgra IoT Server 3.5.0 when you return to Entgra IoT Server 3.5.0.</p>
|
||||
<h3>What type of cookies does Entgra IoT Server 3.6.0 use?</h3>
|
||||
<p>Entgra IoT Server 3.6.0 uses persistent cookies and session cookies. A persistent cookie helps Entgra IS
|
||||
3.6.0 to recognize you as an existing user so that it is easier to return to Entgra or interact with
|
||||
Entgra IS 3.6.0 without signing in again. After you sign in, a persistent cookie stays in your browser
|
||||
and will be read by Entgra IoT Server 3.6.0 when you return to Entgra IoT Server 3.6.0.</p>
|
||||
<p>A session cookie is a cookie that is erased when the user closes the Web browser. The session cookie
|
||||
is stored in temporarily and is not retained after the browser is closed. Session cookies do not
|
||||
collect information from the user’s computer.</p>
|
||||
@ -114,9 +114,9 @@
|
||||
for websites to set cookies, you may worsen your overall user experience since it will no longer be
|
||||
personalized to you. It may also stop you from saving customized settings like login information.
|
||||
Most likely, disabling cookies will make it unable for you to use authentication and authorization
|
||||
functionalities offered by Entgra IoT Server 3.5.0.</p>
|
||||
functionalities offered by Entgra IoT Server 3.6.0.</p>
|
||||
<p>If you have any questions or concerns regarding the use of cookies, please contact the entity or
|
||||
individuals (or their data protection officer, if applicable) running this Entgra IoT Server 3.5.0
|
||||
individuals (or their data protection officer, if applicable) running this Entgra IoT Server 3.6.0
|
||||
instance.</p>
|
||||
<h3>What are the cookies used?</h3>
|
||||
<table class="table table-striped table-bordered">
|
||||
@ -150,17 +150,17 @@
|
||||
</tbody>
|
||||
</table>
|
||||
<h3>Disclaimer</h3>
|
||||
<p>This cookie policy is only for illustrative purposes of the product Entgra IoT Server 3.5.0. The
|
||||
<p>This cookie policy is only for illustrative purposes of the product Entgra IoT Server 3.6.0. The
|
||||
content in the policy is technically correct at the time of the product shipment. The
|
||||
entity,organization or individual that runs this Entgra IoT Server 3.5.0 instance has full authority
|
||||
entity,organization or individual that runs this Entgra IoT Server 3.6.0 instance has full authority
|
||||
and responsibility with regard to the effective Cookie Policy. Entgra, its employees, partners, and
|
||||
affiliates do not have access to and do not require, store, process or control any of the data,
|
||||
including personal data contained in Entgra IoT Server 3.5.0. All data, including personal data is
|
||||
controlled and processed by the entity, organization or individual running Entgra IoT Server 3.5.0.
|
||||
including personal data contained in Entgra IoT Server 3.6.0. All data, including personal data is
|
||||
controlled and processed by the entity, organization or individual running Entgra IoT Server 3.6.0.
|
||||
Entgra, its employees partners and affiliates are not a data processor or a data controller within the
|
||||
meaning of any data privacy regulations. Entgra does not provide any warranties or undertake any
|
||||
responsibility or liability in connection with the lawfulness or the manner and purposes for which
|
||||
Entgra IoT Server 3.5.0 is used by such entities, organizations or persons.</p>
|
||||
Entgra IoT Server 3.6.0 is used by such entities, organizations or persons.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -36,18 +36,18 @@
|
||||
<p>Entgra IoT Server comes with advanced analytics, enabling users to analyze speed, proximity, and
|
||||
geo-fencing information of devices including details of those in motion and stationary state.</p>
|
||||
<h3>Privacy Policy</h3>
|
||||
<p>This policy describes how Entgra IoT Server 3.5.0 captures your personal information, the purposes of
|
||||
<p>This policy describes how Entgra IoT Server 3.6.0 captures your personal information, the purposes of
|
||||
collection, and information about the retention of your personal information.
|
||||
<p>Please note that this policy is for reference only, and is applicable for the software as a product.
|
||||
Entgra and its developers have no access to the information held within Entgra IoT Server
|
||||
3.5.0.Please see the Disclaimer section for more information. Entities, organisations or individuals
|
||||
controlling the use and administration of Entgra IoT Server 3.5.0 should create their own privacy
|
||||
3.6.0.Please see the Disclaimer section for more information. Entities, organisations or individuals
|
||||
controlling the use and administration of Entgra IoT Server 3.6.0 should create their own privacy
|
||||
policies setting out the manner in which data is controlled or processed by the respective entity,
|
||||
organisation or individual.
|
||||
<h3>What is personal information?</h3>
|
||||
<p>Entgra IoT Server 3.5.0 considers anything related to you and by which you may be identified as your
|
||||
<p>Entgra IoT Server 3.6.0 considers anything related to you and by which you may be identified as your
|
||||
personal information.</p>
|
||||
<p><b>Signing in to Entgra IoT Server 3.5.0</b></p>
|
||||
<p><b>Signing in to Entgra IoT Server 3.6.0</b></p>
|
||||
<ol>
|
||||
<li>Your user name (except in cases where the user name created by your employer is under
|
||||
contract)
|
||||
@ -55,7 +55,7 @@
|
||||
<li>IP address used to log in</li>
|
||||
<li>Email address</li>
|
||||
</ol>
|
||||
<p><b>Enrolling a device with Entgra IoT Server 3.5.0</b></p>
|
||||
<p><b>Enrolling a device with Entgra IoT Server 3.6.0</b></p>
|
||||
<ul>
|
||||
<li>Your device ID (e.g., phone or tablet), mobile number, IMEI number, and IMSI number</li>
|
||||
<li>Your device’s location</li>
|
||||
@ -64,7 +64,7 @@
|
||||
memory usage
|
||||
</li>
|
||||
</ul>
|
||||
<p>However, Entgra IoT Server 3.5.0 also collects the following information that is not considered
|
||||
<p>However, Entgra IoT Server 3.6.0 also collects the following information that is not considered
|
||||
personal information, but is used only for <b>statistical</b> purposes. The reason for this is that
|
||||
this information can not be used to track you.
|
||||
<ul>
|
||||
@ -74,17 +74,17 @@
|
||||
<li>Operating system and generic browser information</li>
|
||||
</ul>
|
||||
<h3>Collection of personal information</h3>
|
||||
<p>Entgra IoT Server 3.5.0 collects your information only to serve your access requirements. For example:
|
||||
<p>Entgra IoT Server 3.6.0 collects your information only to serve your access requirements. For example:
|
||||
<ul>
|
||||
<li>Entgra IoT Server 3.5.0 uses your IP address to detect any suspicious login attempts to your
|
||||
<li>Entgra IoT Server 3.6.0 uses your IP address to detect any suspicious login attempts to your
|
||||
account.
|
||||
<li>Entgra IoT Server 3.5.0 uses attributes like your first name, last name, etc., to provide a rich
|
||||
<li>Entgra IoT Server 3.6.0 uses attributes like your first name, last name, etc., to provide a rich
|
||||
and personalized user experience.
|
||||
<li>Entgra IoT Server 3.5.0 uses your security questions and answers only to allow account recovery.
|
||||
<li>Entgra IoT Server 3.6.0 uses your security questions and answers only to allow account recovery.
|
||||
</li>
|
||||
</ul>
|
||||
<h4><u>Tracking Technologies</u></h4>
|
||||
<p>Entgra IoT Server 3.5.0 collects your information by:</p>
|
||||
<p>Entgra IoT Server 3.6.0 collects your information by:</p>
|
||||
<ul>
|
||||
<li>Collecting information from the user profile page where you enter your personal data.</li>
|
||||
<li>Tracking your IP address with HTTP request, HTTP headers, and TCP/IP.</li>
|
||||
@ -95,15 +95,15 @@
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Use of personal information</h3>
|
||||
<p>Entgra IoT Server 3.5.0 will only use your personal information for the purposes for which it was
|
||||
<p>Entgra IoT Server 3.6.0 will only use your personal information for the purposes for which it was
|
||||
collected (or for a use identified as consistent with that purpose).</p>
|
||||
<p>Entgra IoT Server 3.5.0 uses your personal information only for the following purposes.</p>
|
||||
<p>Entgra IoT Server 3.6.0 uses your personal information only for the following purposes.</p>
|
||||
<ul>
|
||||
<li>To provide you with a personalized user experience. Entgra IoT Server 3.5.0 uses your name and
|
||||
<li>To provide you with a personalized user experience. Entgra IoT Server 3.6.0 uses your name and
|
||||
uploaded profile pictures for this purpose.
|
||||
</li>
|
||||
<li>To protect your account from unauthorized access or potential hacking attempts. Entgra IoT Server
|
||||
3.5.0 uses HTTP or TCP/IP Headers for this purpose.
|
||||
3.6.0 uses HTTP or TCP/IP Headers for this purpose.
|
||||
</li>
|
||||
<li>
|
||||
<p>This includes:</p>
|
||||
@ -114,10 +114,10 @@
|
||||
</ol>
|
||||
</li>
|
||||
<li>Derive statistical data for analytical purposes on system performance improvements. Entgra IoT
|
||||
Server 3.5.0 will not keep any personal information after statistical calculations. Therefore,
|
||||
Server 3.6.0 will not keep any personal information after statistical calculations. Therefore,
|
||||
the statistical report has no means of identifying an individual person.
|
||||
</li>
|
||||
<li>Entgra IoT Server 3.5.0 may use:</li>
|
||||
<li>Entgra IoT Server 3.6.0 may use:</li>
|
||||
<li>
|
||||
<ol>
|
||||
<li>IP Address to derive geographic information</li>
|
||||
@ -126,28 +126,28 @@
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Disclosure of personal information</h3>
|
||||
<p>Entgra IoT Server 3.5.0 only discloses personal information to the relevant applications (also known as
|
||||
“Service Providers”) that are registered with Entgra IoT Server 3.5.0. These applications are
|
||||
<p>Entgra IoT Server 3.6.0 only discloses personal information to the relevant applications (also known as
|
||||
“Service Providers”) that are registered with Entgra IoT Server 3.6.0. These applications are
|
||||
registered by the identity administrator of your entity or organization. Personal information is
|
||||
disclosed only for the purposes for which it was collected (or for a use identified as consistent
|
||||
with that purpose) as controlled by such Service Providers, unless you have consented otherwise or
|
||||
where it is required by law.</p>
|
||||
<h4>Legal process</h4>
|
||||
<p>Please note that the organisation, entity or individual running Entgra IoT Server 3.5.0 may be
|
||||
<p>Please note that the organisation, entity or individual running Entgra IoT Server 3.6.0 may be
|
||||
compelled to disclose your personal information with or without your consent when it is required by
|
||||
law following due and lawful process.</p>
|
||||
<h3>Storage of personal information</h3>
|
||||
<h4><u>Where your personal information is stored</u></h4>
|
||||
<p>Entgra IoT Server 3.5.0 stores your personal information in secured databases. Entgra IoT Server 3.5.0
|
||||
<p>Entgra IoT Server 3.6.0 stores your personal information in secured databases. Entgra IoT Server 3.6.0
|
||||
exercises proper industry accepted security measures to protect the database where your personal
|
||||
information is held.Entgra IoT Server 3.5.0 as a product does not transfer or share your data with any
|
||||
information is held.Entgra IoT Server 3.6.0 as a product does not transfer or share your data with any
|
||||
third parties or locations.</p>
|
||||
<p>Entgra IoT Server 3.5.0 may use encryption to keep your personal data with an added level of
|
||||
<p>Entgra IoT Server 3.6.0 may use encryption to keep your personal data with an added level of
|
||||
security.</p>
|
||||
<h4><u>How long your personal information is retained</u></h4>
|
||||
<p>Entgra IoT Server 3.5.0 retains your personal data as long as you are an active user of our system. You
|
||||
<p>Entgra IoT Server 3.6.0 retains your personal data as long as you are an active user of our system. You
|
||||
can update your personal data at any time using the given self-care user portals.</p>
|
||||
<p>Entgra IoT Server 3.5.0 may keep hashed secrets to provide you with an added level of security. This
|
||||
<p>Entgra IoT Server 3.6.0 may keep hashed secrets to provide you with an added level of security. This
|
||||
includes:</p>
|
||||
<ul>
|
||||
<li>Current password</li>
|
||||
@ -157,15 +157,15 @@
|
||||
<p>You can request the administrator to delete your account. The administrator is the administrator of
|
||||
the tenant you are registered under, or the super-administrator if you do not use the tenant
|
||||
feature.</p>
|
||||
<p>Additionally, you can request to anonymize all traces of your activities that Entgra IoT Server 3.5.0
|
||||
<p>Additionally, you can request to anonymize all traces of your activities that Entgra IoT Server 3.6.0
|
||||
may have retained in logs, databases or analytical storage.</p>
|
||||
<h3>More information</h3>
|
||||
<h4><u>Changes to this policy</u></h4>
|
||||
<p>Upgraded versions of Entgra IoT Server 3.5.0 may contain changes to this policy. Revisions to this
|
||||
<p>Upgraded versions of Entgra IoT Server 3.6.0 may contain changes to this policy. Revisions to this
|
||||
policy will be packaged within such upgrades and would only apply to users who choose to use upgraded
|
||||
versions.</p>
|
||||
<h4><u>Your choices</u></h4>
|
||||
<p>If you are already have an user account within Entgra IoT Server 3.5.0 ; you have the right to
|
||||
<p>If you are already have an user account within Entgra IoT Server 3.6.0 ; you have the right to
|
||||
deactivate your account if you find that this privacy policy is unacceptable to you.</p>
|
||||
<p>If you do not have an account and you do not agree with our privacy policy, you can chose not to
|
||||
create one.</p>
|
||||
@ -174,19 +174,19 @@
|
||||
<p><a href="https://entgra.io/contact/">https://entgra.io.com/contact/</a></p>
|
||||
<h3>Disclaimer</h3>
|
||||
<p>Entgra, its employees, partners, and affiliates do not have access to and do not require, store,
|
||||
process or control any of the data, including personal data contained in Entgra IoT Server 3.5.0. All
|
||||
process or control any of the data, including personal data contained in Entgra IoT Server 3.6.0. All
|
||||
data, including personal data is controlled and processed by the entity or individual running Entgra
|
||||
IoT Server 3.5.0. Entgra, its employees partners and affiliates are not a data processor or a data
|
||||
IoT Server 3.6.0. Entgra, its employees partners and affiliates are not a data processor or a data
|
||||
controller within the meaning of any data privacy regulations. Entgra does not provide any warranties
|
||||
or undertake any responsibility or liability in connection with the lawfulness or the manner and
|
||||
purposes for which Entgra IoT Server 3.5.0 is used by such entities or persons.</p>
|
||||
purposes for which Entgra IoT Server 3.6.0 is used by such entities or persons.</p>
|
||||
<p>This privacy policy is for the informational purposes of the entity or persons running Entgra IoT
|
||||
Server 3.5.0 and sets out the processes and functionality contained within Entgra IoT Server 3.5.0
|
||||
Server 3.6.0 and sets out the processes and functionality contained within Entgra IoT Server 3.6.0
|
||||
regarding personal data protection. It is the responsibility of entities and persons running Entgra IoT
|
||||
Server 3.5.0 to create and administer its own rules and processes governing users’ personal data,
|
||||
Server 3.6.0 to create and administer its own rules and processes governing users’ personal data,
|
||||
Please note that the creation of such rules and processes may change the use, storage and disclosure
|
||||
policies contained herein. Therefore users should consult the entity or persons running Entgra IoT
|
||||
Server 3.5.0 for its own privacy policy for details governing users’ personal data.</p>
|
||||
Server 3.6.0 for its own privacy policy for details governing users’ personal data.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -17,8 +17,8 @@
|
||||
}}
|
||||
{{#zone "footer"}}
|
||||
<p>
|
||||
<span class="hidden-xs">Entgra IoT Server{{#unless isCloud}} 3.5.0{{/unless}}</span>
|
||||
<span class="visible-xs-inline">Entgra IoT Server{{#unless isCloud}} 3.5.0{{/unless}}</span> | © <script>document.write(new Date().getFullYear());</script>,
|
||||
<span class="hidden-xs">Entgra IoT Server{{#unless isCloud}} 3.6.0{{/unless}}</span>
|
||||
<span class="visible-xs-inline">Entgra IoT Server{{#unless isCloud}} 3.6.0{{/unless}}</span> | © <script>document.write(new Date().getFullYear());</script>,
|
||||
<a href="https://www.entgra.io/" target="_blank">Entgra</a>. All Rights Reserved.
|
||||
</p>
|
||||
{{/zone}}
|
||||
@ -17,8 +17,8 @@
|
||||
}}
|
||||
{{#zone "footer"}}
|
||||
<p>
|
||||
<span class="hidden-xs">Entgra IoT Server 3.5.0</span>
|
||||
<span class="visible-xs-inline">Entgra IoT Server 3.5.0</span> | © <script>document.write(new Date().getFullYear());</script>,
|
||||
<span class="hidden-xs">Entgra IoT Server 3.6.0</span>
|
||||
<span class="visible-xs-inline">Entgra IoT Server 3.6.0</span> | © <script>document.write(new Date().getFullYear());</script>,
|
||||
<a href="http://wso2.com/" target="_blank"><i class="icon fw fw-wso2"></i> Inc</a>. All Rights Reserved.
|
||||
</p>
|
||||
{{/zone}}
|
||||
@ -23,7 +23,7 @@
|
||||
<parent>
|
||||
<artifactId>device-mgt</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-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.7-SNAPSHOT</version>
|
||||
<version>3.2.9-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.7-SNAPSHOT</version>
|
||||
<version>3.2.9-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.7-SNAPSHOT</version>
|
||||
<version>3.2.9-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.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.device.mgt.oauth.extensions</artifactId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-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.7-SNAPSHOT</version>
|
||||
<version>3.2.9-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.7-SNAPSHOT</version>
|
||||
<version>3.2.9-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.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -22,14 +22,14 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>policy-mgt</artifactId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>org.wso2.carbon.complex.policy.decision.point</artifactId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<packaging>bundle</packaging>
|
||||
<name>WSO2 Carbon - Policy Decision Point</name>
|
||||
<description>WSO2 Carbon - Policy Decision Point</description>
|
||||
|
||||
@ -3,14 +3,14 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>policy-mgt</artifactId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>org.wso2.carbon.policy.decision.point</artifactId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<packaging>bundle</packaging>
|
||||
<name>WSO2 Carbon - Policy Decision Point</name>
|
||||
<description>WSO2 Carbon - Policy Decision Point</description>
|
||||
|
||||
@ -43,9 +43,11 @@ public class PolicyEvaluationServiceImpl implements PolicyEvaluationPoint {
|
||||
@Override
|
||||
public List<ProfileFeature> getEffectiveFeatures(DeviceIdentifier deviceIdentifier)
|
||||
throws PolicyEvaluationException {
|
||||
|
||||
List<ProfileFeature> effectiveFeatures = evaluation.getEffectivePolicy(deviceIdentifier).
|
||||
getProfile().getProfileFeaturesList();
|
||||
List<ProfileFeature> effectiveFeatures = null;
|
||||
Policy effectivePolicy = evaluation.getEffectivePolicy(deviceIdentifier);
|
||||
if (effectivePolicy != null) {
|
||||
effectiveFeatures = effectivePolicy.getProfile().getProfileFeaturesList();
|
||||
}
|
||||
return effectiveFeatures;
|
||||
}
|
||||
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>policy-mgt</artifactId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>org.wso2.carbon.policy.information.point</artifactId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<packaging>bundle</packaging>
|
||||
<name>WSO2 Carbon - Policy Information Point</name>
|
||||
<description>WSO2 Carbon - Policy Information Point</description>
|
||||
|
||||
@ -22,14 +22,14 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>policy-mgt</artifactId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>org.wso2.carbon.policy.mgt.common</artifactId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<packaging>bundle</packaging>
|
||||
<name>WSO2 Carbon - Policy Management Common</name>
|
||||
<description>WSO2 Carbon - Policy Management Common</description>
|
||||
|
||||
@ -22,14 +22,14 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>policy-mgt</artifactId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>org.wso2.carbon.policy.mgt.core</artifactId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<packaging>bundle</packaging>
|
||||
<name>WSO2 Carbon - Policy Management Core</name>
|
||||
<description>WSO2 Carbon - Policy Management Core</description>
|
||||
|
||||
@ -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://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.policy.mgt.core.mock;
|
||||
|
||||
@ -61,6 +78,11 @@ public class TypeXDeviceManager implements DeviceManager {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean deleteDevice(DeviceIdentifier deviceId, Device device) throws DeviceManagementException {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnrolled(DeviceIdentifier deviceId) throws DeviceManagementException {
|
||||
return false;
|
||||
|
||||
@ -23,13 +23,13 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>carbon-devicemgt</artifactId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>policy-mgt</artifactId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<packaging>pom</packaging>
|
||||
<name>WSO2 Carbon - Policy Management Component</name>
|
||||
<url>http://wso2.org</url>
|
||||
|
||||
@ -21,7 +21,7 @@
|
||||
<parent>
|
||||
<artifactId>carbon-devicemgt</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
@ -23,13 +23,13 @@
|
||||
<parent>
|
||||
<artifactId>ui-request-interceptor</artifactId>
|
||||
<groupId>io.entgra.devicemgt</groupId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>io.entgra.ui.request.interceptor</artifactId>
|
||||
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<packaging>war</packaging>
|
||||
<name>Entgra - Request Handling Proxy Servlet</name>
|
||||
<description>Proxy Service for Request Handling in Entgra EMM/IOT Server.</description>
|
||||
|
||||
@ -23,7 +23,7 @@
|
||||
<parent>
|
||||
<artifactId>carbon-devicemgt</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
@ -21,14 +21,14 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>webapp-authenticator-framework</artifactId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>org.wso2.carbon.webapp.authenticator.framework</artifactId>
|
||||
<version>3.2.7-SNAPSHOT</version>
|
||||
<version>3.2.9-SNAPSHOT</version>
|
||||
<packaging>bundle</packaging>
|
||||
<name>WSO2 Carbon - Web Application Authenticator Framework Bundle</name>
|
||||
<description>WSO2 Carbon - Web Application Authenticator Framework Bundle</description>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user