org.springframework.core.Constants#javax.jcr.observation.Event源码实例Demo

下面列出了org.springframework.core.Constants#javax.jcr.observation.Event 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

@Activate
protected synchronized void activate(final ComponentContext ctx) throws LoginException, RepositoryException {
    // check enabled state
    if (resolver == null) {
        bundleContext = ctx.getBundleContext();
        final Map<String, Object> map = new HashMap<>();
        map.put(ResourceResolverFactory.SUBSERVICE, VIRTUAL_PRODUCTS_SERVICE);
        resolver = resolverFactory.getServiceResourceResolver(map);

        // Watch for events on the root to register/deregister virtual catalogs data roots at runtime
        // For each observed path create an event listener object which redirects the event to the main class
        final Session session = resolver.adaptTo(Session.class);
        if (session != null) {
            this.observationEventListeners = new EventListener[this.observationPaths.length];
            for (int i = 0; i < this.observationPaths.length; i++) {
                this.observationEventListeners[i] = new EventListener() {
                    public void onEvent(EventIterator events) {
                        CatalogDataResourceProviderManagerImpl.this.onEvent(events);
                    }
                };
                session.getWorkspace()
                    .getObservationManager()
                    .addEventListener(this.observationEventListeners[i],
                        Event.NODE_ADDED | Event.NODE_REMOVED | Event.PROPERTY_ADDED | Event.PROPERTY_CHANGED | Event.PROPERTY_REMOVED,
                        this.observationPaths[i],
                        // absolute path
                        true,
                        // isDeep
                        null,
                        // uuids
                        null,
                        // node types
                        true); // noLocal
            }
        }

        // register all virtual catalog data definitions that already exist
        registerDataRoots();
    }
}
 
源代码2 项目: sling-samples   文件: ThumbnailGenerator.java
protected void activate(ComponentContext context)  throws Exception {
    supportedMimeTypes.put("image/jpeg", ".jpg");
       supportedMimeTypes.put("image/png", ".png");

       String contentPath = (String)context.getProperties().get(CONTENT_PATH_PROPERTY);

	session = repository.loginAdministrative(null);
	if (repository.getDescriptor(Repository.OPTION_OBSERVATION_SUPPORTED).equals("true")) {
		observationManager = session.getWorkspace().getObservationManager();
		String[] types = { "nt:file" };
		observationManager.addEventListener(this, Event.NODE_ADDED, contentPath, true, null, types, false);
	}
}
 
源代码3 项目: sling-samples   文件: ThumbnailGenerator.java
public void onEvent(EventIterator it) {
    while (it.hasNext()) {
        Event event = it.nextEvent();
        try {
            if (event.getType() == Event.NODE_ADDED && !(event.getPath().contains("thumbnails"))) {
                log.info("new upload: {}", event.getPath());
                Node addedNode = session.getRootNode().getNode(event.getPath().substring(1));
                processNewNode(addedNode);
                log.info("finished processing of {}", event.getPath());
            }
        } catch (Exception e) {
            log.error(e.getMessage(), e);
        }
    }
}
 
源代码4 项目: sling-samples   文件: ConfirmedOrdersObserver.java
protected void activate(ComponentContext context)  throws Exception {
    session = repository.loginAdministrative(null);
    
    // Listen for changes to our orders
    if (repository.getDescriptor(Repository.OPTION_OBSERVATION_SUPPORTED).equals("true")) {
        observationManager = session.getWorkspace().getObservationManager();
        final String[] types = { "nt:unstructured" };
        final boolean isDeep = true;
        final boolean noLocal = true;
        final String path = SlingbucksConstants.ORDERS_PATH;
        observationManager.addEventListener(this, Event.PROPERTY_CHANGED | Event.PROPERTY_ADDED, path, isDeep, null, types, noLocal);
        log.info("Observing property changes to {} nodes under {}", Arrays.asList(types), path);
    }
    
}
 
@Activate
protected void activate(Config config) throws RepositoryException {
    List<SyncHandler> newSyncSpecs = new LinkedList<SyncHandler>();
    for (String def : config.vault_sync_syncroots()) {
        SyncHandler spec = new SyncHandler(new File(def));
        newSyncSpecs.add(spec);
        log.info("Added sync specification: {}", spec);
    }
    syncHandlers = newSyncSpecs.toArray(new SyncHandler[newSyncSpecs.size()]);
    enabled = config.vault_sync_enabled();
    checkDelay = config.vault_sync_fscheckinterval() * 1000;

    log.info("Vault Sync service is {}", enabled ? "enabled" : "disabled");
    if (enabled) {
        // setup session
        session = repository.loginAdministrative(null);

        // set up observation listener
        session.getWorkspace().getObservationManager().addEventListener(
                this,
                Event.NODE_ADDED | Event.NODE_REMOVED | Event.PROPERTY_CHANGED | Event.PROPERTY_ADDED | Event.PROPERTY_REMOVED,
                "/",
                true /* isDeep */,
                null /* uuid */,
                null /* nodeTypeName */,
                true /* noLocal */
        );
        fsCheckThread = new Thread(this, "Vault Sync Thread");
        fsCheckThread.setDaemon(true);
        fsCheckThread.start();
    }

}
 
