1 package org.kuali.student.common.ui.client.mvc.breadcrumb;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import org.kuali.student.common.ui.client.mvc.Controller;
7 import org.kuali.student.common.ui.client.mvc.history.HistoryManager;
8 import org.kuali.student.common.ui.client.widgets.field.layout.element.SpanPanel;
9
10 import com.google.gwt.user.client.ui.ComplexPanel;
11 import com.google.gwt.user.client.ui.Composite;
12 import com.google.gwt.user.client.ui.Hyperlink;
13 import com.google.gwt.user.client.ui.InlineLabel;
14 import com.google.gwt.user.client.ui.Panel;
15 import com.google.gwt.user.client.ui.Widget;
16
17
18
19
20
21
22
23 public class BreadcrumbManager extends Composite{
24
25 public static List<Hyperlink> links = new ArrayList<Hyperlink>();
26
27 private static List<String> names = new ArrayList<String>();
28
29 private static Controller root;
30 private static ComplexPanel panel = new SpanPanel();
31 private static boolean panelEmpty = true;
32
33 private static Panel parentPanel;
34
35 private static class BreadcrumbData{
36 private String name;
37 private String path;
38 public BreadcrumbData(String name, String path) {
39 super();
40 this.name = name;
41 this.path = path;
42 }
43 }
44
45
46
47
48
49
50 public static void bind(Controller controller){
51 root = controller;
52 }
53
54
55
56
57
58
59
60 public static void updateLinks(String historyStack){
61 links.clear();
62 panel.clear();
63 panelEmpty = true;
64 names.clear();
65 root.collectBreadcrumbNames(names);
66
67 String[] arr = HistoryManager.splitHistoryStack(historyStack);
68 List<BreadcrumbData> breadcrumbs = new ArrayList<BreadcrumbData>();
69
70 if(arr.length == names.size()){
71 String path = "";
72
73 for(int i = 1; i < names.size(); i++){
74 path = path + "/" + arr[i];
75 String name = names.get(i);
76
77 if(name != null && !name.isEmpty()){
78 breadcrumbs.add(new BreadcrumbData(name, path));
79 }
80 }
81 }
82
83
84 else if(names.size() > arr.length){
85 String path = "";
86 int j = 1;
87
88 for(int i = 1; i < names.size(); i++){
89 String name = names.get(i);
90 if(name.contains("@")){
91 String[] split = name.split("@");
92 name = split[0];
93 if(name != null && !name.isEmpty()){
94
95 breadcrumbs.add(new BreadcrumbData(name, split[1]));
96 }
97 }
98 else{
99 if(j == arr.length){
100 break;
101 }
102 path = path + "/" + arr[j];
103 j++;
104 if(name != null && !name.isEmpty()){
105 breadcrumbs.add(new BreadcrumbData(name, path));
106 }
107 }
108 }
109 }
110
111 if(parentPanel != null){
112 if(breadcrumbs.size() == 1){
113 panel.getParent().setVisible(false);
114 }
115 else{
116 panel.getParent().setVisible(true);
117
118 }
119 }
120
121 for(int i = 0; i < breadcrumbs.size(); i++){
122 if(i < breadcrumbs.size() - 1){
123 createLink(breadcrumbs.get(i).name, breadcrumbs.get(i).path);
124 }
125 else{
126 createLabel(breadcrumbs.get(i).name);
127
128 }
129 }
130 }
131
132 private static void createLabel(String name){
133 addToPanel(new InlineLabel(name));
134 }
135
136 private static void createLink(String name, final String viewPath){
137 Hyperlink link = new Hyperlink(name, viewPath);
138 links.add(link);
139 addToPanel(link);
140 }
141
142 private static void addToPanel(Widget w){
143 if(panelEmpty){
144 panel.add(w);
145 panelEmpty = false;
146 }
147 else{
148 panel.add(new InlineLabel(" \u00BB "));
149 panel.add(w);
150 }
151 }
152
153
154
155
156
157 public static ComplexPanel getBreadcrumbPanel(){
158 return panel;
159 }
160
161 public static void setParentPanel(Panel panel){
162 parentPanel = panel;
163 parentPanel.setVisible(false);
164 }
165
166 }