Skip to content

Commit

Permalink
Refactored parsing/generation to/from xnodes. Prism tests pass.
Browse files Browse the repository at this point in the history
  • Loading branch information
mederly committed Oct 3, 2016
1 parent 930e1d7 commit 2910511
Show file tree
Hide file tree
Showing 45 changed files with 1,079 additions and 1,154 deletions.
Expand Up @@ -60,7 +60,7 @@ public SearchFilterType getParsedSearchFilter(PrismContext context) {
SearchFilterType rv = new SearchFilterType();
RootXNode filterClauseNode;
try {
filterClauseNode = (RootXNode) context.parseToXNode(searchFilterText, PrismContext.LANG_XML);
filterClauseNode = (RootXNode) context.parseToXNode(searchFilterText, PrismContext.LANG_XML, null);
} catch (SchemaException e) {
throw new SystemException("Cannot parse search filter " + searchFilterText + ": " + e.getMessage(), e);
}
Expand Down
@@ -0,0 +1,27 @@
/*
* Copyright (c) 2010-2016 Evolveum
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.evolveum.midpoint.prism;

/**
* @author mederly
*/
public enum NameQualificationStrategy {

ALWAYS,
ONLY_IF_NOT_COMMON,
ONLY_IF_AMBIGUOUS;
}
Expand Up @@ -17,6 +17,7 @@
package com.evolveum.midpoint.prism;

import com.evolveum.midpoint.prism.marshaller.XNodeProcessorEvaluationMode;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.logging.Trace;

import java.util.ArrayList;
Expand Down Expand Up @@ -79,6 +80,15 @@ public void warn(Trace logger, String message) {
warn(message);
}

public void warnOrThrow(Trace logger, String message) throws SchemaException {
if (isCompat()) {
logger.warn("{}", message);
warn(message);
} else {
throw new SchemaException(message);
}
}

public void warn(String message) {
warnings.add(message);
}
Expand Down

Large diffs are not rendered by default.

Expand Up @@ -22,6 +22,10 @@
public class SerializationOptions {

private boolean serializeReferenceNames;
private NameQualificationStrategy itemNameQualificationStrategy;
private NameQualificationStrategy itemTypeQualificationStrategy;
private NameQualificationStrategy itemPathQualificationStrategy;
private NameQualificationStrategy genericQualificationStrategy;

public boolean isSerializeReferenceNames() {
return serializeReferenceNames;
Expand All @@ -40,4 +44,36 @@ public static SerializationOptions createSerializeReferenceNames(){
public static boolean isSerializeReferenceNames(SerializationOptions options) {
return options != null && options.isSerializeReferenceNames();
}

public NameQualificationStrategy getItemNameQualificationStrategy() {
return itemNameQualificationStrategy;
}

public void setItemNameQualificationStrategy(NameQualificationStrategy itemNameQualificationStrategy) {
this.itemNameQualificationStrategy = itemNameQualificationStrategy;
}

public NameQualificationStrategy getItemTypeQualificationStrategy() {
return itemTypeQualificationStrategy;
}

public void setItemTypeQualificationStrategy(NameQualificationStrategy itemTypeQualificationStrategy) {
this.itemTypeQualificationStrategy = itemTypeQualificationStrategy;
}

public NameQualificationStrategy getItemPathQualificationStrategy() {
return itemPathQualificationStrategy;
}

public void setItemPathQualificationStrategy(NameQualificationStrategy itemPathQualificationStrategy) {
this.itemPathQualificationStrategy = itemPathQualificationStrategy;
}

public NameQualificationStrategy getGenericQualificationStrategy() {
return genericQualificationStrategy;
}

public void setGenericQualificationStrategy(NameQualificationStrategy genericQualificationStrategy) {
this.genericQualificationStrategy = genericQualificationStrategy;
}
}
Expand Up @@ -9,6 +9,8 @@

import javax.xml.namespace.QName;

import com.evolveum.midpoint.prism.ParsingContext;
import com.evolveum.midpoint.prism.SerializationContext;
import org.apache.commons.lang.StringUtils;

import com.evolveum.midpoint.prism.parser.Parser;
Expand Down Expand Up @@ -44,7 +46,7 @@ public abstract class AbstractParserDeprecated implements Parser {


@Override
public XNode parse(File file) throws SchemaException, IOException {
public XNode parse(File file, ParsingContext parsingContext) throws SchemaException, IOException {
JsonParser parser = createParser(file);
return parseObject(parser);
}
Expand All @@ -53,7 +55,7 @@ public XNode parse(File file) throws SchemaException, IOException {
protected abstract JsonParser createParser(File file) throws SchemaException, IOException ;

@Override
public XNode parse(String dataString) throws SchemaException {
public XNode parse(String dataString, ParsingContext parsingContext) throws SchemaException {
// JsonFactory factory = new JsonFactory();
// JsonParser parser = null;
// try {
Expand Down Expand Up @@ -82,15 +84,15 @@ public boolean canParse(String dataString) {
}

@Override
public String serializeToString(XNode xnode, QName rootElementName) throws SchemaException {
public String serializeToString(XNode xnode, QName rootElementName, SerializationContext serializationContext) throws SchemaException {
if (xnode instanceof RootXNode){
xnode = ((RootXNode) xnode).getSubnode();
}
return serializeToJson(xnode, rootElementName);
}

@Override
public String serializeToString(RootXNode xnode) throws SchemaException {
public String serializeToString(RootXNode xnode, SerializationContext serializationContext) throws SchemaException {
QName rootElementName = xnode.getRootElementName();
return serializeToJson(xnode.getSubnode(), rootElementName);
}
Expand Down
Expand Up @@ -158,7 +158,7 @@ public <T> T unmarshall(MapXNode xnode, Class<T> beanClass, ParsingContext pc) t
} else {
Map.Entry<QName,XNode> entry = xnode.entrySet().iterator().next();
DomParser domParser = prismContext.getParserDom();
String value = domParser.serializeToString(entry.getValue(), entry.getKey());
String value = domParser.serializeToString(entry.getValue(), entry.getKey(), null);
return (T) new XmlAsStringType(value);
}
}
Expand Down Expand Up @@ -443,8 +443,10 @@ public <T> T unmarshall(MapXNode xnode, Class<T> beanClass, ParsingContext pc) t
}

if (setter != null) {
Object value = null;
try {
setter.invoke(bean, prepareValueToBeStored(propValue, wrapInJaxbElement, objectFactory, elementMethod, propName, beanClass, pc));
value = prepareValueToBeStored(propValue, wrapInJaxbElement, objectFactory, elementMethod, propName, beanClass, pc);
setter.invoke(bean, value);
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
throw new SystemException("Cannot invoke setter "+setter+" on bean of type "+beanClass+": "+e.getMessage(), e);
}
Expand Down
Expand Up @@ -22,6 +22,8 @@

import javax.xml.namespace.QName;

import com.evolveum.midpoint.prism.ParsingContext;
import com.evolveum.midpoint.prism.SerializationContext;
import com.evolveum.midpoint.prism.xnode.RootXNode;
import com.evolveum.midpoint.prism.xnode.XNode;
import com.evolveum.midpoint.util.exception.SchemaException;
Expand All @@ -32,24 +34,24 @@
*/
public interface Parser {

XNode parse(File file) throws SchemaException, IOException;
XNode parse(File file, ParsingContext parsingContext) throws SchemaException, IOException;

XNode parse(InputStream stream) throws SchemaException, IOException;
XNode parse(InputStream stream, ParsingContext parsingContext) throws SchemaException, IOException;

XNode parse(String dataString) throws SchemaException;
XNode parse(String dataString, ParsingContext parsingContext) throws SchemaException;

Collection<XNode> parseCollection(File file) throws SchemaException, IOException;
Collection<XNode> parseCollection(File file, ParsingContext parsingContext) throws SchemaException, IOException;

Collection<XNode> parseCollection(InputStream stream) throws SchemaException, IOException;
Collection<XNode> parseCollection(InputStream stream, ParsingContext parsingContext) throws SchemaException, IOException;

Collection<XNode> parseCollection(String dataString) throws SchemaException;
Collection<XNode> parseCollection(String dataString, ParsingContext parsingContext) throws SchemaException;

boolean canParse(File file) throws IOException;

boolean canParse(String dataString);

String serializeToString(XNode xnode, QName rootElementName) throws SchemaException;
String serializeToString(XNode xnode, QName rootElementName, SerializationContext serializationContext) throws SchemaException;

String serializeToString(RootXNode xnode) throws SchemaException;
String serializeToString(RootXNode xnode, SerializationContext serializationContext) throws SchemaException;

}
@@ -0,0 +1,26 @@
/*
* Copyright (c) 2010-2016 Evolveum
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.evolveum.midpoint.prism.parser;

/**
* @author mederly
*/
public enum ParsingMode {

// TODO documentation
STRICT, LAX;
}
Expand Up @@ -29,6 +29,8 @@

import javax.xml.namespace.QName;

import com.evolveum.midpoint.prism.ParsingContext;
import com.evolveum.midpoint.prism.SerializationContext;
import com.evolveum.midpoint.prism.marshaller.XNodeProcessorEvaluationMode;
import com.evolveum.midpoint.prism.marshaller.XPathHolder;
import com.evolveum.midpoint.prism.parser.Parser;
Expand Down Expand Up @@ -70,13 +72,13 @@ public DomParser(SchemaRegistry schemaRegistry) {
}

@Override
public Collection<XNode> parseCollection(File file) throws SchemaException, IOException {
public Collection<XNode> parseCollection(File file, ParsingContext parsingContext) throws SchemaException, IOException {
Document document = DOMUtil.parseFile(file);
return parseCollection(document);
}

@Override
public Collection<XNode> parseCollection(InputStream stream) throws SchemaException, IOException {
public Collection<XNode> parseCollection(InputStream stream, ParsingContext parsingContext) throws SchemaException, IOException {
Document document = DOMUtil.parse(stream);
return parseCollection(document);
}
Expand All @@ -94,25 +96,25 @@ private Collection<XNode> parseCollection(Document document) throws SchemaExcept
}

@Override
public Collection<XNode> parseCollection(String dataString) throws SchemaException {
public Collection<XNode> parseCollection(String dataString, ParsingContext parsingContext) throws SchemaException {
throw new UnsupportedOperationException();
}

@Override
public XNode parse(File file) throws SchemaException {
public XNode parse(File file, ParsingContext parsingContext) throws SchemaException {
Document document = DOMUtil.parseFile(file);
return parse(document);
}

@Override
public XNode parse(InputStream stream) throws SchemaException, IOException {
public XNode parse(InputStream stream, ParsingContext parsingContext) throws SchemaException, IOException {
Document document = DOMUtil.parse(stream);
return parse(document);
}


@Override
public XNode parse(String dataString) throws SchemaException {
public XNode parse(String dataString, ParsingContext parsingContext) throws SchemaException {
Document document = DOMUtil.parseDocument(dataString);
return parse(document);
}
Expand Down Expand Up @@ -423,15 +425,15 @@ public boolean canParse(String dataString) {
}

@Override
public String serializeToString(XNode xnode, QName rootElementName) throws SchemaException {
public String serializeToString(XNode xnode, QName rootElementName, SerializationContext serializationContext) throws SchemaException {
DomSerializer serializer = new DomSerializer(this, schemaRegistry);
RootXNode xroot = ParserUtils.createRootXNode(xnode, rootElementName);
Element element = serializer.serialize(xroot);
return DOMUtil.serializeDOMToString(element);
}

@Override
public String serializeToString(RootXNode xnode) throws SchemaException {
public String serializeToString(RootXNode xnode, SerializationContext serializationContext) throws SchemaException {
DomSerializer serializer = new DomSerializer(this, schemaRegistry);
Element element = serializer.serialize(xnode);
return DOMUtil.serializeDOMToString(element);
Expand Down

0 comments on commit 2910511

Please sign in to comment.