use of org.eclipse.kapua.service.device.registry.event.DeviceEventQuery in project kapua by eclipse.
the class GwtDeviceServiceImpl method findDeviceEvents.
public PagingLoadResult<GwtDeviceEvent> findDeviceEvents(PagingLoadConfig loadConfig, GwtDevice gwtDevice, Date startDate, Date endDate) throws GwtKapuaException {
ArrayList<GwtDeviceEvent> gwtDeviceEvents = new ArrayList<GwtDeviceEvent>();
BasePagingLoadResult<GwtDeviceEvent> gwtResults = null;
KapuaLocator locator = KapuaLocator.getInstance();
DeviceEventService des = locator.getService(DeviceEventService.class);
DeviceEventFactory deviceEventFactory = locator.getFactory(DeviceEventFactory.class);
try {
// prepare the query
BasePagingLoadConfig bplc = (BasePagingLoadConfig) loadConfig;
DeviceEventQuery query = deviceEventFactory.newQuery(KapuaEid.parseShortId(gwtDevice.getScopeId()));
KapuaAndPredicate andPredicate = new AndPredicate();
andPredicate.and(new AttributePredicate<KapuaId>(DeviceEventPredicates.DEVICE_ID, KapuaEid.parseShortId(gwtDevice.getId())));
// .and(new AttributePredicate<Date>(DeviceEventPredicates.RECEIVED_ON, startDate, Operator.GREATER_THAN));
// .and(new AttributePredicate<Date>(DeviceEventPredicates.RECEIVED_ON, startDate, Operator.LESS_THAN));
query.setPredicate(andPredicate);
query.setSortCriteria(new FieldSortCriteria(DeviceEventPredicates.RECEIVED_ON, SortOrder.DESCENDING));
query.setOffset(bplc.getOffset());
query.setLimit(bplc.getLimit());
// query execute
KapuaListResult<DeviceEvent> deviceEvents = des.query(query);
// prepare results
for (DeviceEvent deviceEvent : deviceEvents.getItems()) {
gwtDeviceEvents.add(KapuaGwtConverter.convert(deviceEvent));
}
gwtResults = new BasePagingLoadResult<GwtDeviceEvent>(gwtDeviceEvents);
gwtResults.setOffset(loadConfig.getOffset());
gwtResults.setTotalLength((int) des.count(query));
} catch (Throwable t) {
KapuaExceptionHandler.handle(t);
}
return gwtResults;
}
use of org.eclipse.kapua.service.device.registry.event.DeviceEventQuery in project kapua by eclipse.
the class Devices method getEvents.
/**
* Returns the events for the device identified by the specified
* ClientID under the account of the currently connected user.
* <p>
* If the flag DeviceEventsResult.limitExceeded is set, the maximum number
* of entries to be returned has been reached, more events exist and can
* be read by moving the offset forward in a new request
*
* @param deviceId
* The client ID of the device requested.
* @param limit
* Maximum number of entries to be returned.
* @param offset
* Starting offset for the entries to be returned.
* @param startDate
* Start date of the date range requested. The parameter
* is expressed as a long counting the number of milliseconds since
* January 1, 1970, 00:00:00 GMT. The default value of 0 means no
* start date. Alternatively, the date can be expressed as a string
* following the ISO 8601 format.
* @param endDate
* End date of the date range requested. The parameter
* is expressed as a long counting the number of milliseconds since
* January 1, 1970, 00:00:00 GMT. The default value of 0 means no
* start date. Alternatively, the date can be expressed as a string
* following the ISO 8601 format.
* @return The list of Events
*/
@GET
@Path("{deviceId}/events")
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public DeviceEventListResult getEvents(@PathParam("deviceId") String deviceId, @QueryParam("limit") @DefaultValue("50") int limit, @QueryParam("offset") int offset, @QueryParam("startDate") String startDate, @QueryParam("endDate") String endDate) {
DeviceEventListResult deviceEvents = eventFactory.newDeviceListResult();
try {
KapuaId scopeId = KapuaSecurityUtils.getSession().getScopeId();
KapuaId id = KapuaEid.parseShortId(deviceId);
DeviceEventQuery query = eventFactory.newQuery(scopeId);
KapuaAndPredicate andPredicate = new AndPredicate();
andPredicate.and(new AttributePredicate<>(DeviceEventPredicates.DEVICE_ID, id));
// TODO Date filter not working?
if (startDate != null) {
DateTime parsedStartDate = DateTime.parse(startDate);
andPredicate = andPredicate.and(new AttributePredicate<>(DeviceEventPredicates.RECEIVED_ON, parsedStartDate.toDate(), KapuaAttributePredicate.Operator.GREATER_THAN));
}
if (endDate != null) {
DateTime parsedEndDate = DateTime.parse(endDate);
andPredicate = andPredicate.and(new AttributePredicate<>(DeviceEventPredicates.RECEIVED_ON, parsedEndDate.toDate(), KapuaAttributePredicate.Operator.LESS_THAN));
}
query.setPredicate(andPredicate);
query.setSortCriteria(new FieldSortCriteria(DeviceEventPredicates.RECEIVED_ON, FieldSortCriteria.SortOrder.DESCENDING));
query.setOffset(offset);
query.setLimit(limit);
// query execute
deviceEvents = (DeviceEventListResult) eventService.query(query);
} catch (Throwable t) {
handleException(t);
}
return returnNotNullEntity(deviceEvents);
}
use of org.eclipse.kapua.service.device.registry.event.DeviceEventQuery in project kapua by eclipse.
the class GwtDeviceServiceImpl method findDevices.
public PagingLoadResult<GwtDevice> findDevices(PagingLoadConfig loadConfig, String scopeIdString, GwtDeviceQueryPredicates predicates) throws GwtKapuaException {
KapuaLocator locator = KapuaLocator.getInstance();
DeviceRegistryService deviceRegistryService = locator.getService(DeviceRegistryService.class);
DeviceFactory deviceFactory = locator.getFactory(DeviceFactory.class);
List<GwtDevice> gwtDevices = new ArrayList<GwtDevice>();
BasePagingLoadResult<GwtDevice> gwtResults;
int totalResult = 0;
try {
BasePagingLoadConfig bplc = (BasePagingLoadConfig) loadConfig;
DeviceQuery deviceQuery = deviceFactory.newQuery(KapuaEid.parseShortId(scopeIdString));
deviceQuery.setLimit(bplc.getLimit() + 1);
deviceQuery.setOffset(bplc.getOffset());
AndPredicate andPred = new AndPredicate();
if (predicates.getClientId() != null) {
andPred = andPred.and(new AttributePredicate<String>(DevicePredicates.CLIENT_ID, predicates.getUnescapedClientId(), Operator.STARTS_WITH));
}
if (predicates.getDisplayName() != null) {
andPred = andPred.and(new AttributePredicate<String>(DevicePredicates.DISPLAY_NAME, predicates.getUnescapedDisplayName(), Operator.STARTS_WITH));
}
if (predicates.getSerialNumber() != null) {
andPred = andPred.and(new AttributePredicate<String>(DevicePredicates.SERIAL_NUMBER, predicates.getUnescapedSerialNumber()));
}
if (predicates.getDeviceStatus() != null) {
andPred = andPred.and(new AttributePredicate<DeviceStatus>(DevicePredicates.STATUS, DeviceStatus.valueOf(predicates.getDeviceStatus())));
}
if (predicates.getSortAttribute() != null) {
SortOrder sortOrder = SortOrder.ASCENDING;
if (predicates.getSortOrder().equals(SortOrder.DESCENDING.name())) {
sortOrder = SortOrder.DESCENDING;
}
if (predicates.getSortAttribute().equals(GwtDeviceQueryPredicates.GwtSortAttribute.CLIENT_ID.name())) {
deviceQuery.setSortCriteria(new FieldSortCriteria(DevicePredicates.CLIENT_ID, sortOrder));
} else if (predicates.getSortAttribute().equals(GwtDeviceQueryPredicates.GwtSortAttribute.DISPLAY_NAME.name())) {
deviceQuery.setSortCriteria(new FieldSortCriteria(DevicePredicates.DISPLAY_NAME, sortOrder));
} else if (predicates.getSortAttribute().equals(GwtDeviceQueryPredicates.GwtSortAttribute.LAST_EVENT_ON.name())) {
deviceQuery.setSortCriteria(new FieldSortCriteria(DevicePredicates.LAST_EVENT_ON, sortOrder));
}
} else {
deviceQuery.setSortCriteria(new FieldSortCriteria(DevicePredicates.CLIENT_ID, SortOrder.ASCENDING));
}
deviceQuery.setPredicate(andPred);
KapuaListResult<Device> devices = deviceRegistryService.query(deviceQuery);
totalResult = (int) deviceRegistryService.count(deviceQuery);
DeviceConnectionService deviceConnectionService = locator.getService(DeviceConnectionService.class);
DeviceEventService deviceEventService = locator.getService(DeviceEventService.class);
DeviceEventFactory deviceEventFactory = locator.getFactory(DeviceEventFactory.class);
DeviceEventQuery eventQuery = deviceEventFactory.newQuery(deviceQuery.getScopeId());
eventQuery.setLimit(1);
eventQuery.setSortCriteria(new FieldSortCriteria(DeviceEventPredicates.RECEIVED_ON, SortOrder.DESCENDING));
for (Device d : devices.getItems()) {
DeviceConnection deviceConnection = deviceConnectionService.findByClientId(d.getScopeId(), d.getClientId());
// Connection info
GwtDevice gwtDevice = KapuaGwtConverter.convert(d);
gwtDevice.setConnectionIp(deviceConnection.getClientIp());
gwtDevice.setGwtDeviceConnectionStatus(deviceConnection.getStatus().name());
gwtDevice.setLastEventOn(deviceConnection.getModifiedOn());
// Event infos
eventQuery.setPredicate(new AttributePredicate<KapuaId>(DeviceEventPredicates.DEVICE_ID, d.getId()));
KapuaListResult<DeviceEvent> events = deviceEventService.query(eventQuery);
if (!events.isEmpty()) {
DeviceEvent lastEvent = events.getItem(0);
gwtDevice.setLastEventType(lastEvent.getResource());
gwtDevice.setLastEventOn(lastEvent.getReceivedOn());
}
gwtDevices.add(gwtDevice);
}
} catch (Throwable t) {
KapuaExceptionHandler.handle(t);
}
gwtResults = new BasePagingLoadResult<GwtDevice>(gwtDevices);
gwtResults.setOffset(loadConfig.getOffset());
gwtResults.setTotalLength(totalResult);
return gwtResults;
}
Aggregations