Skip to content

Commit

Permalink
optimize dependencies + replace opencsv with jackson
Browse files Browse the repository at this point in the history
  • Loading branch information
cbellone committed Apr 25, 2024
1 parent e0cb2db commit 3570095
Show file tree
Hide file tree
Showing 25 changed files with 133 additions and 131 deletions.
12 changes: 6 additions & 6 deletions build.gradle
Expand Up @@ -35,7 +35,7 @@ plugins {
id 'com.github.ben-manes.versions' version '0.51.0'
id 'com.github.hierynomus.license' version '0.16.1'
id 'net.researchgate.release' version '3.0.2'
id 'org.springframework.boot' version '3.2.0'
id 'org.springframework.boot' version '3.2.5'
id 'org.sonarqube' version '4.4.1.3373'
// id 'net.ltgt.errorprone' version '3.1.0'
id 'com.github.node-gradle.node' version '7.0.2'
Expand Down Expand Up @@ -102,8 +102,9 @@ repositories {
}

dependencies {
implementation "com.fasterxml.jackson.datatype:jackson-datatype-jsr310"
implementation 'com.auth0:java-jwt:4.4.0'
implementation "com.fasterxml.jackson.datatype:jackson-datatype-jsr310"
implementation "com.fasterxml.jackson.dataformat:jackson-dataformat-csv"
implementation "com.fasterxml.jackson.core:jackson-core"
implementation "com.fasterxml.jackson.core:jackson-databind"
implementation "org.springframework.boot:spring-boot-properties-migrator", {
Expand Down Expand Up @@ -133,10 +134,9 @@ dependencies {
exclude module: 'gson'
}

implementation "org.apache.commons:commons-lang3:3.13.0"
implementation 'com.opencsv:opencsv:5.9', {
exclude module: 'commons-collections:commons-collections:3.2.2'
}
implementation 'org.apache.commons:commons-lang3:3.13.0'
implementation 'org.apache.commons:commons-text:1.12.0'
implementation 'org.apache.commons:commons-collections4:4.4'
implementation 'commons-codec:commons-codec:1.15'
implementation 'net.sf.biweekly:biweekly:0.6.6'
implementation 'com.atlassian.commonmark:commonmark:0.17.0'
Expand Down
32 changes: 17 additions & 15 deletions src/main/java/alfio/controller/api/admin/EventApiController.java
Expand Up @@ -42,8 +42,9 @@
import alfio.repository.PurchaseContextFieldRepository;
import alfio.repository.SponsorScanRepository;
import alfio.util.*;
import com.opencsv.CSVReader;
import com.opencsv.exceptions.CsvException;
import com.fasterxml.jackson.databind.MappingIterator;
import com.fasterxml.jackson.dataformat.csv.CsvMapper;
import com.fasterxml.jackson.dataformat.csv.CsvSchema;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.AllArgsConstructor;
Expand Down Expand Up @@ -465,7 +466,7 @@ public void downloadSponsorScanExport(@PathVariable String eventName, @RequestPa
header.add("Timestamp");
header.add("Full name");
header.add("Email");
header.addAll(fields.stream().map(PurchaseContextFieldConfiguration::getName).collect(toList()));
header.addAll(fields.stream().map(PurchaseContextFieldConfiguration::getName).toList());
header.add("Sponsor notes");
header.add("Lead Status");
header.add("Operator");
Expand Down Expand Up @@ -576,27 +577,28 @@ public String deletePendingPayment(@PathVariable String eventName,
@PostMapping("/events/{eventName}/pending-payments/bulk-confirmation")
public List<Triple<Boolean, String, String>> bulkConfirmation(@PathVariable String eventName,
Principal principal,
@RequestBody UploadBase64FileModification file) throws IOException, CsvException {
try(InputStreamReader isr = new InputStreamReader(file.getInputStream(), UTF_8); CSVReader reader = new CSVReader(isr)) {
var all = reader.readAll();
@RequestBody UploadBase64FileModification file) throws IOException {
record Transaction(String reservationId, BigDecimal price) {}
var csvMapper = new CsvMapper();
try(InputStreamReader isr = new InputStreamReader(file.getInputStream(), UTF_8)) {
MappingIterator<Transaction> iterator = csvMapper.readerFor(Transaction.class)
.with(CsvSchema.emptySchema().withoutHeader())
.readValues(isr);
var all = iterator.readAll();

var reservationIds = all.stream()
.map(line -> {
Validate.isTrue(line.length >= 2);
return line[0];
})
.map(Transaction::reservationId)
.collect(Collectors.toSet());
accessService.checkEventAndReservationOwnership(principal, eventName, reservationIds);

Event event = loadEvent(eventName, principal);
return all.stream()
.map(line -> {
String reservationID = null;
try {
reservationID = line[0];
ticketReservationManager.validateAndConfirmOfflinePayment(reservationID, event, new BigDecimal(line[1]), principal.getName());
return Triple.of(Boolean.TRUE, reservationID, "");
ticketReservationManager.validateAndConfirmOfflinePayment(line.reservationId, event, line.price, principal.getName());
return Triple.of(Boolean.TRUE, line.reservationId, "");
} catch (Exception e) {
return Triple.of(Boolean.FALSE, Optional.ofNullable(reservationID).orElse(""), e.getMessage());
return Triple.of(Boolean.FALSE, Optional.ofNullable(line.reservationId).orElse(""), e.getMessage());
}
})
.collect(toList());
Expand Down
Expand Up @@ -21,8 +21,9 @@
import alfio.model.SpecialPrice;
import alfio.model.modification.SendCodeModification;
import alfio.model.modification.UploadBase64FileModification;
import com.opencsv.CSVReader;
import com.opencsv.exceptions.CsvException;
import com.fasterxml.jackson.databind.MappingIterator;
import com.fasterxml.jackson.dataformat.csv.CsvMapper;
import com.fasterxml.jackson.dataformat.csv.CsvSchema;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.Validate;
import org.slf4j.Logger;
Expand All @@ -36,10 +37,8 @@
import java.security.Principal;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

import static java.nio.charset.StandardCharsets.UTF_8;
import static org.apache.commons.lang3.StringUtils.trim;

@RestController
@RequestMapping("/admin/api")
Expand Down Expand Up @@ -69,18 +68,15 @@ public ResponseEntity<String> handleExceptions(Exception e) {
public ResponseEntity<List<SendCodeModification>> linkAssigneeToCodes(@PathVariable String eventName,
@PathVariable int categoryId,
@RequestBody UploadBase64FileModification file,
Principal principal) throws IOException, CsvException {
Principal principal) throws IOException {

Validate.isTrue(StringUtils.isNotEmpty(eventName));
accessService.checkCategoryOwnership(principal, eventName, categoryId);
try(InputStreamReader isr = new InputStreamReader(file.getInputStream(), UTF_8); CSVReader reader = new CSVReader(isr)) {
List<SendCodeModification> content = reader.readAll().stream()
.map(line -> {
Validate.isTrue(line.length >= 4);
return new SendCodeModification(StringUtils.trimToNull(line[0]), trim(line[1]), trim(line[2]), trim(line[3]));
})
.collect(Collectors.toList());
return ResponseEntity.ok(specialPriceManager.linkAssigneeToCode(content, eventName, categoryId, principal.getName()));
try(InputStreamReader isr = new InputStreamReader(file.getInputStream(), UTF_8)) {
MappingIterator<SendCodeModification> iterator = new CsvMapper().readerFor(SendCodeModification.class)
.with(CsvSchema.emptySchema().withoutHeader())
.readValues(isr);
return ResponseEntity.ok(specialPriceManager.linkAssigneeToCode(iterator.readAll(), eventName, categoryId, principal.getName()));
}
}

Expand Down
Expand Up @@ -43,8 +43,7 @@
import alfio.repository.ExtensionRepository;
import alfio.util.Json;
import lombok.AllArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand Down
Expand Up @@ -32,7 +32,7 @@
import alfio.util.ItalianTaxIdValidator;
import alfio.util.Validator;
import lombok.Data;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ValidationUtils;
Expand Down
Expand Up @@ -26,10 +26,7 @@
import alfio.repository.AdminReservationRequestRepository;
import alfio.repository.EventRepository;
import alfio.repository.user.UserRepository;
import alfio.util.ClockProvider;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.commons.lang3.tuple.Triple;
Expand All @@ -53,6 +50,7 @@
import static alfio.model.modification.AdminReservationModification.Notification.orEmpty;
import static java.util.Collections.singletonList;
import static java.util.Optional.ofNullable;
import static org.apache.commons.collections4.CollectionUtils.size;

@Component
@Transactional
Expand Down Expand Up @@ -128,7 +126,7 @@ public Pair<Integer, Integer> processPendingReservations() {
}
});

return Pair.of(CollectionUtils.size(result.get(true)), CollectionUtils.size(result.get(false)));
return Pair.of(size(result.get(true)), size(result.get(false)));

}

Expand Down
2 changes: 1 addition & 1 deletion src/main/java/alfio/manager/CheckInManager.java
Expand Up @@ -35,7 +35,7 @@
import lombok.AllArgsConstructor;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.Validate;
import org.apache.commons.lang3.tuple.Pair;
Expand Down
6 changes: 2 additions & 4 deletions src/main/java/alfio/manager/EventManager.java
Expand Up @@ -48,7 +48,6 @@
import alfio.util.RequestUtils;
import ch.digitalfondue.npjt.AffectedRowCountAndKey;
import lombok.AllArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.IterableUtils;
import org.apache.commons.lang3.ObjectUtils;
Expand Down Expand Up @@ -108,7 +107,6 @@ public class EventManager {
private final SpecialPriceRepository specialPriceRepository;
private final PromoCodeDiscountRepository promoCodeRepository;
private final ConfigurationManager configurationManager;
private final PurchaseContextFieldRepository purchaseContextFieldRepository;
private final EventDeleterRepository eventDeleterRepository;
private final PurchaseContextFieldManager purchaseContextFieldManager;
private final Flyway flyway;
Expand Down Expand Up @@ -824,13 +822,13 @@ void handleTicketNumberModification(Event event, TicketCategory updated, int add
}

private void createAllTicketsForEvent(Event event, EventModification em) {
Validate.notNull(em.getAvailableSeats());
Objects.requireNonNull(em.getAvailableSeats());
final MapSqlParameterSource[] params = prepareTicketsBulkInsertParameters(event.now(clockProvider), event, em.getAvailableSeats(), TicketStatus.FREE);
ticketRepository.bulkTicketInitialization(params);
}

private int insertEvent(EventModification em) {
Validate.notNull(em.getAvailableSeats());
Objects.requireNonNull(em.getAvailableSeats());
validatePaymentProxies(em.getAllowedPaymentProxies(), em.getOrganizationId());
String paymentProxies = collectPaymentProxies(em);
BigDecimal vat = em.isFreeOfCharge() ? BigDecimal.ZERO : em.getVatPercentage();
Expand Down
3 changes: 1 addition & 2 deletions src/main/java/alfio/manager/GroupManager.java
Expand Up @@ -31,8 +31,7 @@
import alfio.repository.TicketRepository;
import ch.digitalfondue.npjt.AffectedRowCountAndKey;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.Validate;
import org.slf4j.Logger;
Expand Down
Expand Up @@ -57,7 +57,7 @@ public class SpecialPriceTokenGenerator {
private static final RandomStringGenerator RANDOM_STRING_GENERATOR = new RandomStringGenerator.Builder()
.selectFrom(ADMITTED_CHARACTERS)
.usingRandom(RANDOM::nextInt)
.build();
.get();

private final SpecialPriceRepository specialPriceRepository;
private final TicketCategoryRepository ticketCategoryRepository;
Expand Down
5 changes: 2 additions & 3 deletions src/main/java/alfio/manager/system/SendGridMailer.java
Expand Up @@ -21,8 +21,7 @@
import alfio.repository.user.OrganizationRepository;
import alfio.util.HttpUtils;
import alfio.util.Json;
import lombok.extern.log4j.Log4j2;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand Down Expand Up @@ -94,7 +93,7 @@ private List<Map<String, Object>> createPersonalizations(final String to, final
final var recipients = new ArrayList<>();
recipients.add(Map.of(EMAIL, to));
if (CollectionUtils.isNotEmpty(cc)) {
recipients.addAll(cc.stream().map(email -> Map.of(EMAIL, email)).collect(Collectors.toList()));
recipients.addAll(cc.stream().map(email -> Map.of(EMAIL, email)).toList());
}
return List.of(Map.of("to", recipients, "subject", subject));
}
Expand Down
Expand Up @@ -22,7 +22,7 @@
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.experimental.Delegate;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Triple;

Expand Down
2 changes: 1 addition & 1 deletion src/main/java/alfio/model/PromoCodeDiscount.java
Expand Up @@ -21,7 +21,7 @@
import ch.digitalfondue.npjt.ConstructorAnnotationRowMapper.Column;
import com.google.gson.reflect.TypeToken;
import lombok.Getter;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;

import java.time.ZoneId;
Expand Down
Expand Up @@ -20,7 +20,7 @@
import ch.digitalfondue.npjt.ConstructorAnnotationRowMapper.Column;
import com.google.gson.reflect.TypeToken;
import lombok.Getter;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections4.CollectionUtils;

import java.util.*;
import java.util.regex.Pattern;
Expand Down
Expand Up @@ -41,7 +41,7 @@
import java.util.stream.Collectors;

import static java.util.Collections.emptyList;
import static org.apache.commons.collections.CollectionUtils.isEmpty;
import static org.apache.commons.collections4.CollectionUtils.isEmpty;

@Getter
@AllArgsConstructor
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/alfio/model/result/Result.java
Expand Up @@ -19,7 +19,7 @@
import alfio.model.result.ValidationResult.ErrorDescriptor;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.springframework.validation.ObjectError;

Expand Down
23 changes: 14 additions & 9 deletions src/main/java/alfio/util/ExportUtils.java
Expand Up @@ -19,20 +19,18 @@
import ch.digitalfondue.basicxlsx.Cell;
import ch.digitalfondue.basicxlsx.StreamingWorkbook;
import ch.digitalfondue.basicxlsx.Style;
import com.opencsv.CSVWriter;
import org.apache.commons.lang3.StringUtils;

import com.fasterxml.jackson.dataformat.csv.CsvMapper;
import com.fasterxml.jackson.dataformat.csv.CsvSchema;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;

import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.function.Consumer;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import static java.nio.charset.StandardCharsets.UTF_8;

public class ExportUtils {

private static final int[] BOM_MARKERS = new int[] {0xEF, 0xBB, 0xBF};
Expand Down Expand Up @@ -93,18 +91,25 @@ public static void exportCsv(String fileName, String[] header, Stream<String[]>
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
markAsNoIndex(response);

try (ServletOutputStream out = response.getOutputStream(); CSVWriter writer = new CSVWriter(new OutputStreamWriter(out, UTF_8))) {
var headerBuilder = CsvSchema.builder().setUseHeader(true).setQuoteChar('"');
Arrays.stream(header).forEach(headerBuilder::addColumn);

try (ServletOutputStream out = response.getOutputStream()) {
for (int marker : ExportUtils.BOM_MARKERS) {
out.write(marker);
}
writer.writeNext(header);
var writer = new CsvMapper().writer().with(headerBuilder.build()).writeValues(out);
data.forEachOrdered(d -> {
var copy = Arrays.copyOf(d, d.length);
for (var i = 0; i < copy.length; i++) {
var res = copy[i];
copy[i] = escapeFormulaChar(res);
}
writer.writeNext(copy);
try {
writer.write(copy);
} catch (IOException e) {
throw new RuntimeException(e);
}
});
writer.flush();
out.flush();
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/alfio/util/Validator.java
Expand Up @@ -33,7 +33,7 @@
import alfio.model.result.Result;
import alfio.model.result.ValidationResult;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.Validate;
import org.springframework.validation.BindingResult;
Expand Down

0 comments on commit 3570095

Please sign in to comment.