Does JIRA-API-Model support following object constellation (Dashboard -> Gadget -> Filter -> Query)?

JIRA Plugin Developer July 7, 2014

I want to get all gadgets in a particular dashboard and the filter in all gadgets and the query in the filter.

Does JIRA-API-Model support that way of accessing a query like shown below?

Dashboard -> Gadget -> Filter -> Query

Via PortletConfigurationManager I've already tried to get from my dashboard to its gadgets and from the gadgets to their filter.

But the only method when I get a particular PortletConfiguration is getGadgetUri() to get somehow to a gadget. It always leads me like the method's name already says to

rest/gadgets/1.0/g/com.atlassian.jira.gadgets:filter-results-gadget/gadgets/filter-results-gadget.xml

From this point I don't know how to go on in order to get to that filter that is saved in the gadget.

1 answer

1 accepted

0 votes
Answer accepted
JIRA Plugin Developer July 7, 2014

Ok, finally I found a solution how to resolve that Problem.

With the PortletPageService you can get the PortletConfigurations. Every PortletConfiguration in the PortletConfiguerartions allocates a Map with UserPrefs. And profoundly hidden in this Map, you can find the filterId as a String. With SearchRequestService you are able to find a filter by id.

Unfortunatley, there were no further detailed infos on the JIRA API when it comes to the getUserPrefs()-Method

http://goo.gl/e6dz4u

JIRA Plugin Developer July 7, 2014

Here is the method how you get all Queries from a Dashboard:

public List<Query> getAllQueriesFromDashboard(PortalPage dashboard)
   {
      PortalPageService pps = ComponentAccessor.getComponent(PortalPageService.class);
      SearchRequestService srs = ComponentAccessor.getComponent(SearchRequestService.class);
      Set<String> filterIds = new HashSet<String>();
      List<Query> queries = new ArrayList<Query>();
      
      // get dashboard by id
      List<List<PortletConfiguration>> portletConfigurations = pps.getPortletConfigurations(getJiraServiceContext(), dashboard.getId());        
      
      //get all gadgets
      for(int i = 0; i<portletConfigurations.size(); i++)
      {
         List<PortletConfiguration> lpc = portletConfigurations.get(i);
         for(int j = 0; j<lpc.size(); j++)
         {
            PortletConfiguration pc = lpc.get(j);
            
            Map<String, String> userPrefs = pc.getUserPrefs();

            for(Entry<String, String> x : userPrefs.entrySet())
            {            
               if(x.getKey().equalsIgnoreCase("filterId"))
               {
                  filterIds.add(x.getValue().replace("filter-", ""));     
               }
            }
         }
      }
      
      // get all filters by Id --> get all Queries
      Iterator<String> it = filterIds.iterator();
      while(it.hasNext())
      {
         Long id = Long.parseLong(it.next());
         SearchRequest sr = srs.getFilter(getJiraServiceContext(), id);
         Query q = sr.getQuery();
         queries.add(q);
      }
      
      return queries;
   }

Suggest an answer

Log in or Sign up to answer