Overview :- Create a puma class which can be used inside portlet,portal and even in a servlet.
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.portlet.ActionRequest;
import javax.portlet.PortletRequest;
import javax.servlet.ServletRequest;
import com.ibm.portal.portlet.service.PortletServiceHome;
import com.ibm.portal.portlet.service.PortletServiceUnavailableException;
import com.ibm.portal.um.Group;
import com.ibm.portal.um.Principal;
import com.ibm.portal.um.PumaController;
import com.ibm.portal.um.PumaHome;
import com.ibm.portal.um.PumaLocator;
import com.ibm.portal.um.PumaProfile;
import com.ibm.portal.um.User;
import com.ibm.portal.um.exceptions.PumaException;
import com.ibm.wps.logging.LogManager;
import com.ibm.wps.logging.Logger;
public class PumaUtil{
private static final Logger LOGGER = LogManager.getLogManager().getLogger(
PumaUtil.class);
/**
* The JNDI name of the portal PUMA SPI service.
*/
private static final String PORTAL_PUMA_SERVICE_JNDI_NAME = "portal:service/usermanagement/Puma";
/**
* The JNDI name of the portlet PUMA SPI service.
*/
private static final String PORTLET_PUMA_SERVICE_JNDI_NAME = "portletservice/com.ibm.portal.um.portletservice.PumaHome";
/**
* The portal puma service home object that is valid for the lifetime of the
* portal server.
*/
private static PumaHome portalPumaHome;
/**
* The portlet puma service home object that is valid for the lifetime of
* the portal server.
*/
private static com.ibm.portal.um.portletservice.PumaHome portletPumaHome;
static {
//If we are invoking in portal theme or in servlet
try {
Context context = new InitialContext();
portalPumaHome = (PumaHome) context
.lookup(PORTAL_PUMA_SERVICE_JNDI_NAME);
} catch (NamingException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
//If we are using it inside portal server
try {
Context context = new InitialContext();
PortletServiceHome portletServiceHome = (PortletServiceHome) context
.lookup("portletservice/com.ibm.portal.um.portletservice.PumaHome");
portletPumaHome = (com.ibm.portal.um.portletservice.PumaHome) portletServiceHome
.getPortletService(com.ibm.portal.um.portletservice.PumaHome.class);
} catch (NamingException e) {
e.printStackTrace();
throw new RuntimeException(e);
} catch (PortletServiceUnavailableException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
/**
* The current servlet request.
*/
private ServletRequest servletRequest;
/**
* The current portlet request.
*/
private PortletRequest portletRequest;
/**
*
* @param request
*/
private PumaUtil(ServletRequest request) {
servletRequest = request;
}
/**
*
* @param request
*/
private PumaUtil(PortletRequest request) {
portletRequest = request;
}
/**
*
* @return
*/
private boolean isServletRequest() {
return servletRequest != null;
}
/**
*
* @return
*/
private boolean isPortletRequest() {
return portletRequest != null;
}
/**
*
* @param request
* @return
*/
public static PumaUtil getInstance(ServletRequest request) {
return new PumaUtil(request);
}
/**
*
* @param request
* @return
*/
public static PumaUtil getInstance(PortletRequest request) {
return new PumaUtil(request);
}
/**
*
* @return
*/
public PumaProfile getProfile() {
if (isServletRequest())
return portalPumaHome.getProfile();
else
return portletPumaHome.getProfile(portletRequest);
}
/**
*
* @return
*/
public PumaLocator getLocator() {
if (isServletRequest())
return portalPumaHome.getLocator();
else
return portletPumaHome.getLocator(portletRequest);
}
/**
*
* @return
*/
public PumaController getController() {
if (isServletRequest())
return portalPumaHome.getController();
else if (portletRequest instanceof ActionRequest)
return portletPumaHome
.getController((ActionRequest) portletRequest);
return null;
}
/**
*
* @return
*/
public User getUser() {
try {
if (isServletRequest())
return portalPumaHome.getProfile().getCurrentUser();
else
return portletPumaHome.getProfile(portletRequest)
.getCurrentUser();
} catch (PumaException e) {
e.printStackTrace();
return null;
}
}
/**
*
* @return
*/
public boolean isUserAuthenticated() {
if (getUser() != null) {
return true;
}
return false;
}
public boolean attributeExists(String name, String value) {
try {
List list = getLocator().findUsersByAttribute(name, value);
if (list.size() > 0) {
return true;
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
return false;
}
/**
*
* @param name
* @return
*/
public String getUserAttribute(String name) {
assert name != null;
try {
List list = new ArrayList(1);
list.add(name);
Map map = getProfile().getAttributes(getUser(), list);
return (String) map.get(name);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
*
* @param name
* @param value
*/
public void setUserAttribute(String name, String value) {
setAttribute(getUser(), name, value);
}
/**
*
* @param principal
* @param name
* @param value
*/
private void setAttribute(Principal principal, String name, String value) {
Map attributes = new HashMap();
attributes.put(name, value);
try {
getController().setAttributes(principal, attributes);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
*
* @param distinguishedName
* @return
*/
public boolean isUserMemberOfGroup(String distinguishedName) {
try {
List groups = getLocator().findGroupsByPrincipal(getUser(), false);
Iterator groupIterator = groups.iterator();
List attributes = new ArrayList();
attributes.add(USER_GROUP_ATTRIBUTE);
while (groupIterator.hasNext()) {
Group group = (Group) groupIterator.next();
Map groupAttributes = getProfile().getAttributes(group,
attributes);
String groupName = (String) groupAttributes
.get(USER_GROUP_ATTRIBUTE);
List list = new ArrayList(1);
list.add(getUser());
if (distinguishedName.equals(groupName)) {
return true;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
}
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.portlet.ActionRequest;
import javax.portlet.PortletRequest;
import javax.servlet.ServletRequest;
import com.ibm.portal.portlet.service.PortletServiceHome;
import com.ibm.portal.portlet.service.PortletServiceUnavailableException;
import com.ibm.portal.um.Group;
import com.ibm.portal.um.Principal;
import com.ibm.portal.um.PumaController;
import com.ibm.portal.um.PumaHome;
import com.ibm.portal.um.PumaLocator;
import com.ibm.portal.um.PumaProfile;
import com.ibm.portal.um.User;
import com.ibm.portal.um.exceptions.PumaException;
import com.ibm.wps.logging.LogManager;
import com.ibm.wps.logging.Logger;
public class PumaUtil{
private static final Logger LOGGER = LogManager.getLogManager().getLogger(
PumaUtil.class);
/**
* The JNDI name of the portal PUMA SPI service.
*/
private static final String PORTAL_PUMA_SERVICE_JNDI_NAME = "portal:service/usermanagement/Puma";
/**
* The JNDI name of the portlet PUMA SPI service.
*/
private static final String PORTLET_PUMA_SERVICE_JNDI_NAME = "portletservice/com.ibm.portal.um.portletservice.PumaHome";
/**
* The portal puma service home object that is valid for the lifetime of the
* portal server.
*/
private static PumaHome portalPumaHome;
/**
* The portlet puma service home object that is valid for the lifetime of
* the portal server.
*/
private static com.ibm.portal.um.portletservice.PumaHome portletPumaHome;
static {
//If we are invoking in portal theme or in servlet
try {
Context context = new InitialContext();
portalPumaHome = (PumaHome) context
.lookup(PORTAL_PUMA_SERVICE_JNDI_NAME);
} catch (NamingException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
//If we are using it inside portal server
try {
Context context = new InitialContext();
PortletServiceHome portletServiceHome = (PortletServiceHome) context
.lookup("portletservice/com.ibm.portal.um.portletservice.PumaHome");
portletPumaHome = (com.ibm.portal.um.portletservice.PumaHome) portletServiceHome
.getPortletService(com.ibm.portal.um.portletservice.PumaHome.class);
} catch (NamingException e) {
e.printStackTrace();
throw new RuntimeException(e);
} catch (PortletServiceUnavailableException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
/**
* The current servlet request.
*/
private ServletRequest servletRequest;
/**
* The current portlet request.
*/
private PortletRequest portletRequest;
/**
*
* @param request
*/
private PumaUtil(ServletRequest request) {
servletRequest = request;
}
/**
*
* @param request
*/
private PumaUtil(PortletRequest request) {
portletRequest = request;
}
/**
*
* @return
*/
private boolean isServletRequest() {
return servletRequest != null;
}
/**
*
* @return
*/
private boolean isPortletRequest() {
return portletRequest != null;
}
/**
*
* @param request
* @return
*/
public static PumaUtil getInstance(ServletRequest request) {
return new PumaUtil(request);
}
/**
*
* @param request
* @return
*/
public static PumaUtil getInstance(PortletRequest request) {
return new PumaUtil(request);
}
/**
*
* @return
*/
public PumaProfile getProfile() {
if (isServletRequest())
return portalPumaHome.getProfile();
else
return portletPumaHome.getProfile(portletRequest);
}
/**
*
* @return
*/
public PumaLocator getLocator() {
if (isServletRequest())
return portalPumaHome.getLocator();
else
return portletPumaHome.getLocator(portletRequest);
}
/**
*
* @return
*/
public PumaController getController() {
if (isServletRequest())
return portalPumaHome.getController();
else if (portletRequest instanceof ActionRequest)
return portletPumaHome
.getController((ActionRequest) portletRequest);
return null;
}
/**
*
* @return
*/
public User getUser() {
try {
if (isServletRequest())
return portalPumaHome.getProfile().getCurrentUser();
else
return portletPumaHome.getProfile(portletRequest)
.getCurrentUser();
} catch (PumaException e) {
e.printStackTrace();
return null;
}
}
/**
*
* @return
*/
public boolean isUserAuthenticated() {
if (getUser() != null) {
return true;
}
return false;
}
public boolean attributeExists(String name, String value) {
try {
List list = getLocator().findUsersByAttribute(name, value);
if (list.size() > 0) {
return true;
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
return false;
}
/**
*
* @param name
* @return
*/
public String getUserAttribute(String name) {
assert name != null;
try {
List list = new ArrayList(1);
list.add(name);
Map map = getProfile().getAttributes(getUser(), list);
return (String) map.get(name);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
*
* @param name
* @param value
*/
public void setUserAttribute(String name, String value) {
setAttribute(getUser(), name, value);
}
/**
*
* @param principal
* @param name
* @param value
*/
private void setAttribute(Principal principal, String name, String value) {
Map attributes = new HashMap();
attributes.put(name, value);
try {
getController().setAttributes(principal, attributes);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
*
* @param distinguishedName
* @return
*/
public boolean isUserMemberOfGroup(String distinguishedName) {
try {
List groups = getLocator().findGroupsByPrincipal(getUser(), false);
Iterator groupIterator = groups.iterator();
List attributes = new ArrayList();
attributes.add(USER_GROUP_ATTRIBUTE);
while (groupIterator.hasNext()) {
Group group = (Group) groupIterator.next();
Map groupAttributes = getProfile().getAttributes(group,
attributes);
String groupName = (String) groupAttributes
.get(USER_GROUP_ATTRIBUTE);
List list = new ArrayList(1);
list.add(getUser());
if (distinguishedName.equals(groupName)) {
return true;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
}