/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.security.user; import java.util.List; import java.util.Set; import org.jdom.Document; import org.jdom.Element; import org.springframework.util.Assert; import com.enonic.cms.framework.util.JDOMUtil; import com.enonic.cms.core.AbstractPagedXmlCreator; import com.enonic.cms.core.security.group.GroupEntity; import com.enonic.cms.core.security.group.GroupXmlCreator; import com.enonic.cms.core.security.userstore.UserStoreEntity; public class UserXmlCreator extends AbstractPagedXmlCreator { private boolean includeUserFields = false; private boolean wrappUserFieldsInBlockElement = true; private boolean adminConsoleStyle = true; private final GroupXmlCreator groupXmlCreator; private final UserFieldsXmlCreator userFieldsXmlCreator = new UserFieldsXmlCreator(); public UserXmlCreator( final GroupXmlCreator groupXmlCreator ) { this.groupXmlCreator = groupXmlCreator; } public UserXmlCreator() { groupXmlCreator = new GroupXmlCreator(); groupXmlCreator.setAdminConsoleStyle( adminConsoleStyle ); } public Document createUsersDocument( final List<UserEntity> users, final boolean includeMemberships, final boolean normalizeGroups ) { final Document doc = new Document(); final Element usersEl = new Element( "users" ); usersEl.setAttribute( "count", String.valueOf( users.size() ) ); for ( final UserEntity user : users ) { usersEl.addContent( doCreateElement( user, includeMemberships, normalizeGroups ) ); } doc.setRootElement( usersEl ); return doc; } public Document createUsersDocument( final UserEntity user, final boolean includeMemberships, final boolean normalizeGroups ) { Assert.notNull( user, "user cannot be null" ); final Document doc = new Document(); final Element usersEl = new Element( "users" ); usersEl.addContent( doCreateElement( user, includeMemberships, normalizeGroups ) ); doc.setRootElement( usersEl ); return doc; } public Document createUserDocument( final UserEntity user, final boolean includeMemberships, final boolean normalizeGroups ) { return new Document( doCreateElement( user, includeMemberships, normalizeGroups ) ); } public Document createEmptyUserDocument() { final Element userEl = new Element( "user" ); return new Document( userEl ); } public Element createUserElement( final UserEntity user, final boolean includeMemberships ) { return doCreateElement( user, includeMemberships, false ); } private Element doCreateElement( final UserEntity user, final boolean includeMemberships, final boolean normalizeGroups ) { if ( adminConsoleStyle ) { return doCreateElementAdminConsoleStyle( user, includeMemberships, normalizeGroups ); } else { return doCreateElementPresentationStyle( user, includeMemberships, normalizeGroups ); } } private Element doCreateElementAdminConsoleStyle( final UserEntity user, final boolean includeMemberships, final boolean normalizeGroups ) { final Element userEl = new Element( "user" ); userEl.setAttribute( "key", user.getKey().toString() ); userEl.setAttribute( "deleted", user.isDeleted() ? "true" : "false" ); userEl.setAttribute( "builtIn", user.isBuiltIn() ? "true" : "false" ); if ( user.getUserStoreKey() != null ) { userEl.setAttribute( "userStoreKey", user.getUserStoreKey().toString() ); } if ( user.getUserGroupKey() != null ) { userEl.setAttribute( "groupKey", user.getUserGroupKey().toString() ); } JDOMUtil.createElement( userEl, "name", user.getName() ); JDOMUtil.createElement( userEl, "displayName", user.getDisplayName() ); JDOMUtil.createElement( userEl, "qualifiedName", resolveQualifiedNameAsString( user.getQualifiedName() ) ); JDOMUtil.createElement( userEl, "lastModified", user.getTimestamp().toString() ); JDOMUtil.createElement( userEl, "email", user.getEmail() ); if ( !includeUserFields ) { JDOMUtil.createElement( userEl, "photo", String.valueOf( user.getPhoto() != null ) ); } if ( includeMemberships ) { final Element memberOfElement = new Element( "memberOf" ); // certain special users (like admin, anonymous?) doesnt have a userGroup and dont have any memberships if ( user.hasUserGroup() ) { final Set<GroupEntity> memberships = normalizeGroups ? user.getAllMemberships() : user.getDirectMemberships(); memberOfElement.setAttribute( "count", String.valueOf( memberships.size() ) ); for ( final GroupEntity group : memberships ) { final Element groupEl = groupXmlCreator.createElement( group, false, false ); memberOfElement.addContent( groupEl ); } userEl.addContent( memberOfElement ); } } if ( includeUserFields ) { Element userFieldsRootEl; if ( wrappUserFieldsInBlockElement ) { userFieldsRootEl = userFieldsXmlCreator.createUserInfoElement( user ); userFieldsRootEl.setAttribute( "oid", "dummy" ); userEl.addContent( userFieldsRootEl ); } else { userFieldsXmlCreator.addUserInfoToElement( userEl, user.getUserFields(), false ); userFieldsRootEl = userEl; } userFieldsRootEl.addContent( 0, new Element( "email" ).setText( user.getEmail() ) ); userFieldsRootEl.addContent( 0, new Element( "fullname" ).setText( user.getDisplayName() ) ); userFieldsRootEl.addContent( 0, new Element( "uid" ).setText( user.getName() ) ); } return userEl; } private Element doCreateElementPresentationStyle( final UserEntity user, final boolean includeMemberships, final boolean normalizeGroups ) { final Element userEl = new Element( "user" ); userEl.setAttribute( "key", user.getKey().toString() ); userEl.setAttribute( "deleted", user.isDeleted() ? "true" : "false" ); userEl.setAttribute( "built-in", user.isBuiltIn() ? "true" : "false" ); userEl.setAttribute( "qualified-name", resolveQualifiedNameAsString( user.getQualifiedName() ) ); if ( user.getUserGroupKey() != null ) { userEl.setAttribute( "group-key", user.getUserGroupKey().toString() ); } if ( user.getUserStore() != null ) { UserStoreEntity userstore = user.getUserStore(); final Element userstoreEl = new Element( "userstore" ).setText( userstore.getName() ); userEl.addContent( userstoreEl ); } JDOMUtil.createElement( userEl, "name", user.getName() ); JDOMUtil.createElement( userEl, "display-name", user.getDisplayName() ); JDOMUtil.createElement( userEl, "last-modified", user.getTimestamp().toString() ); JDOMUtil.createElement( userEl, "email", user.getEmail() ); if ( !includeUserFields ) { JDOMUtil.createElement( userEl, "photo", Boolean.toString( user.hasPhoto() ) ); } if ( includeMemberships ) { final Element membershipsEl = new Element( "memberships" ); // certain special users (like admin, anonymous?) doesnt have a userGroup and dont have any memberships if ( user.hasUserGroup() ) { final Set<GroupEntity> memberships = normalizeGroups ? user.getAllMemberships() : user.getDirectMemberships(); membershipsEl.setAttribute( "count", String.valueOf( memberships.size() ) ); for ( final GroupEntity group : memberships ) { final Element groupEl = groupXmlCreator.createElement( group, false, false ); membershipsEl.addContent( groupEl ); } userEl.addContent( membershipsEl ); } } if ( includeUserFields ) { userFieldsXmlCreator.addUserInfoToElement( userEl, user.getUserFields(), false ); } return userEl; } private String resolveQualifiedNameAsString( QualifiedUsername qualifiedName ) { String qualifiedNameStr; if ( qualifiedName.hasUserStoreNameSet() ) { qualifiedNameStr = qualifiedName.getUserStoreName() + "\\" + qualifiedName.getUsername(); } else { qualifiedNameStr = qualifiedName.getUsername(); } return qualifiedNameStr; } @Override public Element createElement( final Object obj ) { return doCreateElement( (UserEntity) obj, false, false ); } @Override public String getRootName() { return "users"; } public void setIncludeUserFields( final boolean value ) { includeUserFields = value; } public void wrappUserFieldsInBlockElement( final boolean value ) { wrappUserFieldsInBlockElement = value; } public void setAdminConsoleStyle( boolean value ) { this.adminConsoleStyle = value; if ( groupXmlCreator != null ) { groupXmlCreator.setAdminConsoleStyle( value ); } } }