View Javadoc

1   package com.atlassian.jira.project.impl;
2   
3   import java.util.HashMap;
4   import java.util.Iterator;
5   import java.util.Map;
6   
7   import webwork.action.ServletActionContext;
8   
9   import com.atlassian.jira.plugin.webfragment.JiraWebInterfaceManager;
10  import com.atlassian.jira.plugin.webfragment.model.JiraHelper;
11  import com.atlassian.jira.project.AAdminProjectManager;
12  import com.atlassian.jira.project.AdminProjectManager;
13  import com.atlassian.jira.project.AdminProjectManagerDirectory;
14  import com.atlassian.jira.project.Project;
15  import com.atlassian.jira.project.ProjectManager;
16  import com.atlassian.plugin.web.Condition;
17  
18  /**
19   * @FQCN : com.atlassian.jira.project.impl.DefaultAdminProjectManagerDirectory
20   * @description : DefaultAdminProjectManagerDirectory
21   * @author Kaamelot
22   * @since 3.x 
23   */
24  public class DefaultAdminProjectManagerDirectory implements AdminProjectManagerDirectory {
25  
26  	private static Map adminProjectManagers = new HashMap(); 
27  	private static Map adminProjectManagersByProject = new HashMap(); 
28  	protected ProjectManager projectManager;
29  	
30  	public DefaultAdminProjectManagerDirectory(ProjectManager _projectManager) {
31  		projectManager = _projectManager;
32  	}
33  
34  	public Map addAdminProjectManager(AAdminProjectManager _adminProjectManager) {
35  		getAdminProjectManagers().put(_adminProjectManager.getId(), _adminProjectManager);
36  		return getAdminProjectManagers();
37  	}
38  	
39  	public Map getAdminProjectManagers() {
40  		return adminProjectManagers;
41  	}
42  	
43  	/**
44  	 * @param _apmKey Key identifying the AdminProjectManager (its FQCN)
45  	 * @return AdminProjectManager identified by its Key 
46  	 */
47  	public AdminProjectManager getAdminProjectManager(String _apmKey) {
48  		AdminProjectManager adminProjectManager = null;
49  		if (!adminProjectManagers.isEmpty()) {
50  			adminProjectManager = (AdminProjectManager)adminProjectManagers.get(_apmKey);
51  		}
52  		return adminProjectManager;
53  	}
54  	
55  	/**
56  	 * @param _projectId Project Id.
57  	 * @return AdminProjectManager to use with the identified Project depending on its internal default condition
58  	 */
59  	public AdminProjectManager getDefaultAdminProjectManager(Long _projectId) {
60  		AdminProjectManager adminProjectManager = null; 
61  		Project project = projectManager.getProjectObj(_projectId);
62  //		User user = authenticationContext.getUser();
63  		for (Iterator iterator = adminProjectManagers.values().iterator(); iterator.hasNext() && adminProjectManager == null;) {
64  			AdminProjectManager apm = (AdminProjectManager) iterator.next();
65  			Condition condition = apm.getDefaultActivationCondition(); 
66  			if (condition != null) {
67  				Map context = new HashMap();
68  				JiraHelper jh = new JiraHelper(ServletActionContext.getRequest(),project.getGenericValue());
69  //				context.put(JiraWebInterfaceManager.CONTEXT_KEY_USER, user);
70  				context.put(JiraWebInterfaceManager.CONTEXT_KEY_HELPER, jh);
71  				if (condition.shouldDisplay(context)) {
72  					adminProjectManager = apm;
73  				}
74  			}
75  		}
76  		return adminProjectManager;
77  	}
78  	
79  	/**
80  	 * @param _projectId Project Id.
81  	 * @return AdminProjectManager associated to the identified Project
82  	 */
83  	public AdminProjectManager getAdminProjectManagerByProject(Long _projectId) {
84  		AdminProjectManager adminProjectManager = (AdminProjectManager)adminProjectManagersByProject.get(_projectId);
85  		if (adminProjectManager == null) {
86  			adminProjectManager = getDefaultAdminProjectManager(_projectId);
87  			setAdminProjectManagerByProject(_projectId, adminProjectManager);
88  		}
89  		return adminProjectManager;
90  	}
91  
92  	public void setAdminProjectManagerByProject(Long _id, AdminProjectManager adminProjectManager) {
93  		adminProjectManagersByProject.put(_id, adminProjectManager);
94  	}
95  
96  }