mirror of
https://gitea.gofwd.group/Forward_Group/ballistic-builder-spring.git
synced 2025-12-05 18:46:44 -05:00
buffer
This commit is contained in:
@@ -7,6 +7,7 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.io.Reader;
|
import java.io.Reader;
|
||||||
|
import java.io.BufferedReader;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
@@ -330,44 +331,72 @@ public class MerchantFeedImportServiceImpl implements MerchantFeedImportService
|
|||||||
|
|
||||||
List<MerchantFeedRow> rows = new ArrayList<>();
|
List<MerchantFeedRow> rows = new ArrayList<>();
|
||||||
|
|
||||||
try (Reader reader = (feedUrl.startsWith("http://") || feedUrl.startsWith("https://"))
|
try (Reader baseReader = (feedUrl.startsWith("http://") || feedUrl.startsWith("https://"))
|
||||||
? new InputStreamReader(new URL(feedUrl).openStream(), StandardCharsets.UTF_8)
|
? new InputStreamReader(new URL(feedUrl).openStream(), StandardCharsets.UTF_8)
|
||||||
: java.nio.file.Files.newBufferedReader(java.nio.file.Paths.get(feedUrl), StandardCharsets.UTF_8);
|
: java.nio.file.Files.newBufferedReader(java.nio.file.Paths.get(feedUrl), StandardCharsets.UTF_8);
|
||||||
CSVParser parser = CSVFormat.DEFAULT
|
BufferedReader reader = new BufferedReader(baseReader)) {
|
||||||
.withFirstRecordAsHeader()
|
|
||||||
.withIgnoreSurroundingSpaces()
|
|
||||||
.withTrim()
|
|
||||||
.parse(reader)) {
|
|
||||||
|
|
||||||
for (CSVRecord rec : parser) {
|
// --- Step 1: peek at the first line to detect delimiter ---
|
||||||
MerchantFeedRow row = new MerchantFeedRow(
|
reader.mark(10_000);
|
||||||
rec.get("SKU"),
|
String firstLine = reader.readLine();
|
||||||
rec.get("Manufacturer Id"),
|
reader.reset();
|
||||||
rec.get("Brand Name"),
|
|
||||||
rec.get("Product Name"),
|
|
||||||
rec.get("Long Description"),
|
|
||||||
rec.get("Short Description"),
|
|
||||||
rec.get("Department"),
|
|
||||||
rec.get("Category"),
|
|
||||||
rec.get("SubCategory"),
|
|
||||||
rec.get("Thumb URL"),
|
|
||||||
rec.get("Image URL"),
|
|
||||||
rec.get("Buy Link"),
|
|
||||||
rec.get("Keywords"),
|
|
||||||
rec.get("Reviews"),
|
|
||||||
parseBigDecimal(rec.get("Retail Price")),
|
|
||||||
parseBigDecimal(rec.get("Sale Price")),
|
|
||||||
rec.get("Brand Page Link"),
|
|
||||||
rec.get("Brand Logo Image"),
|
|
||||||
rec.get("Product Page View Tracking"),
|
|
||||||
rec.get("Variants XML"),
|
|
||||||
rec.get("Medium Image URL"),
|
|
||||||
rec.get("Product Content Widget"),
|
|
||||||
rec.get("Google Categorization"),
|
|
||||||
rec.get("Item Based Commission")
|
|
||||||
);
|
|
||||||
|
|
||||||
rows.add(row);
|
if (firstLine == null || firstLine.isEmpty()) {
|
||||||
|
throw new RuntimeException("Empty feed received from " + feedUrl);
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- Step 2: detect delimiter (TSV vs CSV) ---
|
||||||
|
char delimiter;
|
||||||
|
if (firstLine.contains("\t")) {
|
||||||
|
delimiter = '\t'; // TSV (AvantLink-style)
|
||||||
|
} else if (firstLine.contains(",")) {
|
||||||
|
delimiter = ','; // CSV
|
||||||
|
} else {
|
||||||
|
// Fallback: default to comma
|
||||||
|
delimiter = ',';
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- Step 3: build CSVFormat with detected delimiter ---
|
||||||
|
CSVFormat format = CSVFormat.DEFAULT.builder()
|
||||||
|
.setDelimiter(delimiter)
|
||||||
|
.setHeader()
|
||||||
|
.setSkipHeaderRecord(true)
|
||||||
|
.setIgnoreSurroundingSpaces(true)
|
||||||
|
.setTrim(true)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
// --- Step 4: parse the rows into MerchantFeedRow records ---
|
||||||
|
try (CSVParser parser = new CSVParser(reader, format)) {
|
||||||
|
for (CSVRecord rec : parser) {
|
||||||
|
MerchantFeedRow row = new MerchantFeedRow(
|
||||||
|
rec.get("SKU"),
|
||||||
|
rec.get("Manufacturer Id"),
|
||||||
|
rec.get("Brand Name"),
|
||||||
|
rec.get("Product Name"),
|
||||||
|
rec.get("Long Description"),
|
||||||
|
rec.get("Short Description"),
|
||||||
|
rec.get("Department"),
|
||||||
|
rec.get("Category"),
|
||||||
|
rec.get("SubCategory"),
|
||||||
|
rec.get("Thumb URL"),
|
||||||
|
rec.get("Image URL"),
|
||||||
|
rec.get("Buy Link"),
|
||||||
|
rec.get("Keywords"),
|
||||||
|
rec.get("Reviews"),
|
||||||
|
parseBigDecimal(rec.get("Retail Price")),
|
||||||
|
parseBigDecimal(rec.get("Sale Price")),
|
||||||
|
rec.get("Brand Page Link"),
|
||||||
|
rec.get("Brand Logo Image"),
|
||||||
|
rec.get("Product Page View Tracking"),
|
||||||
|
rec.get("Variants XML"),
|
||||||
|
rec.get("Medium Image URL"),
|
||||||
|
rec.get("Product Content Widget"),
|
||||||
|
rec.get("Google Categorization"),
|
||||||
|
rec.get("Item Based Commission")
|
||||||
|
);
|
||||||
|
|
||||||
|
rows.add(row);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
throw new RuntimeException("Failed to read feed for merchant "
|
throw new RuntimeException("Failed to read feed for merchant "
|
||||||
|
|||||||
Reference in New Issue
Block a user