//
// Copyright (c)1998-2011 Pearson Education, Inc. or its affiliate(s).
// All rights reserved.
//
package openadk.library.tools.xpath;
import openadk.library.*;
import org.apache.commons.jxpath.ri.QName;
import org.apache.commons.jxpath.ri.model.NodePointer;
/**
* Implements an XPath iterator for attributes on SIF Elements
*
* @author Andrew Elmhorst
* @version ADK 2.0
*
*/
class ADKAttributeIterator extends ADKNodeIterator {
/**
* Creates an ADK Attribute Iterator
*
* @param parent
* @param name
*/
ADKAttributeIterator(SIFElementPointer parent, QName name) {
super(parent);
SIFVersion version = parent.getVersion();
SIFElement node = (SIFElement) parent.getNode();
String simpleName = name.getName();
if (simpleName.equals("*")) {
// Capture all fields
for (SimpleField field : node.getFields()) {
ElementDef fieldDef = field.getElementDef();
if (fieldDef.isSupported(version)
&& fieldDef.isAttribute(version)) {
this.addNodeToIterate(field);
}
}
} else {
for( SimpleField sf : node.getFields() ){
ElementDef def = sf.getElementDef();
ElementVersionInfo evi = def.getVersionInfo( parent.getVersion() );
if( evi == null ){
// This element or attribute does not exist in this version of SIF
continue;
}
if( evi.isAttribute() && simpleName.equals( evi.getTag() ) )
{
this.addNodeToIterate( sf );
}
}
}
}
/*
* (non-Javadoc)
*
* @see custom.ADKNodeIterator#getNodePointer(custom.SIFElementPointer,
* openadk.library.Element)
*/
@Override
protected NodePointer getNodePointer(SIFElementPointer parent,
Element element) {
return SimpleFieldPointer.create(parent, (SimpleField) element);
}
}