ontomde-java 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. data/History.txt +10 -0
  2. data/Manifest.txt +156 -0
  3. data/README.txt +98 -0
  4. data/Rakefile +21 -0
  5. data/bin/ontomde-java +5 -0
  6. data/generateRdocFile.sh +16 -0
  7. data/lib/ontomde-java.rb +45 -0
  8. data/lib/ontomde-java/crank.rb +13 -0
  9. data/lib/ontomde-java/crank/context.rb +384 -0
  10. data/lib/ontomde-java/crank/crankJpa.rb +103 -0
  11. data/lib/ontomde-java/crank/equals.rb +83 -0
  12. data/lib/ontomde-java/crank/facelets.rb +243 -0
  13. data/lib/ontomde-java/crank/facesconfig.rb +113 -0
  14. data/lib/ontomde-java/crank/helper.rb +46 -0
  15. data/lib/ontomde-java/crank/main.rb +51 -0
  16. data/lib/ontomde-java/crank/menu.rb +39 -0
  17. data/lib/ontomde-java/crank/menu2.rb +78 -0
  18. data/lib/ontomde-java/crank/validation.rb +34 -0
  19. data/lib/ontomde-java/ejb2.rb +3 -0
  20. data/lib/ontomde-java/ejb2/main-ejb2.rb +194 -0
  21. data/lib/ontomde-java/flex.rb +7 -0
  22. data/lib/ontomde-java/flex/Editor.mxml.as.rb +184 -0
  23. data/lib/ontomde-java/flex/Editor.mxml.rb +701 -0
  24. data/lib/ontomde-java/flex/ImportationAS.rb +40 -0
  25. data/lib/ontomde-java/flex/ValueObjectAS.rb +338 -0
  26. data/lib/ontomde-java/flex/fileTypes.rb +19 -0
  27. data/lib/ontomde-java/flex/main.rb +347 -0
  28. data/lib/ontomde-java/frontend/command.rb +324 -0
  29. data/lib/ontomde-java/frontend/command.rdoc +583 -0
  30. data/lib/ontomde-java/frontend/defaultOptions.rb +124 -0
  31. data/lib/ontomde-java/frontend/options.rb +555 -0
  32. data/lib/ontomde-java/frontend/steps.rb +287 -0
  33. data/lib/ontomde-java/java/accessorCode.rb +528 -0
  34. data/lib/ontomde-java/java/accessorSignature.rb +347 -0
  35. data/lib/ontomde-java/java/annotationOntoMDE.rb +88 -0
  36. data/lib/ontomde-java/java/apache.rb +34 -0
  37. data/lib/ontomde-java/java/build.rb +80 -0
  38. data/lib/ontomde-java/java/collectionMapping.rb +112 -0
  39. data/lib/ontomde-java/java/component.rb +446 -0
  40. data/lib/ontomde-java/java/contextualize.rb +43 -0
  41. data/lib/ontomde-java/java/enumAssignable.rb +75 -0
  42. data/lib/ontomde-java/java/enumCompatibilityLayer.rb +195 -0
  43. data/lib/ontomde-java/java/equals.rb +91 -0
  44. data/lib/ontomde-java/java/groovy.rb +95 -0
  45. data/lib/ontomde-java/java/java.rb +1329 -0
  46. data/lib/ontomde-java/java/java.rdoc +78 -0
  47. data/lib/ontomde-java/java/javaDatatypeMapping.rb +156 -0
  48. data/lib/ontomde-java/java/javaHelper.rb +25 -0
  49. data/lib/ontomde-java/java/java_todo.rdoc +3 -0
  50. data/lib/ontomde-java/java/javadoc.rb +254 -0
  51. data/lib/ontomde-java/java/meta.rb +28 -0
  52. data/lib/ontomde-java/java/operationAsClass.rb +144 -0
  53. data/lib/ontomde-java/java/security.rb +260 -0
  54. data/lib/ontomde-java/java/stateMachine.rb +415 -0
  55. data/lib/ontomde-java/java/tenant.rb +65 -0
  56. data/lib/ontomde-java/java/xsd.rb +1363 -0
  57. data/lib/ontomde-java/java/xsdCollectionMapping.rb +112 -0
  58. data/lib/ontomde-java/java/xsdDatatypeMapping.rb +103 -0
  59. data/lib/ontomde-java/jpa.rb +17 -0
  60. data/lib/ontomde-java/jpa/configuration.rb +176 -0
  61. data/lib/ontomde-java/jpa/finder.rb +102 -0
  62. data/lib/ontomde-java/jpa/jpa.rb +531 -0
  63. data/lib/ontomde-java/jpa/jpa.rdoc +20 -0
  64. data/lib/ontomde-java/jpa/locking.rb +18 -0
  65. data/lib/ontomde-java/jpa/mapping.rb +314 -0
  66. data/lib/ontomde-java/jpa/redefined.rb +77 -0
  67. data/lib/ontomde-java/jpa/simulationAutoImplement.rb +54 -0
  68. data/lib/ontomde-java/jpdl.rb +9 -0
  69. data/lib/ontomde-java/jpdl/bpm.pprj +1745 -0
  70. data/lib/ontomde-java/jpdl/bpm.rdf +140 -0
  71. data/lib/ontomde-java/jpdl/bpm.rdfs +231 -0
  72. data/lib/ontomde-java/jpdl/constant.rb +5 -0
  73. data/lib/ontomde-java/jpdl/graphic.rb +52 -0
  74. data/lib/ontomde-java/jpdl/jpdl.rb +281 -0
  75. data/lib/ontomde-java/jpdl/jpdl_deploy.rb +114 -0
  76. data/lib/ontomde-java/jpdl/main.rb +348 -0
  77. data/lib/ontomde-java/jpdl/main.rdoc +2 -0
  78. data/lib/ontomde-java/jpdl/processOperationToClass.rb +316 -0
  79. data/lib/ontomde-java/kbjava.rb +6 -0
  80. data/lib/ontomde-java/kbjava/rdfToJava.rb +407 -0
  81. data/lib/ontomde-java/struts.rb +27 -0
  82. data/lib/ontomde-java/struts/MessageResources.rb +359 -0
  83. data/lib/ontomde-java/struts/action.rb +883 -0
  84. data/lib/ontomde-java/struts/blob.rb +11 -0
  85. data/lib/ontomde-java/struts/exceptionHandling.rb +167 -0
  86. data/lib/ontomde-java/struts/footer.rb +128 -0
  87. data/lib/ontomde-java/struts/form.rb +450 -0
  88. data/lib/ontomde-java/struts/header.rb +37 -0
  89. data/lib/ontomde-java/struts/header_link.rb +39 -0
  90. data/lib/ontomde-java/struts/jsp_edit.rb +870 -0
  91. data/lib/ontomde-java/struts/jsp_edit_field.rb +1 -0
  92. data/lib/ontomde-java/struts/jsp_edit_js.rb +124 -0
  93. data/lib/ontomde-java/struts/jsp_index.rb +136 -0
  94. data/lib/ontomde-java/struts/localeAction.rb +641 -0
  95. data/lib/ontomde-java/struts/main.rb +41 -0
  96. data/lib/ontomde-java/struts/mappingForBean.rb +132 -0
  97. data/lib/ontomde-java/struts/mappingForJsp.rb +272 -0
  98. data/lib/ontomde-java/struts/mappingToJavaHierarchy.rb +87 -0
  99. data/lib/ontomde-java/struts/reloadAction.rb +33 -0
  100. data/lib/ontomde-java/struts/spring.rb +89 -0
  101. data/lib/ontomde-java/struts/struts-config.rb +232 -0
  102. data/lib/ontomde-java/struts/validation.rb +116 -0
  103. data/lib/ontomde-java/struts/validator.rb +341 -0
  104. data/lib/ontomde-java/struts/webXml.rb +195 -0
  105. data/lib/ontomde-java/struts/xmlForm.rb +308 -0
  106. data/lib/ontomde-java/version.rb +5 -0
  107. data/profiling.xls +0 -0
  108. data/test/.classpath +14 -0
  109. data/test/.project +17 -0
  110. data/test/.settings/org.eclipse.jdt.core.prefs +23 -0
  111. data/test/Rakefile +71 -0
  112. data/test/build.xml +34 -0
  113. data/test/classpath.rb +15 -0
  114. data/test/lib/junit-4.1.jar +0 -0
  115. data/test/load1.rb +3 -0
  116. data/test/load2.rb +3 -0
  117. data/test/log4j.properties +46 -0
  118. data/test/model/.project +11 -0
  119. data/test/model/BigProject.mdzip +0 -0
  120. data/test/model/BigProject.mdzip.nt +102866 -0
  121. data/test/model/ClassDiagram.EntArch.gif +0 -0
  122. data/test/model/ClassDiagram.emx.gif +0 -0
  123. data/test/model/ClassDiagram.mdzip.gif +0 -0
  124. data/test/model/model_ea71.bis.ea.xmi +149 -0
  125. data/test/model/model_ea71.ea.xmi +4470 -0
  126. data/test/model/model_ea71.eap +0 -0
  127. data/test/model/model_ea71_README.txt +8 -0
  128. data/test/model/multipleInheritance.emx +466 -0
  129. data/test/model/multipleInheritance.emx.nt +2428 -0
  130. data/test/model/simple1-530.ofp +0 -0
  131. data/test/model/simple1-includedAsReference.emx +169 -0
  132. data/test/model/simple1.emx +3729 -0
  133. data/test/model/simple1.emx.fragments.nt +81 -0
  134. data/test/model/simple1.emx.nt +5760 -0
  135. data/test/model/simple1.mdzip +0 -0
  136. data/test/model/simple1.mdzip.nt +11500 -0
  137. data/test/model/simple1.oe530.nt +1986 -0
  138. data/test/model/simple1.oe600.nt +1627 -0
  139. data/test/src/RuntimeTest.java +656 -0
  140. data/test/src/testsLevel1.java +174 -0
  141. data/test/src/testsLevel2.java +29 -0
  142. data/test/src/testsLevel3.java +40 -0
  143. data/test/test-ea7.sh +15 -0
  144. data/test/test-magicDraw.sh +10 -0
  145. data/test/test-mi.sh +9 -0
  146. data/test/test-oe530.sh +10 -0
  147. data/test/test-oe600.sh +11 -0
  148. data/test/test-rsm.sh +11 -0
  149. data/test/test_export_ea71.rb +5 -0
  150. data/test/test_export_oe530.rb +4 -0
  151. data/test/test_export_oe600.rb +4 -0
  152. data/test/test_export_rsm60.rb +4 -0
  153. data/test/trace +419 -0
  154. data/test/uml_test.rb +1434 -0
  155. data/test/uml_test.xls +0 -0
  156. data/test/unit_test.rb +6 -0
  157. metadata +224 -0
