Coverage Report - org.kuali.student.core.comments.ui.client.widgets.decisiontool.DecisionPanel
 
Classes in this File Line Coverage Branch Coverage Complexity
DecisionPanel
0%
0/132
0%
0/26
1.333
DecisionPanel$1
0%
0/3
N/A
1.333
DecisionPanel$2
0%
0/5
0%
0/4
1.333
DecisionPanel$3
0%
0/3
N/A
1.333
DecisionPanel$4
0%
0/11
N/A
1.333
DecisionPanel$RationaleRow
0%
0/8
N/A
1.333
FieldAscendingRowComparator
0%
0/7
N/A
1.333
FieldDescendingRowComparator
0%
0/7
N/A
1.333
 
 1  
 package org.kuali.student.core.comments.ui.client.widgets.decisiontool;
 2  
 
 3  
 import java.text.SimpleDateFormat;
 4  
 import java.util.ArrayList;
 5  
 import java.util.List;
 6  
 import java.util.Map;
 7  
 
 8  
 import org.kuali.student.common.ui.client.application.Application;
 9  
 import org.kuali.student.common.ui.client.application.KSAsyncCallback;
 10  
 import org.kuali.student.common.ui.client.configurable.mvc.HasReferenceId;
 11  
 import org.kuali.student.common.ui.client.configurable.mvc.SectionTitle;
 12  
 import org.kuali.student.common.ui.client.configurable.mvc.ToolView;
 13  
 import org.kuali.student.common.ui.client.mvc.Callback;
 14  
 import org.kuali.student.common.ui.client.mvc.Controller;
 15  
 import org.kuali.student.common.ui.client.mvc.ModelRequestCallback;
 16  
 import org.kuali.student.common.ui.client.mvc.dto.ReferenceModel;
 17  
 import org.kuali.student.common.ui.client.theme.Theme;
 18  
 import org.kuali.student.common.ui.client.widgets.KSButton;
 19  
 import org.kuali.student.common.ui.client.widgets.KSLightBox;
 20  
 import org.kuali.student.common.ui.client.widgets.layout.VerticalFlowPanel;
 21  
 import org.kuali.student.common.ui.client.widgets.searchtable.ResultRow;
 22  
 import org.kuali.student.common.ui.client.widgets.table.scroll.Column;
 23  
 import org.kuali.student.common.ui.client.widgets.table.scroll.DefaultTableModel;
 24  
 import org.kuali.student.common.ui.client.widgets.table.scroll.Row;
 25  
 import org.kuali.student.common.ui.client.widgets.table.scroll.RowComparator;
 26  
 import org.kuali.student.common.ui.client.widgets.table.scroll.Table;
 27  
 import org.kuali.student.core.comment.dto.CommentInfo;
 28  
 import org.kuali.student.core.comments.ui.client.service.CommentRpcService;
 29  
 import org.kuali.student.core.comments.ui.client.service.CommentRpcServiceAsync;
 30  
 import org.kuali.student.core.organization.ui.client.mvc.model.MembershipInfo;
 31  
 import org.kuali.student.core.organization.ui.client.service.OrgRpcService;
 32  
 import org.kuali.student.core.organization.ui.client.service.OrgRpcServiceAsync;
 33  
 import org.kuali.student.core.workflow.ui.client.widgets.WorkflowUtilities.DecisionRationaleDetail;
 34  
 
 35  
 import com.google.gwt.core.client.GWT;
 36  
 import com.google.gwt.event.dom.client.ClickEvent;
 37  
 import com.google.gwt.event.dom.client.ClickHandler;
 38  
 import com.google.gwt.user.client.Window;
 39  
 import com.google.gwt.user.client.ui.Image;
 40  
 import com.google.gwt.user.client.ui.VerticalPanel;
 41  
 import com.google.gwt.user.client.ui.Widget;
 42  
 
 43  0
 public class DecisionPanel implements HasReferenceId, ToolView {
 44  
 
 45  0
         private CommentRpcServiceAsync commentServiceAsync = GWT
 46  
                         .create(CommentRpcService.class);
 47  0
         private OrgRpcServiceAsync orgProposalRpcServiceAsync = GWT
 48  
                         .create(OrgRpcService.class);
 49  
         private String referenceId;
 50  
         private String referenceTypeKey;
 51  
         private String referenceType;
 52  
         private String referenceState;
 53  
         private Map referenceAttributes;
 54  
         private KSLightBox commentLightBox;
 55  
         private VerticalFlowPanel contentPanel;
 56  
         private VerticalPanel titlePanel;
 57  
         private VerticalPanel scrollPanel;
 58  
         private SectionTitle title;
 59  
         private SectionTitle proposalNameHeader;
 60  
         private Table table;
 61  
         private Controller controller;
 62  
         private Enum<?> viewEnum;
 63  
         private String viewName; // View name is being used as menu item label
 64  
         private String decisionTypeKey;
 65  
         private ArrayList<String> personIds;
 66  
 
 67  
         private DefaultTableModel tableModel;
 68  
 
 69  
         public DecisionPanel(Enum<?> viewEnum, String viewName,
 70  0
                         String decisionTypeKey) {
 71  0
                 this.viewName = viewName;
 72  0
                 this.viewEnum = viewEnum;
 73  0
                 this.decisionTypeKey = decisionTypeKey;
 74  0
                 init();
 75  0
         }
 76  
 
 77  
         private void init() {
 78  0
                 KSButton closeActionButton = new KSButton(getMessage("wrapperPanelClose"));
 79  0
                 closeActionButton.addClickHandler(new ClickHandler() {
 80  
                         public void onClick(ClickEvent event) {
 81  0
                                 commentLightBox.hide();
 82  0
                         }
 83  
                 });
 84  0
                 if (commentLightBox == null) {
 85  0
                         commentLightBox = new KSLightBox("Proposal Decisions");
 86  0
                         commentLightBox.addButton(closeActionButton);
 87  
                 }
 88  0
                 scrollPanel = new VerticalPanel();
 89  0
                 contentPanel = new VerticalFlowPanel();
 90  
                 //titlePanel = new VerticalPanel();
 91  
                 // contentPanel.add(htmlLabel);
 92  0
                 table = new Table();
 93  0
                 table.getScrollPanel().setHeight("400px");
 94  0
                 table.setTableModel(tableModel);
 95  0
                 scrollPanel.add(table);
 96  
                 
 97  
                 //contentPanel.add(titlePanel);
 98  0
                 contentPanel.add(scrollPanel);
 99  
                 // commentLightBox.setWidget(titlePanel);
 100  0
                 commentLightBox.setWidget(contentPanel);
 101  0
                 commentLightBox.setMaxHeight(600);
 102  
 
 103  0
         }
 104  
 
 105  
         private void referesh() {
 106  0
                 contentPanel.clear();
 107  0
                 init();
 108  0
                 StringBuilder titleTextSb = new StringBuilder();
 109  0
                 titleTextSb.append(referenceAttributes.get("name"));
 110  
 /*                proposalNameHeader = SectionTitle.generateH3Title(titleTextSb
 111  
                                 .toString());
 112  
                 titlePanel.add(proposalNameHeader);
 113  
                 title = SectionTitle.generateH1Title("Proposal Decisions");
 114  
                 title.addStyleName("ks-layout-header");
 115  
                 titlePanel.add(title);*/
 116  0
                 getDecisions();
 117  0
         }
 118  
 
 119  
         private void getDecisions() {
 120  
                 try {
 121  0
                         commentServiceAsync.getComments(referenceId, referenceTypeKey,
 122  0
                                         new KSAsyncCallback<List<CommentInfo>>() {
 123  
 
 124  
                                                 @Override
 125  
                                                 public void onSuccess(final List<CommentInfo> result) {
 126  0
                                                         if(result==null||result.isEmpty()){
 127  0
                                                                 initializeDecisionTable();
 128  
                                                                 
 129  
                                                         }
 130  
                                                         else{
 131  0
                                                                 getPersonNames(result);
 132  
                                                         }
 133  
 
 134  0
                                                 }
 135  
 
 136  
                                         });
 137  0
                 } catch (Exception e) {
 138  0
                         Window.alert("Failed to refresh Comments");
 139  0
                         GWT.log("refresh Comments Failed", e);
 140  0
                 }
 141  0
         }
 142  
 
 143  
         private void getPersonNames(final List<CommentInfo> comments) {
 144  0
                 personIds = new ArrayList<String>();
 145  0
                 for (CommentInfo comment : comments) {
 146  0
                         if(comment.getMetaInfo().getCreateId()!=null){
 147  0
                                 personIds.add(comment.getMetaInfo().getCreateId());
 148  
                         }
 149  
                         else{
 150  0
                                 personIds.add("");
 151  
                         }
 152  
                 }
 153  
 
 154  0
                 orgProposalRpcServiceAsync.getNamesForPersonIds(personIds,
 155  0
                                 new KSAsyncCallback<Map<String, MembershipInfo>>() {
 156  
 
 157  
                                         @Override
 158  
                                         public void onSuccess(Map<String, MembershipInfo> members) {
 159  0
                                                 redrawDecisionTable(comments, members);
 160  
 
 161  0
                                         }
 162  
                                 });
 163  
                 
 164  
 
 165  
                 // onReadyCallback.exec(true);
 166  0
         }
 167  
 
 168  
         private void redrawDecisionTable(List<CommentInfo> commentInfos,
 169  
                         Map<String, MembershipInfo> members) {
 170  0
                 if (commentInfos != null) {
 171  0
                         int rowIndex = 0;
 172  0
                         for (final CommentInfo commentInfo : commentInfos) {
 173  
                             /* we only want decision rationale comments so if no DecisionRationaleDetail is returned for comment
 174  
                  * type then don't add that comment to the table
 175  
                  */
 176  0
                             DecisionRationaleDetail drDetails = DecisionRationaleDetail.getByType(commentInfo.getType());
 177  0
                             if (drDetails != null) {
 178  0
                                     int columnIndex = 0;
 179  0
                                     if (rowIndex == 0) {
 180  0
                                             initializeDecisionTable();
 181  0
                                             rowIndex++;
 182  
                                     }
 183  0
                                     ResultRow theRow = new ResultRow();
 184  0
                     theRow.setId(commentInfo.getId());
 185  0
                     theRow.setValue("Decision", drDetails.getLabel());
 186  0
                                     SimpleDateFormat dateformat = new SimpleDateFormat("MM/dd/yyyy");
 187  0
                                     StringBuilder rationaleDate = new StringBuilder(dateformat
 188  
                                                     .format(commentInfo.getMetaInfo().getCreateTime()));
 189  
     
 190  0
                                     theRow.setId(commentInfo.getId());
 191  0
                                     theRow.setValue("Date", rationaleDate.toString());
 192  
     
 193  0
                                     if (members.get(commentInfo.getMetaInfo().getCreateId()) != null) {
 194  0
                                             MembershipInfo memberInfo = members.get(commentInfo
 195  
                                                             .getMetaInfo().getCreateId());
 196  0
                                             StringBuilder memberName = new StringBuilder();
 197  0
                                             memberName.append(memberInfo.getFirstName());
 198  0
                                             memberName.append(" ");
 199  0
                                             memberName.append(memberInfo.getLastName());
 200  0
                                             theRow.setId(commentInfo.getId());
 201  0
                                             theRow.setValue("Actor", memberName.toString());
 202  
                                     }
 203  0
                                     theRow.setId(commentInfo.getId());
 204  0
                                     theRow.setValue("Rationale", commentInfo.getCommentText()
 205  
                                                     .getPlain());
 206  
     
 207  0
                                     tableModel.addRow(new RationaleRow(theRow));
 208  
                             }
 209  0
                                                 }
 210  
                         // KSLAB-2569 KSCM-1644, was getting NPE here when there were comments, but
 211  
                         // no "decision rationale" (and thus null tableModel)
 212  
                         // tables was never initialize in these conditions.
 213  
 
 214  0
                  if (tableModel == null){
 215  0
                          initializeDecisionTable();
 216  
                  }         
 217  
          
 218  0
              tableModel.fireTableDataChanged(); 
 219  
 
 220  
                 }
 221  0
         }
 222  
 
 223  
         class RationaleRow extends Row {
 224  
 
 225  
                 ResultRow row;
 226  
 
 227  0
                 public RationaleRow(ResultRow row) {
 228  0
                         this.row = row;
 229  0
                 }
 230  
 
 231  
                 @Override
 232  
                 public Object getCellData(String columnId) {
 233  0
                         return row.getValue(columnId);
 234  
                 }
 235  
 
 236  
                 @Override
 237  
                 public void setCellData(String columnId, Object newValue) {
 238  0
                         row.setValue(columnId, newValue.toString());
 239  0
                 }
 240  
 
 241  
                 @Override
 242  
                 public String toString() {
 243  0
                         return row.toString();
 244  
                 }
 245  
 
 246  
                 public ResultRow getResultRow() {
 247  0
                         return row;
 248  
                 }
 249  
         }
 250  
 
 251  
         private void initializeDecisionTable() {
 252  0
                 ArrayList<String> tableHeaderList = new ArrayList<String>();
 253  0
                 tableHeaderList.add("Decision");
 254  0
                 tableHeaderList.add("Date");
 255  0
                 tableHeaderList.add("Actor");
 256  0
                 tableHeaderList.add("Rationale");
 257  0
                 tableModel = new DefaultTableModel();
 258  
 
 259  0
                 for (String tableHeader : tableHeaderList) {
 260  0
                         Column col1 = new Column();
 261  0
                         col1.setId(tableHeader);
 262  0
                         String header = Application.getApplicationContext().getUILabel("",
 263  
                                         null, null, tableHeader);
 264  0
                         col1.setName(header);
 265  0
                         if (tableHeader.equals("Rationale")) {
 266  0
                                 col1.setWidth("200px");
 267  0
                         } else if (tableHeader.equals("Actor")) {
 268  0
                                 col1.setWidth("150px");
 269  
                         } else {
 270  0
                                 col1.setWidth("100px");
 271  
                         }
 272  0
                         if (tableHeader.equals("Date")) {
 273  0
                                 col1.setAscendingRowComparator(new FieldAscendingRowComparator(
 274  
                                                 "Date"));
 275  
                         }
 276  0
                         tableModel.addColumn(col1);
 277  0
                 }
 278  
 
 279  0
                 table.setTableModel(tableModel);
 280  0
         }
 281  
 
 282  
         @Override
 283  
         public String getReferenceId() {
 284  
 
 285  0
                 return this.referenceId;
 286  
         }
 287  
 
 288  
         @Override
 289  
         public String getReferenceState() {
 290  
 
 291  0
                 return this.referenceState;
 292  
         }
 293  
 
 294  
         @Override
 295  
         public String getReferenceType() {
 296  
 
 297  0
                 return this.referenceType;
 298  
         }
 299  
 
 300  
         @Override
 301  
         public String getReferenceTypeKey() {
 302  
 
 303  0
                 return this.referenceTypeKey;
 304  
         }
 305  
 
 306  
         public Map getReferenceAttributes() {
 307  0
                 return referenceAttributes;
 308  
         }
 309  
 
 310  
         @Override
 311  
         public void setReferenceId(String id) {
 312  0
                 this.referenceId = id;
 313  
 
 314  0
         }
 315  
 
 316  
         @Override
 317  
         public void setReferenceState(String state) {
 318  0
                 this.referenceState = state;
 319  
 
 320  0
         }
 321  
 
 322  
         @Override
 323  
         public void setReferenceType(String type) {
 324  0
                 this.referenceType = type;
 325  
 
 326  0
         }
 327  
 
 328  
         @Override
 329  
         public void setReferenceTypeKey(String key) {
 330  0
                 this.referenceTypeKey = key;
 331  
 
 332  0
         }
 333  
 
 334  
         public void setReferenceAttributes(Map referenceAttributes) {
 335  0
                 this.referenceAttributes = referenceAttributes;
 336  0
         }
 337  
 
 338  
         @Override
 339  
         public Image getImage() {
 340  
 
 341  0
                 return Theme.INSTANCE.getCommonImages().getCommentIcon();
 342  
         }
 343  
 
 344  
         @Override
 345  
         public Enum<?> getViewEnum() {
 346  
 
 347  0
                 return viewEnum;
 348  
         }
 349  
 
 350  
         @Override
 351  
         public void setController(Controller controller) {
 352  
 
 353  0
                 this.controller = controller;
 354  0
         }
 355  
 
 356  
         @Override
 357  
         public Widget asWidget() {
 358  
 
 359  0
                 return commentLightBox.getWidget();
 360  
         }
 361  
 
 362  
         @Override
 363  
         public boolean beforeHide() {
 364  
 
 365  0
                 return true;
 366  
         }
 367  
 
 368  
         @Override
 369  
         public void beforeShow(Callback<Boolean> onReadyCallback) {
 370  0
                 onReadyCallback.exec(true);
 371  
 
 372  0
         }
 373  
 
 374  
         @Override
 375  
         public void clear() {
 376  
 
 377  0
         }
 378  
 
 379  
         @Override
 380  
         public Controller getController() {
 381  
 
 382  0
                 return this.controller;
 383  
         }
 384  
 
 385  
         @Override
 386  
         public String getName() {
 387  
 
 388  0
                 return this.viewName;
 389  
         }
 390  
 
 391  
         @Override
 392  
         public void updateModel() {
 393  
 
 394  0
         }
 395  
 
 396  
         @Override
 397  
         public String collectHistory(String historyStack) {
 398  
 
 399  0
                 return null;
 400  
         }
 401  
 
 402  
         @Override
 403  
         public void onHistoryEvent(String historyStack) {
 404  
 
 405  0
         }
 406  
 
 407  
         @Override
 408  
         public void collectBreadcrumbNames(List<String> names) {
 409  
 
 410  0
         }
 411  
 
 412  
         public void show() {
 413  0
                 controller.requestModel(ReferenceModel.class,
 414  0
                                 new ModelRequestCallback<ReferenceModel>() {
 415  
                                         public void onModelReady(ReferenceModel model) {
 416  0
                                                 setReferenceId(model.getReferenceId());
 417  0
                                                 setReferenceTypeKey(model.getReferenceTypeKey());
 418  0
                                                 setReferenceType(model.getReferenceType());
 419  0
                                                 setReferenceState(model.getReferenceState());
 420  0
                                                 setReferenceAttributes(model.getReferenceAttributes());
 421  
                                                 // refreshComments();
 422  0
                                                 referesh();
 423  0
                                                 commentLightBox.show();
 424  0
                                         }
 425  
 
 426  
                                         public void onRequestFail(Throwable cause) {
 427  0
                                                 Window.alert(cause.toString());
 428  0
                                         }
 429  
                                 });
 430  0
         }
 431  
     private static String getMessage(final String messageId) {
 432  0
         return Application.getApplicationContext().getMessage(messageId);
 433  
     }
 434  
     
 435  
     public boolean isExportButtonActive() {
 436  0
         return false;
 437  
     }
 438  
     
 439  
         @Override
 440  
         public void showExport(boolean show) {
 441  
                 // TODO Auto-generated method stub
 442  
                 
 443  0
         }
 444  
 }
 445  
 
 446  0
 class FieldAscendingRowComparator extends RowComparator {
 447  
 
 448  
         String columnId;
 449  
 
 450  0
         FieldAscendingRowComparator(String columnId) {
 451  0
                 this.columnId = columnId;
 452  0
         }
 453  
 
 454  
         @Override
 455  
         public int compare(Row row0, Row row1) {
 456  
                 String id0, id1;
 457  
 
 458  0
                 id0 = (String) row0.getCellData(columnId);
 459  0
                 id1 = (String) row1.getCellData(columnId);
 460  
 
 461  0
                 return id0.compareTo(id1);
 462  
         }
 463  
         
 464  
 }
 465  
 
 466  0
 class FieldDescendingRowComparator extends RowComparator {
 467  
 
 468  
         String columnId;
 469  
 
 470  0
         FieldDescendingRowComparator(String columnId) {
 471  0
                 this.columnId = columnId;
 472  0
         }
 473  
 
 474  
         @Override
 475  
         public int compare(Row row0, Row row1) {
 476  
                 String id0, id1;
 477  
 
 478  0
                 id0 = (String) row0.getCellData(columnId);
 479  0
                 id1 = (String) row1.getCellData(columnId);
 480  
 
 481  0
                 return id1.compareTo(id0);
 482  
         }
 483  
 }