Search in sources :

Example 6 with NodeReadTrx

use of org.sirix.api.NodeReadTrx in project sirix by sirixdb.

the class NodeWrapper method createRtxAndMove.

/**
 * Create a new {@link IReadTransaction} and move to {@link mKey}.
 *
 * @return new read transaction instance which is moved to {@link mKey}
 * @throws SirixException
 *           if sirix fails to setup new transaction
 */
private final NodeReadTrx createRtxAndMove() throws SirixException {
    final NodeReadTrx rtx = mDocWrapper.mSession.beginNodeReadTrx(mRevision);
    rtx.moveTo(mKey);
    return rtx;
}
Also used : NodeReadTrx(org.sirix.api.NodeReadTrx)

Example 7 with NodeReadTrx

use of org.sirix.api.NodeReadTrx in project sirix by sirixdb.

the class WorkerHelperTest method testClose.

/**
 * This method tests
 * {@link WorkerHelper#closeWTX(boolean, NodeWriteTrx, Session, Database)}
 */
@Test(expected = IllegalStateException.class)
public void testClose() throws SirixException {
    Database database = Databases.openDatabase(DBFILE.getParentFile());
    Session session = database.getSession(new SessionConfiguration.Builder(DBFILE.getName()).build());
    final NodeWriteTrx wtx = session.beginNodeWriteTrx();
    WorkerHelper.closeWTX(false, wtx, session, database);
    wtx.commit();
    database = Databases.openDatabase(DBFILE.getParentFile());
    session = database.getSession(new SessionConfiguration.Builder(DBFILE.getName()).build());
    final NodeReadTrx rtx = session.beginNodeReadTrx();
    WorkerHelper.closeRTX(rtx, session, database);
    rtx.moveTo(11);
}
Also used : NodeReadTrx(org.sirix.api.NodeReadTrx) Database(org.sirix.api.Database) NodeWriteTrx(org.sirix.api.NodeWriteTrx) SessionConfiguration(org.sirix.access.conf.SessionConfiguration) Session(org.sirix.api.Session) Test(org.junit.Test)

Example 8 with NodeReadTrx

use of org.sirix.api.NodeReadTrx in project sirix by sirixdb.

the class TestNodeWrapperXPath method testBAll.

@SuppressWarnings("unchecked")
@Test
public void testBAll() throws Exception {
    xpe.setNamespaceContext(new DocNamespaceContext());
    final XPathExpression findLine = xpe.compile("//b");
    final NodeInfo doc = new DocumentWrapper(mHolder.getSession(), config);
    // Execute XPath.
    final ArrayList<NodeWrapper> result = (ArrayList<NodeWrapper>) findLine.evaluate(doc, XPathConstants.NODESET);
    assertNotNull(result);
    assertEquals(5, result.get(0).getKey());
    assertEquals(9, result.get(1).getKey());
    final NodeReadTrx rtx = mHolder.getSession().beginNodeReadTrx();
    rtx.moveTo(result.get(0).getKey());
    assertEquals("b", rtx.getName().getLocalName());
    rtx.moveTo(result.get(1).getKey());
    assertEquals("b", rtx.getName().getLocalName());
}
Also used : XPathExpression(javax.xml.xpath.XPathExpression) NodeReadTrx(org.sirix.api.NodeReadTrx) NodeInfo(net.sf.saxon.om.NodeInfo) ArrayList(java.util.ArrayList) Test(org.junit.Test)

Example 9 with NodeReadTrx

use of org.sirix.api.NodeReadTrx in project sirix by sirixdb.

the class TraverseCompareTree method createSunburstItem.

