blob: 0160ff65b7b84575054d77b6093dbb19de016e02 [file] [log] [blame]
/*
* Set of methods for testing Json parsing methods, wordform services and Glemm services.
*
* 03.04.20/FB
*/
package test;
import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.List;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import de.korap.json.JsonTraverse;
import de.korap.json.TraversedPath;
import de.korap.services.glemm.client.GlemmClient;
import de.korap.services.utils.Utils;
import de.korap.services.WordformServices;
public class TestJson
{
static String inputFilename = "query.in.pretty.json";
static String outputFilename = "query.out.pretty.json";
final static boolean bSimulateWordformServices = true;
public static void main(String[] args)
{
File
inFile = new File(inputFilename);
File
outFile = new File(outputFilename);
ObjectMapper
objMapper = null;
JsonNode
jsonNode = null;
TraversedPath
tPath = null;
int
mode = JsonTraverse.REWRITE; // JsonTraverse.REWRITE or REWRITE_EXP
if( bSimulateWordformServices )
{
System.out.printf("TestJson: starting simulation of WordformServices...\n");
simulateWordformServices(inputFilename, outputFilename);
return;
}
System.out.printf("TestJson: test on '%s'...\n", inputFilename);
objMapper = new ObjectMapper();
// get full query as a JsonNode tree:
try {
// get full query from file as a JsonNode tree:
jsonNode = objMapper.readTree(inFile);
System.out.printf("TestJson: reading from input file: ok.\n");
// traverse query and collect lemma subqueries in a TraversedPath object:
tPath = new TraversedPath(objMapper);
JsonTraverse.traverseJsonTree(jsonNode, tPath, JsonTraverse.COLLECT);
System.out.printf("Debug: TestJson: gefundene Lemmata: #: %d, list: '%s'.\n", tPath.getLemmaCount(), tPath.getLemmata());
}
catch (IOException e) {
e.printStackTrace();
}
// Exit if no lemma subqueries found:
if( tPath == null || tPath.getLemmaCount() == 0 )
{
System.out.printf("TestJson: keine lemmata gefunden > Rewrite überspringen.\n");
return;
}
// Call GlemmServices to resolve lemma-Subqueries.
// This returns for each lemma a reference to a list of wordform instanciations
// (= instantiation list).
// This list is submitted to traversJsonTree() with the use of the tPath object.
// Simulates building of expansion lists, storing them in tPath:
if( mode == JsonTraverse.REWRITE)
{
simulateGlemmServicesConnect(tPath);
simulateGlemmServices(tPath);
}
else
simulateGlemmServicesWfs(tPath);
// Rewrite KoralQuery: use either JsonTraverse.REWRITE or .REWRITE_EXP:
JsonTraverse.traverseJsonTree(jsonNode, tPath, mode);
// return rewrittn Json Tree to file:
try {
objMapper.writerWithDefaultPrettyPrinter().writeValue(outFile, jsonNode);
}
catch (IOException e)
{
e.printStackTrace();
}
} // main
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* simulateWordformServices:
*
* - calls same methode to parse and rewrite KoralQuery that wordformServices do.
*
* 24.04.20/FB
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*/
static void simulateWordformServices(String inputFilename, String outputFilename)
{
final String func = "simulateWordformServices";
String
query = null,
newQuery = null;
try {
query = Utils.readFromInputStream("./" + inputFilename);
}
catch (IOException e1) {
e1.printStackTrace();
return;
}
System.out.printf("Debug: %s: sending query to WordformServices...\n", func);
newQuery = WordformServices.doPOST_handleWordformQueries(query) ;
System.out.printf("Debug: %s: receiving rewritten query from WordformServices...\n", func);
Utils.writeToOutputStream("./" + outputFilename, newQuery);
} // simulateWordformServices
/* simulateGlemmServicesClient
*
* 14.04.20/FB
*
*/
static int simulateGlemmServicesConnect(TraversedPath tPath)
{
final String func = "simulateGlemmServicesConnect";
GlemmClient
glemmClient = new GlemmClient();
glemmClient.GlemmConnect();
System.out.printf("Debug: %s: done.\n", func);
return 0;
} // simulateGlemmServicesClient
/* simulateGlemmServices
*
* input: list of lemmata
* output: list of lemmata (same order) with references to expansion lists.
* 07.04.20/FB
*/
static void simulateGlemmServices(TraversedPath tPath)
{
for(int i=0; i<tPath.getLemmaCount(); i++)
{
tPath.setRef("ref-" + tPath.getLemma(i) + ":" + i);
}
System.out.printf("tPath.refs: #=%d list='%s'.\n", tPath.getRefsCount(), tPath.getRefsasString());
} // simulateGlemmServices
/* simulateGlemmServicesWfs
*
* input: list of lemmata
* output: list of expansion lists (= wordforms), same order.
* 08.04.20/FB
*/
static void simulateGlemmServicesWfs(TraversedPath tPath)
{
for(int i=0; i<tPath.getLemmaCount(); i++)
{
List<String>
expList = new ArrayList(i+1);
for(int j=0; j<i+1; j++)
{
expList.add(tPath.getLemma(i) + j);
}
tPath.addExpList(expList);
}
System.out.printf("Debug: simulatedGlemmServicesWfs: %d expansion lists added.\n", tPath.getLemmaCount());
} // simulateGlemmServicesWfs
} // TestJson