public static WatchServiceStage newInstance(GraphManager graphManager, String pathText, String[] filePatterns, Pipe<FolderWatchSchema>[] output, int kindFlags ) { return new WatchServiceStage(graphManager, pathText, filePatterns, output, kindFlags); }
protected WatchServiceStage(GraphManager graphManager, String pathText, String[] filePatterns, Pipe<FolderWatchSchema>[] output, Pipe<FolderWatchSchema> defaultOutput, int kindFlags) { super(graphManager, NONE, null==defaultOutput? output : join(output,defaultOutput)); this.pathText = pathText; this.output = output; this.defaultOutput = defaultOutput; this.filePatterns = filePatterns; this.kindFlags = 0!=kindFlags? kindFlags : 7; }
Path fileName = path.getFileName(); String fileNameText = fileName.toString(); Pipe<FolderWatchSchema> target = lookupTargetPipe(fileNameText); if (null != target) { if (Pipe.hasRoomForWrite(target)) { publish(pendingKind.get(0), parent, fileNameText, target); pendingContext.remove(0); pendingKind.remove(0); Path fileName = path.getFileName(); String fileNameText = fileName.toString(); Pipe<FolderWatchSchema> target = lookupTargetPipe(fileNameText); if (null != target) { if (!Pipe.hasRoomForWrite(target) || !pendingContext.isEmpty()) { pendingContext.add(path); } else { publish(kind, parent, fileNameText, target);
private void publish(final Kind<?> kind, Path parent, String fileNameText, Pipe<FolderWatchSchema> target) { if (StandardWatchEventKinds.ENTRY_CREATE == kind) { publish(parent, fileNameText, target, Pipe.addMsgIdx(target, FolderWatchSchema.MSG_NEWFILE_1)); } else if (StandardWatchEventKinds.ENTRY_MODIFY == kind) { publish(parent, fileNameText, target, Pipe.addMsgIdx(target, FolderWatchSchema.MSG_UPDATEDFILE_2)); } else if (StandardWatchEventKinds.ENTRY_DELETE == kind) { publish(parent, fileNameText, target, Pipe.addMsgIdx(target, FolderWatchSchema.MSG_DELETEDFILE_3)); } else if (StandardWatchEventKinds.OVERFLOW == kind) { //NOTE: some events are lost.... changes happen too quickly logger.warn("Some file changes may not have been recognized by this stage, increase RATE or make slower changes to file system."); } else { throw new UnsupportedOperationException("unknown kind: "+String.valueOf(kind)); } }
Pipe<FolderWatchSchema>[] output = Pipe.buildPipes(filePatterns.length, FolderWatchSchema.instance.newPipeConfig(10,64)); Pipe<FolderWatchSchema> defaultOutput = FolderWatchSchema.instance.newPipe(4, 64); WatchServiceStage.newInstance(gm, pathText, filePatterns, output, defaultOutput, WatchServiceStage.EVENT_CREATE|WatchServiceStage.EVENT_DELETE);