/** * Clears the registered UUIDs and calls onClear(). */ public void clear() { this.registeredUUIDs.clear(); this.UUIDToPathMap.clear(); onClear(); }
/** * Reload a specific node. */ protected void reload(Content node) { onRegister(node); }
@Override public void onEvent(EventIterator events) { reload(); } }, 1000, 5000);
/** * Calls onClear and reregister the nodes by calling onRegister. */ public synchronized void reload() { // Call onClear and reregister the nodes by calling onRegister onClear(); Session session = null; try { session = MgnlContext.getSystemContext().getJCRSession(RepositoryConstants.CONFIG); } catch (RepositoryException e) { throw new RuntimeException(e); } // copy to avoid ConcurrentModificationException since the list get changed during iteration List<String> uuidsAndPaths = new ArrayList<String>(registeredUUIDs); for (Iterator<String> iter = uuidsAndPaths.iterator(); iter.hasNext(); ) { String uuid = iter.next(); try { Node node = getNodeByIdentifierOrPath(session, uuid, UUIDToPathMap.get(uuid)); reload(new DefaultContent(node)); } catch (Exception e) { registeredUUIDs.remove(uuid); UUIDToPathMap.remove(uuid); log.warn("Can't reload the node with uuid [{}] and path [{}]", uuid, UUIDToPathMap.get(uuid)); } } return; }
Node result = ObservedManager.getNodeByIdentifierOrPath(session, registeredUUIDs[0], registeredPaths[0]); assertNotNull(result); assertEquals(result.getName(), nodeNames[0]); Node result = ObservedManager.getNodeByIdentifierOrPath(session, registeredUUIDs[1], registeredPaths[1]); assertNotNull(result); assertEquals(result.getName(), nodeNames[1]); Node result = ObservedManager.getNodeByIdentifierOrPath(session, registeredUUIDs[2], registeredPaths[2]); assertNotNull(result); assertEquals(result.getName(), nodeNames[2]); ObservedManager.getNodeByIdentifierOrPath(session, registeredUUIDs[3], registeredPaths[3]); fail("Failure to find node by path and uuid should have resulted in exception."); } catch (Exception e) {
private void initEntry(Content moduleNode, String nodeName, ObservedManager observedManager) { final Content node = ContentUtil.getCaseInsensitive(moduleNode, nodeName); if (node != null) { observedManager.register(node); } }
/** * Register a node. The uuid and path are cached and then onRegister() called. * * @param node the node to register */ public synchronized void register(Content node) { if (node == null) { log.warn("Tried to register a non-existing node!"); return; } ObservationUtil.registerDeferredChangeListener(RepositoryConstants.CONFIG, node.getHandle(), new EventListener() { @Override public void onEvent(EventIterator events) { reload(); } }, 1000, 5000); try { registeredUUIDs.add(node.getUUID()); UUIDToPathMap.put(node.getUUID(), node.getHandle()); onRegister(new SystemContentWrapper(node)); } catch (Exception e) { log.warn("Was not able to register [{}]", node.getHandle(), e); } }