mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
Fix for adding alerts twice with same name bug
This commit is contained in:
parent
9e64c8971d
commit
27ae7cfed8
@ -327,7 +327,7 @@ public interface GeoLocationBasedService {
|
||||
}),
|
||||
@ApiResponse(
|
||||
code = 400,
|
||||
message = "Bad Request. \n Invalid Device Identifiers found.",
|
||||
message = "Bad Request. \n A geo alert with this name already exists.",
|
||||
response = Response.class),
|
||||
@ApiResponse(
|
||||
code = 401,
|
||||
|
||||
@ -48,6 +48,7 @@ import org.wso2.carbon.device.mgt.jaxrs.util.DeviceMgtUtil;
|
||||
import org.wso2.carbon.user.api.UserStoreException;
|
||||
import org.wso2.carbon.utils.multitenancy.MultitenantUtils;
|
||||
|
||||
import javax.persistence.EntityExistsException;
|
||||
import javax.ws.rs.*;
|
||||
import javax.ws.rs.core.Response;
|
||||
import java.util.ArrayList;
|
||||
@ -201,9 +202,13 @@ public class GeoLocationBasedServiceImpl implements GeoLocationBasedService {
|
||||
geoService.createGeoAlert(alert, alertType);
|
||||
return Response.ok().build();
|
||||
} catch (GeoLocationBasedServiceException e) {
|
||||
String error = "Error occurred while creating " + alertType + "alert";
|
||||
String error = "Error occurred while creating " + alertType + " alert";
|
||||
log.error(error, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(error).build();
|
||||
} catch (AlertAlreadyExist e) {
|
||||
String error = "A geo alert with this name already exists.";
|
||||
log.error(error,e);
|
||||
return Response.status(Response.Status.BAD_REQUEST).entity(error).build();
|
||||
}
|
||||
}
|
||||
|
||||
@ -263,6 +268,10 @@ public class GeoLocationBasedServiceImpl implements GeoLocationBasedService {
|
||||
String error = "Error occurred while updating the geo alert for geo clusters";
|
||||
log.error(error, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(error).build();
|
||||
} catch (AlertAlreadyExist e) {
|
||||
String error = "A geo alert with this name already exists.";
|
||||
log.error(error,e);
|
||||
return Response.status(Response.Status.BAD_REQUEST).entity(error).build();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -0,0 +1,25 @@
|
||||
package org.wso2.carbon.device.mgt.common.geo.service;
|
||||
|
||||
/**
|
||||
* Custom exception class of Geo Service related operations.
|
||||
*/
|
||||
|
||||
public class AlertAlreadyExist extends Exception {
|
||||
|
||||
private static final long serialVersionUID = 4709355511911265093L;
|
||||
|
||||
private String errorMessage;
|
||||
|
||||
public String getErrorMessage() {
|
||||
return errorMessage;
|
||||
}
|
||||
|
||||
public void setErrorMessage(String errorMessage) {
|
||||
this.errorMessage = errorMessage;
|
||||
}
|
||||
|
||||
public AlertAlreadyExist(String msg) {
|
||||
super(msg);
|
||||
setErrorMessage(msg);
|
||||
}
|
||||
}
|
||||
@ -40,13 +40,13 @@ public interface GeoLocationProviderService {
|
||||
throws GeoLocationBasedServiceException, AlertAlreadyExistException;
|
||||
|
||||
boolean createGeoAlert(Alert alert, String alertType)
|
||||
throws GeoLocationBasedServiceException;
|
||||
throws GeoLocationBasedServiceException,AlertAlreadyExist;
|
||||
|
||||
boolean updateGeoAlert(Alert alert, DeviceIdentifier identifier, String alertType)
|
||||
throws GeoLocationBasedServiceException, AlertAlreadyExistException;
|
||||
|
||||
boolean updateGeoAlert(Alert alert, String alertType)
|
||||
throws GeoLocationBasedServiceException;
|
||||
throws GeoLocationBasedServiceException,AlertAlreadyExist;
|
||||
|
||||
boolean removeGeoAlert(String alertType, DeviceIdentifier identifier, String queryName)
|
||||
throws GeoLocationBasedServiceException;
|
||||
|
||||
@ -55,6 +55,7 @@ import org.wso2.carbon.registry.api.Resource;
|
||||
import javax.net.ssl.KeyManagerFactory;
|
||||
import javax.net.ssl.SSLContext;
|
||||
import javax.net.ssl.TrustManagerFactory;
|
||||
import javax.persistence.EntityExistsException;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
@ -303,7 +304,7 @@ public class GeoLocationProviderServiceImpl implements GeoLocationProviderServic
|
||||
|
||||
@Override
|
||||
public boolean createGeoAlert(Alert alert, DeviceIdentifier identifier, String alertType)
|
||||
throws GeoLocationBasedServiceException, AlertAlreadyExistException {
|
||||
throws GeoLocationBasedServiceException {
|
||||
return saveGeoAlert(alert, identifier, alertType, false);
|
||||
}
|
||||
|
||||
@ -315,7 +316,7 @@ public class GeoLocationProviderServiceImpl implements GeoLocationProviderServic
|
||||
|
||||
@Override
|
||||
public boolean updateGeoAlert(Alert alert, DeviceIdentifier identifier, String alertType)
|
||||
throws GeoLocationBasedServiceException, AlertAlreadyExistException {
|
||||
throws GeoLocationBasedServiceException {
|
||||
return saveGeoAlert(alert, identifier, alertType, true);
|
||||
}
|
||||
|
||||
@ -423,7 +424,7 @@ public class GeoLocationProviderServiceImpl implements GeoLocationProviderServic
|
||||
}
|
||||
|
||||
public boolean saveGeoAlert(Alert alert, DeviceIdentifier identifier, String alertType, boolean isUpdate)
|
||||
throws GeoLocationBasedServiceException, AlertAlreadyExistException {
|
||||
throws GeoLocationBasedServiceException {
|
||||
|
||||
Type type = new TypeToken<Map<String, String>>() {
|
||||
}.getType();
|
||||
@ -465,38 +466,23 @@ public class GeoLocationProviderServiceImpl implements GeoLocationProviderServic
|
||||
"Unrecognized execution plan type: " + alertType + " while creating geo alert");
|
||||
}
|
||||
|
||||
//persist alert in registry
|
||||
updateRegistry(getRegistryPath(alertType, identifier, alert.getQueryName()), identifier, content,
|
||||
options);
|
||||
|
||||
//deploy alert into event processor
|
||||
EventProcessorAdminServiceStub eventprocessorStub = null;
|
||||
String action = (isUpdate ? "updating" : "creating");
|
||||
try {
|
||||
ExecutionPlanConfigurationDto[] allActiveExecutionPlanConfigs = null;
|
||||
String activeExecutionPlan = null;
|
||||
String executionPlanName = getExecutionPlanName(alertType, alert.getQueryName(),
|
||||
identifier.getId());
|
||||
eventprocessorStub = getEventProcessorAdminServiceStub();
|
||||
String parsedTemplate = parseTemplate(alertType, parseMap);
|
||||
String validationResponse = eventprocessorStub.validateExecutionPlan(parsedTemplate);
|
||||
if (validationResponse.equals("success")) {
|
||||
allActiveExecutionPlanConfigs = eventprocessorStub.getAllActiveExecutionPlanConfigurations();
|
||||
if (isUpdate) {
|
||||
for (ExecutionPlanConfigurationDto activeExectionPlanConfig:allActiveExecutionPlanConfigs) {
|
||||
activeExecutionPlan = activeExectionPlanConfig.getExecutionPlan();
|
||||
if (activeExecutionPlan.contains(executionPlanName)) {
|
||||
eventprocessorStub.editActiveExecutionPlan(parsedTemplate, executionPlanName);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
eventprocessorStub.deployExecutionPlan(parsedTemplate);
|
||||
String executionPlanName = getExecutionPlanName(alertType, alert.getQueryName(),
|
||||
identifier.getId());
|
||||
eventprocessorStub.editActiveExecutionPlan(parsedTemplate, executionPlanName);
|
||||
} else {
|
||||
for (ExecutionPlanConfigurationDto activeExectionPlanConfig:allActiveExecutionPlanConfigs) {
|
||||
activeExecutionPlan = activeExectionPlanConfig.getExecutionPlan();
|
||||
if (activeExecutionPlan.contains(executionPlanName)) {
|
||||
throw new AlertAlreadyExistException("Execution plan already exists with name "
|
||||
+ executionPlanName);
|
||||
}
|
||||
}
|
||||
updateRegistry(getRegistryPath(alertType, identifier, alert.getQueryName()), identifier, content,
|
||||
options);
|
||||
eventprocessorStub.deployExecutionPlan(parsedTemplate);
|
||||
}
|
||||
} else {
|
||||
@ -592,8 +578,6 @@ public class GeoLocationProviderServiceImpl implements GeoLocationProviderServic
|
||||
private String getExecutionPlanName(String alertType, String queryName, String deviceId) {
|
||||
if ("Traffic".equals(alertType)) {
|
||||
return "Geo-ExecutionPlan-Traffic_" + queryName + "_alert";
|
||||
} else if ("Speed".equals(alertType)) {
|
||||
return "Geo-ExecutionPlan-" + alertType + "---" + deviceId + "_alert";
|
||||
} else {
|
||||
return "Geo-ExecutionPlan-" + alertType + "_" + queryName + "---_" + deviceId + "_alert";
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user