Changeset 5311
- Timestamp:
- 05/30/14 11:39:18 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
CMDIValidator/trunk/src/main/java/eu/clarin/cmdi/validator/CMDIValidatorJob.java
r5052 r5311 1 1 package eu.clarin.cmdi.validator; 2 2 3 import java.io.FileFilter; 3 4 import java.util.LinkedList; 4 5 import java.util.List; … … 14 15 15 16 16 public CMDIValidatorJob(TFile root, CMDIValidatorJobHandler handler) { 17 public CMDIValidatorJob(TFile root, FileFilter filter, 18 CMDIValidatorJobHandler handler) { 17 19 if (root == null) { 18 20 throw new NullPointerException("root = null"); … … 26 28 } 27 29 this.handler = handler; 28 this.fileEnumerator = new FileEnumerator(root );30 this.fileEnumerator = new FileEnumerator(root, filter); 29 31 this.handler.onJobStarted(); 32 } 33 34 35 public CMDIValidatorJob(TFile root, CMDIValidatorJobHandler handler) { 36 this(root, null, handler); 30 37 } 31 38 … … 64 71 if (fileEnumerator.isEmpty() || (file == null)) { 65 72 jobList.remove(this); 73 if (filesInProcessing == 0) { 74 signalDone(); 75 } 66 76 } 67 77 return file; … … 77 87 } 78 88 if (fileEnumerator.isEmpty() && (filesInProcessing == 0)) { 79 handler.onJobFinished(canceled); 80 if (canceled) { 81 this.notifyAll(); 82 return true; 83 } 89 signalDone(); 90 return true; 84 91 } 85 92 } // synchronized (this) … … 88 95 89 96 97 private void signalDone() { 98 handler.onJobFinished(canceled); 99 if (canceled) { 100 this.notifyAll(); 101 } 102 } 103 104 90 105 private final static class FileEnumerator { 91 private staticfinal class FileList {106 private final class FileList { 92 107 private final TFile[] fileList; 93 108 private int idx = 0; … … 100 115 101 116 private TFile nextFile() { 102 if (idx < fileList.length) { 103 return fileList[idx++]; 104 } else { 105 return null; 106 } 117 while (idx < fileList.length) { 118 final TFile file = fileList[idx++]; 119 if (file.isDirectory()) { 120 return file; 121 } 122 if ((filter != null) && !filter.accept(file)) { 123 continue; 124 } 125 return file; 126 } // while 127 return null; 107 128 } 108 129 … … 111 132 } 112 133 } 134 private final FileFilter filter; 113 135 private final LinkedList<FileList> stack = 114 136 new LinkedList<FileList>(); 115 137 116 138 117 private FileEnumerator(TFile root ) {139 private FileEnumerator(TFile root, FileFilter filter) { 118 140 if (root == null) { 119 141 throw new NullPointerException("root == null"); … … 122 144 throw new IllegalArgumentException("root is not a directory"); 123 145 } 146 this.filter = filter; 124 147 pushDirectory(root); 125 148 }
Note: See TracChangeset
for help on using the changeset viewer.