1 package org.kuali.student.common.ui.server.screenreport.jasper;
2
3 import java.util.Collection;
4 import java.util.Iterator;
5
6 import net.sf.jasperreports.engine.JRException;
7 import net.sf.jasperreports.engine.JRField;
8 import net.sf.jasperreports.engine.data.JRAbstractBeanDataSource;
9 import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
10
11 import org.kuali.student.common.ui.client.util.ExportElement;
12
13
14
15
16
17
18
19 public class KSCollectionDataSource extends JRAbstractBeanDataSource {
20
21
22
23
24 private Collection<ExportElement> data;
25 private Iterator<ExportElement> iterator;
26 private ExportElement currentBean;
27 private ExportElement parent;
28
29 public KSCollectionDataSource(Collection<ExportElement> elements, ExportElement parent) {
30 super(true);
31
32 this.parent = parent;
33 this.data = elements;
34
35 if (this.data != null) {
36 this.iterator = this.data.iterator();
37 }
38 }
39
40
41
42
43 public boolean next() {
44 boolean hasNext = false;
45
46 if (this.iterator != null) {
47 hasNext = this.iterator.hasNext();
48
49 if (hasNext) {
50 this.currentBean = this.iterator.next();
51
52
53 if (this.currentBean.isEmpty()){
54 return next();
55 }
56 }
57 }
58
59 return hasNext;
60 }
61
62 @Override
63 public Object getFieldValue(JRField field) throws JRException {
64 return getFieldValue(currentBean, field);
65 }
66
67
68
69
70 protected Object getFieldValue(ExportElement bean, JRField field) throws JRException {
71 Object object = getBeanProperty(bean, getPropertyName(field));
72
73
74 if ("subset".equals(field.getName())) {
75 return new KSCollectionDataSource((Collection<ExportElement>) object, bean);
76
77
78 } else if ("sectionName".equals(field.getName())) {
79 if (parent != null && parent.getSectionName() != null && parent.getSectionName().equals(object)) {
80 return null;
81 } else {
82 return object;
83 }
84 }
85 return object;
86 }
87
88
89
90
91 public void moveFirst() {
92 if (this.data != null) {
93 this.iterator = this.data.iterator();
94 }
95 }
96
97
98
99
100
101
102 public Collection getData() {
103 return data;
104 }
105
106
107
108
109
110
111 public int getRecordCount() {
112 return data == null ? 0 : data.size();
113 }
114
115
116
117
118
119
120 public JRBeanCollectionDataSource cloneDataSource() {
121 return new JRBeanCollectionDataSource(data);
122 }
123
124
125
126 }