package org.freeplane.plugin.script.proxy; import java.util.HashMap; import java.util.LinkedHashMap; import org.freeplane.core.extension.IExtension; import org.freeplane.features.map.NodeModel; import org.freeplane.plugin.script.ExecuteScriptException; public class FormulaCache implements IExtension{ private HashMap<String, LinkedHashMap<String, Object>> cache = new HashMap<String, LinkedHashMap<String, Object>>(); public Object get(NodeModel nodeModel, String text) { final LinkedHashMap<String, Object> cacheEntry = cache.get(nodeModel.getID()); if (cacheEntry == null) return null; final Object object = cacheEntry.get(text); if(object instanceof ExecuteScriptException){ throw (ExecuteScriptException)object; } return object; } public void put(NodeModel nodeModel, String text, Object value) { getOrAdd(nodeModel).put(text, value); } private LinkedHashMap<String, Object> getOrAdd(NodeModel node) { LinkedHashMap<String, Object> cacheEntry = cache.get(node.getID()); if (cacheEntry == null) { cacheEntry = new LinkedHashMap<String, Object>(8); cache.put(node.getID(), cacheEntry); } return cacheEntry; } public void markAsDirtyIfFormulaNode(NodeModel node) { final LinkedHashMap<String, Object> entry = cache.get(node.getID()); if (entry != null) { // System.out.println("clearing cache for " + node); entry.clear(); } } }