001    package org.hackystat.projectbrowser.page.dailyprojectdata.issue;
002    
003    import java.util.ArrayList;
004    import java.util.List;
005    import org.apache.wicket.markup.html.basic.Label;
006    import org.apache.wicket.markup.html.list.ListItem;
007    import org.apache.wicket.markup.html.list.ListView;
008    import org.apache.wicket.markup.html.panel.Panel;
009    import org.apache.wicket.model.PropertyModel;
010    import org.hackystat.projectbrowser.ProjectBrowserSession;
011    import org.hackystat.projectbrowser.page.dailyprojectdata.DailyProjectDataSession;
012    
013    
014    /**
015     * Data panel for Commit.
016     * 
017     * @author Philip Johnson
018     */
019    public class IssuePanel extends Panel {
020    
021      /** Support serialization. */
022      private static final long serialVersionUID = 1L;
023    
024      /**
025       * Create this panel, providing the appropriate wicket ID.
026       * 
027       * @param id The wicket component id.
028       */
029      public IssuePanel(String id) {
030        super(id);
031        DailyProjectDataSession session = ProjectBrowserSession.get().getDailyProjectDataSession();
032        // prepare the data model.
033        IssueDataModel dataModel = session.getIssueDataModel();
034        final List<String> openHeaders = new ArrayList<String>();
035        openHeaders.addAll(dataModel.getOpenIssueStatus());
036        ListView openStatusHeaders = new ListView("issueOpenStatusHeads", openHeaders) {
037          /** Support serialization. */
038          private static final long serialVersionUID = 1L;
039          @Override
040          protected void populateItem(ListItem item) {
041            final String statusName = item.getModelObjectAsString();
042            item.add(new Label("issueStatusName", statusName));
043          }
044        };
045        add(openStatusHeaders);
046        
047        final List<String> closedHeaders = new ArrayList<String>();
048        closedHeaders.addAll(dataModel.getClosedIssueStatus());
049        ListView closedStatusHeaders = new ListView("issueClosedStatusHeads", closedHeaders) {
050          /** Support serialization. */
051          private static final long serialVersionUID = 1L;
052          @Override
053          protected void populateItem(ListItem item) {
054            final String statusName = item.getModelObjectAsString();
055            item.add(new Label("issueStatusName", statusName));
056          }
057        };
058        add(closedStatusHeaders);
059        
060        ListView datalistView = new ListView("issueDataList", new PropertyModel(dataModel,
061            "issueDataList")) {
062          /** Support serialization. */
063          private static final long serialVersionUID = 1L;
064    
065          @Override
066          protected void populateItem(ListItem item) {
067            IssueDpdData data = (IssueDpdData) item.getModelObject();
068            item.add(new Label("project", data.getProject().getName()));
069            List<String> openIssueDataList = new ArrayList<String>();
070            for (String status : openHeaders) {
071              Integer value = data.getIssueStatusCount().get(status);
072              if (value == null) {
073                value = 0;
074              }
075              openIssueDataList.add(value.toString());
076            }
077            ListView openIssueDataListView = new ListView("openIssueDataList", openIssueDataList) {
078              /** Support serialization. */
079              private static final long serialVersionUID = 1L;
080              @Override
081              protected void populateItem(ListItem item) {
082                final String statusName = item.getModelObjectAsString();
083                item.add(new Label("data", statusName));
084              }
085            };
086            item.add(openIssueDataListView);
087            item.add(new Label("totalOpen", String.valueOf(data.getOpenIssues())));
088            List<String> closedIssueDataList = new ArrayList<String>();
089            for (String status : closedHeaders) {
090              Integer value = data.getIssueStatusCount().get(status);
091              if (value == null) {
092                value = 0;
093              }
094              openIssueDataList.add(value.toString());
095            }
096            ListView closedIssueDataListView = 
097                new ListView("closedIssueDataList", closedIssueDataList) {
098              /** Support serialization. */
099              private static final long serialVersionUID = 1L;
100              @Override
101              protected void populateItem(ListItem item) {
102                final String statusName = item.getModelObjectAsString();
103                item.add(new Label("data", statusName));
104              }
105            };
106            item.add(closedIssueDataListView);
107            item.add(new Label("totalClosed", String.valueOf(data.getClosedIssues())));
108          }
109        };
110        add(datalistView);
111      }
112    
113      /**
114       * Returns true if this panel should be displayed.  
115       * The panel should be displayed if its corresponding data model has information.
116       * @return True if this panel should be displayed. 
117       */
118      @Override
119      public boolean isVisible() {
120        DailyProjectDataSession session = ProjectBrowserSession.get().getDailyProjectDataSession();
121        return !session.getIssueDataModel().isEmpty(); 
122      }
123    }