public static Subscription getSubscription(final String entityId, final String channel, final String notificationParamsJson) {
Assert.notNull(channel);
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;
}