Search in sources :

Example 11 with Node

use of org.sirix.node.interfaces.Node in project sirix by sirixdb.

the class XdmNodeWriterTrxImpl method insertNamespace.

@Override
public XdmNodeWriteTrx insertNamespace(final QNm name, final Movement move) throws SirixException {
    if (!XMLToken.isValidQName(checkNotNull(name))) {
        throw new IllegalArgumentException("The QName is not valid!");
    }
    acquireLock();
    try {
        if (getCurrentNode().getKind() == Kind.ELEMENT) {
            checkAccessAndCommit();
            for (int i = 0, namespCount = ((ElementNode) getCurrentNode()).getNamespaceCount(); i < namespCount; i++) {
                moveToNamespace(i);
                final QNm qName = getName();
                if (name.getPrefix().equals(qName.getPrefix())) {
                    throw new SirixUsageException("Duplicate namespace!");
                }
                moveToParent();
            }
            final long pathNodeKey = mBuildPathSummary ? mPathSummaryWriter.getPathNodeKey(name, Kind.NAMESPACE) : 0;
            final long elementKey = getCurrentNode().getNodeKey();
            final Optional<SirixDeweyID> id = newNamespaceID();
            final NamespaceNode node = mNodeFactory.createNamespaceNode(elementKey, name, pathNodeKey, id);
            final Node parentNode = (Node) getPageTransaction().prepareEntryForModification(node.getParentKey(), PageKind.RECORDPAGE, -1, Optional.<UnorderedKeyValuePage>empty());
            ((ElementNode) parentNode).insertNamespace(node.getNodeKey());
            mNodeReader.setCurrentNode(node);
            adaptHashesWithAdd();
            if (move == Movement.TOPARENT) {
                moveToParent();
            }
            return this;
        } else {
            throw new SirixUsageException("Insert is not allowed if current node is not an ElementNode!");
        }
    } finally {
        unLock();
    }
}
Also used : QNm(org.brackit.xquery.atomic.QNm) TextNode(org.sirix.node.TextNode) CommentNode(org.sirix.node.CommentNode) PINode(org.sirix.node.PINode) Node(org.sirix.node.interfaces.Node) ValueNode(org.sirix.node.interfaces.ValueNode) AttributeNode(org.sirix.node.AttributeNode) ImmutableNode(org.sirix.node.interfaces.immutable.ImmutableNode) StructNode(org.sirix.node.interfaces.StructNode) ElementNode(org.sirix.node.ElementNode) NamespaceNode(org.sirix.node.NamespaceNode) NameNode(org.sirix.node.interfaces.NameNode) NamespaceNode(org.sirix.node.NamespaceNode) UnorderedKeyValuePage(org.sirix.page.UnorderedKeyValuePage) ElementNode(org.sirix.node.ElementNode) SirixUsageException(org.sirix.exception.SirixUsageException) SirixDeweyID(org.sirix.node.SirixDeweyID)

Example 12 with Node

use of org.sirix.node.interfaces.Node in project sirix by sirixdb.

the class XdmResourceManager method getDocumentNode.

Node getDocumentNode(final PageReadTrx pageReadTrx) {
    final Node documentNode;
    @SuppressWarnings("unchecked") final Optional<? extends Node> node = (Optional<? extends Node>) pageReadTrx.getRecord(Fixed.DOCUMENT_NODE_KEY.getStandardProperty(), PageKind.RECORDPAGE, -1);
    if (node.isPresent()) {
        documentNode = node.get();
    } else {
        pageReadTrx.close();
        throw new IllegalStateException("Node couldn't be fetched from persistent storage!");
    }
    return documentNode;
}
Also used : Optional(java.util.Optional) Node(org.sirix.node.interfaces.Node)

Example 13 with Node

use of org.sirix.node.interfaces.Node in project sirix by sirixdb.

the class UnorderedKeyValuePage method addReferences.

