diff --git a/README.MD b/README.MD
index df0c28c..45a51f4 100644
--- a/README.MD
+++ b/README.MD
@@ -24,7 +24,7 @@
***
**Nefunkční požadavky:**
- Aplikace nepožaduje autentizaci ani autorizaci.
-- Do konzole se při každém ticku vypisují provedené úkony. Z toho pak vzniká PartiesReport.
+- Do konzole se při každém ticku vypisují provedené úkony. Z toho pak vzniká TransactionReport.
- V systému není centrální autorita, jednotlivé nody na sebe nevidí a jediná třída přes kterou procházejí všechny transakce je SignatureManager, který je v tomto směru naprosto neutrální. Aplikace běží pouze v jednom threadu.
- Všechny proměnné jsou private nebo protected. Většina proměnných je final, abychom se vyhnuli např. změtným úpravám transakcí.
- SignatureManager přidává na transakce Signature, které následně i validuje. Node zahazuje (ukládá jako neplatné) všechny nevalidní transakce.
@@ -33,6 +33,6 @@
***
**Požadované výstupy:**
- Diskrétní kroky jsou realizovány pomocí třídy Ticker resp. metody tick() na jednotlivých třídách.
-- Diagramy jsou ve složce resources v souboru FoodChain.eap. BahavioralDiagram byl náš prvotní návrh a není aktuální. Ostatní reporty odpovídají realitě.
+- Diagramy jsou ve složce resources v souboru FoodChain.eap.
- Javadoc je ve složce resources v souboru FoodChain.html.
***
\ No newline at end of file
diff --git a/conf/double-spending-scenario.xml b/conf/double-spending-scenario.xml
new file mode 100644
index 0000000..dbefab9
--- /dev/null
+++ b/conf/double-spending-scenario.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+ ]>
+
+
+
+
+ generate
+ pass
+ pass
+ sell FRUIT jablko
+
+
+
\ No newline at end of file
diff --git a/conf/nodes.xml b/conf/nodes.xml
index 5e55c72..3e471ff 100644
--- a/conf/nodes.xml
+++ b/conf/nodes.xml
@@ -1,31 +1,43 @@
-
+
+
+
]>
100
+ 1.2
+ 1
MEAT PURCHASE;VEGETABLE PURCHASE;FRUIT PURCHASE
- 10
+ 200
+ 1.3
+ 0.9
MEAT SALE_AND_PURCHASE;VEGETABLE SALE_AND_PURCHASE;FRUIT SALE_AND_PURCHASE
1500
+ 1.5
+ 0.8
MEAT SALE_AND_PURCHASE;VEGETABLE SALE_AND_PURCHASE;FRUIT SALE_AND_PURCHASE
1000
+ 1.2
+ 1
MEAT SALE_AND_PURCHASE;VEGETABLE SALE_AND_PURCHASE;FRUIT SALE_AND_PURCHASE
- 250
+ 750
+ 1
+ 1
MEAT SALE;VEGETABLE SALE;FRUIT SALE
\ No newline at end of file
diff --git a/conf/scenarios.xml b/conf/scenarios.xml
index 2c43e9d..3a413cf 100644
--- a/conf/scenarios.xml
+++ b/conf/scenarios.xml
@@ -19,7 +19,55 @@ pass
generate
+ generate
+ generate
+ generate
+ generate
+ generate
+ generate
+ generate
+ generate
+
+
+
+
+ pass
+ pass
+ doaction DRY_FRUIT jablko
+ sell FRUIT hruška
+ sell FRUIT banán
+ sell VEGETABLE okurka
+ doaction STORE_VEGETABLE paprika
sell FRUIT jablko
+ doaction STORE_VEGETABLE rajče
+ doaction BOIL_MEAT vepřové
+ sell VEGETABLE paprika
+ doaction GRILL_MEAT hovězí
+ sell VEGETABLE rajče
+ sell MEAT vepřové
+ sell MEAT kuřecí
+ sell MEAT hovězí
+
+
+
+
+ pass
+ pass
+
+
+
+
+ pass
+ pass
+ pass
+
+
+
+
+ pass
+ pass
+ pass
+ pass
\ No newline at end of file
diff --git a/ŕesources/FoodChain.eap b/resources/FoodChain.eap
similarity index 85%
rename from ŕesources/FoodChain.eap
rename to resources/FoodChain.eap
index c99f1ee..d31b161 100644
Binary files a/ŕesources/FoodChain.eap and b/resources/FoodChain.eap differ
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/FoodChain.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/FoodChain.java
index 7daf53e..85c3be1 100644
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/FoodChain.java
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/FoodChain.java
@@ -2,7 +2,7 @@ package cz.cvut.fel.sit.omo.foodchain;
import cz.cvut.fel.sit.omo.foodchain.channel.ChannelBase;
import cz.cvut.fel.sit.omo.foodchain.factory.FactoryManager;
-import cz.cvut.fel.sit.omo.foodchain.node.base.NodeBase;
+import cz.cvut.fel.sit.omo.foodchain.node.NodeBase;
import cz.cvut.fel.sit.omo.foodchain.parser.ConfigurationParser;
import cz.cvut.fel.sit.omo.foodchain.parser.ParserResult;
import cz.cvut.fel.sit.omo.foodchain.parser.ParserResultElement;
@@ -39,14 +39,23 @@ public class FoodChain
rootLogger.addHandler(new ReportLogger());
- if(args.length < 4)
+ if(args.length < 1)
{
parseChannels("conf/channels.xml");
parseNodes("conf/nodes.xml");
parseProducts("conf/products.xml");
parseScenarios("conf/scenarios.xml");
- rootLogger.log(Level.CONFIG,"Parsed default scenarios");
+ rootLogger.log(Level.INFO,"Parsed default scenarios");
+ }
+ else if (args.length < 2)
+ {
+ parseChannels("conf/channels.xml");
+ parseNodes("conf/nodes.xml");
+ parseProducts("conf/products.xml");
+ parseScenarios(args[0]);
+
+ rootLogger.log(Level.INFO,"Parsed non-default scenarios");
}
else
{
@@ -55,29 +64,18 @@ public class FoodChain
parseProducts(args[3]);
parseScenarios(args[4]);
- rootLogger.log(Level.CONFIG,"Parsed non-default scenarios");
+ rootLogger.log(Level.INFO,"Parsed non-default scenarios");
}
- // getFactoryManager().getPoolDatabaseInstance().getChannelPoolInstance().findAll().stream().forEach(ch -> System.out.println(ch.getProductType()));
- // getFactoryManager().getPoolDatabaseInstance().getNodePoolInstance().findAll().stream().forEach(ch -> System.out.println(ch));
- // getFactoryManager().getPoolDatabaseInstance().getProductPoolInstance().findAll().stream().forEach(ch -> System.out.println(ch.getProductType() + " " + ch.getName()));
- // getFactoryManager().getPoolDatabaseInstance().getScenarioPoolInstance().findAll().stream().forEach(ch -> ch.getSteps().stream().forEach(s -> System.out.println(s)));
-
Ticker.start();
- while (Ticker.getTimer().isRunning())
- {
- ;
- }
+ while (Ticker.getTimer().isRunning()) {}
ReportingManager reportingManager = new ReportingManager();
System.out.println(reportingManager.generateReport());
}
- public static FactoryManager getFactoryManager()
- {
- return factoryManager;
- }
+ public static FactoryManager getFactoryManager() { return factoryManager; }
/**
* Provides connection between FoodChain and ConfigurationParser.
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/channel/ChannelBase.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/channel/ChannelBase.java
index 416c15d..7bee8ab 100644
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/channel/ChannelBase.java
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/channel/ChannelBase.java
@@ -1,15 +1,17 @@
package cz.cvut.fel.sit.omo.foodchain.channel;
-import cz.cvut.fel.sit.omo.foodchain.node.base.NodeBase;
+import cz.cvut.fel.sit.omo.foodchain.node.NodeBase;
import cz.cvut.fel.sit.omo.foodchain.operation.ProductTransaction;
import cz.cvut.fel.sit.omo.foodchain.operation.Transaction;
import cz.cvut.fel.sit.omo.foodchain.product.ProductType;
-import cz.cvut.fel.sit.omo.foodchain.reporting.ReportTextVisitor;
import cz.cvut.fel.sit.omo.foodchain.requirement.Requirement;
import cz.cvut.fel.sit.omo.foodchain.util.ChannelObserver;
import cz.cvut.fel.sit.omo.foodchain.util.Observable;
-import java.util.*;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.Queue;
+import java.util.Set;
import java.util.stream.Collectors;
/**
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/channel/OtherChannel.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/channel/OtherChannel.java
index 0e6cbb8..949ce2d 100644
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/channel/OtherChannel.java
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/channel/OtherChannel.java
@@ -1,7 +1,5 @@
package cz.cvut.fel.sit.omo.foodchain.channel;
-import cz.cvut.fel.sit.omo.foodchain.product.ProductType;
-
/**
* Channel for transporting other products
*/
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/factory/ChannelFactory.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/factory/ChannelFactory.java
index 9e9ab2b..74e2561 100644
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/factory/ChannelFactory.java
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/factory/ChannelFactory.java
@@ -2,7 +2,6 @@ package cz.cvut.fel.sit.omo.foodchain.factory;
import cz.cvut.fel.sit.omo.foodchain.channel.*;
-import cz.cvut.fel.sit.omo.foodchain.node.base.NodeBase;
import cz.cvut.fel.sit.omo.foodchain.parser.ParserResultElement;
import cz.cvut.fel.sit.omo.foodchain.product.ProductType;
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/factory/NodeFactory.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/factory/NodeFactory.java
index e441d1b..759c5f9 100644
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/factory/NodeFactory.java
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/factory/NodeFactory.java
@@ -3,8 +3,6 @@ package cz.cvut.fel.sit.omo.foodchain.factory;
import cz.cvut.fel.sit.omo.foodchain.FoodChain;
import cz.cvut.fel.sit.omo.foodchain.channel.ChannelSubscriptionType;
import cz.cvut.fel.sit.omo.foodchain.node.*;
-import cz.cvut.fel.sit.omo.foodchain.node.base.NodeBase;
-import cz.cvut.fel.sit.omo.foodchain.node.enums.NodeType;
import cz.cvut.fel.sit.omo.foodchain.parser.ParserResultElement;
import cz.cvut.fel.sit.omo.foodchain.pool.ChannelPool;
import cz.cvut.fel.sit.omo.foodchain.product.ProductType;
@@ -30,6 +28,8 @@ public class NodeFactory
NodeType nodeType = null;
String subsChannels = "";
double startMoney = 0;
+ double margin = 0;
+ double acceptableDiscount = 0;
try
{
@@ -37,6 +37,8 @@ public class NodeFactory
subsChannels = input.getChild("channels");
startMoney = Double.parseDouble(input.getChild("money"));
+ margin = Double.parseDouble(input.getChild("margin"));
+ acceptableDiscount = Double.parseDouble(input.getChild("discount"));
}
catch (IllegalArgumentException e)
{
@@ -50,19 +52,19 @@ public class NodeFactory
switch (Objects.requireNonNull(nodeType))
{
case Farmer:
- n = new Farmer(startMoney);
+ n = new Farmer(startMoney, margin, acceptableDiscount);
break;
case Processor:
- n = new Processor(startMoney);
+ n = new Processor(startMoney, margin, acceptableDiscount);
break;
case Distributor:
- n = new Distributor(startMoney);
+ n = new Distributor(startMoney, margin, acceptableDiscount);
break;
case Seller:
- n = new Seller(startMoney);
+ n = new Seller(startMoney, margin, acceptableDiscount);
break;
case Customer:
- n = new Customer(startMoney);
+ n = new Customer(startMoney, margin, acceptableDiscount);
break;
default:
}
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/factory/ProductFactory.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/factory/ProductFactory.java
index dbcc8d5..24e067d 100644
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/factory/ProductFactory.java
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/factory/ProductFactory.java
@@ -2,7 +2,6 @@ package cz.cvut.fel.sit.omo.foodchain.factory;
import cz.cvut.fel.sit.omo.foodchain.parser.ParserResultElement;
import cz.cvut.fel.sit.omo.foodchain.product.Product;
-import cz.cvut.fel.sit.omo.foodchain.product.ProductState;
import cz.cvut.fel.sit.omo.foodchain.product.ProductType;
import java.util.logging.Level;
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/factory/ScenarioFactory.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/factory/ScenarioFactory.java
index 61daeed..01da370 100644
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/factory/ScenarioFactory.java
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/factory/ScenarioFactory.java
@@ -3,7 +3,7 @@ package cz.cvut.fel.sit.omo.foodchain.factory;
import cz.cvut.fel.sit.omo.foodchain.FoodChain;
import cz.cvut.fel.sit.omo.foodchain.node.Customer;
import cz.cvut.fel.sit.omo.foodchain.node.Farmer;
-import cz.cvut.fel.sit.omo.foodchain.node.base.NodeBase;
+import cz.cvut.fel.sit.omo.foodchain.node.NodeBase;
import cz.cvut.fel.sit.omo.foodchain.operation.ProductOperationType;
import cz.cvut.fel.sit.omo.foodchain.operation.TransactionType;
import cz.cvut.fel.sit.omo.foodchain.parser.ParserResultElement;
@@ -60,9 +60,7 @@ public class ScenarioFactory
}
else
{
- Product p = FoodChain.getFactoryManager().getPoolDatabaseInstance().getProductPoolInstance().findAll().stream()
- .filter(pr -> pr.getName().equals(parts[2])).findFirst().orElse(null);
- scenarioStep = new DoActionStep(node, ProductOperationType.valueOf(parts[1]), p);
+ scenarioStep = new DoActionStep(node, ProductOperationType.valueOf(parts[1]), parts[2]);
}
break;
case "sell":
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 371e181..adfbd44 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,17 +1,14 @@
package cz.cvut.fel.sit.omo.foodchain.node;
-import cz.cvut.fel.sit.omo.foodchain.node.base.BuyerNodeBase;
-import cz.cvut.fel.sit.omo.foodchain.node.enums.NodeType;
-
import java.util.Random;
/**
* Customer node
*/
-public class Customer extends BuyerNodeBase {
+public class Customer extends NodeBase {
- public Customer(double startMoney) {
- super(startMoney);
+ public Customer(double startMoney, double margin, double acceptableDiscount) {
+ super(startMoney, margin, acceptableDiscount);
allowedSeller = NodeType.Distributor;
allowedPurchaser = NodeType.None;
nodeType = NodeType.Customer;
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/Distributor.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/Distributor.java
index e188da8..53fec4c 100644
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/Distributor.java
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/Distributor.java
@@ -1,15 +1,12 @@
package cz.cvut.fel.sit.omo.foodchain.node;
-import cz.cvut.fel.sit.omo.foodchain.node.base.RetailerNodeBase;
-import cz.cvut.fel.sit.omo.foodchain.node.enums.NodeType;
-
/**
* Distributor node
*/
-public class Distributor extends RetailerNodeBase {
+public class Distributor extends NodeBase {
- public Distributor(double startMoney) {
- super(startMoney);
+ public Distributor(double startMoney, double margin, double acceptableDiscount) {
+ super(startMoney, margin, acceptableDiscount);
allowedSeller = NodeType.Seller;
allowedPurchaser = NodeType.Customer;
this.nodeType = NodeType.Distributor;
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/Farmer.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/Farmer.java
index 6f4cb95..ef42674 100644
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/Farmer.java
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/Farmer.java
@@ -1,7 +1,5 @@
package cz.cvut.fel.sit.omo.foodchain.node;
-import cz.cvut.fel.sit.omo.foodchain.node.base.SellerNodeBase;
-import cz.cvut.fel.sit.omo.foodchain.node.enums.NodeType;
import cz.cvut.fel.sit.omo.foodchain.operation.TransactionType;
import cz.cvut.fel.sit.omo.foodchain.product.Product;
@@ -11,10 +9,10 @@ import java.util.logging.Level;
/**
* Farmer node
*/
-public class Farmer extends SellerNodeBase {
+public class Farmer extends NodeBase {
- public Farmer(double startMoney) {
- super(startMoney);
+ public Farmer(double startMoney, double margin, double acceptableDiscount) {
+ super(startMoney, margin, acceptableDiscount);
allowedSeller = NodeType.None;
allowedPurchaser = NodeType.Processor;
nodeType = NodeType.Farmer;
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/base/NodeBase.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/NodeBase.java
similarity index 89%
rename from src/main/java/cz/cvut/fel/sit/omo/foodchain/node/base/NodeBase.java
rename to src/main/java/cz/cvut/fel/sit/omo/foodchain/node/NodeBase.java
index 3af2903..da85b7e 100644
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/base/NodeBase.java
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/NodeBase.java
@@ -1,9 +1,8 @@
-package cz.cvut.fel.sit.omo.foodchain.node.base;
+package cz.cvut.fel.sit.omo.foodchain.node;
import cz.cvut.fel.sit.omo.foodchain.channel.ChannelBase;
import cz.cvut.fel.sit.omo.foodchain.channel.ChannelSubscriptionType;
-import cz.cvut.fel.sit.omo.foodchain.node.Storage;
-import cz.cvut.fel.sit.omo.foodchain.node.enums.NodeType;
+import cz.cvut.fel.sit.omo.foodchain.node.helper.RefusedRequirement;
import cz.cvut.fel.sit.omo.foodchain.operation.*;
import cz.cvut.fel.sit.omo.foodchain.product.Product;
import cz.cvut.fel.sit.omo.foodchain.product.ProductState;
@@ -16,7 +15,10 @@ import org.javamoney.moneta.Money;
import javax.money.MonetaryAmount;
import javax.naming.InsufficientResourcesException;
-import java.util.*;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -32,6 +34,8 @@ public class NodeBase implements ChannelObserver {
private final List refusedRequirements = new LinkedList<>();
private MonetaryAmount money;
+ private final double margin;
+ private final double acceptableDiscount;
protected final Storage storage;
protected NodeType nodeType;
@@ -42,12 +46,16 @@ public class NodeBase implements ChannelObserver {
this.nodeType = NodeType.None;
this.storage = new Storage(this);
this.money = Money.of(0, "USD");
+ this.margin = 1.2;
+ this.acceptableDiscount = 0.9;
}
- public NodeBase(double m) {
+ public NodeBase(double m, double margin, double acceptableDiscount) {
this.nodeType = NodeType.None;
this.storage = new Storage(this);
this.money = Money.of(m, "USD");
+ this.margin = margin;
+ this.acceptableDiscount = acceptableDiscount;
}
@@ -111,10 +119,11 @@ public class NodeBase implements ChannelObserver {
*/
private void receiveTransaction(ProductTransaction transaction) {
if (validateSignature(transaction)) {
- transaction.getProduct().setStateToReadyForReception();
+ Product p = transaction.getProduct();
+ p.setStateToReadyForReception();
transaction.endTransaction();
- sendTransaction(transaction.getProduct().getPrice(), transaction.getNodeCreator(), transaction);
-
+ sendTransaction(p.getPrice(), transaction.getNodeCreator(), transaction);
+ p.setPrice(p.getPrice().multiply(margin));
} else refuseTransaction(transaction);
}
@@ -164,7 +173,7 @@ public class NodeBase implements ChannelObserver {
price = storage.getProduct(pName, pType).getPrice();
} catch (NullPointerException e) {
refusedRequirements.add(new RefusedRequirement(tType, pType, pName, price));
- throw new InsufficientResourcesException("product unavailable");
+ throw new InsufficientResourcesException(this.getClass().getSimpleName() + " tried to sell unavailable product " + pName);
}
}
if (tType == TransactionType.SALE) {
@@ -172,7 +181,7 @@ public class NodeBase implements ChannelObserver {
storage.getProduct(pName, pType).setStateToInRequirement();
} catch (NullPointerException | IllegalStateException e) {
refusedRequirements.add(new RefusedRequirement(tType, pType, pName, price));
- throw new InsufficientResourcesException("product unavailable");
+ throw new InsufficientResourcesException(this.getClass().getSimpleName() + " tried to sell unavailable product " + pName);
}
}
Requirement req = new Requirement(this, tType, pType, pName, price);
@@ -192,7 +201,7 @@ public class NodeBase implements ChannelObserver {
if (req.getTransactionType() == TransactionType.SALE) {
createRequirement(TransactionType.PURCHASE, req.getProductType(), req.getProductName(), req.getPrice());
} else {
- if (req.getPrice().isGreaterThanOrEqualTo(storage.getProduct(req.getProductName(), req.getProductType()).getPrice().multiply(0.9))) {
+ if (req.getPrice().isGreaterThanOrEqualTo(storage.getProduct(req.getProductName(), req.getProductType()).getPrice().multiply(acceptableDiscount))) {
storage.getProduct(req.getProductName(), req.getProductType()).setPrice(req.getPrice());
sendTransaction(storage.getProduct(req.getProductName(), req.getProductType()), req.getCreator());
} else createRequirement(TransactionType.SALE, req.getProductType(), req.getProductName(), req.getPrice());
@@ -226,10 +235,10 @@ public class NodeBase implements ChannelObserver {
* Proceed specific type of action on provided product if its possible. (Propagated to its storage).
*
* @param action type of product operation to do
- * @param product product to proceed
+ * @param name product to proceed
*/
- public void doAction(ProductOperationType action, Product product) throws IllegalCallerException {
- this.storage.doAction(action, product);
+ public void doAction(ProductOperationType action, String name) throws IllegalCallerException, InsufficientResourcesException {
+ this.storage.doAction(action, name);
}
/**
@@ -270,6 +279,9 @@ public class NodeBase implements ChannelObserver {
return allowedPurchaser;
}
+ public double getMargin() { return margin; }
+
+ public double getAcceptableDiscount() { return acceptableDiscount; }
/**
* Adds amount to current assets
@@ -366,24 +378,11 @@ public class NodeBase implements ChannelObserver {
}
/**
- * Receives transactions.
+ * Receives transactions and passes tick to storage.
*/
public void tick() {
receiveTransactions();
- }
-
- private static class RefusedRequirement {
- public final TransactionType tType;
- public final ProductType pType;
- public final String pName;
- public final MonetaryAmount price;
-
- public RefusedRequirement(TransactionType tType, ProductType pType, String pName, MonetaryAmount price) {
- this.tType = tType;
- this.pType = pType;
- this.pName = pName;
- this.price = price;
- }
+ storage.tick();
}
public String accept(ReportTextVisitor visitor) {
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/enums/NodeType.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/NodeType.java
similarity index 71%
rename from src/main/java/cz/cvut/fel/sit/omo/foodchain/node/enums/NodeType.java
rename to src/main/java/cz/cvut/fel/sit/omo/foodchain/node/NodeType.java
index 4801d21..7003037 100644
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/enums/NodeType.java
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/NodeType.java
@@ -1,4 +1,4 @@
-package cz.cvut.fel.sit.omo.foodchain.node.enums;
+package cz.cvut.fel.sit.omo.foodchain.node;
/**
* Enum class for all nodes
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/Processor.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/Processor.java
index 4325eaf..2351148 100644
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/Processor.java
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/Processor.java
@@ -1,15 +1,12 @@
package cz.cvut.fel.sit.omo.foodchain.node;
-import cz.cvut.fel.sit.omo.foodchain.node.base.RetailerNodeBase;
-import cz.cvut.fel.sit.omo.foodchain.node.enums.NodeType;
-
/**
* Processor node
*/
-public class Processor extends RetailerNodeBase {
+public class Processor extends NodeBase {
- public Processor(double startMoney) {
- super(startMoney);
+ public Processor(double startMoney, double margin, double acceptableDiscount) {
+ super(startMoney, margin, acceptableDiscount);
allowedSeller = NodeType.Farmer;
allowedPurchaser = NodeType.Seller;
this.nodeType = NodeType.Processor;
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/Seller.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/Seller.java
index 3a82939..a7fd1a1 100644
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/Seller.java
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/Seller.java
@@ -1,15 +1,12 @@
package cz.cvut.fel.sit.omo.foodchain.node;
-import cz.cvut.fel.sit.omo.foodchain.node.base.RetailerNodeBase;
-import cz.cvut.fel.sit.omo.foodchain.node.enums.NodeType;
-
/**
* Seller node
*/
-public class Seller extends RetailerNodeBase {
+public class Seller extends NodeBase {
- public Seller(double startMoney) {
- super(startMoney);
+ public Seller(double startMoney, double margin, double acceptableDiscount) {
+ super(startMoney, margin, acceptableDiscount);
allowedSeller = NodeType.Processor;
allowedPurchaser = NodeType.Distributor;
this.nodeType = NodeType.Seller;
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 3ea84f9..bc443e7 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
@@ -1,13 +1,15 @@
package cz.cvut.fel.sit.omo.foodchain.node;
-import cz.cvut.fel.sit.omo.foodchain.node.base.NodeBase;
+import cz.cvut.fel.sit.omo.foodchain.node.helper.ProductCache;
import cz.cvut.fel.sit.omo.foodchain.operation.Action;
import cz.cvut.fel.sit.omo.foodchain.operation.ProductOperationType;
import cz.cvut.fel.sit.omo.foodchain.product.Product;
import cz.cvut.fel.sit.omo.foodchain.product.ProductType;
+import javax.naming.InsufficientResourcesException;
import java.util.LinkedList;
import java.util.List;
+import java.util.stream.Collectors;
/**
* Storage sub-node for storing products of other nodes
@@ -16,6 +18,7 @@ public class Storage
{
private final NodeBase storageOwner;
private final List products = new LinkedList<>();
+ private final List cache = new LinkedList<>();
public Storage(NodeBase owner)
{
@@ -29,6 +32,7 @@ public class Storage
public void storeProduct(Product product)
{
this.products.add(product);
+ this.cache.add(new ProductCache(product.getName(), product.getProductType()));
}
/**
@@ -38,6 +42,7 @@ public class Storage
public void storeProducts(List products)
{
this.products.addAll(products);
+ this.cache.addAll(products.stream().map(p -> new ProductCache(p.getName(), p.getProductType())).collect(Collectors.toList()));
}
/**
@@ -56,6 +61,8 @@ public class Storage
return products;
}
+ public List getCache() { return cache; }
+
/**
* Returns number of products in storage.
* @return
@@ -99,15 +106,16 @@ public class Storage
/**
* Proceed specific type of action on provided product if its possible.
* @param action type of product operation to do
- * @param product product to proceed
+ * @param productName product to process
*/
- public void doAction(ProductOperationType action, Product product) throws IllegalCallerException
- {
- if (action.getNode().equals(this.storageOwner.getNodeType()))
- if (action.getProduct().equals(product.getProductType()) || action.getProduct().equals(ProductType.ALL))
+ public void doAction(ProductOperationType action, String productName) throws IllegalCallerException, InsufficientResourcesException {
+ if (!containsProduct(productName, action.getProductType())) throw new InsufficientResourcesException(storageOwner.getClass().getSimpleName() + " tried to do action " + action.toString() + " to unavailable product " + productName);
+ Product product = getProduct(productName, action.getProductType());
+ if (action.getNode().equals(this.storageOwner.getNodeType()) || action.getNode().equals(NodeType.All))
+ if (action.getProductType().equals(product.getProductType()) || action.getProductType().equals(ProductType.ALL))
new Action(this.storageOwner, product, action);
else
- throw new IllegalCallerException("! IllegalCallerException in NodeBase. " + product.getProductType().toString() + " cannot be processed by action " + action.name() + " only for " + action.getProduct());
+ throw new IllegalCallerException("! IllegalCallerException in NodeBase. " + product.getProductType().toString() + " cannot be processed by action " + action.name() + " only for " + action.getProductType());
else
throw new IllegalCallerException("! IllegalCallerException in NodeBase. " + this.storageOwner.getNodeType().toString() + " cannot do action available only for " + action.getNode());
}
@@ -122,4 +130,7 @@ public class Storage
}
+ public void tick() {
+ cache.stream().filter(p -> containsProduct(p.getName(), p.getType())).forEach(ProductCache::addToDuration);
+ }
}
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/base/BuyerNodeBase.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/base/BuyerNodeBase.java
deleted file mode 100644
index c0ad0b9..0000000
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/base/BuyerNodeBase.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package cz.cvut.fel.sit.omo.foodchain.node.base;
-
-import cz.cvut.fel.sit.omo.foodchain.node.interfaces.IBuyerNode;
-import cz.cvut.fel.sit.omo.foodchain.product.Product;
-
-/**
- * Base class for all buyer nodes
- */
-public class BuyerNodeBase extends NodeBase implements IBuyerNode {
- public BuyerNodeBase(double m){
- super(m);
- }
-
-
- @Override
- public void buyProduct(Product product) {
-
- }
-}
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/base/RetailerNodeBase.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/base/RetailerNodeBase.java
deleted file mode 100644
index 77b6c9c..0000000
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/base/RetailerNodeBase.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package cz.cvut.fel.sit.omo.foodchain.node.base;
-
-import cz.cvut.fel.sit.omo.foodchain.node.interfaces.IBuyerNode;
-import cz.cvut.fel.sit.omo.foodchain.node.interfaces.ISellerNode;
-import cz.cvut.fel.sit.omo.foodchain.product.Product;
-
-/**
- * Base class for all retailer nodes
- */
-public class RetailerNodeBase extends NodeBase implements IBuyerNode, ISellerNode {
- public RetailerNodeBase(double startMoney) {
- super(startMoney);
- }
-
- @Override
- public void sellProduct(Product product) {
-
- }
-
- @Override
- public void addMargin(Product product) {
-
- }
-
- @Override
- public void buyProduct(Product product) {
-
- }
-}
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/base/SellerNodeBase.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/base/SellerNodeBase.java
deleted file mode 100644
index 4008f55..0000000
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/base/SellerNodeBase.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package cz.cvut.fel.sit.omo.foodchain.node.base;
-
-import cz.cvut.fel.sit.omo.foodchain.node.interfaces.ISellerNode;
-import cz.cvut.fel.sit.omo.foodchain.product.Product;
-
-/**
- * Base class for all seller nodes
- */
-public class SellerNodeBase extends NodeBase implements ISellerNode {
- public SellerNodeBase(double startMoney) {
- super(startMoney);
- }
-
- @Override
- public void sellProduct(Product product) {
-
- }
-
- @Override
- public void addMargin(Product product) {
-
- }
-}
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/helper/ProductCache.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/helper/ProductCache.java
new file mode 100644
index 0000000..14813d6
--- /dev/null
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/helper/ProductCache.java
@@ -0,0 +1,23 @@
+package cz.cvut.fel.sit.omo.foodchain.node.helper;
+
+import cz.cvut.fel.sit.omo.foodchain.product.ProductType;
+
+public class ProductCache {
+ private final String name;
+ private final ProductType type;
+ private int duration;
+
+ public ProductCache(String name, ProductType type) {
+ this.name = name;
+ this.type = type;
+ this.duration = 0;
+ }
+
+ public String getName() { return name; }
+
+ public ProductType getType() { return type; }
+
+ public int getDuration() { return duration; }
+
+ public void addToDuration() { duration++; }
+}
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/helper/RefusedRequirement.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/helper/RefusedRequirement.java
new file mode 100644
index 0000000..77beb64
--- /dev/null
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/helper/RefusedRequirement.java
@@ -0,0 +1,29 @@
+package cz.cvut.fel.sit.omo.foodchain.node.helper;
+
+import cz.cvut.fel.sit.omo.foodchain.operation.TransactionType;
+import cz.cvut.fel.sit.omo.foodchain.product.ProductType;
+
+import javax.money.MonetaryAmount;
+
+public class RefusedRequirement {
+
+ private final TransactionType transactionType;
+ private final ProductType productType;
+ private final String productName;
+ private final MonetaryAmount price;
+
+ public RefusedRequirement(TransactionType tType, ProductType pType, String pName, MonetaryAmount price) {
+ this.transactionType = tType;
+ this.productType = pType;
+ this.productName = pName;
+ this.price = price;
+ }
+
+ public TransactionType getTransactionType() { return transactionType; }
+
+ public ProductType getProductType() { return productType; }
+
+ public String getProductName() { return productName; }
+
+ public MonetaryAmount getPrice() { return price; }
+}
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/interfaces/IBuyerNode.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/interfaces/IBuyerNode.java
deleted file mode 100644
index 04e8848..0000000
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/interfaces/IBuyerNode.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package cz.cvut.fel.sit.omo.foodchain.node.interfaces;
-
-import cz.cvut.fel.sit.omo.foodchain.product.Product;
-
-/**
- * Interface for buyer nodes
- */
-public interface IBuyerNode {
-
- void buyProduct(Product product);
-}
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/interfaces/ISellerNode.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/interfaces/ISellerNode.java
deleted file mode 100644
index 6da026f..0000000
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/interfaces/ISellerNode.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package cz.cvut.fel.sit.omo.foodchain.node.interfaces;
-
-import cz.cvut.fel.sit.omo.foodchain.product.Product;
-
-/**
- * Interface for seller nodes
- */
-public interface ISellerNode {
-
- void sellProduct(Product product);
-
- void addMargin(Product product);
-}
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/operation/Action.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/operation/Action.java
index ae4e061..f98dc65 100644
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/operation/Action.java
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/operation/Action.java
@@ -1,11 +1,10 @@
package cz.cvut.fel.sit.omo.foodchain.operation;
-import cz.cvut.fel.sit.omo.foodchain.node.base.NodeBase;
+import cz.cvut.fel.sit.omo.foodchain.node.NodeBase;
import cz.cvut.fel.sit.omo.foodchain.product.Product;
import cz.cvut.fel.sit.omo.foodchain.reporting.ReportTextVisitor;
import java.util.logging.Level;
-import java.util.logging.Logger;
/**
* Operation for processing products in storage
@@ -39,11 +38,11 @@ public class Action extends OperationBase {
* @return action is in progress
*/
public boolean tick() {
+ duration--;
if (duration == 0) {
endAction();
return false;
}
- else duration--;
return true;
}
@@ -58,9 +57,10 @@ public class Action extends OperationBase {
@Override
public String toString() {
return "Action{" +
- ", product=" + product +
+ "product=" + product.getName() +
", type=" + type +
", duration=" + duration +
+ ", temperature=" + type.getTemperature() +
'}';
}
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/operation/FinancialTransaction.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/operation/FinancialTransaction.java
index 5b05015..9cd9afa 100644
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/operation/FinancialTransaction.java
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/operation/FinancialTransaction.java
@@ -1,6 +1,6 @@
package cz.cvut.fel.sit.omo.foodchain.operation;
-import cz.cvut.fel.sit.omo.foodchain.node.base.NodeBase;
+import cz.cvut.fel.sit.omo.foodchain.node.NodeBase;
import cz.cvut.fel.sit.omo.foodchain.reporting.ReportTextVisitor;
import javax.money.MonetaryAmount;
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/operation/OperationBase.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/operation/OperationBase.java
index a7ca445..26e3be3 100644
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/operation/OperationBase.java
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/operation/OperationBase.java
@@ -1,7 +1,6 @@
package cz.cvut.fel.sit.omo.foodchain.operation;
-import cz.cvut.fel.sit.omo.foodchain.node.base.NodeBase;
-import cz.cvut.fel.sit.omo.foodchain.reporting.PartiesReportVisitor;
+import cz.cvut.fel.sit.omo.foodchain.node.NodeBase;
import cz.cvut.fel.sit.omo.foodchain.reporting.ReportTextVisitor;
import java.time.LocalDateTime;
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/operation/ProductOperationType.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/operation/ProductOperationType.java
index 9a39cbe..324ca2b 100644
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/operation/ProductOperationType.java
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/operation/ProductOperationType.java
@@ -1,6 +1,6 @@
package cz.cvut.fel.sit.omo.foodchain.operation;
-import cz.cvut.fel.sit.omo.foodchain.node.enums.NodeType;
+import cz.cvut.fel.sit.omo.foodchain.node.NodeType;
import cz.cvut.fel.sit.omo.foodchain.product.ProductType;
/**
@@ -8,32 +8,32 @@ import cz.cvut.fel.sit.omo.foodchain.product.ProductType;
*/
public enum ProductOperationType
{
- STORE_MEAT(NodeType.All, ProductType.MEAT, 20, -8),
- STORE_FRUIT(NodeType.All, ProductType.FRUIT, 8, 2),
- STORE_VEGETABLE(NodeType.All, ProductType.VEGETABLE, 10, 2),
- STORE_OTHER(NodeType.All, ProductType.OTHER, 30, 21),
+ STORE_MEAT(NodeType.All, ProductType.MEAT, 3, -8),
+ STORE_FRUIT(NodeType.All, ProductType.FRUIT, 3, 2),
+ STORE_VEGETABLE(NodeType.All, ProductType.VEGETABLE, 3, 2),
+ STORE_OTHER(NodeType.All, ProductType.OTHER, 3, 21),
- WRAP_INTO_GIFT_PACKAGE(NodeType.Seller, ProductType.ALL, 1, -8),
- UNWRAP(NodeType.All, ProductType.ALL, 1, 21),
- CUT_TO_PIECES(NodeType.All, ProductType.ALL, 1, 21),
+ WRAP_INTO_GIFT_PACKAGE(NodeType.Seller, ProductType.ALL, 1, 21),
+ UNWRAP(NodeType.Customer, ProductType.ALL, 1, 21),
+ CUT_TO_PIECES(NodeType.Customer, ProductType.ALL, 1, 21),
- BOIL_MEAT(NodeType.All, ProductType.MEAT, 1, 21),
- GRILL_MEAT(NodeType.All, ProductType.MEAT, 1, 21),
- SMOKE_MEAT(NodeType.All, ProductType.MEAT, 1, 21),
- DRY_MEAT(NodeType.All, ProductType.MEAT, 1, 21),
+ BOIL_MEAT(NodeType.Processor, ProductType.MEAT, 2, 100),
+ GRILL_MEAT(NodeType.Processor, ProductType.MEAT, 2, 200),
+ SMOKE_MEAT(NodeType.Processor, ProductType.MEAT, 7, 60),
+ DRY_MEAT(NodeType.Processor, ProductType.MEAT, 5, 55),
- DRY_FRUIT(NodeType.All, ProductType.FRUIT, 1, 21),
- FREEZE_DRY_FRUIT(NodeType.All, ProductType.FRUIT, 1, 21);
+ DRY_FRUIT(NodeType.Processor, ProductType.FRUIT, 4, 45),
+ FREEZE_DRY_FRUIT(NodeType.Processor, ProductType.FRUIT, 3, -195);
private final NodeType node;
- private final ProductType product;
+ private final ProductType productType;
private final int duration;
private final int temperature;
ProductOperationType(NodeType node, ProductType product, int duration, int temperature)
{
this.node = node;
- this.product = product;
+ this.productType = product;
this.duration = duration;
this.temperature = temperature;
}
@@ -53,5 +53,5 @@ public enum ProductOperationType
return node;
}
- public ProductType getProduct() { return product; }
+ public ProductType getProductType() { return productType; }
}
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 503e20a..91946ab 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
@@ -1,6 +1,6 @@
package cz.cvut.fel.sit.omo.foodchain.operation;
-import cz.cvut.fel.sit.omo.foodchain.node.base.NodeBase;
+import cz.cvut.fel.sit.omo.foodchain.node.NodeBase;
import cz.cvut.fel.sit.omo.foodchain.product.Product;
import cz.cvut.fel.sit.omo.foodchain.product.ProductState;
import cz.cvut.fel.sit.omo.foodchain.reporting.ReportTextVisitor;
@@ -20,7 +20,7 @@ public class ProductTransaction extends Transaction {
super(creator, receiver, transactionType, product.getCurrentOperation());
this.product = product;
type = null;
- if (product == null || product.getProductState() != ProductState.IN_REQUIREMENT) throw new InsufficientResourcesException("product unavailable");
+ if (product == null || product.getProductState() != ProductState.IN_REQUIREMENT) throw new InsufficientResourcesException(creator.getClass().getSimpleName() + " tried to sell unavailable product " + product.getName() + " to " + receiver.getClass().getSimpleName());
product.setCurrentOperation(this);
product.setStateToReadyForDispatch();
creator.getStorage().removeProduct(product);
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/operation/Transaction.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/operation/Transaction.java
index 7985a63..991ac80 100644
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/operation/Transaction.java
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/operation/Transaction.java
@@ -1,6 +1,6 @@
package cz.cvut.fel.sit.omo.foodchain.operation;
-import cz.cvut.fel.sit.omo.foodchain.node.base.NodeBase;
+import cz.cvut.fel.sit.omo.foodchain.node.NodeBase;
import cz.cvut.fel.sit.omo.foodchain.reporting.ReportTextVisitor;
import cz.cvut.fel.sit.omo.foodchain.signature.Signature;
import cz.cvut.fel.sit.omo.foodchain.signature.SignatureManager;
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/parser/ConsoleParser.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/parser/ConsoleParser.java
deleted file mode 100644
index f3498ac..0000000
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/parser/ConsoleParser.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package cz.cvut.fel.sit.omo.foodchain.parser;
-
-/**
- * Parser for console input
- */
-public class ConsoleParser {
-}
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/parser/ParserResultElement.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/parser/ParserResultElement.java
index b2307bf..c7fef55 100644
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/parser/ParserResultElement.java
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/parser/ParserResultElement.java
@@ -1,7 +1,6 @@
package cz.cvut.fel.sit.omo.foodchain.parser;
import java.util.HashMap;
-import java.util.LinkedList;
import java.util.Map;
/**
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/pool/NodePool.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/pool/NodePool.java
index 04f976f..0a21662 100644
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/pool/NodePool.java
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/pool/NodePool.java
@@ -1,6 +1,6 @@
package cz.cvut.fel.sit.omo.foodchain.pool;
-import cz.cvut.fel.sit.omo.foodchain.node.base.NodeBase;
+import cz.cvut.fel.sit.omo.foodchain.node.NodeBase;
/**
*Pool for storing all nodes
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/product/Product.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/product/Product.java
index ef24907..605df65 100644
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/product/Product.java
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/product/Product.java
@@ -16,6 +16,7 @@ public class Product
private ProductType productType;
private OperationBase currentOperation;
private MonetaryAmount price;
+ private final MonetaryAmount startPrice;
private String name;
@@ -25,6 +26,7 @@ public class Product
this.productType = productType;
this.productState = ProductState.AVAILABLE;
this.price = Money.of(m, "USD");
+ this.startPrice = Money.of(m, "USD");
}
/**
@@ -151,6 +153,8 @@ public class Product
public void setPrice(MonetaryAmount price) { this.price = price; }
+ public MonetaryAmount getStartPrice() { return startPrice; }
+
public String accept(ReportTextVisitor visitor){
return visitor.visit(this);
}
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 656a165..528768c 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
@@ -1,6 +1,6 @@
package cz.cvut.fel.sit.omo.foodchain.reporting;
-import cz.cvut.fel.sit.omo.foodchain.node.base.NodeBase;
+import cz.cvut.fel.sit.omo.foodchain.node.NodeBase;
import cz.cvut.fel.sit.omo.foodchain.operation.Action;
import cz.cvut.fel.sit.omo.foodchain.operation.FinancialTransaction;
import cz.cvut.fel.sit.omo.foodchain.operation.ProductTransaction;
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/reporting/PartiesReportVisitor.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/reporting/PartiesReportVisitor.java
index 6773028..93dafe6 100644
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/reporting/PartiesReportVisitor.java
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/reporting/PartiesReportVisitor.java
@@ -1,8 +1,10 @@
package cz.cvut.fel.sit.omo.foodchain.reporting;
-import cz.cvut.fel.sit.omo.foodchain.channel.ChannelBase;
-import cz.cvut.fel.sit.omo.foodchain.node.base.NodeBase;
-import cz.cvut.fel.sit.omo.foodchain.operation.*;
+import cz.cvut.fel.sit.omo.foodchain.node.NodeBase;
+import cz.cvut.fel.sit.omo.foodchain.operation.Action;
+import cz.cvut.fel.sit.omo.foodchain.operation.FinancialTransaction;
+import cz.cvut.fel.sit.omo.foodchain.operation.OperationBase;
+import cz.cvut.fel.sit.omo.foodchain.operation.ProductTransaction;
import cz.cvut.fel.sit.omo.foodchain.product.Product;
import java.util.LinkedList;
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/reporting/ReportTextVisitor.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/reporting/ReportTextVisitor.java
index 62d2531..c75daa5 100644
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/reporting/ReportTextVisitor.java
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/reporting/ReportTextVisitor.java
@@ -1,8 +1,7 @@
package cz.cvut.fel.sit.omo.foodchain.reporting;
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.base.NodeBase;
+import cz.cvut.fel.sit.omo.foodchain.node.NodeBase;
import cz.cvut.fel.sit.omo.foodchain.operation.*;
import cz.cvut.fel.sit.omo.foodchain.pool.PoolDatabase;
import cz.cvut.fel.sit.omo.foodchain.product.Product;
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 f1bc0f8..6f01924 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
@@ -1,8 +1,9 @@
package cz.cvut.fel.sit.omo.foodchain.reporting;
-import cz.cvut.fel.sit.omo.foodchain.channel.ChannelBase;
-import cz.cvut.fel.sit.omo.foodchain.node.base.NodeBase;
-import cz.cvut.fel.sit.omo.foodchain.operation.*;
+import cz.cvut.fel.sit.omo.foodchain.node.NodeBase;
+import cz.cvut.fel.sit.omo.foodchain.operation.Action;
+import cz.cvut.fel.sit.omo.foodchain.operation.FinancialTransaction;
+import cz.cvut.fel.sit.omo.foodchain.operation.ProductTransaction;
import cz.cvut.fel.sit.omo.foodchain.product.Product;
public class SecurityReportVisitor implements ReportTextVisitor {
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/requirement/Requirement.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/requirement/Requirement.java
index 12b8bac..b256a7b 100644
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/requirement/Requirement.java
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/requirement/Requirement.java
@@ -1,14 +1,11 @@
package cz.cvut.fel.sit.omo.foodchain.requirement;
-import cz.cvut.fel.sit.omo.foodchain.node.base.NodeBase;
+import cz.cvut.fel.sit.omo.foodchain.node.NodeBase;
import cz.cvut.fel.sit.omo.foodchain.operation.TransactionType;
-import cz.cvut.fel.sit.omo.foodchain.product.ProductState;
import cz.cvut.fel.sit.omo.foodchain.product.ProductType;
import cz.cvut.fel.sit.omo.foodchain.util.Ticker;
-import org.javamoney.moneta.Money;
import javax.money.MonetaryAmount;
-import javax.naming.InsufficientResourcesException;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -33,7 +30,7 @@ public class Requirement {
this.productType = productType;
this.productName = productName;
this.price = price;
- this.TTL = 3;
+ this.TTL = 5;
this.id = counter++;
LOGGER.log(Level.INFO, toString());
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/scenario/DoActionStep.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/scenario/DoActionStep.java
index b30ed76..eceaf75 100644
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/scenario/DoActionStep.java
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/scenario/DoActionStep.java
@@ -1,9 +1,10 @@
package cz.cvut.fel.sit.omo.foodchain.scenario;
-import cz.cvut.fel.sit.omo.foodchain.node.base.NodeBase;
+import cz.cvut.fel.sit.omo.foodchain.node.NodeBase;
import cz.cvut.fel.sit.omo.foodchain.operation.ProductOperationType;
import cz.cvut.fel.sit.omo.foodchain.product.Product;
+import javax.naming.InsufficientResourcesException;
import java.util.logging.Level;
/**
@@ -12,12 +13,12 @@ import java.util.logging.Level;
public class DoActionStep extends ScenarioStep {
private final NodeBase nodeBase;
private final ProductOperationType productOperationType;
- private final Product product;
+ private final String productName;
- public DoActionStep(NodeBase node, ProductOperationType productOperationType, Product product){
+ public DoActionStep(NodeBase node, ProductOperationType productOperationType, String name){
this.nodeBase = node;
this.productOperationType = productOperationType;
- this.product = product;
+ this.productName = name;
}
public DoActionStep(NodeBase node, ProductOperationType productOperationType){
@@ -31,14 +32,14 @@ public class DoActionStep extends ScenarioStep {
@Override
void execute() {
try {
- if (product != null) {
- nodeBase.doAction(productOperationType, product);
+ if (productName != null) {
+ nodeBase.doAction(productOperationType, productName);
}
else {
nodeBase.doAction(productOperationType);
}
}
- catch (IllegalCallerException e) {
+ catch (IllegalCallerException | InsufficientResourcesException e) {
LOGGER.log(Level.SEVERE, e.getMessage());
}
}
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/scenario/ScenarioStep.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/scenario/ScenarioStep.java
index 4b59baf..1d3b603 100644
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/scenario/ScenarioStep.java
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/scenario/ScenarioStep.java
@@ -1,7 +1,5 @@
package cz.cvut.fel.sit.omo.foodchain.scenario;
-import cz.cvut.fel.sit.omo.foodchain.operation.OperationBase;
-
import java.util.logging.Logger;
/**
diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/scenario/SendRequirementStep.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/scenario/SendRequirementStep.java
index 1ead730..fb8572e 100644
--- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/scenario/SendRequirementStep.java
+++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/scenario/SendRequirementStep.java
@@ -1,6 +1,6 @@
package cz.cvut.fel.sit.omo.foodchain.scenario;
-import cz.cvut.fel.sit.omo.foodchain.node.base.NodeBase;
+import cz.cvut.fel.sit.omo.foodchain.node.NodeBase;
import cz.cvut.fel.sit.omo.foodchain.operation.TransactionType;
import cz.cvut.fel.sit.omo.foodchain.product.ProductType;
import org.javamoney.moneta.Money;
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 d5c31ff..a2e9b6d 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
@@ -16,11 +16,7 @@ public class ReportLogger extends Handler
@Override
public void publish(LogRecord record) {
StringBuilder sb = new StringBuilder();
- sb.append(record.getSourceClassName())
- .append("#")
- .append(record.getSourceMethodName())
- .append(" - ")
- .append(record.getMessage());
+ sb.append(record.getMessage());
if(record.getLevel().equals(Level.WARNING) || record.getLevel().equals(Level.SEVERE))
{
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 0647543..8114450 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,7 +2,6 @@ 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.base.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;
@@ -29,8 +28,8 @@ 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
- boolean scenarioBool = db.getScenarioPoolInstance().findAll().stream().filter(Scenario::tick).count() == 0; // do next step in scenario
db.getNodePoolInstance().findAll().forEach(n -> n.tick()); // receive transactions
+ boolean scenarioBool = db.getScenarioPoolInstance().findAll().stream().filter(Scenario::tick).count() == 0; // do next step in scenario
if (channelBool && productBool && scenarioBool) stop();
});
timer.start();