11package org .jvnet .jaxb2_commons .plugin .simplify ;
22
3+ import java .text .MessageFormat ;
34import java .util .ArrayList ;
45import java .util .Arrays ;
56import java .util .Collection ;
@@ -61,7 +62,9 @@ public void setIgnoring(Ignoring ignoring) {
6162 @ Override
6263 public Collection <QName > getCustomizationElementNames () {
6364 return Arrays
64- .asList (org .jvnet .jaxb2_commons .plugin .simplify .Customizations .AS_ELEMENT_PROPERTY_ELEMENT_NAME ,
65+ .asList (
66+ org .jvnet .jaxb2_commons .plugin .simplify .Customizations .PROPERTY_ELEMENT_NAME ,
67+ org .jvnet .jaxb2_commons .plugin .simplify .Customizations .AS_ELEMENT_PROPERTY_ELEMENT_NAME ,
6568 org .jvnet .jaxb2_commons .plugin .simplify .Customizations .AS_REFERENCE_PROPERTY_ELEMENT_NAME ,
6669 org .jvnet .jaxb2_commons .plugin .simplify .Customizations .IGNORED_ELEMENT_NAME ,
6770 Customizations .IGNORED_ELEMENT_NAME ,
@@ -110,97 +113,122 @@ public Void onReference(CReferencePropertyInfo p) {
110113
111114 private void postProcessElementPropertyInfo (final Model model ,
112115 final CClassInfo classInfo , CElementPropertyInfo property ) {
113- if (property .isCollection () && property .getTypes ().size () > 1 ) {
114- if (CustomizationUtils
115- .containsCustomization (
116- property ,
117- org .jvnet .jaxb2_commons .plugin .simplify .Customizations .AS_ELEMENT_PROPERTY_ELEMENT_NAME )) {
118- simplifyElementPropertyInfoAsElementPropertyInfo (model ,
119- classInfo , property );
120- }
116+ if (CustomizationUtils
117+ .containsPropertyCustomizationInPropertyOrClass (
118+ property ,
119+ org .jvnet .jaxb2_commons .plugin .simplify .Customizations .PROPERTY_ELEMENT_NAME ,
120+ org .jvnet .jaxb2_commons .plugin .simplify .Customizations .AS_ELEMENT_PROPERTY_ELEMENT_NAME )) {
121+ simplifyElementPropertyInfoAsElementPropertyInfo (model , classInfo ,
122+ property );
121123 }
122124 }
123125
124126 private void postProcessReferencePropertyInfo (final Model model ,
125127 final CClassInfo classInfo , CReferencePropertyInfo property ) {
126- if (property . isCollection () && property . getElements (). size () > 1 ) {
127- if ( CustomizationUtils
128- . containsCustomization (
129- property ,
130- org .jvnet .jaxb2_commons .plugin .simplify .Customizations .AS_ELEMENT_PROPERTY_ELEMENT_NAME )) {
131- simplifyReferencePropertyInfoAsElementPropertyInfo (model ,
132- classInfo , property );
133- } else if (CustomizationUtils
134- . containsCustomization (
135- property ,
136- org .jvnet .jaxb2_commons .plugin .simplify .Customizations .AS_REFERENCE_PROPERTY_ELEMENT_NAME )) {
137- simplifyReferencePropertyInfoAsReferencePropertyInfo ( model ,
138- classInfo , property );
139- }
128+ if (CustomizationUtils
129+ . containsPropertyCustomizationInPropertyOrClass (
130+ property ,
131+ org . jvnet . jaxb2_commons . plugin . simplify . Customizations . PROPERTY_ELEMENT_NAME ,
132+ org .jvnet .jaxb2_commons .plugin .simplify .Customizations .AS_ELEMENT_PROPERTY_ELEMENT_NAME )) {
133+ simplifyReferencePropertyInfoAsElementPropertyInfo (model ,
134+ classInfo , property );
135+ } else if (CustomizationUtils
136+ . containsPropertyCustomizationInPropertyOrClass (
137+ property ,
138+ org .jvnet .jaxb2_commons .plugin .simplify .Customizations .PROPERTY_ELEMENT_NAME ,
139+ org . jvnet . jaxb2_commons . plugin . simplify . Customizations . AS_REFERENCE_PROPERTY_ELEMENT_NAME )) {
140+ simplifyReferencePropertyInfoAsReferencePropertyInfo ( model ,
141+ classInfo , property );
140142 }
141143 }
142144
143145 private void simplifyElementPropertyInfoAsElementPropertyInfo (
144146 final Model model , final CClassInfo classInfo ,
145147 CElementPropertyInfo property ) {
146- int index = classInfo .getProperties ().indexOf (property );
147- for (CTypeRef typeRef : property .getTypes ()) {
148- final CElementPropertyInfo elementPropertyInfo = createElementPropertyInfo (
149- model , property , typeRef );
150- classInfo .getProperties ().add (index ++, elementPropertyInfo );
148+ if (property .getTypes ().size () > 1 ) {
149+ logger .debug (MessageFormat
150+ .format ("Element property [{0}] has several types and will be simplified." ,
151+ property .getName (false )));
152+ int index = classInfo .getProperties ().indexOf (property );
153+ for (CTypeRef typeRef : property .getTypes ()) {
154+ final CElementPropertyInfo elementPropertyInfo = createElementPropertyInfo (
155+ model , property , typeRef );
156+ classInfo .getProperties ().add (index ++, elementPropertyInfo );
157+ }
158+ classInfo .getProperties ().remove (property );
159+ } else {
160+ logger .warn (MessageFormat
161+ .format ("Element property [{0}] will not be simplified as it does not contain multiple types." ,
162+ property .getName (false )));
151163 }
152- classInfo .getProperties ().remove (property );
153164 }
154165
155166 private void simplifyReferencePropertyInfoAsReferencePropertyInfo (
156167 final Model model , final CClassInfo classInfo ,
157168 CReferencePropertyInfo property ) {
158- int index = classInfo .getProperties ().indexOf (property );
159- for (CElement element : property .getElements ()) {
160- final CReferencePropertyInfo referencePropertyInfo = createReferencePropertyInfo (
161- model , property , element );
162- classInfo .getProperties ().add (index ++, referencePropertyInfo );
163- }
164- if (property .isMixed ()) {
165- classInfo .getProperties ().add (index ++,
166- createContentReferencePropertyInfo (model , property ));
169+ if (property .getElements ().size () <= 1 && !property .isMixed ()) {
170+ logger .warn (MessageFormat
171+ .format ("Element reference property [{0}] will not be simplified as it does not contain multiple elements and is not mixed." ,
172+ property .getName (false )));
173+ } else {
174+ logger .debug (MessageFormat
175+ .format ("Element reference property [{0}] contains multiple elements or is mixed and will be simplified." ,
176+ property .getName (false )));
177+ int index = classInfo .getProperties ().indexOf (property );
178+ for (CElement element : property .getElements ()) {
179+ final CReferencePropertyInfo referencePropertyInfo = createReferencePropertyInfo (
180+ model , property , element );
181+ classInfo .getProperties ().add (index ++, referencePropertyInfo );
182+ }
183+ if (property .isMixed ()) {
184+ classInfo .getProperties ().add (index ++,
185+ createContentReferencePropertyInfo (model , property ));
186+ }
187+ classInfo .getProperties ().remove (property );
167188 }
168- classInfo .getProperties ().remove (property );
169189 }
170190
171191 private void simplifyReferencePropertyInfoAsElementPropertyInfo (
172192 final Model model , final CClassInfo classInfo ,
173193 CReferencePropertyInfo property ) {
174- int index = classInfo .getProperties ().indexOf (property );
175- for (CElement element : property .getElements ()) {
176- final CElementPropertyInfo elementPropertyInfo ;
177- if (element instanceof CElementInfo ) {
178- elementPropertyInfo = createElementPropertyInfo (model ,
179- property , element , (CElementInfo ) element );
180- } else if (element instanceof CClassInfo ) {
181- elementPropertyInfo = createElementPropertyInfo (model ,
182- property , element , (CClassInfo ) element );
183-
184- } else if (element instanceof CClassRef ) {
185- // elementPropertyInfo = createElementPropertyInfo(model,
186- // element,
187- // (CClassRef) element);
188- elementPropertyInfo = null ;
189- // TODO WARN
190-
191- } else {
192- // TODO WARN
193- elementPropertyInfo = null ;
194+
195+ if (property .getElements ().size () <= 1 && !property .isMixed ()) {
196+ logger .warn (MessageFormat
197+ .format ("Element reference property [{0}] will not be simplified as it does not contain multiple elements and is not mixed." ,
198+ property .getName (false )));
199+ } else {
200+ logger .debug (MessageFormat
201+ .format ("Element reference property [{0}] contains multiple elements or is mixed and will be simplified." ,
202+ property .getName (false )));
203+ int index = classInfo .getProperties ().indexOf (property );
204+ for (CElement element : property .getElements ()) {
205+ final CElementPropertyInfo elementPropertyInfo ;
206+ if (element instanceof CElementInfo ) {
207+ elementPropertyInfo = createElementPropertyInfo (model ,
208+ property , element , (CElementInfo ) element );
209+ } else if (element instanceof CClassInfo ) {
210+ elementPropertyInfo = createElementPropertyInfo (model ,
211+ property , element , (CClassInfo ) element );
212+
213+ } else if (element instanceof CClassRef ) {
214+ elementPropertyInfo = createElementPropertyInfo (model ,
215+ property , element , (CClassRef ) element );
216+ } else {
217+ // TODO WARN
218+ elementPropertyInfo = null ;
219+ logger .error (MessageFormat .format (
220+ "Unsupported CElement type [{0}]." , element ));
221+ }
222+ if (elementPropertyInfo != null ) {
223+ classInfo .getProperties ().add (index ++, elementPropertyInfo );
224+ }
194225 }
195- if (elementPropertyInfo != null ) {
196- classInfo .getProperties ().add (index ++, elementPropertyInfo );
226+ if (property .isMixed ()) {
227+ classInfo .getProperties ().add (index ++,
228+ createContentReferencePropertyInfo (model , property ));
197229 }
230+ classInfo .getProperties ().remove (property );
198231 }
199- if (property .isMixed ()) {
200- classInfo .getProperties ().add (index ++,
201- createContentReferencePropertyInfo (model , property ));
202- }
203- classInfo .getProperties ().remove (property );
204232 }
205233
206234 private CElementPropertyInfo createElementPropertyInfo (final Model model ,
@@ -236,27 +264,30 @@ private CElementPropertyInfo createElementPropertyInfo(final Model model,
236264 return elementPropertyInfo ;
237265 }
238266
239- // private CElementPropertyInfo createElementPropertyInfo(final Model model,
240- // CElement element, final CClassRef cr) {
241- // final CElementPropertyInfo elementPropertyInfo;
242- // final String propertyName = createPropertyName(model, element);
243- // elementPropertyInfo = new CElementPropertyInfo(propertyName,
244- // CollectionMode.REPEATED_ELEMENT, ID.NONE, null,
245- // element.getSchemaComponent(), element.getCustomizations(),
246- // element.getLocator(), false);
247- // elementPropertyInfo.getTypes().add(
248- // new CTypeRef(cr, element.getElementName(), cr.getTypeName(),
249- // false, null));
250- // return elementPropertyInfo;
251- // }
267+ private CElementPropertyInfo createElementPropertyInfo (final Model model ,
268+ CReferencePropertyInfo property , CElement element ,
269+ final CClassRef classInfo ) {
270+ final CElementPropertyInfo elementPropertyInfo ;
271+ final String propertyName = createPropertyName (model , element );
272+ elementPropertyInfo = new CElementPropertyInfo (propertyName ,
273+ property .isCollection () ? CollectionMode .REPEATED_ELEMENT
274+ : CollectionMode .NOT_REPEATED , ID .NONE , null ,
275+ element .getSchemaComponent (), element .getCustomizations (),
276+ element .getLocator (), false );
277+ elementPropertyInfo .getTypes ().add (
278+ new CTypeRef (classInfo , element .getElementName (), classInfo
279+ .getTypeName (), false , null ));
280+ return elementPropertyInfo ;
281+ }
252282
253283 private CReferencePropertyInfo createReferencePropertyInfo (
254284 final Model model , CReferencePropertyInfo property , CElement element ) {
255285 final String propertyName = createPropertyName (model , element );
256286 final CReferencePropertyInfo referencePropertyInfo = new CReferencePropertyInfo (
257- propertyName , property .isCollection (), false , false ,
258- element .getSchemaComponent (), element .getCustomizations (),
259- element .getLocator (), property .isDummy (), property .isContent (),
287+ propertyName , property .isCollection (), /* required */ false ,/* mixed */
288+ false , element .getSchemaComponent (),
289+ element .getCustomizations (), element .getLocator (),
290+ property .isDummy (), property .isContent (),
260291 property .isMixedExtendedCust ());
261292 referencePropertyInfo .getElements ().add (element );
262293 return referencePropertyInfo ;
@@ -266,7 +297,8 @@ private CReferencePropertyInfo createContentReferencePropertyInfo(
266297 final Model model , CReferencePropertyInfo property ) {
267298 final String propertyName = "content" ;
268299 final CReferencePropertyInfo referencePropertyInfo = new CReferencePropertyInfo (
269- propertyName , true , false , true , property .getSchemaComponent (),
300+ propertyName , /* collection */ true , /* required */ false , /* mixed */
301+ true , property .getSchemaComponent (),
270302 property .getCustomizations (), property .getLocator (), false ,
271303 true , property .isMixedExtendedCust ());
272304 return referencePropertyInfo ;
0 commit comments