From da7c4e99794607fa3d9ce6476406a0844745a0b5 Mon Sep 17 00:00:00 2001 From: Alexander Maier Date: Mon, 26 Jun 2023 21:39:43 +0200 Subject: [PATCH 1/4] added method checkoffer --- .../de/rwu/easydrop/core/OfferReviewer.java | 77 ++++++++++++++++--- 1 file changed, 67 insertions(+), 10 deletions(-) diff --git a/src/main/java/de/rwu/easydrop/core/OfferReviewer.java b/src/main/java/de/rwu/easydrop/core/OfferReviewer.java index f410f41..fb5f962 100644 --- a/src/main/java/de/rwu/easydrop/core/OfferReviewer.java +++ b/src/main/java/de/rwu/easydrop/core/OfferReviewer.java @@ -1,23 +1,80 @@ package de.rwu.easydrop.core; import de.rwu.easydrop.model.Offer; +import de.rwu.easydrop.model.Product; +import de.rwu.easydrop.model.Product.webshop; + import java.util.List; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; import java.util.ArrayList; public class OfferReviewer { - public OfferReviewer(/*OfferReader/retriever for database? */){ + /** + * OfferReviewer. + * @return list of all items that need to be changed + */ + public List checkOffers(/*OfferReader/retriever for database? */) { - } + Connection connection = null; + Statement statement = null; + ResultSet resultSet = null; + List changedProducts = new ArrayList<>(); - public List runReviewer() { - /* - * Liest eingestellte Angebote in der Datenbank - * Prüft Zielplattformen der SourceProducts, ob diese noch verfügbar sind (Issue#12) bzw. ob sie sich im Preis geändert haben - * Gibt Liste zurück von Offers, die geändert werden müssen, wird übergeben an OfferUpdater mit availability true oder false - */ + try { + // Establish the database connection + connection = DriverManager.getConnection("jdbc:sqlite:persistence.db"); + + // Create a SQL statement + statement = connection.createStatement(); + + // Execute the query to retrieve the entries + String query = "SELECT dataOrigin, productId, currentPrice FROM table"; + resultSet = statement.executeQuery(query); + + // Process the retrieved entries + while (resultSet.next()) { + String webshop = resultSet.getString("webshop"); + String dataOrigin = resultSet.getString("data_origin"); + String productId = resultSet.getString("productId"); + double currentPrice = resultSet.getDouble("currentPrice"); + String merchant = resultSet.getString("merchant"); + double deliveryPrice = resultSet.getDouble("delivery_price"); + boolean available = resultSet.getBoolean("available"); + + // Call the API to get the current price + double apiPrice = getPriceFromAPI(productId); + + // Compare the prices + if (currentPrice != apiPrice) { + // Price has changed, create a Product object and add it to the changedProducts list + Product product = new Product(webshop, dataOrigin, productId, currentPrice, + merchant, deliveryPrice, available); + changedProducts.add(product); + } + } + } catch (SQLException e) { + e.printStackTrace(); + } finally { + // Close the resources (resultSet, statement, connection) in a finally block + try { + if (resultSet != null) { + resultSet.close(); + } + if (statement != null) { + statement.close(); + } + if (connection != null) { + connection.close(); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } return new ArrayList(); - } - } From 7a19a38aa19b160e530a8734a06b5ebd93c88ae3 Mon Sep 17 00:00:00 2001 From: Alexander Maier Date: Tue, 27 Jun 2023 00:14:02 +0200 Subject: [PATCH 2/4] fixed some issues in method checkOffers --- .../de/rwu/easydrop/core/OfferReviewer.java | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/main/java/de/rwu/easydrop/core/OfferReviewer.java b/src/main/java/de/rwu/easydrop/core/OfferReviewer.java index fb5f962..5b698bf 100644 --- a/src/main/java/de/rwu/easydrop/core/OfferReviewer.java +++ b/src/main/java/de/rwu/easydrop/core/OfferReviewer.java @@ -11,19 +11,20 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; +import java.util.Date; public class OfferReviewer { /** - * OfferReviewer. + * Check all Offers and compare them with the API. * @return list of all items that need to be changed */ - public List checkOffers(/*OfferReader/retriever for database? */) { + public List checkOffer(/*OfferReader/retriever for database? */) { Connection connection = null; Statement statement = null; ResultSet resultSet = null; - List changedProducts = new ArrayList<>(); + List changedOffers = new ArrayList<>(); try { // Establish the database connection @@ -33,28 +34,27 @@ public class OfferReviewer { statement = connection.createStatement(); // Execute the query to retrieve the entries - String query = "SELECT dataOrigin, productId, currentPrice FROM table"; + String query = "SELECT sourceProduct, saleProduct, creationDate, upDate, " + + "checkDate, offerId FROM table"; resultSet = statement.executeQuery(query); // Process the retrieved entries while (resultSet.next()) { - String webshop = resultSet.getString("webshop"); - String dataOrigin = resultSet.getString("data_origin"); - String productId = resultSet.getString("productId"); - double currentPrice = resultSet.getDouble("currentPrice"); - String merchant = resultSet.getString("merchant"); - double deliveryPrice = resultSet.getDouble("delivery_price"); - boolean available = resultSet.getBoolean("available"); + Product sourceProduct = (Product) resultSet.getObject("sourceProduct"); + Product saleProduct = (Product) resultSet.getObject("saleProduct"); + java.sql.Date creationDate = resultSet.getDate("creationDate"); + Date updateDate = resultSet.getDate("upDate"); + Date checkDate = resultSet.getDate("checkDate"); + String offerId = resultSet.getString("offerId"); // Call the API to get the current price - double apiPrice = getPriceFromAPI(productId); + double apiPrice = getPriceFromAPI(sourceProduct); // Compare the prices - if (currentPrice != apiPrice) { - // Price has changed, create a Product object and add it to the changedProducts list - Product product = new Product(webshop, dataOrigin, productId, currentPrice, - merchant, deliveryPrice, available); - changedProducts.add(product); + if (saleProduct.getCurrentPrice() != apiPrice) { + // Price has changed, create a Product object and add it to the changedProducts list + Offer offer = new Offer(); + changedOffers.add(offer); } } } catch (SQLException e) { From d0b6178d26edc83b428d747e32b4f208419cd5fd Mon Sep 17 00:00:00 2001 From: Alexander Maier Date: Tue, 27 Jun 2023 00:14:41 +0200 Subject: [PATCH 3/4] deleted an unused import --- src/main/java/de/rwu/easydrop/core/OfferReviewer.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/de/rwu/easydrop/core/OfferReviewer.java b/src/main/java/de/rwu/easydrop/core/OfferReviewer.java index 5b698bf..ba9e3d4 100644 --- a/src/main/java/de/rwu/easydrop/core/OfferReviewer.java +++ b/src/main/java/de/rwu/easydrop/core/OfferReviewer.java @@ -2,7 +2,6 @@ package de.rwu.easydrop.core; import de.rwu.easydrop.model.Offer; import de.rwu.easydrop.model.Product; -import de.rwu.easydrop.model.Product.webshop; import java.util.List; import java.sql.Connection; From 1e5ee7259496af94464e9d406c81782a722608e1 Mon Sep 17 00:00:00 2001 From: Alexander Maier Date: Tue, 27 Jun 2023 01:48:10 +0200 Subject: [PATCH 4/4] added offerupdater --- .../de/rwu/easydrop/core/OfferReviewer.java | 4 +- .../de/rwu/easydrop/core/OfferUpdater.java | 105 ++++++++++++++++-- 2 files changed, 100 insertions(+), 9 deletions(-) diff --git a/src/main/java/de/rwu/easydrop/core/OfferReviewer.java b/src/main/java/de/rwu/easydrop/core/OfferReviewer.java index ba9e3d4..e394093 100644 --- a/src/main/java/de/rwu/easydrop/core/OfferReviewer.java +++ b/src/main/java/de/rwu/easydrop/core/OfferReviewer.java @@ -59,7 +59,6 @@ public class OfferReviewer { } catch (SQLException e) { e.printStackTrace(); } finally { - // Close the resources (resultSet, statement, connection) in a finally block try { if (resultSet != null) { resultSet.close(); @@ -76,4 +75,7 @@ public class OfferReviewer { } return new ArrayList(); } + + + } diff --git a/src/main/java/de/rwu/easydrop/core/OfferUpdater.java b/src/main/java/de/rwu/easydrop/core/OfferUpdater.java index 33091cb..27d08a9 100644 --- a/src/main/java/de/rwu/easydrop/core/OfferUpdater.java +++ b/src/main/java/de/rwu/easydrop/core/OfferUpdater.java @@ -1,21 +1,110 @@ package de.rwu.easydrop.core; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.SQLException; import java.util.List; import de.rwu.easydrop.model.Offer; +import de.rwu.easydrop.model.Product; + public class OfferUpdater { + /** + * a. + */ public OfferUpdater() { + OfferReviewer offerReviewer = new OfferReviewer(); + List changedOffers = offerReviewer.checkOffer(); } - - public void runUpdater(List offersToUpdate) { - /* - * Bekommt vom OfferReviewer eine Liste mit zu ändernden Offers übergeben. - * Bei availability=false löscht der Updater das Angebot aus der Datenbank und von der Zielplattform. - * Der Updater ändert die geänderten Parameter in der Liste in der Datenbank und in der Zielplattform ab. - * Er ändert das upDate in der Datenbank nach der Änderung. - */ + /** + * A. + * @param offersToUpdate + */ + public void runUpdater(final List offersToUpdate) { + Connection connection = null; + PreparedStatement deleteStatement = null; + PreparedStatement insertStatement = null; + + try { + // Establish the database connection + connection = DriverManager.getConnection("jdbc:sqlite:persistence.db"); + + // Disable auto-commit to perform a transaction + connection.setAutoCommit(false); + + // Prepare the DELETE statement to remove the existing entries + String deleteQuery = "DELETE FROM your_table WHERE product_id = ?"; + deleteStatement = connection.prepareStatement(deleteQuery); + + // Prepare the INSERT statement to add the new entries + String insertQuery = "INSERT INTO your_table (product_id, product_name, price)" + + "VALUES (?, ?, ?)"; + insertStatement = connection.prepareStatement(insertQuery); + + // Retrieve the existing entries from the database + List existingProducts = retrieveExistingProducts(connection); + + // Delete the existing entries that are not present in the changedProducts list + for (Product existingProduct : existingProducts) { + if (!changedOffers.(existingProduct)) { + deleteStatement.setString(1, existingProduct.getProductId()); + deleteStatement.executeUpdate(); + } + } + + // Insert the new entries or update the existing entries + for (Product changedOffers : offersToUpdate) { + if (existingProducts.contains(changedOffers)) { + // Update the existing entry with the new data + // You need to modify the update query and statement based on your requirements + // Here's an example of updating the price of an existing entry + String updateQuery = "UPDATE table SET currentPrice = ? WHERE offerId = ?"; + PreparedStatement updateStatement = connection.prepareStatement(updateQuery); + updateStatement.setDouble(1, changedOffers.getCurrentPrice()); + updateStatement.setString(2, changedOffers.getProductId()); + updateStatement.executeUpdate(); + updateStatement.close(); + } else { + // Insert the new entry + insertStatement.setString(1, changedOffers.getProductId()); + insertStatement.setString(2, changedOffers.getMerchant()); + insertStatement.setDouble(3, changedOffers.getCurrentPrice()); + insertStatement.executeUpdate(); + } + } + + // Commit the transaction + connection.commit(); + } catch (SQLException e) { + // Rollback the transaction in case of an exception + if (connection != null) { + try { + connection.rollback(); + } catch (SQLException rollbackException) { + rollbackException.printStackTrace(); + } + } + e.printStackTrace(); + } finally { + // Close the resources (deleteStatement, insertStatement, connection) in a finally block + try { + if (deleteStatement != null) { + deleteStatement.close(); + } + if (insertStatement != null) { + insertStatement.close(); + } + if (connection != null) { + connection.close(); + } + } catch (SQLException e) { + e.printStackTrace(); + } } } +} +