@SuppressWarnings({ "unchecked", "rawtypes" }) @Override public Object clone() { cleanup(); synchronized (map) { return new SoftHashMap((HashMap) map.clone()); } }
/** {@inheritDoc} */ @Override public void clear() { synchronized (this) { mapping.clear(); cache.clear(); } }
@Override protected void lockEvent(boolean locked) { synchronized (cache) { if (locked) { locks.put(name, this); if (!cache.containsKey(name)) // could be removed in the meantime ? cache.put(name, this); } else { locks.remove(name); } } } }
@Override public void putAll(Map<? extends K, ? extends V> m) { for (java.util.Map.Entry<? extends K, ? extends V> entry : m.entrySet()) put(entry.getKey(), entry.getValue()); }
@Override public Set<K> keySet() { periodicCleanup(); synchronized (map) { return map.keySet(); } }
private void periodicCleanup() { if (System.currentTimeMillis() - lastCleanup < 1000 * 60) return; cleanup(); }
/** {@inheritDoc} */ @Override public void put(String clazz, ParameterEntryMapper mapper) { synchronized (this) { mapping.put(clazz, mapper); cache.remove(clazz); } }
@Override public Lock[] managedLocks() { synchronized (cache) { LinkedList<Lock> list = new LinkedList<>(); for (Lock item : cache.values()) if (item != null) list.add(item); return list.toArray(new Lock[list.size()]); } }
@Override public int size() { periodicCleanup(); synchronized (map) { return map.size(); } }
@Override public void cleanupCache() { File f = new File("etc/de.mhus.cherry.reactive.model.ui.IEngineFactory.properties"); if (f.exists()) defaultProcessProperties = MProperties.load(f); synchronized (cache) { cache.cleanup(); } }
@Override public void put(String clazz, ParameterEntryMapper mapper) { synchronized (this) { mapping.put(clazz, mapper); cache.remove(clazz); } }
@Override public IEngine create(String user, Locale locale) { if (locale == null) locale = Locale.getDefault(); synchronized (cache) { IEngine engine = cache.get(user + "#" + locale.getLanguage()); if (engine != null && !engine.isClosed()) return engine; ReactiveAdmin api = MApi.lookup(ReactiveAdmin.class); engine = new UiEngine(api.getEngine(), user, locale); ((UiEngine)engine).setDefaultProcessProperties(defaultProcessProperties); cache.put(user + "#" + locale.getLanguage(), engine); return engine; } }
@Override public boolean containsKey(Object key) { periodicCleanup(); synchronized (map) { return map.containsKey(key); } }
@Override public void clear() { synchronized (this) { mapping.clear(); cache.clear(); } }
@Override public boolean containsValue(Object value) { periodicCleanup(); synchronized (map) { return map.containsValue(value); } }
@Override public boolean isEmpty() { periodicCleanup(); synchronized (map) { return map.isEmpty(); } }
@Override public V remove(Object key) { periodicCleanup(); synchronized (map) { SoftReference<V> s = map.remove(key); if (s == null) return null; return s.get(); } }