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 585f276..7da3e5d 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 @@ -1,7 +1,16 @@ package cz.cvut.fel.sit.omo.foodchain; +import cz.cvut.fel.sit.omo.foodchain.factory.FactoryManager; + public class FoodChain { + + private static FactoryManager factoryManager; + public static void main(String[] args) { } + + public static FactoryManager getFactoryManager() { + return factoryManager; + } } 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 2f93457..97d989b 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 @@ -8,21 +8,28 @@ public class Action extends OperationBase { private final OperationBase lastOperation; private final Product product; private final ProductOperationType type; + private int duration; - Action(NodeBase node, Product product) { + Action(NodeBase node, Product product, ProductOperationType type) { super(node); this.product = product; - type = null; + this.type = type; lastOperation = product.getCurrentOperation(); + duration = type.getDuration(); product.setCurrentOperation(this); product.setStateToReadyForDispatch(); } - public void endAction() { + private void endAction() { this.setTimeEnd(); product.setStateToAvailable(); } + public void tick() { + if (duration == 0) endAction(); + else duration--; + } + public OperationBase getLastOperation() { return lastOperation; } 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 4664286..030ce8f 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,4 +1,22 @@ package cz.cvut.fel.sit.omo.foodchain.operation; public enum ProductOperationType { + + STORE_MEAT(10, -8); + + private final int duration; + private final int temperature; + + ProductOperationType(int duration, int temperature) { + this.duration = duration; + this.temperature = temperature; + } + + public int getDuration() { + return duration; + } + + public int getTemperature() { + return temperature; + } } 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 7446f9c..b750380 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,4 +1,40 @@ package cz.cvut.fel.sit.omo.foodchain.requirement; +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; + public class Requirement { + + private final NodeBase creator; + private final TransactionType transactionType; + private final ProductType productType; + private int TTL; + + public Requirement(NodeBase creator, TransactionType transactionType, ProductType productType) { + this.creator = creator; + this.transactionType = transactionType; + this.productType = productType; + TTL = 2; + } + + public void tick() { + TTL--; + } + + public NodeBase getCreator() { + return creator; + } + + public TransactionType getTransactionType() { + return transactionType; + } + + public ProductType getProductType() { + return productType; + } + + public int getTTL() { + return TTL; + } } 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 new file mode 100644 index 0000000..c802507 --- /dev/null +++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/util/Ticker.java @@ -0,0 +1,26 @@ +package cz.cvut.fel.sit.omo.foodchain.util; + +import cz.cvut.fel.sit.omo.foodchain.FoodChain; +import cz.cvut.fel.sit.omo.foodchain.pool.PoolDatabase; + +import javax.swing.*; + +public class Ticker { + + private static Timer timer; + + public static void start() { + timer = new Timer(500, actionEvent -> { + PoolDatabase db = FoodChain.getFactoryManager().getPoolDatabaseInstance(); + db.getChannelPoolInstance().findAll().forEach(ch -> ch.tick()); // change TTL of requirements + db.getNodePoolInstance().findAll().forEach(ch -> ch.tick()); // do next step in scenario + db.getProductPoolInstance().findAll().forEach(ch -> ch.tick()); // change duration of action + db.getScenarioPoolInstance().findAll().forEach(ch -> ch.tick()); // maybe unnecessary + }); + timer.start(); + } + + public static void stop() { + timer.stop(); + } +}