use of org.sirix.api.Axis in project sirix by sirixdb.
the class FNNot method computeResult.
/**
* {@inheritDoc}
*
* @throws SirixXPathException
*/
@Override
protected byte[] computeResult() throws SirixXPathException {
final Axis axis = getArgs().get(0);
final boolean value = !Function.ebv(axis);
return TypedValue.getBytes(Boolean.toString(value));
}
use of org.sirix.api.Axis in project sirix by sirixdb.
the class FNString method computeResult.
/**
* {@inheritDoc}
*/
@Override
protected byte[] computeResult() {
String value;
if (getArgs().size() == 0) {
value = getStrValue();
} else {
final Axis axis = getArgs().get(0);
final StringBuilder val = new StringBuilder();
while (axis.hasNext()) {
axis.next();
String nodeValue = getStrValue();
if (!nodeValue.equals("")) {
if (val.length() > 0) {
val.append(" ");
}
val.append(nodeValue);
}
}
value = val.toString();
}
return TypedValue.getBytes(value);
}
use of org.sirix.api.Axis in project sirix by sirixdb.
the class EveryExpr method evaluate.
/**
* {@inheritDoc}
*/
@Override
public void evaluate() {
boolean satisfiesCond = true;
for (final Axis axis : mVars) {
while (axis.hasNext()) {
axis.next();
if (!mSatisfy.hasNext()) {
// condition is not satisfied for this item -> expression is
// false
satisfiesCond = false;
break;
}
}
}
final int mItemKey = getTrx().getItemList().addItem(new AtomicValue(TypedValue.getBytes(Boolean.toString(satisfiesCond)), getTrx().keyForName("xs:boolean")));
mKey = mItemKey;
}
use of org.sirix.api.Axis in project sirix by sirixdb.
the class RestXPathProcessor method doXPathRes.
/**
* This method performs an XPath evaluation and writes it to a given output
* stream.
*
* @param resource
* The existing resource.
* @param revision
* The revision of the requested document.
* @param output
* The output stream where the results are written.
* @param nodeid
* <code>true</code> if node id's have to be delivered.
* <code>false</code> otherwise.
* @param xpath
* The XPath expression.
* @throws SirixException
*/
private void doXPathRes(final String resource, final Integer revision, final OutputStream output, final boolean nodeid, final String xpath) throws SirixException {
// Database connection to sirix
Database database = null;
Session session = null;
NodeReadTrx rtx = null;
try {
database = Databases.openDatabase(mStoragePath);
session = database.getSession(new SessionConfiguration.Builder(resource).build());
// Creating a transaction
if (revision == null) {
rtx = session.beginNodeReadTrx();
} else {
rtx = session.beginNodeReadTrx(revision);
}
final Axis axis = new XPathAxis(rtx, xpath);
for (final long key : axis) {
WorkerHelper.serializeXML(session, output, false, nodeid, key, revision).call();
}
} catch (final Exception globExcep) {
throw new WebApplicationException(globExcep, Response.Status.INTERNAL_SERVER_ERROR);
} finally {
if (rtx != null) {
rtx.moveTo(Fixed.DOCUMENT_NODE_KEY.getStandardProperty());
WorkerHelper.closeRTX(rtx, session, database);
}
}
}
use of org.sirix.api.Axis in project sirix by sirixdb.
the class RestXPathProcessor method getXpathResource.
/**
* Getting part of the XML based on a XPath query
*
* @param dbFile
* where the content should be extracted
*
* @param query
* contains XPath query
* @param rId
* To response the resource with a restid for each node (
* <code>true</code>) or without ( <code>false</code>).
* @param doRevision
* The revision of the requested resource. If <code>null</code>, than
* response the latest revision.
* @param output
* The OutputStream reference which have to be modified and returned
* @param doNodeId
* specifies whether node id should be shown
* @param doWrap
* output of result elements
* @throws SirixException
*/
public void getXpathResource(final File dbFile, final long rId, final String query, final boolean doNodeId, final Integer doRevision, final OutputStream output, final boolean doWrap) throws SirixException {
// work around because of query root char '/'
String qQuery = query;
if (query.charAt(0) == '/')
qQuery = ".".concat(query);
Database database = null;
Session session = null;
NodeReadTrx rtx = null;
try {
database = Databases.openDatabase(dbFile.getParentFile());
session = database.getSession(new SessionConfiguration.Builder(dbFile.getName()).build());
if (doRevision == null) {
rtx = session.beginNodeReadTrx();
} else {
rtx = session.beginNodeReadTrx(doRevision);
}
final boolean exist = rtx.moveTo(rId).hasMoved();
if (exist) {
final Axis axis = new XPathAxis(rtx, qQuery);
if (doWrap) {
output.write(beginResult.getBytes());
for (final long key : axis) {
WorkerHelper.serializeXML(session, output, false, doNodeId, key, doRevision).call();
}
output.write(endResult.getBytes());
} else {
for (final long key : axis) {
WorkerHelper.serializeXML(session, output, false, doNodeId, key, doRevision).call();
}
}
} else {
throw new WebApplicationException(404);
}
} catch (final Exception globExcep) {
throw new WebApplicationException(globExcep, Response.Status.INTERNAL_SERVER_ERROR);
} finally {
WorkerHelper.closeRTX(rtx, session, database);
}
}
Aggregations