/******************************************************************************* * Copyright (c) 2010-2014 SAP AG and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * SAP AG - initial API and implementation *******************************************************************************/ package org.eclipse.skalli.model.ext.scrum.internal; import java.text.MessageFormat; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; import org.apache.commons.lang.StringUtils; import org.eclipse.skalli.commons.CollectionUtils; import org.eclipse.skalli.model.Member; import org.eclipse.skalli.model.Project; import org.eclipse.skalli.model.ext.scrum.ScrumProjectExt; import org.eclipse.skalli.services.role.RoleProviderBase; import org.osgi.service.component.ComponentConstants; import org.osgi.service.component.ComponentContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ScrumRoleProvider extends RoleProviderBase { private static final Logger LOG = LoggerFactory.getLogger(ScrumRoleProvider.class); private static final String ROLE_SM = "scrummaster"; //$NON-NLS-1$ private static final String ROLE_PO = "productowner"; //$NON-NLS-1$ protected void activate(ComponentContext context) { LOG.info(MessageFormat.format("[RoleService][scrum] {0} : activated", (String) context.getProperties().get(ComponentConstants.COMPONENT_NAME))); } protected void deactivate(ComponentContext context) { LOG.info(MessageFormat.format("[RoleService][scrum] {0} : deactivated", (String) context.getProperties().get(ComponentConstants.COMPONENT_NAME))); } private static final Set<String> SUPPORTED_ROLES = CollectionUtils.asSet(ROLE_SM, ROLE_PO); @Override public Set<String> getSupportedRoles() { return SUPPORTED_ROLES; } @Override public Map<String, SortedSet<Member>> getMembersByRole(Project project) { Map<String, SortedSet<Member>> ret = new HashMap<String, SortedSet<Member>>(); if (project != null) { ScrumProjectExt ext = project.getExtension(ScrumProjectExt.class); if (ext == null) { return Collections.emptyMap(); } ret.put(ROLE_SM, ext.getScrumMasters()); ret.put(ROLE_PO, ext.getProductOwners()); } return ret; } @Override public SortedSet<Member> getMembers(Project project) { TreeSet<Member> result = new TreeSet<Member>(); if (project != null) { ScrumProjectExt ext = project.getExtension(ScrumProjectExt.class); if (ext == null) { return result; } result.addAll(ext.getScrumMasters()); SortedSet<Member> set = ext.getProductOwners(); result.addAll(set); } return result; } @Override public boolean addMember(Project project, Member person, String role) { if (project == null || !SUPPORTED_ROLES.contains(role)) { return false; } if (project.isInherited(ScrumProjectExt.class)) { return false; } ScrumProjectExt ext = project.getExtension(ScrumProjectExt.class); if (ext == null) { ext = new ScrumProjectExt(); project.addExtension(ext); } if (StringUtils.equalsIgnoreCase(role, ROLE_SM)) { ext.addScrumMaster(person); } else { ext.addProductOwner(person); } return true; } }