Developer's Guide > Developer's Guide > Codebeamer Development > Codebeamer API - Extension and Plugins Guide > Listener API > Add Users as Project Administrators to Each Newly Created Project
Add Users as Project Administrators to Each Newly Created Project
This is a fully fledge example, of how to use the Listener API, to add users as project administrators to each newly created project.




package com.intland.codebeamer.event.impl.sample;



import java.util.Arrays;

import java.util.Collection;

import java.util.Collections;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import java.util.Set;

import java.util.StringTokenizer;



import org.apache.commons.lang3.StringUtils;

import org.apache.log4j.Logger;

import org.springframework.beans.factory.annotation.Autowired;



import com.intland.codebeamer.event.BaseEvent;

import com.intland.codebeamer.event.ProjectListener;

import com.intland.codebeamer.manager.ProjectManager;

import com.intland.codebeamer.persistence.dao.RoleDao;

import com.intland.codebeamer.persistence.dao.UserDao;

import com.intland.codebeamer.persistence.dto.ProjectDto;

import com.intland.codebeamer.persistence.dto.RoleDto;

import com.intland.codebeamer.persistence.dto.UserDto;



/**

* Assigns a list of users with {@link RoleDto#PROJECT_ADMIN} to each newly created project.

*/

public class AssignAdminAccountToNewProjectListener implements ProjectListener {

protected static final Logger log = Logger.getLogger(AssignAdminAccountToNewProjectListener.class);



@Autowired

private RoleDao roleDao;

@Autowired

private UserDao userDao;

@Autowired

private ProjectManager projectManager;



private List<String> userNamesOrIds;



public String getAccountIds() {

return userNamesOrIds != null && userNamesOrIds.size() > 0 ? StringUtils.join(userNamesOrIds, "; ") : null;

}



public void setAccountIds(String accountIds) {

this.userNamesOrIds = (accountIds = StringUtils.trimToNull(accountIds)) != null ? Arrays.asList(StringUtils.split(accountIds, "; ")) : null;

}



@Override

public void projectCreated(BaseEvent<ProjectDto, Void, Void> event) {

if (userNamesOrIds != null && userNamesOrIds.size() > 0 && !event.isPreEvent()) {

RoleDto projectAdminRole = roleDao.findByName(RoleDto.PROJECT_ADMIN);

Set<RoleDto> projectAdminRoles = Collections.singleton(projectAdminRole);

Map<UserDto,Collection<?>> membersAndRoles = new HashMap<UserDto,Collection<?>>(userNamesOrIds.size());



for (String userNameOrId : userNamesOrIds) {

UserDto account = userDao.findByNameOrId(userNameOrId);

if (account != null) {

membersAndRoles.put(account, projectAdminRoles);

} else {

log.warn("Cannot find user: " + userNameOrId);

}

}



if (membersAndRoles.size() > 0) {

UserDto user = event.getUser();

ProjectDto project = event.getSource();



try {

projectManager.setProjectMemberRoles(user, project, membersAndRoles, null);

} catch (Exception e) {

log.warn("Assigning project admin failed", e);

}

}

}

}



}
Since this Listener needs extra configuration, it cannot be automatically deployed by adding a @Component annotation.
Instead you must add an appropriate <bean> configuration to the following :
~/CB-../tomcat/webapps/cb/WEB-INF/classes/my-ApplicationContext.xml, e.g.


<bean id="assignAdminAccountToNewProjectListener" class="com.intland.codebeamer.event.impl.sample.AssignAdminAccountToNewProjectListener">

<property name="accountId" value="1;44"/>

</bean>

Was this helpful?