Skip to content
Draft
1 change: 1 addition & 0 deletions service/grails-app/conf/spring/resources.groovy
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@

import org.olf.dataimport.internal.titleInstanceResolvers.*
import org.olf.dataimport.internal.KBManagementBean
import org.olf.kb.metadata.ResourceIngressType
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import groovyx.net.http.*

@Slf4j
@CompileStatic
public class EbscoKBAdapter extends WebSourceAdapter implements KBCacheUpdater, DataBinder {
public class EbscoKBAdapter implements KBCacheUpdater, DataBinder {

EbscoKBAdapter() {
super (HttpBuilder.configure {
Expand Down
54 changes: 54 additions & 0 deletions service/src/main/groovy/org/olf/kb/GoKbClient.groovy
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package org.olf.kb

import grails.gorm.multitenancy.Tenants
import groovy.xml.XmlSlurper
import groovy.xml.slurpersupport.GPathResult
import io.micronaut.http.HttpRequest
import io.micronaut.http.HttpResponse
import io.micronaut.http.MutableHttpRequest
import io.micronaut.http.client.DefaultHttpClientConfiguration
import io.micronaut.http.client.HttpClient
import io.micronaut.http.client.exceptions.HttpClientResponseException
import io.micronaut.http.uri.UriBuilder

import java.time.Duration

class GoKbClient {
HttpClient httpClient

GoKbClient() {
def config = new DefaultHttpClientConfiguration()
config.setConnectTimeout(Duration.ofSeconds(5))
config.setReadTimeout(Duration.ofMinutes(15))
config.setMaxContentLength(2147483647)
this.httpClient = HttpClient.create(null, config)
}

GPathResult getPackageData(final String url) {
getPackageData(url, null)
}

GPathResult getPackageData(final String url, final Map<String, Object> params) {
def header = "Folio mod-agreements / ${Tenants.currentId()}"

UriBuilder uriBuilder = UriBuilder.of(url)
params.each { key, value ->
uriBuilder.queryParam(key, value)
}

byte[] responseBytes
try {
HttpRequest<?> micronautRequest = HttpRequest.GET(uriBuilder.build()).header('User-Agent', header)

HttpResponse<byte[]> response = httpClient.toBlocking().exchange(micronautRequest, byte[])
responseBytes = response.body.get()
} catch (HttpClientResponseException exception) {
throw GoKbClientException(exception.message, exception.status.code)
} catch (Exception exception) {
throw GoKbClientException(exception.message)
}

return new XmlSlurper().parse(new ByteArrayInputStream(responseBytes))

}
}
17 changes: 17 additions & 0 deletions service/src/main/groovy/org/olf/kb/GoKbClientException.groovy
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package org.olf.kb

class GoKbClientException extends Exception {

String message;
Integer responseStatusCode;

GoKbClientException(String message) {
this.message = message;
}

GoKbClientException(String message, responseStatusCode) {
this.message = message;
this.responseStatusCode;
}

}
49 changes: 31 additions & 18 deletions service/src/main/groovy/org/olf/kb/adapters/GOKbOAIAdapter.groovy
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package org.olf.kb.adapters

import org.olf.kb.GoKbClientException

import static groovy.transform.TypeCheckingMode.SKIP

import java.text.*
Expand All @@ -26,6 +28,7 @@ import groovy.xml.slurpersupport.GPathResult
import groovyx.net.http.*

import org.slf4j.MDC
import org.olf.kb.GoKbClient


/**
Expand All @@ -36,10 +39,19 @@ import org.slf4j.MDC

@Slf4j
@CompileStatic
public class GOKbOAIAdapter extends WebSourceAdapter implements KBCacheUpdater, DataBinder {
public class GOKbOAIAdapter implements KBCacheUpdater, DataBinder {

protected static final String PATH_PACKAGES = '/packages'
protected static final String PATH_TITLES = '/titles'
GoKbClient goKbClient;

GOKbOAIAdapter() {
goKbClient = new GoKbClient();
}

protected final String stripTrailingSlash(final String uri) {
uri.endsWith('//') ? uri.substring(0, uri.length() - 1) : uri
}

@CompileStatic(SKIP)
public void freshenPackageData(final String source_name,
Expand Down Expand Up @@ -80,11 +92,12 @@ public class GOKbOAIAdapter extends WebSourceAdapter implements KBCacheUpdater,
log.info("OAI/HTTP GET url=${packagesUrl} params=${query_params} elapsed=${System.currentTimeMillis()-package_sync_start_time}")

// Built in parser for XML returns GPathResult
Object sync_result = getSync(packagesUrl, query_params) {
response.failure { FromServer fromServer ->
log.error "HTTP/OAI Request failed with status ${fromServer.statusCode}"
found_records = false
}
Object sync_result
try {
sync_result = goKbClient.getPackageData(packagesUrl, query_params)
} catch (GoKbClientException exception) {
log.error "Request failed with message: ${exception.message} and status code: ${exception.responseStatusCode}"
found_records = false
}

if ( (found_records) && ( sync_result instanceof GPathResult ) ) {
Expand Down Expand Up @@ -166,14 +179,14 @@ public class GOKbOAIAdapter extends WebSourceAdapter implements KBCacheUpdater,
log.debug("** GET ${titlesUrl} ${query_params}")

// Built in parser for XML returns GPathResult
xml = (GPathResult) getSync(titlesUrl, query_params) {

response.failure { FromServer fromServer ->
log.error "Request failed with status ${fromServer.statusCode}"
found_records = false
}
try {
xml = (GPathResult) goKbClient.getPackageData(titlesUrl, query_params as Map<String, Object>)
} catch (GoKbClientException exception) {
log.error "Request failed with message: ${exception.message} and status code: ${exception.responseStatusCode}"
found_records = false
}


if (found_records) {

log.debug("got page of data from OAI, cursor=${cursor}, ...")
Expand Down Expand Up @@ -647,12 +660,12 @@ public class GOKbOAIAdapter extends WebSourceAdapter implements KBCacheUpdater,

log.debug("GOKbOAIAdapter::getTitleInstance - fetching from URI: ${titlesUrl}")
boolean valid = true
GPathResult xml = (GPathResult) getSync(titlesUrl, query_params) {

response.failure { FromServer fromServer ->
log.error "Request failed with status ${fromServer.statusCode}"
valid = false
}
GPathResult xml
try {
xml = (GPathResult) goKbClient.getPackageData(titlesUrl, query_params)
} catch (GoKbClientException exception) {
log.error "Request failed with message: ${exception.message} and status code: ${exception.responseStatusCode}"
valid = false
}

if (valid) {
Expand Down
38 changes: 23 additions & 15 deletions service/src/main/groovy/org/olf/kb/adapters/KIJPFAdapter.groovy
Original file line number Diff line number Diff line change
@@ -1,20 +1,26 @@
package org.olf.kb.adapters;
package org.olf.kb.adapters

import org.olf.dataimport.internal.InternalPackageImplWithPackageContents
import org.olf.dataimport.internal.PackageSchema
import org.olf.kb.GoKbClient
import org.olf.kb.GoKbClientException
import org.olf.kb.KBCache;
import org.olf.kb.KBCacheUpdater;
import org.springframework.validation.BindingResult

import grails.web.databinding.DataBinder
import groovy.transform.CompileStatic
import groovy.util.logging.Slf4j
import groovyx.net.http.FromServer

@Slf4j
@CompileStatic
public class KIJPFAdapter extends WebSourceAdapter implements KBCacheUpdater, DataBinder {
public class KIJPFAdapter implements KBCacheUpdater, DataBinder {

GoKbClient goKbClient;

KIJPFAdapter() {
goKbClient = new GoKbClient()
}

public void freshenPackageData(final String source_name,
final String base_url,
Expand Down Expand Up @@ -44,12 +50,12 @@ public class KIJPFAdapter extends WebSourceAdapter implements KBCacheUpdater, Da

spin_protection++
boolean valid = true
Map<String, ?> jsonMap = (Map)getSync(base_url, query_params) {
response.failure { FromServer fromServer ->
log.debug "Request failed with status ${fromServer.statusCode}"
valid = false
}
Map<String, ?> jsonMap
try {
jsonMap = (Map) goKbClient.getPackageData(base_url, query_params as Map<String, Object>)
} catch (GoKbClientException exception) {
log.error "Request failed with message: ${exception.message} and status code: ${exception.responseStatusCode}"
valid = false
}

if (valid) {
Expand Down Expand Up @@ -106,13 +112,15 @@ public class KIJPFAdapter extends WebSourceAdapter implements KBCacheUpdater, Da
log.debug ("processPackage(${url},${source_name}) -- fetching");
try {
boolean valid = true
Map<String, ?> jsonMap = (Map) getSync(url) {
response.failure { FromServer fromServer ->
log.debug "Request failed with status ${fromServer.statusCode}"
valid = false
}
Map<String, ?> jsonMap
try {
jsonMap = (Map) goKbClient.getPackageData(url)
} catch (GoKbClientException exception) {
log.error "Request failed with message: ${exception.message} and status code: ${exception.responseStatusCode}"
valid = false
}



if (valid) {
PackageSchema json_package_description = kbplusToERM(jsonMap)
cache.onPackageChange(source_name, json_package_description)
Expand Down
Loading
Loading