View Javadoc

1   package com.atlassian.theplugin.idea.crucible.tree;
2   
3   import com.atlassian.theplugin.commons.crucible.api.model.PredefinedFilter;
4   import com.atlassian.theplugin.crucible.model.CrucibleFilterListModel;
5   import com.atlassian.theplugin.crucible.model.CrucibleReviewListModel;
6   
7   import javax.swing.tree.DefaultMutableTreeNode;
8   import javax.swing.tree.DefaultTreeModel;
9   import javax.swing.tree.TreePath;
10  import java.util.ArrayList;
11  
12  /**
13   * User: pmaruszak
14   */
15  public class CrucibleFilterTreeModel extends DefaultTreeModel {
16  	private CrucibleFilterListModel filterModel;
17  	private final CrucibleReviewListModel reviewListModel;
18  
19  
20  	public CrucibleFilterTreeModel(CrucibleFilterListModel filterModel, CrucibleReviewListModel reviewListModel) {
21  		super(new DefaultMutableTreeNode(), false);
22  		this.filterModel = filterModel;
23  		this.reviewListModel = reviewListModel;
24  	}
25  
26  	@Override
27  	public Object getChild(Object parent, int index) {
28  		if (parent == root) {
29  			DefaultMutableTreeNode p = (DefaultMutableTreeNode) parent;
30  
31  			if (index == 0) {
32  				// My Reviews node
33  				if (index < p.getChildCount()) {
34  					return p.getChildAt(index);
35  				}
36  
37  				CrucibleMyReviewsTreeNode node = new CrucibleMyReviewsTreeNode(reviewListModel);
38  				p.add(node);
39  				return node;
40  
41  			} else if (index <= getNumberOfCustomFilters()) {
42  				// Custom Filter node
43  				if (index < p.getChildCount()) {
44  					return p.getChildAt(index);
45  				}
46  
47  				CrucibleCustomFilterTreeNode node =
48  						new CrucibleCustomFilterTreeNode(filterModel.getCustomFilter(), reviewListModel);
49  				p.add(node);
50  				return node;
51  			} else if (index == getNumberOfCustomFilters() + 1) {
52  				// Recently Open Reviews node
53  				if (index < p.getChildCount()) {
54  					return p.getChildAt(index);
55  				}
56  
57  				CrucibleRecentlyOpenFilterTreeNode node = new CrucibleRecentlyOpenFilterTreeNode(
58  						filterModel.getRecentlyOpenReviewsFilter(), reviewListModel);
59  				p.add(node);
60  				return node;
61  			}
62  		} else if (parent instanceof CrucibleMyReviewsTreeNode && index < filterModel.getPredefinedFilters().size()) {
63  			// Predefined Filter node
64  			CrucibleMyReviewsTreeNode p = (CrucibleMyReviewsTreeNode) parent;
65  
66  			PredefinedFilter predefinedFilter = (PredefinedFilter) (filterModel.getPredefinedFilters()).toArray()[index];
67  
68  			if (predefinedFilter != null) {
69  
70  				if (index < p.getChildCount()) {
71  					return p.getChildAt(index);
72  				}
73  
74  				CruciblePredefinedFilterTreeNode n =
75  						new CruciblePredefinedFilterTreeNode(predefinedFilter, reviewListModel);
76  				p.add(n);
77  				return n;
78  			}
79  		}
80  		return null;
81  	}
82  
83  	@Override
84  	public int getChildCount(Object parent) {
85  		if (parent == root) {
86  			// (My Filters node) +  (Custom Filters) + (Recently Open)
87  			return 1 + getNumberOfCustomFilters() + 1;
88  		} else if (parent instanceof CrucibleMyReviewsTreeNode) {
89  			return filterModel.getPredefinedFilters().size();
90  		}
91  
92  		return 0;
93  	}
94  
95  	@Override
96  	public Object getRoot() {
97  		return super.getRoot();
98  	}
99  
100 	@Override
101 	public boolean isLeaf(Object node) {
102 		if (node == super.getRoot()
103 				|| node instanceof CrucibleMyReviewsTreeNode) {
104 			return false;
105 		}
106 
107 		return true;
108 	}
109 
110 	public int getNumberOfCustomFilters() {
111 		return 1;
112 	}
113 
114 	@Override
115 	public void valueForPathChanged(TreePath path, Object newValue) {
116 		System.out.println("valueForPathChanged");
117 	}
118 
119 	@Override
120 	public int getIndexOfChild(Object parent, Object child) {
121 		if (parent == root) {
122 			if (child instanceof CruciblePredefinedFilterTreeNode) {
123 				PredefinedFilter predefinedFilter = ((CruciblePredefinedFilterTreeNode) child).getFilter();
124 				return new ArrayList<PredefinedFilter>(filterModel.getPredefinedFilters()).indexOf(predefinedFilter);
125 
126 			} else if (child instanceof CrucibleCustomFilterTreeNode) {
127 
128 				return filterModel.getPredefinedFilters().size(); //last index + 1
129 			}
130 		}
131 
132 		return -1;
133 	}
134 }