private Subscription buildAlarmSubscription(final SentiloRequest request, final NotificationParams notificationParams) { final String entityId = request.getEntitySource(); final String alertId = request.getResourcePart(1); // The request doesn't identify who is the alert owner. It is filled in in a subsequent // step return new AlarmSubscription(entityId, null, alertId, notificationParams); }
public AlarmSubscription(final String sourceEntityId, final String targetEntityId, final String alertId, final NotificationParams notificationParams) { super(sourceEntityId, targetEntityId, SubscribeType.ALARM); this.alertId = alertId; setNotificationParams(notificationParams); }
public static Topic getChannel(final Subscription subscription) { Assert.notNull(subscription); switch (subscription.getType()) { case DATA: return buildTopic(PubSubChannelPrefix.data, ((DataSubscription) subscription).getProviderId(), ((DataSubscription) subscription).getSensorId()); case ORDER: return buildTopic(PubSubChannelPrefix.order, ((OrderSubscription) subscription).getOwnerEntityId(), ((OrderSubscription) subscription).getSensorId()); case ALARM: return buildTopic(PubSubChannelPrefix.alarm, ((AlarmSubscription) subscription).getAlertId()); default: throw new IllegalArgumentException("Unknown subscription type:" + subscription.getType()); } }
private void checkTargetResourceState(final Subscription subscription) { Assert.notNull(subscription); switch (subscription.getType()) { case DATA: checkSensorState(((DataSubscription) subscription).getProviderId(), ((DataSubscription) subscription).getSensorId()); break; case ORDER: checkSensorState(((OrderSubscription) subscription).getOwnerEntityId(), ((OrderSubscription) subscription).getSensorId()); break; case ALARM: checkAlertState(((AlarmSubscription) subscription).getAlertId()); break; default: throw new IllegalArgumentException("Unknown subscription type:" + subscription.getType()); } }
@Override public void onPut(final SentiloRequest request, final SentiloResponse response) { LOGGER.debug("Executing subscribe PUT request"); debug(request); // The request follows the following pattern: // PUT /subscribe/{eventType}/{resourceId} // where {resourceId} may be composite (e.g. <providerId>/<sensorId>) validateResourceNumberParts(request, 2, 3); final Subscription subscription = parser.parseRequest(request); validator.validateRequestMessageOnPut(new SubscribeInputMessage(subscription)); if (subscription.getType().equals(SubscribeType.ALARM)) { subscription.setOwnerEntityId(alarmService.getAlertOwner(((AlarmSubscription) subscription).getAlertId())); } validateReadAccess(request.getEntitySource(), subscription.getOwnerEntityId()); subscribeService.subscribe(subscription); }
public static Subscription getSubscription(final String entityId, final String channel, final String notificationParamsJson) { Assert.notNull(channel); // channel follow the following format: /<type>/<resourceId1>/<resourceId2> // where <resourceId2> is optional // and <resouceId1> could represent a pattern (ends with *) final String[] tokens = channel.split(PubSubConstants.REDIS_CHANNEL_TOKEN); final PubSubChannelPrefix type = PubSubChannelPrefix.valueOf(tokens[1]); final NotificationParams notificationParams = (NotificationParams) converter.unmarshal(notificationParamsJson, NotificationParams.class); Subscription subscription = null; String providerId, sensorId; switch (type) { case data: providerId = tokens[2]; sensorId = !providerId.endsWith(PubSubConstants.REDIS_CHANNEL_PATTERN_SUFFIX) && tokens.length > 3 ? tokens[3] : null; subscription = new DataSubscription(entityId, providerId, sensorId, notificationParams); break; case order: providerId = tokens[2]; sensorId = !providerId.endsWith(PubSubConstants.REDIS_CHANNEL_PATTERN_SUFFIX) && tokens.length > 3 ? tokens[3] : null; subscription = new OrderSubscription(entityId, providerId, sensorId, notificationParams); break; case alarm: final String alarmId = tokens[2]; subscription = new AlarmSubscription(entityId, null, alarmId, notificationParams); break; } return subscription; }
private SubscriptionMessage parseSubscriptionToSubscribeMessage(final Subscription subscription) { final SubscriptionMessage message = new SubscriptionMessage(); message.setType(subscription.getType().toString()); if (subscription.getNotificationParams() != null) { message.setEndpoint(subscription.getNotificationParams().getEndpoint()); message.setMaxRetries(subscription.getNotificationParams().getMaxRetries()); message.setRetryDelay(subscription.getNotificationParams().getRetryDelay()); } switch (subscription.getType()) { case DATA: message.setProvider(((DataSubscription) subscription).getProviderId()); message.setSensor(((DataSubscription) subscription).getSensorId()); break; case ALARM: message.setAlert(((AlarmSubscription) subscription).getAlertId()); break; case ORDER: message.setProvider(((OrderSubscription) subscription).getOwnerEntityId()); message.setSensor(((OrderSubscription) subscription).getSensorId()); break; } return message; }