mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
Merge branch 'application-mgt-new' into 'application-mgt-new'
Add Application update API See merge request entgra/carbon-device-mgt!78
This commit is contained in:
commit
6e711ed1e0
@ -42,7 +42,7 @@ import javax.ws.rs.core.Response;
|
|||||||
@SwaggerDefinition(
|
@SwaggerDefinition(
|
||||||
info = @Info(
|
info = @Info(
|
||||||
version = "1.0.0",
|
version = "1.0.0",
|
||||||
title = "ApplicationDTO Management Common Service",
|
title = "Application Management Artifact Download Service",
|
||||||
extensions = {
|
extensions = {
|
||||||
@Extension(properties = {
|
@Extension(properties = {
|
||||||
@ExtensionProperty(name = "name", value = "ApplicationManagementArtifactDownloadService"),
|
@ExtensionProperty(name = "name", value = "ApplicationManagementArtifactDownloadService"),
|
||||||
|
|||||||
@ -40,17 +40,17 @@ import javax.ws.rs.core.Response;
|
|||||||
@SwaggerDefinition(
|
@SwaggerDefinition(
|
||||||
info = @Info(
|
info = @Info(
|
||||||
version = "1.0.0",
|
version = "1.0.0",
|
||||||
title = "ApplicationDTO Management Common Service",
|
title = "Application Management Config Retrieve Service",
|
||||||
extensions = {
|
extensions = {
|
||||||
@Extension(properties = {
|
@Extension(properties = {
|
||||||
@ExtensionProperty(name = "name", value = "ApplicationManagementCommonService"),
|
@ExtensionProperty(name = "name", value = "ApplicationManagementConfigRetrieveService"),
|
||||||
@ExtensionProperty(name = "context", value = "/api/application-mgt/v1.0/configt"),
|
@ExtensionProperty(name = "context", value = "/api/application-mgt/v1.0/config"),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@Path("/config")
|
@Path("/config")
|
||||||
@Api(value = "ApplicationDTO Management Common Service", description = "This API carries all application management common services")
|
@Api(value = "ApplicationDTO Management Common Service")
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
public interface ConfigRetrieveAPI {
|
public interface ConfigRetrieveAPI {
|
||||||
|
|
||||||
|
|||||||
@ -55,7 +55,6 @@ public class ArtifactDownloadAPIImpl implements ArtifactDownloadAPI {
|
|||||||
Response.ResponseBuilder response = Response
|
Response.ResponseBuilder response = Response
|
||||||
.ok(fileInputStream, MediaType.APPLICATION_OCTET_STREAM);
|
.ok(fileInputStream, MediaType.APPLICATION_OCTET_STREAM);
|
||||||
response.status(Response.Status.OK);
|
response.status(Response.Status.OK);
|
||||||
// response.type("application/html");
|
|
||||||
response.header("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
|
response.header("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
|
||||||
return response.build();
|
return response.build();
|
||||||
} catch (NotFoundException e) {
|
} catch (NotFoundException e) {
|
||||||
|
|||||||
@ -43,7 +43,7 @@
|
|||||||
</session-config>
|
</session-config>
|
||||||
<context-param>
|
<context-param>
|
||||||
<param-name>doAuthentication</param-name>
|
<param-name>doAuthentication</param-name>
|
||||||
<param-value>false</param-value>
|
<param-value>true</param-value>
|
||||||
</context-param>
|
</context-param>
|
||||||
|
|
||||||
<!-- Below configuration is used to redirect http requests to https -->
|
<!-- Below configuration is used to redirect http requests to https -->
|
||||||
@ -117,4 +117,12 @@
|
|||||||
<url-pattern>/*</url-pattern>
|
<url-pattern>/*</url-pattern>
|
||||||
</filter-mapping>
|
</filter-mapping>
|
||||||
|
|
||||||
|
<context-param>
|
||||||
|
<param-name>nonSecuredEndPoints</param-name>
|
||||||
|
<param-value>
|
||||||
|
/api/application-mgt/v1.0/artifact/.*,
|
||||||
|
/api/application-mgt/v1.0/config/.*
|
||||||
|
</param-value>
|
||||||
|
</context-param>
|
||||||
|
|
||||||
</web-app>
|
</web-app>
|
||||||
@ -79,12 +79,6 @@ public class ApplicationDTO {
|
|||||||
example = "1, 2, 3")
|
example = "1, 2, 3")
|
||||||
private int deviceTypeId;
|
private int deviceTypeId;
|
||||||
|
|
||||||
@ApiModelProperty(name = "deviceTypeName",
|
|
||||||
value = "Related device type of the application",
|
|
||||||
required = true,
|
|
||||||
example = "IoS, Android, Arduino, RaspberryPi etc")
|
|
||||||
private String deviceTypeName;
|
|
||||||
|
|
||||||
@ApiModelProperty(name = "appRating",
|
@ApiModelProperty(name = "appRating",
|
||||||
value = "Rating of the aplication")
|
value = "Rating of the aplication")
|
||||||
private int appRating;
|
private int appRating;
|
||||||
@ -168,12 +162,6 @@ public class ApplicationDTO {
|
|||||||
this.unrestrictedRoles = unrestrictedRoles;
|
this.unrestrictedRoles = unrestrictedRoles;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getDeviceTypeName() {
|
|
||||||
return deviceTypeName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDeviceTypeName(String deviceTypeName) { this.deviceTypeName = deviceTypeName; }
|
|
||||||
|
|
||||||
public int getDeviceTypeId() {
|
public int getDeviceTypeId() {
|
||||||
return deviceTypeId;
|
return deviceTypeId;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -66,6 +66,12 @@ public class ApplicationRelease {
|
|||||||
example = "alpha, beta etc")
|
example = "alpha, beta etc")
|
||||||
private String releaseType;
|
private String releaseType;
|
||||||
|
|
||||||
|
@ApiModelProperty(name = "currentStatus",
|
||||||
|
value = "CurrentStatus of the Application Release.",
|
||||||
|
required = true,
|
||||||
|
example = "CREATED, IN-REVIEW, PUBLISHED etc")
|
||||||
|
private String currentStatus;
|
||||||
|
|
||||||
@ApiModelProperty(name = "price",
|
@ApiModelProperty(name = "price",
|
||||||
value = "Price of the application release",
|
value = "Price of the application release",
|
||||||
required = true)
|
required = true)
|
||||||
@ -172,4 +178,8 @@ public class ApplicationRelease {
|
|||||||
public String getSupportedOsVersions() { return supportedOsVersions; }
|
public String getSupportedOsVersions() { return supportedOsVersions; }
|
||||||
|
|
||||||
public void setSupportedOsVersions(String supportedOsVersions) { this.supportedOsVersions = supportedOsVersions; }
|
public void setSupportedOsVersions(String supportedOsVersions) { this.supportedOsVersions = supportedOsVersions; }
|
||||||
|
|
||||||
|
public String getCurrentStatus() { return currentStatus; }
|
||||||
|
|
||||||
|
public void setCurrentStatus(String currentStatus) { this.currentStatus = currentStatus; }
|
||||||
}
|
}
|
||||||
|
|||||||
@ -30,6 +30,7 @@ import org.wso2.carbon.device.application.mgt.common.exception.RequestValidating
|
|||||||
import org.wso2.carbon.device.application.mgt.common.response.Application;
|
import org.wso2.carbon.device.application.mgt.common.response.Application;
|
||||||
import org.wso2.carbon.device.application.mgt.common.response.ApplicationRelease;
|
import org.wso2.carbon.device.application.mgt.common.response.ApplicationRelease;
|
||||||
import org.wso2.carbon.device.application.mgt.common.wrapper.ApplicationReleaseWrapper;
|
import org.wso2.carbon.device.application.mgt.common.wrapper.ApplicationReleaseWrapper;
|
||||||
|
import org.wso2.carbon.device.application.mgt.common.wrapper.ApplicationUpdateWrapper;
|
||||||
import org.wso2.carbon.device.application.mgt.common.wrapper.ApplicationWrapper;
|
import org.wso2.carbon.device.application.mgt.common.wrapper.ApplicationWrapper;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
@ -53,12 +54,13 @@ public interface ApplicationManager {
|
|||||||
/**
|
/**
|
||||||
* Updates an already existing application.
|
* Updates an already existing application.
|
||||||
*
|
*
|
||||||
* @param applicationWrapper Application that need to be updated.
|
* @param applicationUpdateWrapper Application data that need to be updated.
|
||||||
* @param applicationId ID of the application
|
* @param applicationId ID of the application
|
||||||
* @return Updated Application
|
* @return Updated Application
|
||||||
* @throws ApplicationManagementException ApplicationDTO Management Exception
|
* @throws ApplicationManagementException ApplicationDTO Management Exception
|
||||||
*/
|
*/
|
||||||
void updateApplication(int applicationId, ApplicationWrapper applicationWrapper) throws ApplicationManagementException;
|
void updateApplication(int applicationId, ApplicationUpdateWrapper applicationUpdateWrapper)
|
||||||
|
throws ApplicationManagementException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delete an application identified by the unique ID.
|
* Delete an application identified by the unique ID.
|
||||||
|
|||||||
@ -0,0 +1,99 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2017, 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.application.mgt.common.wrapper;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@ApiModel(value = "ApplicationWrapper", description = "ApplicationWrapper represents the an ApplicationDTO in ApplicationDTO Store")
|
||||||
|
public class ApplicationUpdateWrapper {
|
||||||
|
|
||||||
|
|
||||||
|
@ApiModelProperty(name = "name",
|
||||||
|
value = "Name of the application",
|
||||||
|
required = true)
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@ApiModelProperty(name = "description",
|
||||||
|
value = "Description of the application",
|
||||||
|
required = true)
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
@ApiModelProperty(name = "appCategory",
|
||||||
|
value = "CategoryDTO of the application",
|
||||||
|
required = true,
|
||||||
|
example = "Educational, Gaming, Travel, Entertainment etc")
|
||||||
|
private String appCategory;
|
||||||
|
|
||||||
|
@ApiModelProperty(name = "subType",
|
||||||
|
value = "Subscription type of the application",
|
||||||
|
required = true,
|
||||||
|
example = "PAID, FREE")
|
||||||
|
private String subType;
|
||||||
|
|
||||||
|
@ApiModelProperty(name = "paymentCurrency",
|
||||||
|
value = "Payment currency of the application",
|
||||||
|
required = true,
|
||||||
|
example = "$")
|
||||||
|
private String paymentCurrency;
|
||||||
|
|
||||||
|
@ApiModelProperty(name = "tags",
|
||||||
|
value = "List of application tags")
|
||||||
|
private List<String> tags;
|
||||||
|
|
||||||
|
@ApiModelProperty(name = "unrestrictedRoles",
|
||||||
|
value = "List of roles that users should have to access the application")
|
||||||
|
private List<String> unrestrictedRoles;
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) { this.name = name; }
|
||||||
|
|
||||||
|
public String getAppCategory() {
|
||||||
|
return appCategory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAppCategory(String appCategory) {
|
||||||
|
this.appCategory = appCategory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getTags() { return tags; }
|
||||||
|
|
||||||
|
public void setTags(List<String> tags) { this.tags = tags; }
|
||||||
|
|
||||||
|
public String getSubType() { return subType; }
|
||||||
|
|
||||||
|
public void setSubType(String subType) { this.subType = subType; }
|
||||||
|
|
||||||
|
public String getPaymentCurrency() { return paymentCurrency; }
|
||||||
|
|
||||||
|
public void setPaymentCurrency(String paymentCurrency) { this.paymentCurrency = paymentCurrency; }
|
||||||
|
|
||||||
|
public List<String> getUnrestrictedRoles() { return unrestrictedRoles; }
|
||||||
|
|
||||||
|
public void setUnrestrictedRoles(List<String> unrestrictedRoles) { this.unrestrictedRoles = unrestrictedRoles; }
|
||||||
|
|
||||||
|
public String getDescription() { return description; }
|
||||||
|
|
||||||
|
public void setDescription(String description) { this.description = description; }
|
||||||
|
}
|
||||||
@ -57,10 +57,10 @@ public interface ApplicationDAO {
|
|||||||
|
|
||||||
List<String> getAppTags(int appId, int tenantId) throws ApplicationManagementDAOException;
|
List<String> getAppTags(int appId, int tenantId) throws ApplicationManagementDAOException;
|
||||||
|
|
||||||
|
void deleteTagMapping (List<Integer> tagIds, int applicationId, int tenantId) throws ApplicationManagementDAOException;
|
||||||
|
|
||||||
List<String> getAppCategories (int appId, int tenantId) throws ApplicationManagementDAOException;
|
List<String> getAppCategories (int appId, int tenantId) throws ApplicationManagementDAOException;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
List<CategoryDTO> getAllCategories(int tenantId) throws ApplicationManagementDAOException;
|
List<CategoryDTO> getAllCategories(int tenantId) throws ApplicationManagementDAOException;
|
||||||
|
|
||||||
void addCategories(List<String> categories, int tenantId) throws ApplicationManagementDAOException;
|
void addCategories(List<String> categories, int tenantId) throws ApplicationManagementDAOException;
|
||||||
@ -168,7 +168,7 @@ public interface ApplicationDAO {
|
|||||||
* @return Updated ApplicationDTO.
|
* @return Updated ApplicationDTO.
|
||||||
* @throws ApplicationManagementDAOException ApplicationDTO Management DAO Exception.
|
* @throws ApplicationManagementDAOException ApplicationDTO Management DAO Exception.
|
||||||
*/
|
*/
|
||||||
ApplicationDTO editApplication(ApplicationDTO application, int tenantId) throws ApplicationManagementDAOException;
|
boolean updateApplication(ApplicationDTO application, int tenantId) throws ApplicationManagementDAOException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* To delete the application
|
* To delete the application
|
||||||
|
|||||||
@ -507,10 +507,12 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
|
|||||||
+ "AP_APP_RELEASE.UUID AS RELEASE_UUID, "
|
+ "AP_APP_RELEASE.UUID AS RELEASE_UUID, "
|
||||||
+ "AP_APP_RELEASE.RELEASE_TYPE AS RELEASE_TYPE, "
|
+ "AP_APP_RELEASE.RELEASE_TYPE AS RELEASE_TYPE, "
|
||||||
+ "AP_APP_RELEASE.INSTALLER_LOCATION AS AP_RELEASE_STORED_LOC, "
|
+ "AP_APP_RELEASE.INSTALLER_LOCATION AS AP_RELEASE_STORED_LOC, "
|
||||||
|
+ "AP_APP_RELEASE.ICON_LOCATION AS AP_RELEASE_ICON_LOC, "
|
||||||
+ "AP_APP_RELEASE.BANNER_LOCATION AS AP_RELEASE_BANNER_LOC, "
|
+ "AP_APP_RELEASE.BANNER_LOCATION AS AP_RELEASE_BANNER_LOC, "
|
||||||
+ "AP_APP_RELEASE.SC_1_LOCATION AS AP_RELEASE_SC1, "
|
+ "AP_APP_RELEASE.SC_1_LOCATION AS AP_RELEASE_SC1, "
|
||||||
+ "AP_APP_RELEASE.SC_2_LOCATION AS AP_RELEASE_SC2, "
|
+ "AP_APP_RELEASE.SC_2_LOCATION AS AP_RELEASE_SC2, "
|
||||||
+ "AP_APP_RELEASE.SC_3_LOCATION AS AP_RELEASE_SC3, "
|
+ "AP_APP_RELEASE.SC_3_LOCATION AS AP_RELEASE_SC3, "
|
||||||
|
+ "AP_APP_RELEASE.APP_HASH_VALUE AS RELEASE_HASH_VALUE, "
|
||||||
+ "AP_APP_RELEASE.APP_PRICE AS RELEASE_PRICE, "
|
+ "AP_APP_RELEASE.APP_PRICE AS RELEASE_PRICE, "
|
||||||
+ "AP_APP_RELEASE.APP_META_INFO AS RELEASE_META_INFO, "
|
+ "AP_APP_RELEASE.APP_META_INFO AS RELEASE_META_INFO, "
|
||||||
+ "AP_APP_RELEASE.SUPPORTED_OS_VERSIONS AS RELEASE_SUP_OS_VERSIONS, "
|
+ "AP_APP_RELEASE.SUPPORTED_OS_VERSIONS AS RELEASE_SUP_OS_VERSIONS, "
|
||||||
@ -583,66 +585,36 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ApplicationDTO editApplication(ApplicationDTO application, int tenantId)
|
public boolean updateApplication(ApplicationDTO applicationDTO, int tenantId)
|
||||||
throws ApplicationManagementDAOException {
|
throws ApplicationManagementDAOException {
|
||||||
int paramIndex = 1;
|
|
||||||
Connection conn;
|
Connection conn;
|
||||||
PreparedStatement stmt = null;
|
|
||||||
//todo this is wrong
|
|
||||||
ApplicationDTO existingApplication = this.getApplicationById(application.getId(), tenantId);
|
|
||||||
|
|
||||||
if (existingApplication == null) {
|
|
||||||
throw new ApplicationManagementDAOException("There doesn't have an application for updating");
|
|
||||||
}
|
|
||||||
try {
|
try {
|
||||||
conn = this.getDBConnection();
|
conn = this.getDBConnection();
|
||||||
String sql = "UPDATE AP_APP SET ";
|
String sql = "UPDATE AP_APP AP " +
|
||||||
|
"SET " +
|
||||||
|
"AP.NAME = ?, " +
|
||||||
|
"AP.DESCRIPTION = ?, " +
|
||||||
|
"AP.SUB_TYPE = ?, " +
|
||||||
|
"AP.CURRENCY = ? " +
|
||||||
|
"WHERE AP.ID = ? AND AP.TENANT_ID = ?";
|
||||||
|
|
||||||
if (application.getName() != null && !application.getName().equals(existingApplication.getName())) {
|
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
|
||||||
sql += "NAME = ?, ";
|
stmt.setString(1, applicationDTO.getName());
|
||||||
|
stmt.setString(2, applicationDTO.getDescription());
|
||||||
|
stmt.setString(3, applicationDTO.getSubType());
|
||||||
|
stmt.setString(4, applicationDTO.getPaymentCurrency());
|
||||||
|
stmt.setInt(5, applicationDTO.getId());
|
||||||
|
stmt.setInt(6, tenantId);
|
||||||
|
return stmt.executeUpdate() > 0;
|
||||||
}
|
}
|
||||||
if (application.getType() != null && !application.getType().equals(existingApplication.getType())) {
|
|
||||||
sql += "TYPE = ?, ";
|
|
||||||
}
|
|
||||||
if (application.getAppCategory() != null && !application.getAppCategory().equals(
|
|
||||||
existingApplication.getAppCategory())) {
|
|
||||||
sql += "APP_CATEGORY = ?, ";
|
|
||||||
}
|
|
||||||
// if (application.getIsRestricted() != existingApplication.getIsRestricted()) {
|
|
||||||
// sql += "RESTRICTED = ? ";
|
|
||||||
// }
|
|
||||||
if (!application.getSubType().equals(existingApplication.getSubType())) {
|
|
||||||
sql += "SUB_TYPE = ? ";
|
|
||||||
}
|
|
||||||
|
|
||||||
sql += "WHERE ID = ?";
|
|
||||||
|
|
||||||
stmt = conn.prepareStatement(sql);
|
|
||||||
if (application.getName() != null && !application.getName().equals(existingApplication.getName())) {
|
|
||||||
stmt.setString(paramIndex++, application.getName());
|
|
||||||
}
|
|
||||||
if (application.getType() != null && !application.getType().equals(existingApplication.getType())) {
|
|
||||||
stmt.setString(paramIndex++, application.getType());
|
|
||||||
}
|
|
||||||
if (application.getAppCategory() != null && !application.getAppCategory().equals(
|
|
||||||
existingApplication.getAppCategory())) {
|
|
||||||
stmt.setString(paramIndex++, application.getAppCategory());
|
|
||||||
}
|
|
||||||
// if (application.getIsRestricted() != existingApplication.getIsRestricted()) {
|
|
||||||
// stmt.setBoolean(paramIndex++, application.getIsRestricted());
|
|
||||||
// }
|
|
||||||
if (!application.getSubType().equals(existingApplication.getSubType())) {
|
|
||||||
stmt.setString(paramIndex++, application.getSubType());
|
|
||||||
}
|
|
||||||
stmt.setInt(paramIndex, application.getId());
|
|
||||||
stmt.executeUpdate();
|
|
||||||
return application;
|
|
||||||
} catch (DBConnectionException e) {
|
} catch (DBConnectionException e) {
|
||||||
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e);
|
String msg = "Error occurred while obtaining the DB connection to update the application.";
|
||||||
|
log.error(msg);
|
||||||
|
throw new ApplicationManagementDAOException(msg, e);
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
throw new ApplicationManagementDAOException("Error occurred while adding the application", e);
|
String msg = "Error occurred when obtaining database connection for updating the application.";
|
||||||
} finally {
|
log.error(msg);
|
||||||
Util.cleanupResources(stmt, null);
|
throw new ApplicationManagementDAOException(msg, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -934,6 +906,37 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteTagMapping (List<Integer> tagIds, int applicationId, int tenantId) throws ApplicationManagementDAOException{
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Request received in DAO Layer to delete Tag mappings.");
|
||||||
|
}
|
||||||
|
Connection conn;
|
||||||
|
String sql = "DELETE FROM "
|
||||||
|
+ "AP_APP_TAG_MAPPING tm "
|
||||||
|
+ "WHERE "
|
||||||
|
+ "tm.AP_APP_TAG_ID = ? AND "
|
||||||
|
+ "tm.AP_APP_ID = ? AND "
|
||||||
|
+ "tm.TENANT_ID = ?";
|
||||||
|
try {
|
||||||
|
conn = this.getDBConnection();
|
||||||
|
try (PreparedStatement stmt = conn.prepareStatement(sql)){
|
||||||
|
for (Integer tagId : tagIds){
|
||||||
|
stmt.setInt(1, tagId);
|
||||||
|
stmt.setInt(2, applicationId);
|
||||||
|
stmt.setInt(3, tenantId);
|
||||||
|
stmt.addBatch();
|
||||||
|
}
|
||||||
|
stmt.executeBatch();
|
||||||
|
}
|
||||||
|
} catch (DBConnectionException e) {
|
||||||
|
throw new ApplicationManagementDAOException(
|
||||||
|
"Error occurred while obtaining the DB connection when deleting tag mapppig", e);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new ApplicationManagementDAOException("Error occurred when deleting tag mapping", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> getAppCategories(int appId, int tenantId) throws ApplicationManagementDAOException {
|
public List<String> getAppCategories(int appId, int tenantId) throws ApplicationManagementDAOException {
|
||||||
if (log.isDebugEnabled()) {
|
if (log.isDebugEnabled()) {
|
||||||
|
|||||||
@ -53,6 +53,7 @@ import org.wso2.carbon.device.application.mgt.common.response.ApplicationRelease
|
|||||||
import org.wso2.carbon.device.application.mgt.common.services.ApplicationManager;
|
import org.wso2.carbon.device.application.mgt.common.services.ApplicationManager;
|
||||||
import org.wso2.carbon.device.application.mgt.common.services.ApplicationStorageManager;
|
import org.wso2.carbon.device.application.mgt.common.services.ApplicationStorageManager;
|
||||||
import org.wso2.carbon.device.application.mgt.common.wrapper.ApplicationReleaseWrapper;
|
import org.wso2.carbon.device.application.mgt.common.wrapper.ApplicationReleaseWrapper;
|
||||||
|
import org.wso2.carbon.device.application.mgt.common.wrapper.ApplicationUpdateWrapper;
|
||||||
import org.wso2.carbon.device.application.mgt.common.wrapper.ApplicationWrapper;
|
import org.wso2.carbon.device.application.mgt.common.wrapper.ApplicationWrapper;
|
||||||
import org.wso2.carbon.device.application.mgt.core.config.ConfigurationManager;
|
import org.wso2.carbon.device.application.mgt.core.config.ConfigurationManager;
|
||||||
import org.wso2.carbon.device.application.mgt.core.dao.ApplicationDAO;
|
import org.wso2.carbon.device.application.mgt.core.dao.ApplicationDAO;
|
||||||
@ -145,8 +146,8 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
|||||||
ApplicationReleaseDTO initialApplicationReleaseDTO = applicationDTO.getApplicationReleaseDTOs().get(0);
|
ApplicationReleaseDTO initialApplicationReleaseDTO = applicationDTO.getApplicationReleaseDTOs().get(0);
|
||||||
applicationDTO.getApplicationReleaseDTOs().clear();
|
applicationDTO.getApplicationReleaseDTOs().clear();
|
||||||
|
|
||||||
ApplicationReleaseDTO applicationReleaseDTO = addApplicationReleaseArtifacts(applicationDTO.getType(), applicationDTO.getDeviceTypeName(),
|
ApplicationReleaseDTO applicationReleaseDTO = addApplicationReleaseArtifacts(applicationDTO.getType(),
|
||||||
initialApplicationReleaseDTO, applicationArtifact);
|
applicationWrapper.getDeviceType(), initialApplicationReleaseDTO, applicationArtifact);
|
||||||
applicationDTO.getApplicationReleaseDTOs().add(addImageArtifacts(applicationReleaseDTO, applicationArtifact));
|
applicationDTO.getApplicationReleaseDTOs().add(addImageArtifacts(applicationReleaseDTO, applicationArtifact));
|
||||||
} catch (UnexpectedServerErrorException e) {
|
} catch (UnexpectedServerErrorException e) {
|
||||||
String msg = "Error occurred when getting Device Type data.";
|
String msg = "Error occurred when getting Device Type data.";
|
||||||
@ -550,7 +551,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
|||||||
if (!haveAllUserRoles(filteringUnrestrictedRoles, userName)) {
|
if (!haveAllUserRoles(filteringUnrestrictedRoles, userName)) {
|
||||||
String msg =
|
String msg =
|
||||||
"At least one filtering role is not assigned for the user: " + userName + ". Hence user " + userName
|
"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";
|
+ " Can't filter applications by giving these unrestricted role list";
|
||||||
log.error(msg);
|
log.error(msg);
|
||||||
throw new BadRequestException(msg);
|
throw new BadRequestException(msg);
|
||||||
}
|
}
|
||||||
@ -582,8 +583,9 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
|||||||
log.error(msg);
|
log.error(msg);
|
||||||
throw new NotFoundException(msg);
|
throw new NotFoundException(msg);
|
||||||
}
|
}
|
||||||
|
DeviceType deviceType = getDeviceTypeData(applicationDTO.getDeviceTypeId());
|
||||||
ApplicationReleaseDTO applicationReleaseDTO = addApplicationReleaseArtifacts(applicationDTO.getType(),
|
ApplicationReleaseDTO applicationReleaseDTO = addApplicationReleaseArtifacts(applicationDTO.getType(),
|
||||||
applicationDTO.getDeviceTypeName(), releaseWrapperToReleaseDTO(applicationReleaseWrapper),
|
deviceType.getName(), releaseWrapperToReleaseDTO(applicationReleaseWrapper),
|
||||||
applicationArtifact);
|
applicationArtifact);
|
||||||
applicationReleaseDTO = addImageArtifacts(applicationReleaseDTO, applicationArtifact);
|
applicationReleaseDTO = addImageArtifacts(applicationReleaseDTO, applicationArtifact);
|
||||||
|
|
||||||
@ -630,18 +632,23 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
|||||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
|
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
|
||||||
String userName = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername();
|
String userName = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername();
|
||||||
ApplicationDTO applicationDTO;
|
ApplicationDTO applicationDTO;
|
||||||
List<ApplicationReleaseDTO> filteredApplicationReleaseDTOs;
|
|
||||||
boolean isVisibleApp = false;
|
boolean isVisibleApp = false;
|
||||||
try {
|
try {
|
||||||
ConnectionManagerUtil.openDBConnection();
|
ConnectionManagerUtil.openDBConnection();
|
||||||
applicationDTO = this.applicationDAO.getApplicationById(appId, tenantId);
|
applicationDTO = this.applicationDAO.getApplicationById(appId, tenantId);
|
||||||
if (applicationDTO == null) {
|
if (applicationDTO == null) {
|
||||||
throw new NotFoundException("Couldn't find an application for application Id: " + appId);
|
String msg = "Couldn't find an application for application Id: " + appId;
|
||||||
|
log.error(msg);
|
||||||
|
throw new NotFoundException(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
filteredApplicationReleaseDTOs = applicationDTO.getApplicationReleaseDTOs().stream()
|
List<ApplicationReleaseDTO> filteredApplicationReleaseDTOs = new ArrayList<>();
|
||||||
.filter(applicationReleaseDTO -> applicationReleaseDTO.getCurrentState().equals(state))
|
for (ApplicationReleaseDTO applicationReleaseDTO : applicationDTO.getApplicationReleaseDTOs()) {
|
||||||
.collect(Collectors.toList());
|
if (!applicationReleaseDTO.getCurrentState().equals(lifecycleStateManager.getEndState()) && (
|
||||||
|
state == null || applicationReleaseDTO.getCurrentState().equals(state))) {
|
||||||
|
filteredApplicationReleaseDTOs.add(applicationReleaseDTO);
|
||||||
|
}
|
||||||
|
}
|
||||||
applicationDTO.setApplicationReleaseDTOs(filteredApplicationReleaseDTOs);
|
applicationDTO.setApplicationReleaseDTOs(filteredApplicationReleaseDTOs);
|
||||||
if (applicationDTO.getApplicationReleaseDTOs().isEmpty()){
|
if (applicationDTO.getApplicationReleaseDTOs().isEmpty()){
|
||||||
return null;
|
return null;
|
||||||
@ -674,9 +681,14 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
|||||||
throw new ForbiddenException(msg);
|
throw new ForbiddenException(msg);
|
||||||
}
|
}
|
||||||
return appDtoToAppResponse(applicationDTO);
|
return appDtoToAppResponse(applicationDTO);
|
||||||
} catch (UserStoreException e) {
|
} catch (LifecycleManagementException e){
|
||||||
throw new ApplicationManagementException(
|
String msg = "Error occurred when getting the last state of the application lifecycle flow";
|
||||||
"User-store exception while getting application with the application id " + appId);
|
log.error(msg);
|
||||||
|
throw new ApplicationManagementException(msg, e);
|
||||||
|
}catch (UserStoreException e) {
|
||||||
|
String msg = "User-store exception while getting application with the application id " + appId;
|
||||||
|
log.error(msg);
|
||||||
|
throw new ApplicationManagementException(msg, e);
|
||||||
} finally {
|
} finally {
|
||||||
ConnectionManagerUtil.closeDBConnection();
|
ConnectionManagerUtil.closeDBConnection();
|
||||||
}
|
}
|
||||||
@ -1412,7 +1424,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateApplication(int applicationId, ApplicationWrapper applicationWrapper)
|
public void updateApplication(int applicationId, ApplicationUpdateWrapper applicationUpdateWrapper)
|
||||||
throws ApplicationManagementException {
|
throws ApplicationManagementException {
|
||||||
|
|
||||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
|
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
|
||||||
@ -1430,81 +1442,67 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
|||||||
throw new NotFoundException(msg);
|
throw new NotFoundException(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!StringUtils.isEmpty(applicationWrapper.getType()) && !applicationDTO.getType()
|
if (!StringUtils.isEmpty(applicationUpdateWrapper.getName())){
|
||||||
.equals(applicationWrapper.getType())) {
|
|
||||||
String msg = "You are trying to change the application type and it is not "
|
|
||||||
+ "possible after you create an application. Therefore please remove this application and "
|
|
||||||
+ "publish new application with type: " + applicationWrapper.getType();
|
|
||||||
log.error(msg);
|
|
||||||
throw new BadRequestException(msg);
|
|
||||||
}
|
|
||||||
if (!StringUtils.isEmpty(applicationWrapper.getDeviceType()) && !applicationDTO.getDeviceTypeName()
|
|
||||||
.equals(applicationWrapper.getDeviceType())) {
|
|
||||||
String msg = "You are trying to change the compatible device type of the application type and it is not "
|
|
||||||
+ "possible after you create an application for device type. " +
|
|
||||||
applicationWrapper.getDeviceType() + "Therefore please remove this application and publish "
|
|
||||||
+ "new application with device type: " + applicationWrapper.getDeviceType();
|
|
||||||
log.error(msg);
|
|
||||||
throw new BadRequestException(msg);
|
|
||||||
}
|
|
||||||
if (!StringUtils.isEmpty(applicationWrapper.getSubType()) && !applicationDTO.getSubType()
|
|
||||||
.equals(applicationWrapper.getSubType())) {
|
|
||||||
if (!ApplicationSubscriptionType.PAID.toString().equals(applicationWrapper.getSubType())
|
|
||||||
&& !ApplicationSubscriptionType.FREE.toString().equals(applicationWrapper.getSubType())) {
|
|
||||||
String msg = "Invalid application subscription type is found with application updating request "
|
|
||||||
+ applicationWrapper.getSubType();
|
|
||||||
log.error(msg);
|
|
||||||
throw new BadRequestException(msg);
|
|
||||||
|
|
||||||
} else if (ApplicationSubscriptionType.FREE.toString().equals(applicationWrapper.getSubType()) && !StringUtils
|
|
||||||
.isEmpty(applicationWrapper.getPaymentCurrency())) {
|
|
||||||
String msg = "If you are going to change Non-Free app as Free app, "
|
|
||||||
+ "currency attribute in the application updating payload should be null or \"\"";
|
|
||||||
log.error(msg);
|
|
||||||
throw new ApplicationManagementException(msg);
|
|
||||||
} else if (ApplicationSubscriptionType.PAID.toString().equals(applicationWrapper.getSubType())
|
|
||||||
&& StringUtils.isEmpty(applicationWrapper.getPaymentCurrency()) ){
|
|
||||||
String msg = "If you are going to change Free app as Non-Free app, "
|
|
||||||
+ "currency attribute in the application payload should not be null or \"\"";
|
|
||||||
log.error(msg);
|
|
||||||
throw new ApplicationManagementException(msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
applicationDTO.setSubType(applicationWrapper.getSubType());
|
|
||||||
applicationDTO.setPaymentCurrency(applicationWrapper.getPaymentCurrency());
|
|
||||||
}
|
|
||||||
if (!StringUtils.isEmpty(applicationWrapper.getName())){
|
|
||||||
Filter filter = new Filter();
|
Filter filter = new Filter();
|
||||||
filter.setFullMatch(true);
|
filter.setFullMatch(true);
|
||||||
filter.setAppName(applicationWrapper.getName().trim());
|
filter.setAppName(applicationUpdateWrapper.getName().trim());
|
||||||
filter.setOffset(0);
|
filter.setOffset(0);
|
||||||
filter.setLimit(1);
|
filter.setLimit(1);
|
||||||
|
|
||||||
List<ApplicationDTO> applicationList = applicationDAO
|
List<ApplicationDTO> applicationList = applicationDAO
|
||||||
.getApplications(filter, applicationDTO.getDeviceTypeId(), tenantId);
|
.getApplications(filter, applicationDTO.getDeviceTypeId(), tenantId);
|
||||||
if (!applicationList.isEmpty()) {
|
if (!applicationList.isEmpty()) {
|
||||||
String msg = "Already an application registered with same name " + applicationWrapper.getName()
|
String msg = "Already an application registered with same name " + applicationUpdateWrapper.getName()
|
||||||
+ ". Hence you can't update the application name from " + applicationDTO.getName() + " to "
|
+ ". Hence you can't update the application name from " + applicationDTO.getName() + " to "
|
||||||
+ applicationWrapper.getName();
|
+ applicationUpdateWrapper.getName();
|
||||||
log.error(msg);
|
log.error(msg);
|
||||||
throw new BadRequestException(msg);
|
throw new BadRequestException(msg);
|
||||||
}
|
}
|
||||||
applicationDTO.setName(applicationWrapper.getName());
|
applicationDTO.setName(applicationUpdateWrapper.getName());
|
||||||
}
|
}
|
||||||
if (!StringUtils.isEmpty(applicationWrapper.getDescription())){
|
if (!StringUtils.isEmpty(applicationUpdateWrapper.getSubType()) && !applicationDTO.getSubType()
|
||||||
applicationDTO.setDescription(applicationWrapper.getDescription());
|
.equals(applicationUpdateWrapper.getSubType())) {
|
||||||
|
if (!ApplicationSubscriptionType.PAID.toString().equals(applicationUpdateWrapper.getSubType())
|
||||||
|
&& !ApplicationSubscriptionType.FREE.toString().equals(applicationUpdateWrapper.getSubType())) {
|
||||||
|
String msg = "Invalid application subscription type is found with application updating request "
|
||||||
|
+ applicationUpdateWrapper.getSubType();
|
||||||
|
log.error(msg);
|
||||||
|
throw new BadRequestException(msg);
|
||||||
|
|
||||||
|
} else if (ApplicationSubscriptionType.FREE.toString().equals(applicationUpdateWrapper.getSubType())
|
||||||
|
&& !StringUtils.isEmpty(applicationUpdateWrapper.getPaymentCurrency())) {
|
||||||
|
String msg = "If you are going to change Non-Free app as Free app, "
|
||||||
|
+ "currency attribute in the application updating payload should be null or \"\"";
|
||||||
|
log.error(msg);
|
||||||
|
throw new ApplicationManagementException(msg);
|
||||||
|
} else if (ApplicationSubscriptionType.PAID.toString().equals(applicationUpdateWrapper.getSubType())
|
||||||
|
&& StringUtils.isEmpty(applicationUpdateWrapper.getPaymentCurrency()) ){
|
||||||
|
String msg = "If you are going to change Free app as Non-Free app, "
|
||||||
|
+ "currency attribute in the application payload should not be null or \"\"";
|
||||||
|
log.error(msg);
|
||||||
|
throw new ApplicationManagementException(msg);
|
||||||
|
}
|
||||||
|
applicationDTO.setSubType(applicationUpdateWrapper.getSubType());
|
||||||
|
applicationDTO.setPaymentCurrency(applicationUpdateWrapper.getPaymentCurrency());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!StringUtils.isEmpty(applicationUpdateWrapper.getDescription())){
|
||||||
|
applicationDTO.setDescription(applicationUpdateWrapper.getDescription());
|
||||||
}
|
}
|
||||||
|
|
||||||
List<String> appUnrestrictedRoles = this.visibilityDAO.getUnrestrictedRoles(applicationId, tenantId);
|
List<String> appUnrestrictedRoles = this.visibilityDAO.getUnrestrictedRoles(applicationId, tenantId);
|
||||||
List<String> appCategories = this.applicationDAO.getAppCategories(applicationId, tenantId);
|
|
||||||
|
|
||||||
boolean isExistingAppRestricted = !appUnrestrictedRoles.isEmpty();
|
boolean isExistingAppRestricted = !appUnrestrictedRoles.isEmpty();
|
||||||
boolean isUpdatingAppRestricted = !applicationWrapper.getUnrestrictedRoles().isEmpty();
|
boolean isUpdatingAppRestricted = false;
|
||||||
|
if (applicationUpdateWrapper.getUnrestrictedRoles() != null && !applicationUpdateWrapper
|
||||||
|
.getUnrestrictedRoles().isEmpty()) {
|
||||||
|
isUpdatingAppRestricted = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (isExistingAppRestricted && !isUpdatingAppRestricted) {
|
if (isExistingAppRestricted && !isUpdatingAppRestricted) {
|
||||||
visibilityDAO.deleteUnrestrictedRoles(appUnrestrictedRoles, applicationId, tenantId);
|
visibilityDAO.deleteUnrestrictedRoles(appUnrestrictedRoles, applicationId, tenantId);
|
||||||
} else if (isUpdatingAppRestricted) {
|
} else if (isUpdatingAppRestricted) {
|
||||||
if (!hasUserRole(applicationWrapper.getUnrestrictedRoles(), userName)) {
|
if (!hasUserRole(applicationUpdateWrapper.getUnrestrictedRoles(), userName)) {
|
||||||
String msg =
|
String msg =
|
||||||
"You are trying to restrict the visibility of visible application.But you are trying to "
|
"You are trying to restrict the visibility of visible application.But you are trying to "
|
||||||
+ "restrict the visibility to roles that there isn't at least one role is assigned "
|
+ "restrict the visibility to roles that there isn't at least one role is assigned "
|
||||||
@ -1517,12 +1515,12 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
|||||||
|
|
||||||
if (!isExistingAppRestricted) {
|
if (!isExistingAppRestricted) {
|
||||||
visibilityDAO
|
visibilityDAO
|
||||||
.addUnrestrictedRoles(applicationWrapper.getUnrestrictedRoles(), applicationId, tenantId);
|
.addUnrestrictedRoles(applicationUpdateWrapper.getUnrestrictedRoles(), applicationId, tenantId);
|
||||||
} else {
|
} else {
|
||||||
List<String> addingRoleList = getDifference(applicationWrapper.getUnrestrictedRoles(),
|
List<String> addingRoleList = getDifference(applicationUpdateWrapper.getUnrestrictedRoles(),
|
||||||
applicationDTO.getUnrestrictedRoles());
|
applicationDTO.getUnrestrictedRoles());
|
||||||
List<String> removingRoleList = getDifference(applicationDTO.getUnrestrictedRoles(),
|
List<String> removingRoleList = getDifference(applicationDTO.getUnrestrictedRoles(),
|
||||||
applicationWrapper.getUnrestrictedRoles());
|
applicationUpdateWrapper.getUnrestrictedRoles());
|
||||||
if (!addingRoleList.isEmpty()) {
|
if (!addingRoleList.isEmpty()) {
|
||||||
visibilityDAO.addUnrestrictedRoles(addingRoleList, applicationId, tenantId);
|
visibilityDAO.addUnrestrictedRoles(addingRoleList, applicationId, tenantId);
|
||||||
}
|
}
|
||||||
@ -1531,18 +1529,57 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
applicationDTO.setUnrestrictedRoles(applicationWrapper.getUnrestrictedRoles());
|
applicationDTO.setUnrestrictedRoles(applicationUpdateWrapper.getUnrestrictedRoles());
|
||||||
|
|
||||||
|
String updatingAppCategory = applicationUpdateWrapper.getAppCategory();
|
||||||
|
if ( updatingAppCategory != null){
|
||||||
|
List<String> appCategories = this.applicationDAO.getAppCategories(applicationId, tenantId);
|
||||||
|
if (!appCategories.contains(updatingAppCategory)){
|
||||||
|
List<CategoryDTO> allCategories = this.applicationDAO.getAllCategories(tenantId);
|
||||||
|
List<Integer> categoryIds = allCategories.stream()
|
||||||
|
.filter(category -> category.getCategoryName().equals(updatingAppCategory))
|
||||||
|
.map(CategoryDTO::getId).collect(Collectors.toList());
|
||||||
|
if (categoryIds.isEmpty()){
|
||||||
|
ConnectionManagerUtil.rollbackDBTransaction();
|
||||||
|
String msg =
|
||||||
|
"You are trying to update application category into invalid application category, "
|
||||||
|
+ "it is not registered in the system. Therefore please register the category "
|
||||||
|
+ updatingAppCategory + " and perform the action";
|
||||||
|
log.error(msg);
|
||||||
|
throw new BadRequestException(msg);
|
||||||
|
}
|
||||||
|
this.applicationDAO.addCategoryMapping(categoryIds, applicationId, tenantId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
List<String> updatingAppTags = applicationUpdateWrapper.getTags();
|
||||||
|
if ( updatingAppTags!= null){
|
||||||
List<String> appTags = this.applicationDAO.getAppTags(applicationId, tenantId);
|
List<String> appTags = this.applicationDAO.getAppTags(applicationId, tenantId);
|
||||||
List<String> addingTagList = getDifference(appTags, applicationWrapper.getTags());
|
List<String> addingTagList = getDifference(appTags, updatingAppTags);
|
||||||
List<String> removingTagList = getDifference(applicationWrapper.getTags(), appTags);
|
List<String> removingTagList = getDifference(updatingAppTags, appTags);
|
||||||
if (!addingTagList.isEmpty()) {
|
if (!addingTagList.isEmpty()) {
|
||||||
// applicationDAO.addTags(addingTags, application.getId(), tenantId);
|
List<TagDTO> allTags = this.applicationDAO.getAllTags(tenantId);
|
||||||
|
List<String> newTags = addingTagList.stream().filter(updatingTagName -> allTags.stream()
|
||||||
|
.noneMatch(tag -> tag.getTagName().equals(updatingTagName))).collect(Collectors.toList());
|
||||||
|
if (!newTags.isEmpty()){
|
||||||
|
this.applicationDAO.addTags(newTags, tenantId);
|
||||||
|
}
|
||||||
|
List<Integer> addingTagIds = this.applicationDAO.getTagIdsForTagNames(addingTagList, tenantId);
|
||||||
|
this.applicationDAO.addTagMapping(addingTagIds, applicationId, tenantId);
|
||||||
}
|
}
|
||||||
if (!removingTagList.isEmpty()) {
|
if (!removingTagList.isEmpty()) {
|
||||||
|
List<Integer> removingTagIds = this.applicationDAO.getTagIdsForTagNames(removingTagList, tenantId);
|
||||||
|
this.applicationDAO.deleteTagMapping(removingTagIds, applicationId, tenantId);
|
||||||
applicationDAO.deleteTags(removingTagList, applicationId, tenantId);
|
applicationDAO.deleteTags(removingTagList, applicationId, tenantId);
|
||||||
}
|
}
|
||||||
applicationDAO.editApplication(applicationDTO, tenantId);
|
}
|
||||||
|
if (!applicationDAO.updateApplication(applicationDTO, tenantId)){
|
||||||
|
ConnectionManagerUtil.rollbackDBTransaction();
|
||||||
|
String msg = "Any application is not updated for the application ID: " + applicationId;
|
||||||
|
log.error(msg);
|
||||||
|
throw new ApplicationManagementException(msg);
|
||||||
|
}
|
||||||
|
ConnectionManagerUtil.commitDBTransaction();
|
||||||
} catch (UserStoreException e) {
|
} catch (UserStoreException e) {
|
||||||
ConnectionManagerUtil.rollbackDBTransaction();
|
ConnectionManagerUtil.rollbackDBTransaction();
|
||||||
throw new ApplicationManagementException(
|
throw new ApplicationManagementException(
|
||||||
@ -1904,7 +1941,6 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
|||||||
applicationDTO.setTags(applicationWrapper.getTags());
|
applicationDTO.setTags(applicationWrapper.getTags());
|
||||||
applicationDTO.setUnrestrictedRoles(applicationWrapper.getUnrestrictedRoles());
|
applicationDTO.setUnrestrictedRoles(applicationWrapper.getUnrestrictedRoles());
|
||||||
applicationDTO.setDeviceTypeId(deviceType.getId());
|
applicationDTO.setDeviceTypeId(deviceType.getId());
|
||||||
applicationDTO.setDeviceTypeName(deviceType.getName());
|
|
||||||
List<ApplicationReleaseDTO> applicationReleaseEntities = applicationWrapper.getApplicationReleaseWrappers()
|
List<ApplicationReleaseDTO> applicationReleaseEntities = applicationWrapper.getApplicationReleaseWrappers()
|
||||||
.stream().map(this::releaseWrapperToReleaseDTO).collect(Collectors.toList());
|
.stream().map(this::releaseWrapperToReleaseDTO).collect(Collectors.toList());
|
||||||
applicationDTO.setApplicationReleaseDTOs(applicationReleaseEntities);
|
applicationDTO.setApplicationReleaseDTOs(applicationReleaseEntities);
|
||||||
@ -1923,9 +1959,11 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
|||||||
return applicationReleaseDTO;
|
return applicationReleaseDTO;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Application appDtoToAppResponse(ApplicationDTO applicationDTO) {
|
private Application appDtoToAppResponse(ApplicationDTO applicationDTO)
|
||||||
|
throws BadRequestException, UnexpectedServerErrorException {
|
||||||
|
|
||||||
Application application = new Application();
|
Application application = new Application();
|
||||||
|
DeviceType deviceType = getDeviceTypeData(applicationDTO.getDeviceTypeId());
|
||||||
application.setId(applicationDTO.getId());
|
application.setId(applicationDTO.getId());
|
||||||
application.setName(applicationDTO.getName());
|
application.setName(applicationDTO.getName());
|
||||||
application.setDescription(applicationDTO.getDescription());
|
application.setDescription(applicationDTO.getDescription());
|
||||||
@ -1935,7 +1973,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
|||||||
application.setPaymentCurrency(applicationDTO.getPaymentCurrency());
|
application.setPaymentCurrency(applicationDTO.getPaymentCurrency());
|
||||||
application.setTags(applicationDTO.getTags());
|
application.setTags(applicationDTO.getTags());
|
||||||
application.setUnrestrictedRoles(applicationDTO.getUnrestrictedRoles());
|
application.setUnrestrictedRoles(applicationDTO.getUnrestrictedRoles());
|
||||||
application.setDeviceType(applicationDTO.getDeviceTypeName());
|
application.setDeviceType(deviceType.getName());
|
||||||
List<ApplicationRelease> applicationReleases = applicationDTO.getApplicationReleaseDTOs()
|
List<ApplicationRelease> applicationReleases = applicationDTO.getApplicationReleaseDTOs()
|
||||||
.stream().map(this::releaseDtoToRelease).collect(Collectors.toList());
|
.stream().map(this::releaseDtoToRelease).collect(Collectors.toList());
|
||||||
application.setApplicationReleases(applicationReleases);
|
application.setApplicationReleases(applicationReleases);
|
||||||
@ -1943,7 +1981,8 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private ApplicationRelease releaseDtoToRelease(ApplicationReleaseDTO applicationReleaseDTO){
|
private ApplicationRelease releaseDtoToRelease(ApplicationReleaseDTO applicationReleaseDTO){
|
||||||
String artifactDownloadEndpoint = ConfigurationManager.getInstance().getConfiguration().getArtifactDownloadEndpoint();
|
String artifactDownloadEndpoint = ConfigurationManager.getInstance().getConfiguration()
|
||||||
|
.getArtifactDownloadEndpoint();
|
||||||
String basePath = artifactDownloadEndpoint + Constants.FORWARD_SLASH + applicationReleaseDTO.getUuid();
|
String basePath = artifactDownloadEndpoint + Constants.FORWARD_SLASH + applicationReleaseDTO.getUuid();
|
||||||
ApplicationRelease applicationRelease = new ApplicationRelease();
|
ApplicationRelease applicationRelease = new ApplicationRelease();
|
||||||
applicationRelease.setDescription(applicationReleaseDTO.getDescription());
|
applicationRelease.setDescription(applicationReleaseDTO.getDescription());
|
||||||
@ -1953,8 +1992,11 @@ public class ApplicationManagerImpl implements ApplicationManager {
|
|||||||
applicationRelease.setIsSharedWithAllTenants(applicationReleaseDTO.getIsSharedWithAllTenants());
|
applicationRelease.setIsSharedWithAllTenants(applicationReleaseDTO.getIsSharedWithAllTenants());
|
||||||
applicationRelease.setMetaData(applicationReleaseDTO.getMetaData());
|
applicationRelease.setMetaData(applicationReleaseDTO.getMetaData());
|
||||||
applicationRelease.setUrl(applicationReleaseDTO.getUrl());
|
applicationRelease.setUrl(applicationReleaseDTO.getUrl());
|
||||||
|
applicationRelease.setCurrentStatus(applicationReleaseDTO.getCurrentState());
|
||||||
|
applicationRelease.setIsSharedWithAllTenants(applicationReleaseDTO.getIsSharedWithAllTenants());
|
||||||
applicationRelease.setSupportedOsVersions(applicationReleaseDTO.getSupportedOsVersions());
|
applicationRelease.setSupportedOsVersions(applicationReleaseDTO.getSupportedOsVersions());
|
||||||
applicationRelease.setInstallerPath(basePath + Constants.FORWARD_SLASH + applicationReleaseDTO.getInstallerName());
|
applicationRelease
|
||||||
|
.setInstallerPath(basePath + Constants.FORWARD_SLASH + applicationReleaseDTO.getInstallerName());
|
||||||
applicationRelease.setIconPath(basePath + Constants.FORWARD_SLASH + applicationReleaseDTO.getIconName());
|
applicationRelease.setIconPath(basePath + Constants.FORWARD_SLASH + applicationReleaseDTO.getIconName());
|
||||||
applicationRelease.setBannerPath(basePath + Constants.FORWARD_SLASH + applicationReleaseDTO.getBannerName());
|
applicationRelease.setBannerPath(basePath + Constants.FORWARD_SLASH + applicationReleaseDTO.getBannerName());
|
||||||
|
|
||||||
|
|||||||
@ -211,6 +211,23 @@ public class LifecycleStateManager {
|
|||||||
return endState;
|
return endState;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getInstallableState() throws LifecycleManagementException {
|
||||||
|
String installableState = null;
|
||||||
|
for (Map.Entry<String, State> stringStateEntry : lifecycleStates.entrySet()) {
|
||||||
|
if (stringStateEntry.getValue().isAppInstallable()) {
|
||||||
|
installableState = stringStateEntry.getKey();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (installableState == null){
|
||||||
|
String msg = "Haven't defined the installable state in the application-manager.xml. Please add installable "
|
||||||
|
+ "state to the <LifecycleStates> section in the app-manager.xml";
|
||||||
|
log.error(msg);
|
||||||
|
throw new LifecycleManagementException(msg);
|
||||||
|
}
|
||||||
|
return installableState;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isStateExist(String currentState) {
|
public boolean isStateExist(String currentState) {
|
||||||
for (Map.Entry<String, State> stringStateEntry : lifecycleStates.entrySet()) {
|
for (Map.Entry<String, State> stringStateEntry : lifecycleStates.entrySet()) {
|
||||||
if (stringStateEntry.getKey().equalsIgnoreCase(currentState)) {
|
if (stringStateEntry.getKey().equalsIgnoreCase(currentState)) {
|
||||||
@ -220,22 +237,6 @@ public class LifecycleStateManager {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isUpdatable(String state) {
|
|
||||||
State currentState = getMatchingState(state);
|
|
||||||
if (currentState.isAppUpdatable()) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isInstallable(String state) {
|
|
||||||
State currentState = getMatchingState(state);
|
|
||||||
if (currentState.isAppInstallable()) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void setLifecycleStates(Map<String, State> lifecycleStates) {
|
public void setLifecycleStates(Map<String, State> lifecycleStates) {
|
||||||
this.lifecycleStates = lifecycleStates;
|
this.lifecycleStates = lifecycleStates;
|
||||||
|
|||||||
@ -53,26 +53,26 @@ public class LifecycleManagementTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void CheckUpdatableState() throws LifecycleManagementException {
|
public void CheckUpdatableState() throws LifecycleManagementException {
|
||||||
boolean isUpdatable = lifecycleStateManager.isUpdatable(UPDATABLE_STATE);
|
boolean isUpdatable = lifecycleStateManager.isUpdatableState(UPDATABLE_STATE);
|
||||||
System.out.println(isUpdatable);
|
System.out.println(isUpdatable);
|
||||||
Assert.assertTrue("Updatable state: " + UPDATABLE_STATE, isUpdatable);
|
Assert.assertTrue("Updatable state: " + UPDATABLE_STATE, isUpdatable);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void CheckNonUpdatableState() throws LifecycleManagementException {
|
public void CheckNonUpdatableState() throws LifecycleManagementException {
|
||||||
boolean isUpdatable = lifecycleStateManager.isUpdatable(NON_UPDATABLE_STATE);
|
boolean isUpdatable = lifecycleStateManager.isUpdatableState(NON_UPDATABLE_STATE);
|
||||||
Assert.assertFalse("Non Updatable state: " + NON_UPDATABLE_STATE, isUpdatable);
|
Assert.assertFalse("Non Updatable state: " + NON_UPDATABLE_STATE, isUpdatable);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void CheckInstallableState() throws LifecycleManagementException {
|
public void CheckInstallableState() throws LifecycleManagementException {
|
||||||
boolean isInstallable = lifecycleStateManager.isInstallable(INSTALLABLE_STATE);
|
boolean isInstallable = lifecycleStateManager.isInstallableState(INSTALLABLE_STATE);
|
||||||
Assert.assertTrue("Installable state: " + INSTALLABLE_STATE, isInstallable);
|
Assert.assertTrue("Installable state: " + INSTALLABLE_STATE, isInstallable);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void CheckUnInstallableState() throws LifecycleManagementException {
|
public void CheckUnInstallableState() throws LifecycleManagementException {
|
||||||
boolean isInstallable = lifecycleStateManager.isInstallable(UNINSTALlABLE_STATE);
|
boolean isInstallable = lifecycleStateManager.isInstallableState(UNINSTALlABLE_STATE);
|
||||||
Assert.assertFalse("UnInstallable state: " + UNINSTALlABLE_STATE, isInstallable);
|
Assert.assertFalse("UnInstallable state: " + UNINSTALlABLE_STATE, isInstallable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -32,12 +32,14 @@ import org.apache.cxf.jaxrs.ext.multipart.Attachment;
|
|||||||
import org.apache.cxf.jaxrs.ext.multipart.Multipart;
|
import org.apache.cxf.jaxrs.ext.multipart.Multipart;
|
||||||
import org.wso2.carbon.apimgt.annotations.api.Scope;
|
import org.wso2.carbon.apimgt.annotations.api.Scope;
|
||||||
import org.wso2.carbon.apimgt.annotations.api.Scopes;
|
import org.wso2.carbon.apimgt.annotations.api.Scopes;
|
||||||
import org.wso2.carbon.device.application.mgt.common.*;
|
import org.wso2.carbon.device.application.mgt.common.ApplicationList;
|
||||||
import org.wso2.carbon.device.application.mgt.common.ErrorResponse;
|
import org.wso2.carbon.device.application.mgt.common.ErrorResponse;
|
||||||
|
import org.wso2.carbon.device.application.mgt.common.Filter;
|
||||||
import org.wso2.carbon.device.application.mgt.common.dto.ApplicationDTO;
|
import org.wso2.carbon.device.application.mgt.common.dto.ApplicationDTO;
|
||||||
import org.wso2.carbon.device.application.mgt.common.dto.ApplicationReleaseDTO;
|
import org.wso2.carbon.device.application.mgt.common.dto.ApplicationReleaseDTO;
|
||||||
import org.wso2.carbon.device.application.mgt.common.response.ApplicationRelease;
|
import org.wso2.carbon.device.application.mgt.common.response.ApplicationRelease;
|
||||||
import org.wso2.carbon.device.application.mgt.common.wrapper.ApplicationReleaseWrapper;
|
import org.wso2.carbon.device.application.mgt.common.wrapper.ApplicationReleaseWrapper;
|
||||||
|
import org.wso2.carbon.device.application.mgt.common.wrapper.ApplicationUpdateWrapper;
|
||||||
import org.wso2.carbon.device.application.mgt.common.wrapper.ApplicationWrapper;
|
import org.wso2.carbon.device.application.mgt.common.wrapper.ApplicationWrapper;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -60,17 +62,16 @@ import javax.ws.rs.core.Response;
|
|||||||
@SwaggerDefinition(
|
@SwaggerDefinition(
|
||||||
info = @Info(
|
info = @Info(
|
||||||
version = "1.0.0",
|
version = "1.0.0",
|
||||||
title = "ApplicationDTO Management Service",
|
title = "ApplicationDTO Management Publisher Service",
|
||||||
extensions = {
|
extensions = {
|
||||||
@Extension(properties = {
|
@Extension(properties = {
|
||||||
@ExtensionProperty(name = "name", value = "ApplicationManagementService"),
|
@ExtensionProperty(name = "name", value = "ApplicationManagementPublisherService"),
|
||||||
@ExtensionProperty(name = "context", value = "/api/application-mgt/v1.0/applications"),
|
@ExtensionProperty(name = "context", value = "/api/application-mgt-publisher/v1.0/applications"),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
tags = {
|
tags = {
|
||||||
@Tag(name = "application_management, device_management", description = "ApplicationDTO Management related "
|
@Tag(name = "application_management, device_management", description = "App publisher related APIs")
|
||||||
+ "APIs")
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@Scopes(
|
@Scopes(
|
||||||
@ -79,21 +80,21 @@ import javax.ws.rs.core.Response;
|
|||||||
name = "Get ApplicationDTO Details",
|
name = "Get ApplicationDTO Details",
|
||||||
description = "Get application details",
|
description = "Get application details",
|
||||||
key = "perm:app:publisher:view",
|
key = "perm:app:publisher:view",
|
||||||
permissions = {"/device-mgt/application/view"}
|
permissions = {"/app-mgt/publisher/application/update"}
|
||||||
),
|
),
|
||||||
@Scope(
|
@Scope(
|
||||||
name = "Update an ApplicationDTO",
|
name = "Update an ApplicationDTO",
|
||||||
description = "Update an application",
|
description = "Update an application",
|
||||||
key = "perm:app:publisher:update",
|
key = "perm:app:publisher:update",
|
||||||
permissions = {"/device-mgt/application/update"}
|
permissions = {"/app-mgt/publisher/application/update"}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@Path("/publisher/applications")
|
@Path("/applications")
|
||||||
@Api(value = "ApplicationDTO Management", description = "This API carries all application management related operations " +
|
@Api(value = "ApplicationDTO Management", description = "This API carries all application management related operations " +
|
||||||
"such as get all the applications, add application, etc.")
|
"such as get all the applications, add application, etc.")
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
public interface ApplicationManagementAPI {
|
public interface ApplicationManagementPublisherAPI {
|
||||||
|
|
||||||
String SCOPE = "scope";
|
String SCOPE = "scope";
|
||||||
|
|
||||||
@ -176,8 +177,7 @@ public interface ApplicationManagementAPI {
|
|||||||
@PathParam("appId") int appId,
|
@PathParam("appId") int appId,
|
||||||
@ApiParam(
|
@ApiParam(
|
||||||
name = "state",
|
name = "state",
|
||||||
value = "state",
|
value = "state")
|
||||||
defaultValue = "PUBLISHED")
|
|
||||||
@QueryParam("state") String state
|
@QueryParam("state") String state
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -221,9 +221,9 @@ public interface ApplicationManagementAPI {
|
|||||||
@PathParam("appId") int appId,
|
@PathParam("appId") int appId,
|
||||||
@ApiParam(
|
@ApiParam(
|
||||||
name = "application",
|
name = "application",
|
||||||
value = "The application that need to be edited.",
|
value = "Application data that need to be edited.",
|
||||||
required = true)
|
required = true)
|
||||||
@Valid ApplicationWrapper applicationWrapper
|
@Valid ApplicationUpdateWrapper applicationUpdateWrapper
|
||||||
);
|
);
|
||||||
|
|
||||||
@POST
|
@POST
|
||||||
@ -399,7 +399,7 @@ public interface ApplicationManagementAPI {
|
|||||||
response = List.class),
|
response = List.class),
|
||||||
@ApiResponse(
|
@ApiResponse(
|
||||||
code = 500,
|
code = 500,
|
||||||
message = "Internal Server Error. \n Error occurred while deleteing the application.",
|
message = "Internal Server Error. \n Error occurred while deleting the application.",
|
||||||
response = ErrorResponse.class)
|
response = ErrorResponse.class)
|
||||||
})
|
})
|
||||||
Response deleteApplication(
|
Response deleteApplication(
|
||||||
@ -595,7 +595,7 @@ public interface ApplicationManagementAPI {
|
|||||||
tags = "Lifecycle Management",
|
tags = "Lifecycle Management",
|
||||||
extensions = {
|
extensions = {
|
||||||
@Extension(properties = {
|
@Extension(properties = {
|
||||||
@ExtensionProperty(name = SCOPE, value = "perm:app:publisher:view")
|
@ExtensionProperty(name = SCOPE, value = "perm:app:publisher:update")
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@ -23,7 +23,6 @@ import org.apache.commons.logging.LogFactory;
|
|||||||
import org.apache.cxf.jaxrs.ext.multipart.Attachment;
|
import org.apache.cxf.jaxrs.ext.multipart.Attachment;
|
||||||
import org.apache.cxf.jaxrs.ext.multipart.Multipart;
|
import org.apache.cxf.jaxrs.ext.multipart.Multipart;
|
||||||
import org.wso2.carbon.device.application.mgt.common.*;
|
import 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.dto.ApplicationReleaseDTO;
|
import org.wso2.carbon.device.application.mgt.common.dto.ApplicationReleaseDTO;
|
||||||
import org.wso2.carbon.device.application.mgt.common.dto.LifecycleStateDTO;
|
import org.wso2.carbon.device.application.mgt.common.dto.LifecycleStateDTO;
|
||||||
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationStorageManagementException;
|
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationStorageManagementException;
|
||||||
@ -31,12 +30,12 @@ import org.wso2.carbon.device.application.mgt.common.exception.RequestValidating
|
|||||||
import org.wso2.carbon.device.application.mgt.common.response.Application;
|
import org.wso2.carbon.device.application.mgt.common.response.Application;
|
||||||
import org.wso2.carbon.device.application.mgt.common.response.ApplicationRelease;
|
import org.wso2.carbon.device.application.mgt.common.response.ApplicationRelease;
|
||||||
import org.wso2.carbon.device.application.mgt.common.wrapper.ApplicationReleaseWrapper;
|
import org.wso2.carbon.device.application.mgt.common.wrapper.ApplicationReleaseWrapper;
|
||||||
|
import org.wso2.carbon.device.application.mgt.common.wrapper.ApplicationUpdateWrapper;
|
||||||
import org.wso2.carbon.device.application.mgt.common.wrapper.ApplicationWrapper;
|
import org.wso2.carbon.device.application.mgt.common.wrapper.ApplicationWrapper;
|
||||||
import org.wso2.carbon.device.application.mgt.core.exception.BadRequestException;
|
import org.wso2.carbon.device.application.mgt.core.exception.BadRequestException;
|
||||||
import org.wso2.carbon.device.application.mgt.core.exception.ForbiddenException;
|
import org.wso2.carbon.device.application.mgt.core.exception.ForbiddenException;
|
||||||
import org.wso2.carbon.device.application.mgt.core.exception.ValidationException;
|
|
||||||
import org.wso2.carbon.device.application.mgt.core.util.APIUtil;
|
import org.wso2.carbon.device.application.mgt.core.util.APIUtil;
|
||||||
import org.wso2.carbon.device.application.mgt.publisher.api.services.ApplicationManagementAPI;
|
import org.wso2.carbon.device.application.mgt.publisher.api.services.ApplicationManagementPublisherAPI;
|
||||||
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationManagementException;
|
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationManagementException;
|
||||||
import org.wso2.carbon.device.application.mgt.common.services.ApplicationManager;
|
import org.wso2.carbon.device.application.mgt.common.services.ApplicationManager;
|
||||||
import org.wso2.carbon.device.application.mgt.common.services.ApplicationStorageManager;
|
import org.wso2.carbon.device.application.mgt.common.services.ApplicationStorageManager;
|
||||||
@ -52,7 +51,6 @@ import javax.activation.DataHandler;
|
|||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
import javax.ws.rs.Consumes;
|
import javax.ws.rs.Consumes;
|
||||||
import javax.ws.rs.DELETE;
|
import javax.ws.rs.DELETE;
|
||||||
import javax.ws.rs.DefaultValue;
|
|
||||||
import javax.ws.rs.GET;
|
import javax.ws.rs.GET;
|
||||||
import javax.ws.rs.POST;
|
import javax.ws.rs.POST;
|
||||||
import javax.ws.rs.PUT;
|
import javax.ws.rs.PUT;
|
||||||
@ -68,9 +66,9 @@ import javax.ws.rs.core.Response;
|
|||||||
*/
|
*/
|
||||||
@Produces({"application/json"})
|
@Produces({"application/json"})
|
||||||
@Path("/applications")
|
@Path("/applications")
|
||||||
public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
|
public class ApplicationManagementPublisherAPIImpl implements ApplicationManagementPublisherAPI {
|
||||||
|
|
||||||
private static Log log = LogFactory.getLog(ApplicationManagementAPIImpl.class);
|
private static Log log = LogFactory.getLog(ApplicationManagementPublisherAPIImpl.class);
|
||||||
|
|
||||||
@POST
|
@POST
|
||||||
@Override
|
@Override
|
||||||
@ -102,15 +100,14 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
|
|||||||
@Path("/{appId}")
|
@Path("/{appId}")
|
||||||
public Response getApplication(
|
public Response getApplication(
|
||||||
@PathParam("appId") int appId,
|
@PathParam("appId") int appId,
|
||||||
@DefaultValue("PUBLISHED") @QueryParam("state") String state) {
|
@QueryParam("state") String state) {
|
||||||
ApplicationManager applicationManager = APIUtil.getApplicationManager();
|
ApplicationManager applicationManager = APIUtil.getApplicationManager();
|
||||||
try {
|
try {
|
||||||
Application application = applicationManager.getApplicationById(appId, state);
|
Application application = applicationManager.getApplicationById(appId, state);
|
||||||
if (application == null){
|
if (application == null){
|
||||||
String msg = "Couldn't found an application release which is in " + state + " state for application id "
|
String msg = "Could not found an application release which is in " + state + " state.";
|
||||||
+ appId;
|
|
||||||
log.error(msg);
|
log.error(msg);
|
||||||
return Response.status(Response.Status.NOT_FOUND).entity(msg).build();
|
return Response.status(Response.Status.OK).entity(msg).build();
|
||||||
}
|
}
|
||||||
return Response.status(Response.Status.OK).entity(application).build();
|
return Response.status(Response.Status.OK).entity(application).build();
|
||||||
} catch (NotFoundException e) {
|
} catch (NotFoundException e) {
|
||||||
@ -317,31 +314,36 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@PUT
|
@PUT
|
||||||
@Consumes("application/json")
|
@Consumes("application/json")
|
||||||
@Path("/{appId}")
|
@Path("/{appId}")
|
||||||
public Response updateApplication(
|
public Response updateApplication(
|
||||||
@PathParam("appId") int applicationId,
|
@PathParam("appId") int applicationId,
|
||||||
@Valid ApplicationWrapper applicationWrapper) {
|
@Valid ApplicationUpdateWrapper applicationUpdateWrapper) {
|
||||||
ApplicationManager applicationManager = APIUtil.getApplicationManager();
|
ApplicationManager applicationManager = APIUtil.getApplicationManager();
|
||||||
try {
|
try {
|
||||||
//todo wrong
|
applicationManager.updateApplication(applicationId, applicationUpdateWrapper);
|
||||||
applicationManager.updateApplication(applicationId, applicationWrapper);
|
|
||||||
return Response.status(Response.Status.OK)
|
return Response.status(Response.Status.OK)
|
||||||
.entity("Application was updated successfully. ApplicationID " + applicationId).build();
|
.entity("Application was updated successfully for ApplicationID: " + applicationId).build();
|
||||||
} catch (NotFoundException e) {
|
} catch (NotFoundException e) {
|
||||||
log.error(e.getMessage());
|
log.error(e.getMessage());
|
||||||
return Response.status(Response.Status.NOT_FOUND).entity(e.getMessage()).build();
|
return Response.status(Response.Status.NOT_FOUND).entity(e.getMessage()).build();
|
||||||
} catch (ForbiddenException e) {
|
} catch (BadRequestException e) {
|
||||||
log.error(e.getMessage());
|
String msg = "Error occurred while modifying the application. Found bad request payload for updating the "
|
||||||
return Response.status(Response.Status.FORBIDDEN).entity(e.getMessage()).build();
|
+ "application";
|
||||||
} catch (ApplicationManagementException e) {
|
|
||||||
String msg = "Error occurred while modifying the application";
|
|
||||||
log.error(msg, e);
|
log.error(msg, e);
|
||||||
return Response.status(Response.Status.BAD_REQUEST).entity(msg).build();
|
return Response.status(Response.Status.BAD_REQUEST).entity(msg).build();
|
||||||
}
|
}
|
||||||
|
catch (ApplicationManagementException e) {
|
||||||
|
String msg = "Internal Error occurred while modifying the application.";
|
||||||
|
log.error(msg, e);
|
||||||
|
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
//todo ----------------------
|
||||||
|
*/
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@PUT
|
@PUT
|
||||||
@ -52,7 +52,7 @@
|
|||||||
<bean id="swaggerWriter" class="io.swagger.jaxrs.listing.SwaggerSerializers" />
|
<bean id="swaggerWriter" class="io.swagger.jaxrs.listing.SwaggerSerializers" />
|
||||||
<bean id="swaggerResource" class="io.swagger.jaxrs.listing.ApiListingResource" />
|
<bean id="swaggerResource" class="io.swagger.jaxrs.listing.ApiListingResource" />
|
||||||
|
|
||||||
<bean id="applicationMgtServiceBean" class="org.wso2.carbon.device.application.mgt.publisher.api.services.impl.ApplicationManagementAPIImpl"/>
|
<bean id="applicationMgtServiceBean" class="org.wso2.carbon.device.application.mgt.publisher.api.services.impl.ApplicationManagementPublisherAPIImpl"/>
|
||||||
<bean id="jsonProvider" class="org.wso2.carbon.device.application.mgt.addons.JSONMessageHandler"/>
|
<bean id="jsonProvider" class="org.wso2.carbon.device.application.mgt.addons.JSONMessageHandler"/>
|
||||||
<bean id="multipartProvider" class="org.wso2.carbon.device.application.mgt.addons.MultipartCustomProvider"/>
|
<bean id="multipartProvider" class="org.wso2.carbon.device.application.mgt.addons.MultipartCustomProvider"/>
|
||||||
|
|
||||||
|
|||||||
@ -68,7 +68,7 @@ import javax.ws.rs.core.Response;
|
|||||||
name = "Get ApplicationDTO Details",
|
name = "Get ApplicationDTO Details",
|
||||||
description = "Get application details",
|
description = "Get application details",
|
||||||
key = "perm:app:store:view",
|
key = "perm:app:store:view",
|
||||||
permissions = {"/device-mgt/application/get"}
|
permissions = {"/app-mgt/store/application/view"}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@ -92,7 +92,7 @@ public interface ApplicationManagementAPI {
|
|||||||
tags = "ApplicationDTO Management",
|
tags = "ApplicationDTO Management",
|
||||||
extensions = {
|
extensions = {
|
||||||
@Extension(properties = {
|
@Extension(properties = {
|
||||||
@ExtensionProperty(name = SCOPE, value = "perm:application:get")
|
@ExtensionProperty(name = SCOPE, value = "perm:app:store:view")
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@ -155,7 +155,7 @@ public interface ApplicationManagementAPI {
|
|||||||
tags = "ApplicationDTO Management",
|
tags = "ApplicationDTO Management",
|
||||||
extensions = {
|
extensions = {
|
||||||
@Extension(properties = {
|
@Extension(properties = {
|
||||||
@ExtensionProperty(name = SCOPE, value = "perm:application:get")
|
@ExtensionProperty(name = SCOPE, value = "perm:app:store:view")
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|||||||
@ -72,13 +72,13 @@ import java.util.List;
|
|||||||
name = "Get Review Details",
|
name = "Get Review Details",
|
||||||
description = "Get review details",
|
description = "Get review details",
|
||||||
key = "perm:app:review:view",
|
key = "perm:app:review:view",
|
||||||
permissions = {"/device-mgt/review/view"}
|
permissions = {"/app-mgt/store/review/view"}
|
||||||
),
|
),
|
||||||
@Scope(
|
@Scope(
|
||||||
name = "Update a Review",
|
name = "Update a Review",
|
||||||
description = "Update a comment",
|
description = "Update a comment",
|
||||||
key = "perm:app:review:update",
|
key = "perm:app:review:update",
|
||||||
permissions = {"/device-mgt/review/update"}
|
permissions = {"/app-mgt/store/review/update"}
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|||||||
@ -31,13 +31,14 @@ import org.wso2.carbon.webapp.authenticator.framework.authenticator.WebappAuthen
|
|||||||
import org.wso2.carbon.webapp.authenticator.framework.authorizer.WebappTenantAuthorizer;
|
import org.wso2.carbon.webapp.authenticator.framework.authorizer.WebappTenantAuthorizer;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
|
import java.util.TreeMap;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
public class WebappAuthenticationValve extends CarbonTomcatValve {
|
public class WebappAuthenticationValve extends CarbonTomcatValve {
|
||||||
|
|
||||||
private static final Log log = LogFactory.getLog(WebappAuthenticationValve.class);
|
private static final Log log = LogFactory.getLog(WebappAuthenticationValve.class);
|
||||||
private static HashMap<String, String> nonSecuredEndpoints = new HashMap<>();
|
private static TreeMap<String, String> nonSecuredEndpoints = new TreeMap<>();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void invoke(Request request, Response response, CompositeValve compositeValve) {
|
public void invoke(Request request, Response response, CompositeValve compositeValve) {
|
||||||
@ -126,6 +127,7 @@ public class WebappAuthenticationValve extends CarbonTomcatValve {
|
|||||||
if (!nonSecuredEndpoints.containsKey(contextPath)) {
|
if (!nonSecuredEndpoints.containsKey(contextPath)) {
|
||||||
String param = request.getContext().findParameter("nonSecuredEndPoints");
|
String param = request.getContext().findParameter("nonSecuredEndPoints");
|
||||||
String skippedEndPoint;
|
String skippedEndPoint;
|
||||||
|
boolean isUriUnsecured = false;
|
||||||
if (param != null && !param.isEmpty()) {
|
if (param != null && !param.isEmpty()) {
|
||||||
//Add the nonSecured end-points to cache
|
//Add the nonSecured end-points to cache
|
||||||
StringTokenizer tokenizer = new StringTokenizer(param, ",");
|
StringTokenizer tokenizer = new StringTokenizer(param, ",");
|
||||||
@ -137,10 +139,23 @@ public class WebappAuthenticationValve extends CarbonTomcatValve {
|
|||||||
skippedEndPoint = skippedEndPoint + "/";
|
skippedEndPoint = skippedEndPoint + "/";
|
||||||
}
|
}
|
||||||
nonSecuredEndpoints.put(skippedEndPoint, "true");
|
nonSecuredEndpoints.put(skippedEndPoint, "true");
|
||||||
|
if (uri.equals(skippedEndPoint) || Pattern.matches(skippedEndPoint, uri)){
|
||||||
|
isUriUnsecured = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return isUriUnsecured;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (nonSecuredEndpoints.containsKey(uri)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
for (String endpoint : nonSecuredEndpoints.keySet()) {
|
||||||
|
if (Pattern.matches(endpoint, uri)) {
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nonSecuredEndpoints.containsKey(uri);
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void processRequest(Request request, Response response, CompositeValve compositeValve,
|
private void processRequest(Request request, Response response, CompositeValve compositeValve,
|
||||||
|
|||||||
@ -149,6 +149,7 @@
|
|||||||
<Scope>perm:app:review:update</Scope>
|
<Scope>perm:app:review:update</Scope>
|
||||||
<Scope>perm:app:publisher:view</Scope>
|
<Scope>perm:app:publisher:view</Scope>
|
||||||
<Scope>perm:app:publisher:update</Scope>
|
<Scope>perm:app:publisher:update</Scope>
|
||||||
|
<Scope>perm:app:store:view</Scope>
|
||||||
</Scopes>
|
</Scopes>
|
||||||
<SSOConfiguration>
|
<SSOConfiguration>
|
||||||
<Issuer>app-mgt</Issuer>
|
<Issuer>app-mgt</Issuer>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user