@@ -0,0 +1,78 @@
1
+ This tool is a java code generator for UML2 model.
2
+
3
+ =Main advantages
4
+ * Open Source
5
+ * Case tool independant
6
+ * Very low maintenance (<5000 lines of code and no dependency)
7
+ * High perenity (no dependency on external tools and library)
8
+ * Very fast and scalable for large UML models
9
+ * Generator is fully object oriented
10
+ * Does not use tool specific template or extension language
11
+
12
+ =Required skills to generate java code from uml2 model
13
+ * None, just lauch the generator command line (uml2java)
14
+
15
+ =Required skills to customize the standard java code
16
+ * UML2 model structure
17
+ * Standard Ruby knowledge
18
+ * Read this documentation
19
+ * No tool specific language (template, extension, ...)
20
+
21
+ =Currently supported UML case tools are
22
+ * IBM Rational RSM 6.0 (full export, *incremental* export)
23
+ * Magic Draw 11.5 (full export)
24
+
25
+ =Standard features
26
+ * Generates Java Enum for UML Enum
27
+ * Generates Java Class for UML Class
28
+ * Generates Java inner Class for UML inner Class
29
+ * Generates Java interface for UML interface
30
+ * Generates Java operation squeleton for UML operation
31
+ * Generates Java Attribute getter for java attribute (using a model transformation)
32
+ * Generates Java Attribute setter for java attribute (using a model transformation)
33
+ * Generates Java Attribute remover for java attribute (using a model transformation)
34
+ * Generates UML exception for methods
35
+
36
+ =Extended features
37
+ * Model tranformation is used extensively for model enhancement (addition of getter/setter)
38
+ * Generates Java accessors handling bi-directionnal associations (other end is updated)
39
+ * Requires *no* external java library
40
+ * Requires *no* internal java library (that would be provided by this tool)
41
+ * Every accessor/getter/... may be modified in Java file and preserved by subsequent generation.
42
+ * Generator has access to every UML2 model element (class model, state model, ...)
43
+ * Performant model traversal. Every UML2 model element may be navigated both ways, unlike tools such as EMF/UML2 or Objecteering for example who require expensive full model lookup (to find out who inherits from me)
44
+ * CodeSave feature. (When a method is deleted from UML model, Java code is saved in a file) (also works with any hand written code).
45
+
46
+ =Eclipse Integration
47
+ * Imports can be modified inline (in java file) by Eclipse
48
+ * Imports generate by Eclipse "organize imports" are preserved by subsequent generations.
49
+
50
+ * Java operation squeleton can be modified inline (in java file) using Eclipse.
51
+ * Eclipse Ruby editor can be used to customize Java code generator.
52
+
53
+ =Performance features
54
+ * Model loading time is *linear* unlike MDR based products (such as AndroMDA)
55
+ * Model loading time is similar to JAVA/EMF loading time
56
+ * *Incremental* model update allow nearly instantaneous generation time even on very large models.
57
+
58
+ =High end features
59
+ * Model transformation are fully redefinable
60
+ * Code generation is fully redefinable
61
+ * Generator is fully object oriented
62
+
63
+ =Agile Programming Feature
64
+ * Generation runtime is independant of GUI and can be executed by daily builds on servers.
65
+
66
+ =Versionning features
67
+ * Several versions of ontomde may be installed simultaneously on one machine.
68
+ * Project may request one version of ontomde or a range (>=1, >=1 <2, ...)
69
+
70
+ =Near zero dependency
71
+ This tool relies on
72
+ * UML2 specification
73
+ * Ruby 1.8
74
+ * itself (<
75
+ * and *nothing* else
76
+ This tool lifecycle is independant of case tools and Eclipse continous evolution.
77
+ You will never be forced to upgrade all of your generation scripts because you chose to change or upgrade your UML case tool.
78
+
@@ -0,0 +1,156 @@
1
+ class DatatypeMapping
2
+ def java_getType
3
+ # inheriting class should redefine this method
4
+ log.error %{java_getType not implemented for #{self.class}}
5
+ return %{/* TODO: implement ruby java_getType for #{self.class}*/}
6
+ end
7
+ end
8
+ class DatatypeMappingText < DatatypeMapping
9
+ def java_getType
10
+ return "java.lang.String"
11
+ end
12
+ end
13
+
14
+ class DatatypeMappingLargeText < DatatypeMappingText
15
+ end
16
+
17
+ class DatatypeMappingMimeType < DatatypeMappingText
18
+ end
19
+
20
+ class DatatypeMappingOrdinal < DatatypeMappingText
21
+ end
22
+
23
+ class DatatypeMappingInteger < DatatypeMappingOrdinal
24
+ def java_getType
25
+ return "int"
26
+ end
27
+ end
28
+
29
+ class DatatypeMappingLong < DatatypeMappingOrdinal
30
+ def java_getType
31
+ return "long"
32
+ end
33
+ end
34
+
35
+ class DatatypeMappingLongObject < DatatypeMappingOrdinal
36
+ def java_getType
37
+ return "Long"
38
+ end
39
+ end
40
+ class DatatypeMappingFile < DatatypeMapping
41
+ def java_getType
42
+ return "java.lang.Object"
43
+ end
44
+ end
45
+
46
+ class DatatypeMappingBoolean < DatatypeMapping
47
+ #name of the key used by struts to referece
48
+ #current bean in session.
49
+ STRUTS_BEAN_KEY= "org.apache.struts.taglib.html.BEAN";
50
+
51
+ def java_getType
52
+ return "boolean"
53
+ end
54
+ end
55
+
56
+ class DatatypeMappingTimeStamp < DatatypeMapping
57
+ def java_getType
58
+ return "java.util.Date"
59
+ end
60
+ end
61
+
62
+ class DatatypeMappingCalendar < DatatypeMapping
63
+ def java_getType
64
+ return "java.util.Date"
65
+ end
66
+ end
67
+
68
+
69
+
70
+
71
+ class DatatypeMappingGenericClass < DatatypeMapping
72
+ def getFormCopyTo(field)
73
+ a=field
74
+ return "/* #{a.java_NameBean} is transient */\n" if a.uml_type_one.java_DAOClass.empty?
75
+ if a.umlx_oneSide?
76
+ return %{_to.set#{a.java_NameBean}(this.get#{a.java_NameBean}().compareTo("nil")==0 ? null : #{a.uml_type_one.java_DAOClass_one.java_qualifiedName}.find(Long.parseLong(this.get#{a.java_NameBean}())));\n}
77
+ else # many
78
+ cm=a.java_getCollectionMapping
79
+ return <<END333
80
+ { // UML: #{field.uml_name}
81
+ String[] src=this.get#{a.java_NameBean}();
82
+ #{cm.addCollectionInterface(a.uml_type_one.java_qualifiedName)} newCol= #{cm.addNew(a.uml_type_one.java_qualifiedName)};
83
+ int max=src==null ? 0 : src.length;
84
+ #{a.uml_type_one.java_qualifiedName} item=null;
85
+ for(int i=0; i<max;i++) {
86
+ //log.error("loading : "+src[i]);
87
+ if(src[i]==null) continue;
88
+ item=#{a.uml_type_one.java_DAOClass_one.java_qualifiedName}.find(Long.parseLong(src[i]));
89
+ newCol.add(item);
90
+ }
91
+ _to.set#{a.java_NameBean}(newCol);
92
+ }
93
+ END333
94
+ end
95
+ end
96
+ def getFormInitFrom(field)
97
+ a=field
98
+ if a.umlx_oneSide?
99
+ return %{this.set#{a.java_NameBean}(_from.get#{a.java_NameBean}()==null? "nil" : Long.toString(_from.get#{a.java_NameBean}().getId()));\n}
100
+ else
101
+ return %{
102
+ { /*STRUTS:2001*/
103
+ this.set#{a.java_NameBean}(null);
104
+ java.util.Iterator<?> iter=_from.get#{a.java_NameBean}().iterator();
105
+ #{a.uml_type_one.java_qualifiedName} item=null;
106
+ while(iter.hasNext()){
107
+ item=(#{a.uml_type_one.java_qualifiedName})iter.next();
108
+ this.add#{a.java_NameBean}(Long.toString(item.getId()));
109
+ }
110
+ }
111
+ }
112
+ end
113
+ end
114
+ def java_getType
115
+ return "java.lang.Object"
116
+ end
117
+ end
118
+
119
+ class DatatypeMappingGenericEnum < DatatypeMapping
120
+ NULL_ENUM_VALUE_AS_STRING="nil"
121
+ def getFormCopyTo(field)
122
+ a=field
123
+ return %{_to.set#{a.java_NameBean}(this.get#{a.java_NameBean}().compareTo("#{NULL_ENUM_VALUE_AS_STRING}")!=0 ? Enum.valueOf(#{a.uml_type_one.java_qualifiedName}.class,this.get#{a.java_NameBean}()):null);\n}
124
+ end
125
+ def getFormInitFrom(field)
126
+ #return "this.set#{field.java_NameBean}(_from.get#{field.java_NameBean}()==null ? -1 :_from.get#{field.java_NameBean}().ordinal());\n"
127
+ return %{this.set#{field.java_NameBean}(_from.get#{field.java_NameBean}()==null ? "#{NULL_ENUM_VALUE_AS_STRING}" :_from.get#{field.java_NameBean}().name());\n}
128
+ end
129
+ def java_getType
130
+ return "java.lang.Object"
131
+ end
132
+ end
133
+
134
+
135
+ class DatatypeMappingURL < DatatypeMappingText
136
+ end
137
+
138
+ class DatatypeMappingBLOB < DatatypeMapping
139
+ def java_getType
140
+ return "byte[]"
141
+ end
142
+ end
143
+
144
+ class DatatypeMappingIMG < DatatypeMappingBLOB
145
+ end
146
+
147
+ class DatatypeMappingGRAPHVIZ < DatatypeMappingLargeText
148
+ end
149
+
150
+ class DatatypeMappingPassword < DatatypeMappingText
151
+ end
152
+
153
+ class DatatypeMappingEmailAddress < DatatypeMappingText
154
+ end
155
+
156
+
@@ -0,0 +1,25 @@
1
+ class JHelper
2
+ def JHelper.to_firstUpper(name)
3
+ result = String.new(name)
4
+ if !result.empty?
5
+ result[0] = result[0, 1].upcase
6
+ end
7
+ return result
8
+ end
9
+ def JHelper.to_NameProperty(name)
10
+ result = String.new(name)
11
+ if !result.empty?
12
+ result[0] = result[0, 1].downcase
13
+ end
14
+ return result
15
+ end
16
+ # remove the last caracter if 's'
17
+ def JHelper.to_SingleName(name)
18
+ result = String.new(name)
19
+ if !result.empty? && result[result.size-1]==115 #'s'
20
+ result = result[0, result.size - 1]
21
+ end
22
+ return result
23
+ end
24
+ end
25
+
@@ -0,0 +1,3 @@
1
+ TODO:
2
+ * Handle manual constructors
3
+ * Implement hashcode (pour hashtable)
@@ -0,0 +1,254 @@
1
+
2
+
3
+ class String
4
+ JAVA_ESCAPEJAVADOC_RE=/\*\\/
5
+ #write string as javadoc
6
+ #NOTE: source strings should not include javadoc comments open/close
7
+ # (javadoc comments open/closed are removed)
8
+ def java_writeJavadoc(res)
9
+ # replace escaped carriage return by true carriage return
10
+ # remove java comments (we are already inside a javadoc)
11
+ self.gsub(/\\r\\n/,"\n").gsub(/\*\//,'--').gsub(/\/\*/,'--').each { |line|
12
+ res.write(" * #{line}".tr("\n"," ").rstrip)
13
+ res.write("\n")
14
+ }
15
+ end
16
+ end
17
+
18
+ module Muml_Classifier
19
+ #write classifier javadoc comment.
20
+ def java_writeJavadoc
21
+ return unless context[:javadoc]
22
+
23
+ c=""
24
+ sep=""
25
+ uml_ownedComment.each { |comment|
26
+ c="#{c}#{sep}#{comment.uml_body_one}"
27
+ sep="\n"
28
+ }
29
+ mtk_protected(Mrdf_Resource::NOREVERSE,"javadoc",context[:hasGlobalReverse]||context[:hideJavadocReverseTag]) {
30
+ write(" /**\n");
31
+ c.java_writeJavadoc(self)
32
+ #Note: RSM exports adds an extraneous http://
33
+ #Note: TODO: This code is RSM 6 specific
34
+ %{@see <a href="#{context[:rsm6WebDocURI]}#{UriNamespace.instance.unalias(rdf_uri).gsub(/http:\/\/kb#/,"")}-content.html">UML documentation.</a>}.java_writeJavadoc(self) unless context[:rsm6WebDocURI].empty?
35
+
36
+ write(" */\n")
37
+ }
38
+ end
39
+ end
40
+
41
+
42
+ module Muml_Property
43
+ #returns a javadoc link suitable for @see and @link.
44
+ def java_javadocLink(location=nil)
45
+ o=umlx_owner_one
46
+ if location==o
47
+ #same class
48
+ return "##{java_Name}"
49
+ else
50
+ #different class
51
+ return "#{o.java_qualifiedName}##{java_Name}"
52
+ end
53
+
54
+ end
55
+
56
+ #write property javadoc comment.
57
+ def java_writeJavadoc
58
+ return unless context[:javadoc]
59
+
60
+ c=""
61
+ sep=""
62
+ uml_ownedComment.each { |comment|
63
+ c="#{c}#{sep}#{comment.uml_body_one}"
64
+ sep="\n"
65
+ }
66
+ mtk_protected(Mrdf_Resource::NOREVERSE,"javadoc",context[:hasGlobalReverse]||context[:hideJavadocReverseTag]) {
67
+ write(" /**\n");
68
+ c.java_writeJavadoc(self)
69
+ #Note: RSM exports adds an extraneous http://
70
+ #Note: TODO: This code is RSM 6 specific
71
+ %{@see <a href="#{context[:rsm6WebDocURI]}#{UriNamespace.instance.unalias(rdf_uri).gsub(/http:\/\/kb#/,"")}-content.html">UML documentation.</a>}.java_writeJavadoc(self) unless context[:rsm6WebDocURI].empty?
72
+
73
+ write(" */\n")
74
+ }
75
+ end
76
+ end
77
+
78
+
79
+ module Muml_Operation
80
+ #returns a javadoc link suitable for @see and @link.
81
+ def java_javadocLink(location=nil)
82
+ o=umlx_owner_one
83
+ if location==o
84
+ #same class
85
+ return "##{java_Name}"
86
+ else
87
+ #different class
88
+ return "#{o.java_qualifiedName}##{java_Name}"
89
+ end
90
+ end
91
+
92
+
93
+ #write operation javadoc comment.
94
+ def java_writeJavadoc
95
+ return unless context[:javadoc]
96
+ mtk_protected(Mrdf_Resource::NOREVERSE,"javadoc",context[:hasGlobalReverse]||context[:hideJavadocReverseTag]) {
97
+ java_writeJavadoc_internal
98
+ }
99
+ end
100
+
101
+ #internal write javadoc
102
+ def java_writeJavadoc_internal
103
+ write(" /**\n");
104
+ hasDoc=false
105
+
106
+ # if !java_getter_property.empty? && !java_getter_property_one.uml_isDerived?
107
+ # "getter for property {@link #{java_getter_property_one.java_javadocLink}}".java_writeJavadoc(self)
108
+ # end
109
+ # if !java_setter_property.empty? && !java_setter_property_one.uml_isDerived?
110
+ # "setter for property {@link #{java_setter_property_one.java_javadocLink}}".java_writeJavadoc(self)
111
+ # end
112
+
113
+ p=java_getter_property_one0
114
+ if !p.nil?
115
+ oe=p.umlx_otherEnd
116
+ if !oe.nil? && oe.umlx_isNavigable?
117
+ g=oe.java_AttributeGlobalGetter_one0
118
+ if !g.nil?
119
+ "This property is part of a bi-navigable association {@link #{g.java_javadocLink(self)}}<br/>".java_writeJavadoc(self)
120
+ end
121
+ end
122
+ end
123
+
124
+
125
+ if !uml_ownedComment.empty?
126
+ #write("* @return the \n");
127
+ uml_ownedComment.each { |comment|
128
+ hasDoc=true
129
+ comment.uml_body_one.java_writeJavadoc(self)
130
+ }
131
+
132
+ elsif !java_getter_property.empty?
133
+ java_getter_property_one.uml_ownedComment.each { |comment|
134
+ hasDoc=true
135
+ comment.uml_body_one.java_writeJavadoc(self)
136
+ }
137
+ else
138
+ #nop
139
+ end
140
+ #if(!hasDoc)
141
+ # "TODO: document this element in source UML model".java_writeJavadoc(self)
142
+ #end
143
+
144
+ uml_ownedParameter.each { |p|
145
+ c=""
146
+ p.uml_ownedComment.each { |comment|
147
+ c="#{c} #{comment.uml_body_one}"
148
+ }
149
+ c=" self-explanatory"
150
+ #next if c.empty? && p.uml_direction_one.isReturn?
151
+ "#{p.uml_direction_one.isReturn? ? %{@return} : %{@param}} #{p.java_Name unless p.uml_direction_one.isReturn?}#{c}".java_writeJavadoc(self)
152
+ }
153
+
154
+ if !java_setter_property.empty?
155
+ hasDoc=true
156
+ p=java_setter_property_one
157
+ if !p.java_AttributeGlobalGetter.empty?
158
+ "@see #{p.java_AttributeGlobalGetter_one.java_javadocLink}".java_writeJavadoc(self)
159
+ end
160
+ end
161
+
162
+ write(" */\n")
163
+ end
164
+ end
165
+
166
+ module Muml_EnumerationLiteral
167
+ def java_writeJavadoc
168
+ return unless context[:javadoc]
169
+ c=""
170
+ uml_ownedComment.each { |comment|
171
+ c="#{c} #{comment.uml_body_one}"
172
+ }
173
+ mtk_protected(Mrdf_Resource::NOREVERSE,"javadoc",context[:hasGlobalReverse]||context[:hideJavadocReverseTag]) {
174
+ unless c.empty?
175
+ write(" /**\n");
176
+ c.java_writeJavadoc(self)
177
+ write(" */\n")
178
+ end
179
+ }
180
+ end
181
+ end
182
+
183
+
184
+ module Mrdf_Repository
185
+
186
+ #returns a hash of package sets for which a javadoc should be generated.
187
+ #hash key is the qualifiedName of the packages
188
+ #(several uml packages may have the same name in different UML models)
189
+ #
190
+ #A package is included if :
191
+ #* it contains a generated class/interface/enum
192
+ #* it contains a uml comment
193
+ def java_getUsedPackages
194
+
195
+ ps=Hash.new
196
+ uml_Class_all.each { |e|
197
+ p=e.umlx_owner_one
198
+ next unless p.kind_of?(Muml_Package)
199
+ next if p.umlx_isARootNamespace?
200
+ next if e.umlx_external?
201
+ pn=p.java_qualifiedName.to_s
202
+ s=ps[pn]
203
+ if s.nil?
204
+ s=Set.new
205
+ ps[pn]=s
206
+ end
207
+ s.add(p)
208
+ }
209
+
210
+ each { |k,p|
211
+ next unless p.kind_of?(Muml_Package)
212
+ next if p.kind_of?(Muml_Model)
213
+ next if p.uml_ownedComment.empty?
214
+ pn=p.java_qualifiedName.to_s
215
+ s=ps[pn]
216
+ if s.nil?
217
+ s=Set.new
218
+ ps[pn]=s
219
+ end
220
+ s.add(p)
221
+ }
222
+ return ps
223
+ end
224
+
225
+ #generates java documentation files (package-info.java) for
226
+ #packages directly containing elements (class, enum, interface)
227
+ #cf: http://java.sun.com/docs/books/jls/third_edition/html/packages.html
228
+ def java_generatePackageDoc
229
+ return unless context[:javadoc]
230
+ return unless context[:javadocForDir,false]
231
+ java_getUsedPackages.each { |packageName,packageSet|
232
+ fn=nil
233
+ packageSet.each { |package|
234
+ fn="#{package.java_FilePath}/#{package.java_Name}/package-info.java"
235
+ break
236
+ }
237
+ mtk_writeSession(fn) {
238
+ write("/**\n")
239
+ packageSet.each { |package|
240
+ package.uml_ownedComment.each { |comment|
241
+ comment.uml_body_one.java_writeJavadoc(self)
242
+ }
243
+ }
244
+ write("**/\n\n")
245
+ write("package #{packageName};\n")
246
+ }
247
+ }
248
+ end
249
+ end
250
+
251
+
252
+
253
+
254
+