package com.atlassian.labs.speakeasy.descriptor.external;
import com.atlassian.plugin.PluginParseException;
import com.atlassian.plugin.web.Condition;
import com.atlassian.sal.api.user.UserManager;
import org.osgi.framework.BundleContext;
import java.util.Collections;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import static java.util.Arrays.asList;
/**
*
*/
public class GroupScopedCondition implements Condition
{
private Set<String> groups;
private final UserManager userManager;
public GroupScopedCondition(BundleContext bundleContext)
{
this.userManager = (UserManager) bundleContext.getService(bundleContext.getServiceReference(UserManager.class.getName()));
}
public void init(Map<String, String> props) throws PluginParseException
{
String groupString = props.get("groups");
groups = new HashSet<String>((groupString != null && groupString.length() > 0) ? asList(groupString.split("\\|")) : Collections.<String>emptySet());
}
public boolean shouldDisplay(Map<String, Object> stringObjectMap)
{
boolean result = false;
String user = userManager.getRemoteUsername();
// Fix for SPEAKEASY-135. userManager.isUserInGroup(...) returns NPE if user is null.
if (user == null) {
return result;
}
for (String group : groups)
{
if (userManager.isUserInGroup(user, group))
{
result = true;
break;
}
}
return result;
}
}