Search in sources :

Example 1 with FileEvent

use of org.springframework.roo.file.monitor.event.FileEvent in project spring-roo by spring-projects.

the class PollingFileMonitorService method getFileCreationEvents.

private List<FileEvent> getFileCreationEvents(final MonitoringRequest request, final Map<File, Long> priorFiles) {
    final List<FileEvent> createEvents = new ArrayList<FileEvent>();
    for (final Iterator<String> iter = notifyCreated.iterator(); iter.hasNext(); ) {
        final String filePath = iter.next();
        if (isWithin(request, filePath)) {
            // We've processed it
            iter.remove();
            // Skip this file if it doesn't exist
            final File thisFile = new File(filePath);
            if (thisFile.exists()) {
                // Record the notification
                createEvents.add(new FileEvent(new FileDetails(thisFile, thisFile.lastModified()), FileOperation.CREATED, null));
                // Update the prior execution map so it isn't notified again
                // next round
                priorFiles.put(thisFile, thisFile.lastModified());
            }
        }
    }
    return createEvents;
}
Also used : FileEvent(org.springframework.roo.file.monitor.event.FileEvent) ArrayList(java.util.ArrayList) FileDetails(org.springframework.roo.file.monitor.event.FileDetails) JarFile(java.util.jar.JarFile) File(java.io.File)

Example 2 with FileEvent

use of org.springframework.roo.file.monitor.event.FileEvent in project spring-roo by spring-projects.

the class PollingFileMonitorService method getFileDeletionEvents.

private List<FileEvent> getFileDeletionEvents(final MonitoringRequest request, final Map<File, Long> priorFiles) {
    final List<FileEvent> deleteEvents = new ArrayList<FileEvent>();
    for (final Iterator<String> iter = notifyDeleted.iterator(); iter.hasNext(); ) {
        final String filePath = iter.next();
        if (isWithin(request, filePath)) {
            // We've processed it
            iter.remove();
            // Skip this file if it suddenly exists again (it shouldn't be
            // in the notify deleted in this case!)
            final File thisFile = new File(filePath);
            if (!thisFile.exists()) {
                // Record the notification
                deleteEvents.add(new FileEvent(new FileDetails(thisFile, null), FileOperation.DELETED, null));
                // Update the prior execution map so it isn't notified again
                // next round
                priorFiles.remove(thisFile);
            }
        }
    }
    return deleteEvents;
}
Also used : FileEvent(org.springframework.roo.file.monitor.event.FileEvent) ArrayList(java.util.ArrayList) FileDetails(org.springframework.roo.file.monitor.event.FileDetails) JarFile(java.util.jar.JarFile) File(java.io.File)

Example 3 with FileEvent

use of org.springframework.roo.file.monitor.event.FileEvent in project spring-roo by spring-projects.

the class PollingFileMonitorService method getFileUpdateEvents.

private List<FileEvent> getFileUpdateEvents(final MonitoringRequest request, final Map<File, Long> priorFiles) {
    final List<FileEvent> updateEvents = new ArrayList<FileEvent>();
    for (final Iterator<String> iter = notifyChanged.iterator(); iter.hasNext(); ) {
        final String filePath = iter.next();
        if (isWithin(request, filePath)) {
            // We've processed it
            iter.remove();
            // Skip this file if it doesn't exist
            final File thisFile = new File(filePath);
            if (thisFile.exists()) {
                // Record the notification
                updateEvents.add(new FileEvent(new FileDetails(thisFile, thisFile.lastModified()), FileOperation.UPDATED, null));
                // Update the prior execution map so it isn't notified again
                // next round
                priorFiles.put(thisFile, thisFile.lastModified());
                // Also remove it from the created list, if it's in there
                if (notifyCreated.contains(filePath)) {
                    notifyCreated.remove(filePath);
                }
            }
        }
    }
    return updateEvents;
}
Also used : FileEvent(org.springframework.roo.file.monitor.event.FileEvent) ArrayList(java.util.ArrayList) FileDetails(org.springframework.roo.file.monitor.event.FileDetails) JarFile(java.util.jar.JarFile) File(java.io.File)

Example 4 with FileEvent

use of org.springframework.roo.file.monitor.event.FileEvent in project spring-roo by spring-projects.

the class PollingFileMonitorService method remove.

public boolean remove(final MonitoringRequest request) {
    synchronized (lock) {
        Validate.notNull(request, "MonitoringRequest required");
        // Advise of the cessation to monitoring
        if (priorExecution.containsKey(request)) {
            final List<FileEvent> eventsToPublish = new ArrayList<FileEvent>();
            final Map<File, Long> priorFiles = priorExecution.get(request);
            for (final Entry<File, Long> entry : priorFiles.entrySet()) {
                final File thisFile = entry.getKey();
                final Long lastModified = entry.getValue();
                eventsToPublish.add(new FileEvent(new FileDetails(thisFile, lastModified), FileOperation.MONITORING_FINISH, null));
            }
            publish(eventsToPublish);
        }
        priorExecution.remove(request);
        return requests.remove(request);
    }
}
Also used : FileEvent(org.springframework.roo.file.monitor.event.FileEvent) ArrayList(java.util.ArrayList) FileDetails(org.springframework.roo.file.monitor.event.FileDetails) JarFile(java.util.jar.JarFile) File(java.io.File)

Example 5 with FileEvent

use of org.springframework.roo.file.monitor.event.FileEvent in project spring-roo by spring-projects.

the class PollingFileMonitorService method publishRequestedFileEvents.

private int publishRequestedFileEvents() {
    int eventsPublished = 0;
    for (final MonitoringRequest request : requests) {
        final List<FileEvent> eventsToPublish = new ArrayList<FileEvent>();
        // See when each file was last checked
        Map<File, Long> priorFiles = priorExecution.get(request);
        if (priorFiles == null) {
            priorFiles = new HashMap<File, Long>();
            priorExecution.put(request, priorFiles);
        }
        // Handle files apparently updated, created, or deleted since the
        // last execution
        eventsToPublish.addAll(getFileUpdateEvents(request, priorFiles));
        eventsToPublish.addAll(getFileCreationEvents(request, priorFiles));
        eventsToPublish.addAll(getFileDeletionEvents(request, priorFiles));
        publish(eventsToPublish);
        eventsPublished += eventsToPublish.size();
    }
    return eventsPublished;
}
Also used : FileEvent(org.springframework.roo.file.monitor.event.FileEvent) ArrayList(java.util.ArrayList) MonitoringRequest(org.springframework.roo.file.monitor.MonitoringRequest) DirectoryMonitoringRequest(org.springframework.roo.file.monitor.DirectoryMonitoringRequest) JarFile(java.util.jar.JarFile) File(java.io.File)

Aggregations

File (java.io.File)6 ArrayList (java.util.ArrayList)6 JarFile (java.util.jar.JarFile)6 FileEvent (org.springframework.roo.file.monitor.event.FileEvent)6 FileDetails (org.springframework.roo.file.monitor.event.FileDetails)5 DirectoryMonitoringRequest (org.springframework.roo.file.monitor.DirectoryMonitoringRequest)2 MonitoringRequest (org.springframework.roo.file.monitor.MonitoringRequest)2 IOException (java.io.IOException)1 HashMap (java.util.HashMap)1 WeakHashMap (java.util.WeakHashMap)1