From ec823ff7847b92ddcca497f6e56a455a3f0f6543 Mon Sep 17 00:00:00 2001 From: Tim Holloway Date: Sun, 16 Jan 2022 08:52:04 -0500 Subject: [PATCH] Detect in-pantry --- .../mousetech/gourmetj/ShopIngredient.java | 20 +++++- .../mousetech/gourmetj/ShoppingListBean.java | 18 +++-- .../persistence/model/Ingredient.java | 27 +++++++- .../gourmetj/persistence/model/Pantry.java | 38 ++++++----- .../gourmetj/persistence/model/Recipe.java | 6 +- .../WEB-INF/layout/dialog/editShopcat.xhtml | 58 ++++++++++++++++ .../META-INF/resources/detailEdit.xhtml | 2 +- .../META-INF/resources/editShopcat.xhtml | 61 ----------------- .../META-INF/resources/editShopcatList.xhtml | 68 ------------------- .../META-INF/resources/shoppingList.xhtml | 8 ++- .../gourmetj/ShoppingListBeanTest.java | 10 +-- 11 files changed, 153 insertions(+), 163 deletions(-) create mode 100644 src/main/resources/META-INF/resources/WEB-INF/layout/dialog/editShopcat.xhtml delete mode 100644 src/main/resources/META-INF/resources/editShopcat.xhtml delete mode 100644 src/main/resources/META-INF/resources/editShopcatList.xhtml diff --git a/src/main/java/com/mousetech/gourmetj/ShopIngredient.java b/src/main/java/com/mousetech/gourmetj/ShopIngredient.java index 8d8321a..4850d60 100644 --- a/src/main/java/com/mousetech/gourmetj/ShopIngredient.java +++ b/src/main/java/com/mousetech/gourmetj/ShopIngredient.java @@ -4,6 +4,7 @@ import com.mousetech.gourmetj.utils.IngredientDigester; import com.mousetech.gourmetj.utils.IngredientDigester.IngredientAmountFormat; public class ShopIngredient implements Comparable { + /** * Constructor. * @@ -27,12 +28,13 @@ public class ShopIngredient implements Comparable { */ public ShopIngredient( Double amount, String unit, String item, String ingkey, - String shopCat) { + String shopCat, boolean inPantry) { this.amount = amount; this.unit = unit; this.item = item; this.ingkey = ingkey; this.shopCat = shopCat; + this.inPantry = inPantry; } private String shopCat; @@ -119,6 +121,22 @@ public class ShopIngredient implements Comparable { private Double amount; private String displayAmount; private String unit; + private boolean inPantry; + + + /** + * @return the inPantry + */ + public boolean isInPantry() { + return inPantry; + } + + /** + * @param inPantry the inPantry to set + */ + public void setInPantry(boolean inPantry) { + this.inPantry = inPantry; + } @Override public int compareTo(Object o) { diff --git a/src/main/java/com/mousetech/gourmetj/ShoppingListBean.java b/src/main/java/com/mousetech/gourmetj/ShoppingListBean.java index 6dbe31a..6995106 100644 --- a/src/main/java/com/mousetech/gourmetj/ShoppingListBean.java +++ b/src/main/java/com/mousetech/gourmetj/ShoppingListBean.java @@ -1,7 +1,5 @@ package com.mousetech.gourmetj; -import java.io.ByteArrayOutputStream; -import java.io.PrintWriter; import java.io.Serializable; import java.util.ArrayList; import java.util.Comparator; @@ -14,18 +12,23 @@ import javax.inject.Inject; import javax.inject.Named; import org.apache.commons.lang3.StringUtils; -import org.primefaces.model.ByteArrayContent; -import org.primefaces.model.DefaultStreamedContent; import org.primefaces.model.StreamedContent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.mousetech.gourmetj.persistence.dao.ShopcatRepository; import com.mousetech.gourmetj.persistence.model.Ingredient; +import com.mousetech.gourmetj.persistence.model.Pantry; import com.mousetech.gourmetj.persistence.model.Recipe; import com.mousetech.gourmetj.persistence.model.Shopcat; import com.mousetech.gourmetj.utils.YamlShoppingList; +/** Backing bean for the Shopping List tab of the "More..." + * page. + * _TestedBy ShoppingListBeanTest + * @author timh + * @since Jan 16, 2022 + */ @Named @ViewScoped public class ShoppingListBean implements Serializable { @@ -160,9 +163,14 @@ public class ShoppingListBean implements Serializable { if (multiplier > 1 && (amt != null)) { amt *= multiplier; } + boolean inPantry = false; + Pantry pantry = ing.getPantry(); + if ( (pantry != null) && pantry.getPantry()) { + inPantry = true; + } sing = new ShopIngredient(amt, ing.getUnit(), ing.getItem(), ing.getIngkey(), - shopCatName); + shopCatName, inPantry); siList.add(sing); } catch (Exception e) { log.error("Unable to create ShopIngredient for " diff --git a/src/main/java/com/mousetech/gourmetj/persistence/model/Ingredient.java b/src/main/java/com/mousetech/gourmetj/persistence/model/Ingredient.java index c74f989..82d12b0 100644 --- a/src/main/java/com/mousetech/gourmetj/persistence/model/Ingredient.java +++ b/src/main/java/com/mousetech/gourmetj/persistence/model/Ingredient.java @@ -51,14 +51,14 @@ public class Ingredient implements Serializable, IngredientIF { @Column(name = "inggroup") private String inggroup; - @Column(name = "ingkey",insertable = false, updatable = false) + @Column(name = "ingkey", insertable = false, updatable = false) private String ingkey; @Column(name = "item") private String item; @Column(name = "optional") - //@NotNull + // @NotNull private Integer optional; @Column(name = "position") @@ -80,6 +80,29 @@ public class Ingredient implements Serializable, IngredientIF { @Column(name = "unit") private String unit; + @ManyToOne(fetch = FetchType.EAGER, cascade = { + CascadeType.PERSIST, CascadeType.MERGE, + CascadeType.REFRESH }, optional = true) + @JoinColumn(name = "ingkey", referencedColumnName = "ingkey", insertable = false, updatable = false) + private Pantry pantry; + + /** + * @return the pantry + */ + public Pantry getPantry() { + return pantry; + } + + /** + * @param pantry the pantry to set + */ + public void setPantry(Pantry pantry) { + this.pantry = pantry; + } + + /** + * Default Constructor. + */ public Ingredient() { // Attempt to remedy lack of constraints in DB this.optional = 0; diff --git a/src/main/java/com/mousetech/gourmetj/persistence/model/Pantry.java b/src/main/java/com/mousetech/gourmetj/persistence/model/Pantry.java index c24daf7..8b7e331 100644 --- a/src/main/java/com/mousetech/gourmetj/persistence/model/Pantry.java +++ b/src/main/java/com/mousetech/gourmetj/persistence/model/Pantry.java @@ -3,52 +3,58 @@ package com.mousetech.gourmetj.persistence.model; import java.io.Serializable; import javax.persistence.*; - /** * The persistent class for the "pantry" database table. * */ @Entity -@Table(name="\"pantry\"") -@NamedQuery(name="Pantry.findAll", query="SELECT p FROM Pantry p") +@Table(name = "pantry") public class Pantry implements Serializable { private static final long serialVersionUID = 1L; @Id - @Column(name="\"id\"") - private int id; + @Column(name = "id") + private Long id; - @Column(name="\"ingkey\"") - private Integer ingkey; + @Column(name = "ingkey", nullable=false) + private String ingkey; - @Column(name="\"pantry\"") - private String pantry; + @Column(name = "pantry") + private Boolean pantry; + /** + * Default Constructor. + */ public Pantry() { } - public int getId() { + public Long getId() { return this.id; } - public void setId(int id) { + public void setId(Long id) { this.id = id; } - public Integer getIngkey() { + public String getIngkey() { return this.ingkey; } - public void setIngkey(Integer ingkey) { + public void setIngkey(String ingkey) { this.ingkey = ingkey; } - public String getPantry() { + public Boolean getPantry() { return this.pantry; } - public void setPantry(String pantry) { + public void setPantry(Boolean pantry) { this.pantry = pantry; } -} \ No newline at end of file + @Override + public String toString() { + return ("Pantry " + getId() + " " + ingkey + " " + + getPantry()); + } +} diff --git a/src/main/java/com/mousetech/gourmetj/persistence/model/Recipe.java b/src/main/java/com/mousetech/gourmetj/persistence/model/Recipe.java index 0ff35e9..c9e5b69 100644 --- a/src/main/java/com/mousetech/gourmetj/persistence/model/Recipe.java +++ b/src/main/java/com/mousetech/gourmetj/persistence/model/Recipe.java @@ -22,8 +22,10 @@ import javax.persistence.*; + " ORDER BY cuisine ASC") @NamedEntityGraph(name = "Recipe.findWorkingSet", attributeNodes = { @NamedAttributeNode(value = "categories"), - @NamedAttributeNode(value = "ingredientHash", subgraph = "subgraph.shopcat") }, subgraphs = { - @NamedSubgraph(name = "subgraph.shopcat", attributeNodes = @NamedAttributeNode(value = "shopCat")) }) + @NamedAttributeNode(value = "ingredientHash", subgraph = "subgraph.shopcat"), + @NamedAttributeNode(value = "ingredientHash", subgraph = "subgraph.pantry") }, subgraphs = { + @NamedSubgraph(name = "subgraph.shopcat", attributeNodes = @NamedAttributeNode(value = "shopCat")), + @NamedSubgraph(name = "subgraph.pantry", attributeNodes = @NamedAttributeNode(value = "pantry")) }) public class Recipe implements Serializable { private static final long serialVersionUID = 1L; diff --git a/src/main/resources/META-INF/resources/WEB-INF/layout/dialog/editShopcat.xhtml b/src/main/resources/META-INF/resources/WEB-INF/layout/dialog/editShopcat.xhtml new file mode 100644 index 0000000..c4b529e --- /dev/null +++ b/src/main/resources/META-INF/resources/WEB-INF/layout/dialog/editShopcat.xhtml @@ -0,0 +1,58 @@ + + + + + Shopping Category + + + + + + +
Ingredient key: + #{editShopcatBean.ingkey}
+ + + + + + + + + + + + +
+
+
+
+ \ No newline at end of file diff --git a/src/main/resources/META-INF/resources/detailEdit.xhtml b/src/main/resources/META-INF/resources/detailEdit.xhtml index 279509b..eded5d3 100644 --- a/src/main/resources/META-INF/resources/detailEdit.xhtml +++ b/src/main/resources/META-INF/resources/detailEdit.xhtml @@ -423,7 +423,7 @@ - + diff --git a/src/main/resources/META-INF/resources/editShopcat.xhtml b/src/main/resources/META-INF/resources/editShopcat.xhtml deleted file mode 100644 index 0b370ca..0000000 --- a/src/main/resources/META-INF/resources/editShopcat.xhtml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - Shopping Category - - - - - - - -
Ingredient key: - #{editShopcatBean.ingkey} -
- - - - - - - - - - - - -
-
-
-
- \ No newline at end of file diff --git a/src/main/resources/META-INF/resources/editShopcatList.xhtml b/src/main/resources/META-INF/resources/editShopcatList.xhtml deleted file mode 100644 index 1d42743..0000000 --- a/src/main/resources/META-INF/resources/editShopcatList.xhtml +++ /dev/null @@ -1,68 +0,0 @@ - - - - Shopping Category - - - - - - - - - - - - - -
Ingredient key: - #{editShopcatBean.ingkey}
- - - - - - - - - - - - -
-
-
-
- \ No newline at end of file diff --git a/src/main/resources/META-INF/resources/shoppingList.xhtml b/src/main/resources/META-INF/resources/shoppingList.xhtml index 81b4132..a4486fd 100644 --- a/src/main/resources/META-INF/resources/shoppingList.xhtml +++ b/src/main/resources/META-INF/resources/shoppingList.xhtml @@ -6,6 +6,7 @@ xmlns:p="http://primefaces.org/ui" xmlns:c="http://xmlns.jcp.org/jstl" > + Gourmet Recipe Manager - Shopping