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 248b9fc..0902f40 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,4 +1,32 @@ package cz.cvut.fel.sit.omo.foodchain.operation; +import cz.cvut.fel.sit.omo.foodchain.node.INode; +import cz.cvut.fel.sit.omo.foodchain.product.Product; + public class Action extends OperationBase { + + private final IOperation lastOperation; + private final Product product; + private final ProductOperationType type; + + Action(INode node, Product product) { + super(node); + this.product = product; + type = null; + lastOperation = product.getCurrentOperation(); + product.setCurrentOperation(this); + product.setStateToReadyForDispatch(); + } + + public IOperation getLastOperation() { + return lastOperation; + } + + public Product getProduct() { + return product; + } + + public ProductOperationType getType() { + return type; + } } 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 2f1a40a..e0113d0 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,4 +1,24 @@ package cz.cvut.fel.sit.omo.foodchain.operation; +import cz.cvut.fel.sit.omo.foodchain.node.INode; +import cz.cvut.fel.sit.omo.foodchain.product.Product; + public class FinancialTransaction extends Transaction { + + private final Float amount; + private final ProductTransaction transactionPaid; + + FinancialTransaction(INode creator, INode receiver, TransactionType type, Float amount, ProductTransaction transactionPaid) { + super(creator, receiver, type); + this.amount = amount; + this.transactionPaid = transactionPaid; + } + + public Float getAmount() { + return amount; + } + + public ProductTransaction getTransactionPaid() { + return transactionPaid; + } } 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 6e9403b..b6bbbca 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,5 +1,35 @@ package cz.cvut.fel.sit.omo.foodchain.operation; +import cz.cvut.fel.sit.omo.foodchain.node.INode; +import cz.cvut.fel.sit.omo.foodchain.product.Product; + +import java.time.LocalDateTime; + public class OperationBase { - IOperation lastOperation; + + private final LocalDateTime timeStart; + private LocalDateTime timeEnd; + + private final INode nodeCreator; + + OperationBase(INode node) { + nodeCreator = node; + timeStart = LocalDateTime.now(); + } + + public LocalDateTime getTimeStart() { + return timeStart; + } + + public LocalDateTime getTimeEnd() { + return timeEnd; + } + + public void setTimeEnd(LocalDateTime timeEnd) { + this.timeEnd = timeEnd; + } + + public INode getNodeCreator() { + return nodeCreator; + } } 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 a062539..c3d6994 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,4 +1,32 @@ package cz.cvut.fel.sit.omo.foodchain.operation; +import cz.cvut.fel.sit.omo.foodchain.node.INode; +import cz.cvut.fel.sit.omo.foodchain.product.Product; + public class ProductTransaction extends Transaction { + + private final IOperation lastOperation; + private final Product product; + private final ProductOperationType type; + + ProductTransaction(INode creator, INode receiver, TransactionType transactionType, Product product) { + super(creator, receiver, transactionType); + this.product = product; + type = null; + lastOperation = product.getCurrentOperation(); + product.setCurrentOperation(this); + product.setStateToReadyForDispatch(); + } + + public IOperation getLastOperation() { + return lastOperation; + } + + public Product getProduct() { + return product; + } + + public ProductOperationType getType() { + return type; + } } 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 51db3b5..fa22bd2 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,4 +1,31 @@ package cz.cvut.fel.sit.omo.foodchain.operation; +import cz.cvut.fel.sit.omo.foodchain.node.INode; +import cz.cvut.fel.sit.omo.foodchain.signature.Signature; +import cz.cvut.fel.sit.omo.foodchain.signature.SignatureManager; + public abstract class Transaction extends OperationBase { + + private final TransactionType transactionType; + private final Signature signature; + private final INode nodeReceiver; + + Transaction(INode creator, INode receiver, TransactionType type) { + super(creator); + transactionType = type; + nodeReceiver = receiver; + signature = SignatureManager.signTransaction(this); + } + + public TransactionType getTransactionType() { + return transactionType; + } + + public Signature getSignature() { + return signature; + } + + public INode getNodeReceiver() { + return nodeReceiver; + } } diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/operation/TransactionType.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/operation/TransactionType.java index eabd591..3323eae 100644 --- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/operation/TransactionType.java +++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/operation/TransactionType.java @@ -1,4 +1,6 @@ package cz.cvut.fel.sit.omo.foodchain.operation; public enum TransactionType { + + SALE, PURCHASE } diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/signature/Signature.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/signature/Signature.java index 935fe3a..8163663 100644 --- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/signature/Signature.java +++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/signature/Signature.java @@ -1,4 +1,30 @@ package cz.cvut.fel.sit.omo.foodchain.signature; +import cz.cvut.fel.sit.omo.foodchain.operation.Transaction; + +import java.time.LocalDateTime; + public class Signature { + + private String managerCode; + private Transaction transaction; + private LocalDateTime signedDate; + + public Signature(String code, Transaction transaction) { + managerCode = code; + this.transaction = transaction; + signedDate = LocalDateTime.now(); + } + + public Transaction getTransaction(String code) { + if (code.equals(managerCode)) + return transaction; + return null; + } + + public LocalDateTime getSignedDate(String code) { + if (code.equals(managerCode)) + return signedDate; + return null; + } } diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/signature/SignatureManager.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/signature/SignatureManager.java index b9f94b5..03db230 100644 --- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/signature/SignatureManager.java +++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/signature/SignatureManager.java @@ -1,4 +1,16 @@ package cz.cvut.fel.sit.omo.foodchain.signature; +import cz.cvut.fel.sit.omo.foodchain.operation.Transaction; + public class SignatureManager { + + private static final String MANAGER_CODE = "iW91AJWNOCmX1pbpLlW0"; + + public static Signature signTransaction(Transaction transaction) { + return new Signature(MANAGER_CODE, transaction); + } + + public static boolean validateSignature(Transaction transaction) { + return transaction == transaction.getSignature().getTransaction(MANAGER_CODE); + } }