Skip to content

Commit 99de930

Browse files
committed
Issue #3. Check for property customization in the class as wel as in the
property itself.
1 parent 85ade45 commit 99de930

File tree

1 file changed

+115
-83
lines changed

1 file changed

+115
-83
lines changed

basic/src/main/java/org/jvnet/jaxb2_commons/plugin/simplify/SimplifyPlugin.java

Lines changed: 115 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.jvnet.jaxb2_commons.plugin.simplify;
22

3+
import java.text.MessageFormat;
34
import java.util.ArrayList;
45
import java.util.Arrays;
56
import 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

Comments
 (0)