Skip to content
AbstractReaderWriter.java 36.5 KiB
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())
                {
                    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";
        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)
    {
            Field field = object.getClass().getDeclaredField(name);
            field.set(object, value);
            final String error = object.getClass().getSimpleName() +
                                 " field " + name + "not found";
            throw new RuntimeException(error, e);
            final String error = "unable to update " + name + " in " +
                                 object.getClass().getSimpleName();
            throw new RuntimeException(error, e);