public DataSubscription(final String entityId, final String providerId, final NotificationParams notificationParams) { super(entityId, providerId, SubscribeType.DATA); this.providerId = providerId; 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()); } }
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 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()); } }
private Subscription buildDataSubscription(final SentiloRequest request, final NotificationParams notificationParams) { final boolean resourceHasEvent = resourceHasEvent(request); final String entityId = request.getEntitySource(); final String providerId = resourceHasEvent ? request.getResourcePart(1) : request.getResourcePart(0); final String sensorId = resourceHasEvent ? request.getResourcePart(2) : request.getResourcePart(1); return new DataSubscription(entityId, providerId, sensorId, notificationParams); }
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; }