+ * Loads the properties of the given group.
+ *
+ * @param group
+ * The group to load the properties for
+ * @return The group with its properties loaded
+ * @throws DatabaseException
+ * if a database error occurs
+ */
+ public Group loadGroupProperties(Group group) throws DatabaseException {
+ return loadProperties(group, "GROUP_PROPERTIES", "GROUP_ID");
+ }
+
+ /**
+ * Loads the properties of the given groups.
+ *
+ * @param groups
+ * The groups to load the properties for
+ * @return The groups with their properties loaded
+ * @throws DatabaseException
+ * if a database error occurs
+ */
+ public Collection<Group> loadGroupProperties(Collection<Group> groups) throws DatabaseException {
+ for (Group group : groups) {
+ loadGroupProperties(group);
+ }
+ return groups;
+ }
+
+ /**
+ * Creates a group with the given name.
+ *
+ * @param name
+ * The name of the new group
+ * @return The new group
+ * @throws DatabaseException
+ * if a database error occurs
+ */
+ public Group createGroup(String name) throws DatabaseException {
+ Query query = new Query(Type.INSERT, "GROUPS");
+ String id = UUID.randomUUID().toString();
+ query.addValueField(new ValueField("ID", new StringParameter(id)));
+ query.addValueField(new ValueField("NAME", new StringParameter(name)));
+ database.insert(query);
+ return getGroupById(id);
+ }
+
+ /**
+ * Saves the given group.
+ *
+ * @param group
+ * The group to save
+ * @throws DatabaseException
+ * if a database error occurs
+ */
+ public void saveGroup(Group group) throws DatabaseException {
+ Query query = new Query(Type.UPDATE, "GROUPS");
+ query.addValueField(new ValueField("NAME", new StringParameter(group.getName())));
+ query.addWhereClause(new ValueFieldWhereClause(new ValueField("ID", new StringParameter(group.getId()))));
+ database.update(query);
+ /* save properties. */
+ saveGroupProperties(group);
+ }
+
+ /**
+ * Saves the properties of the given group.
+ *
+ * @param group
+ * The group whose properties to save
+ * @throws DatabaseException
+ * if a database error occurs
+ */
+ public void saveGroupProperties(Group group) throws DatabaseException {
+ saveProperties(group.getProperties(), "GROUP_PROPERTIES", "GROUP_ID", group.getId());
+ }
+
+ /**