ontomde-java 2.0.0 → 2.0.4

Sign up to get free protection for your applications and to get access to all the features.
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