Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 0b1a700

Browse files
committed
diagram generation (package overview, structure, type hierarchy)
1 parent 1a834d9 commit 0b1a700

File tree

2 files changed

+185
-67
lines changed

2 files changed

+185
-67
lines changed

JavaReverseEngineer.js

Lines changed: 59 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,6 @@
2626
// 무조건 directional로 하든지, 아니면 options의 bidirectional = true 이면 임의로 Bidirectional로 생성하는 방법.
2727
// TODO: JavaDoc을 Documentation으로.
2828
// TODO: options.publicOnly 처리
29-
// TODO: options.typeHierarchy 처리
30-
// TODO: options.packageOverview 처리
31-
// TODO: options.packageStructure 처리
3229

3330
/*jslint vars: true, plusplus: true, devel: true, nomen: true, indent: 4, maxerr: 50, regexp: true */
3431
/*global define, $, _, window, staruml, type, document, java7 */
@@ -37,6 +34,7 @@ define(function (require, exports, module) {
3734

3835
var Core = staruml.getModule("core/Core"),
3936
Repository = staruml.getModule("engine/Repository"),
37+
CommandManager = staruml.getModule("menu/CommandManager"),
4038
UML = staruml.getModule("uml/UML"),
4139
FileSystem = staruml.getModule("filesystem/FileSystem"),
4240
FileSystemError = staruml.getModule("filesystem/FileSystemError"),
@@ -78,9 +76,8 @@ define(function (require, exports, module) {
7876
* @constructor
7977
*/
8078
function ModelBuilder() {
81-
8279
this._baseModel = new type.UMLModel();
83-
80+
this._baseModel.name = "JavaReverse";
8481
}
8582

8683
ModelBuilder.prototype.getBaseModel = function () {
@@ -106,7 +103,7 @@ define(function (require, exports, module) {
106103

107104
this._builder = new ModelBuilder(); // ???
108105

109-
/** @member {Array.<File>} */
106+
/** @member {type.UMLModel} */
110107
this._root = null;
111108

112109
/** @member {Array.<File>} */
@@ -154,10 +151,43 @@ define(function (require, exports, module) {
154151
* @return {$.Promise}
155152
*/
156153
JavaAnalyzer.prototype.analyze = function (options) {
157-
var self = this;
154+
var self = this,
155+
promise;
158156

159157
// 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) {
161191
var result = new $.Deferred();
162192
file.read({}, function (err, data, stat) {
163193
if (!err) {
@@ -172,30 +202,16 @@ define(function (require, exports, module) {
172202
});
173203
return result.promise();
174204
}, 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;
189205
};
190206

191207
/**
192-
* Perform 2nd Phase
208+
* Perform Second Phase
193209
* - Create Generalizations
194210
* - Create InterfaceRealizations
195211
* - Create Fields or Associations
196212
* - Resolve Type References
197213
*/
198-
JavaAnalyzer.prototype.perform2ndPhase = function (options) {
214+
JavaAnalyzer.prototype.performSecondPhase = function (options) {
199215
var i, len, j, len2, _typeName, _type, _pathName;
200216

201217
// Create Generalizations
@@ -314,9 +330,27 @@ define(function (require, exports, module) {
314330
_typedFeature.feature.multiplicity = _dim.join(",");
315331
}
316332
}
317-
318333
};
319334

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+
};
320354

321355
/**
322356
* Convert string type name to path name (Array of string)

0 commit comments

Comments
 (0)