mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
Add API for getting applications
This commit is contained in:
parent
e467453fd3
commit
e747c0bdb0
@ -19,6 +19,7 @@
|
||||
package org.wso2.carbon.device.application.mgt.common;
|
||||
|
||||
import org.wso2.carbon.device.application.mgt.common.dto.ApplicationDTO;
|
||||
import org.wso2.carbon.device.application.mgt.common.response.Application;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ -27,15 +28,15 @@ import java.util.List;
|
||||
*/
|
||||
public class ApplicationList {
|
||||
|
||||
private List<ApplicationDTO> applications;
|
||||
private List<Application> applications;
|
||||
|
||||
private Pagination pagination;
|
||||
|
||||
public List<ApplicationDTO> getApplications() {
|
||||
public List<Application> getApplications() {
|
||||
return applications;
|
||||
}
|
||||
|
||||
public void setApplications(List<ApplicationDTO> applications) {
|
||||
public void setApplications(List<Application> applications) {
|
||||
this.applications = applications;
|
||||
}
|
||||
|
||||
|
||||
@ -18,25 +18,68 @@
|
||||
*/
|
||||
package org.wso2.carbon.device.application.mgt.common;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Filter represents a criteria that can be used for searching applications.
|
||||
*/
|
||||
public class Filter {
|
||||
|
||||
/**
|
||||
* Name of the application
|
||||
/***
|
||||
* Supported device type for the application.
|
||||
* e.g :- Android, iOS, Windows
|
||||
*/
|
||||
private String deviceType;
|
||||
|
||||
/***
|
||||
* Name of the application.
|
||||
*/
|
||||
private String appName;
|
||||
|
||||
/**
|
||||
* Type of the application
|
||||
/***
|
||||
* Type of the application.
|
||||
* e.g :- ENTERPRISE, PUBLIC
|
||||
*/
|
||||
private String appType;
|
||||
|
||||
/**
|
||||
* Category of the application
|
||||
/***
|
||||
* Subscription type of the application.
|
||||
* e.g :- FREE, PAID etc
|
||||
*/
|
||||
private String appCategory;
|
||||
private String subscriptionType;
|
||||
|
||||
/***
|
||||
* Minimum rating of the application.
|
||||
* e.g :- 4,5
|
||||
*/
|
||||
private int minimumRating;
|
||||
|
||||
/***
|
||||
* Application release version.
|
||||
*/
|
||||
private String version;
|
||||
|
||||
/***
|
||||
* Release type of the application release.
|
||||
* e.g :- Alpha, Beta
|
||||
*/
|
||||
private String appReleaseType;
|
||||
|
||||
/**
|
||||
* Category list of the application
|
||||
*/
|
||||
private List<String> appCategories;
|
||||
|
||||
/**
|
||||
* Tag list of the application
|
||||
*/
|
||||
private List<String> tags;
|
||||
|
||||
/***
|
||||
* Unrestricted role list. Visibility of the application can restricted through user roles and users can view the
|
||||
* application who has at least one role in unrestricted role list
|
||||
*/
|
||||
private List<String> unrestrictedRoles;
|
||||
|
||||
/**
|
||||
* Checking the application name matches fully with given name
|
||||
@ -59,14 +102,10 @@ public class Filter {
|
||||
private String sortBy;
|
||||
|
||||
/**
|
||||
* Set as True if required to have only published application release, otherwise set to False
|
||||
* Current application release state.
|
||||
* e.g :- CREATED. IN_REVIEW, PUBLISHED etc
|
||||
*/
|
||||
private String currentAppReleaseState;
|
||||
|
||||
/***
|
||||
* Supported device type for the application. i.e Android, iOS, Windows etc
|
||||
*/
|
||||
private int deviceTypeId;
|
||||
private String appReleaseState;
|
||||
|
||||
public int getLimit() {
|
||||
return limit;
|
||||
@ -116,21 +155,43 @@ public class Filter {
|
||||
this.appType = appType;
|
||||
}
|
||||
|
||||
public String getAppCategory() {
|
||||
return appCategory;
|
||||
public List<String> getAppCategories() {
|
||||
return appCategories;
|
||||
}
|
||||
|
||||
public void setAppCategory(String appCategory) {
|
||||
this.appCategory = appCategory;
|
||||
public void setAppCategories(List<String> appCategories) {
|
||||
this.appCategories = appCategories;
|
||||
}
|
||||
|
||||
public String getCurrentAppReleaseState() { return currentAppReleaseState; }
|
||||
public List<String> getTags() { return tags; }
|
||||
|
||||
public void setCurrentAppReleaseState(String currentAppReleaseState) {
|
||||
this.currentAppReleaseState = currentAppReleaseState;
|
||||
}
|
||||
public void setTags(List<String> tags) { this.tags = tags; }
|
||||
|
||||
public int getDeviceTypeId() { return deviceTypeId; }
|
||||
public List<String> getUnrestrictedRoles() { return unrestrictedRoles; }
|
||||
|
||||
public void setDeviceTypeId(int deviceTypeId) { this.deviceTypeId = deviceTypeId; }
|
||||
public void setUnrestrictedRoles(List<String> unrestrictedRoles) { this.unrestrictedRoles = unrestrictedRoles; }
|
||||
|
||||
public String getAppReleaseState() { return appReleaseState; }
|
||||
|
||||
public void setAppReleaseState(String appReleaseState) { this.appReleaseState = appReleaseState; }
|
||||
|
||||
public String getDeviceType() { return deviceType; }
|
||||
|
||||
public void setDeviceType(String deviceType) { this.deviceType = deviceType; }
|
||||
|
||||
public String getSubscriptionType() { return subscriptionType; }
|
||||
|
||||
public void setSubscriptionType(String subscriptionType) { this.subscriptionType = subscriptionType; }
|
||||
|
||||
public int getMinimumRating() { return minimumRating; }
|
||||
|
||||
public void setMinimumRating(int minimumRating) { this.minimumRating = minimumRating; }
|
||||
|
||||
public String getVersion() { return version; }
|
||||
|
||||
public void setVersion(String version) { this.version = version; }
|
||||
|
||||
public String getAppReleaseType() { return appReleaseType; }
|
||||
|
||||
public void setAppReleaseType(String appReleaseType) { this.appReleaseType = appReleaseType; }
|
||||
}
|
||||
|
||||
@ -0,0 +1,42 @@
|
||||
package org.wso2.carbon.device.application.mgt.common.config;/* Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
*
|
||||
* Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
|
||||
public class RatingConfiguration {
|
||||
|
||||
private int minRatingValue;
|
||||
private int maxRatingValue;
|
||||
|
||||
@XmlElement(name = "MinRatingValue")
|
||||
public int getMinRatingValue() {
|
||||
return minRatingValue;
|
||||
}
|
||||
|
||||
public void setMinRatingValue(int minRatingValue) {
|
||||
this.minRatingValue = minRatingValue;
|
||||
}
|
||||
|
||||
@XmlElement(name = "MaxRatingValue")
|
||||
public int getMaxRatingValue() {
|
||||
return maxRatingValue;
|
||||
}
|
||||
|
||||
public void setMaxRatingValue(int maxRatingValue) {
|
||||
this.maxRatingValue = maxRatingValue;
|
||||
}
|
||||
}
|
||||
@ -83,7 +83,7 @@ public interface ApplicationManager {
|
||||
* @return Applications that matches the given filter criteria.
|
||||
* @throws ApplicationManagementException ApplicationDTO Management Exception
|
||||
*/
|
||||
ApplicationList getApplications(Filter filter, String deviceTypeName) throws ApplicationManagementException;
|
||||
ApplicationList getApplications(Filter filter) throws ApplicationManagementException;
|
||||
|
||||
/**
|
||||
* To get the ApplicationDTO for given Id.
|
||||
|
||||
@ -18,6 +18,7 @@
|
||||
*/
|
||||
package org.wso2.carbon.device.application.mgt.core.config;
|
||||
|
||||
import org.wso2.carbon.device.application.mgt.common.config.RatingConfiguration;
|
||||
import org.wso2.carbon.device.application.mgt.common.config.UIConfiguration;
|
||||
import org.wso2.carbon.device.application.mgt.core.lifecycle.config.LifecycleState;
|
||||
|
||||
@ -48,6 +49,8 @@ public class Configuration {
|
||||
|
||||
private String artifactDownloadEndpoint;
|
||||
|
||||
private RatingConfiguration ratingConfiguration;
|
||||
|
||||
@XmlElement(name = "DatasourceName", required = true)
|
||||
public String getDatasourceName() {
|
||||
return datasourceName;
|
||||
@ -82,15 +85,21 @@ public class Configuration {
|
||||
this.lifecycleStates = lifecycleStates;
|
||||
}
|
||||
|
||||
@XmlElement(name = "UIConfigs")
|
||||
public UIConfiguration getUiConfiguration() {
|
||||
return uiConfiguration;
|
||||
}
|
||||
|
||||
@XmlElement(name = "UIConfigs")
|
||||
public void setUiConfiguration(UIConfiguration uiConfiguration) {
|
||||
this.uiConfiguration = uiConfiguration;
|
||||
}
|
||||
|
||||
@XmlElement(name = "RatingConfig")
|
||||
public RatingConfiguration getRatingConfiguration() { return ratingConfiguration; }
|
||||
|
||||
public void setRatingConfiguration(
|
||||
RatingConfiguration ratingConfiguration) { this.ratingConfiguration = ratingConfiguration; }
|
||||
|
||||
@XmlElement(name = "ArtifactDownloadEndpoint", required = true)
|
||||
public String getArtifactDownloadEndpoint() {
|
||||
return artifactDownloadEndpoint;
|
||||
|
||||
@ -54,6 +54,11 @@ public interface ApplicationDAO {
|
||||
|
||||
void addTagMapping (List<Integer> tagIds, int applicationId, int tenantId) throws ApplicationManagementDAOException;
|
||||
|
||||
List<String> getAppTags(int appId, int tenantId) throws ApplicationManagementDAOException;
|
||||
|
||||
List<String> getAppCategories (int appId, int tenantId) throws ApplicationManagementDAOException;
|
||||
|
||||
|
||||
|
||||
List<CategoryDTO> getAllCategories(int tenantId) throws ApplicationManagementDAOException;
|
||||
|
||||
@ -76,11 +81,12 @@ public interface ApplicationDAO {
|
||||
* To get the applications that satisfy the given criteria.
|
||||
*
|
||||
* @param filter Filter criteria.
|
||||
* @param deviceTypeId ID of the device type
|
||||
* @param tenantId Id of the tenant.
|
||||
* @return ApplicationDTO list
|
||||
* @throws ApplicationManagementDAOException ApplicationDTO Management DAO Exception.
|
||||
*/
|
||||
ApplicationList getApplications(Filter filter, int tenantId) throws ApplicationManagementDAOException;
|
||||
List<ApplicationDTO> getApplications(Filter filter, int deviceTypeId, int tenantId) throws ApplicationManagementDAOException;
|
||||
|
||||
/**
|
||||
* To get the UUID of latest app release that satisfy the given criteria.
|
||||
|
||||
@ -74,7 +74,7 @@ public class Util {
|
||||
// application.setId(applicationId);
|
||||
// application.setName(rs.getString("APP_NAME"));
|
||||
// application.setType(rs.getString("APP_TYPE"));
|
||||
// application.setAppCategory(rs.getString("APP_CATEGORY"));
|
||||
// application.setAppCategories(rs.getString("APP_CATEGORY"));
|
||||
// application.setSubType(rs.getString("SUB_TYPE"));
|
||||
// application.setPaymentCurrency(rs.getString("CURRENCY"));
|
||||
// application.setIsRestricted(rs.getBoolean("RESTRICTED"));
|
||||
@ -139,25 +139,10 @@ public class Util {
|
||||
application.setStatus(rs.getString("APP_STATUS"));
|
||||
application.setAppRating(rs.getInt("APP_RATING"));
|
||||
application.setDeviceTypeId(rs.getInt("APP_DEVICE_TYPE_ID"));
|
||||
application.getApplicationReleases().add(loadAppRelease(rs));
|
||||
} else {
|
||||
ApplicationReleaseDTO appRelease = new ApplicationReleaseDTO();
|
||||
appRelease.setDescription(rs.getString("RELEASE_DESCRIPTION"));
|
||||
appRelease.setUuid(rs.getString("RELEASE_UUID"));
|
||||
appRelease.setReleaseType(rs.getString("RELEASE_TYPE"));
|
||||
appRelease.setVersion(rs.getString("RELEASE_VERSION"));
|
||||
appRelease.setInstallerName(rs.getString("AP_RELEASE_STORED_LOC"));
|
||||
appRelease.setBannerName(rs.getString("RELEASE_BANNER_LOC"));
|
||||
appRelease.setScreenshotName1("RELEASE_SC1");
|
||||
appRelease.setScreenshotName2("RELEASE_SC2");
|
||||
appRelease.setScreenshotName3("RELEASE_SC3");
|
||||
appRelease.setPrice(rs.getDouble(" RELEASE_PRICE"));
|
||||
appRelease.setMetaData(rs.getString("RELEASE_META_INFO"));
|
||||
appRelease.setSupportedOsVersions(rs.getString("RELEASE_SUP_OS_VERSIONS"));
|
||||
appRelease.setRating(rs.getDouble("RELEASE_RATING"));
|
||||
appRelease.setCurrentState(rs.getString("RELEASE_CURRENT_STATE"));
|
||||
appRelease.setRatedUsers(rs.getInt("RATED_USER_COUNT"));
|
||||
if (application != null && application.getApplicationReleases() != null) {
|
||||
application.getApplicationReleases().add(appRelease);
|
||||
application.getApplicationReleases().add(loadAppRelease(rs));
|
||||
}
|
||||
}
|
||||
hasNext = rs.next();
|
||||
@ -168,6 +153,33 @@ public class Util {
|
||||
return applications;
|
||||
}
|
||||
|
||||
/**
|
||||
* Populates {@link ApplicationReleaseDTO} object with the result obtained from the database.
|
||||
*
|
||||
* @param rs {@link ResultSet} from obtained from the database
|
||||
* @return {@link ApplicationReleaseDTO} object populated with the data
|
||||
* @throws SQLException If unable to populate {@link ApplicationReleaseDTO} object with the data
|
||||
*/
|
||||
public static ApplicationReleaseDTO loadAppRelease(ResultSet rs) throws SQLException {
|
||||
ApplicationReleaseDTO appRelease = new ApplicationReleaseDTO();
|
||||
appRelease.setDescription(rs.getString("RELEASE_DESCRIPTION"));
|
||||
appRelease.setUuid(rs.getString("RELEASE_UUID"));
|
||||
appRelease.setReleaseType(rs.getString("RELEASE_TYPE"));
|
||||
appRelease.setVersion(rs.getString("RELEASE_VERSION"));
|
||||
appRelease.setInstallerName(rs.getString("AP_RELEASE_STORED_LOC"));
|
||||
appRelease.setBannerName(rs.getString("AP_RELEASE_BANNER_LOC"));
|
||||
appRelease.setScreenshotName1("AP_RELEASE_SC1");
|
||||
appRelease.setScreenshotName2("AP_RELEASE_SC2");
|
||||
appRelease.setScreenshotName3("AP_RELEASE_SC3");
|
||||
appRelease.setPrice(rs.getDouble("RELEASE_PRICE"));
|
||||
appRelease.setMetaData(rs.getString("RELEASE_META_INFO"));
|
||||
appRelease.setSupportedOsVersions(rs.getString("RELEASE_SUP_OS_VERSIONS"));
|
||||
appRelease.setRating(rs.getDouble("RELEASE_RATING"));
|
||||
appRelease.setCurrentState(rs.getString("RELEASE_CURRENT_STATE"));
|
||||
appRelease.setRatedUsers(rs.getInt("RATED_USER_COUNT"));
|
||||
return appRelease;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* To create application object from the result set retrieved from the Database.
|
||||
|
||||
@ -18,6 +18,7 @@
|
||||
*/
|
||||
package org.wso2.carbon.device.application.mgt.core.dao.impl.application;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.json.JSONException;
|
||||
@ -124,119 +125,8 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
|
||||
}
|
||||
}
|
||||
|
||||
// @Override
|
||||
// public ApplicationList getApplications(Filter filter, int tenantId) throws ApplicationManagementDAOException {
|
||||
// if (log.isDebugEnabled()) {
|
||||
// log.debug("Getting application data from the database");
|
||||
// log.debug(String.format("Filter: limit=%s, offset=%s", filter.getLimit(), filter.getOffset()));
|
||||
// }
|
||||
// int paramIndex = 1;
|
||||
// Connection conn;
|
||||
// PreparedStatement stmt = null;
|
||||
// ResultSet rs = null;
|
||||
// ApplicationList applicationList = new ApplicationList();
|
||||
// Pagination pagination = new Pagination();
|
||||
// String sql = "SELECT "
|
||||
// + "AP_APP.ID AS APP_ID,"
|
||||
// + " AP_APP.NAME AS APP_NAME,"
|
||||
// + " AP_APP.TYPE AS APP_TYPE,"
|
||||
// + " AP_APP.APP_CATEGORY AS APP_CATEGORY,"
|
||||
// + " AP_APP.SUB_TYPE AS SUB_TYPE,"
|
||||
// + " AP_APP.CURRENCY AS CURRENCY, "
|
||||
// + "AP_APP.RESTRICTED AS RESTRICTED,"
|
||||
// + " AP_APP_TAG.TAG AS APP_TAG,"
|
||||
// + " AP_UNRESTRICTED_ROLE.ROLE AS ROLE "
|
||||
// + "FROM ((AP_APP LEFT JOIN AP_APP_TAG ON AP_APP.ID = AP_APP_TAG.AP_APP_ID) "
|
||||
// + "LEFT JOIN AP_UNRESTRICTED_ROLE ON AP_APP.ID = AP_UNRESTRICTED_ROLE.AP_APP_ID) "
|
||||
// + "WHERE AP_APP.TENANT_ID = ?";
|
||||
//
|
||||
//
|
||||
// if (filter == null) {
|
||||
// throw new ApplicationManagementDAOException("Filter need to be instantiated");
|
||||
// }
|
||||
// if (filter.getAppType() != null && !filter.getAppType().isEmpty()) {
|
||||
// sql += " AND AP_APP.TYPE ";
|
||||
// sql += "= ?";
|
||||
// }
|
||||
// if (filter.getAppCategory() != null && !filter.getAppCategory().isEmpty()) {
|
||||
// sql += " AND AP_APP.APP_CATEGORY ";
|
||||
// sql += "= ?";
|
||||
// }
|
||||
// if (filter.getAppName() != null && !filter.getAppName().isEmpty()) {
|
||||
// sql += " AND LOWER (AP_APP.NAME) ";
|
||||
// if (filter.isFullMatch()) {
|
||||
// sql += "= ?";
|
||||
// } else {
|
||||
// sql += "LIKE ?";
|
||||
// }
|
||||
// }
|
||||
// if (filter.getDeviceTypeName() != null ) {
|
||||
// sql += " AND AP_APP.DEVICE_TYPE_ID ";
|
||||
// sql += "= ?";
|
||||
// }
|
||||
//
|
||||
// String defaultSortOrder = "ASC";
|
||||
// if (filter.getSortBy() != null && !filter.getSortBy().isEmpty()) {
|
||||
// defaultSortOrder = filter.getSortBy();
|
||||
// }
|
||||
// sql += " ORDER BY APP_ID " + defaultSortOrder +" LIMIT ? OFFSET ? ";
|
||||
//
|
||||
// pagination.setLimit(filter.getLimit());
|
||||
// pagination.setOffset(filter.getOffset());
|
||||
//
|
||||
// try {
|
||||
// conn = this.getDBConnection();
|
||||
// stmt = conn.prepareStatement(sql);
|
||||
// stmt.setInt(paramIndex++, tenantId);
|
||||
//
|
||||
// if (filter.getAppType() != null && !filter.getAppType().isEmpty()) {
|
||||
// stmt.setString(paramIndex++, filter.getAppType());
|
||||
// }
|
||||
// if (filter.getAppCategory() != null && !filter.getAppCategory().isEmpty()) {
|
||||
// stmt.setString(paramIndex++, filter.getAppCategory());
|
||||
// }
|
||||
// if (filter.getAppName() != null && !filter.getAppName().isEmpty()) {
|
||||
// if (filter.isFullMatch()) {
|
||||
// stmt.setString(paramIndex++, filter.getAppName().toLowerCase());
|
||||
// } else {
|
||||
// stmt.setString(paramIndex++, "%" + filter.getAppName().toLowerCase() + "%");
|
||||
// }
|
||||
// }
|
||||
// if (filter.getDeviceTypeName() != null ) {
|
||||
// stmt.setInt(paramIndex++, filter.getDeviceTypeName().getId());
|
||||
// }
|
||||
//
|
||||
//
|
||||
// if (filter.getLimit() == 0) {
|
||||
// stmt.setInt(paramIndex++, 100);
|
||||
// } else {
|
||||
// stmt.setInt(paramIndex++, filter.getLimit());
|
||||
// }
|
||||
// stmt.setInt(paramIndex, filter.getOffset());
|
||||
// rs = stmt.executeQuery();
|
||||
// applicationList.setApplications(Util.loadApplications(rs));
|
||||
// applicationList.setPagination(pagination);
|
||||
// applicationList.getPagination().setSize(filter.getOffset());
|
||||
// applicationList.getPagination().setCount(applicationList.getApplications().size());
|
||||
//
|
||||
// } catch (SQLException e) {
|
||||
// throw new ApplicationManagementDAOException("Error occurred while getting application list for the tenant"
|
||||
// + " " + tenantId + ". While executing " + sql, e);
|
||||
// } catch (DBConnectionException e) {
|
||||
// throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection while "
|
||||
// + "getting application list for the tenant " + tenantId,
|
||||
// e);
|
||||
// } catch (JSONException e) {
|
||||
// throw new ApplicationManagementDAOException("Error occurred while parsing JSON ", e);
|
||||
// } finally {
|
||||
// Util.cleanupResources(stmt, rs);
|
||||
// }
|
||||
// return applicationList;
|
||||
// }
|
||||
|
||||
|
||||
@Override
|
||||
public ApplicationList getApplications(Filter filter, int tenantId) throws ApplicationManagementDAOException {
|
||||
public List<ApplicationDTO> getApplications(Filter filter,int deviceTypeId, int tenantId) throws ApplicationManagementDAOException {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Getting application data from the database");
|
||||
log.debug(String.format("Filter: limit=%s, offset=%s", filter.getLimit(), filter.getOffset()));
|
||||
@ -245,8 +135,6 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
|
||||
Connection conn;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
ApplicationList applicationList = new ApplicationList();
|
||||
Pagination pagination = new Pagination();
|
||||
String sql = "SELECT "
|
||||
+ "AP_APP.ID AS APP_ID, "
|
||||
+ "AP_APP.NAME AS APP_NAME, "
|
||||
@ -281,15 +169,11 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
|
||||
if (filter == null) {
|
||||
throw new ApplicationManagementDAOException("Filter need to be instantiated");
|
||||
}
|
||||
if (filter.getAppType() != null && !filter.getAppType().isEmpty()) {
|
||||
sql += " AND AP_APP.TYPE ";
|
||||
sql += "= ?";
|
||||
|
||||
if (!StringUtils.isEmpty(filter.getAppType())) {
|
||||
sql += " AND AP_APP.TYPE = ?";
|
||||
}
|
||||
if (filter.getAppCategory() != null && !filter.getAppCategory().isEmpty()) {
|
||||
sql += " AND AP_APP.APP_CATEGORY ";
|
||||
sql += "= ?";
|
||||
}
|
||||
if (filter.getAppName() != null && !filter.getAppName().isEmpty()) {
|
||||
if (!StringUtils.isEmpty(filter.getAppName())) {
|
||||
sql += " AND LOWER (AP_APP.NAME) ";
|
||||
if (filter.isFullMatch()) {
|
||||
sql += "= ?";
|
||||
@ -297,19 +181,30 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
|
||||
sql += "LIKE ?";
|
||||
}
|
||||
}
|
||||
if (filter.getDeviceTypeId() > 0 ) {
|
||||
sql += " AND AP_APP.DEVICE_TYPE_ID ";
|
||||
sql += "= ?";
|
||||
if (!StringUtils.isEmpty(filter.getSubscriptionType())) {
|
||||
sql += " AND AP_APP.SUB_TYPE = ?";
|
||||
}
|
||||
if (filter.getMinimumRating() > 0) {
|
||||
sql += " AND AP_APP.RATING >= ?";
|
||||
}
|
||||
if (!StringUtils.isEmpty(filter.getVersion())) {
|
||||
sql += " AND AP_APP_RELEASE.VERSION = ?";
|
||||
}
|
||||
if (!StringUtils.isEmpty(filter.getAppReleaseType())) {
|
||||
sql += " AND AP_APP_RELEASE.RELEASE_TYPE = ?";
|
||||
}
|
||||
if (!StringUtils.isEmpty(filter.getAppReleaseState())) {
|
||||
sql += " AND AP_APP_RELEASE.CURRENT_STATE = ?";
|
||||
}
|
||||
if (deviceTypeId > 0) {
|
||||
sql += " AND AP_APP.DEVICE_TYPE_ID = ?";
|
||||
}
|
||||
|
||||
String defaultSortOrder = "ASC";
|
||||
if (filter.getSortBy() != null && !filter.getSortBy().isEmpty()) {
|
||||
defaultSortOrder = filter.getSortBy();
|
||||
String sortingOrder = "ASC";
|
||||
if (!StringUtils.isEmpty(filter.getSortBy() )) {
|
||||
sortingOrder = filter.getSortBy();
|
||||
}
|
||||
sql += " ORDER BY APP_ID " + defaultSortOrder +" LIMIT ? OFFSET ? ";
|
||||
|
||||
pagination.setLimit(filter.getLimit());
|
||||
pagination.setOffset(filter.getOffset());
|
||||
sql += " ORDER BY APP_ID " + sortingOrder +" LIMIT ? OFFSET ? ";
|
||||
|
||||
try {
|
||||
conn = this.getDBConnection();
|
||||
@ -319,9 +214,6 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
|
||||
if (filter.getAppType() != null && !filter.getAppType().isEmpty()) {
|
||||
stmt.setString(paramIndex++, filter.getAppType());
|
||||
}
|
||||
if (filter.getAppCategory() != null && !filter.getAppCategory().isEmpty()) {
|
||||
stmt.setString(paramIndex++, filter.getAppCategory());
|
||||
}
|
||||
if (filter.getAppName() != null && !filter.getAppName().isEmpty()) {
|
||||
if (filter.isFullMatch()) {
|
||||
stmt.setString(paramIndex++, filter.getAppName().toLowerCase());
|
||||
@ -329,11 +221,24 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
|
||||
stmt.setString(paramIndex++, "%" + filter.getAppName().toLowerCase() + "%");
|
||||
}
|
||||
}
|
||||
if (filter.getDeviceTypeId() > 0 ) {
|
||||
stmt.setInt(paramIndex++, filter.getDeviceTypeId());
|
||||
if (!StringUtils.isEmpty(filter.getSubscriptionType())) {
|
||||
stmt.setString(paramIndex++, filter.getSubscriptionType());
|
||||
}
|
||||
if (filter.getMinimumRating() > 0) {
|
||||
stmt.setInt(paramIndex++, filter.getMinimumRating());
|
||||
}
|
||||
if (!StringUtils.isEmpty(filter.getVersion())) {
|
||||
stmt.setString(paramIndex++, filter.getVersion());
|
||||
}
|
||||
if (!StringUtils.isEmpty(filter.getAppReleaseType())) {
|
||||
stmt.setString(paramIndex++, filter.getAppReleaseType());
|
||||
}
|
||||
if (!StringUtils.isEmpty(filter.getAppReleaseState())) {
|
||||
stmt.setString(paramIndex++, filter.getAppReleaseState());
|
||||
}
|
||||
if (deviceTypeId > 0 ) {
|
||||
stmt.setInt(paramIndex++, deviceTypeId);
|
||||
}
|
||||
|
||||
|
||||
if (filter.getLimit() == 0) {
|
||||
stmt.setInt(paramIndex++, 100);
|
||||
} else {
|
||||
@ -341,11 +246,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
|
||||
}
|
||||
stmt.setInt(paramIndex, filter.getOffset());
|
||||
rs = stmt.executeQuery();
|
||||
applicationList.setApplications(Util.loadApplications(rs));
|
||||
applicationList.setPagination(pagination);
|
||||
applicationList.getPagination().setSize(filter.getOffset());
|
||||
applicationList.getPagination().setCount(applicationList.getApplications().size());
|
||||
|
||||
return Util.loadApplications(rs);
|
||||
} catch (SQLException e) {
|
||||
throw new ApplicationManagementDAOException("Error occurred while getting application list for the tenant"
|
||||
+ " " + tenantId + ". While executing " + sql, e);
|
||||
@ -358,7 +259,6 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
|
||||
} finally {
|
||||
Util.cleanupResources(stmt, rs);
|
||||
}
|
||||
return applicationList;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -972,6 +872,70 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getAppTags(int appId, int tenantId) throws ApplicationManagementDAOException {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Request received in DAO Layer to get tags for given application.");
|
||||
}
|
||||
Connection conn;
|
||||
List<String> tags = new ArrayList<>();
|
||||
String sql = "SELECT tag.TAG AS TAG "
|
||||
+ "FROM "
|
||||
+ "AP_APP_TAG tag INNER JOIN AP_APP_TAG_MAPPING tag_map ON tag.ID = tag_map.AP_APP_TAG_ID "
|
||||
+ "INNER JOIN AP_APP app ON tag_map.AP_APP_ID = app.ID "
|
||||
+ "WHERE app.ID = ? and app.TENANT_ID = ?";
|
||||
try {
|
||||
conn = this.getDBConnection();
|
||||
try (PreparedStatement stmt = conn.prepareStatement(sql)){
|
||||
stmt.setInt(1, appId);
|
||||
stmt.setInt(2, tenantId);
|
||||
try (ResultSet rs = stmt.executeQuery()) {
|
||||
while (rs.next()) {
|
||||
tags.add(rs.getString("TAG"));
|
||||
}
|
||||
}
|
||||
}
|
||||
return tags;
|
||||
} catch (DBConnectionException e) {
|
||||
throw new ApplicationManagementDAOException(
|
||||
"Error occurred while obtaining the DB connection when adding tags", e);
|
||||
} catch (SQLException e) {
|
||||
throw new ApplicationManagementDAOException("Error occurred while adding tags", e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getAppCategories(int appId, int tenantId) throws ApplicationManagementDAOException {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Request received in DAO Layer to get categories for given application.");
|
||||
}
|
||||
Connection conn;
|
||||
List<String> categories = new ArrayList<>();
|
||||
String sql = "SELECT CATEGORY "
|
||||
+ "FROM "
|
||||
+ "AP_APP_CATEGORY cat INNER JOIN AP_APP_CATEGORY_MAPPING cat_map ON cat.ID = cat_map.AP_APP_CATEGORY_ID "
|
||||
+ "INNER JOIN AP_APP app ON cat_map.AP_APP_ID = app.ID "
|
||||
+ "WHERE app.ID = ? and app.TENANT_ID = ?";
|
||||
try {
|
||||
conn = this.getDBConnection();
|
||||
try (PreparedStatement stmt = conn.prepareStatement(sql)){
|
||||
stmt.setInt(1, appId);
|
||||
stmt.setInt(2, tenantId);
|
||||
try (ResultSet rs = stmt.executeQuery()) {
|
||||
while (rs.next()) {
|
||||
categories.add(rs.getString("CATEGORY"));
|
||||
}
|
||||
}
|
||||
}
|
||||
return categories;
|
||||
} catch (DBConnectionException e) {
|
||||
throw new ApplicationManagementDAOException(
|
||||
"Error occurred while obtaining the DB connection when adding tags", e);
|
||||
} catch (SQLException e) {
|
||||
throw new ApplicationManagementDAOException("Error occurred while adding tags", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void deleteTags(List<String> tags, int applicationId, int tenantId) throws ApplicationManagementDAOException {
|
||||
|
||||
@ -79,7 +79,9 @@ public class GenericVisibilityDAOImpl extends AbstractDAOImpl implements Visibil
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
List<String> unrestrictedRoles = new ArrayList<>();
|
||||
String sql = "SELECT ID, ROLE FROM AP_UNRESTRICTED_ROLE WHERE AP_APP_ID = ? AND TENANT_ID = ?;";
|
||||
String sql = "SELECT ROLE "
|
||||
+ "FROM AP_UNRESTRICTED_ROLE "
|
||||
+ "WHERE AP_APP_ID = ? AND TENANT_ID = ?";
|
||||
try{
|
||||
conn = this.getDBConnection();
|
||||
conn.setAutoCommit(false);
|
||||
|
||||
@ -30,6 +30,8 @@ import org.wso2.carbon.context.PrivilegedCarbonContext;
|
||||
import org.wso2.carbon.device.application.mgt.common.AppLifecycleState;
|
||||
import org.wso2.carbon.device.application.mgt.common.ApplicationArtifact;
|
||||
import org.wso2.carbon.device.application.mgt.common.ApplicationInstaller;
|
||||
import org.wso2.carbon.device.application.mgt.common.Pagination;
|
||||
import org.wso2.carbon.device.application.mgt.common.config.RatingConfiguration;
|
||||
import org.wso2.carbon.device.application.mgt.common.dto.ApplicationDTO;
|
||||
import org.wso2.carbon.device.application.mgt.common.ApplicationList;
|
||||
import org.wso2.carbon.device.application.mgt.common.dto.ApplicationReleaseDTO;
|
||||
@ -158,15 +160,15 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
||||
|
||||
filter.setFullMatch(true);
|
||||
filter.setAppName(applicationDTO.getName().trim());
|
||||
filter.setDeviceTypeId(applicationDTO.getDeviceTypeId());
|
||||
filter.setOffset(0);
|
||||
filter.setLimit(1);
|
||||
|
||||
ConnectionManagerUtil.beginDBTransaction();
|
||||
ApplicationList applicationList = applicationDAO.getApplications(filter, tenantId);
|
||||
if (!applicationList.getApplications().isEmpty()) {
|
||||
List<ApplicationDTO> applicationList = applicationDAO
|
||||
.getApplications(filter, applicationDTO.getDeviceTypeId(), tenantId);
|
||||
if (!applicationList.isEmpty()) {
|
||||
String msg =
|
||||
"Already an application registered with same name - " + applicationList.getApplications().get(0)
|
||||
"Already an application registered with same name - " + applicationList.get(0)
|
||||
.getName();
|
||||
log.error(msg);
|
||||
throw new RequestValidatingException(msg);
|
||||
@ -411,52 +413,110 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApplicationList getApplications(Filter filter, String deviceTypeName)
|
||||
throws ApplicationManagementException {
|
||||
public ApplicationList getApplications(Filter filter) throws ApplicationManagementException {
|
||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
|
||||
String userName = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername();
|
||||
ApplicationList applicationList;
|
||||
List<ApplicationDTO> apps;
|
||||
List<ApplicationReleaseDTO> releases;
|
||||
DeviceType deviceType;
|
||||
|
||||
filter = validateFilter(filter);
|
||||
if (filter == null) {
|
||||
throw new ApplicationManagementException("Filter validation failed, Please verify the request payload");
|
||||
}
|
||||
ApplicationList applicationList = new ApplicationList();
|
||||
List<ApplicationDTO> appDTOs;
|
||||
List<Application> applications = new ArrayList<>();
|
||||
List<ApplicationDTO> filteredApplications = new ArrayList<>();
|
||||
DeviceType deviceType = null;
|
||||
|
||||
try {
|
||||
if (!StringUtils.isEmpty(deviceTypeName)){
|
||||
try {
|
||||
deviceType = getDeviceTypeData(deviceTypeName);
|
||||
filter.setDeviceTypeId(deviceType.getId());
|
||||
} catch (UnexpectedServerErrorException e){
|
||||
throw new ApplicationManagementException(e.getMessage(), e);
|
||||
validateFilter(filter);
|
||||
|
||||
//set default values
|
||||
if (StringUtils.isEmpty(filter.getSortBy())) {
|
||||
filter.setSortBy("ASC");
|
||||
}
|
||||
if (filter.getLimit() == 0) {
|
||||
filter.setLimit(20);
|
||||
}
|
||||
String deviceTypename = filter.getDeviceType();
|
||||
if (!StringUtils.isEmpty(deviceTypename)) {
|
||||
deviceType = getDeviceTypeData(deviceTypename);
|
||||
}
|
||||
|
||||
ConnectionManagerUtil.openDBConnection();
|
||||
// todo modify this logic, join app n release tables
|
||||
applicationList = applicationDAO.getApplications(filter, tenantId);
|
||||
apps = applicationList.getApplications();
|
||||
for ( ApplicationDTO app : apps){
|
||||
if (AppLifecycleState.REMOVED.toString().equals(app.getStatus())){
|
||||
apps.remove(app);
|
||||
if (deviceType == null) {
|
||||
appDTOs = applicationDAO.getApplications(filter, 0, tenantId);
|
||||
} else {
|
||||
appDTOs = applicationDAO.getApplications(filter, deviceType.getId(), tenantId);
|
||||
}
|
||||
|
||||
for (ApplicationDTO app : appDTOs) {
|
||||
boolean isSearchingApp = true;
|
||||
List<String> tags = filter.getTags();
|
||||
List<String> categories = filter.getAppCategories();
|
||||
List<String> unrestrictedRoles = filter.getUnrestrictedRoles();
|
||||
|
||||
if (lifecycleStateManager.getEndState().equals(app.getStatus())) {
|
||||
isSearchingApp = false;
|
||||
}
|
||||
if (unrestrictedRoles != null && !unrestrictedRoles.isEmpty()) {
|
||||
|
||||
if (!isRoleExists(unrestrictedRoles, userName)) {
|
||||
String msg = "At least one filtering role is not assigned for the user: " + userName
|
||||
+ ". Hence user " + userName
|
||||
+ " Can't filter applications by giving these unrestriced role list";
|
||||
log.error(msg);
|
||||
throw new BadRequestException(msg);
|
||||
}
|
||||
List<String> appUnrestrictedRoles = visibilityDAO.getUnrestrictedRoles(app.getId(), tenantId);
|
||||
boolean isUnrestrictedRoleExistForApp = false;
|
||||
for (String role : unrestrictedRoles) {
|
||||
if (appUnrestrictedRoles.contains(role)) {
|
||||
isUnrestrictedRoleExistForApp = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
applicationList.setApplications(apps);
|
||||
if (applicationList.getApplications() != null && !applicationList
|
||||
.getApplications().isEmpty()) {
|
||||
if (!isAdminUser(userName, tenantId, CarbonConstants.UI_ADMIN_PERMISSION_COLLECTION)) {
|
||||
applicationList = getRoleRestrictedApplicationList(applicationList, userName);
|
||||
}
|
||||
for (ApplicationDTO application : applicationList.getApplications()) {
|
||||
releases = getReleases(application, filter.getCurrentAppReleaseState());
|
||||
application.setApplicationReleases(releases);
|
||||
if (!isUnrestrictedRoleExistForApp) {
|
||||
isSearchingApp = false;
|
||||
}
|
||||
}
|
||||
if (tags != null && !tags.isEmpty()) {
|
||||
List<String> appTagList = applicationDAO.getAppTags(app.getId(), tenantId);
|
||||
boolean isTagExistForApp = false;
|
||||
for (String tag : tags) {
|
||||
if (appTagList.contains(tag)) {
|
||||
isTagExistForApp = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!isTagExistForApp) {
|
||||
isSearchingApp = false;
|
||||
}
|
||||
}
|
||||
if (categories != null && !categories.isEmpty()) {
|
||||
List<String> appTagList = applicationDAO.getAppCategories(app.getId(), tenantId);
|
||||
boolean isCategoryExistForApp = false;
|
||||
for (String category : categories) {
|
||||
if (appTagList.contains(category)) {
|
||||
isCategoryExistForApp = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!isCategoryExistForApp) {
|
||||
isSearchingApp = false;
|
||||
}
|
||||
}
|
||||
if (isSearchingApp) {
|
||||
filteredApplications.add(app);
|
||||
}
|
||||
}
|
||||
|
||||
for(ApplicationDTO appDTO : filteredApplications){
|
||||
applications.add(appDtoToAppResponse(appDTO));
|
||||
}
|
||||
applicationList.setApplications(applications);
|
||||
Pagination pagination = new Pagination();
|
||||
applicationList.setPagination(pagination);
|
||||
applicationList.getPagination().setSize(filter.getOffset());
|
||||
applicationList.getPagination().setCount(applicationList.getApplications().size());
|
||||
return applicationList;
|
||||
} catch (UserStoreException e) {
|
||||
} catch (UnexpectedServerErrorException e){
|
||||
throw new ApplicationManagementException(e.getMessage(), e);
|
||||
}catch (UserStoreException e) {
|
||||
throw new ApplicationManagementException(
|
||||
"User-store exception while checking whether the user " + userName + " of tenant " + tenantId
|
||||
+ " has the publisher permission", e);
|
||||
@ -1165,26 +1225,26 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
||||
* @param userName user name
|
||||
* @return ApplicationDTO related with the UUID
|
||||
*/
|
||||
private ApplicationList getRoleRestrictedApplicationList(ApplicationList applicationList, String userName)
|
||||
throws ApplicationManagementException {
|
||||
ApplicationList roleRestrictedApplicationList = new ApplicationList();
|
||||
ArrayList<ApplicationDTO> unRestrictedApplications = new ArrayList<>();
|
||||
for (ApplicationDTO application : applicationList.getApplications()) {
|
||||
if (application.getUnrestrictedRoles().isEmpty()) {
|
||||
unRestrictedApplications.add(application);
|
||||
} else {
|
||||
try {
|
||||
if (isRoleExists(application.getUnrestrictedRoles(), userName)) {
|
||||
unRestrictedApplications.add(application);
|
||||
}
|
||||
} catch (UserStoreException e) {
|
||||
throw new ApplicationManagementException("Role restriction verifying is failed");
|
||||
}
|
||||
}
|
||||
}
|
||||
roleRestrictedApplicationList.setApplications(unRestrictedApplications);
|
||||
return roleRestrictedApplicationList;
|
||||
}
|
||||
// private ApplicationList getRoleRestrictedApplicationList(ApplicationList applicationList, String userName)
|
||||
// throws ApplicationManagementException {
|
||||
// ApplicationList roleRestrictedApplicationList = new ApplicationList();
|
||||
// ArrayList<ApplicationDTO> unRestrictedApplications = new ArrayList<>();
|
||||
// for (ApplicationDTO application : applicationList.getApplications()) {
|
||||
// if (application.getUnrestrictedRoles().isEmpty()) {
|
||||
// unRestrictedApplications.add(application);
|
||||
// } else {
|
||||
// try {
|
||||
// if (isRoleExists(application.getUnrestrictedRoles(), userName)) {
|
||||
// unRestrictedApplications.add(application);
|
||||
// }
|
||||
// } catch (UserStoreException e) {
|
||||
// throw new ApplicationManagementException("Role restriction verifying is failed");
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// roleRestrictedApplicationList.setApplications(unRestrictedApplications);
|
||||
// return roleRestrictedApplicationList;
|
||||
// }
|
||||
|
||||
/**
|
||||
* To validate a app release creating request and app updating request to make sure all the pre-conditions
|
||||
@ -1397,20 +1457,55 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
||||
}
|
||||
}
|
||||
|
||||
private Filter validateFilter(Filter filter) {
|
||||
if (filter != null && filter.getAppType() != null) {
|
||||
boolean isValidRequest = false;
|
||||
private void validateFilter(Filter filter) throws BadRequestException {
|
||||
if (filter == null) {
|
||||
String msg = "Filter validation is failed, Filter shouldn't be null, hence please verify the request payload";
|
||||
log.error(msg);
|
||||
throw new BadRequestException(msg);
|
||||
}
|
||||
String appType = filter.getAppType();
|
||||
|
||||
if (!StringUtils.isEmpty(appType)) {
|
||||
boolean isValidAppType = false;
|
||||
for (ApplicationType applicationType : ApplicationType.values()) {
|
||||
if (applicationType.toString().equals(filter.getAppType())) {
|
||||
isValidRequest = true;
|
||||
if (applicationType.toString().equals(appType)) {
|
||||
isValidAppType = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!isValidRequest) {
|
||||
return null;
|
||||
if (!isValidAppType) {
|
||||
String msg =
|
||||
"Filter validation is failed, Invalid application type is found in filter. Application Type: "
|
||||
+ appType + " Please verify the request payload";
|
||||
log.error(msg);
|
||||
throw new BadRequestException(msg);
|
||||
}
|
||||
}
|
||||
return filter;
|
||||
|
||||
RatingConfiguration ratingConfiguration = ConfigurationManager.getInstance().getConfiguration()
|
||||
.getRatingConfiguration();
|
||||
|
||||
int defaultMinRating = ratingConfiguration.getMinRatingValue();
|
||||
int defaultMaxRating = ratingConfiguration.getMaxRatingValue();
|
||||
int filteringMinRating = filter.getMinimumRating();
|
||||
|
||||
if (filteringMinRating != 0 && (filteringMinRating < defaultMinRating || filteringMinRating > defaultMaxRating))
|
||||
{
|
||||
String msg = "Filter validation is failed, Minimum rating value: " + filteringMinRating
|
||||
+ " is not in the range of default minimum rating value " + defaultMaxRating
|
||||
+ " and default maximum rating " + defaultMaxRating;
|
||||
log.error(msg);
|
||||
throw new BadRequestException(msg);
|
||||
}
|
||||
|
||||
String appReleaseState = filter.getAppReleaseState();
|
||||
if (!StringUtils.isEmpty(appReleaseState) && !lifecycleStateManager.isStateExist(appReleaseState)) {
|
||||
String msg = "Filter validation is failed, Requesting to filter by invalid app release state: "
|
||||
+ appReleaseState;
|
||||
log.error(msg);
|
||||
throw new BadRequestException(msg);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private <T> List<T> getDifference(List<T> list1, Collection<T> list2) {
|
||||
|
||||
@ -172,7 +172,7 @@ public class LifecycleStateManager {
|
||||
return initialState;
|
||||
}
|
||||
|
||||
public String getEntState() throws LifecycleManagementException {
|
||||
public String getEndState() throws LifecycleManagementException {
|
||||
String endState = null;
|
||||
for (Map.Entry<String, State> stringStateEntry : lifecycleStates.entrySet()) {
|
||||
if (stringStateEntry.getValue().isEndState()) {
|
||||
@ -189,6 +189,15 @@ public class LifecycleStateManager {
|
||||
return endState;
|
||||
}
|
||||
|
||||
public boolean isStateExist(String currentState) {
|
||||
for (Map.Entry<String, State> stringStateEntry : lifecycleStates.entrySet()) {
|
||||
if (stringStateEntry.getKey().equalsIgnoreCase(currentState)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void setLifecycleStates(Map<String, State> lifecycleStates) {
|
||||
this.lifecycleStates = lifecycleStates;
|
||||
}
|
||||
|
||||
@ -18,6 +18,7 @@
|
||||
|
||||
package org.wso2.carbon.device.application.mgt.core.util;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
||||
@ -164,26 +165,29 @@ public class APIUtil {
|
||||
return appmDataHandler;
|
||||
}
|
||||
|
||||
public static Filter constructFilter( String appName, String appType, String appCategory,
|
||||
boolean isFullMatch, String releaseState, int offset, int limit, String sortBy) {
|
||||
Filter filter = new Filter();
|
||||
filter.setOffset(offset);
|
||||
filter.setLimit(limit);
|
||||
filter.setSortBy(sortBy);
|
||||
filter.setFullMatch(isFullMatch);
|
||||
if (appName != null && !appName.isEmpty()) {
|
||||
filter.setAppName(appName);
|
||||
}
|
||||
if (appType != null && !appType.isEmpty()) {
|
||||
filter.setAppType(appType);
|
||||
}
|
||||
if (appCategory != null && !appCategory.isEmpty()) {
|
||||
filter.setAppCategory(appCategory);
|
||||
}
|
||||
if (releaseState != null && !releaseState.isEmpty()) {
|
||||
filter.setCurrentAppReleaseState(releaseState);
|
||||
}
|
||||
return filter;
|
||||
}
|
||||
// public static Filter constructFilter( String appName, String appType, String appCategory, String tags,
|
||||
// boolean isFullMatch, String releaseState, int offset, int limit, String sortBy) {
|
||||
// Filter filter = new Filter();
|
||||
// filter.setOffset(offset);
|
||||
// filter.setLimit(limit);
|
||||
// filter.setSortBy(sortBy);
|
||||
// filter.setFullMatch(isFullMatch);
|
||||
// if (!StringUtils.isEmpty(appName)) {
|
||||
// filter.setAppName(appName);
|
||||
// }
|
||||
// if (!StringUtils.isEmpty(appType)) {
|
||||
// filter.setAppType(appType);
|
||||
// }
|
||||
// if (!StringUtils.isEmpty(appCategory)) {
|
||||
// filter.setAppCategories(appCategory);
|
||||
// }
|
||||
// if (!StringUtils.isEmpty(tags)) {
|
||||
// filter.setAppCategories(appCategory);
|
||||
// }
|
||||
// if (!StringUtils.isEmpty(releaseState)) {
|
||||
// filter.setAppReleaseState(releaseState);
|
||||
// }
|
||||
// return filter;
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
@ -95,7 +95,7 @@ public interface ApplicationManagementAPI {
|
||||
|
||||
String SCOPE = "scope";
|
||||
|
||||
@GET
|
||||
@POST
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
@Consumes(MediaType.APPLICATION_JSON)
|
||||
@ApiOperation(
|
||||
@ -125,48 +125,12 @@ public interface ApplicationManagementAPI {
|
||||
code = 500,
|
||||
message = "Internal Server Error. \n Error occurred while getting the application list.",
|
||||
response = ErrorResponse.class)
|
||||
})
|
||||
Response getApplications(
|
||||
}) Response getApplications(
|
||||
@ApiParam(
|
||||
name = "deviceType",
|
||||
value = "Supporting device Type of the application")
|
||||
@QueryParam("device-type") String deviceType,
|
||||
@ApiParam(
|
||||
name = "name",
|
||||
value = "Name of the application")
|
||||
@QueryParam("name") String appName,
|
||||
@ApiParam(
|
||||
name = "type",
|
||||
value = "Type of the application")
|
||||
@QueryParam("type") String appType,
|
||||
@ApiParam(
|
||||
name = "category",
|
||||
value = "CategoryDTO of the application")
|
||||
@QueryParam("category") String appCategory,
|
||||
@ApiParam(
|
||||
name = "exact-match",
|
||||
value = "Is it requesting exactly matching application or partially matching application.")
|
||||
@QueryParam("exact-match") boolean isFullMatch,
|
||||
@ApiParam(
|
||||
name = "release-state",
|
||||
value = "Current state of the application release")
|
||||
@QueryParam("release-state") String releaseState,
|
||||
@ApiParam(
|
||||
name = "offset",
|
||||
value = "offset",
|
||||
defaultValue = "0")
|
||||
@QueryParam("offset") int offset,
|
||||
@ApiParam(
|
||||
name = "limit",
|
||||
value = "limit",
|
||||
defaultValue = "20")
|
||||
@QueryParam("limit") int limit,
|
||||
@ApiParam(
|
||||
name = "sort",
|
||||
value = "Sorting type",
|
||||
defaultValue = "AES")
|
||||
@QueryParam("sort") String sortBy
|
||||
);
|
||||
name = "Filter",
|
||||
value = "Get application filter",
|
||||
required = true)
|
||||
@Valid Filter filter);
|
||||
|
||||
@GET
|
||||
@Path("/{appId}")
|
||||
|
||||
@ -70,33 +70,22 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
|
||||
|
||||
private static Log log = LogFactory.getLog(ApplicationManagementAPIImpl.class);
|
||||
|
||||
@GET
|
||||
@POST
|
||||
@Override
|
||||
@Consumes("application/json")
|
||||
public Response getApplications(
|
||||
@QueryParam("device-type") String deviceType,
|
||||
@QueryParam("name") String appName,
|
||||
@QueryParam("type") String appType,
|
||||
@QueryParam("category") String appCategory,
|
||||
@QueryParam("exact-match") boolean isFullMatch,
|
||||
@QueryParam("release-state") String releaseState,
|
||||
@DefaultValue("0") @QueryParam("offset") int offset,
|
||||
@DefaultValue("20") @QueryParam("limit") int limit,
|
||||
@DefaultValue("ASC") @QueryParam("sort") String sortBy) {
|
||||
@Valid Filter filter ){
|
||||
ApplicationManager applicationManager = APIUtil.getApplicationManager();
|
||||
|
||||
try {
|
||||
Filter filter = APIUtil
|
||||
.constructFilter(appName, appType, appCategory, isFullMatch, releaseState, offset,
|
||||
limit, sortBy);
|
||||
ApplicationList applications = applicationManager.getApplications(filter, deviceType);
|
||||
ApplicationList applications = applicationManager.getApplications(filter);
|
||||
if (applications.getApplications().isEmpty()) {
|
||||
return Response.status(Response.Status.NOT_FOUND)
|
||||
.entity("Couldn't find any application for the requested query.").build();
|
||||
}
|
||||
return Response.status(Response.Status.OK).entity(applications).build();
|
||||
} catch(BadRequestException e){
|
||||
String msg = "Couldn't found a device type for " + deviceType;
|
||||
String msg = "Incompatible request payload is found. Please try with valid reuest payload.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.BAD_REQUEST).entity(msg).build();
|
||||
}catch (ApplicationManagementException e) {
|
||||
|
||||
@ -67,17 +67,17 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
|
||||
filter.setLimit(limit);
|
||||
filter.setSortBy(sortBy);
|
||||
filter.setFullMatch(isFullMatch);
|
||||
filter.setCurrentAppReleaseState(AppLifecycleState.PUBLISHED.toString());
|
||||
filter.setAppReleaseState(AppLifecycleState.PUBLISHED.toString());
|
||||
if (appName != null && !appName.isEmpty()) {
|
||||
filter.setAppName(appName);
|
||||
}
|
||||
if (appType != null && !appType.isEmpty()) {
|
||||
filter.setAppType(appType);
|
||||
}
|
||||
if (appCategory != null && !appCategory.isEmpty()) {
|
||||
filter.setAppCategory(appCategory);
|
||||
}
|
||||
ApplicationList applications = applicationManager.getApplications(filter, null);
|
||||
// if (appCategory != null && !appCategory.isEmpty()) {
|
||||
// filter.setAppCategories(appCategory);
|
||||
// }
|
||||
ApplicationList applications = applicationManager.getApplications(filter);
|
||||
if (applications.getApplications().isEmpty()) {
|
||||
return Response.status(Response.Status.NOT_FOUND)
|
||||
.entity("Couldn't find any application for requested query.").build();
|
||||
|
||||
@ -174,4 +174,9 @@
|
||||
<Category>EMM</Category>
|
||||
<Category>IoT</Category>
|
||||
</AppCategories>
|
||||
|
||||
<RatingConfig>
|
||||
<MinRatingValue>1</MinRatingValue>
|
||||
<MaxRatingValue>10</MaxRatingValue>
|
||||
</RatingConfig>
|
||||
</ApplicationManagementConfiguration>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user