//
// Copyright (c)1998-2011 Pearson Education, Inc. or its affiliate(s).
// All rights reserved.
//
package openadk.library.tools.xpath;
import java.util.Locale;
import openadk.library.ADK;
import openadk.library.SIFElement;
import openadk.library.SIFFormatter;
import openadk.library.SIFVersion;
import openadk.util.ADKStringUtils;
import org.apache.commons.jxpath.ri.QName;
import org.apache.commons.jxpath.ri.model.NodePointer;
import org.apache.commons.jxpath.ri.model.NodePointerFactory;
/**
* Creates new instances of ElementPointers when building XPaths
*
* @author Andrew Elmhorst
* @version ADK 2.0
*/
class ElementPointerFactory implements NodePointerFactory {
/**
* Creates a new instance of ElementPointerFactory
*/
public ElementPointerFactory() {
}
public int getOrder() {
return 0;
}
/*
* (non-Javadoc)
*
* @see org.apache.commons.jxpath.ri.model.NodePointerFactory#createNodePointer(org.apache.commons.jxpath.ri.QName,
* java.lang.Object, java.util.Locale)
*/
public NodePointer createNodePointer(QName name, Object obj, Locale locale) {
if (obj instanceof SIFElement) {
return createSIFElementPointer(null, name, (SIFElement) obj);
}
return null;
}
/*
* (non-Javadoc)
*
* @see org.apache.commons.jxpath.ri.model.NodePointerFactory#createNodePointer(org.apache.commons.jxpath.ri.model.NodePointer,
* org.apache.commons.jxpath.ri.QName, java.lang.Object)
*/
public NodePointer createNodePointer(NodePointer parentPointer, QName name,
Object obj) {
if (obj instanceof SIFElement) {
return createSIFElementPointer(parentPointer, name, (SIFElement) obj);
}
return null;
}
/**
* @param parentPointer
* @param element
* @return a NodePointer
*/
private NodePointer createSIFElementPointer(
NodePointer parentPointer,
QName name,
SIFElement element) {
SIFVersion version = null;
if( parentPointer instanceof ADKElementPointer ){
version = ((ADKElementPointer)parentPointer).getVersion();
}
if( version == null ){
version = element.getSIFVersion();
if (version == null) {
version = SIFVersion.LATEST;
}
}
return SIFElementPointer.create(parentPointer, element, version);
}
}