3
3
import cucumber .runtime .table .CamelCaseStringConverter ;
4
4
5
5
import java .util .ArrayList ;
6
+ import java .util .LinkedHashMap ;
6
7
import java .util .List ;
8
+ import java .util .Map ;
7
9
8
10
import static java .util .Arrays .asList ;
9
11
10
12
public class ComplexTypeWriter extends CellWriter {
11
13
private final List <String > columnNames ;
12
- private final List <String > fieldNames = new ArrayList < String >();
13
- private final List < String > fieldValues = new ArrayList < String >() ;
14
+ private Map <String , String > fields = new LinkedHashMap < String , String >();
15
+ private String currentKey ;
14
16
15
17
private int nodeDepth = 0 ;
16
18
@@ -20,7 +22,7 @@ public ComplexTypeWriter(List<String> columnNames) {
20
22
21
23
@ Override
22
24
public List <String > getHeader () {
23
- return columnNames .isEmpty () ? fieldNames : columnNames ;
25
+ return columnNames .isEmpty () ? new ArrayList < String >( fields . keySet ()) : columnNames ;
24
26
}
25
27
26
28
@ Override
@@ -30,24 +32,24 @@ public List<String> getValues() {
30
32
String [] explicitFieldValues = new String [columnNames .size ()];
31
33
int n = 0 ;
32
34
for (String columnName : columnNames ) {
33
- int index = fieldNames . indexOf ( converter .map (columnName ) );
34
- if (index == - 1 ) {
35
- explicitFieldValues [n ] = "" ;
35
+ final String convertedColumnName = converter .map (columnName );
36
+ if (fields . containsKey ( convertedColumnName ) ) {
37
+ explicitFieldValues [n ] = fields . get ( convertedColumnName ) ;
36
38
} else {
37
- explicitFieldValues [n ] = fieldValues . get ( index ) ;
39
+ explicitFieldValues [n ] = "" ;
38
40
}
39
41
n ++;
40
42
}
41
43
return asList (explicitFieldValues );
42
44
} else {
43
- return fieldValues ;
45
+ return new ArrayList < String >( fields . values ()) ;
44
46
}
45
47
}
46
48
47
49
@ Override
48
50
public void startNode (String name ) {
49
51
if (nodeDepth == 1 ) {
50
- this . fieldNames . add ( name ) ;
52
+ currentKey = name ;
51
53
}
52
54
nodeDepth ++;
53
55
}
@@ -58,12 +60,13 @@ public void addAttribute(String name, String value) {
58
60
59
61
@ Override
60
62
public void setValue (String value ) {
61
- fieldValues . add ( value == null ? "" : value );
63
+ fields . put ( currentKey , value == null ? "" : value );
62
64
}
63
65
64
66
@ Override
65
67
public void endNode () {
66
68
nodeDepth --;
69
+ currentKey = null ;
67
70
}
68
71
69
72
@ Override
0 commit comments