DirectoryDifferenceViewApplication.st
changeset 11121 a94aeaabbfdf
parent 11116 86de3247a42f
child 11123 6cbaa2e319a3
--- a/DirectoryDifferenceViewApplication.st	Thu Jan 12 14:03:28 2012 +0100
+++ b/DirectoryDifferenceViewApplication.st	Fri Jan 13 14:44:15 2012 +0100
@@ -4,13 +4,48 @@
 	instanceVariableNames:'directory1Holder directory2Holder directory1 directory2
 		filesOnlyInDirectory1 filesOnlyInDirectory2
 		filesWhichAreDifferent directoriesOnlyInDirectory1
-		directoriesOnlyInDirectory2'
+		directoriesOnlyInDirectory2 namePatternHolder
+		excludedNamePatternHolder'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'Interface-Tools-File'
 !
 
 
+!DirectoryDifferenceViewApplication class methodsFor:'help specs'!
+
+flyByHelpSpec
+    "This resource specification was automatically generated
+     by the UIHelpTool of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the UIHelpTool may not be able to read the specification."
+
+    "
+     UIHelpTool openOnClass:FindFileApplication    
+    "
+
+    <resource: #help>
+
+    ^ super flyByHelpSpec addPairsFrom:#(
+
+#namePattern
+'Filename(s) to search for. Can be matchPatterns, separated by ";"'
+
+#excludedNamePattern
+'Filename(s) to skip. Can be matchPatterns, separated by ";"'
+
+#searchDirectory1
+'The first folder, to be compared against folder2'
+
+#searchDirectory2
+'The second folder, to be compared against folder1'
+
+)
+
+    "Modified: / 13-01-2012 / 14:41:36 / cg"
+! !
+
 !DirectoryDifferenceViewApplication class methodsFor:'interface specs'!
 
 windowSpec
@@ -66,14 +101,14 @@
                     label: 'Directory1:'
                     name: 'DirectoryLabel'
                     layout: (LayoutFrame 2 0 7 0 154 0 24 0)
-                    activeHelpKey: searchDirectory
+                    activeHelpKey: searchDirectory1
                     translateLabel: true
                     adjust: right
                   )
                  (FilenameInputFieldSpec
                     name: 'DirectoryEntryField'
                     layout: (LayoutFrame 156 0 4 0 0 1 24 0)
-                    activeHelpKey: searchDirectory
+                    activeHelpKey: searchDirectory1
                     model: directory1Holder
                     immediateAccept: true
                     acceptOnPointerLeave: false
@@ -82,14 +117,14 @@
                     label: 'Directory2:'
                     name: 'Label2'
                     layout: (LayoutFrame 2 0 31 0 154 0 48 0)
-                    activeHelpKey: searchDirectory
+                    activeHelpKey: searchDirectory2
                     translateLabel: true
                     adjust: right
                   )
                  (FilenameInputFieldSpec
                     name: 'FilenameEntryField1'
                     layout: (LayoutFrame 156 0 28 0 0 1 48 0)
-                    activeHelpKey: searchDirectory
+                    activeHelpKey: searchDirectory2
                     model: directory2Holder
                     immediateAccept: true
                     acceptOnPointerLeave: false
@@ -125,14 +160,14 @@
                     label: 'But Not Named:'
                     name: 'Label1'
                     layout: (LayoutFrame 2 0 79 0 154 0 96 0)
-                    activeHelpKey: namePattern
+                    activeHelpKey: excludedNamePattern
                     translateLabel: true
                     adjust: right
                   )
                  (InputFieldSpec
                     name: 'EntryField1'
                     layout: (LayoutFrame 156 0 76 0 -315 1 96 0)
-                    activeHelpKey: namePattern
+                    activeHelpKey: excludedNamePattern
                     tabable: true
                     model: excludedNamePatternHolder
                     immediateAccept: true
@@ -184,6 +219,8 @@
          
         )
       )
+
+    "Modified: / 13-01-2012 / 14:41:56 / cg"
 ! !
 
 !DirectoryDifferenceViewApplication class methodsFor:'tableColumns specs'!
@@ -282,10 +319,31 @@
     "Created: / 12-01-2012 / 03:21:52 / cg"
 ! !
 
+!DirectoryDifferenceViewApplication methodsFor:'aspects'!
+
+excludedNamePatternHolder
+    excludedNamePatternHolder isNil ifTrue:[
+        excludedNamePatternHolder := '' asValue.
+    ].
+    ^ excludedNamePatternHolder.
+
+    "Created: / 13-01-2012 / 14:42:47 / cg"
+!
+
+namePatternHolder
+
+    namePatternHolder isNil ifTrue:[
+        namePatternHolder := '*' asValue.
+    ].
+    ^ namePatternHolder.
+
+    "Created: / 13-01-2012 / 14:37:28 / cg"
+! !
+
 !DirectoryDifferenceViewApplication methodsFor:'comparing'!
 
 doSearch
