Skip to content

Commit 057d61e

Browse files
Merge pull request #39 from ukubuka/feature/UkubukaTransformer
Transformer Changes
2 parents 5baf7e8 + 3e76970 commit 057d61e

File tree

4 files changed

+405
-91
lines changed

4 files changed

+405
-91
lines changed

src/main/java/com/ukubuka/core/evaluator/UkubukaExpressionEvaluator.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@ public class UkubukaExpressionEvaluator {
3131
*
3232
* @return Evaluated Expression
3333
*/
34-
public Object evaluate(final FileRecord fileRecord, final String expression) {
34+
public Object evaluate(final FileRecord fileRecord,
35+
final String expression) {
3536
LOGGER.info("Evaluating Expression: " + expression);
36-
return expressionParser.parseExpression(
37-
expression.substring(1, expression.length() - 1)).getValue(
38-
new StandardEvaluationContext(fileRecord));
37+
return expressionParser.parseExpression(expression)
38+
.getValue(new StandardEvaluationContext(fileRecord));
3939
}
4040
}

src/main/java/com/ukubuka/core/execute/UkubukaExecutorService.java

Lines changed: 37 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@
3030
import com.ukubuka.core.model.UkubukaSchema.Load;
3131
import com.ukubuka.core.model.UkubukaSchema.Transform;
3232
import com.ukubuka.core.model.UkubukaSchema.TransformOperations;
33+
import com.ukubuka.core.operations.transform.UkubukaTransformer;
3334
import com.ukubuka.core.parser.UkubukaParser;
3435
import com.ukubuka.core.reader.UkubukaReader;
35-
import com.ukubuka.core.transform.UkubukaTransformer;
3636
import com.ukubuka.core.utilities.Constants;
3737
import com.ukubuka.core.utilities.Utilities;
3838
import com.ukubuka.core.writer.UkubukaWriter;
@@ -80,8 +80,8 @@ public class UkubukaExecutorService {
8080
* @throws TransformException
8181
* @throws WriterException
8282
*/
83-
public void execute(final String ukubukaSchemaFile) throws ParserException,
84-
TransformException, WriterException {
83+
public void execute(final String ukubukaSchemaFile)
84+
throws ParserException, TransformException, WriterException {
8585
/* Create An In-Memory Data Store */
8686
Map<String, FileContents> dataFiles = new HashMap<>();
8787

@@ -97,18 +97,18 @@ public void execute(final String ukubukaSchemaFile) throws ParserException,
9797
/* Get File Type */
9898
switch (extract.getType()) {
9999
/* Delimited File */
100-
case CSV:
101-
fileContents = delimitedFileParser.parseFile(
102-
extract.getLocation(), extract.getFlags());
103-
break;
104-
/* XML File */
105-
case XML:
106-
fileContents = xmlParser.parseFile(extract.getLocation(),
107-
extract.getFlags());
108-
break;
109-
/* Unsupported File */
110-
default:
111-
throw new ParserException("File Type Not Supported!");
100+
case CSV:
101+
fileContents = delimitedFileParser
102+
.parseFile(extract.getLocation(), extract.getFlags());
103+
break;
104+
/* XML File */
105+
case XML:
106+
fileContents = xmlParser.parseFile(extract.getLocation(),
107+
extract.getFlags());
108+
break;
109+
/* Unsupported File */
110+
default:
111+
throw new ParserException("File Type Not Supported!");
112112
}
113113

114114
/* Perform Transformations */
@@ -162,24 +162,25 @@ private void performLoad(final Load load,
162162
/* Get File Contents */
163163
FileContents fileContents = new FileContents(
164164
new ArrayList<String>(), new ArrayList<FileRecord>());
165-
fileContents.setHeader(dataFiles.get(
166-
load.getOperations().getHeader()).getHeader());
165+
fileContents.setHeader(dataFiles
166+
.get(load.getOperations().getHeader()).getHeader());
167167

168168
/* Iterate Data Sources */
169169
for (final String fileId : load.getOperations().getData()) {
170170
/* Check Flag For DISTINCT */
171-
fileContents.getData().addAll(
172-
LoadOperation.DISTINCT == load.getOperations()
173-
.getFilter() ? new HashSet<>(dataFiles.get(
174-
fileId).getData()) : dataFiles.get(fileId)
175-
.getData());
171+
fileContents.getData()
172+
.addAll(LoadOperation.DISTINCT == load.getOperations()
173+
.getFilter()
174+
? new HashSet<>(
175+
dataFiles.get(fileId).getData())
176+
: dataFiles.get(fileId).getData());
176177
}
177178

178179
/* Write File */
179180
LOGGER.info("Writing File...");
180181
try {
181-
LOGGER.info("ID: " + load.getId() + " | Type: "
182-
+ load.getType() + " | Location: " + load.getLocation());
182+
LOGGER.info("ID: " + load.getId() + " | Type: " + load.getType()
183+
+ " | Location: " + load.getLocation());
183184
writeFile(load.getType(), load.getLocation(),
184185
fileContents.getHeader(), fileContents.getData());
185186
} catch (ParserException | IOException ex) {
@@ -204,18 +205,18 @@ private void writeFile(final SupportedFileType supportedFileType,
204205
/* Get File Type */
205206
switch (supportedFileType) {
206207
/* Delimited File */
207-
case CSV:
208-
Utilities.writeFile(completeFileName,
209-
writer.writeCSV(header, data).toString());
210-
break;
211-
/* XML File */
212-
case JSON:
213-
Utilities.writeFile(completeFileName, writer.prettyPrint(writer
214-
.writeJSON(header, data).toString()));
215-
break;
216-
/* Unsupported File */
217-
default:
218-
throw new ParserException("File Type Not Supported!");
208+
case CSV:
209+
Utilities.writeFile(completeFileName,
210+
writer.writeCSV(header, data).toString());
211+
break;
212+
/* XML File */
213+
case JSON:
214+
Utilities.writeFile(completeFileName, writer
215+
.prettyPrint(writer.writeJSON(header, data).toString()));
216+
break;
217+
/* Unsupported File */
218+
default:
219+
throw new ParserException("File Type Not Supported!");
219220
}
220221
}
221222

src/main/java/com/ukubuka/core/transform/UkubukaTransformer.java renamed to src/main/java/com/ukubuka/core/operations/transform/UkubukaTransformer.java

Lines changed: 45 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.ukubuka.core.transform;
1+
package com.ukubuka.core.operations.transform;
22

33
import java.util.Collections;
44
import java.util.List;
@@ -42,24 +42,22 @@ public class UkubukaTransformer {
4242
*/
4343
public void performOperations(List<String> fileHeader,
4444
List<FileRecord> fileRecords,
45-
List<TransformOperations> operationsList) throws TransformException {
45+
List<TransformOperations> operationsList)
46+
throws TransformException {
4647
/* Iterate Operations */
4748
for (final TransformOperations operation : operationsList) {
4849
LOGGER.info("Performing Transform: HC" + operation.hashCode());
4950

5051
/* Get Source & Target Values */
51-
String source = fileHeader.get(0).indexOf(
52-
Constants.COLUMN_ENCOLSING_QUOTE) >= 0 ? Constants.COLUMN_ENCOLSING_QUOTE
53-
+ operation.getSource() + Constants.COLUMN_ENCOLSING_QUOTE
54-
: operation.getSource();
55-
String target = Constants.COLUMN_ENCOLSING_QUOTE
56-
+ operation.getTarget() + Constants.COLUMN_ENCOLSING_QUOTE;
52+
String source = operation.getSource();
53+
String target = operation.getTarget();
5754

5855
/* Check Whether Column Exists */
5956
if (operation.getType() != TransformOperation.ADD
57+
&& operation.getType() != TransformOperation.NEW
6058
&& !fileHeader.contains(source)) {
61-
throw new TransformException("Column Not Found! Name: "
62-
+ source + " | Header: " + fileHeader);
59+
throw new TransformException("Column Not Found! Name: " + source
60+
+ " | Header: " + fileHeader);
6361
}
6462

6563
/* Perform Operation */
@@ -84,43 +82,39 @@ private void performOperation(List<String> fileHeader,
8482
final String target) throws TransformException {
8583
switch (operationType) {
8684
/* Column Rename Operation */
87-
case RENAME:
88-
doRename(fileHeader, source, target);
89-
break;
90-
91-
/* Column Delete Operation */
92-
case DELETE:
93-
doDelete(fileHeader, fileRecords, source);
94-
break;
95-
96-
/* Column Delete Operation */
97-
case REMOVE:
98-
doDelete(fileHeader, fileRecords, source);
99-
break;
100-
101-
/* Column Add Operation */
102-
case ADD:
103-
doAdd(fileHeader, fileRecords, source, target);
104-
break;
105-
106-
/* Column Add Operation */
107-
case NEW:
108-
doAdd(fileHeader, fileRecords, source, target);
109-
break;
110-
111-
/* Column Move Operation */
112-
case MOVE:
113-
doMove(fileHeader, fileRecords, source, target);
114-
break;
115-
116-
/* Column Swap Operation */
117-
case SWAP:
118-
doSwap(fileHeader, fileRecords, source, target);
119-
break;
120-
121-
/* Unsupported Operation */
122-
default:
123-
throw new TransformException("Operation Not Supported!");
85+
case RENAME:
86+
doRename(fileHeader, source, target);
87+
break;
88+
89+
/* Column Delete Operation */
90+
case DELETE:
91+
doDelete(fileHeader, fileRecords, source);
92+
break;
93+
94+
/* Column Delete Operation */
95+
case REMOVE:
96+
doDelete(fileHeader, fileRecords, source);
97+
break;
98+
99+
/* Column Add Operation */
100+
case ADD:
101+
doAdd(fileHeader, fileRecords, source, target);
102+
break;
103+
104+
/* Column Add Operation */
105+
case NEW:
106+
doAdd(fileHeader, fileRecords, source, target);
107+
break;
108+
109+
/* Column Move Operation */
110+
case MOVE:
111+
doMove(fileHeader, fileRecords, source, target);
112+
break;
113+
114+
/* Column Swap Operation */
115+
case SWAP:
116+
doSwap(fileHeader, fileRecords, source, target);
117+
break;
124118
}
125119
}
126120

@@ -147,8 +141,8 @@ private void doRename(List<String> fileHeader, final String source,
147141
* @param source
148142
* @param rowData
149143
*/
150-
private void doDelete(List<String> fileHeader,
151-
List<FileRecord> fileRecords, final String source) {
144+
private void doDelete(List<String> fileHeader, List<FileRecord> fileRecords,
145+
final String source) {
152146
LOGGER.info("Performing Delete Operation - Source: " + source
153147
+ " | Header: " + fileHeader);
154148

@@ -182,8 +176,8 @@ private void doAdd(List<String> fileHeader, List<FileRecord> fileRecords,
182176

183177
/* Add New Column Values */
184178
for (final FileRecord fileRecord : fileRecords) {
185-
String expressionValue = String.valueOf(expressionEvaluator
186-
.evaluate(fileRecord, target));
179+
String expressionValue = String
180+
.valueOf(expressionEvaluator.evaluate(fileRecord, target));
187181
LOGGER.info("Evaluated Expression Value: " + expressionValue);
188182
fileRecord.getData().add(expressionValue);
189183
}

0 commit comments

Comments
 (0)