package org.springframework.roo.file.monitor; import java.io.File; import java.util.Collection; import java.util.Collections; import java.util.HashSet; import org.apache.commons.lang3.Validate; import org.springframework.roo.file.monitor.event.FileOperation; /** * Represents a request to monitor a particular file system location. * * @author Ben Alex * @since 1.0 */ public abstract class MonitoringRequest { /** * Factory method for monitoring the following operations upon the given * file or directory: * <ul> * <li>{@link FileOperation#CREATED}</li> * <li>{@link FileOperation#RENAMED}</li> * <li>{@link FileOperation#UPDATED}</li> * <li>{@link FileOperation#DELETED}</li> * </ul> * * @param resource the resource to monitor; <code>null</code> means the * current directory * @return a non-<code>null</code> monitoring request */ public static MonitoringRequest getInitialMonitoringRequest(String resource) { if (resource == null) { resource = "."; } final MonitoringRequestEditor mre = new MonitoringRequestEditor(); mre.setAsText(resource + ",CRUD"); return mre.getValue(); } /** * Factory method for monitoring the following operations upon the given * directory and its sub-tree: * <ul> * <li>{@link FileOperation#CREATED}</li> * <li>{@link FileOperation#RENAMED}</li> * <li>{@link FileOperation#UPDATED}</li> * <li>{@link FileOperation#DELETED}</li> * </ul> * * @param directory the directory to monitor; <code>null</code> means the * current directory * @return a non-<code>null</code> monitoring request */ public static MonitoringRequest getInitialSubTreeMonitoringRequest(String directory) { if (directory == null) { directory = "."; } final MonitoringRequestEditor mre = new MonitoringRequestEditor(); mre.setAsText(directory + ",CRUD,**"); return mre.getValue(); } private final Collection<FileOperation> notifyOn; private final File resource; /** * Constructor * * @param resource the file to monitor (required) * @param notifyOn the file operations to notify upon (can't be empty) */ protected MonitoringRequest(final File resource, final Collection<FileOperation> notifyOn) { Validate.notNull(resource, "Resource to monitor is required"); Validate.notEmpty(notifyOn, "At least one FileOperation to monitor must be specified"); this.notifyOn = new HashSet<FileOperation>(notifyOn); this.resource = resource; } /** * @return the file to be monitored (never null) */ public File getFile() { return resource; } /** * Returns the operations to be monitored * * @return an unmodifiable collection containing one or more elements */ public Collection<FileOperation> getNotifyOn() { return Collections.unmodifiableCollection(notifyOn); } }