Uploaded image for project: 'Jira Data Center'
  1. Jira Data Center
  2. JRASERVER-25603

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

    XMLWordPrintable

Details

    • We collect Jira feedback from various sources, and we evaluate what we've collected when planning our product roadmap. To understand how this piece of feedback will be reviewed, see our Implementation of New Features Policy.

    Description

      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

      Attachments

        Activity

          People

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

            Dates

              Created:
              Updated:
              Resolved: