From fc6c7cec7d6bb19706b5335ec36e84ddcdc32924 Mon Sep 17 00:00:00 2001 From: "Meyo-Ndo Z." Date: Tue, 21 Apr 2026 14:15:57 -0400 Subject: [PATCH] Updated the calibration operation to input multiple addresses, and filter by start and end date --- .../calibrationElectricityProducer.json | 5 +- .../calibrationNaturalGasProducer.json | 5 +- .../operations/CSVFilterOperation.java | 53 +++++++++++++------ 3 files changed, 42 insertions(+), 21 deletions(-) diff --git a/Middleware/docs/examples/queries/calibrationElectricityProducer.json b/Middleware/docs/examples/queries/calibrationElectricityProducer.json index f6db6113..d0d6caad 100644 --- a/Middleware/docs/examples/queries/calibrationElectricityProducer.json +++ b/Middleware/docs/examples/queries/calibrationElectricityProducer.json @@ -7,8 +7,9 @@ { "name": "ca.concordia.encs.citydata.operations.CSVFilterOperation", "withParams": [ - { "name": "addressFilter", "value": "H1Z 0B3" }, - { "name": "dateFilter", "value": "2022-02-28" } + { "name": "addressFilter", "value": "8431 Allée Léo-Bricault Montréal H1Z 0B3;8441 Allée Léo-Bricault Montréal H1Z 0B3;8425 Avenue 25e Montréal H1Z 4A9" }, + { "name": "startDateFilter", "value": "2022-01-31" }, + { "name": "endDateFilter", "value": "2022-12-31" } ] } ] diff --git a/Middleware/docs/examples/queries/calibrationNaturalGasProducer.json b/Middleware/docs/examples/queries/calibrationNaturalGasProducer.json index dfd67013..3884c44e 100644 --- a/Middleware/docs/examples/queries/calibrationNaturalGasProducer.json +++ b/Middleware/docs/examples/queries/calibrationNaturalGasProducer.json @@ -7,8 +7,9 @@ { "name": "ca.concordia.encs.citydata.operations.CSVFilterOperation", "withParams": [ - { "name": "addressFilter", "value": "H1W3J9" }, - { "name": "dateFilter", "value": "2022-04-30" } + { "name": "addressFilter", "value": "8431 Allée Léo-Bricault Montréal H1Z 0B3;8441 Allée Léo-Bricault Montréal H1Z 0B3;8425 Avenue 25e Montréal H1Z 4A9" }, + { "name": "startDateFilter", "value": "2022-01-31" }, + { "name": "endDateFilter", "value": "2022-12-31" } ] } ] diff --git a/Middleware/src/main/java/ca/concordia/encs/citydata/operations/CSVFilterOperation.java b/Middleware/src/main/java/ca/concordia/encs/citydata/operations/CSVFilterOperation.java index 3d9ca600..9b44bc15 100644 --- a/Middleware/src/main/java/ca/concordia/encs/citydata/operations/CSVFilterOperation.java +++ b/Middleware/src/main/java/ca/concordia/encs/citydata/operations/CSVFilterOperation.java @@ -1,6 +1,8 @@ package ca.concordia.encs.citydata.operations; import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import ca.concordia.encs.citydata.core.contracts.IOperation; import ca.concordia.encs.citydata.core.contracts.IRunner; @@ -9,38 +11,55 @@ public class CSVFilterOperation extends AbstractOperation implements IOperation { private String addressFilter; - private String dateFilter; + private String startDateFilter; + private String endDateFilter; private IRunner observer; public void setAddressFilter(String addressFilter) { this.addressFilter = addressFilter; } - public void setDateFilter(String dateFilter) { - this.dateFilter = dateFilter; + public void setStartDateFilter(String startDateFilter) { + this.startDateFilter = startDateFilter; + } + + public void setEndDateFilter(String endDateFilter) { + this.endDateFilter = endDateFilter; } public ArrayList apply(ArrayList input) { ArrayList result = new ArrayList<>(); - if (input == null || input.isEmpty()) return result; + if (input == null || input.isEmpty()) + return result; String[] headers = input.get(0).split(","); + String[] addresses = addressFilter != null ? addressFilter.split(";") : null; - for (int i = 1; i < input.size(); i++) { - String line = input.get(i); - if (line == null || line.trim().isEmpty()) continue; + for (int i = 1; i < input.size(); i++) { + String line = input.get(i); + if (line == null || line.trim().isEmpty()) continue; - String[] cols = line.split(","); - String address = cols[0].trim(); + String[] cols = line.split(","); + String address = cols[0].trim(); - if (addressFilter != null && !address.contains(addressFilter)) continue; + if (addresses != null) { + boolean matchFound = false; + for (String filter : addresses) { + if (address.contains(filter.trim())) { + matchFound = true; + break; + } + } + if (!matchFound) continue; + } - for (int j = 1; j < headers.length; j++) { - String date = headers[j].trim(); - if (dateFilter != null && !date.equals(dateFilter)) continue; - result.add(address + "," + date + "," + cols[j].trim()); - } - } + for (int j = 1; j < headers.length; j++) { + String date = headers[j].trim(); + if (startDateFilter != null && date.compareTo(startDateFilter) < 0) continue; + if (endDateFilter != null && date.compareTo(endDateFilter) > 0) continue; + result.add(address + "," + date + "," + cols[j].trim()); + } + } return result; } @@ -52,4 +71,4 @@ public void addObserver(IRunner aRunner) { public void notifyObservers() { if (observer != null) observer.newOperationApplied(this); } -} +} \ No newline at end of file