Search in sources :

Example 66 with Axis

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));
}
Also used : Axis(org.sirix.api.Axis)

Example 67 with Axis

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);
}
Also used : FilterAxis(org.sirix.axis.filter.FilterAxis) Axis(org.sirix.api.Axis) DescendantAxis(org.sirix.axis.DescendantAxis)

Example 68 with Axis

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;
}
Also used : AtomicValue(org.sirix.service.xml.xpath.AtomicValue) Axis(org.sirix.api.Axis)

Example 69 with Axis

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);
        }
    }
}
Also used : NodeReadTrx(org.sirix.api.NodeReadTrx) WebApplicationException(javax.ws.rs.WebApplicationException) XPathAxis(org.sirix.service.xml.xpath.XPathAxis) Database(org.sirix.api.Database) SessionConfiguration(org.sirix.access.conf.SessionConfiguration) Axis(org.sirix.api.Axis) XPathAxis(org.sirix.service.xml.xpath.XPathAxis) SirixException(org.sirix.exception.SirixException) IOException(java.io.IOException) WebApplicationException(javax.ws.rs.WebApplicationException) Session(org.sirix.api.Session)

Example 70 with Axis

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);
    }
}
Also used : NodeReadTrx(org.sirix.api.NodeReadTrx) WebApplicationException(javax.ws.rs.WebApplicationException) XPathAxis(org.sirix.service.xml.xpath.XPathAxis) Database(org.sirix.api.Database) SessionConfiguration(org.sirix.access.conf.SessionConfiguration) Axis(org.sirix.api.Axis) XPathAxis(org.sirix.service.xml.xpath.XPathAxis) SirixException(org.sirix.exception.SirixException) IOException(java.io.IOException) WebApplicationException(javax.ws.rs.WebApplicationException) Session(org.sirix.api.Session)

Aggregations

Axis (org.sirix.api.Axis)73 DescendantAxis (org.sirix.axis.DescendantAxis)39 FilterAxis (org.sirix.axis.filter.FilterAxis)38 ChildAxis (org.sirix.axis.ChildAxis)23 UnionAxis (org.sirix.service.xml.xpath.expr.UnionAxis)19 DupFilterAxis (org.sirix.service.xml.xpath.filter.DupFilterAxis)19 ForAxis (org.sirix.axis.ForAxis)17 PredicateFilterAxis (org.sirix.axis.filter.PredicateFilterAxis)17 ExceptAxis (org.sirix.service.xml.xpath.expr.ExceptAxis)17 IfAxis (org.sirix.service.xml.xpath.expr.IfAxis)17 IntersectAxis (org.sirix.service.xml.xpath.expr.IntersectAxis)17 RangeAxis (org.sirix.service.xml.xpath.expr.RangeAxis)17 SequenceAxis (org.sirix.service.xml.xpath.expr.SequenceAxis)17 VariableAxis (org.sirix.service.xml.xpath.expr.VariableAxis)17 AddOpAxis (org.sirix.service.xml.xpath.operators.AddOpAxis)17 DivOpAxis (org.sirix.service.xml.xpath.operators.DivOpAxis)17 IDivOpAxis (org.sirix.service.xml.xpath.operators.IDivOpAxis)17 ModOpAxis (org.sirix.service.xml.xpath.operators.ModOpAxis)17 MulOpAxis (org.sirix.service.xml.xpath.operators.MulOpAxis)17 SubOpAxis (org.sirix.service.xml.xpath.operators.SubOpAxis)17