Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 2da8e5b7

Přidáno uživatelem Michal Linha před téměř 4 roky(ů)

re #8113 re #7885 changed header column generation and row indentations; re #8154 nothing; no comments

Zobrazit rozdíly:

src/main/java/vldc/aswi/utils/Converter.java
37 37
     */
38 38
    public List<ContingencyTableRow> convertTableColumnsToContingencyTableRows() {
39 39
        long startTime = System.nanoTime();
40

  
41
        columnNodes = new ArrayList<>();
42
        List<List<String>> values = new ArrayList<>();
43
        for(NameUserName nameUserName : columnNames) {
44
            TableColumn column = tableColumns.get(nameUserName.getName());
45
            values.add(getOriginalValuesFromList(column.getValues()));
46
        }
47

  
48
        Node startNode = new Node();
49
        generateColumns(0, values, columnNodes, startNode);
50

  
40 51
        List<ContingencyTableRow> contingencyTableRows = new ArrayList<>();
41 52

  
42 53
        long startTime2 = System.nanoTime();
43
        List<ContingencyTableRow> headerRows = createHeaderOnlyRows();
54
        List<ContingencyTableRow> dataRows = createDataRows();
44 55
        long stopTime2 = System.nanoTime();
45
        System.out.println("Headers:" + TimeUnit.MILLISECONDS.convert((stopTime2 - startTime2), TimeUnit.NANOSECONDS));
56
        System.out.println("Rows:" + TimeUnit.MILLISECONDS.convert((stopTime2 - startTime2), TimeUnit.NANOSECONDS));
46 57

  
47 58
        long startTime3 = System.nanoTime();
48
        List<ContingencyTableRow> dataRows = createDataRows();
59
        for (ContingencyTableRow dataRow : dataRows) {
60
            for (int i = 0; i < columnNodes.size(); i++) {
61
                if (!columnNodes.get(i).isUsable()) {
62
                    dataRow.getCells().remove(i + 1);
63
                }
64
            }
65
        }
66

  
67
        columnNodes.removeIf(node -> !node.isUsable());
49 68
        long stopTime3 = System.nanoTime();
50
        System.out.println("Rows:" + TimeUnit.MILLISECONDS.convert((stopTime3 - startTime3), TimeUnit.NANOSECONDS));
69
        System.out.println("Columns remove:" + TimeUnit.MILLISECONDS.convert((stopTime3 - startTime3), TimeUnit.NANOSECONDS));
70

  
71
        long startTime4 = System.nanoTime();
72
        List<ContingencyTableRow> headerRows = createHeaderOnlyRows();
73
        long stopTime4 = System.nanoTime();
74
        System.out.println("Headers:" + TimeUnit.MILLISECONDS.convert((stopTime4 - startTime4), TimeUnit.NANOSECONDS));
51 75

  
52 76
        contingencyTableRows.addAll(headerRows);
53 77
        contingencyTableRows.addAll(dataRows);
......
63 87
     * @return list of contingency table rows
64 88
     */
65 89
    private List<ContingencyTableRow> createHeaderOnlyRows() {
66
        List<List<String>> values = new ArrayList<>();
67
        columnNodes = new ArrayList<>();
90
        //columnNodes = new ArrayList<>();
68 91
        List<ContingencyTableRow> headerRows = new ArrayList<>();
69 92

  
70
        List<String> valueOptions = new ArrayList<>();
71
        for (ValueFunction valueFunction : valueFunctions) {
72
            valueOptions.add(valueFunction.getFunction() + " z " + valueFunction.getName());
73
        }
74
        values.add(valueOptions);
93
//        List<String> valueOptions = new ArrayList<>();
94
//
95
//        for (ValueFunction valueFunction : valueFunctions) {
96
//            if (!valueFunctions.get(0).getType().equals("Seznam")) {
97
//                valueOptions.add(valueFunction.getFunction() + " z " + valueFunction.getName());
98
//            }
99
//            else if (valueFunctions.get(0).getType().equals("Seznam") && columnNames.size() > 0) {
100
//                valueOptions.add("NIC z nic");
101
//            }
102
//        }
103

  
104
        //values.add(valueOptions);
75 105
        headerRows.add(new ContingencyTableRow(true, 0));
76 106

  
77
        for(NameUserName nameUserName : columnNames) {
78
            TableColumn column = tableColumns.get(nameUserName.getName());
79
            values.add(getOriginalValuesFromList(column.getValues()));
107
        for (int i = 0; i < columnNames.size(); i++) {
108
            //NameUserName ignored = columnNames.get(i);
109
            //TableColumn column = tableColumns.get(nameUserName.getName());
80 110
            headerRows.add(new ContingencyTableRow(true, 0));
81 111
        }
82 112

  
83
        for (int i = 0; i < values.size(); i++) {
84
            int colSpan = 1;
85
            for (int j = values.size() - 1; j > i; j--) {
86
                if (values.size() - 1 == j) {
87
                    colSpan = values.get(j).size();
88
                }
89
                else {
90
                    colSpan = (colSpan + 1) * values.get(j).size();
91
                }
113
        if (valueFunctions.get(0).getType().equals("Seznam")) {
114
            headerRows.get(0).addTableRowCell(new ContingencyTableRowCell("Seznam", 1));
115
            return headerRows;
116
        }
117

  
118
        for (int i = 0; i < headerRows.size(); i++) {
119
            ContingencyTableRow headerRow = headerRows.get(i);
120

  
121
            if (i == 0) {
122
                headerRow.addTableRowCell(new ContingencyTableRowCell("Tabulka", 1));
92 123
            }
93
            int loopCount = 1;
94
            for (int k = 0; k < i; k++) {
95
                loopCount = loopCount * values.get(k).size();
124
            else {
125
                headerRow.addTableRowCell(new ContingencyTableRowCell("", 1));
96 126
            }
97
            headerRows.get(i).addTableRowCell(new ContingencyTableRowCell("", 1));
98
            for (int k = 0; k < loopCount; k++) {
99
                for (String value : values.get(i)) {
100
                    headerRows.get(i).addTableRowCell(new ContingencyTableRowCell(value, colSpan));
101
                    if (i != values.size() - 1 && i != 0) {
102
                        headerRows.get(i).addTableRowCell(new ContingencyTableRowCell(value + " Celkem", 1));
127
        }
128

  
129

  
130
        List<String> prevValues = new ArrayList<>();
131
        int prevSize = 0;
132
        for (ValueFunction valueFunction : valueFunctions) {
133
            headerRows.get(0).addTableRowCell(new ContingencyTableRowCell(valueFunction.getFunction() + " z " + valueFunction.getName(), 0));
134
            for (Node columnNode : columnNodes) {
135
                for (int i = 0; i < columnNode.getValues().size(); i++) {
136
                    String value = columnNode.getValues().get(i);
137
                    if (!prevValues.contains(value)) {
138
                        prevValues.add(value);
139
                        headerRows.get(i + 1).addTableRowCell(new ContingencyTableRowCell(value, 1));
140
                        headerRows.get(0).getCells().get(headerRows.get(0).getCells().size() - 1).setColSpan(headerRows.get(0).getCells().get(headerRows.get(0).getCells().size() - 1).getColSpan() + 1);
141
                    } else if (columnNode.getValues().size() >= prevSize) {
142
                        headerRows.get(i + 1).getCells().get(headerRows.get(i + 1).getCells().size() - 1).setColSpan(headerRows.get(i + 1).getCells().get(headerRows.get(i + 1).getCells().size() - 1).getColSpan() + 1);
103 143
                    }
104 144
                }
105 145

  
106
                for (int l = 0; l < i - 1; l++) {
107
                    headerRows.get(i).addTableRowCell(new ContingencyTableRowCell("", 1));
146
                if (columnNode.getValues().size() < prevSize) {
147
                    for (int s = prevSize; s < headerRows.size(); s++) {
148
                        headerRows.get(s).addTableRowCell(new ContingencyTableRowCell("", 1));
149
                    }
150
                    for (int s = 1; s < columnNode.getValues().size(); s++) {
151
                        headerRows.get(s).getCells().get(headerRows.get(s).getCells().size() - 1).setColSpan(headerRows.get(s).getCells().get(headerRows.get(s).getCells().size() - 1).getColSpan() + 1);
152
                    }
153
                    headerRows.get(columnNode.getValues().size()).addTableRowCell(new ContingencyTableRowCell(columnNode.getValues().get(columnNode.getValues().size() - 1) + " Celkem", 1));
108 154
                }
155

  
156
                prevSize = columnNode.getValues().size();
157
                prevValues.remove(prevValues.size() - 1);
109 158
            }
110
            for(ValueFunction valueFunction: valueFunctions) {
111
                if (i == 0) {
112
                    headerRows.get(i).addTableRowCell(new ContingencyTableRowCell("Celkový " + valueFunction.getFunction() +
113
                            " z " + valueFunction.getName(), 1));
114
                } else {
115
                    headerRows.get(i).addTableRowCell(new ContingencyTableRowCell("", 1));
116
                }
159
        }
160

  
161
        for (ValueFunction valueFunction : valueFunctions) {
162
            for (int i = 1; i < headerRows.size(); i++) {
163
                headerRows.get(i).addTableRowCell(new ContingencyTableRowCell("", 1));
117 164
            }
165
            headerRows.get(0).addTableRowCell(new ContingencyTableRowCell("Celkový " + valueFunction.getFunction() +
166
                    " z " + valueFunction.getName(), 1));
118 167
        }
119 168

  
169

  
170

  
120 171
        long startTime = System.nanoTime();
121
        values.remove(0);
122
        Node node = new Node();
123
        generateColumns(0, values, columnNodes, node);
124 172
        long stopTime = System.nanoTime();
125 173
        System.out.println("Colums list:" + TimeUnit.MILLISECONDS.convert((stopTime - startTime), TimeUnit.NANOSECONDS));
126 174

  
......
163 211
        long stopTime = System.nanoTime();
164 212
        System.out.println("Rows List:" + TimeUnit.MILLISECONDS.convert((stopTime - startTime), TimeUnit.NANOSECONDS));
165 213

  
166
        boolean[] usableColumns = new boolean[(valueFunctions.size() * columnNodes.size())];
167

  
168 214
        List<ContingencyTableRow> rowsToBeRemoved = new ArrayList<>();
169 215
        for (int i = 0; i < dataRows.size(); i++) {
170
            if (!fillRowWithData(dataRows.get(i), rowNodes.get(i), usableColumns)) {
216
            if (!fillRowWithData(dataRows.get(i), rowNodes.get(i))) {
171 217
                rowsToBeRemoved.add(dataRows.get(i));
172 218
            }
173 219
        }
174 220

  
175 221
        dataRows.removeAll(rowsToBeRemoved);
176 222

  
177
//        for (ContingencyTableRow row : dataRows) {
178
//            List<ContingencyTableRowCell> cellsToRemove = new ArrayList<>();
179
//            for (int i = 1; i < usableColumns.length; i++) {
180
//                if (!usableColumns[i - 1]) {
181
//                    cellsToRemove.add(row.getCells().get(i));
182
//                }
183
//            }
184
//            row.getCells().removeAll(cellsToRemove);
185
//            cellsToRemove.clear();
186
//        }
187

  
188
        ContingencyTableRow finalRow = new ContingencyTableRow(false, 0);
189
        finalRow.addTableRowCell(new ContingencyTableRowCell("Celkem", 1));
190

  
191
        int columnIndex = 0;
192
        List<ContingencyTableRowCell> valueCells = new ArrayList<>();
193
        for (ValueFunction valueFunction : valueFunctions) {
194
            for (Node columnNode : columnNodes) {
195
                if (true) {
196
                    finalRow.addTableRowCell(generateFilledCell(valueFunction.getFunction(), columnNode.getTotalResult(), columnNode.getTotalResultSum(),
197
                            columnNode.getTotalMin(), columnNode.getTotalMax(), columnNode.getTotalResultAvgSum(),
198
                            columnNode.getTotalResultAvg()));
199
                    columnIndex++;
200
                }
201
            }
202
            valueCells.add(generateFilledCell(valueFunction.getFunction(), valueFunction.getTotalResult(), valueFunction.getTotalResultSum(),
203
                    valueFunction.getTotalMin(), valueFunction.getTotalMax(), valueFunction.getTotalResultAvgSum(),
204
                    valueFunction.getTotalResultAvg()));
223
        if (!valueFunctions.get(0).getType().equals("Seznam") ||
224
                (valueFunctions.get(0).getType().equals("Seznam") && columnNames.size() > 0)) {
225
            dataRows.add(createFinalRow());
205 226
        }
206 227

  
207
        finalRow.addTableRowCells(valueCells);
208

  
209
        dataRows.add(finalRow);
210

  
211 228
        return dataRows;
212 229
    }
213 230

  
......
226 243
            for (String s : list) {
227 244
                StringBuilder levelString = new StringBuilder();
228 245
                for (int i = 0; i < index; i++) {
229
                    levelString.append("----");
246
                    levelString.append("      ");
230 247
                }
231 248
                levelString.append(s);
232 249
                ContingencyTableRow row = new ContingencyTableRow(false, index);
......
254 271
            for (String s : list) {
255 272
                Node node = new Node(prevNode);
256 273
                node.getValues().add(s);
257
                int newIndex = index + 1;
258
                generateColumns(newIndex, values, columnNodes, node);
259
                columnNodes.add(node);
274
                if (checkIfColumnIsUsable(node.getValues())) {
275
                    int newIndex = index + 1;
276
                    generateColumns(newIndex, values, columnNodes, node);
277
                    columnNodes.add(node);
278
                }
260 279
            }
261 280
        }
262 281
    }
......
266 285
     * @param row row to ne filled with data
267 286
     * @param node node of the row
268 287
     */
269
    private boolean fillRowWithData(ContingencyTableRow row, Node node, boolean[] usableColumns) {
288
    private boolean fillRowWithData(ContingencyTableRow row, Node node) {
270 289
        if (valueFunctions.size() == 0) {
271 290
            return true;
272 291
        }
......
284 303

  
285 304
        List<Integer> usableIDs = getUsableIDs(node);
286 305

  
306
        if (valueFunctions.get(0).getType().equals("Seznam") && !usableIDs.isEmpty()) {
307
            return true;
308
        }
309

  
287 310
        DoubleWrapper[] totals = new DoubleWrapper[valueFunctions.size()];
288 311
        initializeWrapperField(totals);
289 312

  
......
315 338
                            break;
316 339
                        }
317 340
                    }
341

  
318 342
                    // zvoleny sloupec z hodnot
319 343
                    if (tableColumns.get(valueFunction.getNameOfSelect()).getValues().get(usableID) == null) {
320 344
                        isUsable = false;
321 345
                    }
322 346

  
323
                    usableColumns[columnIndex] = isUsable;
324

  
325 347
                    if (isUsable) { // pokud lze hodnotu pouzit, prunik vsech hodnot sedi (ma nejakou hodnotu)
348
                        columnNode.setUsable(true);
326 349
                        isRowUsable = true;
327 350
                        isFilledCell = true;
328 351
                        computeValues(valueFunction, result, resultAvgSum, columnNode, isFirstMinMax,
......
345 368
            }
346 369
        }
347 370
        for (int i = 0; i < valueFunctions.size(); i++) {
371
            if (valueFunctions.get(i).getType().equals("Seznam")) {
372
                break;
373
            }
348 374
            if (!isFilledValueCells[i]) {
349 375
                row.addTableRowCell(new ContingencyTableRowCell("", 0));
350 376
            }
......
381 407
        return ids;
382 408
    }
383 409

  
410
    private boolean checkIfColumnIsUsable(List<String> columnNodeValues) {
411
        for (int i = 0; i < tableColumns.get(columnNames.get(0).getName()).getValues().size(); i++) {
412
            boolean isUsable = true;
413
            for (int j = 0; j < columnNodeValues.size(); j++) {
414
                if (!tableColumns.get(columnNames.get(j).getName()).getValues().get(i).equals(columnNodeValues.get(j))) {
415
                    isUsable = false;
416
                    break;
417
                }
418
            }
419

  
420
            if (isUsable) {
421
                return true;
422
            }
423
        }
424

  
425
        return false;
426
    }
427

  
384 428
    private void computeValues(ValueFunction valueFunction, DoubleWrapper result, DoubleWrapper resultAvgSum, Node columnNode,
385 429
                               BooleanWrapper isFirstMinMax, int usableID, boolean isValueTotal, boolean isSingleValueRow) {
386 430
        switch (valueFunction.getFunction()) {
......
534 578
            }
535 579
        }
536 580
    }
581

  
582
    private ContingencyTableRow createFinalRow() {
583
        ContingencyTableRow finalRow = new ContingencyTableRow(false, 0);
584
        finalRow.addTableRowCell(new ContingencyTableRowCell("Celkem", 1));
585

  
586
        List<ContingencyTableRowCell> valueCells = new ArrayList<>();
587
        for (ValueFunction valueFunction : valueFunctions) {
588
            for (Node columnNode : columnNodes) {
589
                    finalRow.addTableRowCell(generateFilledCell(valueFunction.getFunction(), columnNode.getTotalResult(), columnNode.getTotalResultSum(),
590
                            columnNode.getTotalMin(), columnNode.getTotalMax(), columnNode.getTotalResultAvgSum(),
591
                            columnNode.getTotalResultAvg()));
592
            }
593
            valueCells.add(generateFilledCell(valueFunction.getFunction(), valueFunction.getTotalResult(), valueFunction.getTotalResultSum(),
594
                    valueFunction.getTotalMin(), valueFunction.getTotalMax(), valueFunction.getTotalResultAvgSum(),
595
                    valueFunction.getTotalResultAvg()));
596
        }
597

  
598
        finalRow.addTableRowCells(valueCells);
599

  
600
        return finalRow;
601
    }
537 602
}

Také k dispozici: Unified diff