ontomde-java 2.0.0 → 2.0.4

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 (100) hide show
  1. data/History.txt +11 -0
  2. data/Manifest.txt +1 -51
  3. data/lib/ontomde-java.rb +2 -0
  4. data/lib/ontomde-java/crank.rb +8 -8
  5. data/lib/ontomde-java/crank/crankJpa.rb +58 -8
  6. data/lib/ontomde-java/crank/main.rb +38 -21
  7. data/lib/ontomde-java/frontend/command.rb +7 -7
  8. data/lib/ontomde-java/frontend/command.rdoc +0 -583
  9. data/lib/ontomde-java/frontend/defaultOptions.rb +12 -7
  10. data/lib/ontomde-java/frontend/options.rb +19 -2
  11. data/lib/ontomde-java/frontend/steps.rb +36 -5
  12. data/lib/ontomde-java/java/accessorCode.rb +250 -94
  13. data/lib/ontomde-java/java/accessorSignature.rb +50 -4
  14. data/lib/ontomde-java/java/annotationOntoMDE.rb +38 -27
  15. data/lib/ontomde-java/java/component.rb +141 -68
  16. data/lib/ontomde-java/java/enumAssignable.rb +46 -5
  17. data/lib/ontomde-java/java/java.rb +111 -40
  18. data/lib/ontomde-java/java/javaDatatypeMapping.rb +35 -1
  19. data/lib/ontomde-java/java/javadoc.rb +35 -22
  20. data/lib/ontomde-java/java/operationAsClass.rb +13 -0
  21. data/lib/ontomde-java/java/security.rb +10 -2
  22. data/lib/ontomde-java/java/stateMachine.rb +137 -74
  23. data/lib/ontomde-java/java/tenant.rb +1 -0
  24. data/lib/ontomde-java/java/xsd.rb +1 -1
  25. data/lib/ontomde-java/jpa/configuration.rb +25 -1
  26. data/lib/ontomde-java/jpa/finder.rb +48 -13
  27. data/lib/ontomde-java/jpa/jpa.rb +30 -14
  28. data/lib/ontomde-java/jpa/mapping.rb +114 -60
  29. data/lib/ontomde-java/jpa/redefined.rb +21 -5
  30. data/lib/ontomde-java/jpa/simulationAutoImplement.rb +1 -1
  31. data/lib/ontomde-java/jpdl/processOperationToClass.rb +1 -2
  32. data/lib/ontomde-java/kbjava/rdfToJava.rb +25 -16
  33. data/lib/ontomde-java/struts.rb +1 -1
  34. data/lib/ontomde-java/struts/MessageResources.rb +15 -6
  35. data/lib/ontomde-java/struts/action.rb +37 -13
  36. data/lib/ontomde-java/struts/form.rb +97 -7
  37. data/lib/ontomde-java/struts/header.rb +7 -3
  38. data/lib/ontomde-java/struts/jsp_edit.rb +54 -24
  39. data/lib/ontomde-java/struts/jsp_edit_js.rb +1 -1
  40. data/lib/ontomde-java/struts/jsp_index.rb +6 -4
  41. data/lib/ontomde-java/struts/mappingForJsp.rb +11 -7
  42. data/lib/ontomde-java/struts/mappingToJavaHierarchy.rb +16 -2
  43. data/lib/ontomde-java/version.rb +1 -1
  44. data/lib/ontomde-java/vmware/vso.rb +329 -0
  45. data/test/test_export_ea7_1_829.rb +5 -0
  46. data/test/test_export_ea7_1_833.rb +5 -0
  47. data/test/test_export_ea7_5_843.rb +5 -0
  48. data/test/test_export_magicDraw.rb +4 -0
  49. data/test/test_export_oe530.rb +1 -1
  50. data/test/test_export_oe600.rb +1 -1
  51. data/test/test_export_rsm60.rb +1 -1
  52. data/test/{uml_test.rb → test_export_unitTests.rb} +6 -1
  53. metadata +9 -56
  54. data/generateRdocFile.sh +0 -16
  55. data/profiling.xls +0 -0
  56. data/test/.classpath +0 -14
  57. data/test/.project +0 -17
  58. data/test/.settings/org.eclipse.jdt.core.prefs +0 -23
  59. data/test/Rakefile +0 -71
  60. data/test/build.xml +0 -34
  61. data/test/classpath.rb +0 -15
  62. data/test/lib/junit-4.1.jar +0 -0
  63. data/test/load1.rb +0 -3
  64. data/test/load2.rb +0 -3
  65. data/test/log4j.properties +0 -46
  66. data/test/model/.project +0 -11
  67. data/test/model/BigProject.mdzip +0 -0
  68. data/test/model/BigProject.mdzip.nt +0 -102866
  69. data/test/model/ClassDiagram.EntArch.gif +0 -0
  70. data/test/model/ClassDiagram.emx.gif +0 -0
  71. data/test/model/ClassDiagram.mdzip.gif +0 -0
  72. data/test/model/model_ea71.bis.ea.xmi +0 -149
  73. data/test/model/model_ea71.ea.xmi +0 -4470
  74. data/test/model/model_ea71.eap +0 -0
  75. data/test/model/model_ea71_README.txt +0 -8
  76. data/test/model/multipleInheritance.emx +0 -466
  77. data/test/model/multipleInheritance.emx.nt +0 -2428
  78. data/test/model/simple1-530.ofp +0 -0
  79. data/test/model/simple1-includedAsReference.emx +0 -169
  80. data/test/model/simple1.emx +0 -3729
  81. data/test/model/simple1.emx.fragments.nt +0 -81
  82. data/test/model/simple1.emx.nt +0 -5760
  83. data/test/model/simple1.mdzip +0 -0
  84. data/test/model/simple1.mdzip.nt +0 -11500
  85. data/test/model/simple1.oe530.nt +0 -1986
  86. data/test/model/simple1.oe600.nt +0 -1627
  87. data/test/src/RuntimeTest.java +0 -656
  88. data/test/src/testsLevel1.java +0 -174
  89. data/test/src/testsLevel2.java +0 -29
  90. data/test/src/testsLevel3.java +0 -40
  91. data/test/test-ea7.sh +0 -15
  92. data/test/test-magicDraw.sh +0 -10
  93. data/test/test-mi.sh +0 -9
  94. data/test/test-oe530.sh +0 -10
  95. data/test/test-oe600.sh +0 -11
  96. data/test/test-rsm.sh +0 -11
  97. data/test/test_export_ea71.rb +0 -5
  98. data/test/trace +0 -419
  99. data/test/uml_test.xls +0 -0
  100. data/test/unit_test.rb +0 -6
