Merge branch 'feature/operation_impl' into develop

This commit is contained in:
Nikita Iryupin 2020-12-22 16:37:51 +01:00
commit e0b53db736
9 changed files with 200 additions and 1 deletions

View File

@ -1,4 +1,37 @@
package cz.cvut.fel.sit.omo.foodchain.operation; 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 { 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 void endAction() {
this.setTimeEnd();
product.setStateToAvailable();
}
public IOperation getLastOperation() {
return lastOperation;
}
public Product getProduct() {
return product;
}
public ProductOperationType getType() {
return type;
}
} }

View File

@ -1,4 +1,24 @@
package cz.cvut.fel.sit.omo.foodchain.operation; 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 { 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;
}
} }

View File

@ -1,4 +1,5 @@
package cz.cvut.fel.sit.omo.foodchain.operation; package cz.cvut.fel.sit.omo.foodchain.operation;
public interface IOperation { public interface IOperation {
//TODO Tomas Angelo
} }

View File

@ -1,5 +1,35 @@
package cz.cvut.fel.sit.omo.foodchain.operation; 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 { 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() {
this.timeEnd = LocalDateTime.now();
}
public INode getNodeCreator() {
return nodeCreator;
}
} }

View File

@ -1,4 +1,38 @@
package cz.cvut.fel.sit.omo.foodchain.operation; 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 { 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();
}
@Override
public void endTransaction() {
super.endTransaction();
product.setStateToAvailable();
}
public IOperation getLastOperation() {
return lastOperation;
}
public Product getProduct() {
return product;
}
public ProductOperationType getType() {
return type;
}
} }

View File

@ -1,4 +1,35 @@
package cz.cvut.fel.sit.omo.foodchain.operation; 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 { 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 void endTransaction() {
this.setTimeEnd();
}
public TransactionType getTransactionType() {
return transactionType;
}
public Signature getSignature() {
return signature;
}
public INode getNodeReceiver() {
return nodeReceiver;
}
} }

View File

@ -1,4 +1,6 @@
package cz.cvut.fel.sit.omo.foodchain.operation; package cz.cvut.fel.sit.omo.foodchain.operation;
public enum TransactionType { public enum TransactionType {
SALE, PURCHASE
} }

View File

@ -1,4 +1,39 @@
package cz.cvut.fel.sit.omo.foodchain.signature; 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 { public class Signature {
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) {
if (code.equals(managerCode))
return transaction;
return null;
}
public LocalDateTime getSignedDate(String code) {
if (code.equals(managerCode))
return signedDate;
return null;
}
public UUID getUuid(String code) {
if (code.equals(managerCode))
return uuid;
return null;
}
} }

View File

@ -1,4 +1,17 @@
package cz.cvut.fel.sit.omo.foodchain.signature; package cz.cvut.fel.sit.omo.foodchain.signature;
import cz.cvut.fel.sit.omo.foodchain.operation.Transaction;
public class SignatureManager { 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.equals(transaction.getSignature().getTransaction(MANAGER_CODE))
&& transaction.getSignature().getUuid(MANAGER_CODE).equals(transaction.getSignature().getTransaction(MANAGER_CODE).getSignature().getUuid(MANAGER_CODE));
}
} }