first commit
This commit is contained in:
parent
f5149c7f16
commit
9e0976e30b
74
src/eu/lixko/ext/forraceexpander/components/Address.java
Normal file
74
src/eu/lixko/ext/forraceexpander/components/Address.java
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
package eu.lixko.ext.forraceexpander.components;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
|
||||||
|
public class Address extends SerializableComponent {
|
||||||
|
private ArrayList<String> addressLines = new ArrayList<>();
|
||||||
|
private String street, zipCode, city, district, country;
|
||||||
|
private String name, phone, mail;
|
||||||
|
|
||||||
|
public void setAddressLine(int linei, String val) throws IndexOutOfBoundsException {
|
||||||
|
this.addressLines.set(linei, val);
|
||||||
|
if(linei > 3)
|
||||||
|
throw new IndexOutOfBoundsException("Address can not have more than 4 lines! Tried to set #" + linei);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addAddressLine(String val) throws IndexOutOfBoundsException {
|
||||||
|
if(this.addressLines.size() == 4)
|
||||||
|
throw new IndexOutOfBoundsException("Address can not have more than 4 lines!");
|
||||||
|
this.addressLines.add(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStreet(String street) {
|
||||||
|
this.street = street;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setZIP(String zipCode) {
|
||||||
|
this.zipCode = zipCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCity(String city) {
|
||||||
|
this.city = city;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDistrict(String district) {
|
||||||
|
this.district = district;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCountry(String country) {
|
||||||
|
this.country = country;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPhone(String phone) {
|
||||||
|
this.phone = phone;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMail(String mail) {
|
||||||
|
this.mail = mail;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void prepare() {
|
||||||
|
super.prepare();
|
||||||
|
|
||||||
|
for (int i = 0; i < this.addressLines.size(); i++) {
|
||||||
|
this.putPreparedEntry("Name" + (i + 1), this.addressLines.get(i));
|
||||||
|
}
|
||||||
|
this.putPreparedEntry("Street", street);
|
||||||
|
this.putPreparedEntry("ZIP", zipCode);
|
||||||
|
this.putPreparedEntry("City", city);
|
||||||
|
this.putPreparedEntry("District", district);
|
||||||
|
this.putPreparedEntry("Country", country);
|
||||||
|
|
||||||
|
this.putPreparedEntry("ContactName", name);
|
||||||
|
this.putPreparedEntry("ContactPhone", phone);
|
||||||
|
this.putPreparedEntry("ContactMail", mail);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
83
src/eu/lixko/ext/forraceexpander/components/Item.java
Normal file
83
src/eu/lixko/ext/forraceexpander/components/Item.java
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
package eu.lixko.ext.forraceexpander.components;
|
||||||
|
|
||||||
|
public class Item extends SerializableComponent {
|
||||||
|
private long itemID = 0, productCode = 0, priceUnit = 0, priceTotal = 0, priceTotalWithTax = 0;
|
||||||
|
private int qty = 0;
|
||||||
|
private String name = "", ean = "";
|
||||||
|
|
||||||
|
public void setItemID(long itemID) {
|
||||||
|
this.itemID = itemID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setProductCode(long productCode) {
|
||||||
|
this.productCode = productCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setQuantity(int qty) {
|
||||||
|
this.qty = qty;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUnitPrice(long price) {
|
||||||
|
this.priceUnit = price;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTotalPrice(long price) {
|
||||||
|
this.priceTotal = price;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTotalPriceWithTax(long price) {
|
||||||
|
this.priceTotalWithTax = price;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEAN(String ean) {
|
||||||
|
this.ean = ean;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getItemID() {
|
||||||
|
return itemID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getProductCode() {
|
||||||
|
return productCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getQuantity() {
|
||||||
|
return qty;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getUnitPrice() {
|
||||||
|
return priceUnit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getTotalPrice() {
|
||||||
|
return priceTotal;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getTotalPriceWithTax() {
|
||||||
|
return priceTotalWithTax;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getEAN() {
|
||||||
|
return ean;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void prepare() {
|
||||||
|
super.prepare();
|
||||||
|
|
||||||
|
this.putPreparedEntry("ItemID", itemID + "");
|
||||||
|
this.putPreparedEntry("Qty", qty + "");
|
||||||
|
String priceStr = priceUnit + "";
|
||||||
|
this.putPreparedEntry("Price", priceStr.substring(0, priceStr.length() - 2) + "." + priceStr.substring(priceStr.length() - 2, priceStr.length()));
|
||||||
|
this.putPreparedEntry("ShipTxt", name);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
32
src/eu/lixko/ext/forraceexpander/components/Order.java
Normal file
32
src/eu/lixko/ext/forraceexpander/components/Order.java
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
package eu.lixko.ext.forraceexpander.components;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class Order extends SerializableComponent {
|
||||||
|
private ArrayList<Item> items = new ArrayList<>();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void prepare() {
|
||||||
|
super.prepare();
|
||||||
|
|
||||||
|
for(Item it : items) {
|
||||||
|
it.prepare();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void dump() {
|
||||||
|
for(Item it : items) {
|
||||||
|
if(it.getNameValuePairs() == null)
|
||||||
|
it.prepare();
|
||||||
|
for (Map.Entry<String, String> entry : it.getNameValuePairs().entrySet()) {
|
||||||
|
System.out.println(entry.getKey() + ": " + entry.getValue());
|
||||||
|
}
|
||||||
|
System.out.println("-------------------------------");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addItem(Item item) {
|
||||||
|
this.items.add(item);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,35 @@
|
|||||||
|
package eu.lixko.ext.forraceexpander.components;
|
||||||
|
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
|
||||||
|
public class SerializableComponent {
|
||||||
|
LinkedHashMap<String, String> vals;
|
||||||
|
|
||||||
|
public LinkedHashMap<String, String> getNameValuePairs() {
|
||||||
|
return this.vals;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void checkComponent() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void prepare() {
|
||||||
|
this.vals = new LinkedHashMap<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void putPreparedEntry(String name, String value) {
|
||||||
|
this.putPreparedEntry(name, value, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void putPreparedEntry(String name, String value, boolean allowEmpty) {
|
||||||
|
if(!value.isEmpty() || allowEmpty)
|
||||||
|
this.vals.put(name, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
public @interface MaxLength {
|
||||||
|
int value() default -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,5 @@
|
|||||||
|
package eu.lixko.ext.forraceexpander.exporter;
|
||||||
|
|
||||||
|
public class OrderExporter {
|
||||||
|
|
||||||
|
}
|
31
src/eu/lixko/ext/forraceexpander/importer/OrderImporter.java
Normal file
31
src/eu/lixko/ext/forraceexpander/importer/OrderImporter.java
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
package eu.lixko.ext.forraceexpander.importer;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
import eu.lixko.ext.forraceexpander.components.Order;
|
||||||
|
|
||||||
|
public class OrderImporter {
|
||||||
|
public static OrderProvider orderProvider;
|
||||||
|
public static OrderParser orderParser;
|
||||||
|
public ArrayList<Order> orders = new ArrayList<>();
|
||||||
|
|
||||||
|
public OrderImporter() {
|
||||||
|
orderProvider = new TestOrderProvider();
|
||||||
|
orderParser = new TestOrderParser();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void run() {
|
||||||
|
Iterator<String> orderIterator = orderProvider.iterator();
|
||||||
|
while(orderIterator.hasNext()) {
|
||||||
|
String rawOrder = (String) orderIterator.next();
|
||||||
|
Order ord = orderParser.parse(rawOrder);
|
||||||
|
orders.add(ord);
|
||||||
|
ord.dump();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayList<Order> getOrders() {
|
||||||
|
return this.orders;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
package eu.lixko.ext.forraceexpander.importer;
|
||||||
|
|
||||||
|
import eu.lixko.ext.forraceexpander.components.Order;
|
||||||
|
|
||||||
|
public interface OrderParser {
|
||||||
|
|
||||||
|
public Order parse(String html);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,5 @@
|
|||||||
|
package eu.lixko.ext.forraceexpander.importer;
|
||||||
|
|
||||||
|
public interface OrderProvider extends Iterable<String> {
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,99 @@
|
|||||||
|
package eu.lixko.ext.forraceexpander.importer;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import org.jsoup.Jsoup;
|
||||||
|
import org.jsoup.nodes.Comment;
|
||||||
|
import org.jsoup.nodes.Document;
|
||||||
|
import org.jsoup.nodes.Element;
|
||||||
|
import org.jsoup.nodes.Node;
|
||||||
|
import org.jsoup.select.Elements;
|
||||||
|
|
||||||
|
import eu.lixko.ext.forraceexpander.components.Item;
|
||||||
|
import eu.lixko.ext.forraceexpander.components.Order;
|
||||||
|
|
||||||
|
public class TestOrderParser implements OrderParser {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Order parse(String html) {
|
||||||
|
Document doc = Jsoup.parse(html);
|
||||||
|
Order order = new Order();
|
||||||
|
|
||||||
|
List<Comment> comments = getComments(doc);
|
||||||
|
for (Comment c : comments) {
|
||||||
|
Pattern p = Pattern.compile("\\<!--\\s*(.*)\\s--\\>");
|
||||||
|
Matcher m = p.matcher(c.toString());
|
||||||
|
String label = "";
|
||||||
|
if (m.find()) {
|
||||||
|
label = m.group(1);
|
||||||
|
} else {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if(!label.equals("COMMODITIES"))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
Element parent = (Element) c.parent();
|
||||||
|
Elements commodities = parent.select("tbody tr");
|
||||||
|
|
||||||
|
for(Element row : commodities) {
|
||||||
|
Elements itemEl = row.select("td");
|
||||||
|
Item it = new Item();
|
||||||
|
|
||||||
|
String nameRaw = itemEl.get(0).html();
|
||||||
|
if(nameRaw.contains(" <br> ")) {
|
||||||
|
String[] vals = nameRaw.split(" <br> ");
|
||||||
|
it.setName(vals[0]);
|
||||||
|
for(String val : vals) {
|
||||||
|
if(val.contains("Kód produktu: ")) {
|
||||||
|
it.setProductCode(Long.parseLong(val.replaceAll("[^0-9]", "")));
|
||||||
|
} else if(val.startsWith("EAN: ")) {
|
||||||
|
it.setEAN(val.substring(5));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
it.setName(nameRaw);
|
||||||
|
}
|
||||||
|
|
||||||
|
it.setQuantity(Integer.parseInt(itemEl.get(1).text().replaceAll("\\D.*", ""), 10));
|
||||||
|
it.setTotalPrice(convertPrice(itemEl.get(3).text()));
|
||||||
|
it.setTotalPriceWithTax(convertPrice(itemEl.get(4).text()));
|
||||||
|
long unitPrice = convertPrice(itemEl.get(4).text());
|
||||||
|
if(unitPrice < 0)
|
||||||
|
it.setUnitPrice(it.getTotalPriceWithTax());
|
||||||
|
else
|
||||||
|
it.setUnitPrice(unitPrice);
|
||||||
|
|
||||||
|
order.addItem(it);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return order;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<Comment> getComments(Node node) {
|
||||||
|
List<Comment> comments = new ArrayList<Comment>();
|
||||||
|
int i = 0;
|
||||||
|
while (i < node.childNodes().size()) {
|
||||||
|
Node child = node.childNode(i);
|
||||||
|
if (child.nodeName().equals("#comment"))
|
||||||
|
comments.add((Comment) child);
|
||||||
|
else {
|
||||||
|
comments.addAll(getComments(child));
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
return comments;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static long convertPrice(String raw) {
|
||||||
|
raw = raw.replaceAll(" ", " ");
|
||||||
|
|
||||||
|
if(raw.length() < 4)
|
||||||
|
return -1l;
|
||||||
|
|
||||||
|
raw = raw.replaceAll("[^0-9]", "");
|
||||||
|
return Long.parseLong(raw);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
package eu.lixko.ext.forraceexpander.importer;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
public class TestOrderProvider implements OrderProvider {
|
||||||
|
|
||||||
|
private static final String testFilePath = "/home/erik/Dokumenty/ForRaceExpander/notes/original_html.txt";
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterator<String> iterator() {
|
||||||
|
return new Iterator<String>() {
|
||||||
|
private int currenti = 0;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasNext() {
|
||||||
|
if (currenti == 1)
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String next() {
|
||||||
|
currenti++;
|
||||||
|
|
||||||
|
Scanner scanner = null;
|
||||||
|
try {
|
||||||
|
scanner = new Scanner(new File(testFilePath), "UTF-8");
|
||||||
|
return scanner.useDelimiter("\\A").next();
|
||||||
|
} catch (FileNotFoundException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
scanner.close();
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
12
src/eu/lixko/ext/forracexpander/Main.java
Normal file
12
src/eu/lixko/ext/forracexpander/Main.java
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
package eu.lixko.ext.forracexpander;
|
||||||
|
|
||||||
|
import eu.lixko.ext.forraceexpander.importer.OrderImporter;
|
||||||
|
|
||||||
|
public class Main {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
OrderImporter orderImporter = new OrderImporter();
|
||||||
|
orderImporter.run();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user