diff --git a/conf/scenarios.xml b/conf/scenarios.xml
index 3a413cf..69e2afd 100644
--- a/conf/scenarios.xml
+++ b/conf/scenarios.xml
@@ -53,6 +53,23 @@ pass
pass
pass
+ pass
+ pass
+ pass
+ doaction STORE_FRUIT hruška
+ doaction WRAP_INTO_GIFT_PACKAGE banán
+ sell VEGETABLE okurka
+ sell FRUIT banán
+ doaction WRAP_INTO_GIFT_PACKAGE jablko
+ sell FRUIT hruška
+ sell FRUIT jablko
+ doaction WRAP_INTO_GIFT_PACKAGE paprika
+ sell VEGETABLE paprika
+ pass
+ sell MEAT vepřové
+ doaction WRAP_INTO_GIFT_PACKAGE kuřecí
+ sell MEAT hovězí
+ sell MEAT kuřecí
@@ -60,6 +77,24 @@ pass
pass
pass
pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ sell VEGETABLE okurka
+ sell FRUIT banán
+ pass
+ sell FRUIT hruška
+ sell FRUIT jablko
+ pass
+ sell VEGETABLE paprika
+ pass
+ sell MEAT vepřové
+ pass
+ sell MEAT hovězí
+ sell MEAT kuřecí
@@ -68,6 +103,25 @@ pass
pass
pass
pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ consume
+ consume
+ pass
+ pass
+ consume
+ consume
+ pass
+ pass
+ consume
+ consume
+ consume
+ consume
\ No newline at end of file
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/Customer.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/Customer.java
index adfbd44..a8e392e 100644
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/Customer.java
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/Customer.java
@@ -1,6 +1,9 @@
package cz.cvut.fel.sit.omo.foodchain.node;
+import cz.cvut.fel.sit.omo.foodchain.product.Product;
+
import java.util.Random;
+import java.util.logging.Level;
/**
* Customer node
@@ -15,7 +18,14 @@ public class Customer extends NodeBase {
}
public void consumeProduct() {
+ if(getStorage().getNumberOfStoredProducts() == 0)
+ {
+ LOGGER.log(Level.WARNING, this.nodeType + " tried to consume non existing product.");
+ return;
+ }
int i = new Random().nextInt(getStorage().getNumberOfStoredProducts());
+ Product temp = getStorage().getProducts().get(i);
getStorage().getProducts().remove(i);
+ LOGGER.log(Level.INFO, this.nodeType + " consumed " + temp.getName() + " " + temp.getProductType());
}
}
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/Storage.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/Storage.java
index bc443e7..d5e28c9 100644
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/Storage.java
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/Storage.java
@@ -53,7 +53,7 @@ public class Storage
*/
public Product getProduct(String name, ProductType type)
{
- return products.stream().filter(ch -> ch.getProductType() == type && ch.getName().equals(name)).findFirst().orElse(null);
+ return products.stream().filter(ch -> (ch.getProductType().equals(type) || type.equals(ProductType.ALL)) && ch.getName().equals(name)).findFirst().orElse(null);
}
public List getProducts()
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/operation/ProductTransaction.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/operation/ProductTransaction.java
index 91946ab..b06febb 100644
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/operation/ProductTransaction.java
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/operation/ProductTransaction.java
@@ -50,7 +50,8 @@ public class ProductTransaction extends Transaction {
public String toString() {
return "ProductTransaction{" +
"product=" + product.getName() +
- '}';
+ ", creator="+this.getNodeCreator().getNodeType() +
+ ", receiver="+this.getNodeReceiver().getNodeType() + "}";
}
@Override
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/reporting/FoodChainReportVisitor.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/reporting/FoodChainReportVisitor.java
index 5d359ab..cc01476 100644
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/reporting/FoodChainReportVisitor.java
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/reporting/FoodChainReportVisitor.java
@@ -14,6 +14,7 @@ public class FoodChainReportVisitor implements ReportTextVisitor {
@Override
public String visit(Product product) {
StringBuilder builder = new StringBuilder();
+
builder.append("-----PRODUCT-----").append(ln)
.append("Name: ").append(product.getName()).append(ln)
.append("Type: ").append(product.getProductType()).append(ln)
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/reporting/SecurityReportVisitor.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/reporting/SecurityReportVisitor.java
index 9d3a2ca..d75d3a8 100644
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/reporting/SecurityReportVisitor.java
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/reporting/SecurityReportVisitor.java
@@ -7,10 +7,7 @@ import cz.cvut.fel.sit.omo.foodchain.product.Product;
public class SecurityReportVisitor implements ReportTextVisitor {
@Override
- public String visit(NodeBase node) {
- return
- ;
- }
+ public String visit(NodeBase node) { return null; }
@Override
public String visit(Product product) {
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/util/ReportLogger.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/util/ReportLogger.java
index a2e9b6d..a6633b9 100644
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/util/ReportLogger.java
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/util/ReportLogger.java
@@ -1,5 +1,12 @@
package cz.cvut.fel.sit.omo.foodchain.util;
+import org.javamoney.moneta.Money;
+import org.javamoney.moneta.format.CurrencyStyle;
+
+import javax.money.format.AmountFormatQueryBuilder;
+import javax.money.format.MonetaryAmountFormat;
+import javax.money.format.MonetaryFormats;
+import java.util.Locale;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.LogRecord;
@@ -18,15 +25,16 @@ public class ReportLogger extends Handler
StringBuilder sb = new StringBuilder();
sb.append(record.getMessage());
+ // Blocking Money logs because spams "Using default formatter toString()." after printing MonetaryAmount in reports
+ if(record.getSourceClassName().equals(Money.class.getName()))return;
+
if(record.getLevel().equals(Level.WARNING) || record.getLevel().equals(Level.SEVERE))
{
System.err.println(sb.toString());
- //todo add some outprint to report log
}
else
{
System.out.println(sb.toString());
- //todo add some outprint to report log
}
}
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/util/Ticker.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/util/Ticker.java
index 8114450..e34b0a6 100644
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/util/Ticker.java
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/util/Ticker.java
@@ -2,6 +2,7 @@ package cz.cvut.fel.sit.omo.foodchain.util;
import cz.cvut.fel.sit.omo.foodchain.FoodChain;
import cz.cvut.fel.sit.omo.foodchain.channel.ChannelBase;
+import cz.cvut.fel.sit.omo.foodchain.node.NodeBase;
import cz.cvut.fel.sit.omo.foodchain.pool.PoolDatabase;
import cz.cvut.fel.sit.omo.foodchain.product.Product;
import cz.cvut.fel.sit.omo.foodchain.scenario.Scenario;
@@ -28,7 +29,7 @@ public class Ticker {
PoolDatabase db = FoodChain.getFactoryManager().getPoolDatabaseInstance();
boolean productBool = db.getProductPoolInstance().findAll().stream().filter(Product::tick).count() == 0; // change duration of action
boolean channelBool = db.getChannelPoolInstance().findAll().stream().filter(ChannelBase::tick).count() == 0; // change TTL of requirements
- db.getNodePoolInstance().findAll().forEach(n -> n.tick()); // receive transactions
+ db.getNodePoolInstance().findAll().forEach(NodeBase::tick); // receive transactions
boolean scenarioBool = db.getScenarioPoolInstance().findAll().stream().filter(Scenario::tick).count() == 0; // do next step in scenario
if (channelBool && productBool && scenarioBool) stop();
});