/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.portal.datasource.context; import java.util.Set; import org.jdom.Document; import org.jdom.Element; import com.enonic.cms.core.security.group.GroupEntity; import com.enonic.cms.core.security.user.UserEntity; import com.enonic.cms.core.security.user.UserFieldsXmlCreator; import com.enonic.cms.core.security.userstore.UserStoreEntity; import com.enonic.cms.store.dao.GroupDao; public final class UserContextXmlCreator { private GroupDao groupDao; private final UserFieldsXmlCreator userFieldsXmlCreator = new UserFieldsXmlCreator(); public UserContextXmlCreator( final GroupDao groupDao ) { this.groupDao = groupDao; } public Document createUserDocument( final UserEntity user ) { final Element userEl = doCreateUserElement( user ); return new Document( userEl ); } public Element createUserElement( final UserEntity user ) { return doCreateUserElement( user ); } private Element doCreateUserElement( final UserEntity user ) { final Element userEl = new Element( "user" ); userEl.setAttribute( "key", user.getKey().toString() ); userEl.setAttribute( "qualified-name", user.getQualifiedName().toString() ); userEl.setAttribute( "built-in", Boolean.toString( user.isBuiltIn() ) ); if ( user.getUserStore() != null ) { final UserStoreEntity userstore = user.getUserStore(); final Element userstoreEl = new Element( "userstore" ).setText( userstore.getName() ); userEl.addContent( userstoreEl ); } userEl.addContent( new Element( "name" ).setText( user.getName() ) ); userEl.addContent( new Element( "display-name" ).setText( user.getDisplayName() ) ); userEl.addContent( new Element( "email" ).setText( user.getEmail() ) ); userFieldsXmlCreator.addUserInfoToElement( userEl, user.getUserFields(), false ); userEl.addContent( createMembershipsElement( user ) ); return userEl; } private Element createMembershipsElement( final UserEntity user ) { final Element membershipsEl = new Element( "memberships" ); final GroupEntity anonymousGroup = groupDao.findBuiltInAnonymous(); membershipsEl.addContent( createGroupElement( anonymousGroup, true ) ); if ( user.getUserStoreKey() != null ) { final GroupEntity authenticatedUsers = groupDao.findBuiltInAuthenticatedUsers( user.getUserStoreKey() ); membershipsEl.addContent( createGroupElement( authenticatedUsers, true ) ); } final Set<GroupEntity> directMemberships = user.getDirectMemberships(); for ( final GroupEntity group : user.getAllMemberships() ) { final boolean directMember = directMemberships.contains( group ); membershipsEl.addContent( createGroupElement( group, directMember ) ); } return membershipsEl; } private Element createGroupElement( final GroupEntity group, final boolean directMember ) { final Element groupEl = new Element( "group" ); groupEl.setAttribute( "key", group.getGroupKey().toString() ); groupEl.setAttribute( "built-in", Boolean.toString( group.isBuiltIn() ) ); groupEl.setAttribute( "direct-membership", Boolean.toString( directMember ) ); groupEl.addContent( new Element( "name" ).setText( group.getName() ) ); groupEl.addContent( new Element( "restricted" ).setText( Boolean.toString( group.isRestricted() ) ) ); return groupEl; } }