3
3
import configuration .DataConfigEntry ;
4
4
import configuration .ProcessorConfigEntry ;
5
5
import graql .lang .Graql ;
6
- import graql .lang .statement .Statement ;
7
- import graql .lang .statement .StatementInstance ;
6
+ import graql .lang .pattern .Pattern ;
7
+ import graql .lang .pattern .variable .ThingVariable ;
8
+ import graql .lang .pattern .variable .ThingVariable .Thing ;
9
+ import graql .lang .pattern .variable .UnboundVariable ;
8
10
import org .apache .logging .log4j .LogManager ;
9
11
import org .apache .logging .log4j .Logger ;
10
12
11
13
import java .util .ArrayList ;
12
14
import java .util .Arrays ;
15
+ import java .util .HashMap ;
13
16
import java .util .Map ;
14
17
15
18
import static generator .GeneratorUtil .*;
@@ -21,38 +24,42 @@ public class AppendAttributeGenerator extends InsertGenerator {
21
24
private static final Logger appLogger = LogManager .getLogger ("com.bayer.dt.grami" );
22
25
private static final Logger dataLogger = LogManager .getLogger ("com.bayer.dt.grami.data" );
23
26
24
- public AppendAttributeGenerator (DataConfigEntry dataConfigEntry , ProcessorConfigEntry processorConfigEntry ) {
27
+ public AppendAttributeGenerator (DataConfigEntry dataConfigEntry ,
28
+ ProcessorConfigEntry processorConfigEntry ) {
25
29
super ();
26
30
this .dce = dataConfigEntry ;
27
31
this .pce = processorConfigEntry ;
28
32
appLogger .debug ("Creating AppendAttribute for processor " + processorConfigEntry .getProcessor () + " of type " + processorConfigEntry .getProcessorType ());
29
33
}
30
34
31
- public ArrayList <ArrayList <ArrayList <Statement >>> graknAppendAttributeInsert (ArrayList <String > rows , String header ) throws Exception {
32
- ArrayList <ArrayList <ArrayList <Statement >>> matchInsertStatements = new ArrayList <>();
35
+ public HashMap <String , ArrayList <ArrayList <ThingVariable <?>>>> graknAppendAttributeInsert (ArrayList <String > rows ,
36
+ String header ) throws Exception {
37
+ HashMap <String , ArrayList <ArrayList <ThingVariable <?>>>> matchInsertPatterns = new HashMap <>();
33
38
34
- ArrayList <ArrayList <Statement >> matchStatements = new ArrayList <>();
35
- ArrayList <ArrayList <Statement >> insertStatements = new ArrayList <>();
39
+ ArrayList <ArrayList <ThingVariable <?>>> matchPatterns = new ArrayList <>();
40
+ ArrayList <ArrayList <ThingVariable <?>>> insertPatterns = new ArrayList <>();
36
41
37
42
int insertCounter = 0 ;
38
43
39
44
for (String row : rows ) {
40
- ArrayList <ArrayList <Statement >> tmp = graknAppendAttributeQueryFromRow (row , header , insertCounter );
45
+ ArrayList <ArrayList <ThingVariable <?> >> tmp = graknAppendAttributeQueryFromRow (row , header , insertCounter );
41
46
if (tmp != null ) {
42
47
if (tmp .get (0 ) != null && tmp .get (1 ) != null ) {
43
- matchStatements .add (tmp .get (0 ));
44
- insertStatements .add (tmp .get (1 ));
48
+ matchPatterns .add (tmp .get (0 ));
49
+ insertPatterns .add (tmp .get (1 ));
45
50
insertCounter ++;
46
51
}
47
52
}
48
53
49
54
}
50
- matchInsertStatements . add ( matchStatements );
51
- matchInsertStatements . add ( insertStatements );
52
- return matchInsertStatements ;
55
+ matchInsertPatterns . put ( "match" , matchPatterns );
56
+ matchInsertPatterns . put ( "insert" , insertPatterns );
57
+ return matchInsertPatterns ;
53
58
}
54
59
55
- public ArrayList <ArrayList <Statement >> graknAppendAttributeQueryFromRow (String row , String header , int insertCounter ) throws Exception {
60
+ public ArrayList <ArrayList <ThingVariable <?>>> graknAppendAttributeQueryFromRow (String row ,
61
+ String header ,
62
+ int insertCounter ) throws Exception {
56
63
String fileSeparator = dce .getSeparator ();
57
64
String [] rowTokens = row .split (fileSeparator );
58
65
String [] columnNames = header .split (fileSeparator );
@@ -63,35 +70,38 @@ public ArrayList<ArrayList<Statement>> graknAppendAttributeQueryFromRow(String r
63
70
throw new IllegalArgumentException ("data config entry for " + dce .getDataPath () + " is incomplete - it needs at least one attribute used for matching (\" match\" : true) and at least one attribute to be appended (\" match\" : false or not set at all" );
64
71
}
65
72
66
- ArrayList <Statement > matchStatements = new ArrayList <>();
67
- ArrayList <Statement > insertStatements = new ArrayList <>();
73
+ ArrayList <ThingVariable <?>> matchPatterns = new ArrayList <>();
74
+ ArrayList <ThingVariable <?>> insertPatterns = new ArrayList <>();
68
75
69
76
// get all attributes that are isMatch() --> construct match clause
70
- StatementInstance appendAttributeMatchStatement = addEntityToMatchStatement (insertCounter );
77
+ Thing appendAttributeMatchPattern = addEntityToMatchPattern (insertCounter );
71
78
for (DataConfigEntry .DataConfigGeneratorMapping generatorMappingForMatchAttribute : dce .getAttributes ()) {
72
- if (generatorMappingForMatchAttribute .isMatch ()){
73
- appendAttributeMatchStatement = addAttribute (rowTokens , appendAttributeMatchStatement , columnNames , generatorMappingForMatchAttribute , pce , generatorMappingForMatchAttribute .getPreprocessor ());
79
+ if (generatorMappingForMatchAttribute .isMatch ()) {
80
+ appendAttributeMatchPattern = addAttribute (rowTokens , appendAttributeMatchPattern , columnNames , generatorMappingForMatchAttribute , pce , generatorMappingForMatchAttribute .getPreprocessor ());
74
81
}
75
82
}
76
- matchStatements .add (appendAttributeMatchStatement );
83
+ matchPatterns .add (appendAttributeMatchPattern );
77
84
78
85
// get all attributes that are !isMatch() --> construct insert clause
79
- Statement appendAttributeInsertStatement = addEntityToInsertStatement (insertCounter );
86
+ UnboundVariable thingVar = addEntityToInsertPattern (insertCounter );
87
+ Thing appendAttributeInsertPattern = null ;
80
88
for (DataConfigEntry .DataConfigGeneratorMapping generatorMappingForAppendAttribute : dce .getAttributes ()) {
81
- if (!generatorMappingForAppendAttribute .isMatch ()){
82
- appendAttributeInsertStatement = addAttribute (rowTokens , appendAttributeMatchStatement , columnNames , generatorMappingForAppendAttribute , pce , generatorMappingForAppendAttribute .getPreprocessor ());
89
+ if (!generatorMappingForAppendAttribute .isMatch ()) {
90
+ appendAttributeInsertPattern = addAttribute (rowTokens , thingVar , columnNames , generatorMappingForAppendAttribute , pce , generatorMappingForAppendAttribute .getPreprocessor ());
83
91
}
84
92
}
85
- insertStatements .add ((StatementInstance ) appendAttributeInsertStatement );
93
+ if (appendAttributeInsertPattern != null ) {
94
+ insertPatterns .add (appendAttributeInsertPattern );
95
+ }
86
96
87
- ArrayList <ArrayList <Statement >> assembledStatements = new ArrayList <>();
88
- assembledStatements .add (matchStatements );
89
- assembledStatements .add (insertStatements );
97
+ ArrayList <ArrayList <ThingVariable <?>>> assembledPatterns = new ArrayList <>();
98
+ assembledPatterns .add (matchPatterns );
99
+ assembledPatterns .add (insertPatterns );
90
100
91
101
92
- if (isValid (assembledStatements )) {
93
- appLogger .debug ("valid query: <" + assembleQuery (assembledStatements ).toString () + ">" );
94
- return assembledStatements ;
102
+ if (isValid (assembledPatterns )) {
103
+ appLogger .debug ("valid query: <" + assembleQuery (assembledPatterns ).toString () + ">" );
104
+ return assembledPatterns ;
95
105
} else {
96
106
dataLogger .warn ("in datapath <" + dce .getDataPath () + ">: skipped row b/c does not contain at least one match attribute and one insert attribute. Faulty tokenized row: " + Arrays .toString (rowTokens ));
97
107
return null ;
@@ -102,7 +112,7 @@ private boolean validateDataConfigEntry() {
102
112
boolean containsMatchAttribute = false ;
103
113
boolean containsAppendAttribute = false ;
104
114
for (DataConfigEntry .DataConfigGeneratorMapping attributeMapping : dce .getAttributes ()) {
105
- if (attributeMapping .isMatch ()){
115
+ if (attributeMapping .isMatch ()) {
106
116
containsMatchAttribute = true ;
107
117
}
108
118
if (!attributeMapping .isMatch ()) {
@@ -112,51 +122,58 @@ private boolean validateDataConfigEntry() {
112
122
return containsMatchAttribute && containsAppendAttribute ;
113
123
}
114
124
115
- private StatementInstance addEntityToMatchStatement (int insertCounter ) {
125
+ private Thing addEntityToMatchPattern (int insertCounter ) {
116
126
if (pce .getSchemaType () != null ) {
117
- return Graql .var ("e-" + insertCounter ).isa (pce .getSchemaType ());
127
+ // return Graql.var("e-" + insertCounter).isa(pce.getSchemaType());
128
+ return Graql .var ("e" ).isa (pce .getSchemaType ());
118
129
} else {
119
130
throw new IllegalArgumentException ("Required field <schemaType> not set in processor " + pce .getProcessor ());
120
131
}
121
132
}
122
133
123
- private Statement addEntityToInsertStatement (int insertCounter ) {
134
+ private UnboundVariable addEntityToInsertPattern (int insertCounter ) {
124
135
if (pce .getSchemaType () != null ) {
125
- return Graql .var ("e-" + insertCounter );
136
+ // return Graql.var("e-" + insertCounter);
137
+ return Graql .var ("e" );
126
138
} else {
127
139
throw new IllegalArgumentException ("Required field <schemaType> not set in processor " + pce .getProcessor ());
128
140
}
129
141
}
130
142
131
- private String assembleQuery (ArrayList <ArrayList <Statement >> queries ) {
143
+ private String assembleQuery (ArrayList <ArrayList <ThingVariable <?> >> queries ) {
132
144
StringBuilder ret = new StringBuilder ();
133
- for (Statement st : queries .get (0 )) {
145
+ for (ThingVariable st : queries .get (0 )) {
134
146
ret .append (st .toString ());
135
147
}
136
148
ret .append (queries .get (1 ).get (0 ).toString ());
137
149
return ret .toString ();
138
150
}
139
151
140
- private boolean isValid (ArrayList <ArrayList <Statement >> si ) {
141
- ArrayList <Statement > matchStatements = si .get (0 );
142
- ArrayList <Statement > insertStatements = si .get (1 );
143
- StringBuilder matchStatement = new StringBuilder ();
144
- for (Statement st :matchStatements ) {
145
- matchStatement .append (st .toString ());
152
+ private boolean isValid (ArrayList <ArrayList <ThingVariable <?>>> si ) {
153
+ ArrayList <ThingVariable <?>> matchPatterns = si .get (0 );
154
+ ArrayList <ThingVariable <?>> insertPatterns = si .get (1 );
155
+
156
+ if (insertPatterns .size () < 1 ) {
157
+ return false ;
158
+ }
159
+
160
+ StringBuilder matchPattern = new StringBuilder ();
161
+ for (Pattern st : matchPatterns ) {
162
+ matchPattern .append (st .toString ());
146
163
}
147
- String insertStatement = insertStatements .get (0 ).toString ();
164
+ String insertPattern = insertPatterns .get (0 ).toString ();
148
165
149
166
// missing match attribute
150
- for (DataConfigEntry .DataConfigGeneratorMapping attributeMapping : dce .getMatchAttributes ()) {
167
+ for (DataConfigEntry .DataConfigGeneratorMapping attributeMapping : dce .getMatchAttributes ()) {
151
168
String generatorKey = attributeMapping .getGenerator ();
152
169
ProcessorConfigEntry .ConceptGenerator generatorEntry = pce .getAttributeGenerator (generatorKey );
153
- if (!matchStatement .toString ().contains ("has " + generatorEntry .getAttributeType ())) {
170
+ if (!matchPattern .toString ().contains ("has " + generatorEntry .getAttributeType ())) {
154
171
return false ;
155
172
}
156
173
}
157
174
// missing required insert attribute
158
- for (Map .Entry <String , ProcessorConfigEntry .ConceptGenerator > generatorEntry : pce .getRequiredAttributes ().entrySet ()) {
159
- if (!insertStatement .contains ("has " + generatorEntry .getValue ().getAttributeType ())) {
175
+ for (Map .Entry <String , ProcessorConfigEntry .ConceptGenerator > generatorEntry : pce .getRequiredAttributes ().entrySet ()) {
176
+ if (!insertPattern .contains ("has " + generatorEntry .getValue ().getAttributeType ())) {
160
177
return false ;
161
178
}
162
179
}
0 commit comments