/** * register an event on a subscription. The event will be registered only if * the value is new. * * @param subscription * The related subscription. * @param eventType * The new event type. * @param value * The new event value. * @return <code>true</code> if an event has been saved in database. */ public boolean registerEvent(final Subscription subscription, final EventType eventType, final String value) { final Event lastEvent = repository.findFirstBySubscriptionAndTypeOrderByIdDesc(subscription, eventType); if (lastEvent == null || !value.equals(lastEvent.getValue())) { final Event newEvent = new Event(); newEvent.setSubscription(subscription); saveEvent(newEvent, eventType, value); return true; } return false; }
/** * Register an event on a node. The event will be registered only if the * value is new. * * @param node * node * @param eventType * event type * @param value * new value * @return <code>true</code> if the event has been registered in database. */ public boolean registerEvent(final Node node, final EventType eventType, final String value) { final Event lastEvent = repository.findFirstByNodeAndTypeOrderByIdDesc(node, eventType); // Register event if it is a discovered node, or a status change if (lastEvent == null || !value.equals(lastEvent.getValue())) { final Event newEvent = new Event(); newEvent.setNode(node); saveEvent(newEvent, eventType, value); return true; } // No change, no persisted event return false; }
/** * {@link Event} JPA to VO object transformer without refined information. * * @param entity * Source entity. * @return The corresponding VO object with node/subscription reference. */ public static EventVo toVo(final Event entity) { final EventVo vo = new EventVo(); vo.setValue(entity.getValue()); vo.setType(entity.getType()); if (entity.getNode() == null) { vo.setSubscription(entity.getSubscription().getId()); vo.setNode(NodeResource.toVoLight(entity.getSubscription().getNode())); } else { vo.setNode(NodeResource.toVoLight(entity.getNode())); } return vo; }
/** * Return all events related to a visible node of given user. * * @param user * The principal user requesting these events. * @return Events related to a visible {@link Node}. */ public List<EventVo> findAll(final String user) { final List<Event> events = repository.findLastEvents(user); final Map<String, EventVo> services = new HashMap<>(); final Map<String, EventVo> tools = new HashMap<>(); for (final Event event : events) { final Node parent = event.getNode().getRefined(); fillParentEvents(tools, parent, EventResource.toVo(event), event.getValue()); fillParentEvents(services, parent.getRefined(), tools.get(parent.getId()), event.getValue()); } return new ArrayList<>(services.values()); }