@Override
public float createSunburstItem(final Item pItem, @Nonnegative final int pDepth, @Nonnegative final int pIndex) {
    checkNotNull(pItem);
    checkArgument(pDepth >= 0, "pDepth must be positive!");
    checkArgument(pIndex >= 0, "pIndex must be >= 0!");
    // Initialize variables.
    final float angle = pItem.mAngle;
    final float parExtension = pItem.mExtension;
    final int indexToParent = pItem.mIndexToParent;
    final int descendantCount = pItem.mDescendantCount;
    final int parentDescCount = pItem.mParentDescendantCount;
    final int modificationCount = pItem.mModificationCount;
    long parentModificationCount = pItem.mParentModificationCount;
    final boolean subtract = pItem.mSubtract;
    final DiffTuple diffCont = pItem.mDiff;
    final int origDepth = pItem.mOrigDepth;
    final int nextDepth = pItem.mNextDepth;
    final int depth = pDepth;
    // Calculate extension.
    float extension = 2 * PConstants.PI;
    if (indexToParent > -1) {
        if (mItems.get(indexToParent).getSubtract()) {
            parentModificationCount -= FACTOR;
        }
        extension = (1f - mModWeight) * (parExtension * (float) descendantCount / ((float) parentDescCount - 1f)) + mModWeight * // modificationCount/parentModificationCount.
        (parExtension * (float) modificationCount / ((float) parentModificationCount - 1f));
    }
    LOGWRAPPER.debug("ITEM: " + pIndex);
    LOGWRAPPER.debug("modificationCount: " + modificationCount);
    LOGWRAPPER.debug("parentModificationCount: " + parentModificationCount);
    LOGWRAPPER.debug("descendantCount: " + descendantCount);
    LOGWRAPPER.debug("parentDescCount: " + parentDescCount);
    LOGWRAPPER.debug("indexToParent: " + indexToParent);
    LOGWRAPPER.debug("extension: " + extension);
    LOGWRAPPER.debug("depth: " + depth);
    LOGWRAPPER.debug("next Depth: " + nextDepth);
    LOGWRAPPER.debug("angle: " + angle);
    if (mPrune == Pruning.ITEMSIZE && extension < TraverseModel.ANGLE_TO_PRUNE && modificationCount <= descendantCount) {
        nodePruned();
    } else {
        // Add a sunburst item.
        if (mPrune == Pruning.DIFF && diffCont.getDiff() == DiffType.SAMEHASH) {
            mIsPruned = true;
        } else {
            mIsPruned = false;
        }
        final NodeReadTrx rtx = (diffCont.getDiff() == DiffType.DELETED || diffCont.getDiff() == DiffType.MOVEDFROM || diffCont.getDiff() == DiffType.REPLACEDOLD) ? mOldRtx : mNewRtx;
        final EStructType structKind = nextDepth > depth ? EStructType.ISINNERNODE : EStructType.ISLEAFNODE;
        // Set node relations.
        String text = "";
        NodeRelations relations = null;
        final DiffType currDiff = diffCont.getDiff();
        if (rtx.getKind() == Kind.TEXT) {
            if (currDiff == DiffType.DELETED || currDiff == DiffType.MOVEDFROM || currDiff == DiffType.REPLACEDOLD) {
                text = mOldRtx.getValue();
            } else {
                text = mNewRtx.getValue();
            }
            if (currDiff == DiffType.UPDATED || ((currDiff == DiffType.REPLACEDNEW || currDiff == DiffType.REPLACEDOLD) && mOldRtx.getKind() == mNewRtx.getKind())) {
                final String oldValue = mOldRtx.getValue();
                final String newValue = mNewRtx.getValue();
                float similarity = 1;
                // try {
                // Integer.parseInt(oldValue);
                // Integer.parseInt(newValue);
                // 
                // // TODO: Implement similarity measure on numerical data (easy!).
                // } catch (final NumberFormatException e) {
                similarity = mLevenshtein.getSimilarity(oldValue, newValue);
                // }
                relations = new NodeRelations(origDepth, depth, structKind, similarity, 0, 1, indexToParent).setSubtract(subtract);
            } else if (currDiff == DiffType.SAME || currDiff == DiffType.SAMEHASH) {
                relations = new NodeRelations(origDepth, depth, structKind, 1, 0, 1, indexToParent).setSubtract(subtract);
            } else {
                relations = new NodeRelations(origDepth, depth, structKind, 0, 0, 1, indexToParent).setSubtract(subtract);
            }
        } else {
            if (mMaxDescendantCount == 0) {
                if (mPrune == Pruning.NO) {
                    try {
                        mMaxDescendantCount = mMaxDescendantCountFuture.get().getDescendants();
                    } catch (final InterruptedException | ExecutionException e) {
                        LOGWRAPPER.error(e.getMessage(), e);
                    }
                } else {
                    mMaxDescendantCount = mAxis.getDescendantCount();
                }
            }
            relations = new NodeRelations(origDepth, depth, structKind, descendantCount, 1, mMaxDescendantCount, indexToParent).setSubtract(subtract);
        }
        // Build item.
        final SunburstItem.Builder builder = new SunburstItem.Builder(mParent, angle, extension, relations, mDb, mGUI).setNodeKey(rtx.getNodeKey()).setKind(rtx.getKind()).setDiff(diffCont.getDiff());
        if (modificationCount > descendantCount) {
            final int diffCounts = (modificationCount - descendantCount) / TraverseModel.FACTOR;
            LOGWRAPPER.debug("modCount: " + diffCounts);
            builder.setModifications(diffCounts);
        }
        if (text.isEmpty()) {
            QNm name = null;
            if (diffCont.getDiff() == DiffType.DELETED || diffCont.getDiff() == DiffType.MOVEDFROM || diffCont.getDiff() == DiffType.REPLACEDOLD) {
                name = mOldRtx.getName();
                builder.setAttributes(fillAttributes(mOldRtx));
                builder.setNamespaces(fillNamespaces(mOldRtx));
                builder.setOldKey(mOldRtx.getNodeKey());
                LOGWRAPPER.debug("name: " + name.getLocalName());
                builder.setOldQName(name);
            } else {
                name = mNewRtx.getName();
                builder.setAttributes(fillAttributes(mNewRtx));
                builder.setNamespaces(fillNamespaces(mNewRtx));
                LOGWRAPPER.debug("name: " + name.getLocalName());
                builder.setQName(name);
            }
        } else {
            LOGWRAPPER.debug("text: " + text);
            if (currDiff == DiffType.DELETED || currDiff == DiffType.MOVEDFROM || currDiff == DiffType.REPLACEDOLD) {
                builder.setOldText(text);
                builder.setOldKey(mOldRtx.getNodeKey());
            } else {
                builder.setText(text);
            }
        }
        updated(diffCont.getDiff(), builder);
        final SunburstItem item = builder.build();
        if (item.getDiff() == DiffType.MOVEDFROM) {
            LOGWRAPPER.debug("movedToIndex: " + diffCont.getIndex());
            item.setIndexMovedTo(diffCont.getIndex() - mAxis.getPrunedNodes());
        }
        mItems.add(item);
        // Set depth max.
        mNewDepthMax = Math.max(depth, mNewDepthMax);
    }
    return extension;
}
Also used : DiffTuple(org.sirix.diff.DiffTuple) NodeRelations(org.sirix.gui.view.sunburst.NodeRelations) DiffType(org.sirix.diff.DiffFactory.DiffType) QNm(org.brackit.xquery.atomic.QNm) NodeReadTrx(org.sirix.api.NodeReadTrx) SunburstItem(org.sirix.gui.view.sunburst.SunburstItem) EStructType(org.sirix.gui.view.sunburst.SunburstItem.EStructType) ExecutionException(java.util.concurrent.ExecutionException)