// Add references to OverflowPages.
private void addReferences() throws IOException {
    final boolean storeDeweyIDs = mPageReadTrx.getResourceManager().getResourceConfig().mDeweyIDsStored;
    final List<Entry<Long, Record>> entries = sort();
    final Iterator<Entry<Long, Record>> it = entries.iterator();
    while (it.hasNext()) {
        final Entry<Long, Record> entry = it.next();
        final Record record = entry.getValue();
        final long recordID = record.getNodeKey();
        if (mSlots.get(recordID) == null) {
            // Must be either a normal record or one which requires an
            // Overflow page.
            final ByteArrayOutputStream output = new ByteArrayOutputStream();
            final DataOutput out = new DataOutputStream(output);
            mPersistenter.serialize(out, record, mPageReadTrx);
            final byte[] data = output.toByteArray();
            if (data.length > PageConstants.MAX_RECORD_SIZE) {
                final PageReference reference = new PageReference();
                reference.setPage(new OverflowPage(data));
                mReferences.put(recordID, reference);
            } else {
                if (storeDeweyIDs && mPersistenter instanceof NodePersistenter && record instanceof Node && ((Node) record).getDeweyID().isPresent() && record.getNodeKey() != 0)
                    mDeweyIDs.put(((Node) record).getDeweyID().get(), record.getNodeKey());
                mSlots.put(recordID, data);
            }
        }
    }
    mAddedReferences = true;
}
Also used : DataOutput(java.io.DataOutput) DataOutputStream(java.io.DataOutputStream) Node(org.sirix.node.interfaces.Node) ByteArrayOutputStream(java.io.ByteArrayOutputStream) NodePersistenter(org.sirix.node.interfaces.NodePersistenter) Entry(java.util.Map.Entry) Utils.getVarLong(org.sirix.node.Utils.getVarLong) Utils.putVarLong(org.sirix.node.Utils.putVarLong) Record(org.sirix.node.interfaces.Record)

Example 14 with Node

use of org.sirix.node.interfaces.Node in project sirix by sirixdb.

the class TreeCellRenderer method getTreeCellRendererComponent.

@Override
public Component getTreeCellRendererComponent(final JTree pTree, Object pValue, final boolean pSel, final boolean pExpanded, final boolean pLeaf, final int pRow, final boolean pHasFocus) throws IllegalStateException {
    final Node node = (Node) pValue;
    final long key = node.getNodeKey();
    switch(node.getKind()) {
        case ELEMENT:
            mRTX.moveTo(node.getNodeKey());
            final String prefix = mRTX.getName().getPrefix();
            final QNm qName = mRTX.getName();
            if (prefix == null || prefix.equals(XMLConstants.DEFAULT_NS_PREFIX)) {
                final String localPart = qName.getLocalName();
                if (mRTX.hasFirstChild()) {
                    pValue = new StringBuilder("<").append(localPart).append(">").toString();
                } else {
                    pValue = new StringBuilder("<").append(localPart).append("/>").toString();
                }
            } else {
                pValue = new StringBuilder("<").append(prefix).append(":").append(qName.getLocalName()).append(">").toString();
            }
            break;
        case ATTRIBUTE:
            // Move transaction to parent of the attribute node.
            mRTX.moveTo(node.getParentKey());
            final long aNodeKey = node.getNodeKey();
            for (int i = 0, attsCount = mRTX.getAttributeCount(); i < attsCount; i++) {
                mRTX.moveToAttribute(i);
                if (mRTX.getNodeKey() == key) {
                    break;
                }
                mRTX.moveTo(aNodeKey);
            }
            // Display value.
            final String attPrefix = mRTX.getName().getPrefix();
            final QNm attQName = mRTX.getName();
            if (attPrefix == null || attPrefix.equals("")) {
                pValue = new StringBuilder("@").append(attQName.getLocalName()).append("='").append(mRTX.getValue()).append("'").toString();
            } else {
                pValue = new StringBuilder("@").append(attPrefix).append(":").append(attQName.getLocalName()).append("='").append(mRTX.getValue()).append("'").toString();
            }
            break;
        case NAMESPACE:
            // Move transaction to parent the namespace node.
            mRTX.moveTo(node.getParentKey());
            final long nNodeKey = node.getNodeKey();
            for (int i = 0, namespCount = mRTX.getNamespaceCount(); i < namespCount; i++) {
                mRTX.moveToNamespace(i);
                if (mRTX.getNodeKey() == key) {
                    break;
                }
                mRTX.moveTo(nNodeKey);
            }
            if (mRTX.nameForKey(mRTX.getPrefixKey()).length() == 0) {
                pValue = new StringBuilder("xmlns='").append(mRTX.nameForKey(mRTX.getURIKey())).append("'").toString();
            } else {
                pValue = new StringBuilder("xmlns:").append(mRTX.nameForKey(mRTX.getPrefixKey())).append("='").append(mRTX.nameForKey(mRTX.getURIKey())).append("'").toString();
            }
            break;
        case TEXT:
            mRTX.moveTo(node.getNodeKey());
            pValue = mRTX.getValue();
            break;
        case COMMENT:
            mRTX.moveTo(node.getNodeKey());
            pValue = new StringBuilder("<!-- ").append(mRTX.getValue()).append(" -->").toString();
            break;
        case PROCESSING_INSTRUCTION:
            mRTX.moveTo(node.getNodeKey());
            pValue = new StringBuilder("<? ").append(mRTX.getValue()).append(" ?>").toString();
            break;
        case DOCUMENT:
            pValue = "Doc: " + mPATH;
            break;
        case WHITESPACE:
            break;
        default:
            throw new IllegalStateException("Node kind not known!");
    }
    pValue += new StringBuilder(" [").append(key).append("]").toString();
    super.getTreeCellRendererComponent(pTree, pValue, pSel, pExpanded, pLeaf, pRow, pHasFocus);
    setBackground(null);
    setBackgroundNonSelectionColor(null);
    setBackgroundSelectionColor(null);
    if (!selected) {
        switch(node.getKind()) {
            case DOCUMENT:
                setForeground(DOC_COLOR);
                break;
            case ELEMENT:
                setForeground(ELEMENT_COLOR);
                break;
            case ATTRIBUTE:
                setForeground(ATTRIBUTE_COLOR);
                break;
            default:
        }
    } else {
        setForeground(WHITE);
    }
    return this;
}
Also used : QNm(org.brackit.xquery.atomic.QNm) Node(org.sirix.node.interfaces.Node)

