Newer
Older
// Group groupAdmins.
if ((group.getGroupAdmins() != null) && (!group.getGroupAdmins().isEmpty()))
{
Element groupAdminsElement = new Element(GROUP_ADMINS);
for (Group groupMember : group.getGroupAdmins())
{
groupAdminsElement.addContent(getElement(groupMember, false));
}
groupElement.addContent(groupAdminsElement);
}
// Group userAdmins
if ((group.getUserAdmins() != null) && (!group.getUserAdmins().isEmpty()))
{
Element userAdminsElement = new Element(USER_ADMINS);
for (User userMember : group.getUserAdmins())
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
{
userAdminsElement.addContent(getElement(userMember));
}
groupElement.addContent(userAdminsElement);
}
}
return groupElement;
}
/**
* Get a JDOM element from a GroupProperty object.
*
* @param property The GroupProperty.
* @return A JDOM GroupProperty representation.
* @throws WriterException
*/
protected final Element getElement(GroupProperty property)
throws WriterException
{
if (property == null)
{
throw new WriterException("null GroupProperty");
}
Element propertyElement = new Element(PROPERTY);
propertyElement.setAttribute(KEY, property.getKey());
if (property.isReadOnly())
{
propertyElement.setAttribute(READ_ONLY, Boolean.TRUE.toString());
}
Object value = property.getValue();
if ((value instanceof String))
{
propertyElement.setAttribute(TYPE, STRING);
}
else if ((value instanceof Integer))
{
propertyElement.setAttribute(TYPE, INTEGER);
}
else
{
String error = "Unsupported value type: " +
value.getClass().getSimpleName();
throw new IllegalArgumentException(error);
}
propertyElement.setText(String.valueOf(property.getValue()));
return propertyElement;
}
private void setInternalID(User user, Element element)
throws ReaderException
{
Element uriElement = element.getChild(URI);
if (uriElement == null)
{
String error = "expected uri element not found in internalID element";
throw new ReaderException(error);
}
String text = uriElement.getText();
URI uri;
try
{
uri = new URI(text);
}
catch (URISyntaxException e)
{
throw new ReaderException("Invalid InternalID URI " + text, e);
}
InternalID internalID = new InternalID(uri);
setField(user, internalID, ID);
}
// set private field using reflection
private void setField(Object object, Object value, String name)
{
try
{
Field field = object.getClass().getDeclaredField(name);
field.setAccessible(true);
}
catch (NoSuchFieldException e)
{
final String error = object.getClass().getSimpleName() +
" field " + name + "not found";
throw new RuntimeException(error, e);
}
catch (IllegalAccessException e)
{
final String error = "unable to update " + name + " in " +
object.getClass().getSimpleName();
throw new RuntimeException(error, e);
}
}