diff --git a/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/tag/TagCache.java b/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/tag/TagCache.java new file mode 100644 index 0000000000000000000000000000000000000000..12638c224f8de8328e058b3024f7849c46b726c9 --- /dev/null +++ b/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/tag/TagCache.java @@ -0,0 +1,67 @@ +package de.deadlocker8.budgetmaster.logic.tag; + +import java.util.ArrayList; +import java.util.HashMap; + +import de.deadlocker8.budgetmaster.logic.payment.Payment; +import de.deadlocker8.budgetmaster.logic.payment.RepeatingPaymentEntry; + +public class TagCache +{ + private HashMap<Integer, ArrayList<Tag>> normalPaymentTagCache; + private HashMap<Integer, ArrayList<Tag>> repeatingPaymentTagCache; + + public TagCache() + { + clear(); + } + + public void clear() + { + normalPaymentTagCache = new HashMap<>(); + repeatingPaymentTagCache = new HashMap<>(); + } + + public void addTags(Payment payment, ArrayList<Tag> tags) + { + if(payment instanceof RepeatingPaymentEntry) + { + repeatingPaymentTagCache.put(((RepeatingPaymentEntry)payment).getRepeatingPaymentID(), tags); + } + else + { + normalPaymentTagCache.put(payment.getID(), tags); + } + } + + public ArrayList<Tag> getTags(Payment payment) + { + if(payment instanceof RepeatingPaymentEntry) + { + RepeatingPaymentEntry repeatingPayment = (RepeatingPaymentEntry)payment; + if(repeatingPaymentTagCache.containsKey(repeatingPayment.getRepeatingPaymentID())) + { + return repeatingPaymentTagCache.get(repeatingPayment.getRepeatingPaymentID()); + } + } + else + { + if(normalPaymentTagCache.containsKey(payment.getID())) + { + return normalPaymentTagCache.get(payment.getID()); + } + } + + return null; + } + + public HashMap<Integer, ArrayList<Tag>> getNormalPaymentTagCache() + { + return normalPaymentTagCache; + } + + public HashMap<Integer, ArrayList<Tag>> getRepeatingPaymentTagCache() + { + return repeatingPaymentTagCache; + } +} \ No newline at end of file diff --git a/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/tag/TagHandler.java b/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/tag/TagHandler.java index d4f0f17311eadfa9020c542847211701d7fcb40b..a6fb9dfe3b538dffc630e4a5d30fcd5fe1833686 100644 --- a/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/tag/TagHandler.java +++ b/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/tag/TagHandler.java @@ -11,15 +11,22 @@ import de.deadlocker8.budgetmaster.logic.serverconnection.ServerTagConnection; public class TagHandler { private Settings settings; + private TagCache tagCache; public TagHandler(Settings settings) { this.settings = settings; + this.tagCache = new TagCache(); } public ArrayList<Tag> getTags(Payment payment) throws Exception { ArrayList<Tag> tags = new ArrayList<>(); + ArrayList<Tag> cachedTags = tagCache.getTags(payment); + if(cachedTags != null) + { + return cachedTags; + } ServerTagConnection connection = new ServerTagConnection(settings); @@ -32,6 +39,8 @@ public class TagHandler tags.addAll(connection.getAllTagsForRepeatingPayment(((RepeatingPaymentEntry)payment).getRepeatingPaymentID())); } + tagCache.addTags(payment, tags); + return tags; }