源代码6 项目: mycollab   文件: JcrNamespaceHandler.java
@Override
protected void postProcess(BeanDefinitionBuilder definitionBuilder, Element element) {
    List<Element> eventTypes = DomUtils.getChildElementsByTagName(element, EVENT_TYPE);
    if (eventTypes != null && eventTypes.size() > 0) {
        // compute event type
        int eventType = 0;
        Constants types = new Constants(Event.class);
        for (Iterator<Element> iter = eventTypes.iterator(); iter.hasNext();) {
            Element evenTypeElement = iter.next();
            eventType |= types.asNumber(DomUtils.getTextValue(evenTypeElement)).intValue();
        }
        definitionBuilder.addPropertyValue("eventTypes", Integer.valueOf(eventType));
    }

    List<Element> nodeTypeNames = DomUtils.getChildElementsByTagName(element, NODE_TYPE_NAME);
    String[] nodeTypeValues = new String[nodeTypeNames.size()];

    for (int i = 0; i < nodeTypeValues.length; i++) {
        nodeTypeValues[i] = DomUtils.getTextValue(nodeTypeNames.get(i));
    }
    definitionBuilder.addPropertyValue(NODE_TYPE_NAME, nodeTypeValues);
    List<Element> uuids = DomUtils.getChildElementsByTagName(element, UUID);

    String[] uuidsValues = new String[uuids.size()];

    for (int i = 0; i < uuidsValues.length; i++) {
        uuidsValues[i] = DomUtils.getTextValue(uuids.get(i));
    }

    definitionBuilder.addPropertyValue(UUID, uuidsValues);
    //TODO, reference a listenerBean, it is not a propertyReference
    Element eventListner = DomUtils.getChildElementByTagName(element, "listener");
    String listenerBeanRefName = DomUtils.getTextValue(eventListner);

    definitionBuilder.addPropertyReference("listener", listenerBeanRefName);
}
 
/**
 * Handle resource events to add or remove virtual catalog data registrations.
 */
public void onEvent(EventIterator events) {
    try {
        // collect all actions to be performed for this event

        final Map<String, Boolean> actions = new HashMap<>();
        boolean nodeAdded = false;
        boolean nodeRemoved = false;
        while (events.hasNext()) {
            final Event event = events.nextEvent();
            final String path = event.getPath();
            final int eventType = event.getType();
            if (eventType == Event.NODE_ADDED) {
                nodeAdded = true;
                Session session = resolver.adaptTo(Session.class);
                final Node node = session.getNode(path);
                if (node != null && node.isNodeType(JcrResourceConstants.NT_SLING_FOLDER) && node.hasProperty(
                    CatalogDataResourceProviderFactory.PROPERTY_FACTORY_ID) || node.hasProperty(CONF_ROOT)) {
                    actions.put(path, true);
                }
            } else if (eventType == Event.NODE_REMOVED && providers.containsKey(path)) {
                nodeRemoved = true;
                actions.put(path, false);
            } else if ((eventType == Event.PROPERTY_CHANGED || eventType == Event.PROPERTY_ADDED || eventType == Event.PROPERTY_REMOVED)
                && isRelevantPath(path)) {
                // narrow down the properties to be watched.
                // force re-registering
                nodeAdded = true;
                nodeRemoved = true;
            }
        }

        for (Map.Entry<String, Boolean> action : actions.entrySet()) {
            if (action.getValue()) {
                final Resource rootResource = resolver.getResource(action.getKey());
                if (rootResource != null) {
                    registerDataRoot(rootResource);
                }
            } else {
                final ResourceProvider provider = providers.remove(action.getKey());
                if (provider != null) {
                    unregisterService(provider);
                }
            }
        }

        if (nodeAdded && nodeRemoved) {
            // maybe a virtual catalog was moved, re-register all virtual catalogs
            // (existing ones will be skipped)
            registerDataRoots();
        }
    } catch (RepositoryException e) {
        log.error("Unexpected repository exception during event processing.", e);
    }
}