26
26
// 무조건 directional로 하든지, 아니면 options의 bidirectional = true 이면 임의로 Bidirectional로 생성하는 방법.
27
27
// TODO: JavaDoc을 Documentation으로.
28
28
// TODO: options.publicOnly 처리
29
- // TODO: options.typeHierarchy 처리
30
- // TODO: options.packageOverview 처리
31
- // TODO: options.packageStructure 처리
32
29
33
30
/*jslint vars: true, plusplus: true, devel: true, nomen: true, indent: 4, maxerr: 50, regexp: true */
34
31
/*global define, $, _, window, staruml, type, document, java7 */
@@ -37,6 +34,7 @@ define(function (require, exports, module) {
37
34
38
35
var Core = staruml . getModule ( "core/Core" ) ,
39
36
Repository = staruml . getModule ( "engine/Repository" ) ,
37
+ CommandManager = staruml . getModule ( "menu/CommandManager" ) ,
40
38
UML = staruml . getModule ( "uml/UML" ) ,
41
39
FileSystem = staruml . getModule ( "filesystem/FileSystem" ) ,
42
40
FileSystemError = staruml . getModule ( "filesystem/FileSystemError" ) ,
@@ -78,9 +76,8 @@ define(function (require, exports, module) {
78
76
* @constructor
79
77
*/
80
78
function ModelBuilder ( ) {
81
-
82
79
this . _baseModel = new type . UMLModel ( ) ;
83
-
80
+ this . _baseModel . name = "JavaReverse" ;
84
81
}
85
82
86
83
ModelBuilder . prototype . getBaseModel = function ( ) {
@@ -106,7 +103,7 @@ define(function (require, exports, module) {
106
103
107
104
this . _builder = new ModelBuilder ( ) ; // ???
108
105
109
- /** @member {Array.<File> } */
106
+ /** @member {type.UMLModel } */
110
107
this . _root = null ;
111
108
112
109
/** @member {Array.<File>} */
@@ -154,10 +151,43 @@ define(function (require, exports, module) {
154
151
* @return {$.Promise }
155
152
*/
156
153
JavaAnalyzer . prototype . analyze = function ( options ) {
157
- var self = this ;
154
+ var self = this ,
155
+ promise ;
158
156
159
157
// Perform 1st Phase
160
- var promise = Async . doSequentially ( this . _files , function ( file ) {
158
+ promise = this . performFirstPhase ( options ) ;
159
+
160
+ // Perform 2nd Phase
161
+ promise . done ( function ( ) {
162
+ self . performSecondPhase ( options ) ;
163
+ } ) ;
164
+
165
+ // Load To Project
166
+ promise . done ( function ( ) {
167
+ var json = self . _builder . toJson ( ) ;
168
+ Repository . importFromJson ( Repository . getProject ( ) , json ) ;
169
+ } ) ;
170
+
171
+ // Generate Diagrams
172
+ promise . done ( function ( ) {
173
+ self . generateDiagrams ( options ) ;
174
+ console . log ( "[Java] done." ) ;
175
+ } ) ;
176
+
177
+ return promise ;
178
+ } ;
179
+
180
+
181
+ /**
182
+ * Perform First Phase
183
+ * - Create Generalizations
184
+ * - Create InterfaceRealizations
185
+ * - Create Fields or Associations
186
+ * - Resolve Type References
187
+ */
188
+ JavaAnalyzer . prototype . performFirstPhase = function ( options ) {
189
+ var self = this ;
190
+ return Async . doSequentially ( this . _files , function ( file ) {
161
191
var result = new $ . Deferred ( ) ;
162
192
file . read ( { } , function ( err , data , stat ) {
163
193
if ( ! err ) {
@@ -172,30 +202,16 @@ define(function (require, exports, module) {
172
202
} ) ;
173
203
return result . promise ( ) ;
174
204
} , false ) ;
175
-
176
- // Perform 2nd Phase
177
- promise . always ( function ( ) {
178
- self . perform2ndPhase ( options ) ;
179
- } ) ;
180
-
181
- // Load To Project
182
- promise . always ( function ( ) {
183
- var json = self . _builder . toJson ( ) ;
184
- Repository . importFromJson ( Repository . getProject ( ) , json ) ;
185
- console . log ( "[Java] done." ) ;
186
- } ) ;
187
-
188
- return promise ;
189
205
} ;
190
206
191
207
/**
192
- * Perform 2nd Phase
208
+ * Perform Second Phase
193
209
* - Create Generalizations
194
210
* - Create InterfaceRealizations
195
211
* - Create Fields or Associations
196
212
* - Resolve Type References
197
213
*/
198
- JavaAnalyzer . prototype . perform2ndPhase = function ( options ) {
214
+ JavaAnalyzer . prototype . performSecondPhase = function ( options ) {
199
215
var i , len , j , len2 , _typeName , _type , _pathName ;
200
216
201
217
// Create Generalizations
@@ -314,9 +330,27 @@ define(function (require, exports, module) {
314
330
_typedFeature . feature . multiplicity = _dim . join ( "," ) ;
315
331
}
316
332
}
317
-
318
333
} ;
319
334
335
+ /**
336
+ * Generate Diagrams (Type Hierarchy, Package Structure, Package Overview)
337
+ */
338
+ JavaAnalyzer . prototype . generateDiagrams = function ( options ) {
339
+ var baseModel = Repository . get ( this . _root . _id ) ;
340
+ if ( options . packageStructure ) {
341
+ CommandManager . execute ( "diagramGenerator.packageStructure" , baseModel , true ) ;
342
+ }
343
+ if ( options . typeHierarchy ) {
344
+ CommandManager . execute ( "diagramGenerator.typeHierarchy" , baseModel , true ) ;
345
+ }
346
+ if ( options . packageOverview ) {
347
+ baseModel . traverse ( function ( elem ) {
348
+ if ( elem instanceof type . UMLPackage ) {
349
+ CommandManager . execute ( "diagramGenerator.overview" , elem , true ) ;
350
+ }
351
+ } ) ;
352
+ }
353
+ } ;
320
354
321
355
/**
322
356
* Convert string type name to path name (Array of string)
0 commit comments