source: SRUAggregator/trunk/src/main/java/eu/clarin/sru/fcs/aggregator/sparam2/Corpus2Renderer.java @ 2926

Last change on this file since 2926 was 2926, checked in by yana, 11 years ago

rebuilding the interface - initial version, still not functional!

File size: 10.5 KB
Line 
1/*
2 * To change this template, choose Tools | Templates
3 * and open the template in the editor.
4 */
5package eu.clarin.sru.fcs.aggregator.sparam2;
6
7import java.util.ArrayList;
8import java.util.Arrays;
9import java.util.HashMap;
10import java.util.HashSet;
11import java.util.List;
12import java.util.Map;
13import java.util.Set;
14import org.zkoss.zk.ui.event.Event;
15import org.zkoss.zk.ui.event.EventListener;
16import org.zkoss.zk.ui.event.Events;
17import org.zkoss.zul.A;
18import org.zkoss.zul.Checkbox;
19import org.zkoss.zul.DefaultTreeNode;
20import org.zkoss.zul.Label;
21import org.zkoss.zul.Treecell;
22import org.zkoss.zul.Treeitem;
23import org.zkoss.zul.TreeitemRenderer;
24import org.zkoss.zul.Treerow;
25
26/**
27 *
28 * @author Yana Panchenko <yana_panchenko at yahoo.com>
29 */
30/**
31 * The structure of tree
32 *
33 * <pre>
34 * &lt;treeitem>
35 *   &lt;treerow>
36 *     &lt;treecell>...&lt;/treecell>
37 *   &lt;/treerow>
38 *   &lt;treechildren>
39 *     &lt;treeitem>...&lt;/treeitem>
40 *   &lt;/treechildren>
41 * &lt;/treeitem>
42 * </pre>
43 */
44public class Corpus2Renderer implements TreeitemRenderer<DefaultTreeNode<Corpus2>> {
45
46    Map<String, Set<Corpus2>> selectedCorpora = new HashMap<String,Set<Corpus2>>();
47
48   
49    @Override
50    public void render(Treeitem treeItem, DefaultTreeNode<Corpus2> treeNode, int index) throws Exception {
51
52        Treerow dataRow = new Treerow();
53        dataRow.setParent(treeItem);
54        treeItem.setValue(treeNode);
55        treeItem.setOpen(false);
56        Corpus2 data = treeNode.getData();
57
58        if (data.isTemporary()) {
59            System.out.println("IN TEMP NODE!!!!");
60            return;
61        }
62
63        Treecell cell1 = createCellForSelectCorpus(data, dataRow);
64        dataRow.appendChild(cell1);
65        Treecell cell4 = createCellForHome(data);
66        dataRow.appendChild(cell4);
67        Treecell cell2 = createCellForCorpusLanguage(data);
68        dataRow.appendChild(cell2);
69        Treecell cell5 = createCellForCorpusInstitution(data);
70        dataRow.appendChild(cell5);
71        Treecell cell3 = createCellForCorpusDescription(data);
72        dataRow.appendChild(cell3);
73
74        treeItem.addEventListener(Events.ON_OPEN, new EventListener<Event>() {
75            @Override
76            public void onEvent(Event event) throws Exception {
77
78                Treeitem openedTreeitem = (Treeitem) event.getTarget();
79                if (openedTreeitem.getTreechildren().getChildren().isEmpty()) {
80                    openedTreeitem.setOpen(false);
81                } else {
82                    // get first child
83                    Treeitem childTreeitem = (Treeitem) openedTreeitem.getTreechildren().getChildren().get(0);
84                    // if this first child is temp node remove it
85                    DefaultTreeNode<Corpus2> openedNodeValue = (DefaultTreeNode<Corpus2>) openedTreeitem.getValue();
86                    Corpus2 openedCorpus = openedNodeValue.getData();
87                    DefaultTreeNode<Corpus2> childNodeValue = (DefaultTreeNode<Corpus2>) childTreeitem.getValue();
88                    Corpus2 childCorpus = childNodeValue.getData();
89                    if (childCorpus.isTemporary()) {
90                        openedNodeValue.getChildren().remove(childTreeitem.getIndex());
91                        // add real corpora nodes
92                        Iterable<Corpus2> subcorpora = Corpus2.getSubcorpora(openedCorpus);
93                        boolean open = false;
94                        for (Corpus2 corpus : subcorpora) {
95                            List<DefaultTreeNode<Corpus2>> tempChildren = new ArrayList<DefaultTreeNode<Corpus2>>(1);
96                            Corpus2 tempChildCorpus = new Corpus2();
97                            tempChildren.add(new DefaultTreeNode<Corpus2>(tempChildCorpus));
98                            DefaultTreeNode<Corpus2> subcorporaNode = new DefaultTreeNode(corpus, tempChildren);
99                            openedNodeValue.getChildren().add(subcorporaNode);
100                            open = true;
101                        }
102                        openedTreeitem.setOpen(open);
103                    }
104                }
105            }
106        });
107
108
109    }
110
111    private Checkbox createCheckboxForSelectCorpus(Treerow dataRow) {
112        Checkbox checkbox = new Checkbox();
113        checkbox.setValue(dataRow);
114        Treeitem eventItem = (Treeitem) dataRow.getParent();
115        DefaultTreeNode<Corpus2> eventNode = (DefaultTreeNode<Corpus2>) eventItem.getValue();
116        if (selectedCorpora.containsKey(eventNode.getData().getEndpointUrl())) {
117            if (selectedCorpora.get(eventNode.getData().getEndpointUrl()).contains(eventNode.getData())) {
118                checkbox.setChecked(true);
119                toggleCorpusCheckbox(eventNode.getData(), checkbox, dataRow);
120            }
121        }
122        checkbox.addEventListener("onCheck", new EventListener() {
123            @Override
124            public void onEvent(Event event) throws Exception {
125                Checkbox eventCheckbox = (Checkbox) event.getTarget();
126                Treerow eventRow = (Treerow) eventCheckbox.getValue();
127                Treeitem eventItem = (Treeitem) eventRow.getParent();
128                DefaultTreeNode<Corpus2> eventNode = (DefaultTreeNode<Corpus2>) eventItem.getValue();
129                toggleCorpusCheckbox(eventNode.getData(), eventCheckbox, eventRow);
130            }
131        });
132        return checkbox;
133    }
134
135    private void toggleCorpusCheckbox(Corpus2 corpus, Checkbox checkbox, Treerow row) {
136        if (checkbox.isChecked()) {
137            row.setZclass("z-treerow z-treerow-seld");
138            addToSelected(corpus);
139        } else {
140            row.setZclass("z-treerow");
141            removeFromSelected(corpus);
142        }
143    }
144   
145    public void updateItem(Treeitem item, boolean select) {
146        Treerow row = (Treerow) item.getFirstChild();
147        Checkbox checkbox = (Checkbox) row.getFirstChild().getFirstChild();
148        DefaultTreeNode<Corpus2> node = (DefaultTreeNode<Corpus2>) item.getValue();
149        checkbox.setChecked(select);
150        toggleCorpusCheckbox(node.getData(), checkbox, row);
151    }
152   
153
154//    private Label createLabelForCorpus(Corpus2 data) {
155//        Label label;
156//        if (data.isRoot()) {
157//            if (data.getInstitution() != null) {
158//                label = new Label(data.getInstitution().getName());
159//            } else {
160//                label = new Label("");
161//            }
162//        } else {
163//            label = new Label(data.getDisplayName());
164//        }
165//        return label;
166//    }
167//    private Treecell createCellForSelectCorpus(Corpus2 data, Treerow dataRow) {
168//        Treecell cell = new Treecell();
169//        Checkbox corpusCheckbox = createCheckboxForSelectCorpus(dataRow);
170//        corpusCheckbox.setParent(cell);
171//        if (data.getLandingPage() == null) {
172//            Label corpusLabel = createLabelForCorpus(data);
173//            corpusLabel.setParent(cell);
174//        } else {
175////            A link = new A(data.getDisplayName());
176////            link.setHref(data.getLandingPage());
177////            link.setParent(cell);
178//            Label corpusLabel = new Label(data.getDisplayName());
179//            corpusLabel.setParent(cell);
180//           
181////            A link = new A("");
182////            link.setHref(data.getLandingPage());
183////            link.setImage("go-home.png");
184////            link.setParent(cell);
185//        }
186//        return cell;
187//    }
188    private Treecell createCellForSelectCorpus(Corpus2 data, Treerow dataRow) {
189        Treecell cell = new Treecell();
190        Checkbox corpusCheckbox = createCheckboxForSelectCorpus(dataRow);
191        corpusCheckbox.setParent(cell);
192        if (data.getDisplayName() == null) {
193            Label corpusLabel = new Label("");
194            corpusLabel.setParent(cell);
195        } else {
196            Label corpusLabel = new Label(data.getDisplayName());
197            corpusLabel.setParent(cell);
198        }
199        return cell;
200    }
201
202    private Treecell createCellForCorpusInstitution(Corpus2 data) {
203        Treecell cell = new Treecell();
204        if (data.getInstitution() == null) {
205            Label label = new Label("");
206            label.setParent(cell);
207        } else {
208            Label label = new Label(data.getInstitution().getName());
209            label.setParent(cell);
210        }
211        return cell;
212    }
213
214    private Treecell createCellForHome(Corpus2 data) {
215        Treecell cell = new Treecell();
216        if (data.getLandingPage() == null) {
217            Label label = new Label("");
218            label.setParent(cell);
219        } else {
220
221            A link = new A();
222            link.setTarget("_blank");
223            link.setHref(data.getLandingPage());
224            link.setImage("go-home.png");
225            link.setParent(cell);
226        }
227        return cell;
228    }
229
230    private Treecell createCellForCorpusLanguage(Corpus2 data) {
231        Treecell cell = new Treecell();
232        if (!data.getLanguages().isEmpty()) {
233            StringBuilder langs = new StringBuilder();
234            for (String lang : data.getLanguages()) {
235                langs.append(lang);
236                langs.append(" ");
237            }
238            Label label = new Label(langs.toString());
239            label.setParent(cell);
240        } else {
241            Label label = new Label("");
242            label.setParent(cell);
243        }
244        return cell;
245    }
246
247    private Treecell createCellForCorpusDescription(Corpus2 data) {
248        Treecell cell = new Treecell();
249        if (data.getDescription() != null) {
250            //if (data.getDescription().length() > 40) {
251            //    String descrStart = data.getDescription().substring(0, 35) + " ...";
252            //    Label label = new Label(descrStart);
253            //    label.setTooltiptext(data.getDescription());
254            //    label.setParent(cell);
255            //} else {
256            Label label = new Label(data.getDescription());
257            label.setParent(cell);
258            //}
259        } else {
260            Label label = new Label("");
261            label.setParent(cell);
262        }
263
264        return cell;
265    }
266
267    private void addToSelected(Corpus2 data) {
268        if (!this.selectedCorpora.containsKey(data.getEndpointUrl())) {
269            this.selectedCorpora.put(data.getEndpointUrl(), new HashSet<Corpus2>());
270        }
271        this.selectedCorpora.get(data.getEndpointUrl()).add(data);
272
273    }
274
275    private void removeFromSelected(Corpus2 data) {
276        if (this.selectedCorpora.containsKey(data.getEndpointUrl())) {
277            this.selectedCorpora.get(data.getEndpointUrl()).remove(data);
278        }
279    }
280
281    public Map<String, Set<Corpus2>> getSelectedCorpora() {
282        return selectedCorpora;
283    }
284}
Note: See TracBrowser for help on using the repository browser.