private TemplateRecordConfiguration createSingleQuoteRecord() { TemplateRecordConfiguration record = new TemplateRecordConfiguration(); record.setName("single"); record.setOrder(4); record.setPrecedingPath("Document > Link:nth-of-type(3)"); record.setFollowingPath("Document > Table"); record.setRepeat(false); record.setKind(Kind.NAMED); List<TemplateFieldConfiguration> fields = ImmutableList.of( new TemplateFieldConfiguration("quote", "Document > Quotation:nth-of-type(4)")); record.setFieldPaths(fields); return record; }
protected TemplateRecordConfiguration assertNamedRecord( List<TemplateRecordConfiguration> definitions) { TemplateRecordConfiguration record = definitions .stream() .filter(p -> p.getKind().equals(Kind.NAMED) && p.getName().equals("record1")) .collect(Collectors.toList()) .get(0); assertEquals(Kind.NAMED, record.getKind()); assertEquals(2, record.getFields().size()); for (TemplateFieldConfiguration field : record.getFields()) { String name = field.getName(); if (name.equals("field1")) { assertEquals("Paragraph:nth-of-type(2)", field.getPath()); } else if (field.getName().equals("field2")) { assertEquals("Paragraph:nth-of-type(3)", field.getPath()); } else { fail("field not expected: " + name); } } assertEquals("Paragraph:nth-of-type(1)", record.getPrecedingPath()); assertEquals("Paragraph:nth-of-type(4)", record.getFollowingPath()); return record; }
private Path createNoFieldsRecordDefinition() throws IOException { List<TemplateFieldConfiguration> fields = new ArrayList<>(); Path definitionFile = Files.createTempFile( tempDirectory, AbstractRecordAnnotatorTest.class.getSimpleName(), ".yml"); String precedingPath = "Paragraph:nth-of-type(3)"; String followingPath = "Paragraph:nth-of-type(5)"; TemplateRecordConfiguration recordDefinition = new TemplateRecordConfiguration("test", precedingPath, followingPath, fields, 0); YAMLMAPPER.writeValue(definitionFile.toFile(), singleton(recordDefinition)); return definitionFile; }
protected void assertDefaultRecord(List<TemplateRecordConfiguration> definitions) { TemplateRecordConfiguration defaultRecord = definitions .stream() .filter(p -> p.getKind().equals(Kind.DEFAULT)) .collect(Collectors.toList()) .get(0); assertEquals(null, defaultRecord.getName()); assertEquals(1, defaultRecord.getFields().size()); TemplateFieldConfiguration field = defaultRecord.getFields().get(0); assertEquals("noRecordField", field.getName()); assertEquals("Paragraph:nth-of-type(1)", field.getPath()); }
private void checkDefinitions() throws IOException, JsonParseException, JsonMappingException { Path yamlFile = getDefinitionPath(); List<TemplateRecordConfiguration> definitions = readDefinitions(yamlFile); TemplateRecordConfiguration record = assertNamedRecord(definitions); assertTrue(record.isRepeat()); assertNull(record.getMinimalRepeat()); assertEquals( ImmutableList.of("Paragraph:nth-of-type(2)", "Paragraph:nth-of-type(3)"), record.getCoveredPaths()); assertDefaultRecord(definitions); Files.delete(yamlFile); } }
private void checkDefinitions() throws IOException, JsonParseException, JsonMappingException { Path yamlFile = getDefinitionPath(); List<TemplateRecordConfiguration> definitions = readDefinitions(yamlFile); TemplateRecordConfiguration record = assertNamedRecord(definitions); assertFalse(record.isRepeat()); assertDefaultRecord(definitions); Files.delete(yamlFile); } }
protected Path createRecord(String name, TemplateFieldConfiguration... fields) throws IOException, JsonGenerationException, JsonMappingException { Path definitionFile = Files.createTempFile( tempDirectory, AbstractRecordAnnotatorTest.class.getSimpleName(), ".yml"); String precedingPath = "Paragraph:nth-of-type(1)"; String followingPath = "Paragraph:nth-of-type(5)"; TemplateRecordConfiguration recordDefinition = new TemplateRecordConfiguration( name, precedingPath, followingPath, Arrays.asList(fields), 0); YAMLMAPPER.writeValue(definitionFile.toFile(), singleton(recordDefinition)); return definitionFile; } }
private TemplateRecordConfiguration createSingleQuoteRecord() { TemplateRecordConfiguration record = new TemplateRecordConfiguration(); record.setName("single"); record.setOrder(4); record.setPrecedingPath("Document > Link:nth-of-type(3)"); record.setFollowingPath("Document > Table"); record.setRepeat(false); record.setKind(Kind.NAMED); List<TemplateFieldConfiguration> fields = ImmutableList.of( new TemplateFieldConfiguration("quote", "Document > Quotation:nth-of-type(4)")); record.setFieldPaths(fields); return record; }
@Override protected void doProcess(final JCas jCas) throws AnalysisEngineProcessException { CoveringStructureHierarchy structureHierarchy = CoveringStructureHierarchy.build(jCas, structuralClasses); Collection<TemplateRecordDefinition> recordDefinitions = JCasUtil.select(jCas, TemplateRecordDefinition.class); Collection<TemplateFieldDefinition> fieldDefinitions = new HashSet<>(JCasUtil.select(jCas, TemplateFieldDefinition.class)); Map<String, TemplateRecordConfiguration> recordConfigurations = new HashMap<>(); for (TemplateRecordDefinition recordDefinition : recordDefinitions) { processRecordDefinition( jCas, structureHierarchy, fieldDefinitions, recordConfigurations, recordDefinition); } List<TemplateRecordConfiguration> configurations = new ArrayList<>(recordConfigurations.values()); if (!fieldDefinitions.isEmpty()) { for (TemplateFieldDefinition field : fieldDefinitions) { configurations.add( new TemplateRecordConfiguration( makeFields(structureHierarchy, ImmutableList.of(field)), field.getBegin())); } } String documentSourceName = SourceUtils.getDocumentSourceBaseName(jCas); try (Writer w = createOutputWriter(documentSourceName)) { Collections.sort(configurations, Comparator.comparing(TemplateRecordConfiguration::getOrder)); objectMapper.writeValue(w, configurations); } catch (IOException e) { throw new AnalysisEngineProcessException(e); } }
private TemplateRecordConfiguration createMissingRepeatQuoteRecord() { TemplateRecordConfiguration record = new TemplateRecordConfiguration(); record.setName("missing"); record.setOrder(3); record.setPrecedingPath("Document > Link:nth-of-type(2)"); record.setFollowingPath("Document > Link:nth-of-type(3)"); record.setCoveredPaths(ImmutableList.of("Document > Quotation")); record.setMinimalRepeat("Document > Quotation"); record.setRepeat(true); record.setKind(Kind.NAMED); List<TemplateFieldConfiguration> fields = ImmutableList.of( new TemplateFieldConfiguration("quote", "Document > Quotation:nth-of-type(3)")); record.setFieldPaths(fields); return record; }
private Path createDefaultRecordDefinition() throws IOException { List<TemplateFieldConfiguration> fields = new ArrayList<>(); fields.add(new TemplateFieldConfiguration("field", "Paragraph:nth-of-type(2)")); Path definitionFile = Files.createTempFile( tempDirectory, AbstractRecordAnnotatorTest.class.getSimpleName(), ".yml"); TemplateRecordConfiguration recordDefinition = new TemplateRecordConfiguration(fields, 0); YAMLMAPPER.writeValue(definitionFile.toFile(), singleton(recordDefinition)); return definitionFile; }
private TemplateRecordConfiguration createRepeatQuoteRecord2() { TemplateRecordConfiguration record = new TemplateRecordConfiguration(); record.setName("quote2"); record.setOrder(2); record.setPrecedingPath("Document > Link"); record.setFollowingPath("Document > Link:nth-of-type(2)"); record.setCoveredPaths(ImmutableList.of("Document > Quotation")); record.setMinimalRepeat("Document > Quotation"); record.setRepeat(true); record.setKind(Kind.NAMED); List<TemplateFieldConfiguration> fields = ImmutableList.of( new TemplateFieldConfiguration("quote", "Document > Quotation:nth-of-type(2)")); record.setFieldPaths(fields); return record; }
private Path createNoFollowingRecordDefinition() throws IOException { List<TemplateFieldConfiguration> fields = new ArrayList<>(); fields.add(new TemplateFieldConfiguration("field", "Paragraph:nth-of-type(6)")); Path definitionFile = Files.createTempFile( tempDirectory, AbstractRecordAnnotatorTest.class.getSimpleName(), ".yml"); String precedingPath = "Paragraph:nth-of-type(5)"; String followingPath = ""; TemplateRecordConfiguration recordDefinition = new TemplateRecordConfiguration("test", precedingPath, followingPath, fields, 0); YAMLMAPPER.writeValue(definitionFile.toFile(), singleton(recordDefinition)); return definitionFile; } }
private TemplateRecordConfiguration createRepeatQuoteRecord1() { TemplateRecordConfiguration record = new TemplateRecordConfiguration(); record.setName("quote1"); record.setOrder(1); record.setPrecedingPath(""); record.setFollowingPath("Document > Link"); record.setCoveredPaths(ImmutableList.of("Document > Quotation")); record.setMinimalRepeat("Document > Quotation"); record.setRepeat(true); record.setKind(Kind.NAMED); List<TemplateFieldConfiguration> fields = ImmutableList.of( new TemplateFieldConfiguration("quote", "Document > Quotation:nth-of-type(1)")); record.setFieldPaths(fields); return record; }
private Path createGoodRecordDefinitionRequiredMissing() throws IOException { List<TemplateFieldConfiguration> fields = new ArrayList<>(); TemplateFieldConfiguration field = new TemplateFieldConfiguration("field", "Paragraph:nth-of-type(5)"); field.setRequired(true); fields.add(field); Path definitionFile = Files.createTempFile( tempDirectory, AbstractRecordAnnotatorTest.class.getSimpleName(), ".yml"); TemplateRecordConfiguration recordDefinition = new TemplateRecordConfiguration(fields, 0); YAMLMAPPER.writeValue(definitionFile.toFile(), singleton(recordDefinition)); return definitionFile; }
private TemplateRecordConfiguration createRepeatQuoteRecord1() { TemplateRecordConfiguration record = new TemplateRecordConfiguration(); record.setName("quote1"); record.setOrder(1); record.setPrecedingPath(""); record.setFollowingPath("Document > Link"); record.setKind(Kind.NAMED); TemplateFieldConfiguration field = new TemplateFieldConfiguration("quote", "Document > Quotation:nth-of-type(1)"); field.setRepeat(true); record.setFieldPaths(ImmutableList.of(field)); return record; }
private Path createGoodRecordDefinitionWithDefaultAndMissing() throws IOException { TemplateFieldConfiguration fieldDefinitionConfiguration = new TemplateFieldConfiguration("field", "Paragraph:nth-of-type(5)"); fieldDefinitionConfiguration.setDefaultValue("default value"); List<TemplateFieldConfiguration> fields = new ArrayList<>(); fields.add(fieldDefinitionConfiguration); Path definitionFile = Files.createTempFile( tempDirectory, AbstractRecordAnnotatorTest.class.getSimpleName(), ".yml"); TemplateRecordConfiguration recordDefinition = new TemplateRecordConfiguration(fields, 0); YAMLMAPPER.writeValue(definitionFile.toFile(), singleton(recordDefinition)); return definitionFile; }
private TemplateRecordConfiguration createMissingRepeatQuoteRecord() { TemplateRecordConfiguration record = new TemplateRecordConfiguration(); record.setName("missing"); record.setOrder(3); record.setPrecedingPath("Document > Link:nth-of-type(2)"); record.setFollowingPath("Document > Link:nth-of-type(3)"); record.setKind(Kind.NAMED); TemplateFieldConfiguration field = new TemplateFieldConfiguration("quote", "Document > Quotation:nth-of-type(3)"); field.setRepeat(true); record.setFieldPaths(ImmutableList.of(field)); return record; }
new TemplateRecordConfiguration( name, precedingPath, recordConfigurations.put( name, new TemplateRecordConfiguration( name, precedingPath, followingPath, fields, recordDefinition.getBegin())); for (TemplateFieldDefinition field : fieldDefinitions) { configurations.add( new TemplateRecordConfiguration( makeFields(structureHierarchy, ImmutableList.of(field)), field.getBegin()));
private TemplateRecordConfiguration createRepeatQuoteRecord2() { TemplateRecordConfiguration record = new TemplateRecordConfiguration(); record.setName("quote2"); record.setOrder(2); record.setPrecedingPath("Document > Link"); record.setFollowingPath("Document > Link:nth-of-type(2)"); record.setKind(Kind.NAMED); TemplateFieldConfiguration field = new TemplateFieldConfiguration("quote", "Document > Quotation:nth-of-type(2)"); field.setRepeat(true); record.setFieldPaths(ImmutableList.of(field)); return record; }