Example 10 with NodeReadTrx

use of org.sirix.api.NodeReadTrx in project sirix by sirixdb.

the class StAXDiffSerializer method peek.

@Override
public XMLEvent peek() throws XMLStreamException {
    final long currNodeKey = mAxis.getTransaction().getNodeKey();
    final NodeReadTrx rtx = mAxis.getTransaction();
    try {
        if (!mHasNext && mEmitEndDocument) {
            mEvent = mFac.createEndDocument();
        } else if (!mHasNext) {
            return null;
        } else {
            if (mCloseElements && !mCloseElementsEmitted) {
                final TransactionTuple trxTuple = mStack.peek();
                final NodeReadTrx trx = trxTuple.getRtx();
                final long nodeKey = trx.getNodeKey();
                trx.moveTo(trxTuple.getKey());
                emitEndTag(trxTuple.getRtx());
                trx.moveTo(nodeKey);
            } else {
                if (mFirst && mAxis.isSelfIncluded() == IncludeSelf.YES) {
                    emitNode(rtx);
                } else {
                    if (rtx.hasFirstChild()) {
                        rtx.moveToFirstChild();
                        emitNode(rtx);
                    } else if (rtx.hasRightSibling()) {
                        rtx.moveToRightSibling();
                        final Kind nodeKind = rtx.getKind();
                        processNode(nodeKind);
                    } else if (rtx.hasParent()) {
                        rtx.moveToParent();
                        emitEndTag(rtx);
                    }
                }
            }
        }
    } catch (final IOException e) {
        throw new XMLStreamException(e);
    }
    rtx.moveTo(currNodeKey);
    return mEvent;
}
Also used : NodeReadTrx(org.sirix.api.NodeReadTrx) XMLStreamException(javax.xml.stream.XMLStreamException) Kind(org.sirix.node.Kind) TransactionTuple(org.sirix.gui.view.TransactionTuple) IOException(java.io.IOException)

Aggregations

NodeReadTrx (org.sirix.api.NodeReadTrx)21 SirixException (org.sirix.exception.SirixException)13 IOException (java.io.IOException)6 SessionConfiguration (org.sirix.access.conf.SessionConfiguration)6 Database (org.sirix.api.Database)6 Session (org.sirix.api.Session)6 WebApplicationException (javax.ws.rs.WebApplicationException)4 Axis (org.sirix.api.Axis)4 XMLStreamException (javax.xml.stream.XMLStreamException)3 NodeInfo (net.sf.saxon.om.NodeInfo)3 JaxRxException (org.jaxrx.core.JaxRxException)3 Test (org.junit.Test)3 DescendantAxis (org.sirix.axis.DescendantAxis)3 XPathAxis (org.sirix.service.xml.xpath.XPathAxis)3 ArrayList (java.util.ArrayList)2 XPathExpression (javax.xml.xpath.XPathExpression)2 QNm (org.brackit.xquery.atomic.QNm)2 FilterAxis (org.sirix.axis.filter.FilterAxis)2 TextFilter (org.sirix.axis.filter.TextFilter)2 TransactionTuple (org.sirix.gui.view.TransactionTuple)2