Example 15 with Node

use of org.sirix.node.interfaces.Node in project sirix by sirixdb.

the class TreeModel method getIndexOfChild.

@Override
public int getIndexOfChild(final Object pParent, final Object pChild) {
    if (pParent == null || pChild == null) {
        return -1;
    }
    // Parent node.
    mRtx.moveTo(((Node) pParent).getNodeKey());
    final Node parentNode = (Node) pParent;
    // Child node.
    final Node childNode = (Node) pChild;
    // Return value.
    int index = -1;
    // Values needed.
    final long nodeKey = parentNode.getNodeKey();
    int namespCount = 0;
    int attCount = 0;
    switch(childNode.getKind()) {
        case NAMESPACE:
            namespCount = mRtx.getNamespaceCount();
            for (int i = 0; i < namespCount; i++) {
                mRtx.moveToNamespace(i);
                if (mRtx.getNodeKey() == childNode.getNodeKey()) {
                    index = i;
                    break;
                }
                mRtx.moveTo(nodeKey);
            }
            break;
        case ATTRIBUTE:
            namespCount = mRtx.getNamespaceCount();
            attCount = mRtx.getAttributeCount();
            for (int i = 0; i < attCount; i++) {
                mRtx.moveToAttribute(i);
                if (mRtx.getNodeKey() == childNode.getNodeKey()) {
                    index = namespCount + i;
                    break;
                }
                mRtx.moveTo(nodeKey);
            }
            break;
        case WHITESPACE:
            break;
        case ELEMENT:
        case COMMENT:
        case PROCESSING_INSTRUCTION:
        case TEXT:
            if (parentNode.getKind() == Kind.ELEMENT) {
                namespCount = mRtx.getNamespaceCount();
                attCount = mRtx.getAttributeCount();
            }
            final long childCount = mRtx.getChildCount();
            if (childCount == 0) {
                throw new IllegalStateException("May not happen!");
            }
            for (int i = 0; i < childCount; i++) {
                if (i == 0) {
                    mRtx.moveToFirstChild();
                } else {
                    mRtx.moveToRightSibling();
                }
                if (mRtx.getNodeKey() == childNode.getNodeKey()) {
                    index = namespCount + attCount + i;
                    break;
                }
            }
            break;
        default:
            throw new IllegalStateException("Child node kind not known! ");
    }
    return index;
}
Also used : Node(org.sirix.node.interfaces.Node)

Aggregations

Node (org.sirix.node.interfaces.Node)22 StructNode (org.sirix.node.interfaces.StructNode)12 ImmutableNode (org.sirix.node.interfaces.immutable.ImmutableNode)12 AttributeNode (org.sirix.node.AttributeNode)11 CommentNode (org.sirix.node.CommentNode)11 ElementNode (org.sirix.node.ElementNode)11 NamespaceNode (org.sirix.node.NamespaceNode)11 PINode (org.sirix.node.PINode)11 TextNode (org.sirix.node.TextNode)11 NameNode (org.sirix.node.interfaces.NameNode)11 ValueNode (org.sirix.node.interfaces.ValueNode)11 UnorderedKeyValuePage (org.sirix.page.UnorderedKeyValuePage)11 SirixUsageException (org.sirix.exception.SirixUsageException)6 Optional (java.util.Optional)4 SirixDeweyID (org.sirix.node.SirixDeweyID)4 QNm (org.brackit.xquery.atomic.QNm)3 Record (org.sirix.node.interfaces.Record)3 SirixThreadedException (org.sirix.exception.SirixThreadedException)2 DocumentRootNode (org.sirix.node.DocumentRootNode)2 ByteArrayOutputStream (java.io.ByteArrayOutputStream)1