1: ================================================================================
  2: 
  3: Smalltalk.KSU defineClass: #ProgramManager
  4:     superclass: #{Core.Object}
  5:     indexedType: #none
  6:     private: false
  7:     instanceVariableNames: ''
  8:     classInstanceVariableNames: ''
  9:     imports: ''
 10:     category: 'KSU-System'
 11: 
 12: ================================================================================
 13: 
 14: KSU.ProgramManager class
 15:     instanceVariableNames: ''
 16: 
 17: ================================================================================
 18: 
 19: KSU.ProgramManager class method for 'accessing'
 20: 
 21: bundle
 22:     "KSU.ProgramManager bundle."
 23: 
 24:     ^Store.Registry bundleNamed: #KSU
 25: 
 26: ------------------------------------------------------------
 27: 
 28: KSU.ProgramManager class method for 'accessing'
 29: 
 30: bundles
 31:     "KSU.ProgramManager bundles."
 32: 
 33:     ^self bundle allItems select: [:each | each isBundle]
 34: 
 35: ------------------------------------------------------------
 36: 
 37: KSU.ProgramManager class method for 'accessing'
 38: 
 39: classes
 40:     "KSU.ProgramManager classes."
 41: 
 42:     | aBundle |
 43:     aBundle := self bundle.
 44:     ^aBundle allClasses collect: [:each | each actual]
 45: 
 46: ------------------------------------------------------------
 47: 
 48: KSU.ProgramManager class method for 'comments'
 49: 
 50: commentString
 51:     "KSU.ProgramManager commentString."
 52: 
 53:     ^'Copyright 2008-2012 AOKI Atsushi in KSU (Kyoto Sangyo University). All Rights Reserved.'
 54: 
 55: ------------------------------------------------------------
 56: 
 57: KSU.ProgramManager class method for 'documents'
 58: 
 59: doclet
 60:     "KSU.ProgramManager doclet."
 61: 
 62:     | classCollection aDoclet toDirectory fromDirectory |
 63:     classCollection := self classes.
 64:     aDoclet := KSU.TextDoclet codePrint: classCollection.
 65:     fromDirectory := aDoclet instVarAt: (aDoclet class allInstVarNames indexOf: 'toDirectory').
 66:     toDirectory := fromDirectory directory construct: 'doclet'.
 67:     toDirectory exists
 68:         ifTrue: 
 69:             [toDirectory directoryContents do: [:each | (toDirectory construct: each) delete].
 70:             toDirectory delete].
 71:     fromDirectory renameTo: toDirectory.
 72:     JunURL browse: (toDirectory construct: 'index.html') asURI asString.
 73:     ^aDoclet
 74: 
 75: ------------------------------------------------------------
 76: 
 77: KSU.ProgramManager class method for 'accessing'
 78: 
 79: implementedMethods
 80:     "KSU.ProgramManager implementedMethods."
 81: 
 82:     | aCollection |
 83:     aCollection := OrderedCollection new.
 84:     self classes do: 
 85:             [:aClass |
 86:             aClass selectors do: [:aSymbol | aCollection add: aClass -> aSymbol].
 87:             aClass class selectors do: [:aSymbol | aCollection add: aClass class -> aSymbol]].
 88:     ^aCollection
 89: 
 90: ------------------------------------------------------------
 91: 
 92: KSU.ProgramManager class method for 'metrics'
 93: 
 94: linesOfCode
 95:     "KSU.ProgramManager linesOfCode inspect."
 96: 
 97:     | linesOfCode aString |
 98:     linesOfCode := 0.
 99:     self classes do: 
