forked from community/device-mgt-core
Merge pull request #1033 from sinthuja/origin-wso2-master
Removing the analytics.dashboard component as it's no longer usedrevert-70aa11f8
commit
3697803e17
@ -1,111 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
||||||
<parent>
|
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
|
||||||
<artifactId>device-mgt</artifactId>
|
|
||||||
<version>3.0.136-SNAPSHOT</version>
|
|
||||||
<relativePath>../pom.xml</relativePath>
|
|
||||||
</parent>
|
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
|
||||||
<artifactId>org.wso2.carbon.device.mgt.analytics.dashboard</artifactId>
|
|
||||||
<packaging>bundle</packaging>
|
|
||||||
<name>WSO2 Carbon - Device Management Dashboard Analytics</name>
|
|
||||||
<description>WSO2 Carbon - Device Management Dashboard Analytics</description>
|
|
||||||
<url>http://wso2.org</url>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.eclipse.osgi</groupId>
|
|
||||||
<artifactId>org.eclipse.osgi.services</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.wso2.carbon</groupId>
|
|
||||||
<artifactId>org.wso2.carbon.logging</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
|
||||||
<artifactId>org.wso2.carbon.device.mgt.common</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
|
||||||
<artifactId>org.wso2.carbon.device.mgt.core</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.wso2.carbon</groupId>
|
|
||||||
<artifactId>org.wso2.carbon.ndatasource.core</artifactId>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
<build>
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.felix</groupId>
|
|
||||||
<artifactId>maven-scr-plugin</artifactId>
|
|
||||||
</plugin>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.felix</groupId>
|
|
||||||
<artifactId>maven-bundle-plugin</artifactId>
|
|
||||||
<version>1.4.0</version>
|
|
||||||
<extensions>true</extensions>
|
|
||||||
<configuration>
|
|
||||||
<instructions>
|
|
||||||
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
|
|
||||||
<Bundle-Name>${project.artifactId}</Bundle-Name>
|
|
||||||
<Bundle-Version>${carbon.device.mgt.version}</Bundle-Version>
|
|
||||||
<Bundle-Description>Device Management Dashboard Analytics Bundle</Bundle-Description>
|
|
||||||
<Private-Package>
|
|
||||||
org.wso2.carbon.device.mgt.analytics.dashboard.dao,
|
|
||||||
org.wso2.carbon.device.mgt.analytics.dashboard.dao.impl,
|
|
||||||
org.wso2.carbon.device.mgt.analytics.dashboard.impl,
|
|
||||||
org.wso2.carbon.device.mgt.analytics.dashboard.internal
|
|
||||||
</Private-Package>
|
|
||||||
<Export-Package>
|
|
||||||
org.wso2.carbon.device.mgt.analytics.dashboard,
|
|
||||||
org.wso2.carbon.device.mgt.analytics.dashboard.util,
|
|
||||||
org.wso2.carbon.device.mgt.analytics.dashboard.exception,
|
|
||||||
org.wso2.carbon.device.mgt.analytics.dashboard.bean
|
|
||||||
</Export-Package>
|
|
||||||
<Import-Package>
|
|
||||||
org.osgi.framework,
|
|
||||||
org.osgi.service.component,
|
|
||||||
org.apache.commons.logging.*,
|
|
||||||
javax.sql,
|
|
||||||
org.wso2.carbon.context,
|
|
||||||
org.wso2.carbon.device.mgt.common.*,
|
|
||||||
org.wso2.carbon.device.mgt.core.*,
|
|
||||||
org.wso2.carbon.ndatasource.core.*;
|
|
||||||
</Import-Package>
|
|
||||||
</instructions>
|
|
||||||
</configuration>
|
|
||||||
</plugin>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.jacoco</groupId>
|
|
||||||
<artifactId>jacoco-maven-plugin</artifactId>
|
|
||||||
<configuration>
|
|
||||||
<destFile>${basedir}/target/coverage-reports/jacoco-unit.exec</destFile>
|
|
||||||
</configuration>
|
|
||||||
<executions>
|
|
||||||
<execution>
|
|
||||||
<id>jacoco-initialize</id>
|
|
||||||
<goals>
|
|
||||||
<goal>prepare-agent</goal>
|
|
||||||
</goals>
|
|
||||||
</execution>
|
|
||||||
<execution>
|
|
||||||
<id>jacoco-site</id>
|
|
||||||
<phase>test</phase>
|
|
||||||
<goals>
|
|
||||||
<goal>report</goal>
|
|
||||||
</goals>
|
|
||||||
<configuration>
|
|
||||||
<dataFile>${basedir}/target/coverage-reports/jacoco-unit.exec</dataFile>
|
|
||||||
<outputDirectory>${basedir}/target/coverage-reports/site</outputDirectory>
|
|
||||||
</configuration>
|
|
||||||
</execution>
|
|
||||||
</executions>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
</build>
|
|
||||||
|
|
||||||
</project>
|
|
@ -1,261 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.analytics.dashboard;
|
|
||||||
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.bean.BasicFilterSet;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.bean.ExtendedFilterSet;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.bean.DeviceCountByGroup;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.bean.DeviceWithDetails;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.exception.*;
|
|
||||||
import org.wso2.carbon.device.mgt.common.PaginationResult;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This interface exposes useful service layer functions to retrieve data
|
|
||||||
* required by high level dashboard APIs.
|
|
||||||
*/
|
|
||||||
public interface GadgetDataService {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method is used to get a count of devices based on a defined filter set.
|
|
||||||
* @param extendedFilterSet An abstract representation of possible filtering options.
|
|
||||||
* if this value is simply "null" or no values are set for the defined filtering
|
|
||||||
* options, this method would return total device count in the system
|
|
||||||
* wrapped by the defined return format.
|
|
||||||
* @return An object of type DeviceCountByGroup.
|
|
||||||
* @throws InvalidPotentialVulnerabilityValueException This can occur if potentialVulnerability
|
|
||||||
* value of extendedFilterSet is set with some
|
|
||||||
* value other than "NON_COMPLIANT" or "UNMONITORED".
|
|
||||||
* @throws DataAccessLayerException This can occur due to errors connecting to database,
|
|
||||||
* executing SQL query and retrieving data.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
DeviceCountByGroup getDeviceCount(ExtendedFilterSet extendedFilterSet, String userName)
|
|
||||||
throws InvalidPotentialVulnerabilityValueException, DataAccessLayerException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method is used to get a count of devices non-compliant upon on a particular feature
|
|
||||||
* and a defined filter set.
|
|
||||||
* @param featureCode Code name of the non-compliant feature.
|
|
||||||
* @param basicFilterSet An abstract representation of possible filtering options.
|
|
||||||
* if this value is simply "null" or no values are set for the defined filtering
|
|
||||||
* options, this method would return total non-compliant device count in the system
|
|
||||||
* for the given feature-code, wrapped by the defined return format.
|
|
||||||
* @return An object of type DeviceCountByGroup.
|
|
||||||
* @throws InvalidFeatureCodeValueException This can occur if featureCode is set to null or empty.
|
|
||||||
* @throws DataAccessLayerException This can occur due to errors connecting to database,
|
|
||||||
* executing SQL query and retrieving data.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
DeviceCountByGroup getFeatureNonCompliantDeviceCount(String featureCode, BasicFilterSet basicFilterSet, String userName)
|
|
||||||
throws InvalidFeatureCodeValueException, DataAccessLayerException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method is used to get total count of devices currently enrolled under a particular tenant.
|
|
||||||
* @return An object of type DeviceCountByGroup.
|
|
||||||
* @throws DataAccessLayerException This can occur due to errors connecting to database,
|
|
||||||
* executing SQL query and retrieving data.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
DeviceCountByGroup getTotalDeviceCount(String userName) throws DataAccessLayerException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method is used to get device counts classified by connectivity statuses.
|
|
||||||
* @return A list of objects of type DeviceCountByGroup.
|
|
||||||
* @throws DataAccessLayerException This can occur due to errors connecting to database,
|
|
||||||
* executing SQL query and retrieving data.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
List<DeviceCountByGroup> getDeviceCountsByConnectivityStatuses(String userName) throws DataAccessLayerException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method is used to get device counts classified by potential vulnerabilities.
|
|
||||||
* @return A list of objects of type DeviceCountByGroup.
|
|
||||||
* @throws DataAccessLayerException This can occur due to errors connecting to database,
|
|
||||||
* executing SQL query and retrieving data.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
List<DeviceCountByGroup> getDeviceCountsByPotentialVulnerabilities(String userName) throws DataAccessLayerException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method is used to get non-compliant device counts classified by individual features.
|
|
||||||
* @param startIndex Starting index of the data set to be retrieved.
|
|
||||||
* @param resultCount Total count of the result set retrieved.
|
|
||||||
* @return An object of type PaginationResult.
|
|
||||||
* @throws InvalidStartIndexValueException This can occur if startIndex value is lesser than its minimum (0).
|
|
||||||
* @throws InvalidResultCountValueException This can occur if resultCount value is lesser than its minimum (5).
|
|
||||||
* @throws DataAccessLayerException This can occur due to errors connecting to database,
|
|
||||||
* executing SQL query and retrieving data.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
PaginationResult getNonCompliantDeviceCountsByFeatures(int startIndex, int resultCount, String userName) throws
|
|
||||||
InvalidStartIndexValueException, InvalidResultCountValueException, DataAccessLayerException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method is used to get device counts classified by platforms.
|
|
||||||
* @param extendedFilterSet An abstract representation of possible filtering options.
|
|
||||||
* if this value is simply "null" or no values are set for the defined filtering
|
|
||||||
* options, this method would return total device counts per each platform in
|
|
||||||
* the system, wrapped by the defined return format.
|
|
||||||
* @return An object of type DeviceCountByGroup.
|
|
||||||
* @throws InvalidPotentialVulnerabilityValueException This can occur if potentialVulnerability
|
|
||||||
* value of extendedFilterSet is set with some
|
|
||||||
* value other than "NON_COMPLIANT" or "UNMONITORED".
|
|
||||||
* @throws DataAccessLayerException This can occur due to errors connecting to database,
|
|
||||||
* executing SQL query and retrieving data.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
List<DeviceCountByGroup> getDeviceCountsByPlatforms(ExtendedFilterSet extendedFilterSet, String userName)
|
|
||||||
throws InvalidPotentialVulnerabilityValueException, DataAccessLayerException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method is used to get device counts non-compliant upon a particular feature classified by platforms.
|
|
||||||
* @param featureCode Code name of the non-compliant feature.
|
|
||||||
* @param basicFilterSet An abstract representation of possible filtering options.
|
|
||||||
* if this value is simply "null" or no values are set for the defined filtering
|
|
||||||
* options, this method would return total non-compliant device counts per each platform
|
|
||||||
* in the system, wrapped by the defined return format.
|
|
||||||
* @return A list of objects of type DeviceCountByGroup.
|
|
||||||
* @throws InvalidFeatureCodeValueException This can occur if featureCode is set to null or empty.
|
|
||||||
* @throws DataAccessLayerException This can occur due to errors connecting to database,
|
|
||||||
* executing SQL query and retrieving data.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
List<DeviceCountByGroup> getFeatureNonCompliantDeviceCountsByPlatforms(String featureCode,
|
|
||||||
BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException,
|
|
||||||
DataAccessLayerException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method is used to get device counts classified by ownership types.
|
|
||||||
* @param extendedFilterSet An abstract representation of possible filtering options.
|
|
||||||
* if this value is simply "null" or no values are set for the defined filtering
|
|
||||||
* options, this method would return total device counts per each ownership
|
|
||||||
* type in the system, wrapped by the defined return format.
|
|
||||||
* @return A list of objects of type DeviceCountByGroup.
|
|
||||||
* @throws InvalidPotentialVulnerabilityValueException This can occur if potentialVulnerability
|
|
||||||
* value of extendedFilterSet is set with some
|
|
||||||
* value other than "NON_COMPLIANT" or "UNMONITORED".
|
|
||||||
* @throws DataAccessLayerException This can occur due to errors connecting to database,
|
|
||||||
* executing SQL query and retrieving data.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
List<DeviceCountByGroup> getDeviceCountsByOwnershipTypes(ExtendedFilterSet extendedFilterSet, String userName)
|
|
||||||
throws InvalidPotentialVulnerabilityValueException, DataAccessLayerException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method is used to get device counts non-compliant upon a particular feature
|
|
||||||
* classified by ownership types.
|
|
||||||
* @param featureCode Code name of the non-compliant feature.
|
|
||||||
* @param basicFilterSet An abstract representation of possible filtering options.
|
|
||||||
* if this value is simply "null" or no values are set for the defined filtering
|
|
||||||
* options, this method would return total non-compliant device counts per each
|
|
||||||
* ownership type in the system, wrapped by the defined return format.
|
|
||||||
* @return A list of objects of type DeviceCountByGroup.
|
|
||||||
* @throws InvalidFeatureCodeValueException This can occur if featureCode is set to null or empty.
|
|
||||||
* @throws DataAccessLayerException This can occur due to errors connecting to database,
|
|
||||||
* executing SQL query and retrieving data.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
List<DeviceCountByGroup> getFeatureNonCompliantDeviceCountsByOwnershipTypes(String featureCode,
|
|
||||||
BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException,
|
|
||||||
DataAccessLayerException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method is used to get a paginated list of devices with details, based on a defined filter set.
|
|
||||||
* @param extendedFilterSet An abstract representation of possible filtering options.
|
|
||||||
* if this value is simply "null" or no values are set for the defined
|
|
||||||
* filtering options, this method would return a paginated device list in the
|
|
||||||
* system specified by result count, starting from specified start index, and
|
|
||||||
* wrapped by the defined return format.
|
|
||||||
* @param startIndex Starting index of the data set to be retrieved.
|
|
||||||
* @param resultCount Total count of the result set retrieved.
|
|
||||||
* @return An object of type PaginationResult.
|
|
||||||
* @throws InvalidPotentialVulnerabilityValueException This can occur if potentialVulnerability
|
|
||||||
* value of extendedFilterSet is set with some
|
|
||||||
* value other than "NON_COMPLIANT" or "UNMONITORED".
|
|
||||||
* @throws DataAccessLayerException This can occur due to errors connecting to database,
|
|
||||||
* executing SQL query and retrieving data.
|
|
||||||
* @throws InvalidStartIndexValueException This can occur if startIndex value is lesser than its minimum (0).
|
|
||||||
* @throws InvalidResultCountValueException This can occur if resultCount value is lesser than its minimum (5).
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
PaginationResult getDevicesWithDetails(ExtendedFilterSet extendedFilterSet, int startIndex, int resultCount, String userName)
|
|
||||||
throws InvalidPotentialVulnerabilityValueException, DataAccessLayerException,
|
|
||||||
InvalidStartIndexValueException, InvalidResultCountValueException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method is used to get a paginated list of non-compliant devices with details,
|
|
||||||
* upon a particular feature.
|
|
||||||
* @param featureCode Code name of the non-compliant feature.
|
|
||||||
* @param basicFilterSet An abstract representation of possible filtering options.
|
|
||||||
* if this value is simply "null" or no values are set for the defined filtering
|
|
||||||
* options, this method would return a paginated device list in the system,
|
|
||||||
* non-compliant by specified feature-code, result count, starting from specified
|
|
||||||
* start index, and wrapped by the defined return format.
|
|
||||||
* @param startIndex Starting index of the data set to be retrieved.
|
|
||||||
* @param resultCount Total count of the result set retrieved.
|
|
||||||
* @return An object of type PaginationResult.
|
|
||||||
* @throws InvalidFeatureCodeValueException This can occur if featureCode is set to null or empty.
|
|
||||||
* @throws DataAccessLayerException This can occur due to errors connecting to database,
|
|
||||||
* executing SQL query and retrieving data.
|
|
||||||
* @throws InvalidStartIndexValueException This can occur if startIndex value is lesser than its minimum (0).
|
|
||||||
* @throws InvalidResultCountValueException This can occur if resultCount value is lesser than its minimum (5).
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
PaginationResult getFeatureNonCompliantDevicesWithDetails(String featureCode, BasicFilterSet basicFilterSet,
|
|
||||||
int startIndex, int resultCount, String userName) throws InvalidFeatureCodeValueException,
|
|
||||||
DataAccessLayerException, InvalidStartIndexValueException,
|
|
||||||
InvalidResultCountValueException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method is used to get a list of devices with details, based on a defined filter set.
|
|
||||||
* @param extendedFilterSet An abstract representation of possible filtering options.
|
|
||||||
* if this value is simply "null" or no values are set for the defined filtering
|
|
||||||
* options, this method would return total device list in the system
|
|
||||||
* wrapped by the defined return format.
|
|
||||||
* @return A list of objects of type DeviceWithDetails.
|
|
||||||
* @throws InvalidPotentialVulnerabilityValueException This can occur if potentialVulnerability
|
|
||||||
* value of extendedFilterSet is set with some
|
|
||||||
* value other than "NON_COMPLIANT" or "UNMONITORED".
|
|
||||||
* @throws DataAccessLayerException This can occur due to errors connecting to database,
|
|
||||||
* executing SQL query and retrieving data.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
List<DeviceWithDetails> getDevicesWithDetails(ExtendedFilterSet extendedFilterSet, String userName)
|
|
||||||
throws InvalidPotentialVulnerabilityValueException, DataAccessLayerException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method is used to get a list of non-compliant devices with details, upon a particular feature.
|
|
||||||
* @param featureCode Code name of the non-compliant feature.
|
|
||||||
* @param basicFilterSet An abstract representation of possible filtering options.
|
|
||||||
* if this value is simply "null" or no values are set for the defined filtering
|
|
||||||
* options, this method would return total set of non-compliant devices in the
|
|
||||||
* system upon given feature-code, wrapped by the defined return format.
|
|
||||||
* @return A list of objects of type DeviceWithDetails.
|
|
||||||
* @throws InvalidFeatureCodeValueException This can occur if featureCode is set to null or empty.
|
|
||||||
* @throws DataAccessLayerException This can occur due to errors connecting to database,
|
|
||||||
* executing SQL query and retrieving data.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
List<DeviceWithDetails> getFeatureNonCompliantDevicesWithDetails(String featureCode,
|
|
||||||
BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException,
|
|
||||||
DataAccessLayerException;
|
|
||||||
|
|
||||||
}
|
|
@ -1,53 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.analytics.dashboard.bean;
|
|
||||||
|
|
||||||
public class BasicFilterSet {
|
|
||||||
|
|
||||||
private String connectivityStatus;
|
|
||||||
private String platform;
|
|
||||||
private String ownership;
|
|
||||||
|
|
||||||
public String getConnectivityStatus() {
|
|
||||||
return connectivityStatus;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setConnectivityStatus(String connectivityStatus) {
|
|
||||||
this.connectivityStatus = connectivityStatus;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getPlatform() {
|
|
||||||
return platform;
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public void setPlatform(String platform) {
|
|
||||||
this.platform = platform;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getOwnership() {
|
|
||||||
return ownership;
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public void setOwnership(String ownership) {
|
|
||||||
this.ownership = ownership;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,53 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.analytics.dashboard.bean;
|
|
||||||
|
|
||||||
public class DeviceCountByGroup {
|
|
||||||
|
|
||||||
private String group;
|
|
||||||
private String displayNameForGroup;
|
|
||||||
private int deviceCount;
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public String getGroup() {
|
|
||||||
return group;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setGroup(String group) {
|
|
||||||
this.group = group;
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public String getDisplayNameForGroup() {
|
|
||||||
return displayNameForGroup;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDisplayNameForGroup(String displayNameForGroup) {
|
|
||||||
this.displayNameForGroup = displayNameForGroup;
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public int getDeviceCount() {
|
|
||||||
return deviceCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDeviceCount(int deviceCount) {
|
|
||||||
this.deviceCount = deviceCount;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,74 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.analytics.dashboard.bean;
|
|
||||||
|
|
||||||
public class DeviceWithDetails {
|
|
||||||
|
|
||||||
private int deviceId;
|
|
||||||
private String deviceIdentification;
|
|
||||||
private String platform;
|
|
||||||
private String ownershipType;
|
|
||||||
private String connectivityStatus;
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public int getDeviceId() {
|
|
||||||
return deviceId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDeviceId(int deviceId) {
|
|
||||||
this.deviceId = deviceId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public String getDeviceIdentification() {
|
|
||||||
return deviceIdentification;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDeviceIdentification(String deviceIdentification) {
|
|
||||||
this.deviceIdentification = deviceIdentification;
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public String getPlatform() {
|
|
||||||
return platform;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPlatform(String platform) {
|
|
||||||
this.platform = platform;
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public String getOwnershipType() {
|
|
||||||
return ownershipType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setOwnershipType(String ownershipType) {
|
|
||||||
this.ownershipType = ownershipType;
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public String getConnectivityStatus() {
|
|
||||||
return connectivityStatus;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setConnectivityStatus(String connectivityStatus) {
|
|
||||||
this.connectivityStatus = connectivityStatus;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,37 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.analytics.dashboard.bean;
|
|
||||||
|
|
||||||
public class ExtendedFilterSet extends BasicFilterSet {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Following property is an abstract filter, introduced @ service layer,
|
|
||||||
* wrapping few (actual) low level database properties.
|
|
||||||
*/
|
|
||||||
private String potentialVulnerability;
|
|
||||||
|
|
||||||
public String getPotentialVulnerability() {
|
|
||||||
return potentialVulnerability;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPotentialVulnerability(String potentialVulnerability) {
|
|
||||||
this.potentialVulnerability = potentialVulnerability;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,807 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.analytics.dashboard.dao;
|
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
|
||||||
import org.apache.commons.logging.LogFactory;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.bean.BasicFilterSet;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.bean.DeviceWithDetails;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.bean.DeviceCountByGroup;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.bean.ExtendedFilterSet;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.exception.InvalidFeatureCodeValueException;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.exception.InvalidPotentialVulnerabilityValueException;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.util.APIUtil;
|
|
||||||
import org.wso2.carbon.device.mgt.common.authorization.DeviceAccessAuthorizationException;
|
|
||||||
import org.wso2.carbon.device.mgt.core.dao.util.DeviceManagementDAOUtil;
|
|
||||||
|
|
||||||
import java.sql.Connection;
|
|
||||||
import java.sql.PreparedStatement;
|
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import static org.wso2.carbon.device.mgt.analytics.dashboard.util.APIUtil.getAuthenticatedUser;
|
|
||||||
import static org.wso2.carbon.device.mgt.analytics.dashboard.util.APIUtil.getAuthenticatedUserTenantDomainId;
|
|
||||||
|
|
||||||
public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceDAO {
|
|
||||||
|
|
||||||
private static final Log log = LogFactory.getLog(AbstractGadgetDataServiceDAO.class);
|
|
||||||
@Override
|
|
||||||
public DeviceCountByGroup getTotalDeviceCount(String userName) throws SQLException {
|
|
||||||
int totalDeviceCount;
|
|
||||||
try {
|
|
||||||
totalDeviceCount = this.getFilteredDeviceCount(null, userName);
|
|
||||||
} catch (InvalidPotentialVulnerabilityValueException e) {
|
|
||||||
throw new AssertionError(e);
|
|
||||||
}
|
|
||||||
DeviceCountByGroup deviceCountByGroup = new DeviceCountByGroup();
|
|
||||||
deviceCountByGroup.setGroup("total");
|
|
||||||
deviceCountByGroup.setDisplayNameForGroup("Total");
|
|
||||||
deviceCountByGroup.setDeviceCount(totalDeviceCount);
|
|
||||||
return deviceCountByGroup;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public DeviceCountByGroup getDeviceCount(ExtendedFilterSet extendedFilterSet, String userName)
|
|
||||||
throws InvalidPotentialVulnerabilityValueException, SQLException {
|
|
||||||
int filteredDeviceCount = this.getFilteredDeviceCount(extendedFilterSet, userName);
|
|
||||||
DeviceCountByGroup deviceCountByGroup = new DeviceCountByGroup();
|
|
||||||
deviceCountByGroup.setGroup("filtered");
|
|
||||||
deviceCountByGroup.setDisplayNameForGroup("Filtered");
|
|
||||||
deviceCountByGroup.setDeviceCount(filteredDeviceCount);
|
|
||||||
return deviceCountByGroup;
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getFilteredDeviceCount(ExtendedFilterSet extendedFilterSet, String userName)
|
|
||||||
throws InvalidPotentialVulnerabilityValueException, SQLException {
|
|
||||||
|
|
||||||
Map<String, Object> filters = this.extractDatabaseFiltersFromBean(extendedFilterSet);
|
|
||||||
|
|
||||||
Connection con;
|
|
||||||
PreparedStatement stmt = null;
|
|
||||||
ResultSet rs = null;
|
|
||||||
int tenantId = getAuthenticatedUserTenantDomainId();
|
|
||||||
int filteredDeviceCount = 0;
|
|
||||||
try {
|
|
||||||
String sql;
|
|
||||||
con = this.getConnection();
|
|
||||||
if (APIUtil.isDeviceAdminUser()) {
|
|
||||||
sql = "SELECT COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " +
|
|
||||||
GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_1 + " POLICY__INFO WHERE TENANT_ID = ?";
|
|
||||||
} else {
|
|
||||||
sql = "SELECT COUNT(POLICY__INFO.DEVICE_ID) AS DEVICE_COUNT FROM "
|
|
||||||
+ GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_1 + " POLICY__INFO INNER JOIN" +
|
|
||||||
" DM_ENROLMENT ENR_DB ON ENR_DB.DEVICE_ID = POLICY__INFO.DEVICE_ID AND " +
|
|
||||||
" POLICY__INFO.TENANT_ID = ? AND ENR_DB.OWNER = ? ";
|
|
||||||
}
|
|
||||||
// appending filters to support advanced filtering options
|
|
||||||
// [1] appending filter columns
|
|
||||||
if (filters != null && filters.size() > 0) {
|
|
||||||
for (String column : filters.keySet()) {
|
|
||||||
sql = sql + " AND POLICY__INFO." + column + " = ? ";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// [2] appending filter column values, if exist
|
|
||||||
stmt = con.prepareStatement(sql);
|
|
||||||
stmt.setInt(1, tenantId);
|
|
||||||
int index = 2;
|
|
||||||
if (!APIUtil.isDeviceAdminUser()) {
|
|
||||||
stmt.setString(2, userName);
|
|
||||||
index = 3;
|
|
||||||
}
|
|
||||||
if (filters != null && filters.values().size() > 0) {
|
|
||||||
int i = index;
|
|
||||||
for (Object value : filters.values()) {
|
|
||||||
if (value instanceof Integer) {
|
|
||||||
stmt.setInt(i, (Integer) value);
|
|
||||||
} else if (value instanceof String) {
|
|
||||||
stmt.setString(i, (String) value);
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// executing query
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
// fetching query results
|
|
||||||
while (rs.next()) {
|
|
||||||
filteredDeviceCount = rs.getInt("DEVICE_COUNT");
|
|
||||||
}
|
|
||||||
} catch (DeviceAccessAuthorizationException e) {
|
|
||||||
String msg = "Error occurred while checking device access authorization";
|
|
||||||
log.error(msg, e);
|
|
||||||
} finally {
|
|
||||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
|
||||||
}
|
|
||||||
return filteredDeviceCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public DeviceCountByGroup getFeatureNonCompliantDeviceCount(String featureCode,
|
|
||||||
BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException, SQLException {
|
|
||||||
|
|
||||||
if (featureCode == null || featureCode.isEmpty()) {
|
|
||||||
throw new InvalidFeatureCodeValueException("Feature code should not be either null or empty.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Map<String, Object> filters = this.extractDatabaseFiltersFromBean(basicFilterSet);
|
|
||||||
|
|
||||||
Connection con;
|
|
||||||
PreparedStatement stmt = null;
|
|
||||||
ResultSet rs = null;
|
|
||||||
int tenantId = getAuthenticatedUserTenantDomainId();
|
|
||||||
int filteredDeviceCount = 0;
|
|
||||||
try {
|
|
||||||
String sql;
|
|
||||||
con = this.getConnection();
|
|
||||||
if (APIUtil.isDeviceAdminUser()) {
|
|
||||||
sql = "SELECT COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " +
|
|
||||||
GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2 + " FEATURE_INFO WHERE TENANT_ID =" +
|
|
||||||
" ? AND FEATURE_CODE = ?";
|
|
||||||
} else {
|
|
||||||
sql = "SELECT COUNT(FEATURE_INFO.DEVICE_ID) AS DEVICE_COUNT FROM " +
|
|
||||||
GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2 + " FEATURE_INFO INNER JOIN " +
|
|
||||||
"DM_ENROLMENT ENR_DB ON ENR_DB.DEVICE_ID = FEATURE_INFO.DEVICE_ID AND " +
|
|
||||||
"FEATURE_INFO.TENANT_ID = ? AND FEATURE_INFO.FEATURE_CODE = ? AND ENR_DB.OWNER = ? ";
|
|
||||||
}
|
|
||||||
// appending filters to support advanced filtering options
|
|
||||||
// [1] appending filter columns
|
|
||||||
if (filters != null && filters.size() > 0) {
|
|
||||||
for (String column : filters.keySet()) {
|
|
||||||
sql = sql + " AND FEATURE_INFO." + column + " = ?";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stmt = con.prepareStatement(sql);
|
|
||||||
// [2] appending filter column values, if exist
|
|
||||||
stmt.setInt(1, tenantId);
|
|
||||||
stmt.setString(2, featureCode);
|
|
||||||
int index = 3;
|
|
||||||
if (!APIUtil.isDeviceAdminUser()) {
|
|
||||||
stmt.setString(3, userName);
|
|
||||||
index = 4;
|
|
||||||
}
|
|
||||||
if (filters != null && filters.values().size() > 0) {
|
|
||||||
int i = index;
|
|
||||||
for (Object value : filters.values()) {
|
|
||||||
if (value instanceof Integer) {
|
|
||||||
stmt.setInt(i, (Integer) value);
|
|
||||||
} else if (value instanceof String) {
|
|
||||||
stmt.setString(i, (String) value);
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// executing query
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
// fetching query results
|
|
||||||
while (rs.next()) {
|
|
||||||
filteredDeviceCount = rs.getInt("DEVICE_COUNT");
|
|
||||||
}
|
|
||||||
} catch (DeviceAccessAuthorizationException e) {
|
|
||||||
String msg = "Error occurred while checking device access authorization";
|
|
||||||
log.error(msg, e);
|
|
||||||
} finally {
|
|
||||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
|
||||||
}
|
|
||||||
|
|
||||||
DeviceCountByGroup deviceCountByGroup = new DeviceCountByGroup();
|
|
||||||
deviceCountByGroup.setGroup("feature-non-compliant-and-filtered");
|
|
||||||
deviceCountByGroup.setDisplayNameForGroup("Feature-non-compliant-and-filtered");
|
|
||||||
deviceCountByGroup.setDeviceCount(filteredDeviceCount);
|
|
||||||
|
|
||||||
return deviceCountByGroup;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<DeviceCountByGroup> getDeviceCountsByConnectivityStatuses(String userName) throws SQLException {
|
|
||||||
Connection con;
|
|
||||||
PreparedStatement stmt = null;
|
|
||||||
ResultSet rs = null;
|
|
||||||
int tenantId = getAuthenticatedUserTenantDomainId();
|
|
||||||
List<DeviceCountByGroup> deviceCountsByConnectivityStatuses = new ArrayList<>();
|
|
||||||
try {
|
|
||||||
String sql;
|
|
||||||
con = this.getConnection();
|
|
||||||
if (APIUtil.isDeviceAdminUser()) {
|
|
||||||
sql = "SELECT CONNECTIVITY_STATUS, COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " +
|
|
||||||
GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_1 +
|
|
||||||
" WHERE TENANT_ID = ? GROUP BY CONNECTIVITY_STATUS";
|
|
||||||
} else {
|
|
||||||
sql = "SELECT POLICY__INFO.CONNECTIVITY_STATUS AS CONNECTIVITY_STATUS, " +
|
|
||||||
"COUNT(POLICY__INFO.DEVICE_ID) AS DEVICE_COUNT FROM "
|
|
||||||
+ GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_1 + " POLICY__INFO " +
|
|
||||||
"INNER JOIN DM_ENROLMENT ENR_DB ON ENR_DB.DEVICE_ID = POLICY__INFO.DEVICE_ID " +
|
|
||||||
" AND POLICY__INFO.TENANT_ID = ? AND ENR_DB.OWNER = ? GROUP BY POLICY__INFO.CONNECTIVITY_STATUS";
|
|
||||||
}
|
|
||||||
stmt = con.prepareStatement(sql);
|
|
||||||
// [2] appending filter column values, if exist
|
|
||||||
stmt.setInt(1, tenantId);
|
|
||||||
if(!APIUtil.isDeviceAdminUser()){
|
|
||||||
stmt.setString(2, userName);
|
|
||||||
}
|
|
||||||
// executing query
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
// fetching query results
|
|
||||||
DeviceCountByGroup deviceCountByConnectivityStatus;
|
|
||||||
while (rs.next()) {
|
|
||||||
deviceCountByConnectivityStatus = new DeviceCountByGroup();
|
|
||||||
deviceCountByConnectivityStatus.setGroup(rs.getString("CONNECTIVITY_STATUS"));
|
|
||||||
deviceCountByConnectivityStatus.setDisplayNameForGroup(rs.getString("CONNECTIVITY_STATUS"));
|
|
||||||
deviceCountByConnectivityStatus.setDeviceCount(rs.getInt("DEVICE_COUNT"));
|
|
||||||
deviceCountsByConnectivityStatuses.add(deviceCountByConnectivityStatus);
|
|
||||||
}
|
|
||||||
} catch (DeviceAccessAuthorizationException e) {
|
|
||||||
String msg = "Error occurred while checking device access authorization";
|
|
||||||
log.error(msg, e);
|
|
||||||
} finally {
|
|
||||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
|
||||||
}
|
|
||||||
return deviceCountsByConnectivityStatuses;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<DeviceCountByGroup> getDeviceCountsByPotentialVulnerabilities(String userName) throws SQLException {
|
|
||||||
// getting non-compliant device count
|
|
||||||
DeviceCountByGroup nonCompliantDeviceCount = new DeviceCountByGroup();
|
|
||||||
nonCompliantDeviceCount.setGroup(GadgetDataServiceDAOConstants.PotentialVulnerability.NON_COMPLIANT);
|
|
||||||
nonCompliantDeviceCount.setDisplayNameForGroup("Non-compliant");
|
|
||||||
nonCompliantDeviceCount.setDeviceCount(getNonCompliantDeviceCount());
|
|
||||||
|
|
||||||
// getting unmonitored device count
|
|
||||||
DeviceCountByGroup unmonitoredDeviceCount = new DeviceCountByGroup();
|
|
||||||
unmonitoredDeviceCount.setGroup(GadgetDataServiceDAOConstants.PotentialVulnerability.UNMONITORED);
|
|
||||||
unmonitoredDeviceCount.setDisplayNameForGroup("Unmonitored");
|
|
||||||
unmonitoredDeviceCount.setDeviceCount(getUnmonitoredDeviceCount());
|
|
||||||
|
|
||||||
List<DeviceCountByGroup> deviceCountsByPotentialVulnerabilities = new ArrayList<>();
|
|
||||||
deviceCountsByPotentialVulnerabilities.add(nonCompliantDeviceCount);
|
|
||||||
deviceCountsByPotentialVulnerabilities.add(unmonitoredDeviceCount);
|
|
||||||
|
|
||||||
return deviceCountsByPotentialVulnerabilities;
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getNonCompliantDeviceCount() throws SQLException {
|
|
||||||
ExtendedFilterSet extendedFilterSet = new ExtendedFilterSet();
|
|
||||||
extendedFilterSet.setPotentialVulnerability(GadgetDataServiceDAOConstants.PotentialVulnerability.NON_COMPLIANT);
|
|
||||||
try {
|
|
||||||
String userName = getAuthenticatedUser();
|
|
||||||
return this.getFilteredDeviceCount(extendedFilterSet, userName);
|
|
||||||
} catch (InvalidPotentialVulnerabilityValueException e) {
|
|
||||||
throw new AssertionError(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getUnmonitoredDeviceCount() throws SQLException {
|
|
||||||
ExtendedFilterSet extendedFilterSet = new ExtendedFilterSet();
|
|
||||||
extendedFilterSet.setPotentialVulnerability(GadgetDataServiceDAOConstants.
|
|
||||||
PotentialVulnerability.UNMONITORED);
|
|
||||||
try {
|
|
||||||
String userName = getAuthenticatedUser();
|
|
||||||
return this.getFilteredDeviceCount(extendedFilterSet, userName);
|
|
||||||
} catch (InvalidPotentialVulnerabilityValueException e) {
|
|
||||||
throw new AssertionError(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<DeviceCountByGroup> getDeviceCountsByPlatforms(ExtendedFilterSet extendedFilterSet, String userName)
|
|
||||||
throws InvalidPotentialVulnerabilityValueException, SQLException {
|
|
||||||
|
|
||||||
Map<String, Object> filters = this.extractDatabaseFiltersFromBean(extendedFilterSet);
|
|
||||||
|
|
||||||
Connection con;
|
|
||||||
PreparedStatement stmt = null;
|
|
||||||
ResultSet rs = null;
|
|
||||||
int tenantId = getAuthenticatedUserTenantDomainId();
|
|
||||||
List<DeviceCountByGroup> filteredDeviceCountsByPlatforms = new ArrayList<>();
|
|
||||||
try {
|
|
||||||
con = this.getConnection();
|
|
||||||
String sql, advancedSqlFiltering = "";
|
|
||||||
// appending filters if exist, to support advanced filtering options
|
|
||||||
// [1] appending filter columns, if exist
|
|
||||||
if (filters != null && filters.size() > 0) {
|
|
||||||
for (String column : filters.keySet()) {
|
|
||||||
advancedSqlFiltering = advancedSqlFiltering + " AND POLICY__INFO." + column + " = ? ";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (APIUtil.isDeviceAdminUser()) {
|
|
||||||
sql = "SELECT PLATFORM, COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + GadgetDataServiceDAOConstants.
|
|
||||||
DatabaseView.DEVICES_VIEW_1 + " POLICY__INFO WHERE TENANT_ID = ? " + advancedSqlFiltering +
|
|
||||||
" GROUP BY PLATFORM";
|
|
||||||
} else {
|
|
||||||
sql = "SELECT POLICY__INFO.PLATFORM, COUNT(POLICY__INFO.DEVICE_ID) AS DEVICE_COUNT FROM " +
|
|
||||||
GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_1 + " POLICY__INFO INNER JOIN " +
|
|
||||||
"DM_ENROLMENT ENR_DB ON ENR_DB.DEVICE_ID = POLICY__INFO.DEVICE_ID AND " +
|
|
||||||
"POLICY__INFO.TENANT_ID = ? AND ENR_DB.OWNER = ? " + advancedSqlFiltering + " GROUP BY " +
|
|
||||||
"POLICY__INFO.PLATFORM";
|
|
||||||
}
|
|
||||||
stmt = con.prepareStatement(sql);
|
|
||||||
// [2] appending filter column values, if exist
|
|
||||||
stmt.setInt(1, tenantId);
|
|
||||||
int index = 2;
|
|
||||||
if (!APIUtil.isDeviceAdminUser()) {
|
|
||||||
stmt.setString(2, userName);
|
|
||||||
index = 3;
|
|
||||||
}
|
|
||||||
if (filters != null && filters.values().size() > 0) {
|
|
||||||
int i = index;
|
|
||||||
for (Object value : filters.values()) {
|
|
||||||
if (value instanceof Integer) {
|
|
||||||
stmt.setInt(i, (Integer) value);
|
|
||||||
} else if (value instanceof String) {
|
|
||||||
stmt.setString(i, (String) value);
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// executing query
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
// fetching query results
|
|
||||||
DeviceCountByGroup filteredDeviceCountByPlatform;
|
|
||||||
while (rs.next()) {
|
|
||||||
filteredDeviceCountByPlatform = new DeviceCountByGroup();
|
|
||||||
filteredDeviceCountByPlatform.setGroup(rs.getString("PLATFORM"));
|
|
||||||
filteredDeviceCountByPlatform.setDisplayNameForGroup(rs.getString("PLATFORM").toUpperCase());
|
|
||||||
filteredDeviceCountByPlatform.setDeviceCount(rs.getInt("DEVICE_COUNT"));
|
|
||||||
filteredDeviceCountsByPlatforms.add(filteredDeviceCountByPlatform);
|
|
||||||
}
|
|
||||||
} catch (DeviceAccessAuthorizationException e) {
|
|
||||||
String msg = "Error occurred while checking device access authorization";
|
|
||||||
log.error(msg, e);
|
|
||||||
} finally {
|
|
||||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
|
||||||
}
|
|
||||||
return filteredDeviceCountsByPlatforms;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<DeviceCountByGroup>
|
|
||||||
getFeatureNonCompliantDeviceCountsByPlatforms(String featureCode,
|
|
||||||
BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException, SQLException {
|
|
||||||
|
|
||||||
if (featureCode == null || featureCode.isEmpty()) {
|
|
||||||
throw new InvalidFeatureCodeValueException("Feature code should not be either null or empty.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Map<String, Object> filters = this.extractDatabaseFiltersFromBean(basicFilterSet);
|
|
||||||
|
|
||||||
Connection con;
|
|
||||||
PreparedStatement stmt = null;
|
|
||||||
ResultSet rs = null;
|
|
||||||
int tenantId = getAuthenticatedUserTenantDomainId();
|
|
||||||
List<DeviceCountByGroup> filteredDeviceCountsByPlatforms = new ArrayList<>();
|
|
||||||
try {
|
|
||||||
con = this.getConnection();
|
|
||||||
String sql, advancedSqlFiltering = "";
|
|
||||||
// appending filters if exist, to support advanced filtering options
|
|
||||||
// [1] appending filter columns, if exist
|
|
||||||
if (filters != null && filters.size() > 0) {
|
|
||||||
for (String column : filters.keySet()) {
|
|
||||||
advancedSqlFiltering = advancedSqlFiltering + " AND FEATURE_INFO." + column + " = ? ";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (APIUtil.isDeviceAdminUser()) {
|
|
||||||
sql = "SELECT PLATFORM, COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + GadgetDataServiceDAOConstants.
|
|
||||||
DatabaseView.DEVICES_VIEW_2 + " FEATURE_INFO WHERE TENANT_ID = ? AND FEATURE_CODE = ? " +
|
|
||||||
advancedSqlFiltering + " GROUP BY PLATFORM";
|
|
||||||
} else {
|
|
||||||
sql = "SELECT FEATURE_INFO.PLATFORM, COUNT(FEATURE_INFO.DEVICE_ID) AS DEVICE_COUNT FROM " +
|
|
||||||
GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2 + " FEATURE_INFO INNER JOIN " +
|
|
||||||
"DM_ENROLMENT ENR_DB ON ENR_DB.DEVICE_ID = FEATURE_INFO.DEVICE_ID " +
|
|
||||||
" AND FEATURE_INFO.TENANT_ID = ? AND FEATURE_INFO.FEATURE_CODE = ? AND ENR_DB.OWNER = ? " +
|
|
||||||
advancedSqlFiltering + " GROUP BY FEATURE_INFO.PLATFORM";
|
|
||||||
}
|
|
||||||
|
|
||||||
stmt = con.prepareStatement(sql);
|
|
||||||
// [2] appending filter column values, if exist
|
|
||||||
stmt.setInt(1, tenantId);
|
|
||||||
stmt.setString(2, featureCode);
|
|
||||||
int index = 3;
|
|
||||||
if (!APIUtil.isDeviceAdminUser()) {
|
|
||||||
stmt.setString(3, userName);
|
|
||||||
index = 4;
|
|
||||||
}
|
|
||||||
if (filters != null && filters.values().size() > 0) {
|
|
||||||
int i = index;
|
|
||||||
for (Object value : filters.values()) {
|
|
||||||
if (value instanceof Integer) {
|
|
||||||
stmt.setInt(i, (Integer) value);
|
|
||||||
} else if (value instanceof String) {
|
|
||||||
stmt.setString(i, (String) value);
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// executing query
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
// fetching query results
|
|
||||||
DeviceCountByGroup filteredDeviceCountByPlatform;
|
|
||||||
while (rs.next()) {
|
|
||||||
filteredDeviceCountByPlatform = new DeviceCountByGroup();
|
|
||||||
filteredDeviceCountByPlatform.setGroup(rs.getString("PLATFORM"));
|
|
||||||
filteredDeviceCountByPlatform.setDisplayNameForGroup(rs.getString("PLATFORM").toUpperCase());
|
|
||||||
filteredDeviceCountByPlatform.setDeviceCount(rs.getInt("DEVICE_COUNT"));
|
|
||||||
filteredDeviceCountsByPlatforms.add(filteredDeviceCountByPlatform);
|
|
||||||
}
|
|
||||||
} catch (DeviceAccessAuthorizationException e) {
|
|
||||||
String msg = "Error occurred while checking device access authorization";
|
|
||||||
log.error(msg, e);
|
|
||||||
} finally {
|
|
||||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
|
||||||
}
|
|
||||||
return filteredDeviceCountsByPlatforms;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<DeviceCountByGroup> getDeviceCountsByOwnershipTypes(ExtendedFilterSet extendedFilterSet, String userName)
|
|
||||||
throws InvalidPotentialVulnerabilityValueException, SQLException {
|
|
||||||
|
|
||||||
Map<String, Object> filters = this.extractDatabaseFiltersFromBean(extendedFilterSet);
|
|
||||||
|
|
||||||
Connection con;
|
|
||||||
PreparedStatement stmt = null;
|
|
||||||
ResultSet rs = null;
|
|
||||||
int tenantId = getAuthenticatedUserTenantDomainId();
|
|
||||||
List<DeviceCountByGroup> filteredDeviceCountsByOwnershipTypes = new ArrayList<>();
|
|
||||||
try {
|
|
||||||
con = this.getConnection();
|
|
||||||
String sql, advancedSqlFiltering = "";
|
|
||||||
// appending filters if exist, to support advanced filtering options
|
|
||||||
// [1] appending filter columns, if exist
|
|
||||||
if (filters != null && filters.size() > 0) {
|
|
||||||
for (String column : filters.keySet()) {
|
|
||||||
advancedSqlFiltering = advancedSqlFiltering + " AND POLICY__INFO." + column + " = ? ";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(APIUtil.isDeviceAdminUser()){
|
|
||||||
sql = "SELECT OWNERSHIP, COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + GadgetDataServiceDAOConstants.
|
|
||||||
DatabaseView.DEVICES_VIEW_1 + " POLICY__INFO WHERE TENANT_ID = ? " +
|
|
||||||
advancedSqlFiltering + "GROUP BY OWNERSHIP";
|
|
||||||
}else{
|
|
||||||
sql = "SELECT POLICY__INFO.OWNERSHIP, COUNT(POLICY__INFO.DEVICE_ID) AS DEVICE_COUNT FROM " +
|
|
||||||
GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_1 + " POLICY__INFO INNER JOIN " +
|
|
||||||
"DM_ENROLMENT ENR_DB ON ENR_DB.DEVICE_ID = POLICY__INFO.DEVICE_ID AND POLICY__INFO.TENANT_ID" +
|
|
||||||
" = ? AND ENR_DB.OWNER = ? " + advancedSqlFiltering + " GROUP BY POLICY__INFO.OWNERSHIP";
|
|
||||||
}
|
|
||||||
stmt = con.prepareStatement(sql);
|
|
||||||
// [2] appending filter column values, if exist
|
|
||||||
stmt.setInt(1, tenantId);
|
|
||||||
int index = 2;
|
|
||||||
if(!APIUtil.isDeviceAdminUser()){
|
|
||||||
stmt.setString(2, userName);
|
|
||||||
index = 3;
|
|
||||||
}
|
|
||||||
if (filters != null && filters.values().size() > 0) {
|
|
||||||
int i = index;
|
|
||||||
for (Object value : filters.values()) {
|
|
||||||
if (value instanceof Integer) {
|
|
||||||
stmt.setInt(i, (Integer) value);
|
|
||||||
} else if (value instanceof String) {
|
|
||||||
stmt.setString(i, (String) value);
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// executing query
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
// fetching query results
|
|
||||||
DeviceCountByGroup filteredDeviceCountByOwnershipType;
|
|
||||||
while (rs.next()) {
|
|
||||||
filteredDeviceCountByOwnershipType = new DeviceCountByGroup();
|
|
||||||
filteredDeviceCountByOwnershipType.setGroup(rs.getString("OWNERSHIP"));
|
|
||||||
filteredDeviceCountByOwnershipType.setDisplayNameForGroup(rs.getString("OWNERSHIP"));
|
|
||||||
filteredDeviceCountByOwnershipType.setDeviceCount(rs.getInt("DEVICE_COUNT"));
|
|
||||||
filteredDeviceCountsByOwnershipTypes.add(filteredDeviceCountByOwnershipType);
|
|
||||||
}
|
|
||||||
} catch (DeviceAccessAuthorizationException e) {
|
|
||||||
String msg = "Error occurred while checking device access authorization";
|
|
||||||
log.error(msg, e);
|
|
||||||
} finally {
|
|
||||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
|
||||||
}
|
|
||||||
return filteredDeviceCountsByOwnershipTypes;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<DeviceCountByGroup>
|
|
||||||
getFeatureNonCompliantDeviceCountsByOwnershipTypes(String featureCode,
|
|
||||||
BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException, SQLException {
|
|
||||||
|
|
||||||
if (featureCode == null || featureCode.isEmpty()) {
|
|
||||||
throw new InvalidFeatureCodeValueException("Feature code should not be either null or empty.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Map<String, Object> filters = this.extractDatabaseFiltersFromBean(basicFilterSet);
|
|
||||||
|
|
||||||
Connection con;
|
|
||||||
PreparedStatement stmt = null;
|
|
||||||
ResultSet rs = null;
|
|
||||||
int tenantId = getAuthenticatedUserTenantDomainId();
|
|
||||||
List<DeviceCountByGroup> filteredDeviceCountsByOwnershipTypes = new ArrayList<>();
|
|
||||||
try {
|
|
||||||
con = this.getConnection();
|
|
||||||
String sql, advancedSqlFiltering = "";
|
|
||||||
// appending filters if exist, to support advanced filtering options
|
|
||||||
// [1] appending filter columns, if exist
|
|
||||||
if (filters != null && filters.size() > 0) {
|
|
||||||
for (String column : filters.keySet()) {
|
|
||||||
advancedSqlFiltering = advancedSqlFiltering + " AND FEATURE_INFO." + column + " = ? ";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(APIUtil.isDeviceAdminUser()){
|
|
||||||
sql = "SELECT OWNERSHIP, COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + GadgetDataServiceDAOConstants.
|
|
||||||
DatabaseView.DEVICES_VIEW_2 + " FEATURE_INFO WHERE TENANT_ID = ? AND FEATURE_CODE = ? " +
|
|
||||||
advancedSqlFiltering + "GROUP BY OWNERSHIP";
|
|
||||||
}else{
|
|
||||||
sql = "SELECT FEATURE_INFO.OWNERSHIP, COUNT(FEATURE_INFO.DEVICE_ID) AS DEVICE_COUNT FROM " +
|
|
||||||
GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2 + " FEATURE_INFO INNER JOIN " +
|
|
||||||
"DM_ENROLMENT ENR_DB ON ENR_DB.DEVICE_ID = FEATURE_INFO.DEVICE_ID AND FEATURE_INFO.TENANT_ID " +
|
|
||||||
"= ? AND FEATURE_INFO.FEATURE_CODE = ? AND ENR_DB.OWNER = ? " + advancedSqlFiltering
|
|
||||||
+ " GROUP BY FEATURE_INFO.OWNERSHIP";
|
|
||||||
}
|
|
||||||
stmt = con.prepareStatement(sql);
|
|
||||||
// [2] appending filter column values, if exist
|
|
||||||
stmt.setInt(1, tenantId);
|
|
||||||
stmt.setString(2, featureCode);
|
|
||||||
int index = 3;
|
|
||||||
if(!APIUtil.isDeviceAdminUser()){
|
|
||||||
stmt.setString(3, userName);
|
|
||||||
index = 4;
|
|
||||||
}
|
|
||||||
if (filters != null && filters.values().size() > 0) {
|
|
||||||
int i = index;
|
|
||||||
for (Object value : filters.values()) {
|
|
||||||
if (value instanceof Integer) {
|
|
||||||
stmt.setInt(i, (Integer) value);
|
|
||||||
} else if (value instanceof String) {
|
|
||||||
stmt.setString(i, (String) value);
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// executing query
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
// fetching query results
|
|
||||||
DeviceCountByGroup filteredDeviceCountByOwnershipType;
|
|
||||||
while (rs.next()) {
|
|
||||||
filteredDeviceCountByOwnershipType = new DeviceCountByGroup();
|
|
||||||
filteredDeviceCountByOwnershipType.setGroup(rs.getString("OWNERSHIP"));
|
|
||||||
filteredDeviceCountByOwnershipType.setDisplayNameForGroup(rs.getString("OWNERSHIP"));
|
|
||||||
filteredDeviceCountByOwnershipType.setDeviceCount(rs.getInt("DEVICE_COUNT"));
|
|
||||||
filteredDeviceCountsByOwnershipTypes.add(filteredDeviceCountByOwnershipType);
|
|
||||||
}
|
|
||||||
} catch (DeviceAccessAuthorizationException e) {
|
|
||||||
String msg = "Error occurred while checking device access authorization";
|
|
||||||
log.error(msg, e);
|
|
||||||
} finally {
|
|
||||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
|
||||||
}
|
|
||||||
return filteredDeviceCountsByOwnershipTypes;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<DeviceWithDetails> getDevicesWithDetails(ExtendedFilterSet extendedFilterSet, String userName)
|
|
||||||
throws InvalidPotentialVulnerabilityValueException, SQLException {
|
|
||||||
|
|
||||||
Map<String, Object> filters = this.extractDatabaseFiltersFromBean(extendedFilterSet);
|
|
||||||
|
|
||||||
Connection con;
|
|
||||||
PreparedStatement stmt = null;
|
|
||||||
ResultSet rs = null;
|
|
||||||
int tenantId = getAuthenticatedUserTenantDomainId();
|
|
||||||
List<DeviceWithDetails> filteredDevicesWithDetails = new ArrayList<>();
|
|
||||||
try {
|
|
||||||
con = this.getConnection();
|
|
||||||
String sql;
|
|
||||||
if(APIUtil.isDeviceAdminUser()){
|
|
||||||
sql = "SELECT DEVICE_ID, DEVICE_IDENTIFICATION, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM " +
|
|
||||||
GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_1 + " POLICY__INFO WHERE TENANT_ID = ?";
|
|
||||||
}else{
|
|
||||||
sql = "SELECT POLICY__INFO.DEVICE_ID, POLICY__INFO.DEVICE_IDENTIFICATION, POLICY__INFO.PLATFORM," +
|
|
||||||
" POLICY__INFO.OWNERSHIP, POLICY__INFO.CONNECTIVITY_STATUS FROM "+
|
|
||||||
GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_1+" POLICY__INFO INNER JOIN " +
|
|
||||||
"DM_ENROLMENT ENR_DB ON ENR_DB.DEVICE_ID = POLICY__INFO.DEVICE_ID AND " +
|
|
||||||
"POLICY__INFO.TENANT_ID = ? AND ENR_DB.OWNER = ?";
|
|
||||||
}
|
|
||||||
// appending filters to support advanced filtering options
|
|
||||||
// [1] appending filter columns, if exist
|
|
||||||
if (filters != null && filters.size() > 0) {
|
|
||||||
for (String column : filters.keySet()) {
|
|
||||||
sql = sql + " AND POLICY__INFO." + column + " = ?";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stmt = con.prepareStatement(sql);
|
|
||||||
// [2] appending filter column values, if exist
|
|
||||||
stmt.setInt(1, tenantId);
|
|
||||||
int index = 2;
|
|
||||||
if(!APIUtil.isDeviceAdminUser()){
|
|
||||||
stmt.setString(2, userName);
|
|
||||||
index = 3;
|
|
||||||
}
|
|
||||||
if (filters != null && filters.values().size() > 0) {
|
|
||||||
int i = index;
|
|
||||||
for (Object value : filters.values()) {
|
|
||||||
if (value instanceof Integer) {
|
|
||||||
stmt.setInt(i, (Integer) value);
|
|
||||||
} else if (value instanceof String) {
|
|
||||||
stmt.setString(i, (String) value);
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// executing query
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
// fetching query results
|
|
||||||
DeviceWithDetails filteredDeviceWithDetails;
|
|
||||||
while (rs.next()) {
|
|
||||||
filteredDeviceWithDetails = new DeviceWithDetails();
|
|
||||||
filteredDeviceWithDetails.setDeviceId(rs.getInt("DEVICE_ID"));
|
|
||||||
filteredDeviceWithDetails.setDeviceIdentification(rs.getString("DEVICE_IDENTIFICATION"));
|
|
||||||
filteredDeviceWithDetails.setPlatform(rs.getString("PLATFORM"));
|
|
||||||
filteredDeviceWithDetails.setOwnershipType(rs.getString("OWNERSHIP"));
|
|
||||||
filteredDeviceWithDetails.setConnectivityStatus(rs.getString("CONNECTIVITY_STATUS"));
|
|
||||||
filteredDevicesWithDetails.add(filteredDeviceWithDetails);
|
|
||||||
}
|
|
||||||
} catch (DeviceAccessAuthorizationException e) {
|
|
||||||
String msg = "Error occurred while checking device access authorization";
|
|
||||||
log.error(msg, e);
|
|
||||||
} finally {
|
|
||||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
|
||||||
}
|
|
||||||
return filteredDevicesWithDetails;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<DeviceWithDetails> getFeatureNonCompliantDevicesWithDetails(String featureCode,
|
|
||||||
BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException, SQLException {
|
|
||||||
|
|
||||||
if (featureCode == null || featureCode.isEmpty()) {
|
|
||||||
throw new InvalidFeatureCodeValueException("Feature code should not be either null or empty.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Map<String, Object> filters = this.extractDatabaseFiltersFromBean(basicFilterSet);
|
|
||||||
|
|
||||||
Connection con;
|
|
||||||
PreparedStatement stmt = null;
|
|
||||||
ResultSet rs = null;
|
|
||||||
int tenantId = getAuthenticatedUserTenantDomainId();
|
|
||||||
List<DeviceWithDetails> filteredDevicesWithDetails = new ArrayList<>();
|
|
||||||
try {
|
|
||||||
con = this.getConnection();
|
|
||||||
String sql;
|
|
||||||
if(APIUtil.isDeviceAdminUser()){
|
|
||||||
sql = "SELECT DEVICE_ID, DEVICE_IDENTIFICATION, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM " +
|
|
||||||
GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2 +
|
|
||||||
" WHERE TENANT_ID = ? AND FEATURE_CODE = ?";
|
|
||||||
}else{
|
|
||||||
sql = "SELECT FEATURE_INFO.DEVICE_ID, FEATURE_INFO.DEVICE_IDENTIFICATION, FEATURE_INFO.PLATFORM, " +
|
|
||||||
"FEATURE_INFO.OWNERSHIP, FEATURE_INFO.CONNECTIVITY_STATUS FROM "+
|
|
||||||
GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2+" FEATURE_INFO INNER JOIN " +
|
|
||||||
"DM_ENROLMENT ENR_DB ON ENR_DB.DEVICE_ID = FEATURE_INFO.DEVICE_ID AND FEATURE_INFO.TENANT_ID" +
|
|
||||||
" = ? AND FEATURE_INFO.FEATURE_CODE = ? AND ENR_DB.OWNER = ? ";
|
|
||||||
}
|
|
||||||
// appending filters to support advanced filtering options
|
|
||||||
// [1] appending filter columns, if exist
|
|
||||||
if (filters != null && filters.size() > 0) {
|
|
||||||
for (String column : filters.keySet()) {
|
|
||||||
sql = sql + " AND FEATURE_INFO." + column + " = ?";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stmt = con.prepareStatement(sql);
|
|
||||||
// [2] appending filter column values, if exist
|
|
||||||
stmt.setInt(1, tenantId);
|
|
||||||
stmt.setString(2, featureCode);
|
|
||||||
int index = 3;
|
|
||||||
if(!APIUtil.isDeviceAdminUser()){
|
|
||||||
stmt.setString(3, userName);
|
|
||||||
index = 4;
|
|
||||||
}
|
|
||||||
if (filters != null && filters.values().size() > 0) {
|
|
||||||
int i = index;
|
|
||||||
for (Object value : filters.values()) {
|
|
||||||
if (value instanceof Integer) {
|
|
||||||
stmt.setInt(i, (Integer) value);
|
|
||||||
} else if (value instanceof String) {
|
|
||||||
stmt.setString(i, (String) value);
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// executing query
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
// fetching query results
|
|
||||||
DeviceWithDetails filteredDeviceWithDetails;
|
|
||||||
while (rs.next()) {
|
|
||||||
filteredDeviceWithDetails = new DeviceWithDetails();
|
|
||||||
filteredDeviceWithDetails.setDeviceId(rs.getInt("DEVICE_ID"));
|
|
||||||
filteredDeviceWithDetails.setDeviceIdentification(rs.getString("DEVICE_IDENTIFICATION"));
|
|
||||||
filteredDeviceWithDetails.setPlatform(rs.getString("PLATFORM"));
|
|
||||||
filteredDeviceWithDetails.setOwnershipType(rs.getString("OWNERSHIP"));
|
|
||||||
filteredDeviceWithDetails.setConnectivityStatus(rs.getString("CONNECTIVITY_STATUS"));
|
|
||||||
filteredDevicesWithDetails.add(filteredDeviceWithDetails);
|
|
||||||
}
|
|
||||||
} catch (DeviceAccessAuthorizationException e) {
|
|
||||||
String msg = "Error occurred while checking device access authorization";
|
|
||||||
log.error(msg, e);
|
|
||||||
} finally {
|
|
||||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
|
||||||
}
|
|
||||||
return filteredDevicesWithDetails;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected Map<String, Object> extractDatabaseFiltersFromBean(BasicFilterSet basicFilterSet) {
|
|
||||||
if (basicFilterSet == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
Map<String, Object> filters = new LinkedHashMap<>();
|
|
||||||
|
|
||||||
String connectivityStatus = basicFilterSet.getConnectivityStatus();
|
|
||||||
if (connectivityStatus != null && !connectivityStatus.isEmpty()) {
|
|
||||||
filters.put("CONNECTIVITY_STATUS", connectivityStatus);
|
|
||||||
}
|
|
||||||
|
|
||||||
String platform = basicFilterSet.getPlatform();
|
|
||||||
if (platform != null && !platform.isEmpty()) {
|
|
||||||
filters.put("PLATFORM", platform);
|
|
||||||
}
|
|
||||||
|
|
||||||
String ownership = basicFilterSet.getOwnership();
|
|
||||||
if (ownership != null && !ownership.isEmpty()) {
|
|
||||||
filters.put("OWNERSHIP", ownership);
|
|
||||||
}
|
|
||||||
|
|
||||||
return filters;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected Map<String, Object> extractDatabaseFiltersFromBean(ExtendedFilterSet extendedFilterSet)
|
|
||||||
throws InvalidPotentialVulnerabilityValueException {
|
|
||||||
if (extendedFilterSet == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
Map<String, Object> filters = this.extractDatabaseFiltersFromBean((BasicFilterSet) extendedFilterSet);
|
|
||||||
|
|
||||||
String potentialVulnerability = extendedFilterSet.getPotentialVulnerability();
|
|
||||||
if (potentialVulnerability != null && !potentialVulnerability.isEmpty()) {
|
|
||||||
if (GadgetDataServiceDAOConstants.PotentialVulnerability.NON_COMPLIANT.equals(potentialVulnerability) ||
|
|
||||||
GadgetDataServiceDAOConstants.PotentialVulnerability.UNMONITORED.equals(potentialVulnerability)) {
|
|
||||||
if (GadgetDataServiceDAOConstants.PotentialVulnerability.NON_COMPLIANT.equals(potentialVulnerability)) {
|
|
||||||
filters.put("IS_COMPLIANT", 0);
|
|
||||||
} else {
|
|
||||||
filters.put("POLICY_ID", -1);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
throw new InvalidPotentialVulnerabilityValueException("Invalid use of value for potential " +
|
|
||||||
"vulnerability. Value of potential vulnerability could only be either " +
|
|
||||||
GadgetDataServiceDAOConstants.PotentialVulnerability.NON_COMPLIANT + " or " +
|
|
||||||
GadgetDataServiceDAOConstants.PotentialVulnerability.UNMONITORED + ".");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return filters;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected Connection getConnection() throws SQLException {
|
|
||||||
return GadgetDataServiceDAOFactory.getConnection();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,74 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.analytics.dashboard.dao;
|
|
||||||
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.bean.DeviceWithDetails;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.bean.DeviceCountByGroup;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.bean.BasicFilterSet;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.bean.ExtendedFilterSet;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.exception.*;
|
|
||||||
import org.wso2.carbon.device.mgt.common.PaginationResult;
|
|
||||||
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public interface GadgetDataServiceDAO {
|
|
||||||
|
|
||||||
DeviceCountByGroup getDeviceCount(ExtendedFilterSet extendedFilterSet, String userName)
|
|
||||||
throws InvalidPotentialVulnerabilityValueException, SQLException;
|
|
||||||
|
|
||||||
DeviceCountByGroup getFeatureNonCompliantDeviceCount(String featureCode, BasicFilterSet basicFilterSet, String userName)
|
|
||||||
throws InvalidFeatureCodeValueException, SQLException;
|
|
||||||
|
|
||||||
DeviceCountByGroup getTotalDeviceCount(String userName) throws SQLException;
|
|
||||||
|
|
||||||
List<DeviceCountByGroup> getDeviceCountsByConnectivityStatuses(String userName) throws SQLException;
|
|
||||||
|
|
||||||
List<DeviceCountByGroup> getDeviceCountsByPotentialVulnerabilities(String userName) throws SQLException;
|
|
||||||
|
|
||||||
PaginationResult getNonCompliantDeviceCountsByFeatures(int startIndex, int resultCount, String userName) throws
|
|
||||||
InvalidStartIndexValueException, InvalidResultCountValueException, SQLException;
|
|
||||||
|
|
||||||
List<DeviceCountByGroup> getDeviceCountsByPlatforms(ExtendedFilterSet extendedFilterSet, String userName)
|
|
||||||
throws InvalidPotentialVulnerabilityValueException, SQLException;
|
|
||||||
|
|
||||||
List<DeviceCountByGroup> getFeatureNonCompliantDeviceCountsByPlatforms(String featureCode,
|
|
||||||
BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException, SQLException;
|
|
||||||
|
|
||||||
List<DeviceCountByGroup> getDeviceCountsByOwnershipTypes(ExtendedFilterSet extendedFilterSet, String userName)
|
|
||||||
throws InvalidPotentialVulnerabilityValueException, SQLException;
|
|
||||||
|
|
||||||
List<DeviceCountByGroup> getFeatureNonCompliantDeviceCountsByOwnershipTypes(String featureCode,
|
|
||||||
BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException, SQLException;
|
|
||||||
|
|
||||||
PaginationResult getDevicesWithDetails(ExtendedFilterSet extendedFilterSet, int startIndex, int resultCount, String userName)
|
|
||||||
throws InvalidPotentialVulnerabilityValueException,
|
|
||||||
InvalidStartIndexValueException, InvalidResultCountValueException, SQLException;
|
|
||||||
|
|
||||||
PaginationResult getFeatureNonCompliantDevicesWithDetails(String featureCode, BasicFilterSet basicFilterSet,
|
|
||||||
int startIndex, int resultCount, String userName) throws InvalidFeatureCodeValueException,
|
|
||||||
InvalidStartIndexValueException, InvalidResultCountValueException, SQLException;
|
|
||||||
|
|
||||||
List<DeviceWithDetails> getDevicesWithDetails(ExtendedFilterSet extendedFilterSet, String userName)
|
|
||||||
throws InvalidPotentialVulnerabilityValueException, SQLException;
|
|
||||||
|
|
||||||
List<DeviceWithDetails> getFeatureNonCompliantDevicesWithDetails(String featureCode,
|
|
||||||
BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException, SQLException;
|
|
||||||
|
|
||||||
}
|
|
@ -1,61 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.analytics.dashboard.dao;
|
|
||||||
|
|
||||||
public final class GadgetDataServiceDAOConstants {
|
|
||||||
|
|
||||||
public static class DatabaseView {
|
|
||||||
|
|
||||||
public static final String DEVICES_VIEW_1 = "POLICY_COMPLIANCE_INFO";
|
|
||||||
public static final String DEVICES_VIEW_2 = "FEATURE_NON_COMPLIANCE_INFO";
|
|
||||||
|
|
||||||
private DatabaseView() {
|
|
||||||
throw new AssertionError();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class Pagination {
|
|
||||||
|
|
||||||
// Minimum acceptable values for start index and result count
|
|
||||||
public static final int MIN_START_INDEX = 0;
|
|
||||||
public static final int MIN_RESULT_COUNT = 5;
|
|
||||||
|
|
||||||
private Pagination() {
|
|
||||||
throw new AssertionError();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class PotentialVulnerability {
|
|
||||||
|
|
||||||
// These constants do not hold actual database values
|
|
||||||
// These are just abstract values defined and used @ Gadget Data Service DAO Implementation layer
|
|
||||||
public static final String NON_COMPLIANT = "NON_COMPLIANT";
|
|
||||||
public static final String UNMONITORED = "UNMONITORED";
|
|
||||||
|
|
||||||
private PotentialVulnerability() {
|
|
||||||
throw new AssertionError();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private GadgetDataServiceDAOConstants() { throw new AssertionError(); }
|
|
||||||
|
|
||||||
}
|
|
@ -1,155 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.analytics.dashboard.dao;
|
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
|
||||||
import org.apache.commons.logging.LogFactory;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.dao.impl.GenericGadgetDataServiceDAOImpl;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.dao.impl.MSSQLGadgetDataServiceDAOImpl;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.dao.impl.OracleGadgetDataServiceDAOImpl;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.dao.impl.PostgreSQLGadgetDataServiceDAOImpl;
|
|
||||||
import org.wso2.carbon.device.mgt.common.DeviceManagementConstants;
|
|
||||||
import org.wso2.carbon.device.mgt.common.IllegalTransactionStateException;
|
|
||||||
import org.wso2.carbon.device.mgt.common.UnsupportedDatabaseEngineException;
|
|
||||||
import org.wso2.carbon.device.mgt.core.config.datasource.DataSourceConfig;
|
|
||||||
import org.wso2.carbon.device.mgt.core.config.datasource.JNDILookupDefinition;
|
|
||||||
import org.wso2.carbon.device.mgt.core.dao.util.DeviceManagementDAOUtil;
|
|
||||||
|
|
||||||
import javax.sql.DataSource;
|
|
||||||
import java.sql.Connection;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.Hashtable;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public class GadgetDataServiceDAOFactory {
|
|
||||||
|
|
||||||
private static final Log log = LogFactory.getLog(GadgetDataServiceDAOFactory.class);
|
|
||||||
private static DataSource dataSource;
|
|
||||||
private static String databaseEngine;
|
|
||||||
private static ThreadLocal<Connection> currentConnection = new ThreadLocal<>();
|
|
||||||
|
|
||||||
public static GadgetDataServiceDAO getGadgetDataServiceDAO() {
|
|
||||||
if (databaseEngine != null) {
|
|
||||||
switch (databaseEngine) {
|
|
||||||
case DeviceManagementConstants.DataBaseTypes.DB_TYPE_H2:
|
|
||||||
return new GenericGadgetDataServiceDAOImpl();
|
|
||||||
case DeviceManagementConstants.DataBaseTypes.DB_TYPE_MYSQL:
|
|
||||||
return new GenericGadgetDataServiceDAOImpl();
|
|
||||||
case DeviceManagementConstants.DataBaseTypes.DB_TYPE_MSSQL:
|
|
||||||
return new MSSQLGadgetDataServiceDAOImpl();
|
|
||||||
case DeviceManagementConstants.DataBaseTypes.DB_TYPE_POSTGRESQL:
|
|
||||||
return new PostgreSQLGadgetDataServiceDAOImpl();
|
|
||||||
case DeviceManagementConstants.DataBaseTypes.DB_TYPE_ORACLE:
|
|
||||||
return new OracleGadgetDataServiceDAOImpl();
|
|
||||||
default:
|
|
||||||
throw new UnsupportedDatabaseEngineException("Unsupported database engine : " + databaseEngine);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
throw new IllegalStateException("Database engine has not initialized properly.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void init(DataSourceConfig config) {
|
|
||||||
dataSource = resolveDataSource(config);
|
|
||||||
try {
|
|
||||||
databaseEngine = dataSource.getConnection().getMetaData().getDatabaseProductName();
|
|
||||||
} catch (SQLException e) {
|
|
||||||
log.error("Error occurred while retrieving config.datasource connection.", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void init(DataSource dtSource) {
|
|
||||||
dataSource = dtSource;
|
|
||||||
try {
|
|
||||||
databaseEngine = dataSource.getConnection().getMetaData().getDatabaseProductName();
|
|
||||||
} catch (SQLException e) {
|
|
||||||
log.error("Error occurred while retrieving config.datasource connection.", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void openConnection() throws SQLException {
|
|
||||||
Connection conn = currentConnection.get();
|
|
||||||
if (conn != null) {
|
|
||||||
throw new IllegalTransactionStateException("A transaction is already active within the context of " +
|
|
||||||
"this particular thread. Therefore, calling 'beginTransaction/openConnection' while another " +
|
|
||||||
"transaction is already active is a sign of improper transaction handling.");
|
|
||||||
}
|
|
||||||
conn = dataSource.getConnection();
|
|
||||||
currentConnection.set(conn);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Connection getConnection() throws SQLException {
|
|
||||||
Connection conn = currentConnection.get();
|
|
||||||
if (conn == null) {
|
|
||||||
throw new IllegalTransactionStateException("No connection is associated with the current transaction. " +
|
|
||||||
"This might have ideally been caused by not properly initiating the transaction via " +
|
|
||||||
"'beginTransaction'/'openConnection' methods.");
|
|
||||||
}
|
|
||||||
return conn;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void closeConnection() {
|
|
||||||
Connection conn = currentConnection.get();
|
|
||||||
if (conn == null) {
|
|
||||||
throw new IllegalTransactionStateException("No connection is associated with the current transaction. " +
|
|
||||||
"This might have ideally been caused by not properly initiating the transaction via " +
|
|
||||||
"'beginTransaction'/'openConnection' methods.");
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
conn.close();
|
|
||||||
} catch (SQLException e) {
|
|
||||||
log.warn("Error occurred while close the connection.");
|
|
||||||
}
|
|
||||||
currentConnection.remove();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Resolve data source from the data source definition.
|
|
||||||
*
|
|
||||||
* @param config data source configuration.
|
|
||||||
* @return data source resolved from the data source definition.
|
|
||||||
*/
|
|
||||||
private static DataSource resolveDataSource(DataSourceConfig config) {
|
|
||||||
DataSource dataSource = null;
|
|
||||||
if (config == null) {
|
|
||||||
throw new RuntimeException(
|
|
||||||
"Device Management Repository data source configuration is null and " +
|
|
||||||
"thus, is not initialized.");
|
|
||||||
}
|
|
||||||
JNDILookupDefinition jndiConfig = config.getJndiLookupDefinition();
|
|
||||||
if (jndiConfig != null) {
|
|
||||||
if (log.isDebugEnabled()) {
|
|
||||||
log.debug("Initializing Device Management Repository data source using the JNDI Lookup Definition.");
|
|
||||||
}
|
|
||||||
List<JNDILookupDefinition.JNDIProperty> jndiPropertyList = jndiConfig.getJndiProperties();
|
|
||||||
if (jndiPropertyList != null) {
|
|
||||||
Hashtable<Object, Object> jndiProperties = new Hashtable<>();
|
|
||||||
for (JNDILookupDefinition.JNDIProperty prop : jndiPropertyList) {
|
|
||||||
jndiProperties.put(prop.getName(), prop.getValue());
|
|
||||||
}
|
|
||||||
dataSource = DeviceManagementDAOUtil.lookupDataSource(jndiConfig.getJndiName(), jndiProperties);
|
|
||||||
} else {
|
|
||||||
dataSource = DeviceManagementDAOUtil.lookupDataSource(jndiConfig.getJndiName(), null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return dataSource;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,374 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.analytics.dashboard.dao.impl;
|
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
|
||||||
import org.apache.commons.logging.LogFactory;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.bean.DeviceWithDetails;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.bean.DeviceCountByGroup;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.bean.BasicFilterSet;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.bean.ExtendedFilterSet;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.dao.AbstractGadgetDataServiceDAO;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.dao.GadgetDataServiceDAOConstants;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.exception.*;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.util.APIUtil;
|
|
||||||
import org.wso2.carbon.device.mgt.common.PaginationResult;
|
|
||||||
import org.wso2.carbon.device.mgt.common.authorization.DeviceAccessAuthorizationException;
|
|
||||||
import org.wso2.carbon.device.mgt.core.dao.util.DeviceManagementDAOUtil;
|
|
||||||
|
|
||||||
import java.sql.Connection;
|
|
||||||
import java.sql.PreparedStatement;
|
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import static org.wso2.carbon.device.mgt.analytics.dashboard.util.APIUtil.getAuthenticatedUserTenantDomainId;
|
|
||||||
|
|
||||||
public class GenericGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDAO {
|
|
||||||
|
|
||||||
private static final Log log = LogFactory.getLog(GenericGadgetDataServiceDAOImpl.class);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PaginationResult getNonCompliantDeviceCountsByFeatures(int startIndex, int resultCount, String userName)
|
|
||||||
throws InvalidStartIndexValueException, InvalidResultCountValueException, SQLException {
|
|
||||||
|
|
||||||
if (startIndex < GadgetDataServiceDAOConstants.Pagination.MIN_START_INDEX) {
|
|
||||||
throw new InvalidStartIndexValueException("Start index should be equal to " +
|
|
||||||
GadgetDataServiceDAOConstants.Pagination.MIN_START_INDEX + " or greater than that.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (resultCount < GadgetDataServiceDAOConstants.Pagination.MIN_RESULT_COUNT) {
|
|
||||||
throw new InvalidResultCountValueException("Result count should be equal to " +
|
|
||||||
GadgetDataServiceDAOConstants.Pagination.MIN_RESULT_COUNT + " or greater than that.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Connection con;
|
|
||||||
PreparedStatement stmt = null;
|
|
||||||
ResultSet rs = null;
|
|
||||||
int tenantId = getAuthenticatedUserTenantDomainId();
|
|
||||||
List<DeviceCountByGroup> filteredNonCompliantDeviceCountsByFeatures = new ArrayList<>();
|
|
||||||
int totalRecordsCount = 0;
|
|
||||||
try {
|
|
||||||
String sql;
|
|
||||||
con = this.getConnection();
|
|
||||||
if(APIUtil.isDeviceAdminUser()){
|
|
||||||
sql = "SELECT FEATURE_CODE, COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + GadgetDataServiceDAOConstants.
|
|
||||||
DatabaseView.DEVICES_VIEW_2 + " WHERE TENANT_ID = ? GROUP BY FEATURE_CODE " +
|
|
||||||
"ORDER BY DEVICE_COUNT DESC LIMIT ?, ?";
|
|
||||||
}else{
|
|
||||||
sql = "SELECT FEATURE_INFO.FEATURE_CODE, COUNT(FEATURE_INFO.DEVICE_ID) AS DEVICE_COUNT " +
|
|
||||||
"FROM "+GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2+" FEATURE_INFO INNER JOIN " +
|
|
||||||
"DM_ENROLMENT ENR_DB ON ENR_DB.DEVICE_ID = FEATURE_INFO.DEVICE_ID AND " +
|
|
||||||
"FEATURE_INFO.TENANT_ID = ? AND ENR_DB.OWNER = ? GROUP BY FEATURE_INFO.FEATURE_CODE ORDER BY" +
|
|
||||||
" DEVICE_COUNT DESC LIMIT ?, ?";
|
|
||||||
}
|
|
||||||
stmt = con.prepareStatement(sql);
|
|
||||||
stmt.setInt(1, tenantId);
|
|
||||||
if(!APIUtil.isDeviceAdminUser()){
|
|
||||||
stmt.setString(2, userName);
|
|
||||||
stmt.setInt(3, startIndex);
|
|
||||||
stmt.setInt(4, resultCount);
|
|
||||||
}else{
|
|
||||||
stmt.setInt(2, startIndex);
|
|
||||||
stmt.setInt(3, resultCount);
|
|
||||||
}
|
|
||||||
// executing query
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
// fetching query results
|
|
||||||
DeviceCountByGroup filteredNonCompliantDeviceCountByFeature;
|
|
||||||
while (rs.next()) {
|
|
||||||
filteredNonCompliantDeviceCountByFeature = new DeviceCountByGroup();
|
|
||||||
filteredNonCompliantDeviceCountByFeature.setGroup(rs.getString("FEATURE_CODE"));
|
|
||||||
filteredNonCompliantDeviceCountByFeature.setDisplayNameForGroup(rs.getString("FEATURE_CODE"));
|
|
||||||
filteredNonCompliantDeviceCountByFeature.setDeviceCount(rs.getInt("DEVICE_COUNT"));
|
|
||||||
filteredNonCompliantDeviceCountsByFeatures.add(filteredNonCompliantDeviceCountByFeature);
|
|
||||||
}
|
|
||||||
// fetching total records count
|
|
||||||
if(APIUtil.isDeviceAdminUser()){
|
|
||||||
sql = "SELECT COUNT(FEATURE_CODE) AS NON_COMPLIANT_FEATURE_COUNT FROM (SELECT DISTINCT FEATURE_CODE FROM " +
|
|
||||||
GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2 + " WHERE TENANT_ID = ?) " +
|
|
||||||
"NON_COMPLIANT_FEATURE_CODE";
|
|
||||||
}else{
|
|
||||||
sql = "SELECT COUNT(FEATURE_CODE) AS NON_COMPLIANT_FEATURE_COUNT FROM (SELECT DISTINCT " +
|
|
||||||
"FEATURE_INFO.FEATURE_CODE FROM "+GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2
|
|
||||||
+" FEATURE_INFO INNER JOIN DM_ENROLMENT ENR_DB ON ENR_DB.DEVICE_ID = FEATURE_INFO.DEVICE_ID " +
|
|
||||||
"AND FEATURE_INFO.TENANT_ID = ? AND ENR_DB.OWNER = ? ) NON_COMPLIANT_FEATURE_CODE";
|
|
||||||
}
|
|
||||||
stmt = con.prepareStatement(sql);
|
|
||||||
stmt.setInt(1, tenantId);
|
|
||||||
if(!APIUtil.isDeviceAdminUser()){
|
|
||||||
stmt.setString(2, userName);
|
|
||||||
}
|
|
||||||
// executing query
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
// fetching query results
|
|
||||||
while (rs.next()) {
|
|
||||||
totalRecordsCount = rs.getInt("NON_COMPLIANT_FEATURE_COUNT");
|
|
||||||
}
|
|
||||||
} catch (DeviceAccessAuthorizationException e) {
|
|
||||||
String msg = "Error occurred while checking device access authorization";
|
|
||||||
log.error(msg, e);
|
|
||||||
} finally {
|
|
||||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
|
||||||
}
|
|
||||||
PaginationResult paginationResult = new PaginationResult();
|
|
||||||
paginationResult.setData(filteredNonCompliantDeviceCountsByFeatures);
|
|
||||||
paginationResult.setRecordsTotal(totalRecordsCount);
|
|
||||||
return paginationResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PaginationResult getDevicesWithDetails(ExtendedFilterSet extendedFilterSet, int startIndex,
|
|
||||||
int resultCount, String userName) throws InvalidPotentialVulnerabilityValueException,
|
|
||||||
InvalidStartIndexValueException, InvalidResultCountValueException, SQLException {
|
|
||||||
|
|
||||||
if (startIndex < GadgetDataServiceDAOConstants.Pagination.MIN_START_INDEX) {
|
|
||||||
throw new InvalidStartIndexValueException("Start index should be equal to " +
|
|
||||||
GadgetDataServiceDAOConstants.Pagination.MIN_START_INDEX + " or greater than that.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (resultCount < GadgetDataServiceDAOConstants.Pagination.MIN_RESULT_COUNT) {
|
|
||||||
throw new InvalidResultCountValueException("Result count should be equal to " +
|
|
||||||
GadgetDataServiceDAOConstants.Pagination.MIN_RESULT_COUNT + " or greater than that.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Map<String, Object> filters = this.extractDatabaseFiltersFromBean(extendedFilterSet);
|
|
||||||
|
|
||||||
Connection con;
|
|
||||||
PreparedStatement stmt = null;
|
|
||||||
ResultSet rs = null;
|
|
||||||
int tenantId = getAuthenticatedUserTenantDomainId();
|
|
||||||
List<DeviceWithDetails> filteredDevicesWithDetails = new ArrayList<>();
|
|
||||||
int totalRecordsCount = 0;
|
|
||||||
try {
|
|
||||||
con = this.getConnection();
|
|
||||||
String sql, advancedSqlFiltering = "";
|
|
||||||
// appending filters if exist, to support advanced filtering options
|
|
||||||
// [1] appending filter columns, if exist
|
|
||||||
if (filters != null && filters.size() > 0) {
|
|
||||||
for (String column : filters.keySet()) {
|
|
||||||
advancedSqlFiltering = advancedSqlFiltering + " AND POLICY__INFO." + column + " = ? ";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(APIUtil.isDeviceAdminUser()){
|
|
||||||
sql = "SELECT DEVICE_ID, DEVICE_IDENTIFICATION, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM " +
|
|
||||||
GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_1 + " POLICY__INFO WHERE TENANT_ID = ? " +
|
|
||||||
advancedSqlFiltering + "ORDER BY DEVICE_ID ASC LIMIT ?, ?";
|
|
||||||
}else{
|
|
||||||
sql = "SELECT POLICY__INFO.DEVICE_ID, POLICY__INFO.DEVICE_IDENTIFICATION, POLICY__INFO.PLATFORM, " +
|
|
||||||
"POLICY__INFO.OWNERSHIP, POLICY__INFO.CONNECTIVITY_STATUS FROM " +
|
|
||||||
GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_1 + " POLICY__INFO INNER JOIN DM_ENROLMENT " +
|
|
||||||
"ENR_DB ON ENR_DB.DEVICE_ID = POLICY__INFO.DEVICE_ID AND " +
|
|
||||||
"POLICY__INFO.TENANT_ID = ? AND ENR_DB.OWNER = ? " + advancedSqlFiltering + " ORDER BY " +
|
|
||||||
"POLICY__INFO.DEVICE_ID ASC LIMIT ?,?";
|
|
||||||
}
|
|
||||||
stmt = con.prepareStatement(sql);
|
|
||||||
// [2] appending filter column values, if exist
|
|
||||||
stmt.setInt(1, tenantId);
|
|
||||||
int index = 2;
|
|
||||||
if(!APIUtil.isDeviceAdminUser()){
|
|
||||||
stmt.setString(2, userName);
|
|
||||||
index = 3;
|
|
||||||
}
|
|
||||||
if (filters != null && filters.values().size() > 0) {
|
|
||||||
int i = index;
|
|
||||||
for (Object value : filters.values()) {
|
|
||||||
if (value instanceof Integer) {
|
|
||||||
stmt.setInt(i, (Integer) value);
|
|
||||||
} else if (value instanceof String) {
|
|
||||||
stmt.setString(i, (String) value);
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
stmt.setInt(i, startIndex);
|
|
||||||
stmt.setInt(++i, resultCount);
|
|
||||||
} else {
|
|
||||||
stmt.setInt(3, startIndex);
|
|
||||||
stmt.setInt(4, resultCount);
|
|
||||||
}
|
|
||||||
// executing query
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
// fetching query results
|
|
||||||
DeviceWithDetails filteredDeviceWithDetails;
|
|
||||||
while (rs.next()) {
|
|
||||||
filteredDeviceWithDetails = new DeviceWithDetails();
|
|
||||||
filteredDeviceWithDetails.setDeviceId(rs.getInt("DEVICE_ID"));
|
|
||||||
filteredDeviceWithDetails.setDeviceIdentification(rs.getString("DEVICE_IDENTIFICATION"));
|
|
||||||
filteredDeviceWithDetails.setPlatform(rs.getString("PLATFORM"));
|
|
||||||
filteredDeviceWithDetails.setOwnershipType(rs.getString("OWNERSHIP"));
|
|
||||||
filteredDeviceWithDetails.setConnectivityStatus(rs.getString("CONNECTIVITY_STATUS"));
|
|
||||||
filteredDevicesWithDetails.add(filteredDeviceWithDetails);
|
|
||||||
}
|
|
||||||
if(APIUtil.isDeviceAdminUser()){
|
|
||||||
sql = "SELECT COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + GadgetDataServiceDAOConstants.
|
|
||||||
DatabaseView.DEVICES_VIEW_1 + " WHERE TENANT_ID = ?";
|
|
||||||
}else{
|
|
||||||
sql = "SELECT COUNT(POLICY__INFO.DEVICE_ID) AS DEVICE_COUNT FROM "+GadgetDataServiceDAOConstants.
|
|
||||||
DatabaseView.DEVICES_VIEW_1+" POLICY__INFO INNER JOIN DM_ENROLMENT ENR_DB ON " +
|
|
||||||
"ENR_DB.DEVICE_ID = POLICY__INFO.DEVICE_ID AND POLICY__INFO.TENANT_ID = ? AND ENR_DB.OWNER = ? ";
|
|
||||||
}
|
|
||||||
stmt = con.prepareStatement(sql);
|
|
||||||
stmt.setInt(1, tenantId);
|
|
||||||
if(!APIUtil.isDeviceAdminUser()){
|
|
||||||
stmt.setString(2, userName);
|
|
||||||
}
|
|
||||||
// executing query
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
// fetching query results
|
|
||||||
while (rs.next()) {
|
|
||||||
totalRecordsCount = rs.getInt("DEVICE_COUNT");
|
|
||||||
}
|
|
||||||
} catch (DeviceAccessAuthorizationException e) {
|
|
||||||
String msg = "Error occurred while checking device access authorization";
|
|
||||||
log.error(msg, e);
|
|
||||||
} finally {
|
|
||||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
|
||||||
}
|
|
||||||
PaginationResult paginationResult = new PaginationResult();
|
|
||||||
paginationResult.setData(filteredDevicesWithDetails);
|
|
||||||
paginationResult.setRecordsTotal(totalRecordsCount);
|
|
||||||
return paginationResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PaginationResult getFeatureNonCompliantDevicesWithDetails(String featureCode,
|
|
||||||
BasicFilterSet basicFilterSet, int startIndex, int resultCount, String userName)
|
|
||||||
throws InvalidFeatureCodeValueException, InvalidStartIndexValueException,
|
|
||||||
InvalidResultCountValueException, SQLException {
|
|
||||||
|
|
||||||
if (featureCode == null || featureCode.isEmpty()) {
|
|
||||||
throw new InvalidFeatureCodeValueException("Feature code should not be either null or empty.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (startIndex < GadgetDataServiceDAOConstants.Pagination.MIN_START_INDEX) {
|
|
||||||
throw new InvalidStartIndexValueException("Start index should be equal to " +
|
|
||||||
GadgetDataServiceDAOConstants.Pagination.MIN_START_INDEX + " or greater than that.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (resultCount < GadgetDataServiceDAOConstants.Pagination.MIN_RESULT_COUNT) {
|
|
||||||
throw new InvalidResultCountValueException("Result count should be equal to " +
|
|
||||||
GadgetDataServiceDAOConstants.Pagination.MIN_RESULT_COUNT + " or greater than that.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Map<String, Object> filters = this.extractDatabaseFiltersFromBean(basicFilterSet);
|
|
||||||
|
|
||||||
Connection con;
|
|
||||||
PreparedStatement stmt = null;
|
|
||||||
ResultSet rs = null;
|
|
||||||
int tenantId = getAuthenticatedUserTenantDomainId();
|
|
||||||
List<DeviceWithDetails> filteredDevicesWithDetails = new ArrayList<>();
|
|
||||||
int totalRecordsCount = 0;
|
|
||||||
try {
|
|
||||||
con = this.getConnection();
|
|
||||||
String sql, advancedSqlFiltering = "";
|
|
||||||
// appending filters if exist, to support advanced filtering options
|
|
||||||
// [1] appending filter columns, if exist
|
|
||||||
if (filters != null && filters.size() > 0) {
|
|
||||||
for (String column : filters.keySet()) {
|
|
||||||
advancedSqlFiltering = advancedSqlFiltering + "AND FEATURE_INFO." + column + " = ? ";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(APIUtil.isDeviceAdminUser()){
|
|
||||||
sql = "SELECT DEVICE_ID, DEVICE_IDENTIFICATION, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM " +
|
|
||||||
GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2 +
|
|
||||||
" FEATURE_INFO WHERE TENANT_ID = ? AND FEATURE_CODE = ? " + advancedSqlFiltering +
|
|
||||||
"ORDER BY DEVICE_ID ASC LIMIT ?, ?";
|
|
||||||
}else{
|
|
||||||
sql = "SELECT FEATURE_INFO.DEVICE_ID, FEATURE_INFO.DEVICE_IDENTIFICATION, FEATURE_INFO.PLATFORM, " +
|
|
||||||
"FEATURE_INFO.OWNERSHIP, FEATURE_INFO.CONNECTIVITY_STATUS FROM " +
|
|
||||||
GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2 + " FEATURE_INFO INNER JOIN DM_ENROLMENT " +
|
|
||||||
"ENR_DB ON ENR_DB.DEVICE_ID = FEATURE_INFO.DEVICE_ID " +
|
|
||||||
" AND FEATURE_INFO.TENANT_ID = ? AND FEATURE_INFO.FEATURE_CODE = ? AND ENR_DB.OWNER = ? " +
|
|
||||||
advancedSqlFiltering + " ORDER BY DEVICE_ID ASC LIMIT ?,?";
|
|
||||||
}
|
|
||||||
|
|
||||||
stmt = con.prepareStatement(sql);
|
|
||||||
// [2] appending filter column values, if exist
|
|
||||||
stmt.setInt(1, tenantId);
|
|
||||||
stmt.setString(2, featureCode);
|
|
||||||
int index = 3;
|
|
||||||
if(!APIUtil.isDeviceAdminUser()){
|
|
||||||
stmt.setString(3, userName);
|
|
||||||
index = 4;
|
|
||||||
}
|
|
||||||
if (filters != null && filters.values().size() > 0) {
|
|
||||||
int i = index;
|
|
||||||
for (Object value : filters.values()) {
|
|
||||||
if (value instanceof Integer) {
|
|
||||||
stmt.setInt(i, (Integer) value);
|
|
||||||
} else if (value instanceof String) {
|
|
||||||
stmt.setString(i, (String) value);
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
stmt.setInt(i, startIndex);
|
|
||||||
stmt.setInt(++i, resultCount);
|
|
||||||
} else {
|
|
||||||
stmt.setInt(index, startIndex);
|
|
||||||
stmt.setInt(++index, resultCount);
|
|
||||||
}
|
|
||||||
// executing query
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
// fetching query results
|
|
||||||
DeviceWithDetails filteredDeviceWithDetails;
|
|
||||||
while (rs.next()) {
|
|
||||||
filteredDeviceWithDetails = new DeviceWithDetails();
|
|
||||||
filteredDeviceWithDetails.setDeviceId(rs.getInt("DEVICE_ID"));
|
|
||||||
filteredDeviceWithDetails.setDeviceIdentification(rs.getString("DEVICE_IDENTIFICATION"));
|
|
||||||
filteredDeviceWithDetails.setPlatform(rs.getString("PLATFORM"));
|
|
||||||
filteredDeviceWithDetails.setOwnershipType(rs.getString("OWNERSHIP"));
|
|
||||||
filteredDeviceWithDetails.setConnectivityStatus(rs.getString("CONNECTIVITY_STATUS"));
|
|
||||||
filteredDevicesWithDetails.add(filteredDeviceWithDetails);
|
|
||||||
}
|
|
||||||
if(APIUtil.isDeviceAdminUser()){
|
|
||||||
sql = "SELECT COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + GadgetDataServiceDAOConstants.
|
|
||||||
DatabaseView.DEVICES_VIEW_2 + " WHERE TENANT_ID = ? AND FEATURE_CODE = ?";
|
|
||||||
}else{
|
|
||||||
sql = "SELECT COUNT(FEATURE_INFO.DEVICE_ID) AS DEVICE_COUNT FROM " + GadgetDataServiceDAOConstants.
|
|
||||||
DatabaseView.DEVICES_VIEW_2 + " FEATURE_INFO INNER JOIN DM_ENROLMENT ENR_DB ON " +
|
|
||||||
"ENR_DB.DEVICE_ID = FEATURE_INFO.DEVICE_ID AND FEATURE_INFO.TENANT_ID = ? AND " +
|
|
||||||
"FEATURE_INFO.FEATURE_CODE = ? AND ENR_DB.OWNER = ? ";
|
|
||||||
}
|
|
||||||
stmt = con.prepareStatement(sql);
|
|
||||||
stmt.setInt(1, tenantId);
|
|
||||||
stmt.setString(2, featureCode);
|
|
||||||
if(!APIUtil.isDeviceAdminUser()){
|
|
||||||
stmt.setString(3, userName);
|
|
||||||
}
|
|
||||||
// executing query
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
// fetching query results
|
|
||||||
while (rs.next()) {
|
|
||||||
totalRecordsCount = rs.getInt("DEVICE_COUNT");
|
|
||||||
}
|
|
||||||
} catch (DeviceAccessAuthorizationException e) {
|
|
||||||
String msg = "Error occurred while checking device access authorization";
|
|
||||||
log.error(msg, e);
|
|
||||||
} finally {
|
|
||||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
|
||||||
}
|
|
||||||
PaginationResult paginationResult = new PaginationResult();
|
|
||||||
paginationResult.setData(filteredDevicesWithDetails);
|
|
||||||
paginationResult.setRecordsTotal(totalRecordsCount);
|
|
||||||
return paginationResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,298 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.analytics.dashboard.dao.impl;
|
|
||||||
|
|
||||||
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.bean.DeviceWithDetails;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.bean.DeviceCountByGroup;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.bean.BasicFilterSet;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.bean.ExtendedFilterSet;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.dao.AbstractGadgetDataServiceDAO;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.dao.GadgetDataServiceDAOConstants;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.exception.*;
|
|
||||||
import org.wso2.carbon.device.mgt.common.PaginationResult;
|
|
||||||
import org.wso2.carbon.device.mgt.core.dao.util.DeviceManagementDAOUtil;
|
|
||||||
|
|
||||||
import java.sql.Connection;
|
|
||||||
import java.sql.PreparedStatement;
|
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class MSSQLGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDAO {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PaginationResult getNonCompliantDeviceCountsByFeatures(int startIndex, int resultCount, String userName)
|
|
||||||
throws InvalidStartIndexValueException, InvalidResultCountValueException, SQLException {
|
|
||||||
|
|
||||||
if (startIndex < GadgetDataServiceDAOConstants.Pagination.MIN_START_INDEX) {
|
|
||||||
throw new InvalidStartIndexValueException("Start index should be equal to " +
|
|
||||||
GadgetDataServiceDAOConstants.Pagination.MIN_START_INDEX + " or greater than that.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (resultCount < GadgetDataServiceDAOConstants.Pagination.MIN_RESULT_COUNT) {
|
|
||||||
throw new InvalidResultCountValueException("Result count should be equal to " +
|
|
||||||
GadgetDataServiceDAOConstants.Pagination.MIN_RESULT_COUNT + " or greater than that.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Connection con;
|
|
||||||
PreparedStatement stmt = null;
|
|
||||||
ResultSet rs = null;
|
|
||||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
|
||||||
List<DeviceCountByGroup> filteredNonCompliantDeviceCountsByFeatures = new ArrayList<>();
|
|
||||||
int totalRecordsCount = 0;
|
|
||||||
try {
|
|
||||||
con = this.getConnection();
|
|
||||||
String sql = "SELECT FEATURE_CODE, COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + GadgetDataServiceDAOConstants.
|
|
||||||
DatabaseView.DEVICES_VIEW_2 + " WHERE TENANT_ID = ? GROUP BY FEATURE_CODE ORDER BY DEVICE_COUNT DESC " +
|
|
||||||
"OFFSET ? ROWS FETCH NEXT ? ROWS ONLY";
|
|
||||||
stmt = con.prepareStatement(sql);
|
|
||||||
stmt.setInt(1, tenantId);
|
|
||||||
stmt.setInt(2, startIndex);
|
|
||||||
stmt.setInt(3, resultCount);
|
|
||||||
|
|
||||||
// executing query
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
// fetching query results
|
|
||||||
DeviceCountByGroup filteredNonCompliantDeviceCountByFeature;
|
|
||||||
while (rs.next()) {
|
|
||||||
filteredNonCompliantDeviceCountByFeature = new DeviceCountByGroup();
|
|
||||||
filteredNonCompliantDeviceCountByFeature.setGroup(rs.getString("FEATURE_CODE"));
|
|
||||||
filteredNonCompliantDeviceCountByFeature.setDisplayNameForGroup(rs.getString("FEATURE_CODE"));
|
|
||||||
filteredNonCompliantDeviceCountByFeature.setDeviceCount(rs.getInt("DEVICE_COUNT"));
|
|
||||||
filteredNonCompliantDeviceCountsByFeatures.add(filteredNonCompliantDeviceCountByFeature);
|
|
||||||
}
|
|
||||||
// fetching total records count
|
|
||||||
sql = "SELECT COUNT(FEATURE_CODE) AS NON_COMPLIANT_FEATURE_COUNT FROM " +
|
|
||||||
"(SELECT DISTINCT FEATURE_CODE FROM " + GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2 +
|
|
||||||
" WHERE TENANT_ID = ?) NON_COMPLIANT_FEATURE_CODE";
|
|
||||||
|
|
||||||
stmt = con.prepareStatement(sql);
|
|
||||||
stmt.setInt(1, tenantId);
|
|
||||||
|
|
||||||
// executing query
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
// fetching query results
|
|
||||||
while (rs.next()) {
|
|
||||||
totalRecordsCount = rs.getInt("NON_COMPLIANT_FEATURE_COUNT");
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
|
||||||
}
|
|
||||||
PaginationResult paginationResult = new PaginationResult();
|
|
||||||
paginationResult.setData(filteredNonCompliantDeviceCountsByFeatures);
|
|
||||||
paginationResult.setRecordsTotal(totalRecordsCount);
|
|
||||||
return paginationResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PaginationResult getDevicesWithDetails(ExtendedFilterSet extendedFilterSet, int startIndex, int resultCount, String userName)
|
|
||||||
throws InvalidPotentialVulnerabilityValueException,
|
|
||||||
InvalidStartIndexValueException,
|
|
||||||
InvalidResultCountValueException,
|
|
||||||
SQLException {
|
|
||||||
|
|
||||||
if (startIndex < GadgetDataServiceDAOConstants.Pagination.MIN_START_INDEX) {
|
|
||||||
throw new InvalidStartIndexValueException("Start index should be equal to " +
|
|
||||||
GadgetDataServiceDAOConstants.Pagination.MIN_START_INDEX + " or greater than that.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (resultCount < GadgetDataServiceDAOConstants.Pagination.MIN_RESULT_COUNT) {
|
|
||||||
throw new InvalidResultCountValueException("Result count should be equal to " +
|
|
||||||
GadgetDataServiceDAOConstants.Pagination.MIN_RESULT_COUNT + " or greater than that.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Map<String, Object> filters = this.extractDatabaseFiltersFromBean(extendedFilterSet);
|
|
||||||
|
|
||||||
Connection con;
|
|
||||||
PreparedStatement stmt = null;
|
|
||||||
ResultSet rs = null;
|
|
||||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
|
||||||
List<DeviceWithDetails> filteredDevicesWithDetails = new ArrayList<>();
|
|
||||||
int totalRecordsCount = 0;
|
|
||||||
try {
|
|
||||||
con = this.getConnection();
|
|
||||||
String sql, advancedSqlFiltering = "";
|
|
||||||
// appending filters if exist, to support advanced filtering options
|
|
||||||
// [1] appending filter columns, if exist
|
|
||||||
if (filters != null && filters.size() > 0) {
|
|
||||||
for (String column : filters.keySet()) {
|
|
||||||
advancedSqlFiltering = advancedSqlFiltering + "AND " + column + " = ? ";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sql = "SELECT DEVICE_ID, DEVICE_IDENTIFICATION, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM " +
|
|
||||||
GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_1 + " WHERE TENANT_ID = ? " +
|
|
||||||
advancedSqlFiltering + "ORDER BY DEVICE_ID ASC OFFSET ? ROWS FETCH NEXT ? ROWS ONLY";
|
|
||||||
stmt = con.prepareStatement(sql);
|
|
||||||
// [2] appending filter column values, if exist
|
|
||||||
stmt.setInt(1, tenantId);
|
|
||||||
if (filters != null && filters.values().size() > 0) {
|
|
||||||
int i = 2;
|
|
||||||
for (Object value : filters.values()) {
|
|
||||||
if (value instanceof Integer) {
|
|
||||||
stmt.setInt(i, (Integer) value);
|
|
||||||
} else if (value instanceof String) {
|
|
||||||
stmt.setString(i, (String) value);
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
stmt.setInt(i, startIndex);
|
|
||||||
stmt.setInt(++i, resultCount);
|
|
||||||
} else {
|
|
||||||
stmt.setInt(2, startIndex);
|
|
||||||
stmt.setInt(3, resultCount);
|
|
||||||
}
|
|
||||||
// executing query
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
// fetching query results
|
|
||||||
DeviceWithDetails filteredDeviceWithDetails;
|
|
||||||
while (rs.next()) {
|
|
||||||
filteredDeviceWithDetails = new DeviceWithDetails();
|
|
||||||
filteredDeviceWithDetails.setDeviceId(rs.getInt("DEVICE_ID"));
|
|
||||||
filteredDeviceWithDetails.setDeviceIdentification(rs.getString("DEVICE_IDENTIFICATION"));
|
|
||||||
filteredDeviceWithDetails.setPlatform(rs.getString("PLATFORM"));
|
|
||||||
filteredDeviceWithDetails.setOwnershipType(rs.getString("OWNERSHIP"));
|
|
||||||
filteredDeviceWithDetails.setConnectivityStatus(rs.getString("CONNECTIVITY_STATUS"));
|
|
||||||
filteredDevicesWithDetails.add(filteredDeviceWithDetails);
|
|
||||||
}
|
|
||||||
|
|
||||||
// fetching total records count
|
|
||||||
sql = "SELECT COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + GadgetDataServiceDAOConstants.
|
|
||||||
DatabaseView.DEVICES_VIEW_1 + " WHERE TENANT_ID = ?";
|
|
||||||
|
|
||||||
stmt = con.prepareStatement(sql);
|
|
||||||
stmt.setInt(1, tenantId);
|
|
||||||
|
|
||||||
// executing query
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
// fetching query results
|
|
||||||
while (rs.next()) {
|
|
||||||
totalRecordsCount = rs.getInt("DEVICE_COUNT");
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
|
||||||
}
|
|
||||||
PaginationResult paginationResult = new PaginationResult();
|
|
||||||
paginationResult.setData(filteredDevicesWithDetails);
|
|
||||||
paginationResult.setRecordsTotal(totalRecordsCount);
|
|
||||||
return paginationResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PaginationResult getFeatureNonCompliantDevicesWithDetails(String featureCode,
|
|
||||||
BasicFilterSet basicFilterSet, int startIndex, int resultCount, String userName)
|
|
||||||
throws InvalidFeatureCodeValueException, InvalidStartIndexValueException,
|
|
||||||
InvalidResultCountValueException, SQLException {
|
|
||||||
|
|
||||||
if (featureCode == null || featureCode.isEmpty()) {
|
|
||||||
throw new InvalidFeatureCodeValueException("Feature code should not be either null or empty.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (startIndex < GadgetDataServiceDAOConstants.Pagination.MIN_START_INDEX) {
|
|
||||||
throw new InvalidStartIndexValueException("Start index should be equal to " +
|
|
||||||
GadgetDataServiceDAOConstants.Pagination.MIN_START_INDEX + " or greater than that.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (resultCount < GadgetDataServiceDAOConstants.Pagination.MIN_RESULT_COUNT) {
|
|
||||||
throw new InvalidResultCountValueException("Result count should be equal to " +
|
|
||||||
GadgetDataServiceDAOConstants.Pagination.MIN_RESULT_COUNT + " or greater than that.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Map<String, Object> filters = this.extractDatabaseFiltersFromBean(basicFilterSet);
|
|
||||||
|
|
||||||
Connection con;
|
|
||||||
PreparedStatement stmt = null;
|
|
||||||
ResultSet rs = null;
|
|
||||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
|
||||||
List<DeviceWithDetails> filteredDevicesWithDetails = new ArrayList<>();
|
|
||||||
int totalRecordsCount = 0;
|
|
||||||
try {
|
|
||||||
con = this.getConnection();
|
|
||||||
String sql, advancedSqlFiltering = "";
|
|
||||||
// appending filters if exist, to support advanced filtering options
|
|
||||||
// [1] appending filter columns, if exist
|
|
||||||
if (filters != null && filters.size() > 0) {
|
|
||||||
for (String column : filters.keySet()) {
|
|
||||||
advancedSqlFiltering = advancedSqlFiltering + "AND " + column + " = ? ";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sql = "SELECT DEVICE_ID, DEVICE_IDENTIFICATION, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM " +
|
|
||||||
GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2 + " WHERE TENANT_ID = ? AND FEATURE_CODE = ? " +
|
|
||||||
advancedSqlFiltering + "ORDER BY DEVICE_ID ASC OFFSET ? ROWS FETCH NEXT ? ROWS ONLY";
|
|
||||||
|
|
||||||
stmt = con.prepareStatement(sql);
|
|
||||||
// [2] appending filter column values, if exist
|
|
||||||
stmt.setInt(1, tenantId);
|
|
||||||
stmt.setString(2, featureCode);
|
|
||||||
if (filters != null && filters.values().size() > 0) {
|
|
||||||
int i = 3;
|
|
||||||
for (Object value : filters.values()) {
|
|
||||||
if (value instanceof Integer) {
|
|
||||||
stmt.setInt(i, (Integer) value);
|
|
||||||
} else if (value instanceof String) {
|
|
||||||
stmt.setString(i, (String) value);
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
stmt.setInt(i, startIndex);
|
|
||||||
stmt.setInt(++i, resultCount);
|
|
||||||
} else {
|
|
||||||
stmt.setInt(3, startIndex);
|
|
||||||
stmt.setInt(4, resultCount);
|
|
||||||
}
|
|
||||||
// executing query
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
// fetching query results
|
|
||||||
DeviceWithDetails filteredDeviceWithDetails;
|
|
||||||
while (rs.next()) {
|
|
||||||
filteredDeviceWithDetails = new DeviceWithDetails();
|
|
||||||
filteredDeviceWithDetails.setDeviceId(rs.getInt("DEVICE_ID"));
|
|
||||||
filteredDeviceWithDetails.setDeviceIdentification(rs.getString("DEVICE_IDENTIFICATION"));
|
|
||||||
filteredDeviceWithDetails.setPlatform(rs.getString("PLATFORM"));
|
|
||||||
filteredDeviceWithDetails.setOwnershipType(rs.getString("OWNERSHIP"));
|
|
||||||
filteredDeviceWithDetails.setConnectivityStatus(rs.getString("CONNECTIVITY_STATUS"));
|
|
||||||
filteredDevicesWithDetails.add(filteredDeviceWithDetails);
|
|
||||||
}
|
|
||||||
|
|
||||||
// fetching total records count
|
|
||||||
sql = "SELECT COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + GadgetDataServiceDAOConstants.
|
|
||||||
DatabaseView.DEVICES_VIEW_2 + " WHERE TENANT_ID = ? AND FEATURE_CODE = ?";
|
|
||||||
|
|
||||||
stmt = con.prepareStatement(sql);
|
|
||||||
stmt.setInt(1, tenantId);
|
|
||||||
stmt.setString(2, featureCode);
|
|
||||||
|
|
||||||
// executing query
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
// fetching query results
|
|
||||||
while (rs.next()) {
|
|
||||||
totalRecordsCount = rs.getInt("DEVICE_COUNT");
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
|
||||||
}
|
|
||||||
PaginationResult paginationResult = new PaginationResult();
|
|
||||||
paginationResult.setData(filteredDevicesWithDetails);
|
|
||||||
paginationResult.setRecordsTotal(totalRecordsCount);
|
|
||||||
return paginationResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,295 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.analytics.dashboard.dao.impl;
|
|
||||||
|
|
||||||
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.bean.DeviceWithDetails;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.bean.DeviceCountByGroup;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.bean.BasicFilterSet;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.bean.ExtendedFilterSet;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.dao.AbstractGadgetDataServiceDAO;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.dao.GadgetDataServiceDAOConstants;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.exception.*;
|
|
||||||
import org.wso2.carbon.device.mgt.common.PaginationResult;
|
|
||||||
import org.wso2.carbon.device.mgt.core.dao.util.DeviceManagementDAOUtil;
|
|
||||||
|
|
||||||
import java.sql.Connection;
|
|
||||||
import java.sql.PreparedStatement;
|
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class OracleGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDAO {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PaginationResult getNonCompliantDeviceCountsByFeatures(int startIndex, int resultCount, String userName)
|
|
||||||
throws InvalidStartIndexValueException, InvalidResultCountValueException, SQLException {
|
|
||||||
|
|
||||||
if (startIndex < GadgetDataServiceDAOConstants.Pagination.MIN_START_INDEX) {
|
|
||||||
throw new InvalidStartIndexValueException("Start index should be equal to " +
|
|
||||||
GadgetDataServiceDAOConstants.Pagination.MIN_START_INDEX + " or greater than that.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (resultCount < GadgetDataServiceDAOConstants.Pagination.MIN_RESULT_COUNT) {
|
|
||||||
throw new InvalidResultCountValueException("Result count should be equal to " +
|
|
||||||
GadgetDataServiceDAOConstants.Pagination.MIN_RESULT_COUNT + " or greater than that.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Connection con;
|
|
||||||
PreparedStatement stmt = null;
|
|
||||||
ResultSet rs = null;
|
|
||||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
|
||||||
List<DeviceCountByGroup> filteredNonCompliantDeviceCountsByFeatures = new ArrayList<>();
|
|
||||||
int totalRecordsCount = 0;
|
|
||||||
try {
|
|
||||||
con = this.getConnection();
|
|
||||||
String sql = "SELECT FEATURE_CODE, COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + GadgetDataServiceDAOConstants.
|
|
||||||
DatabaseView.DEVICES_VIEW_2
|
|
||||||
+ " WHERE TENANT_ID = ? GROUP BY FEATURE_CODE ORDER BY DEVICE_COUNT DESC "
|
|
||||||
+ "OFFSET ? ROWS FETCH NEXT ? ROWS ONLY";
|
|
||||||
stmt = con.prepareStatement(sql);
|
|
||||||
stmt.setInt(1, tenantId);
|
|
||||||
stmt.setInt(2, startIndex);
|
|
||||||
stmt.setInt(3, resultCount);
|
|
||||||
|
|
||||||
// executing query
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
// fetching query results
|
|
||||||
DeviceCountByGroup filteredNonCompliantDeviceCountByFeature;
|
|
||||||
while (rs.next()) {
|
|
||||||
filteredNonCompliantDeviceCountByFeature = new DeviceCountByGroup();
|
|
||||||
filteredNonCompliantDeviceCountByFeature.setGroup(rs.getString("FEATURE_CODE"));
|
|
||||||
filteredNonCompliantDeviceCountByFeature.setDisplayNameForGroup(rs.getString("FEATURE_CODE"));
|
|
||||||
filteredNonCompliantDeviceCountByFeature.setDeviceCount(rs.getInt("DEVICE_COUNT"));
|
|
||||||
filteredNonCompliantDeviceCountsByFeatures.add(filteredNonCompliantDeviceCountByFeature);
|
|
||||||
}
|
|
||||||
// fetching total records count
|
|
||||||
sql = "SELECT COUNT(FEATURE_CODE) AS NON_COMPLIANT_FEATURE_COUNT FROM " +
|
|
||||||
"(SELECT DISTINCT FEATURE_CODE FROM " + GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2 +
|
|
||||||
" WHERE TENANT_ID = ?) NON_COMPLIANT_FEATURE_CODE";
|
|
||||||
|
|
||||||
stmt = con.prepareStatement(sql);
|
|
||||||
stmt.setInt(1, tenantId);
|
|
||||||
|
|
||||||
// executing query
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
// fetching query results
|
|
||||||
while (rs.next()) {
|
|
||||||
totalRecordsCount = rs.getInt("NON_COMPLIANT_FEATURE_COUNT");
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
|
||||||
}
|
|
||||||
PaginationResult paginationResult = new PaginationResult();
|
|
||||||
paginationResult.setData(filteredNonCompliantDeviceCountsByFeatures);
|
|
||||||
paginationResult.setRecordsTotal(totalRecordsCount);
|
|
||||||
return paginationResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PaginationResult getDevicesWithDetails(ExtendedFilterSet extendedFilterSet, int startIndex, int resultCount, String userName)
|
|
||||||
throws InvalidPotentialVulnerabilityValueException, InvalidStartIndexValueException,
|
|
||||||
InvalidResultCountValueException, SQLException {
|
|
||||||
|
|
||||||
if (startIndex < GadgetDataServiceDAOConstants.Pagination.MIN_START_INDEX) {
|
|
||||||
throw new InvalidStartIndexValueException("Start index should be equal to " +
|
|
||||||
GadgetDataServiceDAOConstants.Pagination.MIN_START_INDEX + " or greater than that.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (resultCount < GadgetDataServiceDAOConstants.Pagination.MIN_RESULT_COUNT) {
|
|
||||||
throw new InvalidResultCountValueException("Result count should be equal to " +
|
|
||||||
GadgetDataServiceDAOConstants.Pagination.MIN_RESULT_COUNT + " or greater than that.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Map<String, Object> filters = this.extractDatabaseFiltersFromBean(extendedFilterSet);
|
|
||||||
|
|
||||||
Connection con;
|
|
||||||
PreparedStatement stmt = null;
|
|
||||||
ResultSet rs = null;
|
|
||||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
|
||||||
List<DeviceWithDetails> filteredDevicesWithDetails = new ArrayList<>();
|
|
||||||
int totalRecordsCount = 0;
|
|
||||||
try {
|
|
||||||
con = this.getConnection();
|
|
||||||
String sql, advancedSqlFiltering = "";
|
|
||||||
// appending filters if exist, to support advanced filtering options
|
|
||||||
// [1] appending filter columns, if exist
|
|
||||||
if (filters != null && filters.size() > 0) {
|
|
||||||
for (String column : filters.keySet()) {
|
|
||||||
advancedSqlFiltering = advancedSqlFiltering + "AND " + column + " = ? ";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sql = "SELECT DEVICE_ID, DEVICE_IDENTIFICATION, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM "
|
|
||||||
+ GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_1 + " WHERE TENANT_ID = ? "
|
|
||||||
+ advancedSqlFiltering + "ORDER BY DEVICE_ID ASC OFFSET ? ROWS FETCH NEXT ? ROWS ONLY";
|
|
||||||
stmt = con.prepareStatement(sql);
|
|
||||||
// [2] appending filter column values, if exist
|
|
||||||
stmt.setInt(1, tenantId);
|
|
||||||
if (filters != null && filters.values().size() > 0) {
|
|
||||||
int i = 2;
|
|
||||||
for (Object value : filters.values()) {
|
|
||||||
if (value instanceof Integer) {
|
|
||||||
stmt.setInt(i, (Integer) value);
|
|
||||||
} else if (value instanceof String) {
|
|
||||||
stmt.setString(i, (String) value);
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
stmt.setInt(i, startIndex);
|
|
||||||
stmt.setInt(++i, resultCount);
|
|
||||||
} else {
|
|
||||||
stmt.setInt(2, startIndex);
|
|
||||||
stmt.setInt(3, resultCount);
|
|
||||||
}
|
|
||||||
// executing query
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
// fetching query results
|
|
||||||
DeviceWithDetails filteredDeviceWithDetails;
|
|
||||||
while (rs.next()) {
|
|
||||||
filteredDeviceWithDetails = new DeviceWithDetails();
|
|
||||||
filteredDeviceWithDetails.setDeviceId(rs.getInt("DEVICE_ID"));
|
|
||||||
filteredDeviceWithDetails.setDeviceIdentification(rs.getString("DEVICE_IDENTIFICATION"));
|
|
||||||
filteredDeviceWithDetails.setPlatform(rs.getString("PLATFORM"));
|
|
||||||
filteredDeviceWithDetails.setOwnershipType(rs.getString("OWNERSHIP"));
|
|
||||||
filteredDeviceWithDetails.setConnectivityStatus(rs.getString("CONNECTIVITY_STATUS"));
|
|
||||||
filteredDevicesWithDetails.add(filteredDeviceWithDetails);
|
|
||||||
}
|
|
||||||
|
|
||||||
// fetching total records count
|
|
||||||
sql = "SELECT COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + GadgetDataServiceDAOConstants.
|
|
||||||
DatabaseView.DEVICES_VIEW_1 + " WHERE TENANT_ID = ?";
|
|
||||||
|
|
||||||
stmt = con.prepareStatement(sql);
|
|
||||||
stmt.setInt(1, tenantId);
|
|
||||||
|
|
||||||
// executing query
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
// fetching query results
|
|
||||||
while (rs.next()) {
|
|
||||||
totalRecordsCount = rs.getInt("DEVICE_COUNT");
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
|
||||||
}
|
|
||||||
PaginationResult paginationResult = new PaginationResult();
|
|
||||||
paginationResult.setData(filteredDevicesWithDetails);
|
|
||||||
paginationResult.setRecordsTotal(totalRecordsCount);
|
|
||||||
return paginationResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PaginationResult getFeatureNonCompliantDevicesWithDetails(String featureCode, BasicFilterSet basicFilterSet,
|
|
||||||
int startIndex, int resultCount, String userName) throws InvalidFeatureCodeValueException,
|
|
||||||
InvalidStartIndexValueException, InvalidResultCountValueException, SQLException {
|
|
||||||
|
|
||||||
if (featureCode == null || featureCode.isEmpty()) {
|
|
||||||
throw new InvalidFeatureCodeValueException("Feature code should not be either null or empty.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (startIndex < GadgetDataServiceDAOConstants.Pagination.MIN_START_INDEX) {
|
|
||||||
throw new InvalidStartIndexValueException("Start index should be equal to " +
|
|
||||||
GadgetDataServiceDAOConstants.Pagination.MIN_START_INDEX + " or greater than that.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (resultCount < GadgetDataServiceDAOConstants.Pagination.MIN_RESULT_COUNT) {
|
|
||||||
throw new InvalidResultCountValueException("Result count should be equal to " +
|
|
||||||
GadgetDataServiceDAOConstants.Pagination.MIN_RESULT_COUNT + " or greater than that.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Map<String, Object> filters = this.extractDatabaseFiltersFromBean(basicFilterSet);
|
|
||||||
|
|
||||||
Connection con;
|
|
||||||
PreparedStatement stmt = null;
|
|
||||||
ResultSet rs = null;
|
|
||||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
|
||||||
List<DeviceWithDetails> filteredDevicesWithDetails = new ArrayList<>();
|
|
||||||
int totalRecordsCount = 0;
|
|
||||||
try {
|
|
||||||
con = this.getConnection();
|
|
||||||
String sql, advancedSqlFiltering = "";
|
|
||||||
// appending filters if exist, to support advanced filtering options
|
|
||||||
// [1] appending filter columns, if exist
|
|
||||||
if (filters != null && filters.size() > 0) {
|
|
||||||
for (String column : filters.keySet()) {
|
|
||||||
advancedSqlFiltering = advancedSqlFiltering + "AND " + column + " = ? ";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sql = "SELECT DEVICE_ID, DEVICE_IDENTIFICATION, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM " +
|
|
||||||
GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2 + " WHERE TENANT_ID = ? AND FEATURE_CODE = ? " +
|
|
||||||
advancedSqlFiltering + "ORDER BY DEVICE_ID ASC OFFSET ? ROWS FETCH NEXT ? ROWS ONLY";
|
|
||||||
stmt = con.prepareStatement(sql);
|
|
||||||
// [2] appending filter column values, if exist
|
|
||||||
stmt.setInt(1, tenantId);
|
|
||||||
stmt.setString(2, featureCode);
|
|
||||||
if (filters != null && filters.values().size() > 0) {
|
|
||||||
int i = 3;
|
|
||||||
for (Object value : filters.values()) {
|
|
||||||
if (value instanceof Integer) {
|
|
||||||
stmt.setInt(i, (Integer) value);
|
|
||||||
} else if (value instanceof String) {
|
|
||||||
stmt.setString(i, (String) value);
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
stmt.setInt(i, startIndex);
|
|
||||||
stmt.setInt(++i, resultCount);
|
|
||||||
} else {
|
|
||||||
stmt.setInt(3, startIndex);
|
|
||||||
stmt.setInt(4, resultCount);
|
|
||||||
}
|
|
||||||
// executing query
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
// fetching query results
|
|
||||||
DeviceWithDetails filteredDeviceWithDetails;
|
|
||||||
while (rs.next()) {
|
|
||||||
filteredDeviceWithDetails = new DeviceWithDetails();
|
|
||||||
filteredDeviceWithDetails.setDeviceId(rs.getInt("DEVICE_ID"));
|
|
||||||
filteredDeviceWithDetails.setDeviceIdentification(rs.getString("DEVICE_IDENTIFICATION"));
|
|
||||||
filteredDeviceWithDetails.setPlatform(rs.getString("PLATFORM"));
|
|
||||||
filteredDeviceWithDetails.setOwnershipType(rs.getString("OWNERSHIP"));
|
|
||||||
filteredDeviceWithDetails.setConnectivityStatus(rs.getString("CONNECTIVITY_STATUS"));
|
|
||||||
filteredDevicesWithDetails.add(filteredDeviceWithDetails);
|
|
||||||
}
|
|
||||||
|
|
||||||
// fetching total records count
|
|
||||||
sql = "SELECT COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + GadgetDataServiceDAOConstants.
|
|
||||||
DatabaseView.DEVICES_VIEW_2 + " WHERE TENANT_ID = ? AND FEATURE_CODE = ?";
|
|
||||||
|
|
||||||
stmt = con.prepareStatement(sql);
|
|
||||||
stmt.setInt(1, tenantId);
|
|
||||||
stmt.setString(2, featureCode);
|
|
||||||
|
|
||||||
// executing query
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
// fetching query results
|
|
||||||
while (rs.next()) {
|
|
||||||
totalRecordsCount = rs.getInt("DEVICE_COUNT");
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
|
||||||
}
|
|
||||||
PaginationResult paginationResult = new PaginationResult();
|
|
||||||
paginationResult.setData(filteredDevicesWithDetails);
|
|
||||||
paginationResult.setRecordsTotal(totalRecordsCount);
|
|
||||||
return paginationResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,297 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.analytics.dashboard.dao.impl;
|
|
||||||
|
|
||||||
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.bean.DeviceWithDetails;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.bean.DeviceCountByGroup;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.bean.BasicFilterSet;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.bean.ExtendedFilterSet;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.dao.AbstractGadgetDataServiceDAO;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.dao.GadgetDataServiceDAOConstants;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.exception.*;
|
|
||||||
import org.wso2.carbon.device.mgt.common.PaginationResult;
|
|
||||||
import org.wso2.carbon.device.mgt.core.dao.util.DeviceManagementDAOUtil;
|
|
||||||
|
|
||||||
import java.sql.Connection;
|
|
||||||
import java.sql.PreparedStatement;
|
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class PostgreSQLGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDAO {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PaginationResult getNonCompliantDeviceCountsByFeatures(int startIndex, int resultCount, String userName)
|
|
||||||
throws InvalidStartIndexValueException, InvalidResultCountValueException, SQLException {
|
|
||||||
|
|
||||||
if (startIndex < GadgetDataServiceDAOConstants.Pagination.MIN_START_INDEX) {
|
|
||||||
throw new InvalidStartIndexValueException("Start index should be equal to " +
|
|
||||||
GadgetDataServiceDAOConstants.Pagination.MIN_START_INDEX + " or greater than that.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (resultCount < GadgetDataServiceDAOConstants.Pagination.MIN_RESULT_COUNT) {
|
|
||||||
throw new InvalidResultCountValueException("Result count should be equal to " +
|
|
||||||
GadgetDataServiceDAOConstants.Pagination.MIN_RESULT_COUNT + " or greater than that.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Connection con;
|
|
||||||
PreparedStatement stmt = null;
|
|
||||||
ResultSet rs = null;
|
|
||||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
|
||||||
List<DeviceCountByGroup> filteredNonCompliantDeviceCountsByFeatures = new ArrayList<>();
|
|
||||||
int totalRecordsCount = 0;
|
|
||||||
try {
|
|
||||||
con = this.getConnection();
|
|
||||||
String sql = "SELECT FEATURE_CODE, COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + GadgetDataServiceDAOConstants.
|
|
||||||
DatabaseView.DEVICES_VIEW_2 + " WHERE TENANT_ID = ? GROUP BY FEATURE_CODE " +
|
|
||||||
"ORDER BY DEVICE_COUNT DESC OFFSET ? LIMIT ?";
|
|
||||||
|
|
||||||
stmt = con.prepareStatement(sql);
|
|
||||||
stmt.setInt(1, tenantId);
|
|
||||||
stmt.setInt(2, startIndex);
|
|
||||||
stmt.setInt(3, resultCount);
|
|
||||||
|
|
||||||
// executing query
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
// fetching query results
|
|
||||||
DeviceCountByGroup filteredNonCompliantDeviceCountByFeature;
|
|
||||||
while (rs.next()) {
|
|
||||||
filteredNonCompliantDeviceCountByFeature = new DeviceCountByGroup();
|
|
||||||
filteredNonCompliantDeviceCountByFeature.setGroup(rs.getString("FEATURE_CODE"));
|
|
||||||
filteredNonCompliantDeviceCountByFeature.setDisplayNameForGroup(rs.getString("FEATURE_CODE"));
|
|
||||||
filteredNonCompliantDeviceCountByFeature.setDeviceCount(rs.getInt("DEVICE_COUNT"));
|
|
||||||
filteredNonCompliantDeviceCountsByFeatures.add(filteredNonCompliantDeviceCountByFeature);
|
|
||||||
}
|
|
||||||
// fetching total records count
|
|
||||||
sql = "SELECT COUNT(FEATURE_CODE) AS NON_COMPLIANT_FEATURE_COUNT FROM " +
|
|
||||||
"(SELECT DISTINCT FEATURE_CODE FROM " + GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2 +
|
|
||||||
" WHERE TENANT_ID = ?) NON_COMPLIANT_FEATURE_CODE";
|
|
||||||
|
|
||||||
stmt = con.prepareStatement(sql);
|
|
||||||
stmt.setInt(1, tenantId);
|
|
||||||
|
|
||||||
// executing query
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
// fetching query results
|
|
||||||
while (rs.next()) {
|
|
||||||
totalRecordsCount = rs.getInt("NON_COMPLIANT_FEATURE_COUNT");
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
|
||||||
}
|
|
||||||
PaginationResult paginationResult = new PaginationResult();
|
|
||||||
paginationResult.setData(filteredNonCompliantDeviceCountsByFeatures);
|
|
||||||
paginationResult.setRecordsTotal(totalRecordsCount);
|
|
||||||
return paginationResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PaginationResult getDevicesWithDetails(ExtendedFilterSet extendedFilterSet, int startIndex, int resultCount, String userName)
|
|
||||||
throws InvalidPotentialVulnerabilityValueException, InvalidStartIndexValueException,
|
|
||||||
InvalidResultCountValueException, SQLException {
|
|
||||||
|
|
||||||
if (startIndex < GadgetDataServiceDAOConstants.Pagination.MIN_START_INDEX) {
|
|
||||||
throw new InvalidStartIndexValueException("Start index should be equal to " +
|
|
||||||
GadgetDataServiceDAOConstants.Pagination.MIN_START_INDEX + " or greater than that.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (resultCount < GadgetDataServiceDAOConstants.Pagination.MIN_RESULT_COUNT) {
|
|
||||||
throw new InvalidResultCountValueException("Result count should be equal to " +
|
|
||||||
GadgetDataServiceDAOConstants.Pagination.MIN_RESULT_COUNT + " or greater than that.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Map<String, Object> filters = this.extractDatabaseFiltersFromBean(extendedFilterSet);
|
|
||||||
|
|
||||||
Connection con;
|
|
||||||
PreparedStatement stmt = null;
|
|
||||||
ResultSet rs = null;
|
|
||||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
|
||||||
List<DeviceWithDetails> filteredDevicesWithDetails = new ArrayList<>();
|
|
||||||
int totalRecordsCount = 0;
|
|
||||||
try {
|
|
||||||
con = this.getConnection();
|
|
||||||
String sql, advancedSqlFiltering = "";
|
|
||||||
// appending filters if exist, to support advanced filtering options
|
|
||||||
// [1] appending filter columns, if exist
|
|
||||||
if (filters != null && filters.size() > 0) {
|
|
||||||
for (String column : filters.keySet()) {
|
|
||||||
advancedSqlFiltering = advancedSqlFiltering + "AND " + column + " = ? ";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sql = "SELECT DEVICE_ID, DEVICE_IDENTIFICATION, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM " +
|
|
||||||
GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_1 + " WHERE TENANT_ID = ? " +
|
|
||||||
advancedSqlFiltering + "ORDER BY DEVICE_ID ASC OFFSET ? LIMIT ?";
|
|
||||||
|
|
||||||
stmt = con.prepareStatement(sql);
|
|
||||||
// [2] appending filter column values, if exist
|
|
||||||
stmt.setInt(1, tenantId);
|
|
||||||
if (filters != null && filters.values().size() > 0) {
|
|
||||||
int i = 2;
|
|
||||||
for (Object value : filters.values()) {
|
|
||||||
if (value instanceof Integer) {
|
|
||||||
stmt.setInt(i, (Integer) value);
|
|
||||||
} else if (value instanceof String) {
|
|
||||||
stmt.setString(i, (String) value);
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
stmt.setInt(i, startIndex);
|
|
||||||
stmt.setInt(++i, resultCount);
|
|
||||||
} else {
|
|
||||||
stmt.setInt(2, startIndex);
|
|
||||||
stmt.setInt(3, resultCount);
|
|
||||||
}
|
|
||||||
// executing query
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
// fetching query results
|
|
||||||
DeviceWithDetails filteredDeviceWithDetails;
|
|
||||||
while (rs.next()) {
|
|
||||||
filteredDeviceWithDetails = new DeviceWithDetails();
|
|
||||||
filteredDeviceWithDetails.setDeviceId(rs.getInt("DEVICE_ID"));
|
|
||||||
filteredDeviceWithDetails.setDeviceIdentification(rs.getString("DEVICE_IDENTIFICATION"));
|
|
||||||
filteredDeviceWithDetails.setPlatform(rs.getString("PLATFORM"));
|
|
||||||
filteredDeviceWithDetails.setOwnershipType(rs.getString("OWNERSHIP"));
|
|
||||||
filteredDeviceWithDetails.setConnectivityStatus(rs.getString("CONNECTIVITY_STATUS"));
|
|
||||||
filteredDevicesWithDetails.add(filteredDeviceWithDetails);
|
|
||||||
}
|
|
||||||
|
|
||||||
// fetching total records count
|
|
||||||
sql = "SELECT COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + GadgetDataServiceDAOConstants.
|
|
||||||
DatabaseView.DEVICES_VIEW_1 + " WHERE TENANT_ID = ?";
|
|
||||||
|
|
||||||
stmt = con.prepareStatement(sql);
|
|
||||||
stmt.setInt(1, tenantId);
|
|
||||||
|
|
||||||
// executing query
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
// fetching query results
|
|
||||||
while (rs.next()) {
|
|
||||||
totalRecordsCount = rs.getInt("DEVICE_COUNT");
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
|
||||||
}
|
|
||||||
PaginationResult paginationResult = new PaginationResult();
|
|
||||||
paginationResult.setData(filteredDevicesWithDetails);
|
|
||||||
paginationResult.setRecordsTotal(totalRecordsCount);
|
|
||||||
return paginationResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PaginationResult getFeatureNonCompliantDevicesWithDetails(String featureCode, BasicFilterSet basicFilterSet,
|
|
||||||
int startIndex, int resultCount, String userName) throws InvalidFeatureCodeValueException,
|
|
||||||
InvalidStartIndexValueException, InvalidResultCountValueException, SQLException {
|
|
||||||
|
|
||||||
if (featureCode == null || featureCode.isEmpty()) {
|
|
||||||
throw new InvalidFeatureCodeValueException("Feature code should not be either null or empty.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (startIndex < GadgetDataServiceDAOConstants.Pagination.MIN_START_INDEX) {
|
|
||||||
throw new InvalidStartIndexValueException("Start index should be equal to " +
|
|
||||||
GadgetDataServiceDAOConstants.Pagination.MIN_START_INDEX + " or greater than that.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (resultCount < GadgetDataServiceDAOConstants.Pagination.MIN_RESULT_COUNT) {
|
|
||||||
throw new InvalidResultCountValueException("Result count should be equal to " +
|
|
||||||
GadgetDataServiceDAOConstants.Pagination.MIN_RESULT_COUNT + " or greater than that.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Map<String, Object> filters = this.extractDatabaseFiltersFromBean(basicFilterSet);
|
|
||||||
|
|
||||||
Connection con;
|
|
||||||
PreparedStatement stmt = null;
|
|
||||||
ResultSet rs = null;
|
|
||||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
|
||||||
List<DeviceWithDetails> filteredDevicesWithDetails = new ArrayList<>();
|
|
||||||
int totalRecordsCount = 0;
|
|
||||||
try {
|
|
||||||
con = this.getConnection();
|
|
||||||
String sql, advancedSqlFiltering = "";
|
|
||||||
// appending filters if exist, to support advanced filtering options
|
|
||||||
// [1] appending filter columns, if exist
|
|
||||||
if (filters != null && filters.size() > 0) {
|
|
||||||
for (String column : filters.keySet()) {
|
|
||||||
advancedSqlFiltering = advancedSqlFiltering + "AND " + column + " = ? ";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sql = "SELECT DEVICE_ID, DEVICE_IDENTIFICATION, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM " +
|
|
||||||
GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2 + " WHERE TENANT_ID = ? AND FEATURE_CODE = ? " +
|
|
||||||
advancedSqlFiltering + "ORDER BY DEVICE_ID ASC OFFSET ? LIMIT ?";
|
|
||||||
|
|
||||||
stmt = con.prepareStatement(sql);
|
|
||||||
// [2] appending filter column values, if exist
|
|
||||||
stmt.setInt(1, tenantId);
|
|
||||||
stmt.setString(2, featureCode);
|
|
||||||
if (filters != null && filters.values().size() > 0) {
|
|
||||||
int i = 3;
|
|
||||||
for (Object value : filters.values()) {
|
|
||||||
if (value instanceof Integer) {
|
|
||||||
stmt.setInt(i, (Integer) value);
|
|
||||||
} else if (value instanceof String) {
|
|
||||||
stmt.setString(i, (String) value);
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
stmt.setInt(i, startIndex);
|
|
||||||
stmt.setInt(++i, resultCount);
|
|
||||||
} else {
|
|
||||||
stmt.setInt(3, startIndex);
|
|
||||||
stmt.setInt(4, resultCount);
|
|
||||||
}
|
|
||||||
// executing query
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
// fetching query results
|
|
||||||
DeviceWithDetails filteredDeviceWithDetails;
|
|
||||||
while (rs.next()) {
|
|
||||||
filteredDeviceWithDetails = new DeviceWithDetails();
|
|
||||||
filteredDeviceWithDetails.setDeviceId(rs.getInt("DEVICE_ID"));
|
|
||||||
filteredDeviceWithDetails.setDeviceIdentification(rs.getString("DEVICE_IDENTIFICATION"));
|
|
||||||
filteredDeviceWithDetails.setPlatform(rs.getString("PLATFORM"));
|
|
||||||
filteredDeviceWithDetails.setOwnershipType(rs.getString("OWNERSHIP"));
|
|
||||||
filteredDeviceWithDetails.setConnectivityStatus(rs.getString("CONNECTIVITY_STATUS"));
|
|
||||||
filteredDevicesWithDetails.add(filteredDeviceWithDetails);
|
|
||||||
}
|
|
||||||
|
|
||||||
// fetching total records count
|
|
||||||
sql = "SELECT COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + GadgetDataServiceDAOConstants.
|
|
||||||
DatabaseView.DEVICES_VIEW_2 + " WHERE TENANT_ID = ? AND FEATURE_CODE = ?";
|
|
||||||
|
|
||||||
stmt = con.prepareStatement(sql);
|
|
||||||
stmt.setInt(1, tenantId);
|
|
||||||
stmt.setString(2, featureCode);
|
|
||||||
|
|
||||||
// executing query
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
// fetching query results
|
|
||||||
while (rs.next()) {
|
|
||||||
totalRecordsCount = rs.getInt("DEVICE_COUNT");
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
|
||||||
}
|
|
||||||
PaginationResult paginationResult = new PaginationResult();
|
|
||||||
paginationResult.setData(filteredDevicesWithDetails);
|
|
||||||
paginationResult.setRecordsTotal(totalRecordsCount);
|
|
||||||
return paginationResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,80 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.analytics.dashboard.exception;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Custom exception class for communicating data access layer issues
|
|
||||||
* relevant to Gadget Data Service DAO layer.
|
|
||||||
* (In this particular instance, SQL exceptions related to database access).
|
|
||||||
*/
|
|
||||||
public class DataAccessLayerException extends Exception {
|
|
||||||
|
|
||||||
private String errorMessage;
|
|
||||||
private static final long serialVersionUID = 2021891706072918864L;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructs a new exception with the specific error message and nested exception.
|
|
||||||
* @param errorMessage specific error message.
|
|
||||||
* @param nestedException Nested exception.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public DataAccessLayerException(String errorMessage, Exception nestedException) {
|
|
||||||
super(errorMessage, nestedException);
|
|
||||||
setErrorMessage(errorMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructs a new exception with the specific error message and cause.
|
|
||||||
* @param errorMessage Specific error message.
|
|
||||||
* @param cause Cause of this exception.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public DataAccessLayerException(String errorMessage, Throwable cause) {
|
|
||||||
super(errorMessage, cause);
|
|
||||||
setErrorMessage(errorMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructs a new exception with the specific error message.
|
|
||||||
* @param errorMessage Specific error message.
|
|
||||||
*/
|
|
||||||
public DataAccessLayerException(String errorMessage) {
|
|
||||||
super(errorMessage);
|
|
||||||
setErrorMessage(errorMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructs a new exception with the specific error message and cause.
|
|
||||||
* @param cause Cause of this exception.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public DataAccessLayerException(Throwable cause) {
|
|
||||||
super(cause);
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public String getErrorMessage() {
|
|
||||||
return errorMessage;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setErrorMessage(String errorMessage) {
|
|
||||||
this.errorMessage = errorMessage;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,80 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.analytics.dashboard.exception;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Custom exception class for catching invalid parameter values,
|
|
||||||
* relevant to Gadget Data Service DAO layer.
|
|
||||||
*/
|
|
||||||
public class InvalidFeatureCodeValueException extends Exception {
|
|
||||||
|
|
||||||
private String errorMessage;
|
|
||||||
private static final long serialVersionUID = 2021891706072918864L;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructs a new exception with the specific error message and nested exception.
|
|
||||||
* @param errorMessage specific error message.
|
|
||||||
* @param nestedException Nested exception.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public InvalidFeatureCodeValueException(String errorMessage, Exception nestedException) {
|
|
||||||
super(errorMessage, nestedException);
|
|
||||||
setErrorMessage(errorMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructs a new exception with the specific error message and cause.
|
|
||||||
* @param errorMessage Specific error message.
|
|
||||||
* @param cause Cause of this exception.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public InvalidFeatureCodeValueException(String errorMessage, Throwable cause) {
|
|
||||||
super(errorMessage, cause);
|
|
||||||
setErrorMessage(errorMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructs a new exception with the specific error message.
|
|
||||||
* @param errorMessage Specific error message.
|
|
||||||
*/
|
|
||||||
public InvalidFeatureCodeValueException(String errorMessage) {
|
|
||||||
super(errorMessage);
|
|
||||||
setErrorMessage(errorMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructs a new exception with the specific error message and cause.
|
|
||||||
* @param cause Cause of this exception.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public InvalidFeatureCodeValueException(Throwable cause) {
|
|
||||||
super(cause);
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public String getErrorMessage() {
|
|
||||||
return errorMessage;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setErrorMessage(String errorMessage) {
|
|
||||||
this.errorMessage = errorMessage;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -1,79 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.analytics.dashboard.exception;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Custom exception class for catching invalid parameter values,
|
|
||||||
* relevant to Gadget Data Service DAO layer.
|
|
||||||
*/
|
|
||||||
public class InvalidPotentialVulnerabilityValueException extends Exception {
|
|
||||||
|
|
||||||
private String errorMessage;
|
|
||||||
private static final long serialVersionUID = 2021891706072918864L;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructs a new exception with the specific error message and nested exception.
|
|
||||||
* @param errorMessage specific error message.
|
|
||||||
* @param nestedException Nested exception.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public InvalidPotentialVulnerabilityValueException(String errorMessage, Exception nestedException) {
|
|
||||||
super(errorMessage, nestedException);
|
|
||||||
setErrorMessage(errorMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructs a new exception with the specific error message and cause.
|
|
||||||
* @param errorMessage Specific error message.
|
|
||||||
* @param cause Cause of this exception.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public InvalidPotentialVulnerabilityValueException(String errorMessage, Throwable cause) {
|
|
||||||
super(errorMessage, cause);
|
|
||||||
setErrorMessage(errorMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructs a new exception with the specific error message.
|
|
||||||
* @param errorMessage Specific error message.
|
|
||||||
*/
|
|
||||||
public InvalidPotentialVulnerabilityValueException(String errorMessage) {
|
|
||||||
super(errorMessage);
|
|
||||||
setErrorMessage(errorMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructs a new exception with the specific error message and cause.
|
|
||||||
* @param cause Cause of this exception.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public InvalidPotentialVulnerabilityValueException(Throwable cause) {
|
|
||||||
super(cause);
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public String getErrorMessage() {
|
|
||||||
return errorMessage;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setErrorMessage(String errorMessage) {
|
|
||||||
this.errorMessage = errorMessage;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,80 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.analytics.dashboard.exception;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Custom exception class for catching invalid parameter values,
|
|
||||||
* relevant to Gadget Data Service DAO layer.
|
|
||||||
*/
|
|
||||||
public class InvalidResultCountValueException extends Exception {
|
|
||||||
|
|
||||||
private String errorMessage;
|
|
||||||
private static final long serialVersionUID = 2021891706072918864L;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructs a new exception with the specific error message and nested exception.
|
|
||||||
* @param errorMessage specific error message.
|
|
||||||
* @param nestedException Nested exception.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public InvalidResultCountValueException(String errorMessage, Exception nestedException) {
|
|
||||||
super(errorMessage, nestedException);
|
|
||||||
setErrorMessage(errorMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructs a new exception with the specific error message and cause.
|
|
||||||
* @param errorMessage Specific error message.
|
|
||||||
* @param cause Cause of this exception.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public InvalidResultCountValueException(String errorMessage, Throwable cause) {
|
|
||||||
super(errorMessage, cause);
|
|
||||||
setErrorMessage(errorMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructs a new exception with the specific error message.
|
|
||||||
* @param errorMessage Specific error message.
|
|
||||||
*/
|
|
||||||
public InvalidResultCountValueException(String errorMessage) {
|
|
||||||
super(errorMessage);
|
|
||||||
setErrorMessage(errorMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructs a new exception with the specific error message and cause.
|
|
||||||
* @param cause Cause of this exception.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public InvalidResultCountValueException(Throwable cause) {
|
|
||||||
super(cause);
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public String getErrorMessage() {
|
|
||||||
return errorMessage;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setErrorMessage(String errorMessage) {
|
|
||||||
this.errorMessage = errorMessage;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -1,80 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.analytics.dashboard.exception;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Custom exception class for catching invalid parameter values,
|
|
||||||
* relevant to Gadget Data Service DAO layer.
|
|
||||||
*/
|
|
||||||
public class InvalidStartIndexValueException extends Exception {
|
|
||||||
|
|
||||||
private String errorMessage;
|
|
||||||
private static final long serialVersionUID = 2021891706072918864L;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructs a new exception with the specific error message and nested exception.
|
|
||||||
* @param errorMessage specific error message.
|
|
||||||
* @param nestedException Nested exception.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public InvalidStartIndexValueException(String errorMessage, Exception nestedException) {
|
|
||||||
super(errorMessage, nestedException);
|
|
||||||
setErrorMessage(errorMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructs a new exception with the specific error message and cause.
|
|
||||||
* @param errorMessage Specific error message.
|
|
||||||
* @param cause Cause of this exception.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public InvalidStartIndexValueException(String errorMessage, Throwable cause) {
|
|
||||||
super(errorMessage, cause);
|
|
||||||
setErrorMessage(errorMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructs a new exception with the specific error message.
|
|
||||||
* @param errorMessage Specific error message.
|
|
||||||
*/
|
|
||||||
public InvalidStartIndexValueException(String errorMessage) {
|
|
||||||
super(errorMessage);
|
|
||||||
setErrorMessage(errorMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructs a new exception with the specific error message and cause.
|
|
||||||
* @param cause Cause of this exception.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public InvalidStartIndexValueException(Throwable cause) {
|
|
||||||
super(cause);
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public String getErrorMessage() {
|
|
||||||
return errorMessage;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setErrorMessage(String errorMessage) {
|
|
||||||
this.errorMessage = errorMessage;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -1,281 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.analytics.dashboard.impl;
|
|
||||||
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.GadgetDataService;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.bean.DeviceCountByGroup;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.bean.DeviceWithDetails;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.bean.ExtendedFilterSet;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.dao.GadgetDataServiceDAOFactory;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.bean.BasicFilterSet;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.exception.*;
|
|
||||||
import org.wso2.carbon.device.mgt.common.PaginationResult;
|
|
||||||
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Implementation class of GadgetDataService.
|
|
||||||
*/
|
|
||||||
public class GadgetDataServiceImpl implements GadgetDataService {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public DeviceCountByGroup getDeviceCount(ExtendedFilterSet extendedFilterSet, String userName)
|
|
||||||
throws InvalidPotentialVulnerabilityValueException, DataAccessLayerException {
|
|
||||||
DeviceCountByGroup filteredDeviceCount;
|
|
||||||
try {
|
|
||||||
|
|
||||||
GadgetDataServiceDAOFactory.openConnection();
|
|
||||||
filteredDeviceCount = GadgetDataServiceDAOFactory.getGadgetDataServiceDAO().
|
|
||||||
getDeviceCount(extendedFilterSet, userName);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new DataAccessLayerException("Error in either opening a database connection or " +
|
|
||||||
"accessing the database to fetch corresponding results.", e);
|
|
||||||
} finally {
|
|
||||||
GadgetDataServiceDAOFactory.closeConnection();
|
|
||||||
}
|
|
||||||
return filteredDeviceCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public DeviceCountByGroup getFeatureNonCompliantDeviceCount(String featureCode, BasicFilterSet basicFilterSet, String userName)
|
|
||||||
throws InvalidFeatureCodeValueException, DataAccessLayerException {
|
|
||||||
DeviceCountByGroup featureNonCompliantDeviceCount;
|
|
||||||
try {
|
|
||||||
GadgetDataServiceDAOFactory.openConnection();
|
|
||||||
featureNonCompliantDeviceCount = GadgetDataServiceDAOFactory.
|
|
||||||
getGadgetDataServiceDAO().getFeatureNonCompliantDeviceCount(featureCode, basicFilterSet, userName);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new DataAccessLayerException("Error in either opening a database connection or " +
|
|
||||||
"accessing the database to fetch corresponding results.", e);
|
|
||||||
} finally {
|
|
||||||
GadgetDataServiceDAOFactory.closeConnection();
|
|
||||||
}
|
|
||||||
return featureNonCompliantDeviceCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public DeviceCountByGroup getTotalDeviceCount(String userName) throws DataAccessLayerException {
|
|
||||||
DeviceCountByGroup totalDeviceCount;
|
|
||||||
try {
|
|
||||||
GadgetDataServiceDAOFactory.openConnection();
|
|
||||||
totalDeviceCount = GadgetDataServiceDAOFactory.getGadgetDataServiceDAO().getTotalDeviceCount(userName);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new DataAccessLayerException("Error in either opening a database connection or " +
|
|
||||||
"accessing the database to fetch corresponding results.", e);
|
|
||||||
} finally {
|
|
||||||
GadgetDataServiceDAOFactory.closeConnection();
|
|
||||||
}
|
|
||||||
return totalDeviceCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<DeviceCountByGroup> getDeviceCountsByConnectivityStatuses(String userName) throws DataAccessLayerException {
|
|
||||||
List<DeviceCountByGroup> deviceCountsByConnectivityStatuses;
|
|
||||||
try {
|
|
||||||
GadgetDataServiceDAOFactory.openConnection();
|
|
||||||
deviceCountsByConnectivityStatuses = GadgetDataServiceDAOFactory.
|
|
||||||
getGadgetDataServiceDAO().getDeviceCountsByConnectivityStatuses(userName);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new DataAccessLayerException("Error in either opening a database connection or " +
|
|
||||||
"accessing the database to fetch corresponding results.", e);
|
|
||||||
} finally {
|
|
||||||
GadgetDataServiceDAOFactory.closeConnection();
|
|
||||||
}
|
|
||||||
return deviceCountsByConnectivityStatuses;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<DeviceCountByGroup> getDeviceCountsByPotentialVulnerabilities(String userName) throws DataAccessLayerException {
|
|
||||||
List<DeviceCountByGroup> deviceCountsByPotentialVulnerabilities;
|
|
||||||
try {
|
|
||||||
GadgetDataServiceDAOFactory.openConnection();
|
|
||||||
deviceCountsByPotentialVulnerabilities = GadgetDataServiceDAOFactory.getGadgetDataServiceDAO().
|
|
||||||
getDeviceCountsByPotentialVulnerabilities(userName);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new DataAccessLayerException("Error in either opening a database connection or " +
|
|
||||||
"accessing the database to fetch corresponding results.", e);
|
|
||||||
} finally {
|
|
||||||
GadgetDataServiceDAOFactory.closeConnection();
|
|
||||||
}
|
|
||||||
return deviceCountsByPotentialVulnerabilities;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PaginationResult getNonCompliantDeviceCountsByFeatures(int startIndex, int resultCount, String userName)
|
|
||||||
throws InvalidStartIndexValueException, InvalidResultCountValueException,
|
|
||||||
DataAccessLayerException {
|
|
||||||
PaginationResult paginationResult;
|
|
||||||
try {
|
|
||||||
GadgetDataServiceDAOFactory.openConnection();
|
|
||||||
paginationResult = GadgetDataServiceDAOFactory.getGadgetDataServiceDAO().
|
|
||||||
getNonCompliantDeviceCountsByFeatures(startIndex, resultCount, userName);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new DataAccessLayerException("Error in either opening a database connection or " +
|
|
||||||
"accessing the database to fetch corresponding results.", e);
|
|
||||||
} finally {
|
|
||||||
GadgetDataServiceDAOFactory.closeConnection();
|
|
||||||
}
|
|
||||||
return paginationResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<DeviceCountByGroup> getDeviceCountsByPlatforms(ExtendedFilterSet extendedFilterSet, String userName)
|
|
||||||
throws InvalidPotentialVulnerabilityValueException, DataAccessLayerException {
|
|
||||||
List<DeviceCountByGroup> deviceCountsByPlatforms;
|
|
||||||
try {
|
|
||||||
GadgetDataServiceDAOFactory.openConnection();
|
|
||||||
deviceCountsByPlatforms = GadgetDataServiceDAOFactory.getGadgetDataServiceDAO().
|
|
||||||
getDeviceCountsByPlatforms(extendedFilterSet, userName);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new DataAccessLayerException("Error in either opening a database connection or " +
|
|
||||||
"accessing the database to fetch corresponding results.", e);
|
|
||||||
} finally {
|
|
||||||
GadgetDataServiceDAOFactory.closeConnection();
|
|
||||||
}
|
|
||||||
return deviceCountsByPlatforms;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<DeviceCountByGroup> getFeatureNonCompliantDeviceCountsByPlatforms(String featureCode,
|
|
||||||
BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException,
|
|
||||||
DataAccessLayerException {
|
|
||||||
List<DeviceCountByGroup> featureNonCompliantDeviceCountsByPlatforms;
|
|
||||||
try {
|
|
||||||
GadgetDataServiceDAOFactory.openConnection();
|
|
||||||
featureNonCompliantDeviceCountsByPlatforms = GadgetDataServiceDAOFactory.getGadgetDataServiceDAO().
|
|
||||||
getFeatureNonCompliantDeviceCountsByPlatforms(featureCode, basicFilterSet, userName);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new DataAccessLayerException("Error in either opening a database connection or " +
|
|
||||||
"accessing the database to fetch corresponding results.", e);
|
|
||||||
} finally {
|
|
||||||
GadgetDataServiceDAOFactory.closeConnection();
|
|
||||||
}
|
|
||||||
return featureNonCompliantDeviceCountsByPlatforms;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<DeviceCountByGroup> getDeviceCountsByOwnershipTypes(ExtendedFilterSet extendedFilterSet, String userName)
|
|
||||||
throws InvalidPotentialVulnerabilityValueException,
|
|
||||||
DataAccessLayerException {
|
|
||||||
List<DeviceCountByGroup> deviceCountsByOwnershipTypes;
|
|
||||||
try {
|
|
||||||
GadgetDataServiceDAOFactory.openConnection();
|
|
||||||
deviceCountsByOwnershipTypes = GadgetDataServiceDAOFactory.getGadgetDataServiceDAO().
|
|
||||||
getDeviceCountsByOwnershipTypes(extendedFilterSet, userName);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new DataAccessLayerException("Error in either opening a database connection or " +
|
|
||||||
"accessing the database to fetch corresponding results.", e);
|
|
||||||
} finally {
|
|
||||||
GadgetDataServiceDAOFactory.closeConnection();
|
|
||||||
}
|
|
||||||
return deviceCountsByOwnershipTypes;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<DeviceCountByGroup>
|
|
||||||
getFeatureNonCompliantDeviceCountsByOwnershipTypes(String featureCode, BasicFilterSet basicFilterSet, String userName)
|
|
||||||
throws InvalidFeatureCodeValueException, DataAccessLayerException {
|
|
||||||
List<DeviceCountByGroup> featureNonCompliantDeviceCountsByOwnershipTypes;
|
|
||||||
try {
|
|
||||||
GadgetDataServiceDAOFactory.openConnection();
|
|
||||||
featureNonCompliantDeviceCountsByOwnershipTypes = GadgetDataServiceDAOFactory.getGadgetDataServiceDAO().
|
|
||||||
getFeatureNonCompliantDeviceCountsByOwnershipTypes(featureCode, basicFilterSet, userName);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new DataAccessLayerException("Error in either opening a database connection or " +
|
|
||||||
"accessing the database to fetch corresponding results.", e);
|
|
||||||
} finally {
|
|
||||||
GadgetDataServiceDAOFactory.closeConnection();
|
|
||||||
}
|
|
||||||
return featureNonCompliantDeviceCountsByOwnershipTypes;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PaginationResult getDevicesWithDetails(ExtendedFilterSet extendedFilterSet, int startIndex, int resultCount, String userName)
|
|
||||||
throws InvalidPotentialVulnerabilityValueException, DataAccessLayerException,
|
|
||||||
InvalidStartIndexValueException, InvalidResultCountValueException {
|
|
||||||
PaginationResult paginationResult;
|
|
||||||
try {
|
|
||||||
GadgetDataServiceDAOFactory.openConnection();
|
|
||||||
paginationResult = GadgetDataServiceDAOFactory.getGadgetDataServiceDAO().
|
|
||||||
getDevicesWithDetails(extendedFilterSet, startIndex, resultCount, userName);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new DataAccessLayerException("Error in either opening a database connection or " +
|
|
||||||
"accessing the database to fetch corresponding results.", e);
|
|
||||||
} finally {
|
|
||||||
GadgetDataServiceDAOFactory.closeConnection();
|
|
||||||
}
|
|
||||||
return paginationResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PaginationResult getFeatureNonCompliantDevicesWithDetails(String featureCode, BasicFilterSet basicFilterSet,
|
|
||||||
int startIndex, int resultCount, String userName) throws InvalidFeatureCodeValueException,
|
|
||||||
DataAccessLayerException, InvalidStartIndexValueException,
|
|
||||||
InvalidResultCountValueException {
|
|
||||||
PaginationResult paginationResult;
|
|
||||||
try {
|
|
||||||
GadgetDataServiceDAOFactory.openConnection();
|
|
||||||
paginationResult = GadgetDataServiceDAOFactory.getGadgetDataServiceDAO().
|
|
||||||
getFeatureNonCompliantDevicesWithDetails(featureCode, basicFilterSet, startIndex, resultCount, userName);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new DataAccessLayerException("Error in either opening a database connection or " +
|
|
||||||
"accessing the database to fetch corresponding results.", e);
|
|
||||||
} finally {
|
|
||||||
GadgetDataServiceDAOFactory.closeConnection();
|
|
||||||
}
|
|
||||||
return paginationResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<DeviceWithDetails> getDevicesWithDetails(ExtendedFilterSet extendedFilterSet, String userName)
|
|
||||||
throws InvalidPotentialVulnerabilityValueException, DataAccessLayerException {
|
|
||||||
List<DeviceWithDetails> devicesWithDetails;
|
|
||||||
try {
|
|
||||||
GadgetDataServiceDAOFactory.openConnection();
|
|
||||||
devicesWithDetails = GadgetDataServiceDAOFactory.
|
|
||||||
getGadgetDataServiceDAO().getDevicesWithDetails(extendedFilterSet, userName);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new DataAccessLayerException("Error in either opening a database connection or " +
|
|
||||||
"accessing the database to fetch corresponding results.", e);
|
|
||||||
} finally {
|
|
||||||
GadgetDataServiceDAOFactory.closeConnection();
|
|
||||||
}
|
|
||||||
return devicesWithDetails;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<DeviceWithDetails> getFeatureNonCompliantDevicesWithDetails(String featureCode,
|
|
||||||
BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException,
|
|
||||||
DataAccessLayerException {
|
|
||||||
List<DeviceWithDetails> featureNonCompliantDevicesWithDetails;
|
|
||||||
try {
|
|
||||||
GadgetDataServiceDAOFactory.openConnection();
|
|
||||||
featureNonCompliantDevicesWithDetails = GadgetDataServiceDAOFactory.getGadgetDataServiceDAO().
|
|
||||||
getFeatureNonCompliantDevicesWithDetails(featureCode, basicFilterSet, userName);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new DataAccessLayerException("Error in either opening a database connection or " +
|
|
||||||
"accessing the database to fetch corresponding results.", e);
|
|
||||||
} finally {
|
|
||||||
GadgetDataServiceDAOFactory.closeConnection();
|
|
||||||
}
|
|
||||||
return featureNonCompliantDevicesWithDetails;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,89 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.analytics.dashboard.internal;
|
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
|
||||||
import org.apache.commons.logging.LogFactory;
|
|
||||||
import org.osgi.service.component.ComponentContext;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.GadgetDataService;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.dao.GadgetDataServiceDAOFactory;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.dashboard.impl.GadgetDataServiceImpl;
|
|
||||||
import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager;
|
|
||||||
import org.wso2.carbon.device.mgt.core.config.DeviceManagementConfig;
|
|
||||||
import org.wso2.carbon.device.mgt.core.config.datasource.DataSourceConfig;
|
|
||||||
import org.wso2.carbon.ndatasource.core.DataSourceService;
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
/**
|
|
||||||
* @scr.component name="org.wso2.carbon.device.mgt.analytics.dashboard.GadgetDataService" immediate="true"
|
|
||||||
* @scr.reference name="org.wso2.carbon.ndatasource"
|
|
||||||
* interface="org.wso2.carbon.ndatasource.core.DataSourceService"
|
|
||||||
* cardinality="1..1"
|
|
||||||
* policy="dynamic"
|
|
||||||
* bind="setDataSourceService"
|
|
||||||
* unbind="unsetDataSourceService"
|
|
||||||
*/
|
|
||||||
public class GadgetDataServiceComponent {
|
|
||||||
|
|
||||||
private static final Log log = LogFactory.getLog(GadgetDataServiceComponent.class);
|
|
||||||
|
|
||||||
protected void activate(ComponentContext componentContext) {
|
|
||||||
if (log.isDebugEnabled()) {
|
|
||||||
log.debug("Starting Device Management Dashboard Analytics Bundle...");
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
DeviceConfigurationManager.getInstance().initConfig();
|
|
||||||
DeviceManagementConfig config =
|
|
||||||
DeviceConfigurationManager.getInstance().getDeviceManagementConfig();
|
|
||||||
|
|
||||||
DataSourceConfig dsConfig = config.getDeviceManagementConfigRepository().getDataSourceConfig();
|
|
||||||
GadgetDataServiceDAOFactory.init(dsConfig);
|
|
||||||
//Register GadgetDataService to expose corresponding data to external parties.
|
|
||||||
componentContext.getBundleContext().
|
|
||||||
registerService(GadgetDataService.class.getName(), new GadgetDataServiceImpl(), null);
|
|
||||||
if (log.isDebugEnabled()) {
|
|
||||||
log.debug("Device Management Dashboard Analytics Bundle has been started successfully.");
|
|
||||||
}
|
|
||||||
} catch (Throwable e) {
|
|
||||||
log.error("Error occurred while initializing the bundle.", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void deactivate(ComponentContext componentContext) {
|
|
||||||
if (log.isDebugEnabled()) {
|
|
||||||
log.debug("Deactivating Device Management Dashboard Analytics Bundle...");
|
|
||||||
}
|
|
||||||
//do nothing
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void setDataSourceService(DataSourceService dataSourceService) {
|
|
||||||
if (log.isDebugEnabled()) {
|
|
||||||
log.debug("Binding org.wso2.carbon.ndatasource.core.DataSourceService...");
|
|
||||||
}
|
|
||||||
//do nothing
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void unsetDataSourceService(DataSourceService dataSourceService) {
|
|
||||||
if (log.isDebugEnabled()) {
|
|
||||||
log.debug("Unbinding org.wso2.carbon.ndatasource.core.DataSourceService...");
|
|
||||||
}
|
|
||||||
//do nothing
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,70 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.analytics.dashboard.util;
|
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
|
||||||
import org.apache.commons.logging.LogFactory;
|
|
||||||
import org.wso2.carbon.context.CarbonContext;
|
|
||||||
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
|
||||||
import org.wso2.carbon.device.mgt.common.authorization.DeviceAccessAuthorizationException;
|
|
||||||
import org.wso2.carbon.device.mgt.common.authorization.DeviceAccessAuthorizationService;
|
|
||||||
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
|
|
||||||
import org.wso2.carbon.user.api.UserStoreException;
|
|
||||||
|
|
||||||
import java.net.SocketException;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This class provides utility functions used by REST-API.
|
|
||||||
*/
|
|
||||||
public class APIUtil {
|
|
||||||
|
|
||||||
private static Log log = LogFactory.getLog(APIUtil.class);
|
|
||||||
|
|
||||||
public static String getAuthenticatedUser() {
|
|
||||||
PrivilegedCarbonContext threadLocalCarbonContext = PrivilegedCarbonContext.getThreadLocalCarbonContext();
|
|
||||||
String username = threadLocalCarbonContext.getUsername();
|
|
||||||
String tenantDomain = threadLocalCarbonContext.getTenantDomain();
|
|
||||||
if (username.endsWith(tenantDomain)) {
|
|
||||||
return username.substring(0, username.lastIndexOf("@"));
|
|
||||||
}
|
|
||||||
return username;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int getAuthenticatedUserTenantDomainId() {
|
|
||||||
PrivilegedCarbonContext threadLocalCarbonContext = PrivilegedCarbonContext.getThreadLocalCarbonContext();
|
|
||||||
return threadLocalCarbonContext.getTenantId();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isDeviceAdminUser() throws DeviceAccessAuthorizationException {
|
|
||||||
return getDeviceAccessAuthorizationService().isDeviceAdminUser();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static DeviceAccessAuthorizationService getDeviceAccessAuthorizationService() {
|
|
||||||
PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
|
|
||||||
DeviceAccessAuthorizationService deviceAccessAuthorizationService =
|
|
||||||
(DeviceAccessAuthorizationService) ctx.getOSGiService(DeviceAccessAuthorizationService.class, null);
|
|
||||||
if (deviceAccessAuthorizationService == null) {
|
|
||||||
String msg = "DeviceAccessAuthorization service has not initialized.";
|
|
||||||
log.error(msg);
|
|
||||||
throw new IllegalStateException(msg);
|
|
||||||
}
|
|
||||||
return deviceAccessAuthorizationService;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,63 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
||||||
<parent>
|
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
|
||||||
<artifactId>device-mgt-feature</artifactId>
|
|
||||||
<version>3.0.136-SNAPSHOT</version>
|
|
||||||
<relativePath>../pom.xml</relativePath>
|
|
||||||
</parent>
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
|
||||||
|
|
||||||
<artifactId>org.wso2.carbon.device.mgt.analytics.dashboard.feature</artifactId>
|
|
||||||
<version>3.0.136-SNAPSHOT</version>
|
|
||||||
<packaging>pom</packaging>
|
|
||||||
<name>WSO2 Carbon - Device Management Dashboard Analytics Feature</name>
|
|
||||||
<description>WSO2 Carbon - Device Management Dashboard Analytics Feature</description>
|
|
||||||
<url>http://wso2.org</url>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
|
||||||
<artifactId>org.wso2.carbon.device.mgt.analytics.dashboard</artifactId>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
<build>
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.wso2.maven</groupId>
|
|
||||||
<artifactId>carbon-p2-plugin</artifactId>
|
|
||||||
<version>${carbon.p2.plugin.version}</version>
|
|
||||||
<executions>
|
|
||||||
<execution>
|
|
||||||
<id>p2-feature-generation</id>
|
|
||||||
<phase>package</phase>
|
|
||||||
<goals>
|
|
||||||
<goal>p2-feature-gen</goal>
|
|
||||||
</goals>
|
|
||||||
<configuration>
|
|
||||||
<id>org.wso2.carbon.device.mgt.analytics.dashboard</id>
|
|
||||||
<propertiesFile>../../../features/etc/feature.properties</propertiesFile>
|
|
||||||
<adviceFile>
|
|
||||||
<properties>
|
|
||||||
<propertyDef>org.wso2.carbon.p2.category.type:server</propertyDef>
|
|
||||||
<propertyDef>org.eclipse.equinox.p2.type.group:false</propertyDef>
|
|
||||||
</properties>
|
|
||||||
</adviceFile>
|
|
||||||
<bundles>
|
|
||||||
<bundleDef>
|
|
||||||
org.wso2.carbon.devicemgt:org.wso2.carbon.device.mgt.analytics.dashboard:${carbon.device.mgt.version}
|
|
||||||
</bundleDef>
|
|
||||||
</bundles>
|
|
||||||
<importFeatures>
|
|
||||||
<importFeatureDef>org.wso2.carbon.core.server:${carbon.kernel.version}
|
|
||||||
</importFeatureDef>
|
|
||||||
</importFeatures>
|
|
||||||
</configuration>
|
|
||||||
</execution>
|
|
||||||
</executions>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
</build>
|
|
||||||
|
|
||||||
</project>
|
|
Loading…
Reference in new issue