Skip to content

Commit 85ade45

Browse files
committed
Issue #3. Added methods to check property customization in the property
itself or in the class customizations.
1 parent ca8f771 commit 85ade45

File tree

1 file changed

+91
-0
lines changed

1 file changed

+91
-0
lines changed

tools/src/main/java/org/jvnet/jaxb2_commons/util/CustomizationUtils.java

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.w3c.dom.Document;
2323
import org.w3c.dom.Element;
2424
import org.w3c.dom.Node;
25+
import org.w3c.dom.NodeList;
2526

2627
import com.sun.tools.xjc.model.CAttributePropertyInfo;
2728
import com.sun.tools.xjc.model.CClassInfo;
@@ -197,6 +198,88 @@ && fixNull(pluginCustomization.element.getLocalName())
197198
return pluginCustomizations;
198199
}
199200

201+
public static List<CPluginCustomization> findPropertyCustomizationsInPropertyAndClass(
202+
CPropertyInfo propertyInfo, QName propertyCustomizationName,
203+
QName customizationName) {
204+
205+
final List<CPluginCustomization> foundPropertyCustomizations = new LinkedList<CPluginCustomization>();
206+
foundPropertyCustomizations
207+
.addAll(findPropertyCustomizationsInProperty(propertyInfo,
208+
customizationName));
209+
if (propertyInfo.parent() instanceof CClassInfo) {
210+
foundPropertyCustomizations
211+
.addAll(findPropertyCustomizationsInClass(
212+
(CClassInfo) propertyInfo.parent(), propertyInfo,
213+
propertyCustomizationName, customizationName));
214+
}
215+
return foundPropertyCustomizations;
216+
}
217+
218+
public static List<CPluginCustomization> findPropertyCustomizationsInProperty(
219+
CPropertyInfo propertyInfo, QName name) {
220+
221+
final List<CPluginCustomization> foundPropertyCustomizations = new LinkedList<CPluginCustomization>();
222+
223+
final List<CPluginCustomization> propertyCustomizations = CustomizationUtils
224+
.getCustomizations(propertyInfo);
225+
226+
for (CPluginCustomization propertyCustomization : propertyCustomizations) {
227+
if (fixNull(propertyCustomization.element.getNamespaceURI())
228+
.equals(name.getNamespaceURI())
229+
&& fixNull(propertyCustomization.element.getLocalName())
230+
.equals(name.getLocalPart())) {
231+
propertyCustomization.markAsAcknowledged();
232+
foundPropertyCustomizations.add(propertyCustomization);
233+
}
234+
}
235+
return foundPropertyCustomizations;
236+
}
237+
238+
public static List<CPluginCustomization> findPropertyCustomizationsInClass(
239+
CClassInfo classInfo, CPropertyInfo propertyInfo,
240+
QName propertyCustomizationName, QName customizationName) {
241+
242+
final List<CPluginCustomization> foundPropertyCustomizations = new LinkedList<CPluginCustomization>();
243+
244+
final List<CPluginCustomization> classCustomizations = CustomizationUtils
245+
.getCustomizations(classInfo);
246+
247+
for (CPluginCustomization classCustomization : classCustomizations) {
248+
if (fixNull(classCustomization.element.getNamespaceURI()).equals(
249+
propertyCustomizationName.getNamespaceURI())
250+
&& fixNull(classCustomization.element.getLocalName())
251+
.equals(propertyCustomizationName.getLocalPart())
252+
&& propertyInfo.getName(false).equals(
253+
classCustomization.element.getAttribute("name"))) {
254+
255+
final Element classCustomizationElement = classCustomization.element;
256+
257+
final NodeList nodes = classCustomizationElement
258+
.getChildNodes();
259+
final int length = nodes.getLength();
260+
for (int index = 0; index < length; index++) {
261+
final Node node = nodes.item(index);
262+
if (node.getNodeType() == Node.ELEMENT_NODE) {
263+
final Element element = (Element) node;
264+
if (fixNull(element.getNamespaceURI()).equals(
265+
customizationName.getNamespaceURI())
266+
&& fixNull(element.getLocalName()).equals(
267+
customizationName.getLocalPart())) {
268+
269+
classCustomization.markAsAcknowledged();
270+
final CPluginCustomization propertyCustomization = new CPluginCustomization(
271+
element, classCustomization.locator);
272+
propertyCustomization.markAsAcknowledged();
273+
foundPropertyCustomizations
274+
.add(propertyCustomization);
275+
}
276+
}
277+
}
278+
}
279+
}
280+
return foundPropertyCustomizations;
281+
}
282+
200283
public static List<CPluginCustomization> findCustomizations(
201284
CEnumLeafInfo enumInfo, QName name) {
202285
final CCustomizations customizations = CustomizationUtils
@@ -328,6 +411,14 @@ public static boolean containsCustomization(CPropertyInfo propertyInfo,
328411
return customization != null;
329412
}
330413

414+
public static boolean containsPropertyCustomizationInPropertyOrClass(
415+
CPropertyInfo propertyInfo, QName propertyCustomizationName,
416+
QName customizationName) {
417+
final List<CPluginCustomization> foundPropertyCustomizations = findPropertyCustomizationsInPropertyAndClass(
418+
propertyInfo, propertyCustomizationName, customizationName);
419+
return !foundPropertyCustomizations.isEmpty();
420+
}
421+
331422
public static CPluginCustomization findCustomization(
332423
FieldOutline fieldOutline, QName name) {
333424
final CCustomizations customizations = CustomizationUtils

0 commit comments

Comments
 (0)