mirror of
https://gitea.gofwd.group/Forward_Group/ballistic-builder-spring.git
synced 2025-12-06 02:56:44 -05:00
buffer
This commit is contained in:
@@ -7,6 +7,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.HashMap;
|
||||
import java.io.Reader;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
import java.net.URL;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
@@ -330,44 +331,72 @@ public class MerchantFeedImportServiceImpl implements MerchantFeedImportService
|
||||
|
||||
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)
|
||||
: java.nio.file.Files.newBufferedReader(java.nio.file.Paths.get(feedUrl), StandardCharsets.UTF_8);
|
||||
CSVParser parser = CSVFormat.DEFAULT
|
||||
.withFirstRecordAsHeader()
|
||||
.withIgnoreSurroundingSpaces()
|
||||
.withTrim()
|
||||
.parse(reader)) {
|
||||
BufferedReader reader = new BufferedReader(baseReader)) {
|
||||
|
||||
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")
|
||||
);
|
||||
// --- Step 1: peek at the first line to detect delimiter ---
|
||||
reader.mark(10_000);
|
||||
String firstLine = reader.readLine();
|
||||
reader.reset();
|
||||
|
||||
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) {
|
||||
throw new RuntimeException("Failed to read feed for merchant "
|
||||
|
||||
Reference in New Issue
Block a user