From 7815e0df70506bd313297aa23b424ca11a414d4f Mon Sep 17 00:00:00 2001 From: Nikita Iryupin Date: Mon, 23 Nov 2020 15:51:15 +0100 Subject: [PATCH 1/3] Adds TODO --- .../java/cz/cvut/fel/sit/omo/foodchain/operation/IOperation.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/operation/IOperation.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/operation/IOperation.java index 9abe7d6..429a18e 100644 --- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/operation/IOperation.java +++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/operation/IOperation.java @@ -1,4 +1,5 @@ package cz.cvut.fel.sit.omo.foodchain.operation; public interface IOperation { + //TODO Tomas Angelo } From 9119ebb8ce306c48b667783297bfa4edd888db0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Musil?= Date: Sat, 28 Nov 2020 13:09:35 +0100 Subject: [PATCH 2/3] Implemented Operation and Signature packages (basic) --- .../sit/omo/foodchain/operation/Action.java | 28 ++++++++++++++++ .../operation/FinancialTransaction.java | 20 ++++++++++++ .../foodchain/operation/OperationBase.java | 32 ++++++++++++++++++- .../operation/ProductTransaction.java | 28 ++++++++++++++++ .../omo/foodchain/operation/Transaction.java | 27 ++++++++++++++++ .../foodchain/operation/TransactionType.java | 2 ++ .../omo/foodchain/signature/Signature.java | 26 +++++++++++++++ .../foodchain/signature/SignatureManager.java | 12 +++++++ 8 files changed, 174 insertions(+), 1 deletion(-) 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); + } } From 127bdd1270f3fe6f41e020476028a7a75db17abf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Musil?= Date: Tue, 22 Dec 2020 16:33:40 +0100 Subject: [PATCH 3/3] Added end to Transaction and Action, improved Signature --- .../fel/sit/omo/foodchain/operation/Action.java | 5 +++++ .../omo/foodchain/operation/OperationBase.java | 4 ++-- .../foodchain/operation/ProductTransaction.java | 6 ++++++ .../sit/omo/foodchain/operation/Transaction.java | 4 ++++ .../sit/omo/foodchain/signature/Signature.java | 15 ++++++++++++--- .../omo/foodchain/signature/SignatureManager.java | 3 ++- 6 files changed, 31 insertions(+), 6 deletions(-) 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 0902f40..f4cc2f2 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 @@ -18,6 +18,11 @@ public class Action extends OperationBase { product.setStateToReadyForDispatch(); } + public void endAction() { + this.setTimeEnd(); + product.setStateToAvailable(); + } + public IOperation getLastOperation() { return lastOperation; } 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 b6bbbca..40e4ea3 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 @@ -25,8 +25,8 @@ public class OperationBase { return timeEnd; } - public void setTimeEnd(LocalDateTime timeEnd) { - this.timeEnd = timeEnd; + public void setTimeEnd() { + this.timeEnd = LocalDateTime.now(); } public INode getNodeCreator() { 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 c3d6994..73061ee 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 @@ -18,6 +18,12 @@ public class ProductTransaction extends Transaction { product.setStateToReadyForDispatch(); } + @Override + public void endTransaction() { + super.endTransaction(); + product.setStateToAvailable(); + } + public IOperation getLastOperation() { return lastOperation; } 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 fa22bd2..54a0e72 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 @@ -17,6 +17,10 @@ public abstract class Transaction extends OperationBase { signature = SignatureManager.signTransaction(this); } + public void endTransaction() { + this.setTimeEnd(); + } + public TransactionType getTransactionType() { return transactionType; } 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 8163663..865981c 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 @@ -3,17 +3,20 @@ package cz.cvut.fel.sit.omo.foodchain.signature; import cz.cvut.fel.sit.omo.foodchain.operation.Transaction; import java.time.LocalDateTime; +import java.util.UUID; public class Signature { - private String managerCode; - private Transaction transaction; - private LocalDateTime signedDate; + private final String managerCode; + private final Transaction transaction; + private final LocalDateTime signedDate; + private final UUID uuid; public Signature(String code, Transaction transaction) { managerCode = code; this.transaction = transaction; signedDate = LocalDateTime.now(); + uuid = UUID.randomUUID(); } public Transaction getTransaction(String code) { @@ -27,4 +30,10 @@ public class Signature { return signedDate; return null; } + + public UUID getUuid(String code) { + if (code.equals(managerCode)) + return uuid; + 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 03db230..233468c 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 @@ -11,6 +11,7 @@ public class SignatureManager { } public static boolean validateSignature(Transaction transaction) { - return transaction == transaction.getSignature().getTransaction(MANAGER_CODE); + return transaction.equals(transaction.getSignature().getTransaction(MANAGER_CODE)) + && transaction.getSignature().getUuid(MANAGER_CODE).equals(transaction.getSignature().getTransaction(MANAGER_CODE).getSignature().getUuid(MANAGER_CODE)); } }