From 297bd9a04d44a54e6140c372651e157462001198 Mon Sep 17 00:00:00 2001 From: ctwoolsey Date: Tue, 16 Jan 2018 18:58:50 -0600 Subject: [PATCH 1/6] Added ITI as datasource --- .../citations/CitationDataSourceFactory.java | 6 ++ .../datasources/CITATION_DATASOURCE.java | 3 +- .../imported/ImportedCitationDataSource.java | 89 +++++++++++++++++++ .../imported/ImportedConfiguration.java | 11 +++ .../imported/models/ImportedCitation.java | 52 +++++++++++ .../imported/models/ImportedViolation.java | 35 ++++++++ .../ImportedCitationTransformer.java | 84 +++++++++++++++++ .../ImportedViolationTransformer.java | 39 ++++++++ .../transformers/CourtIdTransformer.java | 18 ++++ src/main/java/svc/profiles/LocalProfile.java | 1 + .../profiles/LocalWithHSQLAccessProfile.java | 1 + src/main/resources/application.yml | 2 + .../hsql/citation-datasource-municipality.sql | 4 +- .../resources/hsql/citation-datasource.sql | 3 +- .../courtMappers/imported-court-mapper.sql | 1 + .../hsql/datasource-municipality-mapping.sql | 4 +- .../changelog/2018-01-12_ITI_Integration.sql | 13 +++ .../imported-courtTransformer.sql | 1 + .../resources/sql/schema/schema-tables.sql | 5 ++ ...ylerCitationDataSourceIntegrationTest.java | 1 + .../tyler/TylerCitationDataSourceTest.java | 1 + 21 files changed, 370 insertions(+), 4 deletions(-) create mode 100644 src/main/java/svc/data/citations/datasources/imported/ImportedCitationDataSource.java create mode 100644 src/main/java/svc/data/citations/datasources/imported/ImportedConfiguration.java create mode 100644 src/main/java/svc/data/citations/datasources/imported/models/ImportedCitation.java create mode 100644 src/main/java/svc/data/citations/datasources/imported/models/ImportedViolation.java create mode 100644 src/main/java/svc/data/citations/datasources/imported/transformers/ImportedCitationTransformer.java create mode 100644 src/main/java/svc/data/citations/datasources/imported/transformers/ImportedViolationTransformer.java create mode 100644 src/main/resources/hsql/courtMappers/imported-court-mapper.sql create mode 100644 src/main/resources/sql/changelog/2018-01-12_ITI_Integration.sql create mode 100644 src/main/resources/sql/citation/datasources/transformers/imported-courtTransformer.sql diff --git a/src/main/java/svc/data/citations/CitationDataSourceFactory.java b/src/main/java/svc/data/citations/CitationDataSourceFactory.java index 899b1df..a7bbe85 100644 --- a/src/main/java/svc/data/citations/CitationDataSourceFactory.java +++ b/src/main/java/svc/data/citations/CitationDataSourceFactory.java @@ -28,6 +28,9 @@ public class CitationDataSourceFactory extends BaseJdbcDao { @Inject private CitationDataSource rejisCitationDataSource; + + @Inject + private CitationDataSource importedCitationDataSource; public List getAllCitationDataSources() { return getDataSources(); @@ -69,6 +72,9 @@ private List getSourcesFromNames(List s case REJIS: dataSources.add(rejisCitationDataSource); break; + case IMPORTED: + dataSources.add(importedCitationDataSource); + break; default: LogSystem.LogCitationDataSourceException("Source '" + source.toString() + "' is not supported"); } diff --git a/src/main/java/svc/data/citations/datasources/CITATION_DATASOURCE.java b/src/main/java/svc/data/citations/datasources/CITATION_DATASOURCE.java index 1de03fb..d1d237f 100644 --- a/src/main/java/svc/data/citations/datasources/CITATION_DATASOURCE.java +++ b/src/main/java/svc/data/citations/datasources/CITATION_DATASOURCE.java @@ -3,5 +3,6 @@ public enum CITATION_DATASOURCE { MOCK, TYLER, - REJIS + REJIS, + IMPORTED } diff --git a/src/main/java/svc/data/citations/datasources/imported/ImportedCitationDataSource.java b/src/main/java/svc/data/citations/datasources/imported/ImportedCitationDataSource.java new file mode 100644 index 0000000..f552727 --- /dev/null +++ b/src/main/java/svc/data/citations/datasources/imported/ImportedCitationDataSource.java @@ -0,0 +1,89 @@ +package svc.data.citations.datasources.imported; + +import java.net.URI; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Repository; +import org.springframework.web.client.RestClientException; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; + +import com.google.common.collect.Lists; + +import svc.data.citations.CitationDataSource; +import svc.data.citations.datasources.imported.models.ImportedCitation; +import svc.data.citations.datasources.imported.transformers.ImportedCitationTransformer; +import svc.data.citations.filters.CitationFilter; +import svc.models.Citation; + +@Repository +public class ImportedCitationDataSource implements CitationDataSource { + + @Autowired + private ImportedConfiguration importedConfiguration; + + @Autowired + private ImportedCitationTransformer citationTransformer; + + @Autowired + private CitationFilter citationFilter; + + @Autowired + private RestTemplate restTemplate; + + static private DateTimeFormatter dobFormatter = DateTimeFormatter.ofPattern("uuuu-MM-dd"); + + @Override + public List getByCitationNumberAndDOB(String citationNumber, LocalDate dob) { + + UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(importedConfiguration.rootUrl) + .queryParam("citationNumber", citationNumber).queryParam("dob", dob.format(dobFormatter)); + + return performRestTemplateCall(builder.build().encode().toUri(), dob, null); + } + + @Override + public List getByLicenseAndDOBAndLastName(String driversLicenseNumber, String driversLicenseState, LocalDate dob, String lastName) { + UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(importedConfiguration.rootUrl) + .queryParam("licenseNumber", driversLicenseNumber).queryParam("dob", dob.format(dobFormatter)) + .queryParam("licenseState", driversLicenseState).queryParam("lastName", lastName); + + return performRestTemplateCall(builder.build().encode().toUri(), dob, lastName); + } + + @Override + public List getByNameAndMunicipalitiesAndDOB(String lastName, List municipalities, LocalDate dob) { + UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(importedConfiguration.rootUrl) + .queryParam("lastName", lastName).queryParam("dob", dob.format(dobFormatter)); + + return performRestTemplateCall(builder.build().encode().toUri(), dob, lastName); + } + + private List performRestTemplateCall(URI uri, LocalDate dob, String lastName) { + HttpHeaders headers = new HttpHeaders(); + HttpEntity query = new HttpEntity<>(headers); + ResponseEntity> importedCitationsResponse = null; + ParameterizedTypeReference> type = new ParameterizedTypeReference>() { + }; + + List importedCitations = null; + try { + importedCitationsResponse = restTemplate.exchange(uri, HttpMethod.GET, query, type); + importedCitations = importedCitationsResponse.getBody(); + return citationFilter.Filter(citationTransformer.fromImportedCitations(importedCitations), lastName); + } catch (RestClientException ex) { + System.out.println("Imported datasource is down."); + return Lists.newArrayList(); + } + + + } +} diff --git a/src/main/java/svc/data/citations/datasources/imported/ImportedConfiguration.java b/src/main/java/svc/data/citations/datasources/imported/ImportedConfiguration.java new file mode 100644 index 0000000..e5e6995 --- /dev/null +++ b/src/main/java/svc/data/citations/datasources/imported/ImportedConfiguration.java @@ -0,0 +1,11 @@ +package svc.data.citations.datasources.imported; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +@Component +public class ImportedConfiguration { + + @Value("${stlcourts.citationDataSources.imported.rootUrl}") + public String rootUrl; +} diff --git a/src/main/java/svc/data/citations/datasources/imported/models/ImportedCitation.java b/src/main/java/svc/data/citations/datasources/imported/models/ImportedCitation.java new file mode 100644 index 0000000..781accc --- /dev/null +++ b/src/main/java/svc/data/citations/datasources/imported/models/ImportedCitation.java @@ -0,0 +1,52 @@ +package svc.data.citations.datasources.imported.models; + +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; + +@JsonIgnoreProperties(ignoreUnknown = true) +public class ImportedCitation { + + @JsonProperty("citation_number") + public String citationNumber; + + @JsonProperty("citation_date") + public String citationDate; + + @JsonProperty("case_status") + public String caseStatus; + + @JsonProperty("first_name") + public String firstName; + + @JsonProperty("last_name") + public String lastName; + + @JsonProperty("date_of_birth") + public String dateOfBirth; + + @JsonProperty("defendant_address") + public String defendantAddress; + + @JsonProperty("defendant_city") + public String defendantCity; + + @JsonProperty("defendant_state") + public String defendantState; + + @JsonProperty("drivers_license_number") + public String driversLicenseNumber; + + @JsonProperty("drivers_license_state") + public String driversLicenseState; + + @JsonProperty("court_dateTime") + public String courtDateTime; + + @JsonProperty("municipality_id") + public Long municipalityId; + + @JsonProperty + public List violations; +} diff --git a/src/main/java/svc/data/citations/datasources/imported/models/ImportedViolation.java b/src/main/java/svc/data/citations/datasources/imported/models/ImportedViolation.java new file mode 100644 index 0000000..f880d2d --- /dev/null +++ b/src/main/java/svc/data/citations/datasources/imported/models/ImportedViolation.java @@ -0,0 +1,35 @@ +package svc.data.citations.datasources.imported.models; + +import java.math.BigDecimal; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; + +@JsonIgnoreProperties(ignoreUnknown = true) +public class ImportedViolation { + + @JsonProperty("citation_number") + public String citationNumber; + + @JsonProperty("violation_number") + public String violationNumber; + + @JsonProperty("violation_description") + public String violationDescription; + + @JsonProperty("warrant_status") + public boolean warrantStatus; + + @JsonProperty("warrant_number") + public String warrantNumber; + + @JsonProperty + public String status; + + @JsonProperty("fine_amount") + public BigDecimal fineAmount; + + @JsonProperty("can_pay_online") + public Boolean canPayOnline; + +} diff --git a/src/main/java/svc/data/citations/datasources/imported/transformers/ImportedCitationTransformer.java b/src/main/java/svc/data/citations/datasources/imported/transformers/ImportedCitationTransformer.java new file mode 100644 index 0000000..1eb4d5f --- /dev/null +++ b/src/main/java/svc/data/citations/datasources/imported/transformers/ImportedCitationTransformer.java @@ -0,0 +1,84 @@ +package svc.data.citations.datasources.imported.transformers; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.List; +import java.util.stream.Collectors; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import svc.data.citations.datasources.imported.models.ImportedCitation; +import svc.data.citations.datasources.transformers.CourtIdTransformer; +import svc.data.citations.datasources.transformers.MunicipalityIdTransformer; +import svc.logging.LogSystem; +import svc.models.Citation; +import svc.models.Municipality; +import svc.types.HashableEntity; + +@Component +public class ImportedCitationTransformer { + + @Autowired + ImportedViolationTransformer violationTransformer; + + @Autowired + CourtIdTransformer courtIdTransformer; + + @Autowired + MunicipalityIdTransformer municipalityIdTransformer; + + public List fromImportedCitations(List importedCitations) { + if (importedCitations != null) { + return importedCitations.stream() + .map(importedCitation -> fromImportedCitation(importedCitation)) + .collect(Collectors.toList()); + } + return null; + } + + + public Citation fromImportedCitation(ImportedCitation importedCitation) { + if (importedCitation == null) { + return null; + } + + Citation genericCitation = new Citation(); + genericCitation.citation_number = importedCitation.citationNumber; + genericCitation.first_name = importedCitation.firstName; + genericCitation.last_name = importedCitation.lastName; + genericCitation.drivers_license_number = importedCitation.driversLicenseNumber; + genericCitation.drivers_license_state = importedCitation.driversLicenseState; + + if (importedCitation.dateOfBirth == null) { + LogSystem.LogEvent("Received imported citation with no DOB."); + } else { + genericCitation.date_of_birth = LocalDate.parse(importedCitation.dateOfBirth, DateTimeFormatter.ISO_LOCAL_DATE); + } + + if (importedCitation.citationDate == null) { + LogSystem.LogEvent("Received imported citation with no violation date."); + } else { + genericCitation.citation_date = LocalDate.parse(importedCitation.citationDate, DateTimeFormatter.ISO_LOCAL_DATE); + } + + if (importedCitation.violations == null) { + LogSystem.LogEvent("No violations received with imported citation. Skipping fields that require them."); + } else { + genericCitation.court_dateTime = LocalDateTime.parse(importedCitation.courtDateTime, DateTimeFormatter.ISO_LOCAL_DATE_TIME); + + genericCitation.violations = violationTransformer.fromImportedCitation(importedCitation); + + genericCitation.court_id = courtIdTransformer.lookupCourtIdFromMunicipalityId(importedCitation.municipalityId); + genericCitation.municipality_id = new HashableEntity(Municipality.class, importedCitation.municipalityId); + + } + + genericCitation.defendant_address = importedCitation.defendantAddress; + genericCitation.defendant_city = importedCitation.defendantCity; + genericCitation.defendant_state = importedCitation.defendantState; + + return genericCitation; + } +} diff --git a/src/main/java/svc/data/citations/datasources/imported/transformers/ImportedViolationTransformer.java b/src/main/java/svc/data/citations/datasources/imported/transformers/ImportedViolationTransformer.java new file mode 100644 index 0000000..b5bf123 --- /dev/null +++ b/src/main/java/svc/data/citations/datasources/imported/transformers/ImportedViolationTransformer.java @@ -0,0 +1,39 @@ +package svc.data.citations.datasources.imported.transformers; + +import java.util.List; +import java.util.stream.Collectors; + +import org.springframework.stereotype.Component; + +import svc.data.citations.datasources.imported.models.ImportedCitation; +import svc.data.citations.datasources.imported.models.ImportedViolation; +import svc.models.Violation; + +@Component +public class ImportedViolationTransformer { + + public List fromImportedCitation(ImportedCitation importedCitation) { + if (importedCitation.violations != null) { + return importedCitation.violations.stream() + .map(importedViolation -> fromImportedViolation(importedCitation, importedViolation)) + .collect(Collectors.toList()); + } + return null; + } + + public Violation fromImportedViolation(ImportedCitation importedCitation, ImportedViolation importedViolation) { + + Violation genericViolation = new Violation(); + genericViolation.citation_number = importedCitation.citationNumber; + genericViolation.violation_number = importedViolation.violationNumber; + genericViolation.violation_description = importedViolation.violationDescription; + genericViolation.warrant_status = importedViolation.warrantStatus; + genericViolation.warrant_number = importedViolation.warrantNumber; + genericViolation.fine_amount = importedViolation.fineAmount; + genericViolation.can_pay_online = importedViolation.canPayOnline; + genericViolation.court_cost = null; + + return genericViolation; + } + +} diff --git a/src/main/java/svc/data/citations/datasources/transformers/CourtIdTransformer.java b/src/main/java/svc/data/citations/datasources/transformers/CourtIdTransformer.java index ef15326..f1c2fff 100644 --- a/src/main/java/svc/data/citations/datasources/transformers/CourtIdTransformer.java +++ b/src/main/java/svc/data/citations/datasources/transformers/CourtIdTransformer.java @@ -44,6 +44,24 @@ public HashableEntity lookupCourtId(CITATION_DATASOURCE citationDataSourc return null; } } + + public HashableEntity lookupCourtIdFromMunicipalityId(Long municipalityId){ + if (municipalityId != null){ + try{ + Map parameterMap = new HashMap(); + parameterMap.put("municipalityId", municipalityId); + String sql = this.getSql("citation/datasources/transformers/imported-courtTransformer.sql"); + Long courtId = jdbcTemplate.queryForObject(sql, parameterMap, new CourtIdSQLMapper()); + return new HashableEntity(Court.class, courtId); + + } catch (Exception e) { + LogSystem.LogDBException(e); + return null; + } + }else{ + return null; + } + } private class CourtIdSQLMapper implements RowMapper { public Long mapRow(ResultSet rs, int i) { diff --git a/src/main/java/svc/profiles/LocalProfile.java b/src/main/java/svc/profiles/LocalProfile.java index c792279..dbce471 100644 --- a/src/main/java/svc/profiles/LocalProfile.java +++ b/src/main/java/svc/profiles/LocalProfile.java @@ -25,6 +25,7 @@ public DataSource dataSource() { .addScript("hsql/citation-datasource-municipality.sql") .addScript("hsql/citation-datasource.sql") .addScript("hsql/courtMappers/tyler-court-mapper.sql") + .addScript("hsql/courtMappers/imported-court-mapper.sql") .addScript("hsql/courtMappers/rejis-court-mapper.sql") .addScript("hsql/datasource-municipality-mapping.sql") .build(); diff --git a/src/main/java/svc/profiles/LocalWithHSQLAccessProfile.java b/src/main/java/svc/profiles/LocalWithHSQLAccessProfile.java index ab909fc..9429cc2 100644 --- a/src/main/java/svc/profiles/LocalWithHSQLAccessProfile.java +++ b/src/main/java/svc/profiles/LocalWithHSQLAccessProfile.java @@ -31,6 +31,7 @@ public DataSource dataSource() { .addScript("hsql/citation-datasource.sql") .addScript("hsql/courtMappers/tyler-court-mapper.sql") .addScript("hsql/courtMappers/rejis-court-mapper.sql") + .addScript("hsql/courtMappers/imported-court-mapper.sql") .addScript("hsql/datasource-municipality-mapping.sql") .build(); } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index eaf54c1..ec6a1b0 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -15,6 +15,8 @@ stlcourts: rootUrl: ${REJIS_ROOT_URL} username: ${REJIS_USERNAME} password: ${REJIS_PASSWORD} + imported: + rootUrl: ${IMPORTED_ROOT_URL} logging: level: diff --git a/src/main/resources/hsql/citation-datasource-municipality.sql b/src/main/resources/hsql/citation-datasource-municipality.sql index f29b24b..d9c2ad6 100644 --- a/src/main/resources/hsql/citation-datasource-municipality.sql +++ b/src/main/resources/hsql/citation-datasource-municipality.sql @@ -31,4 +31,6 @@ INSERT INTO citation_datasource_municipality (citation_datasource_id,municipalit INSERT INTO citation_datasource_municipality (citation_datasource_id,municipality_id) VALUES (2,12); /*Bridgeton*/ INSERT INTO citation_datasource_municipality (citation_datasource_id,municipality_id) VALUES (2,43); /*Jennings*/ INSERT INTO citation_datasource_municipality (citation_datasource_id,municipality_id) VALUES (2,45); /*Kirkwood*/ -INSERT INTO citation_datasource_municipality (citation_datasource_id,municipality_id) VALUES (2,92); /*St. Louis City Municipal*/ \ No newline at end of file +INSERT INTO citation_datasource_municipality (citation_datasource_id,municipality_id) VALUES (2,92); /*St. Louis City Municipal*/ + +INSERT INTO citation_datasource_municipality (citation_datasource_id,municipality_id) VALUES (3,52); /*Maryland Heights*/ \ No newline at end of file diff --git a/src/main/resources/hsql/citation-datasource.sql b/src/main/resources/hsql/citation-datasource.sql index cce595e..d5cc782 100644 --- a/src/main/resources/hsql/citation-datasource.sql +++ b/src/main/resources/hsql/citation-datasource.sql @@ -1,2 +1,3 @@ INSERT INTO citation_datasource (id,name) VALUES (1,'TYLER'); -INSERT INTO citation_datasource (id,name) VALUES (2,'REJIS'); \ No newline at end of file +INSERT INTO citation_datasource (id,name) VALUES (2,'REJIS'); +INSERT INTO citation_datasource (id,name) VALUES (3,'IMPORTED'); \ No newline at end of file diff --git a/src/main/resources/hsql/courtMappers/imported-court-mapper.sql b/src/main/resources/hsql/courtMappers/imported-court-mapper.sql new file mode 100644 index 0000000..672b35e --- /dev/null +++ b/src/main/resources/hsql/courtMappers/imported-court-mapper.sql @@ -0,0 +1 @@ +INSERT INTO imported_court_mapping (court_id,imported_court_identifier) VALUES (48,'MH'); /*Maryland Heights*/ \ No newline at end of file diff --git a/src/main/resources/hsql/datasource-municipality-mapping.sql b/src/main/resources/hsql/datasource-municipality-mapping.sql index 041df02..8995fa1 100644 --- a/src/main/resources/hsql/datasource-municipality-mapping.sql +++ b/src/main/resources/hsql/datasource-municipality-mapping.sql @@ -24,4 +24,6 @@ INSERT INTO datasource_municipality_mapping (citation_datasource_id,municipality INSERT INTO datasource_municipality_mapping (citation_datasource_id,municipality_id,datasource_municipality_identifier) VALUES (2,12,'BT'); /*Bridgeton*/ INSERT INTO datasource_municipality_mapping (citation_datasource_id,municipality_id,datasource_municipality_identifier) VALUES (2,43,'JN'); /*Jennings*/ INSERT INTO datasource_municipality_mapping (citation_datasource_id,municipality_id,datasource_municipality_identifier) VALUES (2,45,'KW'); /*Kirkwood*/ -INSERT INTO datasource_municipality_mapping (citation_datasource_id,municipality_id,datasource_municipality_identifier) VALUES (2,92,'SL'); /*St. Louis City Municipal*/ \ No newline at end of file +INSERT INTO datasource_municipality_mapping (citation_datasource_id,municipality_id,datasource_municipality_identifier) VALUES (2,92,'SL'); /*St. Louis City Municipal*/ + +INSERT INTO datasource_municipality_mapping (citation_datasource_id,municipality_id,datasource_municipality_identifier) VALUES (3,52,'MH'); /*Maryland Heights*/ \ No newline at end of file diff --git a/src/main/resources/sql/changelog/2018-01-12_ITI_Integration.sql b/src/main/resources/sql/changelog/2018-01-12_ITI_Integration.sql new file mode 100644 index 0000000..f0d563f --- /dev/null +++ b/src/main/resources/sql/changelog/2018-01-12_ITI_Integration.sql @@ -0,0 +1,13 @@ +INSERT INTO citation_datasource (id,name) VALUES (3,'IMPORTED'); +INSERT INTO datasource_municipality_mapping (citation_datasource_id,municipality_id,datasource_municipality_identifier) VALUES (3,52,'MH'); + +INSERT INTO citation_datasource_municipality (citation_datasource_id,municipality_id) VALUES (3,52); /*Maryland Heights*/ + +CREATE TABLE imported_court_mapping( + court_id INTEGER NOT NULL, + imported_court_identifier VARCHAR(25) +)ENGINE=InnoDB; + +ALTER TABLE imported_court_mapping ADD CONSTRAINT imported_court_mapping_fk_1 FOREIGN KEY (court_id) REFERENCES court (court_id); + +INSERT INTO imported_court_mapping (court_id,imported_court_identifier) VALUES (48,'MH'); /*Maryland Heights*/ \ No newline at end of file diff --git a/src/main/resources/sql/citation/datasources/transformers/imported-courtTransformer.sql b/src/main/resources/sql/citation/datasources/transformers/imported-courtTransformer.sql new file mode 100644 index 0000000..8476621 --- /dev/null +++ b/src/main/resources/sql/citation/datasources/transformers/imported-courtTransformer.sql @@ -0,0 +1 @@ +SELECT court_id FROM municipality_court WHERE municipality_id = :municipalityId \ No newline at end of file diff --git a/src/main/resources/sql/schema/schema-tables.sql b/src/main/resources/sql/schema/schema-tables.sql index f398b0d..0c76a87 100644 --- a/src/main/resources/sql/schema/schema-tables.sql +++ b/src/main/resources/sql/schema/schema-tables.sql @@ -96,6 +96,11 @@ CREATE TABLE rejis_court_mapping( rejis_court_identifier VARCHAR(25) ); +CREATE TABLE imported_court_mapping( + court_id INTEGER NOT NULL, + imported_court_identifier VARCHAR(25) +); + CREATE TABLE datasource_municipality_mapping( citation_datasource_id INTEGER, municipality_id INTEGER, diff --git a/src/test/java/svc/data/citations/datasources/tyler/TylerCitationDataSourceIntegrationTest.java b/src/test/java/svc/data/citations/datasources/tyler/TylerCitationDataSourceIntegrationTest.java index 839df84..c6b960c 100644 --- a/src/test/java/svc/data/citations/datasources/tyler/TylerCitationDataSourceIntegrationTest.java +++ b/src/test/java/svc/data/citations/datasources/tyler/TylerCitationDataSourceIntegrationTest.java @@ -16,6 +16,7 @@ import org.springframework.test.context.junit4.SpringRunner; import svc.Application; +import svc.data.citations.datasources.imported.TylerCitationDataSource; import svc.models.Citation; @Ignore diff --git a/src/test/java/svc/data/citations/datasources/tyler/TylerCitationDataSourceTest.java b/src/test/java/svc/data/citations/datasources/tyler/TylerCitationDataSourceTest.java index ed9b3f3..a296c99 100644 --- a/src/test/java/svc/data/citations/datasources/tyler/TylerCitationDataSourceTest.java +++ b/src/test/java/svc/data/citations/datasources/tyler/TylerCitationDataSourceTest.java @@ -30,6 +30,7 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import svc.data.citations.datasources.imported.TylerCitationDataSource; import svc.data.citations.datasources.tyler.models.TylerCitation; import svc.data.citations.datasources.tyler.transformers.TylerCitationTransformer; import svc.data.citations.filters.CitationFilter; From afa61ec21087a33eceb340371c4c790b068e4bc9 Mon Sep 17 00:00:00 2001 From: ctwoolsey Date: Tue, 16 Jan 2018 19:43:24 -0600 Subject: [PATCH 2/6] Get municipalityId from CourtId for Imported CitationData --- .../imported/models/ImportedCitation.java | 4 ++-- .../ImportedCitationTransformer.java | 8 ++++---- .../transformers/CourtIdTransformer.java | 18 ------------------ .../MunicipalityIdTransformer.java | 18 ++++++++++++++++++ .../transformers/imported-courtTransformer.sql | 1 - .../get-municipalityId-from-courtId.sql | 4 ++++ 6 files changed, 28 insertions(+), 25 deletions(-) delete mode 100644 src/main/resources/sql/citation/datasources/transformers/imported-courtTransformer.sql create mode 100644 src/main/resources/sql/municipality/get-municipalityId-from-courtId.sql diff --git a/src/main/java/svc/data/citations/datasources/imported/models/ImportedCitation.java b/src/main/java/svc/data/citations/datasources/imported/models/ImportedCitation.java index 781accc..bf45766 100644 --- a/src/main/java/svc/data/citations/datasources/imported/models/ImportedCitation.java +++ b/src/main/java/svc/data/citations/datasources/imported/models/ImportedCitation.java @@ -44,8 +44,8 @@ public class ImportedCitation { @JsonProperty("court_dateTime") public String courtDateTime; - @JsonProperty("municipality_id") - public Long municipalityId; + @JsonProperty("court_id") + public Long courtId; @JsonProperty public List violations; diff --git a/src/main/java/svc/data/citations/datasources/imported/transformers/ImportedCitationTransformer.java b/src/main/java/svc/data/citations/datasources/imported/transformers/ImportedCitationTransformer.java index 1eb4d5f..b1ecd37 100644 --- a/src/main/java/svc/data/citations/datasources/imported/transformers/ImportedCitationTransformer.java +++ b/src/main/java/svc/data/citations/datasources/imported/transformers/ImportedCitationTransformer.java @@ -14,7 +14,7 @@ import svc.data.citations.datasources.transformers.MunicipalityIdTransformer; import svc.logging.LogSystem; import svc.models.Citation; -import svc.models.Municipality; +import svc.models.Court; import svc.types.HashableEntity; @Component @@ -70,9 +70,9 @@ public Citation fromImportedCitation(ImportedCitation importedCitation) { genericCitation.violations = violationTransformer.fromImportedCitation(importedCitation); - genericCitation.court_id = courtIdTransformer.lookupCourtIdFromMunicipalityId(importedCitation.municipalityId); - genericCitation.municipality_id = new HashableEntity(Municipality.class, importedCitation.municipalityId); - + genericCitation.court_id = new HashableEntity(Court.class, importedCitation.courtId); + //returns first municipality associated with the court + genericCitation.municipality_id = municipalityIdTransformer.lookupMunicipalityIdFromCourtId(importedCitation.courtId); } genericCitation.defendant_address = importedCitation.defendantAddress; diff --git a/src/main/java/svc/data/citations/datasources/transformers/CourtIdTransformer.java b/src/main/java/svc/data/citations/datasources/transformers/CourtIdTransformer.java index f1c2fff..ef15326 100644 --- a/src/main/java/svc/data/citations/datasources/transformers/CourtIdTransformer.java +++ b/src/main/java/svc/data/citations/datasources/transformers/CourtIdTransformer.java @@ -44,24 +44,6 @@ public HashableEntity lookupCourtId(CITATION_DATASOURCE citationDataSourc return null; } } - - public HashableEntity lookupCourtIdFromMunicipalityId(Long municipalityId){ - if (municipalityId != null){ - try{ - Map parameterMap = new HashMap(); - parameterMap.put("municipalityId", municipalityId); - String sql = this.getSql("citation/datasources/transformers/imported-courtTransformer.sql"); - Long courtId = jdbcTemplate.queryForObject(sql, parameterMap, new CourtIdSQLMapper()); - return new HashableEntity(Court.class, courtId); - - } catch (Exception e) { - LogSystem.LogDBException(e); - return null; - } - }else{ - return null; - } - } private class CourtIdSQLMapper implements RowMapper { public Long mapRow(ResultSet rs, int i) { diff --git a/src/main/java/svc/data/citations/datasources/transformers/MunicipalityIdTransformer.java b/src/main/java/svc/data/citations/datasources/transformers/MunicipalityIdTransformer.java index b23c422..101dd72 100644 --- a/src/main/java/svc/data/citations/datasources/transformers/MunicipalityIdTransformer.java +++ b/src/main/java/svc/data/citations/datasources/transformers/MunicipalityIdTransformer.java @@ -32,6 +32,24 @@ public HashableEntity lookupMunicipalityId(CITATION_DATASOURCE dat return null; } } + + public HashableEntity lookupMunicipalityIdFromCourtId(Long courtId){ + if (courtId != null){ + try{ + Map parameterMap = new HashMap(); + parameterMap.put("courtId", courtId); + String sql = this.getSql("municipality/get-municipalityId-from-courtId.sql"); + Long municipalityId = jdbcTemplate.queryForObject(sql, parameterMap, new MunicipalityIdSQLMapper()); + return new HashableEntity(Municipality.class, municipalityId); + + } catch (Exception e) { + LogSystem.LogDBException(e); + return null; + } + }else{ + return null; + } + } private class MunicipalityIdSQLMapper implements RowMapper { public Long mapRow(ResultSet rs, int i) { diff --git a/src/main/resources/sql/citation/datasources/transformers/imported-courtTransformer.sql b/src/main/resources/sql/citation/datasources/transformers/imported-courtTransformer.sql deleted file mode 100644 index 8476621..0000000 --- a/src/main/resources/sql/citation/datasources/transformers/imported-courtTransformer.sql +++ /dev/null @@ -1 +0,0 @@ -SELECT court_id FROM municipality_court WHERE municipality_id = :municipalityId \ No newline at end of file diff --git a/src/main/resources/sql/municipality/get-municipalityId-from-courtId.sql b/src/main/resources/sql/municipality/get-municipalityId-from-courtId.sql new file mode 100644 index 0000000..2d812f8 --- /dev/null +++ b/src/main/resources/sql/municipality/get-municipalityId-from-courtId.sql @@ -0,0 +1,4 @@ +SELECT municipality_id +FROM municipality_court +WHERE court_id = :courtId +LIMIT 1 \ No newline at end of file From 7d7fdb47bf56d0ab37a6b134181bd93bbf9d0dff Mon Sep 17 00:00:00 2001 From: ctwoolsey Date: Wed, 17 Jan 2018 13:37:17 -0600 Subject: [PATCH 3/6] Imported Citations integrated into API --- .../citations/CitationDataSourceFactory.java | 8 +++----- .../imported/ImportedCitationDataSource.java | 13 ++++++++++--- .../transformers/CourtIdTransformer.java | 18 ++++++++++++++++++ .../get-courtIds-from-municipalityIds.sql | 1 + .../rejis/RejisCitationDataSourceTest.java | 3 +++ ...TylerCitationDataSourceIntegrationTest.java | 2 +- .../tyler/TylerCitationDataSourceTest.java | 2 +- 7 files changed, 37 insertions(+), 10 deletions(-) create mode 100644 src/main/resources/sql/court/get-courtIds-from-municipalityIds.sql diff --git a/src/main/java/svc/data/citations/CitationDataSourceFactory.java b/src/main/java/svc/data/citations/CitationDataSourceFactory.java index a7bbe85..31f88c7 100644 --- a/src/main/java/svc/data/citations/CitationDataSourceFactory.java +++ b/src/main/java/svc/data/citations/CitationDataSourceFactory.java @@ -11,6 +11,7 @@ import javax.inject.Inject; import java.sql.ResultSet; import java.util.*; +import java.util.stream.Collectors; @Component public class CitationDataSourceFactory extends BaseJdbcDao { @@ -92,11 +93,8 @@ private List getCitationDataSourceNames(List municipa if(municipalityIds.size() > 0) { //NOTE: The following 2 lines could be 1 if we use Groovy - StringJoiner joiner = new StringJoiner(","); - for(Long id : municipalityIds) { joiner.add(id.toString()); } - parameterMap.put("municipalities", joiner.toString()); - - sql += " WHERE cdm.municipality_id IN(:municipalities)"; + List municipalityIds_string = municipalityIds.stream().map(Object::toString).collect(Collectors.toList()); + sql += " WHERE cdm.municipality_id IN("+String.join(",",municipalityIds_string)+")"; } sourceNames = jdbcTemplate.query(sql, parameterMap, new CitationDataSourceMapper()); } catch (Exception e) { diff --git a/src/main/java/svc/data/citations/datasources/imported/ImportedCitationDataSource.java b/src/main/java/svc/data/citations/datasources/imported/ImportedCitationDataSource.java index f552727..a19f073 100644 --- a/src/main/java/svc/data/citations/datasources/imported/ImportedCitationDataSource.java +++ b/src/main/java/svc/data/citations/datasources/imported/ImportedCitationDataSource.java @@ -4,6 +4,7 @@ import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.List; +import java.util.stream.Collectors; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.ParameterizedTypeReference; @@ -21,6 +22,7 @@ import svc.data.citations.CitationDataSource; import svc.data.citations.datasources.imported.models.ImportedCitation; import svc.data.citations.datasources.imported.transformers.ImportedCitationTransformer; +import svc.data.citations.datasources.transformers.CourtIdTransformer; import svc.data.citations.filters.CitationFilter; import svc.models.Citation; @@ -33,6 +35,9 @@ public class ImportedCitationDataSource implements CitationDataSource { @Autowired private ImportedCitationTransformer citationTransformer; + @Autowired + private CourtIdTransformer courtIdTransformer; + @Autowired private CitationFilter citationFilter; @@ -61,8 +66,11 @@ public List getByLicenseAndDOBAndLastName(String driversLicenseNumber, @Override public List getByNameAndMunicipalitiesAndDOB(String lastName, List municipalities, LocalDate dob) { + + List courtIds = courtIdTransformer.getCourtIdsFromMunicipalityIds(municipalities); + List courtIds_string = courtIds.stream().map(Object::toString).collect(Collectors.toList()); UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(importedConfiguration.rootUrl) - .queryParam("lastName", lastName).queryParam("dob", dob.format(dobFormatter)); + .queryParam("lastName", lastName).queryParam("dob", dob.format(dobFormatter)).queryParam("courtIds",String.join(",",courtIds_string)); return performRestTemplateCall(builder.build().encode().toUri(), dob, lastName); } @@ -83,7 +91,6 @@ private List performRestTemplateCall(URI uri, LocalDate dob, String la System.out.println("Imported datasource is down."); return Lists.newArrayList(); } - - } + } diff --git a/src/main/java/svc/data/citations/datasources/transformers/CourtIdTransformer.java b/src/main/java/svc/data/citations/datasources/transformers/CourtIdTransformer.java index ef15326..0e06e78 100644 --- a/src/main/java/svc/data/citations/datasources/transformers/CourtIdTransformer.java +++ b/src/main/java/svc/data/citations/datasources/transformers/CourtIdTransformer.java @@ -2,6 +2,7 @@ import java.sql.ResultSet; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.springframework.jdbc.core.RowMapper; @@ -44,6 +45,23 @@ public HashableEntity lookupCourtId(CITATION_DATASOURCE citationDataSourc return null; } } + + public List getCourtIdsFromMunicipalityIds(ListmunicipalityIds){ + if (municipalityIds != null){ + try{ + Map parameterMap = new HashMap<>(); + parameterMap.put("municipalities", municipalityIds); + List courtIds = jdbcTemplate.query(getSql("court/get-courtIds-from-municipalityIds.sql"), parameterMap, new CourtIdSQLMapper()); + return courtIds; + }catch (Exception e){ + LogSystem.LogDBException(e); + return null; + } + }else { + return null; + } + + } private class CourtIdSQLMapper implements RowMapper { public Long mapRow(ResultSet rs, int i) { diff --git a/src/main/resources/sql/court/get-courtIds-from-municipalityIds.sql b/src/main/resources/sql/court/get-courtIds-from-municipalityIds.sql new file mode 100644 index 0000000..99c7487 --- /dev/null +++ b/src/main/resources/sql/court/get-courtIds-from-municipalityIds.sql @@ -0,0 +1 @@ +SELECT DISTINCT court_id FROM municipality_court WHERE municipality_id IN (:municipalities) \ No newline at end of file diff --git a/src/test/java/svc/data/citations/datasources/rejis/RejisCitationDataSourceTest.java b/src/test/java/svc/data/citations/datasources/rejis/RejisCitationDataSourceTest.java index 6710fb5..175b016 100644 --- a/src/test/java/svc/data/citations/datasources/rejis/RejisCitationDataSourceTest.java +++ b/src/test/java/svc/data/citations/datasources/rejis/RejisCitationDataSourceTest.java @@ -61,6 +61,7 @@ public void init(){ } + @SuppressWarnings("unchecked") @Test public void returnsCitationsGivenCitationNumberAndDOB() throws URISyntaxException{ final List MUNICIPALITYCODES = Lists.newArrayList("A","B","C"); @@ -88,6 +89,7 @@ public void returnsCitationsGivenCitationNumberAndDOB() throws URISyntaxExceptio assertThat(returnedCitation.get(0).citation_number, is("1234")); } + @SuppressWarnings("unchecked") @Test public void returnsCitationsGivenLicenseAndDOB(){ final String DRIVERSLICENSENUMBER = "ABCDE"; @@ -118,6 +120,7 @@ public void returnsCitationsGivenLicenseAndDOB(){ assertThat(returnedCitation.get(0).citation_number, is("1234")); } + @SuppressWarnings("unchecked") @Test public void returnsCitationsGivenNameAndMunicipalitiesAndDOB(){ final String NAME = "Smith"; diff --git a/src/test/java/svc/data/citations/datasources/tyler/TylerCitationDataSourceIntegrationTest.java b/src/test/java/svc/data/citations/datasources/tyler/TylerCitationDataSourceIntegrationTest.java index c6b960c..33b3f2d 100644 --- a/src/test/java/svc/data/citations/datasources/tyler/TylerCitationDataSourceIntegrationTest.java +++ b/src/test/java/svc/data/citations/datasources/tyler/TylerCitationDataSourceIntegrationTest.java @@ -16,7 +16,7 @@ import org.springframework.test.context.junit4.SpringRunner; import svc.Application; -import svc.data.citations.datasources.imported.TylerCitationDataSource; +import svc.data.citations.datasources.tyler.TylerCitationDataSource; import svc.models.Citation; @Ignore diff --git a/src/test/java/svc/data/citations/datasources/tyler/TylerCitationDataSourceTest.java b/src/test/java/svc/data/citations/datasources/tyler/TylerCitationDataSourceTest.java index a296c99..1dcdac6 100644 --- a/src/test/java/svc/data/citations/datasources/tyler/TylerCitationDataSourceTest.java +++ b/src/test/java/svc/data/citations/datasources/tyler/TylerCitationDataSourceTest.java @@ -30,7 +30,7 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import svc.data.citations.datasources.imported.TylerCitationDataSource; +import svc.data.citations.datasources.tyler.TylerCitationDataSource; import svc.data.citations.datasources.tyler.models.TylerCitation; import svc.data.citations.datasources.tyler.transformers.TylerCitationTransformer; import svc.data.citations.filters.CitationFilter; From 6d25ddae750ff504c920701de331d298a3c4c7c3 Mon Sep 17 00:00:00 2001 From: ctwoolsey Date: Wed, 17 Jan 2018 22:57:30 -0600 Subject: [PATCH 4/6] Added unit tests for Imported Citation --- .../ImportedCitationTransformer.java | 8 +- .../ImportedCitationDataSourceTest.java | 155 ++++++++++++++++++ .../ImportedCitationTransformerTest.java | 131 +++++++++++++++ .../ImportedViolationTransformerTest.java | 74 +++++++++ .../transformers/CourtIdTransformerTest.java | 16 ++ .../MunicipalityIdTransformerTest.java | 15 ++ 6 files changed, 397 insertions(+), 2 deletions(-) create mode 100644 src/test/java/svc/data/citations/datasources/imported/ImportedCitationDataSourceTest.java create mode 100644 src/test/java/svc/data/citations/datasources/imported/transformers/ImportedCitationTransformerTest.java create mode 100644 src/test/java/svc/data/citations/datasources/imported/transformers/ImportedViolationTransformerTest.java diff --git a/src/main/java/svc/data/citations/datasources/imported/transformers/ImportedCitationTransformer.java b/src/main/java/svc/data/citations/datasources/imported/transformers/ImportedCitationTransformer.java index b1ecd37..d9f4250 100644 --- a/src/main/java/svc/data/citations/datasources/imported/transformers/ImportedCitationTransformer.java +++ b/src/main/java/svc/data/citations/datasources/imported/transformers/ImportedCitationTransformer.java @@ -66,8 +66,12 @@ public Citation fromImportedCitation(ImportedCitation importedCitation) { if (importedCitation.violations == null) { LogSystem.LogEvent("No violations received with imported citation. Skipping fields that require them."); } else { - genericCitation.court_dateTime = LocalDateTime.parse(importedCitation.courtDateTime, DateTimeFormatter.ISO_LOCAL_DATE_TIME); - + if (importedCitation.courtDateTime == null){ + LogSystem.LogEvent("received imported citation with no court date or time"); + } else { + genericCitation.court_dateTime = LocalDateTime.parse(importedCitation.courtDateTime, DateTimeFormatter.ISO_LOCAL_DATE_TIME); + } + genericCitation.violations = violationTransformer.fromImportedCitation(importedCitation); genericCitation.court_id = new HashableEntity(Court.class, importedCitation.courtId); diff --git a/src/test/java/svc/data/citations/datasources/imported/ImportedCitationDataSourceTest.java b/src/test/java/svc/data/citations/datasources/imported/ImportedCitationDataSourceTest.java new file mode 100644 index 0000000..52b2bc0 --- /dev/null +++ b/src/test/java/svc/data/citations/datasources/imported/ImportedCitationDataSourceTest.java @@ -0,0 +1,155 @@ +package svc.data.citations.datasources.imported; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.when; + +import java.net.URI; +import java.time.LocalDate; +import java.util.List; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.Spy; +import org.mockito.runners.MockitoJUnitRunner; + + +import com.google.common.collect.Lists; + +import org.springframework.web.client.RestClientException; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; + +import svc.data.citations.datasources.imported.models.ImportedCitation; +import svc.data.citations.datasources.imported.transformers.ImportedCitationTransformer; +import svc.data.citations.datasources.transformers.CourtIdTransformer; +import svc.data.citations.filters.CitationFilter; +import svc.models.Citation; + +@RunWith(MockitoJUnitRunner.class) +public class ImportedCitationDataSourceTest { + @InjectMocks + ImportedCitationDataSource mockImportedCitationDataSource; + + @Mock + ImportedConfiguration mockImportedConfiguration; + @Mock + UriComponentsBuilder mockUriComponentsBuilder; + @Mock + RestTemplate restTemplate; + @Mock + ImportedCitationTransformer mockCitationTransformer; + @Mock + CitationFilter mockCitationFilter; + @Mock + CourtIdTransformer mockCourtIdTransformer; + + @Spy + ResponseEntity> importedCitationsResponseSpy = new ResponseEntity>(HttpStatus.ACCEPTED); + + @SuppressWarnings("unchecked") + @Test + public void returnsCitationsGivenCitationNumberAndDOB(){ + final String CITATIONNUMBER = "F3453"; + final LocalDate DOB = LocalDate.parse("2000-06-01"); + mockImportedConfiguration.rootUrl = "http://myURL.com"; + final Citation CITATION = new Citation(); + CITATION.id = 3; + final List CITATIONS = Lists.newArrayList(CITATION); + final List importedCitations = Lists.newArrayList(); + Mockito.doReturn(importedCitations).when(importedCitationsResponseSpy).getBody(); + + when(restTemplate.exchange(any(URI.class), eq(HttpMethod.GET), any(HttpEntity.class), any(ParameterizedTypeReference.class))) + .thenReturn(importedCitationsResponseSpy); + + when(mockCitationTransformer.fromImportedCitations(importedCitations)).thenReturn(CITATIONS); + when(mockCitationFilter.Filter(CITATIONS, null)).thenReturn(CITATIONS); + + List citations = mockImportedCitationDataSource.getByCitationNumberAndDOB(CITATIONNUMBER, DOB); + + assertThat(citations.get(0).id, is(3)); + } + + @SuppressWarnings("unchecked") + @Test + public void returnsCitationsGivenLicenseAndDOB(){ + final String DRIVERSLICENSENUMBER = "ABCDE"; + final String DRIVERSLICENSESTATE = "AZ"; + final LocalDate DOB = LocalDate.parse("2000-06-01"); + final String LASTNAME = "someName"; + mockImportedConfiguration.rootUrl = "http://myURL.com"; + + final Citation CITATION = new Citation(); + CITATION.id = 3; + final List CITATIONS = Lists.newArrayList(CITATION); + final List importedCitations = Lists.newArrayList(); + Mockito.doReturn(importedCitations).when(importedCitationsResponseSpy).getBody(); + + when(restTemplate.exchange(any(URI.class), eq(HttpMethod.GET), any(HttpEntity.class), any(ParameterizedTypeReference.class))) + .thenReturn(importedCitationsResponseSpy); + + when(mockCitationTransformer.fromImportedCitations(importedCitations)).thenReturn(CITATIONS); + when(mockCitationFilter.Filter(CITATIONS, LASTNAME)).thenReturn(CITATIONS); + + List citations = mockImportedCitationDataSource.getByLicenseAndDOBAndLastName(DRIVERSLICENSENUMBER,DRIVERSLICENSESTATE, DOB, LASTNAME); + + assertThat(citations.get(0).id, is(3)); + } + + @SuppressWarnings("unchecked") + @Test + public void returnsCitationsGivenNameAndMunicipalitiesAndDOB(){ + final String NAME = "Smith"; + final List MUNICIPALITIES = Lists.newArrayList(5L); + final LocalDate DOB = LocalDate.parse("2000-06-01"); + mockImportedConfiguration.rootUrl = "http://myURL.com"; + + final Citation CITATION = new Citation(); + CITATION.id = 3; + final List CITATIONS = Lists.newArrayList(CITATION); + final List importedCitations = Lists.newArrayList(); + Mockito.doReturn(importedCitations).when(importedCitationsResponseSpy).getBody(); + + final List COURTIDS = Lists.newArrayList(1L); + when(mockCourtIdTransformer.getCourtIdsFromMunicipalityIds(MUNICIPALITIES)).thenReturn(COURTIDS); + + when(restTemplate.exchange(any(URI.class), eq(HttpMethod.GET), any(HttpEntity.class), any(ParameterizedTypeReference.class))) + .thenReturn(importedCitationsResponseSpy); + + when(mockCitationTransformer.fromImportedCitations(importedCitations)).thenReturn(CITATIONS); + when(mockCitationFilter.Filter(CITATIONS,NAME)).thenReturn(CITATIONS); + + List citations = mockImportedCitationDataSource.getByNameAndMunicipalitiesAndDOB(NAME,MUNICIPALITIES,DOB); + + assertThat(citations.get(0).id, is(3)); + } + + @SuppressWarnings("unchecked") + @Test + public void returnsEmptyCitationsOnRestTemplateError(){ + final String CITATIONNUMBER = "F3453"; + final LocalDate DOB = LocalDate.parse("2000-06-01"); + mockImportedConfiguration.rootUrl = "http://myURL.com"; + + final Citation CITATION = new Citation(); + CITATION.id = 3; + + when(restTemplate.exchange(any(URI.class), eq(HttpMethod.GET), any(HttpEntity.class), any(ParameterizedTypeReference.class))) + .thenThrow(RestClientException.class); + + List citations = mockImportedCitationDataSource.getByCitationNumberAndDOB(CITATIONNUMBER, DOB); + + assertThat(citations.size(), is(0)); + } + +} diff --git a/src/test/java/svc/data/citations/datasources/imported/transformers/ImportedCitationTransformerTest.java b/src/test/java/svc/data/citations/datasources/imported/transformers/ImportedCitationTransformerTest.java new file mode 100644 index 0000000..42a2037 --- /dev/null +++ b/src/test/java/svc/data/citations/datasources/imported/transformers/ImportedCitationTransformerTest.java @@ -0,0 +1,131 @@ +package svc.data.citations.datasources.imported.transformers; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.mockito.Matchers.anyLong; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; + +import com.google.common.collect.Lists; + +import svc.data.citations.datasources.imported.models.ImportedCitation; +import svc.data.citations.datasources.imported.models.ImportedViolation; +import svc.data.citations.datasources.transformers.CourtIdTransformer; +import svc.data.citations.datasources.transformers.MunicipalityIdTransformer; +import svc.models.Citation; +import svc.models.Municipality; +import svc.types.HashableEntity; + +@RunWith(MockitoJUnitRunner.class) +public class ImportedCitationTransformerTest { + + @Mock + ImportedViolationTransformer violationTransformer; + + @Mock + CourtIdTransformer courtIdTransformer; + + @InjectMocks + ImportedCitationTransformer citationTransformer; + + @Mock + MunicipalityIdTransformer municipalityIdTransformer; + + @Test + public void citationTransformerReturnsNullForEmptyLists() { + + List genericCitations = citationTransformer.fromImportedCitations(null); + + assertNull(genericCitations); + } + + private List generateListOfImportedCitations() { + return generateListOfImportedCitations(true); + } + + private List generateListOfImportedCitations(boolean withCitations) { + List listOfCitations = Lists.newArrayList(mock(ImportedCitation.class)); + + if (withCitations) { + for (ImportedCitation citation : listOfCitations) { + citation.violations = generateListOfImportedViolations(); + } + } + + return listOfCitations; + } + + private List generateListOfImportedViolations() { + return Lists.newArrayList(mock(ImportedViolation.class)); + } + + @Test + public void citationTransformerTransformsAllCitationsPassedIn() { + final HashableEntity municipalHashable = new HashableEntity(Municipality.class,3L); + when(municipalityIdTransformer.lookupMunicipalityIdFromCourtId(anyLong())) + .thenReturn(municipalHashable); + + List importedCitations = generateListOfImportedCitations(); + + List genericCitations = citationTransformer.fromImportedCitations(importedCitations); + + assertNotNull(genericCitations); + assertEquals(importedCitations.size(), genericCitations.size()); + } + + @Test + public void citationTransformerReturnsNullForNullCitation() { + + Citation genericCitation = citationTransformer.fromImportedCitation(null); + + assertNull(genericCitation); + } + + private ImportedCitation generateFullImportedCitation() { + ImportedCitation mockCitation = mock(ImportedCitation.class); + mockCitation.dateOfBirth = "1900-06-17"; + mockCitation.citationDate = "1901-06-17"; + mockCitation.courtDateTime = "1902-06-17T19:00:00.000"; + mockCitation.violations = generateListOfImportedViolations(); + mockCitation.violations.get(0).citationNumber = "ABC"; + + return mockCitation; + } + + + @Test + public void citationTransformerCopiesCitationFieldsCorrectly() { + ImportedCitation importedCitation = generateFullImportedCitation(); + final HashableEntity municipalHashable = new HashableEntity(Municipality.class,3L); + when(municipalityIdTransformer.lookupMunicipalityIdFromCourtId(anyLong())) + .thenReturn(municipalHashable); + + Citation genericCitation = citationTransformer.fromImportedCitation(importedCitation); + + assertNotNull(genericCitation); + assertEquals(genericCitation.citation_number, importedCitation.citationNumber); + assertEquals(genericCitation.first_name, importedCitation.firstName); + assertEquals(genericCitation.last_name, importedCitation.lastName); + assertEquals(genericCitation.drivers_license_number, importedCitation.driversLicenseNumber); + assertEquals(genericCitation.date_of_birth, LocalDate.parse("1900-06-17")); + assertEquals(genericCitation.citation_date, LocalDate.parse("1901-06-17")); + assertEquals(genericCitation.court_dateTime, LocalDateTime.parse("1902-06-17T19:00:00.000")); + assertEquals(genericCitation.municipality_id, municipalHashable); + + verify(violationTransformer).fromImportedCitation(importedCitation); + verify(municipalityIdTransformer).lookupMunicipalityIdFromCourtId(anyLong()); + } + +} diff --git a/src/test/java/svc/data/citations/datasources/imported/transformers/ImportedViolationTransformerTest.java b/src/test/java/svc/data/citations/datasources/imported/transformers/ImportedViolationTransformerTest.java new file mode 100644 index 0000000..3718541 --- /dev/null +++ b/src/test/java/svc/data/citations/datasources/imported/transformers/ImportedViolationTransformerTest.java @@ -0,0 +1,74 @@ +package svc.data.citations.datasources.imported.transformers; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.nullValue; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThat; + +import java.math.BigDecimal; +import java.util.List; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.runners.MockitoJUnitRunner; + +import com.google.common.collect.Lists; + +import svc.data.citations.datasources.imported.models.ImportedCitation; +import svc.data.citations.datasources.imported.models.ImportedViolation; +import svc.models.Violation; + +@RunWith(MockitoJUnitRunner.class) +public class ImportedViolationTransformerTest { + @InjectMocks + ImportedViolationTransformer mockViolationTransformer; + + ImportedCitation importedCitation; + ImportedViolation importedViolation; + + @Before + public void setUp(){ + importedCitation = new ImportedCitation(); + importedViolation = new ImportedViolation(); + importedCitation.citationNumber = "F123"; + importedViolation.violationNumber = "V123"; + importedViolation.violationDescription = "ABC"; + importedViolation.warrantStatus = true; + importedViolation.warrantNumber = "W123"; + importedViolation.fineAmount = new BigDecimal("23.00"); + importedViolation.canPayOnline = true; + } + + @Test + public void returnsGenericViolationFromTylerViolation(){ + Violation violation = mockViolationTransformer.fromImportedViolation(importedCitation, importedViolation); + + assertThat(violation.citation_number,is("F123")); + assertThat(violation.violation_number,is("V123")); + assertThat(violation.violation_description,is("ABC")); + assertThat(violation.warrant_status,is(true)); + assertThat(violation.warrant_number,is("W123")); + assertThat(violation.fine_amount,is(new BigDecimal("23.00"))); + assertThat(violation.court_cost,is(nullValue())); + assertThat(violation.can_pay_online, is(true)); + } + + @Test + public void returnsGenericViolationListFromTylerCitation(){ + importedCitation.violations = Lists.newArrayList(importedViolation); + List violations = mockViolationTransformer.fromImportedCitation(importedCitation); + + assertNotNull(violations); + assertThat(violations.size(),is(1)); + assertThat(violations.get(0).citation_number,is("F123")); + assertThat(violations.get(0).violation_number,is("V123")); + assertThat(violations.get(0).violation_description,is("ABC")); + assertThat(violations.get(0).warrant_status,is(true)); + assertThat(violations.get(0).warrant_number,is("W123")); + assertThat(violations.get(0).fine_amount,is(new BigDecimal("23.00"))); + assertThat(violations.get(0).court_cost,is(nullValue())); + } + +} diff --git a/src/test/java/svc/data/citations/datasources/transformers/CourtIdTransformerTest.java b/src/test/java/svc/data/citations/datasources/transformers/CourtIdTransformerTest.java index 8903271..dd516d5 100644 --- a/src/test/java/svc/data/citations/datasources/transformers/CourtIdTransformerTest.java +++ b/src/test/java/svc/data/citations/datasources/transformers/CourtIdTransformerTest.java @@ -1,6 +1,7 @@ package svc.data.citations.datasources.transformers; import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertThat; import static org.mockito.Matchers.anyMap; @@ -10,6 +11,8 @@ import static org.springframework.core.io.ResourceLoader.CLASSPATH_URL_PREFIX; import java.io.IOException; +import java.util.Arrays; +import java.util.List; import org.junit.Test; import org.junit.runner.RunWith; @@ -63,6 +66,19 @@ public void returnsCourtIdFromRejisCourtIdentifier() throws IOException{ assertThat(returnedCourtId.getValue(),is(5L)); } + @SuppressWarnings("unchecked") + @Test + public void returnsCourtIdsFromMunicipalityIds() throws IOException{ + Resource resource = mock(Resource.class); + when(resource.getInputStream()).thenReturn(null); + when(resourceLoader.getResource(CLASSPATH_URL_PREFIX + "sql/court/get-courtIds-from-municipalityIds.sql")).thenReturn(resource); + + final List COURTIDS = Arrays.asList(5L,6L,7L); + when(mockJdbcTemplate.query(anyString(),anyMap(),Matchers.>any())).thenReturn(COURTIDS); + + List returnedCourtIds = mockCourtIdTransformer.getCourtIdsFromMunicipalityIds(Arrays.asList(1L,2L,3L)); + assertEquals(COURTIDS,returnedCourtIds); + } public void returnsNullWhenInvalidCitationDatasource(){ diff --git a/src/test/java/svc/data/citations/datasources/transformers/MunicipalityIdTransformerTest.java b/src/test/java/svc/data/citations/datasources/transformers/MunicipalityIdTransformerTest.java index d0172d0..d21efd5 100644 --- a/src/test/java/svc/data/citations/datasources/transformers/MunicipalityIdTransformerTest.java +++ b/src/test/java/svc/data/citations/datasources/transformers/MunicipalityIdTransformerTest.java @@ -49,5 +49,20 @@ public void returnsMunicipalityIdFromTylerCourtIdentifier() throws IOException{ HashableEntity returnedMunicipalityId = mockMunicipalityIdTransformer.lookupMunicipalityId(CITATION_DATASOURCE.TYLER,"someIdentifier"); assertThat(returnedMunicipalityId.getValue(),is(5L)); } + + @SuppressWarnings("unchecked") + @Test + public void returnsMunicipalityIdFromCourtId() throws IOException{ + Resource resource = mock(Resource.class); + when(resource.getInputStream()).thenReturn(null); + when(resourceLoader.getResource(CLASSPATH_URL_PREFIX + "sql/municipality/get-municipalityId-from-courtId.sql")).thenReturn(resource); + + + when(mockJdbcTemplate.queryForObject(anyString(),anyMap(),Matchers.>any())).thenReturn(5L); + + final Long COURTID = 5L; + HashableEntity returnedMunicipalityId = mockMunicipalityIdTransformer.lookupMunicipalityIdFromCourtId(COURTID); + assertThat(returnedMunicipalityId.getValue(),is(COURTID)); + } } From 3171bdbaa0921d53f86df471cf885530882c677c Mon Sep 17 00:00:00 2001 From: ctwoolsey Date: Thu, 1 Feb 2018 20:13:24 -0600 Subject: [PATCH 5/6] Updated naming from Imported to ImportedIti --- .../citations/CitationDataSourceFactory.java | 6 +- .../datasources/CITATION_DATASOURCE.java | 2 +- .../imported/ImportedConfiguration.java | 11 ---- .../ImportedViolationTransformer.java | 39 ------------- .../ImportedItiCitationDataSource.java} | 30 +++++----- .../importedITI/ImportedItiConfiguration.java | 11 ++++ .../models/ImportedItiCitation.java} | 6 +- .../models/ImportedItiViolation.java} | 4 +- .../ImportedItiCitationTransformer.java} | 18 +++--- .../ImportedItiViolationTransformer.java | 39 +++++++++++++ src/main/java/svc/profiles/LocalProfile.java | 2 +- .../profiles/LocalWithHSQLAccessProfile.java | 2 +- src/main/resources/application.yml | 4 +- .../resources/hsql/citation-datasource.sql | 2 +- .../courtMappers/imported-court-mapper.sql | 1 - .../imported-iti-court-mapper.sql | 1 + .../changelog/2018-01-12_ITI_Integration.sql | 10 ++-- .../resources/sql/schema/schema-tables.sql | 4 +- .../ImportedItiCitationDataSourceTest.java} | 56 +++++++++---------- .../ImportedItiCitationTransformerTest.java} | 54 +++++++++--------- .../ImportedItiViolationTransformerTest.java} | 42 +++++++------- 21 files changed, 172 insertions(+), 172 deletions(-) delete mode 100644 src/main/java/svc/data/citations/datasources/imported/ImportedConfiguration.java delete mode 100644 src/main/java/svc/data/citations/datasources/imported/transformers/ImportedViolationTransformer.java rename src/main/java/svc/data/citations/datasources/{imported/ImportedCitationDataSource.java => importedITI/ImportedItiCitationDataSource.java} (76%) create mode 100644 src/main/java/svc/data/citations/datasources/importedITI/ImportedItiConfiguration.java rename src/main/java/svc/data/citations/datasources/{imported/models/ImportedCitation.java => importedITI/models/ImportedItiCitation.java} (88%) rename src/main/java/svc/data/citations/datasources/{imported/models/ImportedViolation.java => importedITI/models/ImportedItiViolation.java} (88%) rename src/main/java/svc/data/citations/datasources/{imported/transformers/ImportedCitationTransformer.java => importedITI/transformers/ImportedItiCitationTransformer.java} (82%) create mode 100644 src/main/java/svc/data/citations/datasources/importedITI/transformers/ImportedItiViolationTransformer.java delete mode 100644 src/main/resources/hsql/courtMappers/imported-court-mapper.sql create mode 100644 src/main/resources/hsql/courtMappers/imported-iti-court-mapper.sql rename src/test/java/svc/data/citations/datasources/{imported/ImportedCitationDataSourceTest.java => importedITI/ImportedItiCitationDataSourceTest.java} (63%) rename src/test/java/svc/data/citations/datasources/{imported/transformers/ImportedCitationTransformerTest.java => importedITI/transformers/ImportedItiCitationTransformerTest.java} (59%) rename src/test/java/svc/data/citations/datasources/{imported/transformers/ImportedViolationTransformerTest.java => importedITI/transformers/ImportedItiViolationTransformerTest.java} (56%) diff --git a/src/main/java/svc/data/citations/CitationDataSourceFactory.java b/src/main/java/svc/data/citations/CitationDataSourceFactory.java index 31f88c7..8a265d6 100644 --- a/src/main/java/svc/data/citations/CitationDataSourceFactory.java +++ b/src/main/java/svc/data/citations/CitationDataSourceFactory.java @@ -31,7 +31,7 @@ public class CitationDataSourceFactory extends BaseJdbcDao { private CitationDataSource rejisCitationDataSource; @Inject - private CitationDataSource importedCitationDataSource; + private CitationDataSource importedItiCitationDataSource; public List getAllCitationDataSources() { return getDataSources(); @@ -73,8 +73,8 @@ private List getSourcesFromNames(List s case REJIS: dataSources.add(rejisCitationDataSource); break; - case IMPORTED: - dataSources.add(importedCitationDataSource); + case IMPORTEDITI: + dataSources.add(importedItiCitationDataSource); break; default: LogSystem.LogCitationDataSourceException("Source '" + source.toString() + "' is not supported"); diff --git a/src/main/java/svc/data/citations/datasources/CITATION_DATASOURCE.java b/src/main/java/svc/data/citations/datasources/CITATION_DATASOURCE.java index d1d237f..67f2c23 100644 --- a/src/main/java/svc/data/citations/datasources/CITATION_DATASOURCE.java +++ b/src/main/java/svc/data/citations/datasources/CITATION_DATASOURCE.java @@ -4,5 +4,5 @@ public enum CITATION_DATASOURCE { MOCK, TYLER, REJIS, - IMPORTED + IMPORTEDITI } diff --git a/src/main/java/svc/data/citations/datasources/imported/ImportedConfiguration.java b/src/main/java/svc/data/citations/datasources/imported/ImportedConfiguration.java deleted file mode 100644 index e5e6995..0000000 --- a/src/main/java/svc/data/citations/datasources/imported/ImportedConfiguration.java +++ /dev/null @@ -1,11 +0,0 @@ -package svc.data.citations.datasources.imported; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; - -@Component -public class ImportedConfiguration { - - @Value("${stlcourts.citationDataSources.imported.rootUrl}") - public String rootUrl; -} diff --git a/src/main/java/svc/data/citations/datasources/imported/transformers/ImportedViolationTransformer.java b/src/main/java/svc/data/citations/datasources/imported/transformers/ImportedViolationTransformer.java deleted file mode 100644 index b5bf123..0000000 --- a/src/main/java/svc/data/citations/datasources/imported/transformers/ImportedViolationTransformer.java +++ /dev/null @@ -1,39 +0,0 @@ -package svc.data.citations.datasources.imported.transformers; - -import java.util.List; -import java.util.stream.Collectors; - -import org.springframework.stereotype.Component; - -import svc.data.citations.datasources.imported.models.ImportedCitation; -import svc.data.citations.datasources.imported.models.ImportedViolation; -import svc.models.Violation; - -@Component -public class ImportedViolationTransformer { - - public List fromImportedCitation(ImportedCitation importedCitation) { - if (importedCitation.violations != null) { - return importedCitation.violations.stream() - .map(importedViolation -> fromImportedViolation(importedCitation, importedViolation)) - .collect(Collectors.toList()); - } - return null; - } - - public Violation fromImportedViolation(ImportedCitation importedCitation, ImportedViolation importedViolation) { - - Violation genericViolation = new Violation(); - genericViolation.citation_number = importedCitation.citationNumber; - genericViolation.violation_number = importedViolation.violationNumber; - genericViolation.violation_description = importedViolation.violationDescription; - genericViolation.warrant_status = importedViolation.warrantStatus; - genericViolation.warrant_number = importedViolation.warrantNumber; - genericViolation.fine_amount = importedViolation.fineAmount; - genericViolation.can_pay_online = importedViolation.canPayOnline; - genericViolation.court_cost = null; - - return genericViolation; - } - -} diff --git a/src/main/java/svc/data/citations/datasources/imported/ImportedCitationDataSource.java b/src/main/java/svc/data/citations/datasources/importedITI/ImportedItiCitationDataSource.java similarity index 76% rename from src/main/java/svc/data/citations/datasources/imported/ImportedCitationDataSource.java rename to src/main/java/svc/data/citations/datasources/importedITI/ImportedItiCitationDataSource.java index a19f073..4bd031a 100644 --- a/src/main/java/svc/data/citations/datasources/imported/ImportedCitationDataSource.java +++ b/src/main/java/svc/data/citations/datasources/importedITI/ImportedItiCitationDataSource.java @@ -1,4 +1,4 @@ -package svc.data.citations.datasources.imported; +package svc.data.citations.datasources.importedITI; import java.net.URI; import java.time.LocalDate; @@ -20,20 +20,20 @@ import com.google.common.collect.Lists; import svc.data.citations.CitationDataSource; -import svc.data.citations.datasources.imported.models.ImportedCitation; -import svc.data.citations.datasources.imported.transformers.ImportedCitationTransformer; +import svc.data.citations.datasources.importedITI.models.ImportedItiCitation; +import svc.data.citations.datasources.importedITI.transformers.ImportedItiCitationTransformer; import svc.data.citations.datasources.transformers.CourtIdTransformer; import svc.data.citations.filters.CitationFilter; import svc.models.Citation; @Repository -public class ImportedCitationDataSource implements CitationDataSource { +public class ImportedItiCitationDataSource implements CitationDataSource { @Autowired - private ImportedConfiguration importedConfiguration; + private ImportedItiConfiguration importedItiConfiguration; @Autowired - private ImportedCitationTransformer citationTransformer; + private ImportedItiCitationTransformer citationTransformer; @Autowired private CourtIdTransformer courtIdTransformer; @@ -49,7 +49,7 @@ public class ImportedCitationDataSource implements CitationDataSource { @Override public List getByCitationNumberAndDOB(String citationNumber, LocalDate dob) { - UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(importedConfiguration.rootUrl) + UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(importedItiConfiguration.rootUrl) .queryParam("citationNumber", citationNumber).queryParam("dob", dob.format(dobFormatter)); return performRestTemplateCall(builder.build().encode().toUri(), dob, null); @@ -57,7 +57,7 @@ public List getByCitationNumberAndDOB(String citationNumber, LocalDate @Override public List getByLicenseAndDOBAndLastName(String driversLicenseNumber, String driversLicenseState, LocalDate dob, String lastName) { - UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(importedConfiguration.rootUrl) + UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(importedItiConfiguration.rootUrl) .queryParam("licenseNumber", driversLicenseNumber).queryParam("dob", dob.format(dobFormatter)) .queryParam("licenseState", driversLicenseState).queryParam("lastName", lastName); @@ -69,7 +69,7 @@ public List getByNameAndMunicipalitiesAndDOB(String lastName, List courtIds = courtIdTransformer.getCourtIdsFromMunicipalityIds(municipalities); List courtIds_string = courtIds.stream().map(Object::toString).collect(Collectors.toList()); - UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(importedConfiguration.rootUrl) + UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(importedItiConfiguration.rootUrl) .queryParam("lastName", lastName).queryParam("dob", dob.format(dobFormatter)).queryParam("courtIds",String.join(",",courtIds_string)); return performRestTemplateCall(builder.build().encode().toUri(), dob, lastName); @@ -78,17 +78,17 @@ public List getByNameAndMunicipalitiesAndDOB(String lastName, List performRestTemplateCall(URI uri, LocalDate dob, String lastName) { HttpHeaders headers = new HttpHeaders(); HttpEntity query = new HttpEntity<>(headers); - ResponseEntity> importedCitationsResponse = null; - ParameterizedTypeReference> type = new ParameterizedTypeReference>() { + ResponseEntity> importedCitationsResponse = null; + ParameterizedTypeReference> type = new ParameterizedTypeReference>() { }; - List importedCitations = null; + List importedItiCitations = null; try { importedCitationsResponse = restTemplate.exchange(uri, HttpMethod.GET, query, type); - importedCitations = importedCitationsResponse.getBody(); - return citationFilter.Filter(citationTransformer.fromImportedCitations(importedCitations), lastName); + importedItiCitations = importedCitationsResponse.getBody(); + return citationFilter.Filter(citationTransformer.fromImportedItiCitations(importedItiCitations), lastName); } catch (RestClientException ex) { - System.out.println("Imported datasource is down."); + System.out.println("Imported ITI datasource is down."); return Lists.newArrayList(); } } diff --git a/src/main/java/svc/data/citations/datasources/importedITI/ImportedItiConfiguration.java b/src/main/java/svc/data/citations/datasources/importedITI/ImportedItiConfiguration.java new file mode 100644 index 0000000..694eff6 --- /dev/null +++ b/src/main/java/svc/data/citations/datasources/importedITI/ImportedItiConfiguration.java @@ -0,0 +1,11 @@ +package svc.data.citations.datasources.importedITI; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +@Component +public class ImportedItiConfiguration { + + @Value("${stlcourts.citationDataSources.importedITI.rootUrl}") + public String rootUrl; +} diff --git a/src/main/java/svc/data/citations/datasources/imported/models/ImportedCitation.java b/src/main/java/svc/data/citations/datasources/importedITI/models/ImportedItiCitation.java similarity index 88% rename from src/main/java/svc/data/citations/datasources/imported/models/ImportedCitation.java rename to src/main/java/svc/data/citations/datasources/importedITI/models/ImportedItiCitation.java index bf45766..bcd5664 100644 --- a/src/main/java/svc/data/citations/datasources/imported/models/ImportedCitation.java +++ b/src/main/java/svc/data/citations/datasources/importedITI/models/ImportedItiCitation.java @@ -1,4 +1,4 @@ -package svc.data.citations.datasources.imported.models; +package svc.data.citations.datasources.importedITI.models; import java.util.List; @@ -6,7 +6,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @JsonIgnoreProperties(ignoreUnknown = true) -public class ImportedCitation { +public class ImportedItiCitation { @JsonProperty("citation_number") public String citationNumber; @@ -48,5 +48,5 @@ public class ImportedCitation { public Long courtId; @JsonProperty - public List violations; + public List violations; } diff --git a/src/main/java/svc/data/citations/datasources/imported/models/ImportedViolation.java b/src/main/java/svc/data/citations/datasources/importedITI/models/ImportedItiViolation.java similarity index 88% rename from src/main/java/svc/data/citations/datasources/imported/models/ImportedViolation.java rename to src/main/java/svc/data/citations/datasources/importedITI/models/ImportedItiViolation.java index f880d2d..107fadb 100644 --- a/src/main/java/svc/data/citations/datasources/imported/models/ImportedViolation.java +++ b/src/main/java/svc/data/citations/datasources/importedITI/models/ImportedItiViolation.java @@ -1,4 +1,4 @@ -package svc.data.citations.datasources.imported.models; +package svc.data.citations.datasources.importedITI.models; import java.math.BigDecimal; @@ -6,7 +6,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; @JsonIgnoreProperties(ignoreUnknown = true) -public class ImportedViolation { +public class ImportedItiViolation { @JsonProperty("citation_number") public String citationNumber; diff --git a/src/main/java/svc/data/citations/datasources/imported/transformers/ImportedCitationTransformer.java b/src/main/java/svc/data/citations/datasources/importedITI/transformers/ImportedItiCitationTransformer.java similarity index 82% rename from src/main/java/svc/data/citations/datasources/imported/transformers/ImportedCitationTransformer.java rename to src/main/java/svc/data/citations/datasources/importedITI/transformers/ImportedItiCitationTransformer.java index d9f4250..eea08ed 100644 --- a/src/main/java/svc/data/citations/datasources/imported/transformers/ImportedCitationTransformer.java +++ b/src/main/java/svc/data/citations/datasources/importedITI/transformers/ImportedItiCitationTransformer.java @@ -1,4 +1,4 @@ -package svc.data.citations.datasources.imported.transformers; +package svc.data.citations.datasources.importedITI.transformers; import java.time.LocalDate; import java.time.LocalDateTime; @@ -9,7 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import svc.data.citations.datasources.imported.models.ImportedCitation; +import svc.data.citations.datasources.importedITI.models.ImportedItiCitation; import svc.data.citations.datasources.transformers.CourtIdTransformer; import svc.data.citations.datasources.transformers.MunicipalityIdTransformer; import svc.logging.LogSystem; @@ -18,10 +18,10 @@ import svc.types.HashableEntity; @Component -public class ImportedCitationTransformer { +public class ImportedItiCitationTransformer { @Autowired - ImportedViolationTransformer violationTransformer; + ImportedItiViolationTransformer violationTransformer; @Autowired CourtIdTransformer courtIdTransformer; @@ -29,17 +29,17 @@ public class ImportedCitationTransformer { @Autowired MunicipalityIdTransformer municipalityIdTransformer; - public List fromImportedCitations(List importedCitations) { - if (importedCitations != null) { - return importedCitations.stream() - .map(importedCitation -> fromImportedCitation(importedCitation)) + public List fromImportedItiCitations(List importedItiCitations) { + if (importedItiCitations != null) { + return importedItiCitations.stream() + .map(importedItiCitation -> fromImportedItiCitation(importedItiCitation)) .collect(Collectors.toList()); } return null; } - public Citation fromImportedCitation(ImportedCitation importedCitation) { + public Citation fromImportedItiCitation(ImportedItiCitation importedCitation) { if (importedCitation == null) { return null; } diff --git a/src/main/java/svc/data/citations/datasources/importedITI/transformers/ImportedItiViolationTransformer.java b/src/main/java/svc/data/citations/datasources/importedITI/transformers/ImportedItiViolationTransformer.java new file mode 100644 index 0000000..2156d26 --- /dev/null +++ b/src/main/java/svc/data/citations/datasources/importedITI/transformers/ImportedItiViolationTransformer.java @@ -0,0 +1,39 @@ +package svc.data.citations.datasources.importedITI.transformers; + +import java.util.List; +import java.util.stream.Collectors; + +import org.springframework.stereotype.Component; + +import svc.data.citations.datasources.importedITI.models.ImportedItiCitation; +import svc.data.citations.datasources.importedITI.models.ImportedItiViolation; +import svc.models.Violation; + +@Component +public class ImportedItiViolationTransformer { + + public List fromImportedCitation(ImportedItiCitation importedItiCitation) { + if (importedItiCitation.violations != null) { + return importedItiCitation.violations.stream() + .map(importedItiViolation -> fromImportedItiViolation(importedItiCitation, importedItiViolation)) + .collect(Collectors.toList()); + } + return null; + } + + public Violation fromImportedItiViolation(ImportedItiCitation importedItiCitation, ImportedItiViolation importedItiViolation) { + + Violation genericViolation = new Violation(); + genericViolation.citation_number = importedItiCitation.citationNumber; + genericViolation.violation_number = importedItiViolation.violationNumber; + genericViolation.violation_description = importedItiViolation.violationDescription; + genericViolation.warrant_status = importedItiViolation.warrantStatus; + genericViolation.warrant_number = importedItiViolation.warrantNumber; + genericViolation.fine_amount = importedItiViolation.fineAmount; + genericViolation.can_pay_online = importedItiViolation.canPayOnline; + genericViolation.court_cost = null; + + return genericViolation; + } + +} diff --git a/src/main/java/svc/profiles/LocalProfile.java b/src/main/java/svc/profiles/LocalProfile.java index dbce471..4c46d1e 100644 --- a/src/main/java/svc/profiles/LocalProfile.java +++ b/src/main/java/svc/profiles/LocalProfile.java @@ -25,7 +25,7 @@ public DataSource dataSource() { .addScript("hsql/citation-datasource-municipality.sql") .addScript("hsql/citation-datasource.sql") .addScript("hsql/courtMappers/tyler-court-mapper.sql") - .addScript("hsql/courtMappers/imported-court-mapper.sql") + .addScript("hsql/courtMappers/imported-iti-court-mapper.sql") .addScript("hsql/courtMappers/rejis-court-mapper.sql") .addScript("hsql/datasource-municipality-mapping.sql") .build(); diff --git a/src/main/java/svc/profiles/LocalWithHSQLAccessProfile.java b/src/main/java/svc/profiles/LocalWithHSQLAccessProfile.java index 9429cc2..8a9f54a 100644 --- a/src/main/java/svc/profiles/LocalWithHSQLAccessProfile.java +++ b/src/main/java/svc/profiles/LocalWithHSQLAccessProfile.java @@ -31,7 +31,7 @@ public DataSource dataSource() { .addScript("hsql/citation-datasource.sql") .addScript("hsql/courtMappers/tyler-court-mapper.sql") .addScript("hsql/courtMappers/rejis-court-mapper.sql") - .addScript("hsql/courtMappers/imported-court-mapper.sql") + .addScript("hsql/courtMappers/imported-iti-court-mapper.sql") .addScript("hsql/datasource-municipality-mapping.sql") .build(); } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index ec6a1b0..367667a 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -15,8 +15,8 @@ stlcourts: rootUrl: ${REJIS_ROOT_URL} username: ${REJIS_USERNAME} password: ${REJIS_PASSWORD} - imported: - rootUrl: ${IMPORTED_ROOT_URL} + importedITI: + rootUrl: ${IMPORTED_ITI_ROOT_URL} logging: level: diff --git a/src/main/resources/hsql/citation-datasource.sql b/src/main/resources/hsql/citation-datasource.sql index d5cc782..a807028 100644 --- a/src/main/resources/hsql/citation-datasource.sql +++ b/src/main/resources/hsql/citation-datasource.sql @@ -1,3 +1,3 @@ INSERT INTO citation_datasource (id,name) VALUES (1,'TYLER'); INSERT INTO citation_datasource (id,name) VALUES (2,'REJIS'); -INSERT INTO citation_datasource (id,name) VALUES (3,'IMPORTED'); \ No newline at end of file +INSERT INTO citation_datasource (id,name) VALUES (3,'IMPORTEDITI'); \ No newline at end of file diff --git a/src/main/resources/hsql/courtMappers/imported-court-mapper.sql b/src/main/resources/hsql/courtMappers/imported-court-mapper.sql deleted file mode 100644 index 672b35e..0000000 --- a/src/main/resources/hsql/courtMappers/imported-court-mapper.sql +++ /dev/null @@ -1 +0,0 @@ -INSERT INTO imported_court_mapping (court_id,imported_court_identifier) VALUES (48,'MH'); /*Maryland Heights*/ \ No newline at end of file diff --git a/src/main/resources/hsql/courtMappers/imported-iti-court-mapper.sql b/src/main/resources/hsql/courtMappers/imported-iti-court-mapper.sql new file mode 100644 index 0000000..026a959 --- /dev/null +++ b/src/main/resources/hsql/courtMappers/imported-iti-court-mapper.sql @@ -0,0 +1 @@ +INSERT INTO imported_iti_court_mapping (court_id,imported_iti_court_identifier) VALUES (48,'MH'); /*Maryland Heights*/ \ No newline at end of file diff --git a/src/main/resources/sql/changelog/2018-01-12_ITI_Integration.sql b/src/main/resources/sql/changelog/2018-01-12_ITI_Integration.sql index f0d563f..8e6c9af 100644 --- a/src/main/resources/sql/changelog/2018-01-12_ITI_Integration.sql +++ b/src/main/resources/sql/changelog/2018-01-12_ITI_Integration.sql @@ -1,13 +1,13 @@ -INSERT INTO citation_datasource (id,name) VALUES (3,'IMPORTED'); +INSERT INTO citation_datasource (id,name) VALUES (3,'IMPORTEDITI'); INSERT INTO datasource_municipality_mapping (citation_datasource_id,municipality_id,datasource_municipality_identifier) VALUES (3,52,'MH'); INSERT INTO citation_datasource_municipality (citation_datasource_id,municipality_id) VALUES (3,52); /*Maryland Heights*/ -CREATE TABLE imported_court_mapping( +CREATE TABLE imported_iti_court_mapping( court_id INTEGER NOT NULL, - imported_court_identifier VARCHAR(25) + imported_iti_court_identifier VARCHAR(25) )ENGINE=InnoDB; -ALTER TABLE imported_court_mapping ADD CONSTRAINT imported_court_mapping_fk_1 FOREIGN KEY (court_id) REFERENCES court (court_id); +ALTER TABLE imported_iti_court_mapping ADD CONSTRAINT imported_iti_court_mapping_fk_1 FOREIGN KEY (court_id) REFERENCES court (court_id); -INSERT INTO imported_court_mapping (court_id,imported_court_identifier) VALUES (48,'MH'); /*Maryland Heights*/ \ No newline at end of file +INSERT INTO imported_court_mapping (court_id,imported_iti_court_identifier) VALUES (48,'MH'); /*Maryland Heights*/ \ No newline at end of file diff --git a/src/main/resources/sql/schema/schema-tables.sql b/src/main/resources/sql/schema/schema-tables.sql index 0c76a87..734175f 100644 --- a/src/main/resources/sql/schema/schema-tables.sql +++ b/src/main/resources/sql/schema/schema-tables.sql @@ -96,9 +96,9 @@ CREATE TABLE rejis_court_mapping( rejis_court_identifier VARCHAR(25) ); -CREATE TABLE imported_court_mapping( +CREATE TABLE imported_iti_court_mapping( court_id INTEGER NOT NULL, - imported_court_identifier VARCHAR(25) + imported_iti_court_identifier VARCHAR(25) ); CREATE TABLE datasource_municipality_mapping( diff --git a/src/test/java/svc/data/citations/datasources/imported/ImportedCitationDataSourceTest.java b/src/test/java/svc/data/citations/datasources/importedITI/ImportedItiCitationDataSourceTest.java similarity index 63% rename from src/test/java/svc/data/citations/datasources/imported/ImportedCitationDataSourceTest.java rename to src/test/java/svc/data/citations/datasources/importedITI/ImportedItiCitationDataSourceTest.java index 52b2bc0..5e756d1 100644 --- a/src/test/java/svc/data/citations/datasources/imported/ImportedCitationDataSourceTest.java +++ b/src/test/java/svc/data/citations/datasources/importedITI/ImportedItiCitationDataSourceTest.java @@ -1,4 +1,4 @@ -package svc.data.citations.datasources.imported; +package svc.data.citations.datasources.importedITI; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; @@ -30,52 +30,52 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import svc.data.citations.datasources.imported.models.ImportedCitation; -import svc.data.citations.datasources.imported.transformers.ImportedCitationTransformer; +import svc.data.citations.datasources.importedITI.models.ImportedItiCitation; +import svc.data.citations.datasources.importedITI.transformers.ImportedItiCitationTransformer; import svc.data.citations.datasources.transformers.CourtIdTransformer; import svc.data.citations.filters.CitationFilter; import svc.models.Citation; @RunWith(MockitoJUnitRunner.class) -public class ImportedCitationDataSourceTest { +public class ImportedItiCitationDataSourceTest { @InjectMocks - ImportedCitationDataSource mockImportedCitationDataSource; + ImportedItiCitationDataSource mockImportedItiCitationDataSource; @Mock - ImportedConfiguration mockImportedConfiguration; + ImportedItiConfiguration mockImportedItiConfiguration; @Mock UriComponentsBuilder mockUriComponentsBuilder; @Mock RestTemplate restTemplate; @Mock - ImportedCitationTransformer mockCitationTransformer; + ImportedItiCitationTransformer mockCitationTransformer; @Mock CitationFilter mockCitationFilter; @Mock CourtIdTransformer mockCourtIdTransformer; @Spy - ResponseEntity> importedCitationsResponseSpy = new ResponseEntity>(HttpStatus.ACCEPTED); + ResponseEntity> importedItiCitationsResponseSpy = new ResponseEntity>(HttpStatus.ACCEPTED); @SuppressWarnings("unchecked") @Test public void returnsCitationsGivenCitationNumberAndDOB(){ final String CITATIONNUMBER = "F3453"; final LocalDate DOB = LocalDate.parse("2000-06-01"); - mockImportedConfiguration.rootUrl = "http://myURL.com"; + mockImportedItiConfiguration.rootUrl = "http://myURL.com"; final Citation CITATION = new Citation(); CITATION.id = 3; final List CITATIONS = Lists.newArrayList(CITATION); - final List importedCitations = Lists.newArrayList(); - Mockito.doReturn(importedCitations).when(importedCitationsResponseSpy).getBody(); + final List importedItiCitations = Lists.newArrayList(); + Mockito.doReturn(importedItiCitations).when(importedItiCitationsResponseSpy).getBody(); when(restTemplate.exchange(any(URI.class), eq(HttpMethod.GET), any(HttpEntity.class), any(ParameterizedTypeReference.class))) - .thenReturn(importedCitationsResponseSpy); + .thenReturn(importedItiCitationsResponseSpy); - when(mockCitationTransformer.fromImportedCitations(importedCitations)).thenReturn(CITATIONS); + when(mockCitationTransformer.fromImportedItiCitations(importedItiCitations)).thenReturn(CITATIONS); when(mockCitationFilter.Filter(CITATIONS, null)).thenReturn(CITATIONS); - List citations = mockImportedCitationDataSource.getByCitationNumberAndDOB(CITATIONNUMBER, DOB); + List citations = mockImportedItiCitationDataSource.getByCitationNumberAndDOB(CITATIONNUMBER, DOB); assertThat(citations.get(0).id, is(3)); } @@ -87,21 +87,21 @@ public void returnsCitationsGivenLicenseAndDOB(){ final String DRIVERSLICENSESTATE = "AZ"; final LocalDate DOB = LocalDate.parse("2000-06-01"); final String LASTNAME = "someName"; - mockImportedConfiguration.rootUrl = "http://myURL.com"; + mockImportedItiConfiguration.rootUrl = "http://myURL.com"; final Citation CITATION = new Citation(); CITATION.id = 3; final List CITATIONS = Lists.newArrayList(CITATION); - final List importedCitations = Lists.newArrayList(); - Mockito.doReturn(importedCitations).when(importedCitationsResponseSpy).getBody(); + final List importedItiCitations = Lists.newArrayList(); + Mockito.doReturn(importedItiCitations).when(importedItiCitationsResponseSpy).getBody(); when(restTemplate.exchange(any(URI.class), eq(HttpMethod.GET), any(HttpEntity.class), any(ParameterizedTypeReference.class))) - .thenReturn(importedCitationsResponseSpy); + .thenReturn(importedItiCitationsResponseSpy); - when(mockCitationTransformer.fromImportedCitations(importedCitations)).thenReturn(CITATIONS); + when(mockCitationTransformer.fromImportedItiCitations(importedItiCitations)).thenReturn(CITATIONS); when(mockCitationFilter.Filter(CITATIONS, LASTNAME)).thenReturn(CITATIONS); - List citations = mockImportedCitationDataSource.getByLicenseAndDOBAndLastName(DRIVERSLICENSENUMBER,DRIVERSLICENSESTATE, DOB, LASTNAME); + List citations = mockImportedItiCitationDataSource.getByLicenseAndDOBAndLastName(DRIVERSLICENSENUMBER,DRIVERSLICENSESTATE, DOB, LASTNAME); assertThat(citations.get(0).id, is(3)); } @@ -112,24 +112,24 @@ public void returnsCitationsGivenNameAndMunicipalitiesAndDOB(){ final String NAME = "Smith"; final List MUNICIPALITIES = Lists.newArrayList(5L); final LocalDate DOB = LocalDate.parse("2000-06-01"); - mockImportedConfiguration.rootUrl = "http://myURL.com"; + mockImportedItiConfiguration.rootUrl = "http://myURL.com"; final Citation CITATION = new Citation(); CITATION.id = 3; final List CITATIONS = Lists.newArrayList(CITATION); - final List importedCitations = Lists.newArrayList(); - Mockito.doReturn(importedCitations).when(importedCitationsResponseSpy).getBody(); + final List importedItiCitations = Lists.newArrayList(); + Mockito.doReturn(importedItiCitations).when(importedItiCitationsResponseSpy).getBody(); final List COURTIDS = Lists.newArrayList(1L); when(mockCourtIdTransformer.getCourtIdsFromMunicipalityIds(MUNICIPALITIES)).thenReturn(COURTIDS); when(restTemplate.exchange(any(URI.class), eq(HttpMethod.GET), any(HttpEntity.class), any(ParameterizedTypeReference.class))) - .thenReturn(importedCitationsResponseSpy); + .thenReturn(importedItiCitationsResponseSpy); - when(mockCitationTransformer.fromImportedCitations(importedCitations)).thenReturn(CITATIONS); + when(mockCitationTransformer.fromImportedItiCitations(importedItiCitations)).thenReturn(CITATIONS); when(mockCitationFilter.Filter(CITATIONS,NAME)).thenReturn(CITATIONS); - List citations = mockImportedCitationDataSource.getByNameAndMunicipalitiesAndDOB(NAME,MUNICIPALITIES,DOB); + List citations = mockImportedItiCitationDataSource.getByNameAndMunicipalitiesAndDOB(NAME,MUNICIPALITIES,DOB); assertThat(citations.get(0).id, is(3)); } @@ -139,7 +139,7 @@ public void returnsCitationsGivenNameAndMunicipalitiesAndDOB(){ public void returnsEmptyCitationsOnRestTemplateError(){ final String CITATIONNUMBER = "F3453"; final LocalDate DOB = LocalDate.parse("2000-06-01"); - mockImportedConfiguration.rootUrl = "http://myURL.com"; + mockImportedItiConfiguration.rootUrl = "http://myURL.com"; final Citation CITATION = new Citation(); CITATION.id = 3; @@ -147,7 +147,7 @@ public void returnsEmptyCitationsOnRestTemplateError(){ when(restTemplate.exchange(any(URI.class), eq(HttpMethod.GET), any(HttpEntity.class), any(ParameterizedTypeReference.class))) .thenThrow(RestClientException.class); - List citations = mockImportedCitationDataSource.getByCitationNumberAndDOB(CITATIONNUMBER, DOB); + List citations = mockImportedItiCitationDataSource.getByCitationNumberAndDOB(CITATIONNUMBER, DOB); assertThat(citations.size(), is(0)); } diff --git a/src/test/java/svc/data/citations/datasources/imported/transformers/ImportedCitationTransformerTest.java b/src/test/java/svc/data/citations/datasources/importedITI/transformers/ImportedItiCitationTransformerTest.java similarity index 59% rename from src/test/java/svc/data/citations/datasources/imported/transformers/ImportedCitationTransformerTest.java rename to src/test/java/svc/data/citations/datasources/importedITI/transformers/ImportedItiCitationTransformerTest.java index 42a2037..549de06 100644 --- a/src/test/java/svc/data/citations/datasources/imported/transformers/ImportedCitationTransformerTest.java +++ b/src/test/java/svc/data/citations/datasources/importedITI/transformers/ImportedItiCitationTransformerTest.java @@ -1,4 +1,4 @@ -package svc.data.citations.datasources.imported.transformers; +package svc.data.citations.datasources.importedITI.transformers; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -20,8 +20,8 @@ import com.google.common.collect.Lists; -import svc.data.citations.datasources.imported.models.ImportedCitation; -import svc.data.citations.datasources.imported.models.ImportedViolation; +import svc.data.citations.datasources.importedITI.models.ImportedItiCitation; +import svc.data.citations.datasources.importedITI.models.ImportedItiViolation; import svc.data.citations.datasources.transformers.CourtIdTransformer; import svc.data.citations.datasources.transformers.MunicipalityIdTransformer; import svc.models.Citation; @@ -29,16 +29,16 @@ import svc.types.HashableEntity; @RunWith(MockitoJUnitRunner.class) -public class ImportedCitationTransformerTest { +public class ImportedItiCitationTransformerTest { @Mock - ImportedViolationTransformer violationTransformer; + ImportedItiViolationTransformer violationTransformer; @Mock CourtIdTransformer courtIdTransformer; @InjectMocks - ImportedCitationTransformer citationTransformer; + ImportedItiCitationTransformer citationTransformer; @Mock MunicipalityIdTransformer municipalityIdTransformer; @@ -46,20 +46,20 @@ public class ImportedCitationTransformerTest { @Test public void citationTransformerReturnsNullForEmptyLists() { - List genericCitations = citationTransformer.fromImportedCitations(null); + List genericCitations = citationTransformer.fromImportedItiCitations(null); assertNull(genericCitations); } - private List generateListOfImportedCitations() { - return generateListOfImportedCitations(true); + private List generateListOfImportedItiCitations() { + return generateListOfImportedItiCitations(true); } - private List generateListOfImportedCitations(boolean withCitations) { - List listOfCitations = Lists.newArrayList(mock(ImportedCitation.class)); + private List generateListOfImportedItiCitations(boolean withCitations) { + List listOfCitations = Lists.newArrayList(mock(ImportedItiCitation.class)); if (withCitations) { - for (ImportedCitation citation : listOfCitations) { + for (ImportedItiCitation citation : listOfCitations) { citation.violations = generateListOfImportedViolations(); } } @@ -67,8 +67,8 @@ private List generateListOfImportedCitations(boolean withCitat return listOfCitations; } - private List generateListOfImportedViolations() { - return Lists.newArrayList(mock(ImportedViolation.class)); + private List generateListOfImportedViolations() { + return Lists.newArrayList(mock(ImportedItiViolation.class)); } @Test @@ -77,24 +77,24 @@ public void citationTransformerTransformsAllCitationsPassedIn() { when(municipalityIdTransformer.lookupMunicipalityIdFromCourtId(anyLong())) .thenReturn(municipalHashable); - List importedCitations = generateListOfImportedCitations(); + List importedItiCitations = generateListOfImportedItiCitations(); - List genericCitations = citationTransformer.fromImportedCitations(importedCitations); + List genericCitations = citationTransformer.fromImportedItiCitations(importedItiCitations); assertNotNull(genericCitations); - assertEquals(importedCitations.size(), genericCitations.size()); + assertEquals(importedItiCitations.size(), genericCitations.size()); } @Test public void citationTransformerReturnsNullForNullCitation() { - Citation genericCitation = citationTransformer.fromImportedCitation(null); + Citation genericCitation = citationTransformer.fromImportedItiCitation(null); assertNull(genericCitation); } - private ImportedCitation generateFullImportedCitation() { - ImportedCitation mockCitation = mock(ImportedCitation.class); + private ImportedItiCitation generateFullImportedItiCitation() { + ImportedItiCitation mockCitation = mock(ImportedItiCitation.class); mockCitation.dateOfBirth = "1900-06-17"; mockCitation.citationDate = "1901-06-17"; mockCitation.courtDateTime = "1902-06-17T19:00:00.000"; @@ -107,24 +107,24 @@ private ImportedCitation generateFullImportedCitation() { @Test public void citationTransformerCopiesCitationFieldsCorrectly() { - ImportedCitation importedCitation = generateFullImportedCitation(); + ImportedItiCitation importedItiCitation = generateFullImportedItiCitation(); final HashableEntity municipalHashable = new HashableEntity(Municipality.class,3L); when(municipalityIdTransformer.lookupMunicipalityIdFromCourtId(anyLong())) .thenReturn(municipalHashable); - Citation genericCitation = citationTransformer.fromImportedCitation(importedCitation); + Citation genericCitation = citationTransformer.fromImportedItiCitation(importedItiCitation); assertNotNull(genericCitation); - assertEquals(genericCitation.citation_number, importedCitation.citationNumber); - assertEquals(genericCitation.first_name, importedCitation.firstName); - assertEquals(genericCitation.last_name, importedCitation.lastName); - assertEquals(genericCitation.drivers_license_number, importedCitation.driversLicenseNumber); + assertEquals(genericCitation.citation_number, importedItiCitation.citationNumber); + assertEquals(genericCitation.first_name, importedItiCitation.firstName); + assertEquals(genericCitation.last_name, importedItiCitation.lastName); + assertEquals(genericCitation.drivers_license_number, importedItiCitation.driversLicenseNumber); assertEquals(genericCitation.date_of_birth, LocalDate.parse("1900-06-17")); assertEquals(genericCitation.citation_date, LocalDate.parse("1901-06-17")); assertEquals(genericCitation.court_dateTime, LocalDateTime.parse("1902-06-17T19:00:00.000")); assertEquals(genericCitation.municipality_id, municipalHashable); - verify(violationTransformer).fromImportedCitation(importedCitation); + verify(violationTransformer).fromImportedCitation(importedItiCitation); verify(municipalityIdTransformer).lookupMunicipalityIdFromCourtId(anyLong()); } diff --git a/src/test/java/svc/data/citations/datasources/imported/transformers/ImportedViolationTransformerTest.java b/src/test/java/svc/data/citations/datasources/importedITI/transformers/ImportedItiViolationTransformerTest.java similarity index 56% rename from src/test/java/svc/data/citations/datasources/imported/transformers/ImportedViolationTransformerTest.java rename to src/test/java/svc/data/citations/datasources/importedITI/transformers/ImportedItiViolationTransformerTest.java index 3718541..f4b82bc 100644 --- a/src/test/java/svc/data/citations/datasources/imported/transformers/ImportedViolationTransformerTest.java +++ b/src/test/java/svc/data/citations/datasources/importedITI/transformers/ImportedItiViolationTransformerTest.java @@ -1,4 +1,4 @@ -package svc.data.citations.datasources.imported.transformers; +package svc.data.citations.datasources.importedITI.transformers; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.nullValue; @@ -16,34 +16,34 @@ import com.google.common.collect.Lists; -import svc.data.citations.datasources.imported.models.ImportedCitation; -import svc.data.citations.datasources.imported.models.ImportedViolation; +import svc.data.citations.datasources.importedITI.models.ImportedItiCitation; +import svc.data.citations.datasources.importedITI.models.ImportedItiViolation; import svc.models.Violation; @RunWith(MockitoJUnitRunner.class) -public class ImportedViolationTransformerTest { +public class ImportedItiViolationTransformerTest { @InjectMocks - ImportedViolationTransformer mockViolationTransformer; + ImportedItiViolationTransformer mockViolationTransformer; - ImportedCitation importedCitation; - ImportedViolation importedViolation; + ImportedItiCitation importedItiCitation; + ImportedItiViolation importedItiViolation; @Before public void setUp(){ - importedCitation = new ImportedCitation(); - importedViolation = new ImportedViolation(); - importedCitation.citationNumber = "F123"; - importedViolation.violationNumber = "V123"; - importedViolation.violationDescription = "ABC"; - importedViolation.warrantStatus = true; - importedViolation.warrantNumber = "W123"; - importedViolation.fineAmount = new BigDecimal("23.00"); - importedViolation.canPayOnline = true; + importedItiCitation = new ImportedItiCitation(); + importedItiViolation = new ImportedItiViolation(); + importedItiCitation.citationNumber = "F123"; + importedItiViolation.violationNumber = "V123"; + importedItiViolation.violationDescription = "ABC"; + importedItiViolation.warrantStatus = true; + importedItiViolation.warrantNumber = "W123"; + importedItiViolation.fineAmount = new BigDecimal("23.00"); + importedItiViolation.canPayOnline = true; } @Test - public void returnsGenericViolationFromTylerViolation(){ - Violation violation = mockViolationTransformer.fromImportedViolation(importedCitation, importedViolation); + public void returnsGenericViolationFromImportedItiViolation(){ + Violation violation = mockViolationTransformer.fromImportedItiViolation(importedItiCitation, importedItiViolation); assertThat(violation.citation_number,is("F123")); assertThat(violation.violation_number,is("V123")); @@ -56,9 +56,9 @@ public void returnsGenericViolationFromTylerViolation(){ } @Test - public void returnsGenericViolationListFromTylerCitation(){ - importedCitation.violations = Lists.newArrayList(importedViolation); - List violations = mockViolationTransformer.fromImportedCitation(importedCitation); + public void returnsGenericViolationListFromImportedItiCitation(){ + importedItiCitation.violations = Lists.newArrayList(importedItiViolation); + List violations = mockViolationTransformer.fromImportedCitation(importedItiCitation); assertNotNull(violations); assertThat(violations.size(),is(1)); From 834ef57cce06818f3d1db9126dd97935f3d9dd9c Mon Sep 17 00:00:00 2001 From: ctwoolsey Date: Mon, 5 Feb 2018 11:54:43 -0600 Subject: [PATCH 6/6] Added apiKey in ITI header --- .../datasources/importedITI/ImportedItiCitationDataSource.java | 1 + .../datasources/importedITI/ImportedItiConfiguration.java | 3 +++ src/main/resources/application.yml | 1 + 3 files changed, 5 insertions(+) diff --git a/src/main/java/svc/data/citations/datasources/importedITI/ImportedItiCitationDataSource.java b/src/main/java/svc/data/citations/datasources/importedITI/ImportedItiCitationDataSource.java index 4bd031a..cfcd41b 100644 --- a/src/main/java/svc/data/citations/datasources/importedITI/ImportedItiCitationDataSource.java +++ b/src/main/java/svc/data/citations/datasources/importedITI/ImportedItiCitationDataSource.java @@ -77,6 +77,7 @@ public List getByNameAndMunicipalitiesAndDOB(String lastName, List performRestTemplateCall(URI uri, LocalDate dob, String lastName) { HttpHeaders headers = new HttpHeaders(); + headers.add("apikey", importedItiConfiguration.apiKey); HttpEntity query = new HttpEntity<>(headers); ResponseEntity> importedCitationsResponse = null; ParameterizedTypeReference> type = new ParameterizedTypeReference>() { diff --git a/src/main/java/svc/data/citations/datasources/importedITI/ImportedItiConfiguration.java b/src/main/java/svc/data/citations/datasources/importedITI/ImportedItiConfiguration.java index 694eff6..cab3609 100644 --- a/src/main/java/svc/data/citations/datasources/importedITI/ImportedItiConfiguration.java +++ b/src/main/java/svc/data/citations/datasources/importedITI/ImportedItiConfiguration.java @@ -8,4 +8,7 @@ public class ImportedItiConfiguration { @Value("${stlcourts.citationDataSources.importedITI.rootUrl}") public String rootUrl; + + @Value("${stlcourts.citationDataSources.importedITI.apiKey}") + public String apiKey; } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 367667a..38f537b 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -17,6 +17,7 @@ stlcourts: password: ${REJIS_PASSWORD} importedITI: rootUrl: ${IMPORTED_ITI_ROOT_URL} + apiKey: ${IMPORTED_ITI_API_KEY} logging: level: