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/19 at 23:48:21.