}
return true;
}
public static SubscriptionBean subscribeAndPopulate(UserRegistry userRegistry, String path, String endpoint, String eventName, boolean doRest) {
SubscriptionBean subscriptionBean = new SubscriptionBean();
Resource resource = null;
String url = null;
String userName = null;
try {
resource = userRegistry.get(path);
} catch (Exception e) {
log.warn("Unable to fetch Resource at path: " + path);
resource = null;
}
if (resource != null) {
String isLink = resource.getProperty("registry.link");
String mountPoint = resource.getProperty("registry.mountpoint");
String targetPoint = resource.getProperty("registry.targetpoint");
String realPath = resource.getProperty("registry.realpath");
String actualPath = resource.getProperty("registry.actualpath");
userName = resource.getProperty("registry.user");
if (isLink != null && mountPoint != null && targetPoint != null) {
// path = path.replace(mountPoint, targetPoint);
path = actualPath;
} else if (isLink != null && realPath != null && userName != null) {
log.debug("Found mounted resource at: " + realPath);
if (!realPath.contains("/registry/resourceContent?")) {
path = realPath;
} else {
url = realPath.substring(0, realPath.indexOf("/resourceContent?path="));
}
}
}
ResourcePath resourcePath = new ResourcePath(path);
try {
subscriptionBean.setLoggedIn(!RegistryConstants.ANONYMOUS_USER.equals(userRegistry.getUserName()));
List<SubscriptionInstance> subscriptionInstances = new LinkedList<SubscriptionInstance>();
if (!subscriptionBean.getLoggedIn()) {
throw new SecurityException("User is not logged in");
} else if (!isAuthorized(userRegistry, path, ActionConstants.GET)) {
throw new SecurityException("User does not have enough priviledges to subscribe");
} 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);
}
}
subscriptionBean.setSubscriptionInstances(subscriptionInstances.toArray(new SubscriptionInstance[0]));
subscriptionBean.setPathWithVersion(resourcePath.getPathWithVersion());
subscriptionBean.setVersionView(!resourcePath.isCurrentVersion());
subscriptionBean.setUserName(userRegistry.getUserName());
subscriptionBean.setRoles(getRolesOfUser(userRegistry, userRegistry.getUserName()));
if (isAuthorized(userRegistry, path, AccessControlConstants.AUTHORIZE)) {
subscriptionBean.setUserAccessLevel(SubscriptionBean.UserAccessLevel.AUTHORIZE);
} else if (isAuthorized(userRegistry, path, ActionConstants.DELETE)) {
subscriptionBean.setUserAccessLevel(SubscriptionBean.UserAccessLevel.DELETE);
} else if (isAuthorized(userRegistry, path, ActionConstants.GET)) {
subscriptionBean.setUserAccessLevel(SubscriptionBean.UserAccessLevel.READ);
} else {
subscriptionBean.setUserAccessLevel(SubscriptionBean.UserAccessLevel.NONE);
}
if (isAdmin(userRegistry, getRolesOfUser(userRegistry, userRegistry.getUserName()))) {
subscriptionBean.setRoleAccessLevel(1);
} else {
subscriptionBean.setRoleAccessLevel(0);
}
} catch (Exception e) {
String msg = "Failed to subscribe to information of the resource " +
resourcePath + ". " + e.getMessage();
log.error("Failed to subscribe to information of the resource " +
resourcePath + ".", e);
subscriptionBean.setErrorMessage(msg);
}
return subscriptionBean;
}