1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.primefaces.extensions.model.dynaform;
23
24 import java.io.Serializable;
25 import java.util.ArrayList;
26 import java.util.List;
27 import java.util.UUID;
28
29
30
31
32
33
34
35
36 public class DynaFormModel implements Serializable {
37
38 private static final long serialVersionUID = 20120514L;
39
40 private final String uuid;
41 private final List<DynaFormRow> regularRows = new ArrayList<>();
42 private List<DynaFormRow> extendedRows = null;
43 private final List<DynaFormLabel> labels = new ArrayList<>();
44 private final List<DynaFormControl> controls = new ArrayList<>();
45
46 public DynaFormModel() {
47 uuid = UUID.randomUUID().toString();
48 }
49
50 public String getUuid() {
51 return uuid;
52 }
53
54 public List<DynaFormRow> getRegularRows() {
55 return regularRows;
56 }
57
58 public List<DynaFormRow> getExtendedRows() {
59 return extendedRows;
60 }
61
62 public List<DynaFormControl> getControls() {
63 return controls;
64 }
65
66 public List<DynaFormLabel> getLabels() {
67 return labels;
68 }
69
70
71
72
73
74
75 public DynaFormRow createRegularRow() {
76 final DynaFormRow dynaFormRow = new DynaFormRow(regularRows.size() + 1, false, this);
77 regularRows.add(dynaFormRow);
78
79 return dynaFormRow;
80 }
81
82
83
84
85
86
87 public DynaFormRow createExtendedRow() {
88 if (extendedRows == null) {
89 extendedRows = new ArrayList<>();
90 }
91
92 final DynaFormRow dynaFormRow = new DynaFormRow(extendedRows.size() + 1, true, this);
93 extendedRows.add(dynaFormRow);
94
95 return dynaFormRow;
96 }
97
98
99
100
101
102
103 public void removeRegularRow(final DynaFormRow rowToBeRemoved) {
104 final int idx = rowToBeRemoved != null ? regularRows.indexOf(rowToBeRemoved) : -1;
105 if (idx >= 0) {
106 removeRow(regularRows, rowToBeRemoved, idx);
107 }
108 }
109
110
111
112
113
114
115 public void removeRegularRow(final int idx) {
116 DynaFormRow rowToBeRemoved = null;
117 if (0 <= idx && idx < regularRows.size()) {
118 rowToBeRemoved = regularRows.get(idx);
119 }
120
121 if (rowToBeRemoved != null) {
122 removeRow(regularRows, rowToBeRemoved, idx);
123 }
124 }
125
126
127
128
129
130
131 public void removeExtendedRow(final DynaFormRow rowToBeRemoved) {
132 final int idx = rowToBeRemoved != null ? extendedRows.indexOf(rowToBeRemoved) : -1;
133 if (idx >= 0) {
134 removeRow(extendedRows, rowToBeRemoved, idx);
135 }
136 }
137
138
139
140
141
142
143 public void removeExtendedRow(final int idx) {
144 DynaFormRow rowToBeRemoved = null;
145 if (0 <= idx && idx < extendedRows.size()) {
146 rowToBeRemoved = extendedRows.get(idx);
147 }
148
149 if (rowToBeRemoved != null) {
150 removeRow(extendedRows, rowToBeRemoved, idx);
151 }
152 }
153
154 private void removeRow(final List<DynaFormRow> rows, final DynaFormRow rowToBeRemoved, final int idx) {
155 final List<DynaFormControl> controlsToBeRemoved = new ArrayList<>();
156 final List<DynaFormLabel> labelsToBeRemoved = new ArrayList<>();
157 for (final AbstractDynaFormElement element : rowToBeRemoved.getElements()) {
158 if (element instanceof DynaFormControl) {
159 controlsToBeRemoved.add((DynaFormControl) element);
160 }
161 else if (element instanceof DynaFormLabel) {
162 labelsToBeRemoved.add((DynaFormLabel) element);
163 }
164 }
165
166 controls.removeAll(controlsToBeRemoved);
167 labels.removeAll(labelsToBeRemoved);
168 for (final DynaFormLabel label : labels) {
169 if (label.getForControl() != null && controlsToBeRemoved.contains(label.getForControl())) {
170
171 label.setForControl(null);
172 }
173 }
174
175 rows.remove(rowToBeRemoved);
176
177
178 int row = idx;
179 final List<DynaFormRow> rowsToBeAdjusted = rows.subList(idx, rows.size());
180 for (final DynaFormRow dynaFormRow : rowsToBeAdjusted) {
181 ++row;
182 dynaFormRow.setRow(row);
183 for (final AbstractDynaFormElement element : dynaFormRow.getElements()) {
184 element.setRow(row);
185 if (element instanceof DynaFormControl) {
186 final DynaFormControl control = (DynaFormControl) element;
187 final int delta = rowToBeRemoved.getElements().size();
188 control.setPosition(control.getPosition() - delta);
189 control.generateKey();
190 }
191 }
192 }
193 }
194
195 public boolean isExistExtendedGrid() {
196 return getExtendedRows() != null && !getExtendedRows().isEmpty();
197 }
198 }