100:             [:aClass |
101:             aString := KSU.TextDoclet codePrintStringOf: aClass.
102:             linesOfCode := linesOfCode + (aString select: [:each | each = Character cr]) size].
103:     ^linesOfCode
104: 
105: ------------------------------------------------------------
106: 
107: KSU.ProgramManager class method for 'private'
108: 
109: makeBackups: howMany forFilename: aFilename
110: 
111:     (howMany to: 1 by: -1) do: 
112:             [:n |
113:             | anArray bakFilename |
114:             anArray := Filename splitExtension: aFilename asString.
115:             n <= 1
116:                 ifTrue: [bakFilename := aFilename]
117:                 ifFalse: 
118:                     [bakFilename := (anArray first , (n - 1) printString , aFilename extension)
119:                                 asFilename].
120:             bakFilename exists
121:                 ifTrue: 
122:                     [| oldFilename |
123:                     oldFilename := (anArray first , n printString , aFilename extension)
124:                                 asFilename.
125:                     bakFilename copyTo: oldFilename]]
126: 
127: ------------------------------------------------------------
128: 
129: KSU.ProgramManager class method for 'accessing'
130: 
131: namespace
132:     "KSU.ProgramManager namespace."
133: 
134:     | aNameSpace |
135:     aNameSpace := Smalltalk at: #KSU.
136:     (aNameSpace isKindOf: NameSpace) ifFalse: [^nil].
137:     ^aNameSpace
138: 
139: ------------------------------------------------------------
140: 
141: KSU.ProgramManager class method for 'accessing'
142: 
143: packages
144:     "KSU.ProgramManager packages."
145: 
146:     ^self bundle allItems select: [:each | each isPackage]
147: 
148: ------------------------------------------------------------
149: 
150: KSU.ProgramManager class method for 'comments'
151: 
152: propagateComment
153:     "KSU.ProgramManager propagateComment."
154: 
155:     | aString |
156:     aString := self commentString.
157:     self classes do: [:aClass | aClass comment: aString].
158:     self bundle allItems do: [:each | each comment: aString].
159:     self namespace comment: aString
160: 
161: ------------------------------------------------------------
162: 
163: KSU.ProgramManager class method for 'saving'
164: 
165: save
166:     "KSU.ProgramManager save."
167: 
168:     | aBundle dateString timeString aDirectory aFilename aFileManager |
169:     aBundle := self bundle.
170:     dateString := JunCalendarModel stringFromDate select: [:each | each isDigit].
171:     timeString := JunCalendarModel stringFromTime select: [:each | each isDigit].
172:     [(aDirectory := JunSystem homeDirectory construct: 'Desktop') exists ifFalse: [self error: String new]]
173:         on: self errorSignal
174:         do: [:exception | aDirectory := Filename defaultDirectory directory].
175:     aFilename := aDirectory construct: 'KSU_' , dateString , '_' , timeString , '.st'.
176:     Cursor write showWhile: 
177:             [aFileManager := SourceCodeStream write: aFilename.
178:             
179:             [aBundle fileOutOn: aFileManager.
180:             self writeClassInitializeOn: aFileManager.
181:             self writeTimeStampOn: aFileManager]
182:                     ensure: [aFileManager close]]
183: 
184: ------------------------------------------------------------
185: 
186: KSU.ProgramManager class method for 'private'
187: 
188: writeClassInitializeOn: aFileManager
189: 
190:     (self classes select: [:aClass | aClass class selectors includes: #initialize]) do: 
191:             [:aClass |
192:             | aStream |
193:             aStream := aFileManager ensureOpen: aFileManager target.
194:             aStream cr.
195:             aStream cr.
196:             aStream nextPutAll: '<initialize>'.
197:             aStream
198:                 cr;
199:                 nextPutAll: '<class-id>';
200:                 nextPutAll: aClass shortName;
201:                 nextPutAll: '</class-id>';
202:                 cr.
203:             aStream nextPutAll: '</initialize>']
204: 
205: ------------------------------------------------------------
206: 
207: KSU.ProgramManager class method for 'private'
208: 
209: writeTimeStampOn: aFileManager
210: 
211:     | aStream |
212:     aStream := aFileManager ensureOpen: aFileManager target.
213:     aStream cr.
214:     aStream cr.
215:     aStream nextPutAll: '<do-it>'.
216:     aStream cr.
217:     JunSourceCodeSaver writeStampOn: aStream.
218:     aStream cr.
219:     aStream nextPutAll: '</do-it>'
220: 
221: ================================================================================

This document was generated by KSU.TextDoclet on 2012/09/14 at 09:27:11.