View Javadoc

1   /**
2    * Copyright (C) 2008 Atlassian
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *    http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  package com.atlassian.theplugin.idea.crucible.table.column;
18  
19  import com.atlassian.theplugin.commons.crucible.ValueNotYetInitialized;
20  import com.atlassian.theplugin.commons.crucible.api.model.Reviewer;
21  import com.atlassian.theplugin.idea.TableColumnInfo;
22  import com.atlassian.theplugin.idea.crucible.ReviewData;
23  import static com.atlassian.theplugin.util.ReviewInfoUtil.getNumOfCompletedReviewers;
24  
25  import javax.swing.*;
26  import java.util.Comparator;
27  import java.util.Iterator;
28  import java.util.List;
29  
30  
31  public class ReviewReviewersColumn extends TableColumnInfo {
32      private static final int COL_WIDTH = new JLabel("Reviewers").getPreferredSize().width;
33  
34      public String getColumnName() {
35          return "Reviewers";
36      }
37  
38      public Object valueOf(Object o) {
39          return o;
40      }
41  
42      public Class getColumnClass() {
43          return String.class;
44      }
45  
46      public Comparator getComparator() {
47  //        return new Comparator() {
48  //            public int compare(Object o, Object o1) {
49  //                String r = getReviewersAsText(o);
50  //                String r1 = getReviewersAsText(o1);
51  //                return r.compareTo(r1);
52  //            }
53  //        };
54  
55  		 return new Comparator() {
56              public int compare(Object o, Object o1) {
57  				ReviewData review1 = (ReviewData) o;
58  				ReviewData review2 = (ReviewData) o1;
59  				List<Reviewer> r1 = null;
60  				List<Reviewer> r2 = null;
61  				int r1s = 0;
62  				int r2s = 0;
63  				try {
64  					r1 = review1.getReviewers();
65  					r1s = r1.size();
66  				} catch (ValueNotYetInitialized valueNotYetInitialized) {
67                      // TODO lguminsk check what to do or comment here
68                  }
69  				try {
70  					r2 = review2.getReviewers();
71  					r2s = r2.size();
72  				} catch (ValueNotYetInitialized valueNotYetInitialized) {
73                      // TODO lguminsk check what to do or comment here
74  				}
75  
76  				if (r1s == r2s) {
77  					return getNumOfCompletedReviewers(review1) - getNumOfCompletedReviewers(review2);
78  				} else {
79  					return r1s - r2s;
80  				}
81              }
82          };
83  	}
84  
85  	public static String getReviewersAsText(Object o) {
86  		StringBuffer sb = new StringBuffer();
87  		try {
88  			if (((ReviewData) o).getReviewers() != null) {
89  				for (Iterator<Reviewer> iterator = ((ReviewData) o).getReviewers().iterator(); iterator.hasNext();) {
90  					sb.append(iterator.next().getUserName());
91  					if (iterator.hasNext()) {
92  						sb.append(", ");
93  					}
94  				}
95  			}
96  		} catch (ValueNotYetInitialized valueNotYetInitialized) {
97  			return "Error retrieving reviewers";
98  		}
99  		return sb.toString();
100 	}
101 
102 	public int getPrefferedWidth() {
103         return COL_WIDTH;
104     }
105 
106 
107 }