@@ -33,9 +33,9 @@ module Muml_Class
33
33
  param=context[:db_useExtraTypeParameterForFindAll] ? "(#{self.java_qualifiedName})null" : ""
34
34
  tenantClause=''
35
35
  if context[:multiTenant]
36
- tenantClause="#{TENANT_FIELD_NAME},"
36
+ tenantClause="get#{TENANT_FIELD_BEAN_NAME}(),"
37
37
  end
38
- return "#{java_DAOClass_one.java_qualifiedName}.findAll(#{tenantClause}#{param})"
38
+ return "#{java_DAOClass_one.java_qualifiedName}.findAll(#{tenantClause}#{param},0,-1)"
39
39
  end
40
40
 
41
41
  #Method redefined from ontomde-java
@@ -46,7 +46,13 @@ module Muml_Class
46
46
  #TODO: recherche du composite commun
47
47
  #TODO: transient object do not have a valid uniq id
48
48
 
49
- #if oa.umlx_oneSide?
49
+ # When otherSide has cardinality 1, we do not
50
+ # suggest an element if it is already assigned.
51
+ # Feature is only available when other side is navigable
52
+ # because we don't want a big overhead.
53
+ oe=oa.umlx_otherEnd
54
+ filterOut=!oe.nil? && oe.umlx_isNavigable? && oe.umlx_oneSide?
55
+
50
56
  if !oa.umlx_manySide?
