| /* |
| * 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 |