} else if (!hasPermissionToSubscribeViaEmail(userRegistry, path, endpoint)) {
throw new SecurityException("User does not have enough priviledges to subscribe another user");
} else if (Utils.getRegistryEventingService() == null) {
throw new IllegalStateException("Registry Eventing Service Not Found");
} else {
Subscription subscription =
BuilderUtils.createSubscription(endpoint,
"http://wso2.org/registry/eventing/dialect/topicFilter",
RegistryEventingConstants.TOPIC_PREFIX + path +
RegistryEvent.TOPIC_SEPARATOR + eventName);
subscription.setEventDispatcherName(RegistryEventingConstants.TOPIC_PREFIX);
int callerTenantId = userRegistry.getCallerTenantId();
subscription.setTenantId(callerTenantId);
String name = userRegistry.getUserName();
if (callerTenantId != MultitenantConstants.SUPER_TENANT_ID &&
callerTenantId > -1) {
try {
SuperTenantCarbonContext.startTenantFlow();
SuperTenantCarbonContext currentContext =
SuperTenantCarbonContext.getCurrentContext();
currentContext.setTenantId(callerTenantId, true);
String tenantDomain = currentContext.getTenantDomain();
if (tenantDomain != null) {
name = name + "@" + tenantDomain;
}
} finally {
SuperTenantCarbonContext.endTenantFlow();
}
}
subscription.setOwner(name);
Map<String, String> data = new HashMap<String, String>();
if (doRest) {
data.put(RegistryEventingConstants.DO_REST, Boolean.toString(Boolean.TRUE));
}
subscription.setProperties(data);
String subscriptionId;
if (url == null || userName == null) {
subscriptionId =
Utils.getRegistryEventingService().subscribe(subscription);
} else {
throw new UnsupportedOperationException("You cannot directly subscribe to a " +
"Remote Resource. Use the Registry Browser User Interface to add a " +
"Remote Subscription.");
}
if (subscriptionId == null) {
throw new IllegalStateException("Subscription Id invalid");
}
subscription.setId(subscriptionId);
SubscriptionInstance subscriptionInstance = populate(path, subscription);
if (subscriptionInstance != null) {
subscriptionInstance.setOwner(userRegistry.getUserName());
subscriptionInstances.add(subscriptionInstance);
}