public void onEvent()

in src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceListener.java [97:160]


    public void onEvent(final EventIterator events) {
        final Map<String, ResourceChange> addedEvents = new HashMap<>();
        final Map<String, ResourceChange> changedEvents = new HashMap<>();
        final Map<String, ResourceChange> removedEvents = new HashMap<>();

        while (events.hasNext()) {
            final Event event = events.nextEvent();

            final String identifier;
            final String path;
            try {
                identifier = event.getIdentifier();
                path = event.getPath();
            } catch (final RepositoryException e) {
                // event.getPath or event.getIdentifier threw an exception
                // there is nothing we can do about it anyway
                continue;
            }

            final String eventPath = (identifier != null && identifier.startsWith("/") ? identifier : path);
            final int type = event.getType();

            if (type == PROPERTY_ADDED && path.endsWith("/jcr:primaryType")) {
                final int lastSlash = path.lastIndexOf('/');
                final String rsrcPath = path.substring(0, lastSlash);

                // add is stronger than update
                changedEvents.remove(rsrcPath);
                addedEvents.put(rsrcPath, createResourceChange(event, rsrcPath, ChangeType.ADDED));
            } else if (type == PROPERTY_ADDED
                    || type == PROPERTY_REMOVED
                    || type == PROPERTY_CHANGED) {
                final String rsrcPath;
                if (identifier == null || !identifier.startsWith("/")) {
                    final int lastSlash = eventPath.lastIndexOf('/');
                    rsrcPath = eventPath.substring(0, lastSlash);
                } else {
                    rsrcPath = eventPath;
                }
                if (!addedEvents.containsKey(rsrcPath)
                        && !removedEvents.containsKey(rsrcPath)
                        && !changedEvents.containsKey(rsrcPath)) {

                    changedEvents.put(rsrcPath, createResourceChange(event, rsrcPath, ChangeType.CHANGED));
                }
            } else if (type == NODE_ADDED) {
                // add is stronger than update
                changedEvents.remove(eventPath);
                addedEvents.put(eventPath, createResourceChange(event, eventPath, ChangeType.ADDED));
            } else if (type == NODE_REMOVED) {
                // remove is stronger than add and change
                addedEvents.remove(eventPath);
                changedEvents.remove(eventPath);
                removedEvents.put(eventPath, createResourceChange(event, eventPath, ChangeType.REMOVED));
            }
        }

        final List<ResourceChange> changes = new ArrayList<>();
        changes.addAll(addedEvents.values());
        changes.addAll(removedEvents.values());
        changes.addAll(changedEvents.values());
        this.baseConfig.getReporter().reportChanges(this.config, changes, false);

    }