51
57
  write( %{
52
58
  java.util.List<#{oa.uml_type_one.java_qualifiedName}> ret=#{oa.uml_type_one.db_getFindAllCall};
@@ -54,7 +60,17 @@ java.util.List<#{oa.uml_type_one.java_qualifiedName}> ret=#{oa.uml_type_one.db_g
54
60
  if(elt!=null && !ret.contains(elt)) {
55
61
  ret.add(elt);
56
62
  }
57
- return ret;\n})
63
+ #{%{java.util.Iterator<?> iter=ret.iterator();
64
+ #{oa.uml_type_one.java_qualifiedName} item=null;
65
+ while(iter.hasNext()){
66
+ item=(#{oa.uml_type_one.java_qualifiedName}) iter.next();
67
+ if(item.get#{oe.java_NameBean}()!=null && item.get#{oe.java_NameBean}()!=this) {
68
+ iter.remove();
69
+ }
70
+ }} if filterOut}
71
+
72
+
73
+ return ret;\n})
58
74
  else
59
75
  write( %{
60
76
  java.util.List<#{oa.uml_type_one.java_qualifiedName}> ret=#{oa.uml_type_one.db_getFindAllCall};
@@ -63,7 +79,7 @@ java.util.List<#{oa.uml_type_one.java_qualifiedName}> ret=#{oa.uml_type_one.db_g
63
79
  java.util.Iterator<?> iter=get#{oa.java_NameBean}().iterator();
64
80
  while(iter.hasNext()){
65
81
  item=(#{oa.uml_type_one.java_qualifiedName}) iter.next();
66
- if(!ret.contains(item)) {
82
+ if(!ret.contains(item) #{"&& (item.get#{oe.java_NameBean}()==null || item.get#{oe.java_NameBean}()==this)" if filterOut} ) {
67
83
  ret.add(item);
68
84
  }
69
85
  }
@@ -40,7 +40,7 @@ module Muml_Operation
40
40
  #not a persistent class
41
41
  return
42
42
  elsif fp.umlx_oneSide?
43
- self.java_code=%{#{JPA_TEST_CODE_TOP}\nreturn #{fp.uml_type_one.db_getFindAllCall}.get(0);}
43
+ self.java_code=%{#{JPA_TEST_CODE_TOP}\nreturn #{fp.uml_type_one.db_getFindAllCall}.isEmpty() ? null : #{fp.uml_type_one.db_getFindAllCall}.get(0);}
44
44
  elsif fp.uml_isOrdered?
45
45
  self.java_code=%{#{JPA_TEST_CODE_TOP}\nreturn #{fp.uml_type_one.db_getFindAllCall};}
46
46
  else
@@ -133,8 +133,7 @@ module Muml_Class
133
133
  #m.uml_isStatic=RDF_TRUE
134
134
 
135
135
  param=m.umlx_createAndAddParameter(m.rdf_uri+"_this","_this")
136
- i=c.umlx_getOrCreateInterface(DB::EntityInterface)
137
- i.java_isGeneric=RDF_TRUE
136
+ i=c.umlx_getOrCreateGeneric(DB::EntityInterface,DB::EntityGenericParameter)
138
137
  param.uml_type=i
139
138
  param.uml_direction=Cuml_ParameterDirectionKind::In
140
139
  param.uml_upperValue=umlx_literal(1)
@@ -91,20 +91,20 @@ END
91
91
  #also avoid org.junit.* import notused warning in Eclipse
92
92
  n.java_customCode="@Test\npublic void replaceWithMeaningfulTest(){}\n"
93
93
 
94
- m=n.umlx_createAndAddOperation(n.rdf_uri+"merge","merge");
95
- #TODO merge referenced items
96
- m.java_code="return this;"
97
- p=m.umlx_createAndAddReturnParameter(m.rdf_uri+'_ret',"return")
98
- p.uml_type=n
99
- m.umlx_businessMethod=RDF_FALSE
94
+ return if uml_type.context[:rel_mapping] == 'none'
100
95
 
96
+ m=n.umlx_createAndAddOperation(n.rdf_uri+"merge","merge");
97
+ #TODO merge referenced items
98
+ m.java_code="return this;"
99
+ p=m.umlx_createAndAddReturnParameter(m.rdf_uri+'_ret',"return")
100
+ p.uml_type=n
101
+ m.umlx_businessMethod=RDF_FALSE
101
102
 
102
- persist=n.umlx_createAndAddOperation(n.rdf_uri+"persist","persist");
103
- persist.java_code="" # #{java_debug(%{log.debug("persisting referenced persistent elements");}\n}"
104
- p=persist.umlx_createAndAddReturnParameter(persist.rdf_uri+'_ret',"return")
105
- p.uml_type=n
106
- persist.umlx_businessMethod=RDF_FALSE
107
-
103
+ persist=n.umlx_createAndAddOperation(n.rdf_uri+"persist","persist");
104
+ persist.java_code="" # #{java_debug(%{log.debug("persisting referenced persistent elements");}\n}"
105
+ p=persist.umlx_createAndAddReturnParameter(persist.rdf_uri+'_ret',"return")
106
+ p.uml_type=n
107
+ persist.umlx_businessMethod=RDF_FALSE
108
108
 
109
109
  #v=n.umlx_createAndAddProperty(n.rdf_uri+"__source","source");
110
110
 
@@ -128,7 +128,7 @@ END
128
128
  u=d.rdf_type.kbjava_uml_model_element(@kbjava_umlSourceModel)
129
129
  p=n.umlx_createAndAddProperty(n.rdf_uri+d.rdf_uri,"#{d.kb_UML_INSTANCE_ALIAS}");
130
130
  p.uml_type=u
131
- p.uml_isReadOnly=RDF_TRUE
131
+ p.uml_isReadOnly=RDF_FALSE
132
132
  p.java_code="null"
133
133
 
134
134
  j="#{j}\n set#{p.java_NameBean}(source.get#{p.java_NameBean}());"
@@ -138,7 +138,7 @@ END
138
138
  m=n.umlx_createAndAddOperation(n.rdf_uri+"initData","initData")
139
139
  m.umlx_businessMethod=RDF_FALSE
140
140
  m.java_code="#{j} return this;"
141
- m.java_annotation_add(%{@SuppressWarnings("unused")})
141
+ #m.java_annotation_add(%{@SuppressWarnings("unused")})
142
142
  p=m.umlx_createAndAddReturnParameter(m.rdf_uri+'_ret',"return")
143
143
  p.uml_type=n
144
144
 
@@ -188,6 +188,7 @@ class ::Crdfs_Class
188
188
  # Create attributes and every init methods (body expected)
189
189
  uml_type.kb_coverage_add(self)
190
190
  p=umlDataClass.umlx_createAndAddProperty(umlDataClass.rdf_uri+kbjava_varName,kbjava_varName.to_s)
191
+ p.uml_isReadOnly=RDF_TRUE
191
192
  p.uml_type=uml_type
192
193
  p.uml_visibility= Cuml_VisibilityKind::Private
193
194
  #p.java_noAccessors=RDF_TRUE
@@ -212,8 +213,8 @@ class ::Crdfs_Class
212
213
  #p=self.kbjava_property_one
213
214
  i.java_code= <<ENDinit
214
215
  if(#{p.java_Name}==null){
215
- #{p.java_Name}= new #{uml_type.java_qualifiedName}();
216
- #{p.uml_type_one.java_qualifiedName} elt= #{p.java_Name};
216
+ #{p.uml_type_one.java_qualifiedName} elt= new #{uml_type.java_qualifiedName}();
217
+ #{p.java_Name}=elt;
217
218
  #{mtk_stss{kbjava_writeJavaObjectSetters(dataSource)}}
218
219
  }
219
220
  return #{p.java_Name};
@@ -359,6 +360,14 @@ class DatatypeMappingLong < DatatypeMappingOrdinal
359
360
  return valitem.gsub(/^0*([0-9])/,'\1')
360
361
  end
361
362
  end
363
+ class DatatypeMappingLongObject < DatatypeMappingOrdinal
364
+ # Protege string to Java code conversions
365
+ def prot_convertToJava(umlprop,valitem)
366
+ #Remove leading 0 (octal)
367
+ return %{new Long("#{valitem.gsub(/^0*([0-9])/,'\1')}")}
368
+ end
369
+ end
370
+
362
371
  class DatatypeMappingFile < DatatypeMapping
363
372
  # Protege string to Java code conversions
364
373
  def prot_convertToJava(umlprop,valitem)
@@ -20,8 +20,8 @@ require 'ontomde-java/struts/blob.rb'
20
20
  require 'ontomde-java/struts/reloadAction.rb'
21
21
  require 'ontomde-java/struts/xmlForm.rb'
22
22
  require 'ontomde-java/struts/spring.rb'
23
- require 'ontomde-java/struts/mappingForBean.rb'
24
23
  require 'ontomde-java/struts/mappingForJsp.rb'
25
24
  require 'ontomde-java/struts/mappingToJavaHierarchy.rb'
26
25
  require 'ontomde-java/struts/exceptionHandling.rb'
26
+ require 'ontomde-java/struts/mappingForBean.rb'
27
27
 
@@ -87,13 +87,14 @@ def writeMessagesFromModel(locale,fillFromModel=false,test=false)
87
87
  write "# Enumerations\n"
88
88
  write "# *********************\n"
89
89
  uml_Class_all.each {|c|
90
- next unless c.kind_of?(Muml_Enumeration)
91
- msg=c.java_enumAssignableDataType_inv.empty? ? "-- --" : "create and add"
92
- struts_writeMsgRes("#{c.java_qualifiedName}.#{::Muml_Property::NIL_LVB_RES_KEY}",msg,!fillFromModel,locale)
93
-
94
- c.uml_ownedLiteral.each {|ol|
95
- struts_writeMsgRes("#{c.java_qualifiedName}.#{ol.java_Name}",ol.to_s,!fillFromModel,locale)
90
+ if c.kind_of?(Muml_Enumeration)
91
+ java_genEnumMsgRes(c,fillFromModel,locale)
92
+ else
93
+ c.uml_nestedClassifier.each { |nc|
94
+ next unless nc.kind_of?(Muml_Enumeration)
95
+ java_genEnumMsgRes(nc,fillFromModel,locale)
96
96
  }
97
+ end
97
98
  }
98
99
 
99
100
  write "# *********************\n"
@@ -101,6 +102,14 @@ def writeMessagesFromModel(locale,fillFromModel=false,test=false)
101
102
  write "# *********************\n"
102
103
 
103
104
  end
105
+ def java_genEnumMsgRes(c,fillFromModel,locale)
106
+ msg=c.java_enumAssignableDataType_inv.empty? ? "-- --" : "create and add"
107
+ struts_writeMsgRes("#{c.java_qualifiedName}.#{::Muml_Property::NIL_LVB_RES_KEY}",msg,!fillFromModel,locale)
108
+
109
+ c.uml_ownedLiteral.each {|ol|
110
+ struts_writeMsgRes("#{c.java_qualifiedName}.#{ol.java_Name}",ol.to_s,!fillFromModel,locale)
111
+ }
112
+ end
104
113
 
105
114
  MESSAGE_RES_EN=<<ENDEN
106
115
  java.lang.Boolean.true=true
@@ -14,7 +14,7 @@ module Muml_Classifier
14
14
  #terminate local treatment and return control to calling controller.
15
15
  STRUTS_RETURN_ACTION="returnTo"
16
16
  #Resume local treatment avect geting control back from another controler.
17
- STRUTS_RESUME_ACTION="resume"
17
+ STRUTS_RESUME_ACTION="resumeAct"
18
18
 
19
19
  STRUTS_REFRESH_ACTION="executeRefresh"
20
20
  STRUTS_SGBD_STATE="sgbd_state"
@@ -75,7 +75,7 @@ ENDMETH
75
75
 
76
76
  def struts_addActionBiz!
77
77
  action=struts_createAndAddActionBase!
78
- struts_addStartEditAction!(action)
78
+ struts_addStartEditActionBiz!(action)
79
79
 
80
80
  struts_addsetTimeZoneAction!(action)
81
81
  struts_addsetSkinAction!(action)
@@ -114,6 +114,14 @@ ENDMETH
114
114
  end
115
115
 
116
116
  def struts_addProceedBizAction!(action)
117
+ # form contains a parameter generated from an operation return parameter
118
+ # if true, proceed has no return to display. Thus, return screen is skipped
119
+ hasMethodToClassReturn=false;
120
+ struts_formAttribute.each { |a|
121
+ hasMethodToClassReturn=a.java_isMethodToClassReturn?
122
+ break if hasMethodToClassReturn
123
+ }
124
+
117
125
  proceed=action.struts_createAndAddExecuteOperation(STRUTS_PROCEED_ACTION)
118
126
  proceed.java_code=<<ENDMETH
119
127
  #{struts_formCastJavaCode}
@@ -121,13 +129,28 @@ ENDMETH
121
129
  form.getReference().proceed();
122
130
  form.initFromReference();
123
131
  form.set#{STRUTS_DISPATCH_FIELD_METH}("#{STRUTS_CREATE_ACTION}");
124
- return new org.apache.struts.action.ActionForward("/pages/#{java_InternalFilePath}form/#{java_Name}#{STRUTS_RESULTS_FWD}.jsp",false);
132
+ #{!hasMethodToClassReturn ? "return returnTo(mapping, abstractForm, request, response);": %{return new org.apache.struts.action.ActionForward("/pages/#{java_InternalFilePath}form/#{java_Name}#{STRUTS_RESULTS_FWD}.jsp",false);}}
125
133
  ENDMETH
126
134
  end
127
135
 
128
136
  STRUTS_SESSION_KEY_EditAction="objToEdit"
137
+ JUMP_TO_PROCEED=<<ENDSKIP
138
+ if (form.getReference().get#{STRUTS_APPLY_TO_PROP}()!=null) {
139
+ //form contains only #{STRUTS_APPLY_TO_PROP} field and it is not null
140
+ //skip input screen and jump to #{STRUTS_PROCEED_ACTION}
141
+ return #{STRUTS_PROCEED_ACTION}(mapping, abstractForm, request, response);
142
+ }
143
+ ENDSKIP
129
144
 
130
- def struts_addStartEditAction!(action)
145
+ def struts_addStartEditActionBiz!(action)
146
+ #puts "############# #{uml_name} #{struts_formAttribute.length}"
147
+ # add code to skip input screen when no user input is necessary
148
+ # (first attribute is applyTo)
149
+ optCode= struts_formAttribute(false,true).length > 0 ? '' : JUMP_TO_PROCEED
150
+ return struts_addStartEditAction!(action,optCode)
151
+ end
152
+
153
+ def struts_addStartEditAction!(action,optCode="")
131
154
  edit=action.struts_createAndAddExecuteOperation(STRUTS_ACTION_STARTEDIT)
132
155
  edit.java_code= <<ENDCODE
133
156
  #{struts_formCastJavaCode}
@@ -136,7 +159,7 @@ ENDMETH
136
159
  session.removeAttribute("#{STRUTS_SESSION_KEY_EditAction}");
137
160
  form.setReference(obj);
138
161
  form.initFromReference();
139
- form.setSgbd_state("#{STRUTS_UPDATE_ACTION}");
162
+ form.setSgbd_state("#{STRUTS_UPDATE_ACTION}"); #{optCode}
140
163
  return mapping.findForward("#{STRUTS_INPUT_FWD}");
141
164
  ENDCODE
142
165
  end
@@ -250,6 +273,14 @@ ENDCODE
250
273
  end
251
274
 
252
275
 
276
+ PROCEED_ACTION_CODE=<<ENDTPL
277
+ String msg="unexpected value for #{STRUTS_SGBD_STATE_PROP} in #{STRUTS_PROCEED_ACTION}";
278
+ log.error(msg);
279
+ org.apache.struts.action.ActionErrors ae=new org.apache.struts.action.ActionErrors();
280
+ ae.add("Error processing request",new org.apache.struts.action.ActionMessage("errors.ioException",msg));
281
+ saveErrors(request, ae);
282
+ return mapping.findForward("#{STRUTS_INPUT_FWD}");
283
+ ENDTPL
253
284
 
254
285
  def struts_addProceedAction!(action)
255
286
  proca=action.struts_createAndAddExecuteOperation(STRUTS_PROCEED_ACTION)
@@ -261,14 +292,7 @@ String s=form.get#{STRUTS_SGBD_STATE_PROP}();
261
292
  [STRUTS_NEW_ACTION,STRUTS_CREATE_ACTION,STRUTS_UPDATE_ACTION,STRUTS_READ_ACTION,STRUTS_DELETE_ACTION].each {|m|
262
293
  j=j+%{if(s.compareTo("#{m}")==0) { return #{m}(mapping,form,request,response); }\n}
263
294
  }
264
- j=j+%{
265
- String msg="unexpected value for #{STRUTS_SGBD_STATE_PROP} in #{STRUTS_PROCEED_ACTION}";
266
- log.error(msg);
267
- org.apache.struts.action.ActionErrors ae=new org.apache.struts.action.ActionErrors();
268
- ae.add("Error processing request",new org.apache.struts.action.ActionMessage("errors.ioException",msg));
269
- saveErrors(request, ae);
270
- return mapping.findForward("#{STRUTS_INPUT_FWD}");
271
- }
295
+ j=j+PROCEED_ACTION_CODE
272
296
  proca.java_code=j
273
297
  end
274
298
 
@@ -46,7 +46,7 @@ module Muml_Classifier
46
46
  }
47
47
  end
48
48
  #every attribute meant to appear in the form.
49
- def struts_formAttribute(ignoreDbId=false)
49
+ def struts_formAttribute(ignoreDbId=false,ignoreApplyToOrReturn=false)
50
50
  #tab=context[:struts_tab,nil]
51
51
 
52
52
  ret=Array.new
@@ -55,6 +55,7 @@ module Muml_Classifier
55
55
  cgi.each { |c|
56
56
  c.uml_ownedAttribute.each { |a|
57
57
  next if a.struts_ignoreInForm?(ignoreDbId)
58
+ next if ignoreApplyToOrReturn && a.java_isMethodToClassApplyToOrReturn?
58
59
  ret << a
59
60
  }
60
61
  }
@@ -159,15 +160,20 @@ module Muml_Classifier
159
160
  #log.debug{ "addCopyTo #{self}" }
160
161
  form=struts_actionForm_one
161
162
  cpt=form.umlx_createAndAddOperation(form.rdf_uri+"_copyTo","copyTo")
162
- cpt.java_annotation_add(%{@SuppressWarnings("unused")})
163
+ #cpt.java_annotation_add(%{@SuppressWarnings("unused")})
163
164
  pcpt=cpt.umlx_createAndAddParameter(cpt.rdf_uri+"_to","_to")
164
165
  pcpt.uml_direction=Cuml_ParameterDirectionKind::Inout
165
166
  pcpt.uml_type=self
166
167
  code="java.util.TimeZone currentTimeZone = java.util.TimeZone.getTimeZone(get#{STRUTS_SETTIMEZONE_BEAN}());"
168
+ code=code+"if(currentTimeZone==null) {}\n" # quick hack to avoid unused/not unused warning
167
169
  struts_formAttribute.each { |a|
168
- code=code+"if(this.get#{a.java_NameBean}()!=null) {\n " if(STRUTS_ACCEPT_NULL_FIELD_IN_FORMS)
169
- code=code+"#{DatatypeMapping.instance.getMapping(a.uml_type_one).getFormCopyTo(a)}"
170
- code=code+" }//test !=null\n" if(STRUTS_ACCEPT_NULL_FIELD_IN_FORMS)
170
+ if(a.uml_isReadOnly?)
171
+ code=code+"\t\/\/ a.java_NameBean (read-only)\n"
172
+ else
173
+ code=code+"if(this.get#{a.java_NameBean}()!=null) {\n " if(STRUTS_ACCEPT_NULL_FIELD_IN_FORMS)
174
+ code=code+"#{DatatypeMapping.instance.getMapping(a.uml_type_one).getFormCopyTo(a)}"
175
+ code=code+" }//test !=null\n" if(STRUTS_ACCEPT_NULL_FIELD_IN_FORMS)
176
+ end
171
177
  }
172
178
 
173
179
  cpt.java_code=code
@@ -194,7 +200,7 @@ module Muml_Classifier
194
200
  def struts_addInitFrom!
195
201
  form=struts_actionForm_one
196
202
  inf=form.umlx_createAndAddOperation(form.rdf_uri+"_initFrom","initFrom")
197
- inf.java_annotation_add(%{@SuppressWarnings("unused")})
203
+ #inf.java_annotation_add(%{@SuppressWarnings("unused")})
198
204
  pinf=inf.umlx_createAndAddParameter(inf.rdf_uri+"_from","_from")
199
205
  pinf.uml_type=self
200
206
  pinf.uml_direction=Cuml_ParameterDirectionKind::In
@@ -277,9 +283,14 @@ module Muml_Property
277
283
  struts_addActionFormAttributeEnumeration!(form)
278
284
  elsif uml_type_one.kind_of?(Muml_DataType)
279
285
  a2=struts_copyAsFormField!(form)
280
- #a2.uml_type=form.umlx_dataType_string
286
+
287
+ #Force cardinality to one (array of primitive is handeld has multi-line text)
288
+ a2.uml_upperValue=form.umlx_literal(1)
289
+
281
290
  tpl=DatatypeMapping.instance.getMapping(uml_type_one)
282
291
  a2.uml_type=tpl.getFormType(form)
292
+
293
+
283
294
  else
284
295
  struts_addActionFormAttributeReference!(form)
285
296
 
@@ -431,6 +442,85 @@ public static java.util.List<#{STRUTS_LVB}> #{STRUTS_FORM_HELPER_ENUMTOLVB}(fina
431
442
  throw(e);
432
443
  }
433
444
  }
445
+ @SuppressWarnings("unchecked")
446
+ public static <T> java.util.Set<T> toBean(T[] t, java.util.Set<T> nullCast) {
447
+ java.util.Set<T> ret = null;
448
+ if (t != null) {
449
+ ret = (java.util.Set<T>) new java.util.HashSet<T>();
450
+ for (int i = 0; i < t.length; i++) {
451
+ ret.add(t[i]);
452
+ }
453
+ }
454
+ return ret;
455
+ }
456
+
457
+ @SuppressWarnings("unchecked")
458
+ public static <T> java.util.List<T> toBean(T[] t, java.util.List<T> nullCast) {
459
+ java.util.List<T> ret = null;
460
+ if (t != null) {
461
+ // alternative: java.util.Arrays.asList
462
+
463
+ ret = (java.util.List<T>) new java.util.ArrayList<T>();
464
+ for (int i = 0; i < t.length; i++) {
465
+ ret.add(t[i]);
466
+ }
467
+ }
468
+ return ret;
469
+ }
470
+
471
+ public static boolean toBean(String t, boolean nullCast) {
472
+ return t.compareTo("true") == 0;
473
+ }
474
+
475
+ public static String toForm(boolean t) {
476
+ return t ? "true" : "false";
477
+ }
478
+
479
+ @SuppressWarnings("unchecked")
480
+ public static <T> T[] toForm(java.util.Set<T> t) {
481
+ return (T[]) t.toArray();
482
+ }
483
+
484
+ @SuppressWarnings("unchecked")
485
+ public static <T> T[] toForm(java.util.List<T> t) {
486
+ return (T[]) t.toArray();
487
+ }
488
+
489
+ /**
490
+ * Map an array of value to a multi-line text
491
+ * (meant for string[])
492
+ * @param <T>
493
+ * @param t
494
+ * @return
495
+ */
496
+ @SuppressWarnings("unchecked")
497
+ public static <T> String toFormArrayAsStringLine(java.util.Collection<T> t) {
498
+ java.lang.StringBuffer sb=new java.lang.StringBuffer();
499
+ for (java.util.Iterator iterator = t.iterator(); iterator.hasNext();) {
500
+ T t2 = (T) iterator.next();
501
+ sb.append(t2.toString());
502
+ sb.append(ARRAY_SEPARATOR);
503
+ }
504
+ return sb.toString();
505
+ }
506
+
507
+
508
+ public static String ARRAY_SEPARATOR="\\n";
509
+
510
+ @SuppressWarnings("unchecked")
511
+ public static java.util.Set<String> toBean(String t, java.util.Set<String> nullCast) {
512
+ java.util.Set<String> ret = null;
513
+ if (t != null) {
514
+ String[] tline=t.split(ARRAY_SEPARATOR);
515
+ ret = (java.util.Set<String>) new java.util.HashSet<String>();
516
+ for (int i = 0; i < tline.length; i++) {
517
+ ret.add(tline[i]);
518
+ }
519
+ }
520
+ return ret;
521
+ }
522
+
523
+
434
524
  ENDCODE
435
525
 
436
526
  def struts_getFormHelper