@Override public int hashCode() { // Hashcode return must be consistent with the equals method final int prime = 17; int result = 1; result = prime * result + fromTsTime.hashCode() + (SentiloUtils.arrayIsEmpty(coordinates) ? 0 : coordinates.hashCode()); return result; }
@RequestMapping(value = "/entity/{entityId}/delete", method = RequestMethod.PUT) @ResponseBody public CatalogAlertResponseMessage deleteAlerts(@PathVariable final String entityId, @RequestBody(required = false) final CatalogAlertInputMessage message) { // Solo se pueden borrar alarmas externas de las cuales se es el propietario. // Las alarmas internas solo se pueden borrar via la web. LOGGER.debug("Catalog alert API: deleting alerts. Operation invoked by entity {} ", entityId); try { if (message == null || SentiloUtils.arrayIsEmpty(message.getAlertsIds())) { alertService.deleteOwnAlerts(entityId); LOGGER.debug("Catalog alert API: deleted all alerts from entity {}", entityId); } else if (!SentiloUtils.arrayIsEmpty(message.getAlertsIds())) { alertService.deleteOwnAlerts(message.getAlertsIds(), entityId); LOGGER.debug("Catalog alert API: deleted {} alerts", message.getAlertsIds().length); } } catch (final Exception ex) { final String internalErrorCode = SentiloUtils.buildNewInternalErrorCode(SentiloConstants.CATALOG_API_ERROR); LOGGER.error("{} - Error deleting alerts. ", internalErrorCode, ex); final String errorMessage = String.format(SentiloConstants.INTERNAL_ERROR_MESSAGE_TEMPLATE, internalErrorCode); return new CatalogAlertResponseMessage(errorMessage); } return new CatalogAlertResponseMessage(); } }
private static String buildPath(final List<String> resourceTokens, final String... rootTokens) { if (CollectionUtils.isEmpty(resourceTokens)) { return RESTUtils.buildPath(rootTokens); } else { final List<String> tokens = SentiloUtils.addValuesToBeginningList(resourceTokens, rootTokens); return RESTUtils.buildPath(tokens.toArray(new String[tokens.size()])); } } }
protected JsonConverterException buildJsonFieldError(final String type, final String value, final Throwable cause) { final String internalErrorCode = SentiloUtils.buildNewInternalErrorCode(SentiloConstants.JSON_UNMARSHAL_ERROR); getLogger().error("{} - Error unmarshalling JSON payload. Wrong {} value: {}.", internalErrorCode, type, value, cause); final String errorMessage = String.format(UNMARSHAL_JSON_ERROR_TEMPLATE, internalErrorCode); final List<String> errorDetails = new ArrayList<String>(); errorDetails.add(String.format(UNMARSHAL_JSON_FIELD_ERROR_TEMPLATE, type, value)); return new JsonConverterException(errorMessage, errorDetails); }
private boolean isValidLocationFormat(final String location) { boolean valid = true; if (SentiloUtils.stringIsNotEmptyOrNull(location)) { final String[] coordinatesList = location.split(Constants.LOCATION_TOKEN_SPLITTER); for (int i = 0; i < coordinatesList.length && valid; i++) { valid = validateCoordinatesFormat(coordinatesList[i]); } } return valid; }
/** * Checks if the current tenant is the owner of the resource. * * @param resource * @return */ public static boolean isCurrentTenantResource(final CatalogDocument resource) { boolean isCurrentTenantResource = true; if (TenantContextHolder.isEnabled()) { final String currentTenant = getCurrentTenant(); final String resourceTenant = getResourceTenantOwner(resource); isCurrentTenantResource = SentiloUtils.areEquals(currentTenant, resourceTenant); } return isCurrentTenantResource; }
private void validateTechnicalDetails(final ApiValidationResults results, final TechnicalDetails technicalDetails, final String resourceId, final CatalogDocument resource, final String[] connectivityTypesList, final String[] energyTypesList) { final String resourceType = resource instanceof Component ? COMPONENT : SENSOR; if (technicalDetails != null) { final String connectivity = technicalDetails.getConnectivity(); final String energy = technicalDetails.getEnergy(); if (StringUtils.hasText(energy) && !arrayContainsValue(energyTypesList, energy)) { final String errorMessage = buildErrorMessage(resourceType, resourceId, "energy", energy); results.addErrorMessage(errorMessage); } if (StringUtils.hasText(connectivity) && !arrayContainsValue(connectivityTypesList, connectivity)) { final String errorMessage = buildErrorMessage(resourceType, resourceId, "connectivity", connectivity); results.addErrorMessage(errorMessage); } } }
protected JsonConverterException buildMarshalJsonException(final Object obj, final Throwable cause) { final String internalErrorCode = SentiloUtils.buildNewInternalErrorCode(SentiloConstants.JSON_MARSHAL_ERROR); getLogger().error("{} - Error marshalling object of type {} to JSON.", internalErrorCode, obj.getClass().getName(), cause); final String errorMessage = String.format(MARSHAL_JSON_ERROR_TEMPLATE, internalErrorCode); return new JsonConverterException(errorMessage); }
if (SentiloUtils.stringIsNotEmptyOrNull(catalogSensor.getDataType())) { sensor.setDataType(parseDataTypeValue(catalogSensor.getDataType())); if (SentiloUtils.stringIsNotEmptyOrNull(catalogSensor.getDescription())) { sensor.setDescription(catalogSensor.getDescription()); if (SentiloUtils.stringIsNotEmptyOrNull(catalogSensor.getType())) { sensor.setType(catalogSensor.getType()); if (SentiloUtils.stringIsNotEmptyOrNull(catalogSensor.getUnit())) { sensor.setUnit(catalogSensor.getUnit()); if (SentiloUtils.stringIsNotEmptyOrNull(catalogSensor.getTimeZone())) { sensor.setTimeZone(catalogSensor.getTimeZone());
@Override public SearchFilter buildMapSearchFilter() { final SearchFilter filter = new SearchFilter(); final Authentication authetication = SecurityContextHolder.getContext().getAuthentication(); final boolean userIsLoggedIn = authetication != null && authetication.getPrincipal() instanceof CatalogUserDetails; boolean requestToOwnTenant = true; if (TenantContextHolder.hasContext()) { // Views always shown components belonging to or authorized to request's tenant // And if request's tenant != user's tenant then only publics components are returned final String requestTenant = TenantUtils.getRequestTenant(); final String userTenant = TenantUtils.getUserTenant(); if (StringUtils.hasText(requestTenant)) { // Show only granted components that had been marked as visible on map filter.addAndParam("tenantsMapVisible", requestTenant); // Show only own and granted components filter.addAndParam("tenantsAuth", requestTenant); } requestToOwnTenant = SentiloUtils.areEquals(requestTenant, userTenant); } if (!userIsLoggedIn || !requestToOwnTenant) { filter.addAndParam("publicAccess", Boolean.TRUE); } return filter; }
public static String buildPath(final String... pathTokens) { final StringBuilder sb = new StringBuilder(); if (!SentiloUtils.arrayIsEmpty(pathTokens)) { for (final String pathToken : pathTokens) { sb.append(SentiloConstants.SLASH).append(pathToken); } } return sb.toString(); } }
@RequestMapping(value = "/delete/provider/{providerId}", method = RequestMethod.PUT) @ResponseBody public CatalogResponseMessage deleteProviderChilds(@RequestBody(required = false) final CatalogDeleteInputMessage message, @PathVariable final String providerId) { LOGGER.debug("Catalog API: deleting {} resources ", providerId); try { // The first step must be to validate the <providerId> parameter to verify that actually it // represents a provider and not an application. checkProviderAccess(providerId); if (message == null || SentiloUtils.arrayIsEmpty(message.getSensorsIds()) && SentiloUtils.arrayIsEmpty(message.getComponentsIds())) { providerService.deleteChildren(new Provider(providerId)); LOGGER.debug("Catalog API: deleted all resources"); } else if (!SentiloUtils.arrayIsEmpty(message.getSensorsIds())) { sensorService.deleteSensors(providerId, message.getSensorsIds()); LOGGER.debug("Catalog API: deleted {} sensors", message.getSensorsIds().length); } else if (!SentiloUtils.arrayIsEmpty(message.getComponentsIds())) { componentService.deleteComponents(providerId, message.getComponentsIds()); LOGGER.debug("Catalog API: deleted {} components", message.getComponentsIds().length); } } catch (final NotAllowedActionException naae) { LOGGER.warn("Rejected operation to delete provider's resources because {} doesn't represents a provider.", providerId); return new CatalogResponseMessage(CatalogResponseMessage.FORBIDDEN, SentiloConstants.RESTRICTED_TO_PROVIDERS_ERROR); } catch (final Exception ex) { final String internalErrorCode = SentiloUtils.buildNewInternalErrorCode(SentiloConstants.CATALOG_API_ERROR); LOGGER.error("{} - Error deleting childs from provider {} . ", internalErrorCode, providerId, ex); final String errorMessage = String.format(SentiloConstants.INTERNAL_ERROR_MESSAGE_TEMPLATE, internalErrorCode); return new CatalogResponseMessage(errorMessage); } return new CatalogResponseMessage(); }
protected JsonConverterException buildUnmarshallJsonException(final Class<?> clazz, final Throwable cause) { final String internalErrorCode = SentiloUtils.buildNewInternalErrorCode(SentiloConstants.JSON_UNMARSHAL_ERROR); getLogger().error("{} - Error unmarshalling JSON payload to class {}.", internalErrorCode, clazz.getName(), cause); final String errorMessage = String.format(UNMARSHAL_JSON_ERROR_TEMPLATE, internalErrorCode); return new JsonConverterException(errorMessage, cause); }
if (SentiloUtils.stringIsNotEmptyOrNull(catalogComponent.getComponentDesc())) { component.setDescription(catalogComponent.getComponentDesc()); if (SentiloUtils.stringIsNotEmptyOrNull(catalogComponent.getComponentType())) { component.setComponentType(catalogComponent.getComponentType()); if (SentiloUtils.stringIsNotEmptyOrNull(catalogComponent.getLocation())) { component.setLocation(CatalogUtils.convertStringLocation(catalogComponent.getLocation()));
/** * Add the specified values to the beginning of the list. * * @param baseList * @param values */ public static List<String> addValuesToBeginningList(final List<String> baseList, final String... values) { final List<String> result = new ArrayList<String>(); if (!arrayIsEmpty(values)) { final List<String> valuesList = Arrays.asList(values); result.addAll(valuesList); } result.addAll(baseList); return result; }
@AfterThrowing(pointcut = "anyTemplateMethodPointcut())", throwing = "ex") public void doTranslationAction(final RuntimeException ex) { if (ex instanceof CatalogException) { throw ex; } else { final String internalErrorCode = SentiloUtils.buildNewInternalErrorCode(SentiloConstants.CATALOG_GENERAL_ERROR); LOGGER.error("{} - Internal system error.", internalErrorCode, ex); throw new CatalogException(INTERNAL_SYSTEM_ERROR_KEY, new Object[] {internalErrorCode}, ex); } }
private static Alert buildAlertToUpdate(final CatalogAlert catalogAlert, final ApiAlertConverterContext context, final String catalogUser) { final Alert alert = context.getAlertService().find(new Alert(catalogAlert.getId())); final String entityId = StringUtils.hasText(catalogAlert.getEntity()) ? catalogAlert.getEntity() : context.getMessage().getEntityId(); // To confirm that an alert exists not only alert must be not null but also type and owner must // be equals if (alert != null && verifyType(alert.getType(), catalogAlert.getType()) && verifyOwner(alert, entityId)) { if (SentiloUtils.stringIsNotEmptyOrNull(catalogAlert.getName())) { alert.setName(catalogAlert.getName()); } if (SentiloUtils.stringIsNotEmptyOrNull(catalogAlert.getDescription())) { alert.setDescription(catalogAlert.getDescription()); } if (Type.INTERNAL.equals(alert.getType())) { if (SentiloUtils.stringIsNotEmptyOrNull(catalogAlert.getTrigger())) { alert.setTrigger(AlertTriggerType.valueOf(catalogAlert.getTrigger())); } if (SentiloUtils.stringIsNotEmptyOrNull(catalogAlert.getExpression())) { alert.setExpression(catalogAlert.getExpression()); } } alert.setUpdatedAt(new Date()); alert.setUpdatedBy(catalogUser); } else { final String errorMessage = String.format(ALERT_NOT_FOUND, catalogAlert.getId(), catalogAlert.getType()); context.getResults().addErrorMessage(errorMessage); } return alert; }
private List<TenantPermission> toPermissionList(final String[] selectedIds) { final List<TenantPermission> permissions = new ArrayList<TenantPermission>(); if (!SentiloUtils.arrayIsEmpty(selectedIds)) { for (final String id : selectedIds) { final TenantPermission permission = new TenantPermission(id); permissions.add(permission); } } return permissions; }
@RequestMapping(value = "/location", method = RequestMethod.PUT) @ResponseBody public CatalogResponseMessage updateMobileComponentsLocation(@RequestBody final CatalogInputMessage message) { LOGGER.debug("Catalog API: updating mobile component locations"); // message contains a list with N CatalogSensorElement instances. This list is ordered by // timestamp. try { final ApiConverterContext context = new ApiConverterContext(message, sensorService, componentService); final List<Component> components = ApiConverter.buildMobileComponentsFromSensorLocationElements(context); LOGGER.debug("Catalog API: build {} components that need update its locations ", components.size()); componentService.updateAll(components); } catch (final Exception ex) { final String internalErrorCode = SentiloUtils.buildNewInternalErrorCode(SentiloConstants.CATALOG_API_ERROR); LOGGER.error("{} - Error updating location for sensors. ", internalErrorCode, ex); final String errorMessage = String.format(SentiloConstants.INTERNAL_ERROR_MESSAGE_TEMPLATE, internalErrorCode); return new CatalogResponseMessage(errorMessage); } return new CatalogResponseMessage(); }
if (!SentiloUtils.stringIsNotEmptyOrNull(catalogSensor.getComponent())) { catalogSensor.setComponent(catalogSensor.getSensor()); if (!SentiloUtils.stringIsNotEmptyOrNull(catalogSensor.getComponentType())) { catalogSensor.setComponentType(Constants.DEFAULT_COMPONENT_TYPE); if (SentiloUtils.stringIsNotEmptyOrNull(catalogSensor.getComponentDesc())) { component.setDescription(catalogSensor.getComponentDesc());