initial checkin
authorClaus Gittinger <cg@exept.de>
Thu, 12 Jan 2012 02:53:26 +0100
changeset 11105 7983da617733
parent 11104 6f9259e46cb0
child 11106 86ac37a9a382
initial checkin
DirectoryDifferenceViewApplication.st
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectoryDifferenceViewApplication.st	Thu Jan 12 02:53:26 2012 +0100
@@ -0,0 +1,362 @@
+"{ Package: 'stx:libtool' }"
+
+AbstractFileFinderApplicationComponent subclass:#DirectoryDifferenceViewApplication
+	instanceVariableNames:'directory1Holder directory2Holder directory1 directory2
+		filesOnlyInDirectory1 filesOnlyInDirectory2
+		filesWhichAreDifferent directoriesOnlyInDirectory1
+		directoriesOnlyInDirectory2'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Interface-Tools-File'
+!
+
+
+!DirectoryDifferenceViewApplication class methodsFor:'interface specs'!
+
+windowSpec
+    "This resource specification was automatically generated
+     by the UIPainter of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the UIPainter may not be able to read the specification."
+
+    "
+     UIPainter new openOnClass:DirectoryDifferenceViewApplication andSelector:#windowSpec
+     DirectoryDifferenceViewApplication new openInterface:#windowSpec
+     DirectoryDifferenceViewApplication open
+    "
+
+    <resource: #canvas>
+
+    ^ 
+     #(FullSpec
+        name: windowSpec
+        window: 
+       (WindowSpec
+          label: 'Directory Diff'
+          name: 'Directory Diff'
+          min: (Point 377 131)
+          bounds: (Rectangle 0 0 758 512)
+        )
+        component: 
+       (SpecCollection
+          collection: (
+           (MenuPanelSpec
+              name: 'ToolBar1'
+              layout: (LayoutFrame 0 0.0 0 0 0 1.0 32 0)
+              level: 0
+              menu: searchMenu
+              textDefault: true
+            )
+           (ProgressIndicatorSpec
+              name: 'ProgressIndicator1'
+              layout: (LayoutFrame 125 0 11 0 231 0 21 0)
+              visibilityChannel: enableStop
+              backgroundColor: (Color 0.0 66.9993133440146 66.9993133440146)
+              showPercentage: false
+              isActivityIndicator: true
+            )
+           (ViewSpec
+              name: 'Box1'
+              layout: (LayoutFrame 0 0.0 32 0 0 1.0 130 0)
+              component: 
+             (SpecCollection
+                collection: (
+                 (LabelSpec
+                    label: 'Directory1:'
+                    name: 'DirectoryLabel'
+                    layout: (LayoutFrame 2 0 7 0 154 0 24 0)
+                    activeHelpKey: searchDirectory
+                    translateLabel: true
+                    adjust: right
+                  )
+                 (FilenameInputFieldSpec
+                    name: 'DirectoryEntryField'
+                    layout: (LayoutFrame 156 0 4 0 0 1 24 0)
+                    activeHelpKey: searchDirectory
+                    model: directory1Holder
+                    immediateAccept: true
+                    acceptOnPointerLeave: false
+                  )
+                 (LabelSpec
+                    label: 'Directory2:'
+                    name: 'Label2'
+                    layout: (LayoutFrame 2 0 31 0 154 0 48 0)
+                    activeHelpKey: searchDirectory
+                    translateLabel: true
+                    adjust: right
+                  )
+                 (FilenameInputFieldSpec
+                    name: 'FilenameEntryField1'
+                    layout: (LayoutFrame 156 0 28 0 0 1 48 0)
+                    activeHelpKey: searchDirectory
+                    model: directory2Holder
+                    immediateAccept: true
+                    acceptOnPointerLeave: false
+                  )
+                 (LabelSpec
+                    label: 'Compare Files Named:'
+                    name: 'FileNameLabel'
+                    layout: (LayoutFrame 2 0 55 0 154 0 72 0)
+                    activeHelpKey: namePattern
+                    translateLabel: true
+                    adjust: right
+                  )
+                 (InputFieldSpec
+                    name: 'FileNameEntryField'
+                    layout: (LayoutFrame 156 0 52 0 -315 1 72 0)
+                    activeHelpKey: namePattern
+                    tabable: true
+                    model: namePatternHolder
+                    immediateAccept: true
+                    acceptOnLeave: false
+                    acceptOnPointerLeave: false
+                  )
+                 (CheckBoxSpec
+                    label: 'Ignore Case'
+                    name: 'IgnoreCaseInNameCheckBox'
+                    layout: (LayoutFrame -169 1 53 0 -4 1 76 0)
+                    activeHelpKey: ignoreCase
+                    tabable: true
+                    model: ignoreCaseInName
+                    translateLabel: true
+                  )
+                 (LabelSpec
+                    label: 'But Not Named:'
+                    name: 'Label1'
+                    layout: (LayoutFrame 2 0 79 0 154 0 96 0)
+                    activeHelpKey: namePattern
+                    translateLabel: true
+                    adjust: right
+                  )
+                 (InputFieldSpec
+                    name: 'EntryField1'
+                    layout: (LayoutFrame 156 0 76 0 -315 1 96 0)
+                    activeHelpKey: namePattern
+                    tabable: true
+                    model: excludedNamePatternHolder
+                    immediateAccept: true
+                    acceptOnLeave: false
+                    acceptOnPointerLeave: false
+                  )
+                 (CheckBoxSpec
+                    label: 'Ignore Case'
+                    name: 'CheckBox1'
+                    layout: (LayoutFrame -169 1 77 0 -4 1 100 0)
+                    activeHelpKey: ignoreCase
+                    tabable: true
+                    model: ignoreCaseInExcludedName
+                    translateLabel: true
+                  )
+                 )
+               
+              )
+            )
+           (VariableVerticalPanelSpec
+              name: 'VariableVerticalPanel1'
+              layout: (LayoutFrame 0 0.0 140 0 0 1.0 0 1)
+              component: 
+             (SpecCollection
+                collection: (
+                 (DataSetSpec
+                    name: 'Table1'
+                    model: selectionHolder
+                    hasHorizontalScrollBar: true
+                    hasVerticalScrollBar: true
+                    dataList: matchedFilesList
+                    doubleClickSelector: fileDoubleClick:
+                    columnHolder: searchResultTable
+                    valueChangeSelector: fileSelected:
+                    multipleSelectOk: true
+                  )
+                 (NonScrollableArbitraryComponentSpec
+                    name: 'NonScrollableArbitraryComponent1'
+                    component: DiffTextView
+                  )
+                 )
+               
+              )
+              handles: (Any 0.5 1.0)
+            )
+           )
+         
+        )
+      )
+! !
+
+!DirectoryDifferenceViewApplication class methodsFor:'tableColumns specs'!
+
+searchResultTable
+    "This resource specification was automatically generated
+     by the DataSetBuilder of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the DataSetBuilder may not be able to read the specification."
+
+    "
+     DataSetBuilder new openOnClass:DirectoryDifferenceViewApplication andSelector:#searchResultTable
+    "
+
+    <resource: #tableColumns>
+
+    ^#(
+      (DataSetColumnSpec
+         label: 'Filename'
+         id: 'FileName'
+         labelButtonType: Button
+         model: at:
+         menuFromApplication: false
+         writeSelector: at:put:
+         showRowSeparator: false
+         showColSeparator: false
+       )
+      (DataSetColumnSpec
+         label: 'Diff'
+         id: 'Diff'
+         labelButtonType: Button
+         model: at:
+         menuFromApplication: false
+         writeSelector: at:put:
+         showRowSeparator: false
+         showColSeparator: false
+       )
+      )
+    
+! !
+
+!DirectoryDifferenceViewApplication methodsFor:'accessing'!
+
+directory1:directory1Arg directory2:directory2Arg 
+    self directory1Holder value:directory1Arg.
+    self directory2Holder value:directory2Arg.
+
+"/    self namePatternHolder value:newPattern.
+    self enableStop value:false.
+    self enableSearch value:true.
+    ^ true.
+
+    "Modified: / 12-01-2012 / 01:36:54 / cg"
+!
+
+directory1Holder
+    directory1Holder isNil ifTrue:[
+        directory1Holder := nil asValue
+    ].
+    ^ directory1Holder
+
+    "Created: / 12-01-2012 / 01:37:31 / cg"
+!
+
+directory2Holder
+    directory2Holder isNil ifTrue:[
+        directory2Holder := nil asValue
+    ].
+    ^ directory2Holder
+
+    "Created: / 12-01-2012 / 01:37:41 / cg"
+! !
+
+!DirectoryDifferenceViewApplication methodsFor:'comparing'!
+
+doSearch
+    |dir1 dir2|
+
+    filesOnlyInDirectory1 := OrderedCollection new.
+    filesOnlyInDirectory2 := OrderedCollection new.
+    directoriesOnlyInDirectory1 := OrderedCollection new.
+    directoriesOnlyInDirectory2 := OrderedCollection new.
+    filesWhichAreDifferent := OrderedCollection new.
+
+    dir1 := self directory1Holder value.
+    dir1 isNil ifTrue:[^ self].
+
+    dir2 := self directory2Holder value.
+    dir2 isNil ifTrue:[^ self].
+
+    dir1 := dir1 asFilename.
+    dir2 := dir2 asFilename.
+
+    self 
+        startSearchTask:[
+            self changeInformationTo:'Directory Diff - searching ' toTab:true.
+
+            self shownListHolder valueHolder:(self matchedFilesList).
+
+            dir1 recursiveDirectoryContentsDo:[:relFn1 |
+                |fn1 fn2|
+
+                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' }.
+                        ].
+                    ] 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' }.
+                    ]
+                ].
+            ].
+            filesOnlyInDirectory1 notEmpty ifTrue:[
+                Transcript showCR:('%1 files only in directory1' bindWith:filesOnlyInDirectory1 size).
+            ].
+            filesOnlyInDirectory2 notEmpty ifTrue:[
+                Transcript showCR:('%1 files only in directory2' bindWith:filesOnlyInDirectory2 size).
+            ].
+            directoriesOnlyInDirectory1 notEmpty ifTrue:[
+                Transcript showCR:('%1 directories only in directory1' bindWith:directoriesOnlyInDirectory1 size).
+            ].
+            directoriesOnlyInDirectory2 notEmpty ifTrue:[
+                Transcript showCR:('%1 directories only in directory2' bindWith:directoriesOnlyInDirectory2 size).
+            ].
+            filesWhichAreDifferent notEmpty ifTrue:[
+                Transcript showCR:('%1 files are different' bindWith:filesWhichAreDifferent size).
+            ]
+        ]
+        name:'Directory Diff'.
+
+    "Created: / 12-01-2012 / 01:07:20 / cg"
+! !
+
+!DirectoryDifferenceViewApplication methodsFor:'startup & release'!
+
+postOpenWith:aBuilder
+    super postOpenWith:aBuilder.
+    self doSearch
+
+    "Created: / 12-01-2012 / 01:41:18 / cg"
+! !
+
+!DirectoryDifferenceViewApplication class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libtool/DirectoryDifferenceViewApplication.st,v 1.1 2012-01-12 01:53:26 cg Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libtool/DirectoryDifferenceViewApplication.st,v 1.1 2012-01-12 01:53:26 cg Exp $'
+! !