%@page language="java"%>
<%@page contentType="text/html; charset=UTF-8" %>
<%@page import="org.dataone.service.types.v1.SubjectInfo"%>
<%@page import="org.dataone.client.v1.itk.D1Client"%>
<%@page import="org.dataone.service.types.v1.Group"%>
<%@page import="org.dataone.service.types.v1.Subject"%>
<%@page import="org.dataone.service.types.v1.Person"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.HashMap"%>
<%
// it will be either a subject or a groupName
boolean isGroup = false;
String subjectParam = request.getParameter("subject");
if (subjectParam == null || subjectParam.length() == 0) {
subjectParam = request.getParameter("groupName");
isGroup = true;
}
Subject subject = new Subject();
subject.setValue(subjectParam);
// look up the subjects
SubjectInfo subjectInfo = null;
try {
subjectInfo = D1Client.getCN().getSubjectInfo(null, subject);
} catch (Exception e) {
// ignore for now -- happens when account is not registered
%>
<%
return;
}
// the display names
Map displayNames = new HashMap();
if (subjectInfo != null && subjectInfo.getPersonList() != null) {
for (Person p: subjectInfo.getPersonList()) {
String displayName = p.getFamilyName();
if (p.getGivenNameList() != null && !p.getGivenNameList().isEmpty()) {
displayName = p.getGivenName(0) + " " + displayName;
}
displayName += " (" + p.getSubject().getValue() + ")";
displayNames.put(p.getSubject(), displayName);
}
}
if (subjectInfo != null && subjectInfo.getGroupList() != null) {
for (Group g: subjectInfo.getGroupList()) {
String displayName = g.getGroupName();
displayName += " (" + g.getSubject().getValue() + ")";
displayNames.put(g.getSubject(), displayName);
}
}
if (isGroup && subjectInfo != null && subjectInfo.getGroupList() != null) {
// include the Groups
Group group = null;
for (Group g: subjectInfo.getGroupList()) {
// this is the group we care about
if (g.getSubject().equals(subject)) {
group = g;
break;
}
}
%>
<%
for (Subject s: group.getHasMemberList()) {
// lookup the member's name
String memberName = displayNames.get(s);
%>
<%
}
}
// use the person
if (!isGroup && subjectInfo != null && subjectInfo.getPersonList() != null) {
// get the person we are talking about
Person person = null;
for (Person p: subjectInfo.getPersonList()) {
if (p.getSubject().equals(subject)) {
person = p;
break;
}
}
%>
<%
// include the groups they are a member of
for (Subject s: person.getIsMemberOfList()) {
// lookup the group's name
String groupName = displayNames.get(s);
%>
<%
}
}
%>