package com.bagri.core.model;
/**
* Combines XDM Element and its Path together. Transient temporary object.
*
* @author Denis Sukhoroslov
* @since 06.2014
*/
public class Data implements Comparable<Data> {
private int pos = 0;
private String name;
private Path path;
private Element element;
public Data(String name) {
this.name = name;
}
/**
* XDM Data constructor
*
* @param path the path
* @param element the element
*/
public Data(Path path, Element element) {
this.path = path;
this.element = element;
}
/**
*
* @return the new element position
*/
public int addLastChild() {
return ++pos;
}
/**
*
* @return data name
*/
public String getDataName() {
return name;
}
/**
*
* @return the data element
*/
public Element getElement() {
return element;
}
/**
*
* @return element's level
*/
public int getLevel() {
return element.getPosition().length;
}
public Path getDataPath() {
return this.path;
}
/**
*
* @return the path's name
*/
public String getName() {
return path.getName();
}
/**
*
* @return the path's node kind
*/
public NodeKind getNodeKind() {
return path.getNodeKind();
}
/**
*
* @return the element position
*/
public int getPos() {
int[] pos = element.getPosition();
if (pos.length > 0) {
return pos[pos.length - 1];
}
return 0;
}
/**
*
* @return the element's parent position
*/
public int getParentPos() {
int[] pos = element.getPosition();
if (pos.length > 1) {
return pos[pos.length - 2];
}
return 0;
}
/**
*
* @return the element positions array
*/
public int[] getPosition() {
return element.getPosition();
}
/**
*
* @return the path's path
*/
public String getPath() {
return path.getPath();
}
/**
*
* @return the path's path id
*/
public int getPathId() {
return path.getPathId();
}
/**
*
* @return the path parent id
*/
public int getParentPathId() {
return path.getParentId();
}
/**
*
* @return the path's post id
*/
public int getPostId() {
return path.getPostId();
}
/**
*
* @return the element's value
*/
public Object getValue() {
return element.getValue();
}
public boolean isNull() {
return element.getValue() == Null._null;
}
public void setData(Path path, Element element) {
this.path = path;
this.element = element;
}
/**
* {@inheritDoc}
*/
@Override
public int compareTo(Data other) {
return element.compareTo(other.element);
}
/**
* {@inheritDoc}
*/
@Override
public String toString() {
return "Data [path=" + path + ", element=" + element + "]";
}
}