use of com.evolveum.midpoint.prism.xnode.RootXNode in project midpoint by Evolveum.
the class DomLexicalWriter method serializeSubnode.
private void serializeSubnode(XNode xsubnode, Element parentElement, QName elementName) throws SchemaException {
if (xsubnode == null) {
return;
}
if (xsubnode instanceof RootXNode) {
Element element = createElement(elementName, parentElement);
appendCommentIfPresent(element, xsubnode);
parentElement.appendChild(element);
serializeSubnode(((RootXNode) xsubnode).getSubnode(), element, ((RootXNode) xsubnode).getRootElementName());
} else if (xsubnode instanceof MapXNode) {
Element element = createElement(elementName, parentElement);
appendCommentIfPresent(element, xsubnode);
if (xsubnode.isExplicitTypeDeclaration() && xsubnode.getTypeQName() != null) {
DOMUtil.setXsiType(element, setQNamePrefixExplicitIfNeeded(xsubnode.getTypeQName()));
}
parentElement.appendChild(element);
serializeMap((MapXNode) xsubnode, element);
} else if (xsubnode instanceof PrimitiveXNode<?>) {
PrimitiveXNode<?> xprim = (PrimitiveXNode<?>) xsubnode;
if (xprim.isAttribute()) {
serializePrimitiveElementOrAttribute(xprim, parentElement, elementName, true);
} else {
serializePrimitiveElementOrAttribute(xprim, parentElement, elementName, false);
}
} else if (xsubnode instanceof ListXNode) {
ListXNode xlist = (ListXNode) xsubnode;
if (xlist.isHeterogeneousList()) {
Element element = createElement(elementName, parentElement);
serializeExplicitList(xlist, element);
parentElement.appendChild(element);
} else {
for (XNode xsubsubnode : xlist) {
serializeSubnode(xsubsubnode, parentElement, elementName);
}
}
} else if (xsubnode instanceof SchemaXNode) {
serializeSchema((SchemaXNode) xsubnode, parentElement);
} else {
throw new IllegalArgumentException("Unknown subnode " + xsubnode);
}
}
use of com.evolveum.midpoint.prism.xnode.RootXNode in project midpoint by Evolveum.
the class DomLexicalWriter method serializeInternal.
@NotNull
private Element serializeInternal(@NotNull RootXNode rootxnode, Element parentElement) throws SchemaException {
QName rootElementName = rootxnode.getRootElementName();
Element topElement = createElement(rootElementName, parentElement);
if (parentElement != null) {
parentElement.appendChild(topElement);
}
QName typeQName = rootxnode.getTypeQName();
if (typeQName != null && rootxnode.isExplicitTypeDeclaration()) {
DOMUtil.setXsiType(topElement, setQNamePrefixExplicitIfNeeded(typeQName));
}
XNode subnode = rootxnode.getSubnode();
if (subnode instanceof PrimitiveXNode) {
serializePrimitiveElementOrAttribute((PrimitiveXNode) subnode, topElement, rootElementName, false);
return DOMUtil.getFirstChildElement(topElement);
}
if (subnode instanceof MapXNode) {
// at this point we can put frequently used namespaces (e.g. c, t, q, ri) into the document to eliminate their use
// on many places inside the doc (MID-2198)
DOMUtil.setNamespaceDeclarations(topElement, getNamespacePrefixMapper().getNamespacesDeclaredByDefault());
serializeMap((MapXNode) subnode, topElement);
} else if (subnode.isHeterogeneousList()) {
DOMUtil.setNamespaceDeclarations(topElement, getNamespacePrefixMapper().getNamespacesDeclaredByDefault());
serializeExplicitList((ListXNode) subnode, topElement);
} else {
throw new SchemaException("Sub-root xnode is not a map nor an explicit list, cannot serialize to XML (it is " + subnode + ")");
}
addDefaultNamespaceDeclaration(topElement);
return topElement;
}
use of com.evolveum.midpoint.prism.xnode.RootXNode in project midpoint by Evolveum.
the class SearchFilterType method getFilterClauseAsRootXNode.
public RootXNode getFilterClauseAsRootXNode() throws SchemaException {
MapXNode clause = getFilterClauseXNode();
if (clause == null) {
return null;
}
Entry<QName, XNode> singleEntry = clause.getSingleSubEntry("getFilterClauseAsRootXNode");
if (singleEntry == null) {
return null;
}
return new RootXNode(singleEntry.getKey(), singleEntry.getValue());
}
use of com.evolveum.midpoint.prism.xnode.RootXNode in project midpoint by Evolveum.
the class PrismUtil method serializeExpression.
// TODO: Unify the two serializeExpression() methods
public static MapXNode serializeExpression(ExpressionWrapper expressionWrapper, PrismSerializer<RootXNode> xnodeSerializer) throws SchemaException {
MapXNode xmap = new MapXNode();
Object expressionObject = expressionWrapper.getExpression();
if (expressionObject == null) {
return xmap;
}
RootXNode xroot = xnodeSerializer.serializeAnyData(expressionObject, expressionWrapper.getElementName());
if (xroot == null) {
return xmap;
}
xmap.merge(expressionWrapper.getElementName(), xroot.getSubnode());
return xmap;
}
use of com.evolveum.midpoint.prism.xnode.RootXNode in project midpoint by Evolveum.
the class PrismUtil method parseExpression.
public static ExpressionWrapper parseExpression(Entry<QName, XNode> expressionEntry, PrismContext prismContext) throws SchemaException {
if (expressionEntry == null) {
return null;
}
RootXNode expressionRoot = new RootXNode(expressionEntry);
PrismPropertyValue expressionPropertyValue = prismContext.parserFor(expressionRoot).parseItemValue();
ExpressionWrapper expressionWrapper = new ExpressionWrapper(expressionEntry.getKey(), expressionPropertyValue.getValue());
return expressionWrapper;
}
Aggregations