diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/NodeBase.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/NodeBase.java index 872a434..ede1db0 100644 --- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/NodeBase.java +++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/NodeBase.java @@ -6,24 +6,30 @@ import cz.cvut.fel.sit.omo.foodchain.product.Product; import cz.cvut.fel.sit.omo.foodchain.product.ProductType; import cz.cvut.fel.sit.omo.foodchain.requirement.Requirement; import cz.cvut.fel.sit.omo.foodchain.signature.Signature; +import cz.cvut.fel.sit.omo.foodchain.signature.SignatureManager; +import cz.cvut.fel.sit.omo.foodchain.util.ChannelObserver; import javax.money.MonetaryAmount; import java.util.LinkedList; import java.util.List; -public class NodeBase { +public class NodeBase implements ChannelObserver { private final List subscribedChannels; private final List products; + private MonetaryAmount money; - public NodeBase(){ + private final List refusedTranslations; + + public NodeBase() { subscribedChannels = new LinkedList<>(); products = new LinkedList<>(); + refusedTranslations = new LinkedList<>(); } public void sendTransaction(Product product, NodeBase node) { - Transaction transaction = new ProductTransaction(this, node, TransactionType.SALE, product); //TODO wrong constructor + Transaction transaction = new ProductTransaction(this, node, TransactionType.SALE, product); subscribedChannels.stream() .filter(ch -> ch.getProductType().equals(product.getProductType())) @@ -31,8 +37,12 @@ public class NodeBase { } - public void sendTransaction(MonetaryAmount amount, NodeBase node) { + public void sendTransaction(MonetaryAmount amount, NodeBase node, ProductTransaction prevTransaction) { + Transaction transaction = new FinancialTransaction(this, node, TransactionType.PURCHASE, amount, prevTransaction); + subscribedChannels.stream() + .filter(ch -> ch.getProductType().equals(prevTransaction.getProduct().getProductType())) + .findAny().ifPresent(channel -> channel.addTransaction(transaction)); } @@ -46,26 +56,18 @@ public class NodeBase { } - public void refuseTransaction(ProductTransaction transaction) { - + public void refuseTransaction(Transaction transaction) { + transaction.endTransaction(); + refusedTranslations.add(transaction); //TODO maybe need more work on it } - - public void refuseTransaction(FinancialTransaction transaction) { - - } - - //TODO another way to read transaction - public Transaction readNextTransaction(ChannelBase channel) { + + return channel.getNextTransaction(); } - public Requirement readNextRequirement(ChannelBase channel) { - return channel.getNextRequirement(); - } - public void acceptRequirement(Requirement requirement) { @@ -83,7 +85,7 @@ public class NodeBase { public void doAction(ProductOperationType action, Product product) { - //create new action + Action actionProcess = new Action(this, product); } @@ -93,26 +95,32 @@ public class NodeBase { public void storeProduct(Product product) { - + this.products.add(product); } public void storeProducts(List products) { - + this.products.addAll(products); } public Product getProductFromStorage(String name, ProductType type) { - return null; + return products.stream().filter(ch -> ch.getProductType() == type && ch.getName().equals(name)).findFirst().orElse(null); } public Signature generateSignature(Transaction transaction) { - return null; + return SignatureManager.signTransaction(transaction); } - public boolean validateSignature(Signature signature) { - return false; + public boolean validateSignature(Transaction transaction) { + return SignatureManager.validateSignature(transaction); + } + + @Override + public void update(Requirement requirement) { + if (!requirement.getCreator().equals(this)) + acceptRequirement(requirement); } } 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 d498393..a2a9128 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 @@ -9,7 +9,7 @@ public class FinancialTransaction extends Transaction { private final MonetaryAmount amount; private final ProductTransaction transactionPaid; - FinancialTransaction(NodeBase creator, NodeBase receiver, TransactionType type, MonetaryAmount amount, ProductTransaction transactionPaid) { + public FinancialTransaction(NodeBase creator, NodeBase receiver, TransactionType type, MonetaryAmount amount, ProductTransaction transactionPaid) { super(creator, receiver, type); this.amount = amount; this.transactionPaid = transactionPaid;