use of org.brackit.xquery.atomic.QNm in project sirix by sirixdb.
the class TextView method serialize.
/**
* Serialize a tree.
*/
private void serialize() {
final NodeReadTrx rtx = mRtx;
// Style document.
final StyledDocument doc = (StyledDocument) mText.getDocument();
final Style styleElements = doc.addStyle("elements", null);
StyleConstants.setForeground(styleElements, ELEMENT_COLOR);
final Style styleNamespaces = doc.addStyle("attributes", null);
StyleConstants.setForeground(styleNamespaces, NAMESPACE_COLOR);
final Style styleAttributes = doc.addStyle("attributes", null);
StyleConstants.setForeground(styleAttributes, ATTRIBUTE_COLOR);
final Style styleText = doc.addStyle("text", null);
StyleConstants.setForeground(styleText, TEXT_COLOR);
final long nodeKey = rtx.getNodeKey();
try {
switch(rtx.getKind()) {
case DOCUMENT:
case ELEMENT:
mText.setText("");
if (mAxis == null) {
mSerializer = new StAXSerializer(rtx);
} else {
mSerializer = new StAXDiffSerializer(new DiffAxis(IncludeSelf.YES, mDb.getSession().beginNodeReadTrx(mDb.getCompareRevisionNumber()), rtx, mAxis));
}
processStAX(State.INITIAL);
break;
case TEXT:
rtx.moveTo(nodeKey);
mText.setText("");
doc.insertString(doc.getLength(), new String(rtx.getRawValue()), styleText);
break;
case NAMESPACE:
// Move transaction to parent of given namespace node.
rtx.moveToParent();
mText.setText("");
final long nNodeKey = rtx.getNodeKey();
for (int i = 0, namespCount = rtx.getNamespaceCount(); i < namespCount; i++) {
rtx.moveToNamespace(i);
if (rtx.getNodeKey() == nodeKey) {
break;
}
rtx.moveTo(nNodeKey);
}
if (rtx.nameForKey(rtx.getPrefixKey()).length() == 0) {
doc.insertString(doc.getLength(), new StringBuilder().append("xmlns='").append(rtx.nameForKey(rtx.getURIKey())).append("'").toString(), styleNamespaces);
} else {
doc.insertString(doc.getLength(), new StringBuilder().append("xmlns:").append(rtx.nameForKey(rtx.getPrefixKey())).append("='").append(rtx.nameForKey(rtx.getURIKey())).append("'").toString(), styleNamespaces);
}
break;
case ATTRIBUTE:
// Move transaction to parent of given attribute node.
rtx.moveToParent();
mText.setText("");
final long aNodeKey = rtx.getNodeKey();
for (int i = 0, attsCount = rtx.getAttributeCount(); i < attsCount; i++) {
rtx.moveToAttribute(i);
if (rtx.getNodeKey() == nodeKey) {
break;
}
rtx.moveTo(aNodeKey);
}
// Display value.
final String attPrefix = rtx.getName().getPrefix();
final QNm attQName = rtx.getName();
if (attPrefix == null || attPrefix.isEmpty()) {
doc.insertString(doc.getLength(), new StringBuilder().append(attQName.getLocalName()).append("='").append(rtx.getValue()).append("'").toString(), styleAttributes);
} else {
doc.insertString(doc.getLength(), new StringBuilder().append(attPrefix).append(":").append(attQName.getLocalName()).append("='").append(rtx.getValue()).append("'").toString(), styleAttributes);
}
break;
default:
throw new IllegalStateException("Node kind not known!");
}
} catch (final SirixException | BadLocationException | XMLStreamException e) {
LOGWRAPPER.error(e.getMessage(), e);
}
}
use of org.brackit.xquery.atomic.QNm in project sirix by sirixdb.
the class TextView method processEndTag.
/**
* Process end tag.
*
* @param pEvent
* {@link XMLEvent} reference
* @param pLevel
* level in the tree
* @param pIndentSpaces
* determines how many spaces to indent
* @param pDoc
* {@link StyledDocument} reference
* @param pStyleElements
* {@link Style} reference
* @throws BadLocationException
* if insertion of string fails
*/
private void processEndTag(final XMLEvent pEvent, final int pLevel, final String pIndentSpaces, final StyledDocument pDoc, final Style pStyleElements) throws BadLocationException {
assert pEvent != null;
// assert pLevel >= 0;
assert pIndentSpaces != null;
assert pDoc != null;
assert pStyleElements != null;
final EndElement endTag = pEvent.asEndElement();
final QName name = endTag.getName();
LOGWRAPPER.debug("endTag: " + endTag);
indent(pDoc, pLevel, pIndentSpaces);
pDoc.insertString(pDoc.getLength(), new StringBuilder().append("</").append(ViewUtilities.qNameToString(new QNm(name.getNamespaceURI(), name.getPrefix(), name.getLocalPart()))).append(">").append(NEWLINE).toString(), pStyleElements);
}
use of org.brackit.xquery.atomic.QNm in project sirix by sirixdb.
the class AbstractTraverseModel method fillAttributes.
/**
* Fill an attribute list with entries.
*
* @param rtx
* Sirix {@link NodeReadTrx}
* @return {@link List} of {@link Attribute}s
*/
protected List<Attribute> fillAttributes(final NodeReadTrx rtx) {
assert rtx != null;
final XMLEventFactory eventFactory = XMLEventFactory.newInstance();
// attributes in the axis.
assert rtx.getKind() == Kind.ELEMENT;
final int attNumber = rtx.getAttributeCount();
final List<Attribute> attributes = new ArrayList<>(attNumber);
for (int i = 0; i < attNumber; i++) {
rtx.moveToAttribute(i);
final QNm name = rtx.getName();
attributes.add(eventFactory.createAttribute(new QName(name.getNamespaceURI(), name.getLocalName(), name.getPrefix()), rtx.getValue()));
rtx.moveToParent();
}
return attributes;
}
use of org.brackit.xquery.atomic.QNm in project sirix by sirixdb.
the class AbstractShredder method processStartTag.
@Override
public void processStartTag(final QNm elementName) throws SirixException {
final QNm name = checkNotNull(elementName);
long key = -1;
switch(mInsertLocation) {
case ASFIRSTCHILD:
if (mParents.peek() == Fixed.NULL_NODE_KEY.getStandardProperty()) {
key = mWtx.insertElementAsFirstChild(name).getNodeKey();
} else {
key = mWtx.insertElementAsRightSibling(name).getNodeKey();
}
break;
case ASRIGHTSIBLING:
if (mWtx.getKind() == Kind.DOCUMENT || mWtx.getParentKey() == Fixed.DOCUMENT_NODE_KEY.getStandardProperty()) {
throw new IllegalStateException("Subtree can not be inserted as sibling of document root or the root-element!");
}
key = mWtx.insertElementAsRightSibling(name).getNodeKey();
mInsertLocation = Insert.ASFIRSTCHILD;
break;
case ASLEFTSIBLING:
if (mWtx.getKind() == Kind.DOCUMENT || mWtx.getParentKey() == Fixed.DOCUMENT_NODE_KEY.getStandardProperty()) {
throw new IllegalStateException("Subtree can not be inserted as sibling of document root or the root-element!");
}
key = mWtx.insertElementAsLeftSibling(name).getNodeKey();
mInsertLocation = Insert.ASFIRSTCHILD;
break;
}
mParents.pop();
mParents.push(key);
mParents.push(Fixed.NULL_NODE_KEY.getStandardProperty());
}
use of org.brackit.xquery.atomic.QNm in project sirix by sirixdb.
the class XMLShredder method addNewElement.
/**
* Add a new element node.
*
* @param pLeftSiblingKeyStack stack used to determine if the new element has to be inserted as a
* right sibling or as a new child (in the latter case is NULL on top of the stack)
* @param event the current event from the StAX parser
* @return the modified stack
* @throws SirixException if adding {@link ElementNode} fails
*/
private void addNewElement(final StartElement event) throws SirixException {
assert event != null;
final QName qName = event.getName();
final QNm name = new QNm(qName.getNamespaceURI(), qName.getPrefix(), qName.getLocalPart());
processStartTag(name);
// Parse namespaces.
for (final Iterator<?> it = event.getNamespaces(); it.hasNext(); ) {
final Namespace namespace = (Namespace) it.next();
mWtx.insertNamespace(new QNm(namespace.getNamespaceURI(), namespace.getPrefix(), ""));
mWtx.moveToParent();
}
// Parse attributes.
for (final Iterator<?> it = event.getAttributes(); it.hasNext(); ) {
final Attribute attribute = (Attribute) it.next();
final QName attName = attribute.getName();
mWtx.insertAttribute(new QNm(attName.getNamespaceURI(), attName.getPrefix(), attName.getLocalPart()), attribute.getValue());
mWtx.moveToParent();
}
}
Aggregations