Allow the JIRA-Project-Config-Plugin to use extended components

XMLWordPrintable

      In order to complete the migration of Minyaa against JIRA 4.4, I had to perform a patch in jira-project-config-plugin in order to let it using the component extended by Minyaa plugins.

      Minyaa comes with different extension of JIRA Components. 2 of them are required to be able to access to project configuration :

      • NotificationTypeManager in order to provide custom Notification Type (See here)
      • SchemePermissions in order to provide custom Permission (See here)

      Applied Patch are in :

      • com.atlassian.jira.projectconfig.contextproviders.ProjectNotificationContextProvider in order to retrieve the NotificationTypeManager on call and not on Class load.
          private NotificationTypeManager notificationTypeManager;
          ...
          public  NotificationTypeManager getNotificationTypeManager() {
         	 notificationTypeManager = ComponentAccessor.getComponentOfType(NotificationTypeManager.class);
         	 return notificationTypeManager;
          }
          ...
          private List<Notification> getNotifications(GenericValue scheme)
          {
              Collection<EventType> eventTypes = getEventTypes();
      
              List<Notification> notificationList = new ArrayList<Notification>(eventTypes.size());
              for (EventType eventType : eventTypes)
              {
                  final List<GenericValue> entities = getEntities(scheme, eventType.getId());
                  final List<String> entityDisplays = new ArrayList<String>(entities.size());
                  for (GenericValue entity : entities)
                  {
                      final String typeStr = entity.getString(ENTITY_TYPE);
                      final NotificationType type = getNotificationTypeManager().getNotificationType(typeStr);
                      final String paramater = entity.getString(ENTITY_PARAMETER);
                      final StringBuilder sb = new StringBuilder(type.getDisplayName());
                      if (StringUtils.isNotBlank(paramater))
                      {
                          sb.append(" (").append(type.getArgumentDisplay(paramater)).append(")");
                      }
                      entityDisplays.add(sb.toString());
                  }
      
                  Collections.sort(entityDisplays);
                  notificationList.add(new Notification(eventType.getId(), eventType.getName(), eventType.getDescription(), entityDisplays));
              }
      
              // EventTypes are pre-sorted by the EventTypeManager, so we don't try and resort them here as that would be just wrong.
              return  notificationList;
          }
      
      • com.atlassian.jira.projectconfig.contextproviders.ProjectPermissionContextProvider in order to retrieve the SchemePermissions on call and not on Class load.
            private SchemePermissions schemePermissions;
            ...
            public SchemePermissions getSchemePermissions() {
           	 schemePermissions = ComponentAccessor.getComponentOfType(SchemePermissions.class);
           	 return schemePermissions;
            }
        
            public Map<String, Object> getContextMap(Map<String, Object> context)
            {
                ...
                schemePermissions = getSchemePermissions();
        
                permissionGroups.add(new SimplePermissionGroup("project", i18nHelper.getText("admin.permission.group.project.permissions"), getPermission(i18nHelper, scheme, schemePermissions.getProjectPermissions().values())));
                ...
                permissionGroups.add(new SimplePermissionGroup("timeTracking", i18nHelper.getText("admin.permission.group.time.tracking.permissions"), getPermission(i18nHelper, scheme, schemePermissions.getTimeTrackingPermissions().values())));
        
                contextMap.add(CONTEXT_PERMISSION_GROUPS, permissionGroups);
        
                return contextMap.toMap();
            }
        
        

      Thanks by advance
      Vincent

            Assignee:
            Unassigned
            Reporter:
            Vincent Thoulé [Alkaes]
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: