Search in sources :

Example 6 with JournalRecord

use of org.folio.rest.jaxrs.model.JournalRecord in project mod-source-record-manager by folio-org.

the class StoredRecordChunksKafkaHandler method buildJournalRecords.

private JsonArray buildJournalRecords(List<Record> storedRecords, Optional<JsonObject> mappingRulesOptional, String tenantId) {
    EntityType entityType = getEntityType(storedRecords);
    JsonArray journalRecords = new JsonArray();
    String titleFieldTag = null;
    List<String> subfieldCodes = null;
    if (mappingRulesOptional.isPresent()) {
        JsonObject mappingRules = mappingRulesOptional.get();
        Optional<String> titleFieldOptional = getTitleFieldTagByInstanceFieldPath(mappingRules);
        if (titleFieldOptional.isPresent()) {
            titleFieldTag = titleFieldOptional.get();
            subfieldCodes = mappingRules.getJsonArray(titleFieldTag).stream().map(JsonObject.class::cast).filter(fieldMappingRule -> fieldMappingRule.getString("target").equals(INSTANCE_TITLE_FIELD_PATH)).flatMap(fieldMappingRule -> fieldMappingRule.getJsonArray("subfield").stream()).map(subfieldCode -> subfieldCode.toString()).collect(Collectors.toList());
        }
    }
    for (Record record : storedRecords) {
        JournalRecord journalRecord = new JournalRecord().withJobExecutionId(record.getSnapshotId()).withSourceRecordOrder(record.getOrder()).withSourceId(record.getId()).withEntityType(entityType).withEntityId(record.getId()).withActionType(CREATE).withActionStatus(COMPLETED).withActionDate(new Date()).withTitle(allNotNull(record.getParsedRecord(), titleFieldTag) ? ParsedRecordUtil.retrieveDataByField(record.getParsedRecord(), titleFieldTag, subfieldCodes) : null);
        journalRecords.add(JsonObject.mapFrom(journalRecord));
    }
    return journalRecords;
}
Also used : EntityType(org.folio.rest.jaxrs.model.JournalRecord.EntityType) JsonArray(io.vertx.core.json.JsonArray) Json(io.vertx.core.json.Json) Date(java.util.Date) Autowired(org.springframework.beans.factory.annotation.Autowired) MARC_HOLDING(org.folio.rest.jaxrs.model.Record.RecordType.MARC_HOLDING) RecordsBatchResponse(org.folio.rest.jaxrs.model.RecordsBatchResponse) DI_EDIFACT_RECORD_CREATED(org.folio.rest.jaxrs.model.DataImportEventTypes.DI_EDIFACT_RECORD_CREATED) MARC_AUTHORITY(org.folio.rest.jaxrs.model.Record.RecordType.MARC_AUTHORITY) RecordType(org.folio.rest.jaxrs.model.Record.RecordType) DI_SRS_MARC_BIB_RECORD_CREATED(org.folio.rest.jaxrs.model.DataImportEventTypes.DI_SRS_MARC_BIB_RECORD_CREATED) Map(java.util.Map) Qualifier(org.springframework.beans.factory.annotation.Qualifier) MappingRuleCacheKey(org.folio.services.entity.MappingRuleCacheKey) DI_SRS_MARC_AUTHORITY_RECORD_CREATED(org.folio.rest.jaxrs.model.DataImportEventTypes.DI_SRS_MARC_AUTHORITY_RECORD_CREATED) JsonObject(io.vertx.core.json.JsonObject) EntityType(org.folio.rest.jaxrs.model.JournalRecord.EntityType) RecordsPublishingService(org.folio.services.RecordsPublishingService) Event(org.folio.rest.jaxrs.model.Event) JournalRecord(org.folio.rest.jaxrs.model.JournalRecord) Record(org.folio.rest.jaxrs.model.Record) Vertx(io.vertx.core.Vertx) COMPLETED(org.folio.rest.jaxrs.model.JournalRecord.ActionStatus.COMPLETED) AsyncRecordHandler(org.folio.kafka.AsyncRecordHandler) Future(io.vertx.core.Future) Collectors(java.util.stream.Collectors) OkapiConnectionParams(org.folio.dataimport.util.OkapiConnectionParams) MappingRuleCache(org.folio.services.MappingRuleCache) EDIFACT(org.folio.rest.jaxrs.model.Record.RecordType.EDIFACT) JsonArray(io.vertx.core.json.JsonArray) Component(org.springframework.stereotype.Component) List(java.util.List) MARC_BIB(org.folio.rest.jaxrs.model.Record.RecordType.MARC_BIB) Logger(org.apache.logging.log4j.Logger) JournalService(org.folio.services.journal.JournalService) ObjectUtils.allNotNull(org.apache.commons.lang3.ObjectUtils.allNotNull) KafkaConsumerRecord(io.vertx.kafka.client.consumer.KafkaConsumerRecord) DataImportEventTypes(org.folio.rest.jaxrs.model.DataImportEventTypes) ParsedRecordUtil(org.folio.services.util.ParsedRecordUtil) EventProcessedService(org.folio.services.EventProcessedService) Optional(java.util.Optional) DI_SRS_MARC_HOLDING_RECORD_CREATED(org.folio.rest.jaxrs.model.DataImportEventTypes.DI_SRS_MARC_HOLDING_RECORD_CREATED) KafkaHeader(io.vertx.kafka.client.producer.KafkaHeader) LogManager(org.apache.logging.log4j.LogManager) KafkaHeaderUtils(org.folio.kafka.KafkaHeaderUtils) CREATE(org.folio.rest.jaxrs.model.JournalRecord.ActionType.CREATE) JsonObject(io.vertx.core.json.JsonObject) JournalRecord(org.folio.rest.jaxrs.model.JournalRecord) Record(org.folio.rest.jaxrs.model.Record) KafkaConsumerRecord(io.vertx.kafka.client.consumer.KafkaConsumerRecord) JournalRecord(org.folio.rest.jaxrs.model.JournalRecord) Date(java.util.Date)

Example 7 with JournalRecord

use of org.folio.rest.jaxrs.model.JournalRecord in project mod-source-record-manager by folio-org.

the class InvoiceImportEventHandler method handle.

@Override
public void handle(JournalService journalService, DataImportEventPayload eventPayload, String tenantId) throws JournalRecordMapperException, JsonProcessingException {
    List<JournalRecord> journalRecords = InvoiceUtil.buildJournalRecordByEvent(eventPayload);
    List<JsonObject> jsonObjects = new ArrayList<>();
    journalRecords.forEach(journalRecord -> jsonObjects.add(JsonObject.mapFrom(journalRecord)));
    journalService.saveBatch(new JsonArray(jsonObjects), tenantId);
}
Also used : JsonArray(io.vertx.core.json.JsonArray) ArrayList(java.util.ArrayList) JsonObject(io.vertx.core.json.JsonObject) JournalRecord(org.folio.rest.jaxrs.model.JournalRecord)

Example 8 with JournalRecord

use of org.folio.rest.jaxrs.model.JournalRecord in project mod-source-record-manager by folio-org.

the class InvoiceUtil method buildInvoiceLineRecords.

private static LinkedList<JournalRecord> buildInvoiceLineRecords(DataImportEventPayload eventPayload, String invoiceNo, Integer invoiceOrder, String sourceId, boolean isInvoiceIncorrect) throws JournalRecordMapperException, JsonProcessingException {
    HashMap<String, String> errorInvoiceLinesMap = initErrorInvoiceLinesMap(eventPayload);
    LinkedList<JournalRecord> invoiceLines = new LinkedList<>();
    try {
        String recordAsString = eventPayload.getContext().get(INVOICE_LINES_KEY);
        JsonObject jsonInvoiceLineCollection = new JsonObject(recordAsString);
        int sz = jsonInvoiceLineCollection.getJsonArray(FIELD_INVOICE_LINES).size();
        for (int i = 0; i < sz; i++) {
            JsonObject invoiceLine = jsonInvoiceLineCollection.getJsonArray(FIELD_INVOICE_LINES).getJsonObject(i);
            String invoiceLineNumber = getInvoiceLinesNumber(invoiceLine, i);
            String description = invoiceLine.getString(FIELD_DESCRIPTION);
            JournalRecord journalRecord = new JournalRecord().withJobExecutionId(eventPayload.getJobExecutionId()).withSourceId(sourceId).withEntityId(invoiceLine.getString(FIELD_ID)).withEntityHrId(invoiceNo + "-" + invoiceLineNumber).withSourceRecordOrder((invoiceOrder + 1) * 10 + Integer.parseInt(invoiceLineNumber)).withEntityType(INVOICE).withTitle(StringUtils.isNotBlank(description) ? description : NO_INVOICE_TITLE_MESSAGE).withActionType(ActionType.CREATE).withActionDate(new Date()).withActionStatus(isInvoiceIncorrect || (errorInvoiceLinesMap.containsKey(invoiceLineNumber)) ? ActionStatus.ERROR : ActionStatus.COMPLETED).withError(isInvoiceIncorrect ? eventPayload.getContext().get(ERROR_KEY) : errorInvoiceLinesMap.getOrDefault(invoiceLineNumber, ""));
            invoiceLines.add(journalRecord);
        }
        return invoiceLines;
    } catch (Exception e) {
        throw new JournalRecordMapperException(INVOICE_LINE_MAPPING_EXCEPTION_MSG, e);
    }
}
Also used : JsonObject(io.vertx.core.json.JsonObject) JournalRecord(org.folio.rest.jaxrs.model.JournalRecord) LinkedList(java.util.LinkedList) Date(java.util.Date) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException)

Example 9 with JournalRecord

use of org.folio.rest.jaxrs.model.JournalRecord in project mod-source-record-manager by folio-org.

the class JournalUtilTest method shouldBuildJournalRecordForItemWhenInstanceIsPopulated.

@Test
public void shouldBuildJournalRecordForItemWhenInstanceIsPopulated() throws JournalRecordMapperException {
    String itemId = UUID.randomUUID().toString();
    String itemHrid = UUID.randomUUID().toString();
    String instanceId = UUID.randomUUID().toString();
    String instanceHrid = UUID.randomUUID().toString();
    String holdingsId = UUID.randomUUID().toString();
    JsonObject itemJson = new JsonObject().put("id", itemId).put("hrid", itemHrid).put("holdingsRecordId", holdingsId);
    JsonObject instanceJson = new JsonObject().put("id", instanceId).put("hrid", instanceHrid);
    String recordId = UUID.randomUUID().toString();
    String snapshotId = UUID.randomUUID().toString();
    JsonObject recordJson = new JsonObject().put("id", recordId).put("snapshotId", snapshotId).put("order", 1);
    HashMap<String, String> context = new HashMap<>();
    context.put(ITEM.value(), itemJson.encode());
    context.put(INSTANCE.value(), instanceJson.encode());
    context.put(MARC_BIBLIOGRAPHIC.value(), recordJson.encode());
    DataImportEventPayload eventPayload = new DataImportEventPayload().withEventType("DI_INVENTORY_ITEM_CREATED").withContext(context);
    JournalRecord journalRecord = JournalUtil.buildJournalRecordByEvent(eventPayload, CREATE, ITEM, COMPLETED);
    Assert.assertNotNull(journalRecord);
    Assert.assertEquals(snapshotId, journalRecord.getJobExecutionId());
    Assert.assertEquals(recordId, journalRecord.getSourceId());
    Assert.assertEquals(1, journalRecord.getSourceRecordOrder().intValue());
    Assert.assertEquals(ITEM, journalRecord.getEntityType());
    Assert.assertEquals(itemId, journalRecord.getEntityId());
    Assert.assertEquals(itemHrid, journalRecord.getEntityHrId());
    Assert.assertEquals(instanceId, journalRecord.getInstanceId());
    Assert.assertEquals(holdingsId, journalRecord.getHoldingsId());
    Assert.assertEquals(CREATE, journalRecord.getActionType());
    Assert.assertEquals(COMPLETED, journalRecord.getActionStatus());
    Assert.assertNotNull(journalRecord.getActionDate());
}
Also used : HashMap(java.util.HashMap) JsonObject(io.vertx.core.json.JsonObject) JournalRecord(org.folio.rest.jaxrs.model.JournalRecord) DataImportEventPayload(org.folio.DataImportEventPayload) Test(org.junit.Test)

Example 10 with JournalRecord

use of org.folio.rest.jaxrs.model.JournalRecord in project mod-source-record-manager by folio-org.

the class MetaDataProviderJobLogEntriesAPITest method shouldReturnAuthorityCreated.

@Test
public void shouldReturnAuthorityCreated(TestContext context) {
    Async async = context.async();
    JobExecution createdJobExecution = constructAndPostInitJobExecutionRqDto(1).getJobExecutions().get(0);
    String sourceRecordId = UUID.randomUUID().toString();
    String recordTitle = "test title";
    Future<JournalRecord> future = Future.succeededFuture().compose(v -> createJournalRecord(createdJobExecution.getId(), sourceRecordId, null, null, recordTitle, 0, CREATE, MARC_AUTHORITY, COMPLETED, null)).compose(v -> createJournalRecord(createdJobExecution.getId(), sourceRecordId, null, null, null, 0, CREATE, AUTHORITY, COMPLETED, null)).onFailure(context::fail);
    future.onComplete(ar -> context.verify(v -> {
        RestAssured.given().spec(spec).when().get(GET_JOB_EXECUTION_JOURNAL_RECORDS_PATH + "/" + createdJobExecution.getId()).then().statusCode(HttpStatus.SC_OK).body("entries.size()", is(1)).body("totalRecords", is(1)).body("entries[0].sourceRecordId", is(sourceRecordId)).body("entries[0].sourceRecordTitle", is(recordTitle)).body("entries[0].sourceRecordActionStatus", is(ActionStatus.CREATED.value())).body("entries[0].authorityActionStatus", is(ActionStatus.CREATED.value()));
        async.complete();
    }));
}
Also used : JobExecution(org.folio.rest.jaxrs.model.JobExecution) EDIFACT(org.folio.rest.jaxrs.model.JournalRecord.EntityType.EDIFACT) MARC_BIBLIOGRAPHIC(org.folio.rest.jaxrs.model.JournalRecord.EntityType.MARC_BIBLIOGRAPHIC) TestContext(io.vertx.ext.unit.TestContext) MARC_AUTHORITY(org.folio.rest.jaxrs.model.JournalRecord.EntityType.MARC_AUTHORITY) Date(java.util.Date) Matchers.not(org.hamcrest.Matchers.not) HttpStatus(org.apache.http.HttpStatus) MockitoAnnotations(org.mockito.MockitoAnnotations) Matchers.everyItem(org.hamcrest.Matchers.everyItem) Matchers.nullValue(org.hamcrest.Matchers.nullValue) JobExecution(org.folio.rest.jaxrs.model.JobExecution) Spy(org.mockito.Spy) ActionStatus(org.folio.rest.jaxrs.model.ActionStatus) ERROR(org.folio.rest.jaxrs.model.JournalRecord.ActionStatus.ERROR) HOLDINGS(org.folio.rest.jaxrs.model.JournalRecord.EntityType.HOLDINGS) MODIFY(org.folio.rest.jaxrs.model.JournalRecord.ActionType.MODIFY) GenericCompositeFuture(org.folio.okapi.common.GenericCompositeFuture) AUTHORITY(org.folio.rest.jaxrs.model.JournalRecord.EntityType.AUTHORITY) JournalRecord(org.folio.rest.jaxrs.model.JournalRecord) UUID(java.util.UUID) Future(io.vertx.core.Future) List(java.util.List) Matchers.is(org.hamcrest.Matchers.is) AbstractRestTest(org.folio.rest.impl.AbstractRestTest) RestAssured(io.restassured.RestAssured) Async(io.vertx.ext.unit.Async) JobLogEntryDtoCollection(org.folio.rest.jaxrs.model.JobLogEntryDtoCollection) RunWith(org.junit.runner.RunWith) JobLogEntryDto(org.folio.rest.jaxrs.model.JobLogEntryDto) PostgresClientFactory(org.folio.dao.util.PostgresClientFactory) CompositeFuture(io.vertx.core.CompositeFuture) Matchers.emptyOrNullString(org.hamcrest.Matchers.emptyOrNullString) MARC_HOLDINGS(org.folio.rest.jaxrs.model.JournalRecord.EntityType.MARC_HOLDINGS) Matchers.hasSize(org.hamcrest.Matchers.hasSize) Before(org.junit.Before) InjectMocks(org.mockito.InjectMocks) ITEM(org.folio.rest.jaxrs.model.JournalRecord.EntityType.ITEM) Matchers.empty(org.hamcrest.Matchers.empty) UPDATE(org.folio.rest.jaxrs.model.JournalRecord.ActionType.UPDATE) Promise(io.vertx.core.Promise) Vertx(io.vertx.core.Vertx) Test(org.junit.Test) COMPLETED(org.folio.rest.jaxrs.model.JournalRecord.ActionStatus.COMPLETED) INSTANCE(org.folio.rest.jaxrs.model.JournalRecord.EntityType.INSTANCE) ORDER(org.folio.rest.jaxrs.model.JournalRecord.EntityType.ORDER) VertxUnitRunner(io.vertx.ext.unit.junit.VertxUnitRunner) NON_MATCH(org.folio.rest.jaxrs.model.JournalRecord.ActionType.NON_MATCH) INVOICE(org.folio.rest.jaxrs.model.JournalRecord.EntityType.INVOICE) Assert(org.junit.Assert) CREATE(org.folio.rest.jaxrs.model.JournalRecord.ActionType.CREATE) JournalRecordDaoImpl(org.folio.dao.JournalRecordDaoImpl) Async(io.vertx.ext.unit.Async) Matchers.emptyOrNullString(org.hamcrest.Matchers.emptyOrNullString) JournalRecord(org.folio.rest.jaxrs.model.JournalRecord) AbstractRestTest(org.folio.rest.impl.AbstractRestTest) Test(org.junit.Test)

Aggregations

JournalRecord (org.folio.rest.jaxrs.model.JournalRecord)52 Test (org.junit.Test)42 Date (java.util.Date)40 Future (io.vertx.core.Future)34 List (java.util.List)34 AbstractRestTest (org.folio.rest.impl.AbstractRestTest)34 JobExecution (org.folio.rest.jaxrs.model.JobExecution)34 COMPLETED (org.folio.rest.jaxrs.model.JournalRecord.ActionStatus.COMPLETED)34 CREATE (org.folio.rest.jaxrs.model.JournalRecord.ActionType.CREATE)34 Async (io.vertx.ext.unit.Async)33 TestContext (io.vertx.ext.unit.TestContext)33 VertxUnitRunner (io.vertx.ext.unit.junit.VertxUnitRunner)33 UUID (java.util.UUID)33 PostgresClientFactory (org.folio.dao.util.PostgresClientFactory)33 ERROR (org.folio.rest.jaxrs.model.JournalRecord.ActionStatus.ERROR)33 MODIFY (org.folio.rest.jaxrs.model.JournalRecord.ActionType.MODIFY)33 Matchers.is (org.hamcrest.Matchers.is)33 Assert (org.junit.Assert)33 Before (org.junit.Before)33 RunWith (org.junit.runner.RunWith)33