001 package org.hackystat.projectbrowser.page.projectportfolio.detailspanel; 002 003 import org.apache.wicket.AttributeModifier; 004 import org.apache.wicket.markup.html.basic.Label; 005 import org.apache.wicket.markup.html.link.BookmarkablePageLink; 006 import org.apache.wicket.markup.html.link.Link; 007 import org.apache.wicket.markup.html.list.ListItem; 008 import org.apache.wicket.markup.html.list.ListView; 009 import org.apache.wicket.markup.html.panel.Panel; 010 import org.apache.wicket.model.Model; 011 import org.hackystat.projectbrowser.ProjectBrowserApplication; 012 import org.hackystat.projectbrowser.ProjectBrowserSession; 013 import org.hackystat.projectbrowser.imageurl.ImageUrl; 014 import org.hackystat.projectbrowser.page.projectportfolio.ProjectPortfolioPage; 015 import org.hackystat.projectbrowser.page.projectportfolio.ProjectPortfolioSession; 016 import org.hackystat.projectbrowser.page.projectportfolio.detailspanel.chart.MiniBarChart; 017 import org.hackystat.projectbrowser.page.telemetry.TelemetryPage; 018 import org.hackystat.sensorbase.resource.projects.jaxb.Project; 019 020 /** 021 * Wicket panel to display the detail of the selected projects. 022 * @author Shaoxuan Zhang 023 * 024 */ 025 public class ProjectPortfolioDetailsPanel extends Panel { 026 027 /** For serialization. */ 028 private static final long serialVersionUID = 1L; 029 /** The session that holds the status. */ 030 private ProjectPortfolioSession session = 031 ProjectBrowserSession.get().getProjectPortfolioSession(); 032 /** The model that holds the data. */ 033 private ProjectPortfolioDataModel dataModel = session.getDataModel(); 034 035 /** 036 * Create the Wicket component. 037 * @param id the wicket id. 038 */ 039 public ProjectPortfolioDetailsPanel(String id) { 040 super(id); 041 042 BookmarkablePageLink permalink = new BookmarkablePageLink("permalink", 043 ProjectPortfolioPage.class, session.getPageParameters()); 044 add(permalink); 045 046 Link sortProjectLink = new Link("sortProjectName") { 047 /** Support serialization. */ 048 private static final long serialVersionUID = -5801192573412127312L; 049 @Override 050 public void onClick() { 051 dataModel.sortProjectNames(); 052 } 053 054 }; 055 add(sortProjectLink); 056 057 ListView measureHeads = new ListView("measureHeads", dataModel.getEnabledMeasuresName()) { 058 /** Support serialization. */ 059 private static final long serialVersionUID = -6222175445067187421L; 060 061 @Override 062 protected void populateItem(final ListItem item) { 063 final String measureName = item.getModelObjectAsString(); 064 Link sortLink = new Link("sortLink") { 065 /** Support serialization. */ 066 private static final long serialVersionUID = 1217586293098377714L; 067 @Override 068 public void onClick() { 069 dataModel.sortTable(item.getIndex()); 070 } 071 }; 072 sortLink.add(new Label("measureName", measureName)); 073 item.add(sortLink); 074 } 075 }; 076 add(measureHeads); 077 078 ListView dateTable = new ListView("projectTable", dataModel.getSelectedProjects()) { 079 /** Support serialization. */ 080 public static final long serialVersionUID = 1L; 081 @Override 082 protected void populateItem(ListItem item) { 083 Project project = (Project)item.getModelObject(); 084 item.add(new Label("projectName", project.getName())); 085 item.add(new Label("members", String.valueOf(project.getMembers().getMember().size() + 1))); 086 087 ListView dateList = new ListView("measures", dataModel.getMeasuresCharts().get(project)) { 088 /** Support serialization. */ 089 public static final long serialVersionUID = 1L; 090 @Override 091 protected void populateItem(ListItem item) { 092 final MiniBarChart chart = (MiniBarChart)item.getModelObject(); 093 094 String value; 095 if (chart.getLatestValue() >= 0) { 096 value = String.valueOf(chart.getLatestValue()); 097 int i = value.indexOf('.'); 098 if (i > 0 && (i + 2) < value.length()) { 099 value = value.substring(0, i + 2); 100 } 101 } 102 else { 103 value = "N/A"; 104 } 105 106 Label valueLabel = new Label("value", value); 107 String colorString = "color:#" + chart.getValueColor(); 108 valueLabel.add(new AttributeModifier("style", true, new Model(colorString))); 109 item.add(valueLabel); 110 111 Link chartLink; 112 if (((ProjectBrowserApplication)getApplication()).isLoggingUserUsage()) { 113 //Need to use Link to log because BookmarkablePageLink does not allow to override the 114 //onClick method. 115 chartLink = new Link("chartLink") { 116 /** Support serialization. */ 117 private static final long serialVersionUID = 32587804920775165L; 118 @Override 119 public void onClick() { 120 ProjectBrowserSession.get(). 121 logUsage("PORTFOLIO {invoke telemtry}"); 122 this.setResponsePage(TelemetryPage.class, chart.getTelemetryPageParameters()); 123 } 124 }; 125 } 126 else { 127 chartLink = new BookmarkablePageLink("chartLink", 128 TelemetryPage.class, chart.getTelemetryPageParameters()) ; 129 } 130 chartLink.add(new ImageUrl("chart", chart.getImageUrl())); 131 item.add(chartLink); 132 } 133 }; 134 item.add(dateList); 135 } 136 }; 137 add(dateTable); 138 139 140 } 141 142 /** 143 * Show the panel only when the data model is not empty and no loadin is in process. 144 * @return true when this panel should be shown. 145 */ 146 @Override 147 public boolean isVisible() { 148 return !session.getDataModel().isEmpty() && session.getDataModel().isComplete(); 149 } 150 151 }