@@ -68,6 +68,10 @@ protected void createPropertyMethods(JavaSource<?> javaEntity, PropertyModelWith
6868 createGetter (javaEntity , propertyWithOrigin );
6969 createSetter (javaEntity , propertyWithOrigin );
7070 createUnionFactoryMethods (javaEntity , propertyWithOrigin );
71+ } else if (isUnionList (property ) || isUnionMap (property )) {
72+ createGetter (javaEntity , propertyWithOrigin );
73+ createSetter (javaEntity , propertyWithOrigin );
74+ createUnionFactoryMethods (javaEntity , propertyWithOrigin );
7175 } else {
7276 warn ("Failed to create methods (not yet implemented) for property '" + property .getName () + "' of entity: " + javaEntity .getQualifiedName ());
7377 }
@@ -97,6 +101,20 @@ protected void createGetter(JavaSource<?> javaEntity, PropertyModelWithOrigin pr
97101 UnionPropertyType ut = new UnionPropertyType (property .getType ());
98102 ut .addImportsTo (javaEntity );
99103 method .setReturnType (ut .toJavaTypeString ());
104+ } else if (isUnionList (property )) {
105+ // Handle [Union] -> List<UnionType>
106+ PropertyType unionType = property .getType ().getNested ().iterator ().next ();
107+ UnionPropertyType ut = new UnionPropertyType (unionType );
108+ ut .addImportsTo (javaEntity );
109+ javaEntity .addImport (java .util .List .class );
110+ method .setReturnType ("List<" + ut .toJavaTypeString () + ">" );
111+ } else if (isUnionMap (property )) {
112+ // Handle {Union} -> Map<String, UnionType>
113+ PropertyType unionType = property .getType ().getNested ().iterator ().next ();
114+ UnionPropertyType ut = new UnionPropertyType (unionType );
115+ ut .addImportsTo (javaEntity );
116+ javaEntity .addImport (java .util .Map .class );
117+ method .setReturnType ("Map<String, " + ut .toJavaTypeString () + ">" );
100118 } else {
101119 String propertyOriginNS = propertyWithOrigin .getOrigin ().getNamespace ().fullName ();
102120
@@ -125,6 +143,20 @@ protected void createSetter(JavaSource<?> javaEntity, PropertyModelWithOrigin pr
125143 UnionPropertyType ut = new UnionPropertyType (property .getType ());
126144 ut .addImportsTo (javaEntity );
127145 method .addParameter (ut .toJavaTypeString (), "value" );
146+ } else if (isUnionList (property )) {
147+ // Handle [Union] -> List<UnionType>
148+ PropertyType unionType = property .getType ().getNested ().iterator ().next ();
149+ UnionPropertyType ut = new UnionPropertyType (unionType );
150+ ut .addImportsTo (javaEntity );
151+ javaEntity .addImport (java .util .List .class );
152+ method .addParameter ("List<" + ut .toJavaTypeString () + ">" , "value" );
153+ } else if (isUnionMap (property )) {
154+ // Handle {Union} -> Map<String, UnionType>
155+ PropertyType unionType = property .getType ().getNested ().iterator ().next ();
156+ UnionPropertyType ut = new UnionPropertyType (unionType );
157+ ut .addImportsTo (javaEntity );
158+ javaEntity .addImport (java .util .Map .class );
159+ method .addParameter ("Map<String, " + ut .toJavaTypeString () + ">" , "value" );
128160 } else {
129161 JavaType jt = new JavaType (property .getType (), propertyOriginNS );
130162 jt .addImportsTo (javaEntity );
@@ -327,7 +359,19 @@ protected void createInsertMethod(JavaSource<?> javaEntity, PropertyModelWithOri
327359 */
328360 private void createUnionFactoryMethods (JavaSource <?> javaEntity , PropertyModelWithOrigin propertyWithOrigin ) {
329361 PropertyModel property = propertyWithOrigin .getProperty ();
330- UnionPropertyType ut = new UnionPropertyType (property .getType ());
362+ PropertyType unionType ;
363+
364+ // Extract the union type - it might be directly a union, or wrapped in a list/map
365+ if (property .getType ().isUnion ()) {
366+ unionType = property .getType ();
367+ } else if ((property .getType ().isList () || property .getType ().isMap ()) &&
368+ property .getType ().getNested ().iterator ().next ().isUnion ()) {
369+ unionType = property .getType ().getNested ().iterator ().next ();
370+ } else {
371+ return ;
372+ }
373+
374+ UnionPropertyType ut = new UnionPropertyType (unionType );
331375 ut .getNestedTypes ().forEach (nestedType -> {
332376 if (nestedType .isEntityType ()) {
333377 createFactoryMethod (javaEntity , nestedType );
0 commit comments