-    |dir1 dir2|
+    |dir1 dir2 namePattern excludedNamePattern|
 
     filesOnlyInDirectory1 := OrderedCollection new.
     filesOnlyInDirectory2 := OrderedCollection new.
@@ -302,6 +360,9 @@
     dir1 := dir1 asFilename.
     dir2 := dir2 asFilename.
 
+    namePattern := self namePatternHolder value.
+    excludedNamePattern := self excludedNamePatternHolder value.
+
     self 
         startSearchTask:[
             self changeInformationTo:'Directory Diff - searching ' toTab:true.
@@ -311,41 +372,49 @@
             dir1 recursiveDirectoryContentsDo:[:relFn1 |
                 |fn1 fn2|
 
-                fn1 := dir1 construct:relFn1.
-                fn2 := dir2 construct:relFn1.
+                (namePattern isNil or:[namePattern match:relFn1]) ifTrue:[
+                    (excludedNamePattern isNil or:[(excludedNamePattern match:relFn1) not]) ifTrue:[
+                        fn1 := dir1 construct:relFn1.
+                        fn2 := dir2 construct:relFn1.
 
-                fn1 isDirectory ifTrue:[
-                    self notify:('Comparing %1...' bindWith:relFn1 asString allBold).
-                    fn2 exists ifFalse:[
-                        directoriesOnlyInDirectory1 add:fn1.
-                        self matchedFilesList add:{ relFn1 . 'Directory only in directory1' }.
-                    ].
-                ] ifFalse:[
-                    fn2 exists ifTrue:[
-                        (fn1 sameContentsAs:fn2) ifFalse:[
-                            filesWhichAreDifferent add:fn1.
-                            self matchedFilesList add:{ relFn1 . 'Different' }.
+                        fn1 isDirectory ifTrue:[
+                            self notify:('Comparing %1...' bindWith:relFn1 asString allBold).
+                            fn2 exists ifFalse:[
+                                directoriesOnlyInDirectory1 add:fn1.
+                                self matchedFilesList add:{ relFn1 . 'Directory only in directory1' }.
+                            ].
+                        ] ifFalse:[
+                            fn2 exists ifTrue:[
+                                (fn1 sameContentsAs:fn2) ifFalse:[
+                                    filesWhichAreDifferent add:fn1.
+                                    self matchedFilesList add:{ relFn1 . 'Different' }.
+                                ].
+                            ] ifFalse:[
+                                filesOnlyInDirectory1 add:fn1.
+                                self matchedFilesList add:{ relFn1 . 'File only in directory1' }.
+                            ].
                         ].
-                    ] ifFalse:[
-                        filesOnlyInDirectory1 add:fn1.
-                        self matchedFilesList add:{ relFn1 . 'File only in directory1' }.
-                    ].
-                ].
+                    ]
+                ]
             ].
             dir2 recursiveDirectoryContentsDo:[:relFn2 |
                 |fn1 fn2|
 
-                fn2 := dir2 construct:relFn2.
-                fn1 := dir1 construct:relFn2.
-                fn1 exists ifFalse:[
-                    fn1 isDirectory ifTrue:[
-                        directoriesOnlyInDirectory1 add:fn1.
-                        self matchedFilesList add:{ relFn2 . 'Directory only in directory2' }.
-                    ] ifFalse:[
-                        filesOnlyInDirectory2 add:fn2.
-                        self matchedFilesList add:{ relFn2 . 'File only in directory2' }.
-                    ]
-                ].
+                (namePattern isNil or:[namePattern match:relFn2]) ifTrue:[
+                    (excludedNamePattern isNil or:[(excludedNamePattern match:relFn2) not]) ifTrue:[
+                        fn2 := dir2 construct:relFn2.
+                        fn1 := dir1 construct:relFn2.
+                        fn1 exists ifFalse:[
+                            fn1 isDirectory ifTrue:[
+                                directoriesOnlyInDirectory1 add:fn1.
+                                self matchedFilesList add:{ relFn2 . 'Directory only in directory2' }.
+                            ] ifFalse:[
+                                filesOnlyInDirectory2 add:fn2.
+                                self matchedFilesList add:{ relFn2 . 'File only in directory2' }.
+                            ]
+                        ].
+                    ].
+                ]
             ].
             filesOnlyInDirectory1 notEmpty ifTrue:[
                 Transcript showCR:('%1 files only in directory1' bindWith:filesOnlyInDirectory1 size).
@@ -380,9 +449,9 @@
 !DirectoryDifferenceViewApplication class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/DirectoryDifferenceViewApplication.st,v 1.2 2012-01-12 02:32:18 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/DirectoryDifferenceViewApplication.st,v 1.3 2012-01-13 13:44:15 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libtool/DirectoryDifferenceViewApplication.st,v 1.2 2012-01-12 02:32:18 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/DirectoryDifferenceViewApplication.st,v 1.3 2012-01-13 13:44:15 cg Exp $'
 ! !