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 126eb10..98dad3f 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 @@ -38,7 +38,7 @@ public class FoodChain ReportingManager reportingManager = new ReportingManager(); - System.out.println(reportingManager.acceptAllObjects()); + System.out.println(reportingManager.generateReport()); } public static FactoryManager getFactoryManager() diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/base/NodeBase.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/base/NodeBase.java index 84d3526..4556850 100644 --- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/base/NodeBase.java +++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/node/base/NodeBase.java @@ -196,18 +196,10 @@ public class NodeBase implements ChannelObserver { return money; } - public NodeType getNodeType() { - return nodeType; - } - public Map getSubscribedChannels() { return subscribedChannels; } - public List getProducts() { - return products; - } - public List getRefusedTransactions() { return refusedTransactions; } 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 c2d1587..73611ee 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 @@ -4,7 +4,7 @@ import cz.cvut.fel.sit.omo.foodchain.node.base.NodeBase; import java.time.LocalDateTime; -public class OperationBase { +public abstract class OperationBase { private final LocalDateTime timeStart; private LocalDateTime timeEnd; diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/reporting/FoodChainReportVisitor.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/reporting/FoodChainReportVisitor.java new file mode 100644 index 0000000..4e0b4f8 --- /dev/null +++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/reporting/FoodChainReportVisitor.java @@ -0,0 +1,34 @@ +package cz.cvut.fel.sit.omo.foodchain.reporting; + +import cz.cvut.fel.sit.omo.foodchain.channel.ChannelBase; +import cz.cvut.fel.sit.omo.foodchain.node.base.NodeBase; +import cz.cvut.fel.sit.omo.foodchain.operation.FinancialTransaction; +import cz.cvut.fel.sit.omo.foodchain.operation.ProductTransaction; +import cz.cvut.fel.sit.omo.foodchain.product.Product; + +public class FoodChainReportVisitor implements ReportTextVisitor { + @Override + public String visit(NodeBase node) { + return null; + } + + @Override + public String visit(ChannelBase channel) { + return null; + } + + @Override + public String visit(Product product) { + return null; + } + + @Override + public String visit(ProductTransaction transaction) { + return null; + } + + @Override + public String visit(FinancialTransaction transaction) { + return null; + } +} diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/reporting/PartiesReportVisitor.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/reporting/PartiesReportVisitor.java new file mode 100644 index 0000000..7ee747d --- /dev/null +++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/reporting/PartiesReportVisitor.java @@ -0,0 +1,34 @@ +package cz.cvut.fel.sit.omo.foodchain.reporting; + +import cz.cvut.fel.sit.omo.foodchain.channel.ChannelBase; +import cz.cvut.fel.sit.omo.foodchain.node.base.NodeBase; +import cz.cvut.fel.sit.omo.foodchain.operation.FinancialTransaction; +import cz.cvut.fel.sit.omo.foodchain.operation.ProductTransaction; +import cz.cvut.fel.sit.omo.foodchain.product.Product; + +public class PartiesReportVisitor implements ReportTextVisitor { + @Override + public String visit(NodeBase node) { + return null; + } + + @Override + public String visit(ChannelBase channel) { + return null; + } + + @Override + public String visit(Product product) { + return null; + } + + @Override + public String visit(ProductTransaction transaction) { + return null; + } + + @Override + public String visit(FinancialTransaction transaction) { + return null; + } +} diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/reporting/ReportBuilder.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/reporting/ReportBuilder.java new file mode 100644 index 0000000..a900ad9 --- /dev/null +++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/reporting/ReportBuilder.java @@ -0,0 +1,47 @@ +package cz.cvut.fel.sit.omo.foodchain.reporting; + +import cz.cvut.fel.sit.omo.foodchain.FoodChain; +import cz.cvut.fel.sit.omo.foodchain.pool.PoolDatabase; + +public class ReportBuilder { + private final StringBuilder report; + private final PoolDatabase db; + + public ReportBuilder(){ + report = new StringBuilder(); + db = FoodChain.getFactoryManager().getPoolDatabaseInstance(); + } + + public ReportBuilder addPartiesReport(){ + ReportTextVisitor reportVisitor = new PartiesReportVisitor(); + + db.getNodePoolInstance().findAll().forEach(n -> report.append(reportVisitor.visit(n))); + + return this; + } + + public ReportBuilder addFoodChainReport(){ + ReportTextVisitor reportVisitor = new FoodChainReportVisitor(); + + db.getProductPoolInstance().findAll().forEach(p -> report.append(reportVisitor.visit(p))); + + return this; + } + + public ReportBuilder addSecurityReport(){ + ReportTextVisitor reportVisitor = new FoodChainReportVisitor(); + + db.getNodePoolInstance().findAll().forEach(n -> report.append(reportVisitor.visit(n))); + + return this; + } + + public ReportBuilder addTransactionReport(){ + //TODO + return this; + } + + public String build(){ + return report.toString(); + } +} diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/reporting/ReportTextVisitor.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/reporting/ReportTextVisitor.java index da76e51..309b215 100644 --- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/reporting/ReportTextVisitor.java +++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/reporting/ReportTextVisitor.java @@ -8,36 +8,16 @@ import cz.cvut.fel.sit.omo.foodchain.operation.ProductTransaction; import cz.cvut.fel.sit.omo.foodchain.operation.Transaction; import cz.cvut.fel.sit.omo.foodchain.product.Product; -public class ReportTextVisitor { - private static final String ln = System.lineSeparator(); +public interface ReportTextVisitor { + String ln = System.lineSeparator(); - public String visit(NodeBase node) { - StringBuilder result = new StringBuilder(); - result.append("Node type: ").append(node.getNodeType()).append(ln) - .append("Allowed seller: ").append(node.getAllowedSeller()).append(ln) - .append("Allowed purchaser: ").append(node.getAllowedPurchaser()).append(ln) - .append("Money: ").append(node.getMoney()).append(ln) - .append("Refused transactions: "); - node.getRefusedTransactions().forEach(tr -> result.append(tr.accept(this))); - result.append(ln).append(ln); + String visit(NodeBase node); - return result.toString(); - } + String visit(ChannelBase channel); - public String visit(ChannelBase channel) { + String visit(Product product); - return ""; - } + String visit(ProductTransaction transaction); - public String visit(Product product) { - return ""; - } - - public String visit(ProductTransaction transaction) { - return ""; - } - - public String visit(FinancialTransaction transaction) { - return ""; - } + String visit(FinancialTransaction transaction); } \ No newline at end of file diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/reporting/ReportingManager.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/reporting/ReportingManager.java index 33e0d78..78bc905 100644 --- a/src/main/java/cz/cvut/fel/sit/omo/foodchain/reporting/ReportingManager.java +++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/reporting/ReportingManager.java @@ -1,8 +1,5 @@ package cz.cvut.fel.sit.omo.foodchain.reporting; -import cz.cvut.fel.sit.omo.foodchain.FoodChain; -import cz.cvut.fel.sit.omo.foodchain.pool.PoolDatabase; - import java.io.File; import java.io.FileWriter; import java.io.IOException; @@ -17,22 +14,21 @@ public class ReportingManager { if (!reportFile.createNewFile()) { throw new FileAlreadyExistsException(pathname); } - fileWriter.write(acceptAllObjects()); + fileWriter.write(generateReport()); } catch (IOException e) { e.printStackTrace(); } } - public String acceptAllObjects(){ - ReportTextVisitor visitor = new ReportTextVisitor(); - PoolDatabase db = FoodChain.getFactoryManager().getPoolDatabaseInstance(); - StringBuilder string = new StringBuilder(); + public String generateReport(){ + ReportBuilder reportBuilder = new ReportBuilder(); - db.getChannelPoolInstance().findAll().forEach(ch -> string.append(ch.accept(visitor))); - db.getNodePoolInstance().findAll().forEach(n-> string.append(n.accept(visitor))); - db.getProductPoolInstance().findAll().forEach(p -> string.append(p.accept(visitor))); - - return string.toString(); + return reportBuilder + .addPartiesReport() + .addFoodChainReport() + .addSecurityReport() + .addTransactionReport() + .build(); } } diff --git a/src/main/java/cz/cvut/fel/sit/omo/foodchain/reporting/SecurityReportReportVisitor.java b/src/main/java/cz/cvut/fel/sit/omo/foodchain/reporting/SecurityReportReportVisitor.java new file mode 100644 index 0000000..dc3c560 --- /dev/null +++ b/src/main/java/cz/cvut/fel/sit/omo/foodchain/reporting/SecurityReportReportVisitor.java @@ -0,0 +1,34 @@ +package cz.cvut.fel.sit.omo.foodchain.reporting; + +import cz.cvut.fel.sit.omo.foodchain.channel.ChannelBase; +import cz.cvut.fel.sit.omo.foodchain.node.base.NodeBase; +import cz.cvut.fel.sit.omo.foodchain.operation.FinancialTransaction; +import cz.cvut.fel.sit.omo.foodchain.operation.ProductTransaction; +import cz.cvut.fel.sit.omo.foodchain.product.Product; + +public class SecurityReportReportVisitor implements ReportTextVisitor { + @Override + public String visit(NodeBase node) { + return null; + } + + @Override + public String visit(ChannelBase channel) { + return null; + } + + @Override + public String visit(Product product) { + return null; + } + + @Override + public String visit(ProductTransaction transaction) { + return null; + } + + @Override + public String visit(FinancialTransaction transaction) { + return null; + } +}