diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/PrismContainerValue.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/PrismContainerValue.java index 0a12251a624..d425b462679 100644 --- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/PrismContainerValue.java +++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/PrismContainerValue.java @@ -87,18 +87,22 @@ public PrismContainerValue(OriginType type, Objectable source, PrismContainerabl /** * Returns a set of items that the property container contains. The items may be properties or inner property containers. *

- * The set must not be null. In case there are no properties an empty set is + * The set may be null. In case there are no properties an empty set is * returned. *

* Returned set is mutable. Live object is returned. * * @return set of items that the property container contains. */ + public List> getItems() { return items; } public Item getNextItem(Item referenceItem) { + if (items == null){ + return null; + } Iterator> iterator = items.iterator(); while (iterator.hasNext()) { Item item = iterator.next(); @@ -114,6 +118,9 @@ public Item getNextItem(Item referenceItem) { } public Item getPreviousItem(Item referenceItem) { + if (items == null){ + return null; + } Item lastItem = null; Iterator> iterator = items.iterator(); while (iterator.hasNext()) { @@ -139,6 +146,9 @@ public Item getPreviousItem(Item referenceItem) { */ public Set> getProperties() { Set> properties = new HashSet>(); + if (items == null){ + return null; + } for (Item item : getItems()) { if (item instanceof PrismProperty) { properties.add((PrismProperty) item); @@ -323,7 +333,7 @@ public boolean substract(Item item) throws SchemaExcep */ public void addReplaceExisting(Item item) throws SchemaException { Item existingItem = findItem(item.getElementName(), Item.class); - if (existingItem != null) { + if (existingItem != null && items != null) { items.remove(existingItem); existingItem.setParent(null); } @@ -334,13 +344,16 @@ public void remove(Item item) { Validate.notNull(item, "Item must not be null."); Item existingItem = findItem(item.getElementName(), Item.class); - if (existingItem != null) { + if (existingItem != null && items != null) { items.remove(existingItem); existingItem.setParent(null); } } public void removeAll() { + if (items == null){ + return; + } Iterator> iterator = items.iterator(); while (iterator.hasNext()) { Item item = iterator.next(); @@ -370,7 +383,7 @@ public void addAllReplaceExisting(Collection> itemsToAdd) thro // Check for conflicts, remove conflicting values for (Item item : itemsToAdd) { Item existingItem = findItem(item.getElementName(), Item.class); - if (existingItem != null) { + if (existingItem != null && items != null) { items.remove(existingItem); } } @@ -478,6 +491,9 @@ public PrismReference findReference(QName elementName) { } public PrismReference findReferenceByCompositeObjectElementName(QName elementName) { + if (items == null){ + return null; + } for (Item item: items) { if (item instanceof PrismReference) { PrismReference ref = (PrismReference)item; @@ -751,7 +767,10 @@ public void removeContainer(ItemPath itemPath) { // Expects that "self" path is NOT present in propPath > void removeItem(ItemPath propPath, Class itemType) { - ItemPathSegment first = propPath.first(); + if (items == null){ + return; + } + ItemPathSegment first = propPath.first(); if (!(first instanceof NameItemPathSegment)) { throw new IllegalArgumentException("Attempt to remove item using a non-name path "+propPath+" in "+this); } @@ -797,8 +816,10 @@ public void recompute(PrismContext prismContext) { @Override public void accept(Visitor visitor) { super.accept(visitor); - for (Item item: getItems()) { - item.accept(visitor); + if (items != null) { + for (Item item : getItems()) { + item.accept(visitor); + } } } @@ -818,20 +839,24 @@ public void accept(Visitor visitor, ItemPath path, boolean recursive) { } QName subName = ((NameItemPathSegment)first).getName(); ItemPath rest = path.rest(); - for (Item item : items) { - if (first.isWildcard() || subName.equals(item.getElementName())) { - item.accept(visitor, rest, recursive); - } - } + if (items != null) { + for (Item item : items) { + if (first.isWildcard() || subName.equals(item.getElementName())) { + item.accept(visitor, rest, recursive); + } + } + } } } public boolean hasCompleteDefinition() { - for (Item item: getItems()) { - if (!item.hasCompleteDefinition()) { - return false; - } - } + if (items != null) { + for (Item item : getItems()) { + if (!item.hasCompleteDefinition()) { + return false; + } + } + } return true; } @@ -1161,14 +1186,16 @@ public PrismContainerValue clone() { protected void copyValues(PrismContainerValue clone) { super.copyValues(clone); clone.id = this.id; - for (Item item: this.items) { - Item clonedItem = item.clone(); - clonedItem.setParent(clone); - if (clone.items == null) { - clone.items = new ArrayList<>(this.items.size()); - } - clone.items.add(clonedItem); - } + if (this.items != null) { + for (Item item : this.items) { + Item clonedItem = item.clone(); + clonedItem.setParent(clone); + if (clone.items == null) { + clone.items = new ArrayList<>(this.items.size()); + } + clone.items.add(clonedItem); + } + } // TODO: deep clonning? clone.rawXNode = this.rawXNode; clone.rawElements = this.rawElements; diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/PrismContext.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/PrismContext.java index 188c09be324..8b63caa08a8 100644 --- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/PrismContext.java +++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/PrismContext.java @@ -17,7 +17,10 @@ import java.io.File; import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -200,6 +203,12 @@ public PrismObject parseObject(Element objectElement) * @throws IOException */ public PrismObject parseObject(File file) throws SchemaException, IOException { + Parser parser = findParser(file); + XNode xnode = parser.parse(file); + return xnodeProcessor.parseObject(xnode); + } + + private Parser findParser(File file) throws IOException{ Parser parser = null; for (Entry entry: parserMap.entrySet()) { Parser aParser = entry.getValue(); @@ -211,8 +220,7 @@ public PrismObject parseObject(File file) throws Schem if (parser == null) { throw new SystemException("No parser for file '"+file+"' (autodetect)"); } - XNode xnode = parser.parse(file); - return xnodeProcessor.parseObject(xnode); + return parser; } /** * Parses a file and creates a prism from it. @@ -228,19 +236,24 @@ public PrismObject parseObject(File file, String langu * Used mostly for testing, but can also be used for built-in editors, etc. */ public PrismObject parseObject(String dataString) throws SchemaException { + Parser parser = findParser(dataString); + XNode xnode = parser.parse(dataString); + return xnodeProcessor.parseObject(xnode); + } + + private Parser findParser(String data){ Parser parser = null; for (Entry entry: parserMap.entrySet()) { Parser aParser = entry.getValue(); - if (aParser.canParse(dataString)) { + if (aParser.canParse(data)) { parser = aParser; break; } } if (parser == null) { - throw new SystemException("No parser for data '"+DebugUtil.excerpt(dataString,16)+"' (autodetect)"); + throw new SystemException("No parser for data '"+DebugUtil.excerpt(data,16)+"' (autodetect)"); } - XNode xnode = parser.parse(dataString); - return xnodeProcessor.parseObject(xnode); + return parser; } /** @@ -312,8 +325,17 @@ public void adopt(PrismContainer getSchemaRegistry().applyDefinition(prismContainerValue, typeName, path, false); } - public List> parseObjects(File file) { - throw new UnsupportedOperationException(); + public List> parseObjects(File file) throws SchemaException, IOException { + Parser parser = findParser(file); + Collection nodes = parser.parseCollection(file); + Iterator nodesIterator = nodes.iterator(); + List> objects = new ArrayList>(); + while (nodesIterator.hasNext()){ + XNode node = nodesIterator.next(); + PrismObject object = xnodeProcessor.parseObject(node); + objects.add(object); + } + return objects; } public String serializeObjectToString(PrismObject object, String language) throws SchemaException { diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/PrismPropertyValue.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/PrismPropertyValue.java index 9e450f1973e..bc0a03b23b3 100644 --- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/PrismPropertyValue.java +++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/PrismPropertyValue.java @@ -22,6 +22,7 @@ import com.evolveum.midpoint.prism.schema.SchemaRegistry; import com.evolveum.midpoint.prism.util.CloneUtil; import com.evolveum.midpoint.prism.util.PrismUtil; +import com.evolveum.midpoint.prism.xnode.MapXNode; import com.evolveum.midpoint.prism.xnode.PrimitiveXNode; import com.evolveum.midpoint.prism.xnode.XNode; import com.evolveum.midpoint.util.DOMUtil; diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/parser/AbstractParser.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/parser/AbstractParser.java index 82702cbdad1..53bfa15ddc0 100644 --- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/parser/AbstractParser.java +++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/parser/AbstractParser.java @@ -3,6 +3,7 @@ import java.io.File; import java.io.IOException; import java.io.StringWriter; +import java.util.Collection; import java.util.Iterator; import java.util.ListIterator; import java.util.Map.Entry; @@ -54,6 +55,16 @@ public abstract class AbstractParser implements Parser { protected abstract JsonParser createParser(File file) throws SchemaException, IOException; public abstract JsonGenerator createGenerator(StringWriter out) throws SchemaException; + @Override + public Collection parseCollection(File file) throws SchemaException, IOException { + throw new UnsupportedOperationException("Parse objects not supported for json and yaml."); + } + + @Override + public Collection parseCollection(String dataString) throws SchemaException { + throw new UnsupportedOperationException("Parse objects not supported for json and yaml."); + } + @Override public XNode parse(File file) throws SchemaException, IOException { JsonParser parser = createParser(file); diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/parser/DomParser.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/parser/DomParser.java index bc6a368b848..bb36df35096 100644 --- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/parser/DomParser.java +++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/parser/DomParser.java @@ -18,6 +18,7 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -28,6 +29,7 @@ import org.w3c.dom.Attr; import org.w3c.dom.Document; import org.w3c.dom.Element; +import org.w3c.dom.Node; import com.evolveum.midpoint.prism.PrismConstants; import com.evolveum.midpoint.prism.PrismContainerValue; @@ -44,6 +46,7 @@ import com.evolveum.midpoint.prism.xnode.XNode; import com.evolveum.midpoint.util.DOMUtil; import com.evolveum.midpoint.util.PrettyPrinter; +import com.evolveum.midpoint.util.QNameUtil; import com.evolveum.midpoint.util.exception.SchemaException; public class DomParser implements Parser { @@ -56,7 +59,27 @@ public DomParser(SchemaRegistry schemaRegistry) { super(); this.schemaRegistry = schemaRegistry; } + + @Override + public Collection parseCollection(File file) throws SchemaException, IOException { + Document document = DOMUtil.parseFile(file); + Element root = DOMUtil.getFirstChildElement(document); + // TODO: maybe some check if this is a collection of other objects??? + List children = DOMUtil.listChildElements(root); + Collection nodes = new ArrayList(); + for (Element child : children){ + RootXNode xroot = parse(child); + nodes.add(xroot); + } + return nodes; + } + @Override + public Collection parseCollection(String dataString) throws SchemaException { + // TODO Auto-generated method stub + return null; + } + @Override public XNode parse(File file) throws SchemaException { Document document = DOMUtil.parseFile(file); @@ -71,6 +94,11 @@ public XNode parse(String dataString) throws SchemaException { public RootXNode parse(Document document) throws SchemaException { Element rootElement = DOMUtil.getFirstChildElement(document); + RootXNode xroot = parse(rootElement); + return xroot; + } + + private RootXNode parse(Element rootElement) throws SchemaException{ RootXNode xroot = new RootXNode(DOMUtil.getQName(rootElement)); extractCommonMetadata(rootElement, xroot); XNode xnode = parseElementContent(rootElement); @@ -355,4 +383,6 @@ public Element serializeToElement(RootXNode xroot) throws SchemaException { DomSerializer serializer = new DomSerializer(this, schemaRegistry); return serializer.serialize(xroot); } + + } diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/parser/DomSerializer.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/parser/DomSerializer.java index 4ce99d155ba..e35f276271d 100644 --- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/parser/DomSerializer.java +++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/parser/DomSerializer.java @@ -140,6 +140,9 @@ private void serializeSubnode(XNode xsubnode, Element parentElement, QName eleme } if (xsubnode instanceof MapXNode) { Element element = createElement(elementName); + if (xsubnode.isExplicitTypeDeclaration() && xsubnode.getTypeQName() != null){ + DOMUtil.setXsiType(element, xsubnode.getTypeQName()); + } parentElement.appendChild(element); serializeMap((MapXNode)xsubnode, element); } else if (xsubnode instanceof PrimitiveXNode) { diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/parser/Parser.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/parser/Parser.java index 1cd6e7bb7f0..25915de98d0 100644 --- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/parser/Parser.java +++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/parser/Parser.java @@ -17,6 +17,7 @@ import java.io.File; import java.io.IOException; +import java.util.Collection; import javax.xml.namespace.QName; @@ -34,6 +35,10 @@ public interface Parser { XNode parse(String dataString) throws SchemaException; + Collection parseCollection(File file) throws SchemaException, IOException; + + Collection parseCollection(String dataString) throws SchemaException; + boolean canParse(File file) throws IOException; boolean canParse(String dataString); diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/parser/PrismBeanConverter.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/parser/PrismBeanConverter.java index f708a94b301..fa269451bce 100644 --- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/parser/PrismBeanConverter.java +++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/parser/PrismBeanConverter.java @@ -201,6 +201,14 @@ public T unmarshall(MapXNode xnode, Class beanClass) throws SchemaExcepti String paramNamespace = determineNamespace(paramType); + //check for subclasses??? + if (!(xsubnode instanceof PrimitiveXNode) && xsubnode.getTypeQName()!= null){ + Class explicitParamType = schemaRegistry.determineCompileTimeClass(xsubnode.getTypeQName()); + if (explicitParamType != null && explicitParamType != null){ + paramType = explicitParamType; + } + } + Object propValue = null; Collection propValues = null; if (xsubnode instanceof ListXNode) { @@ -586,14 +594,21 @@ private T postConvertUnmarshall(Object parsedPrimValue) { } } - public MapXNode marshall(T bean) { + public XNode marshall(T bean) { if (bean == null) { return null; } MapXNode xmap = new MapXNode(); - + Class beanClass = bean.getClass(); + + //check for enums + if (beanClass.isEnum()){ + QName fieldTypeName = findFieldTypeName(null, beanClass, DEFAULT_NAMESPACE_PLACEHOLDER); + return marshallValue(bean, fieldTypeName, false); + } + XmlType xmlType = beanClass.getAnnotation(XmlType.class); if (xmlType == null) { throw new IllegalArgumentException("Cannot marshall "+beanClass+" it does not have @XmlType annotation"); diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/parser/XNodeProcessor.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/parser/XNodeProcessor.java index 13f1c95982d..75fa84851a4 100644 --- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/parser/XNodeProcessor.java +++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/parser/XNodeProcessor.java @@ -510,7 +510,21 @@ public QName transform(QName in) { protectedType.setEncryptedData(encryptedDataType); } } - // TODO: clearValue + // protected data empty..check for clear value + if (protectedType.isEmpty()){ + XNode xClearValue = xmap.get(ProtectedDataType.F_CLEAR_VALUE); + if (xClearValue == null){ + return; + } + if (!(xClearValue instanceof PrimitiveXNode)){ + //this is maybe not good.. + throw new SchemaException("Cannot parse clear value from " + xClearValue); + } + // TODO: clearValue + T clearValue = (T) ((PrimitiveXNode)xClearValue).getParsedValue(DOMUtil.XSD_STRING); + protectedType.setClearValue(clearValue); + } + } private PolyString parsePolyString(MapXNode xmap) throws SchemaException { @@ -722,6 +736,7 @@ private PrismReferenceValue parseReferenceAsCompositeObject(MapXNode xmap, PrismReferenceValue refVal = new PrismReferenceValue(); setReferenceObject(refVal, compositeObject); + referenceDefinition.setComposite(true); return refVal; } diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/parser/XNodeSerializer.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/parser/XNodeSerializer.java index 099dbf364fc..d62dffefb76 100644 --- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/parser/XNodeSerializer.java +++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/parser/XNodeSerializer.java @@ -55,6 +55,7 @@ import com.evolveum.midpoint.prism.util.PrismUtil; import com.evolveum.midpoint.prism.xml.DynamicNamespacePrefixMapper; import com.evolveum.midpoint.prism.xml.XmlTypeConverter; +import com.evolveum.midpoint.prism.xml.XsdTypeMapper; import com.evolveum.midpoint.prism.xnode.ListXNode; import com.evolveum.midpoint.prism.xnode.MapXNode; import com.evolveum.midpoint.prism.xnode.PrimitiveXNode; @@ -67,6 +68,7 @@ import com.evolveum.prism.xml.ns._public.types_2.ItemPathType; import com.evolveum.prism.xml.ns._public.types_2.PolyStringType; import com.evolveum.prism.xml.ns._public.types_2.ProtectedDataType; +import com.evolveum.prism.xml.ns._public.types_2.ProtectedStringType; import com.evolveum.prism.xml.ns._public.types_2.SchemaDefinitionType; /** @@ -164,7 +166,7 @@ private void serializeContainerValue(MapXNode xmap, Pr } } - private XNode serializeItem(Item item) throws SchemaException { + public XNode serializeItem(Item item) throws SchemaException { ListXNode xlist = new ListXNode(); List values = item.getValues(); ItemDefinition definition = item.getDefinition(); @@ -192,7 +194,7 @@ private XNode serializeItem(Item item) throws SchemaEx } } - protected XNode serializeItemValue(V itemValue, ItemDefinition definition) throws SchemaException { + public XNode serializeItemValue(V itemValue, ItemDefinition definition) throws SchemaException { XNode xnode; if (definition == null){ return serializePropertyRawValue((PrismPropertyValue) itemValue); @@ -253,7 +255,12 @@ private XNode serializePropertyValue(PrismPropertyValue value, PrismPrope if (realValue instanceof SchemaDefinitionType) { return serializeSchemaDefinition((SchemaDefinitionType)realValue); } else if (realValue instanceof ProtectedDataType) { - return serializeProtectedDataType((ProtectedDataType) realValue); + MapXNode xProtected = serializeProtectedDataType((ProtectedDataType) realValue); + if (definition.isDynamic()){ + xProtected.setExplicitTypeDeclaration(true); + xProtected.setTypeQName(definition.getTypeName()); + } + return xProtected; } else if (realValue instanceof PolyString) { return serializePolyString((PolyString) realValue); } else if (realValue instanceof ItemPathType){ @@ -283,12 +290,16 @@ private XNode serializePolyString(PolyString realValue) { return xprim; } - private XNode serializeProtectedDataType(ProtectedDataType protectedType) { + private MapXNode serializeProtectedDataType(ProtectedDataType protectedType) { MapXNode xmap = new MapXNode(); if (protectedType.getEncryptedDataType() != null) { EncryptedDataType encryptedDataType = protectedType.getEncryptedDataType(); - MapXNode xEncryptedDataType = beanConverter.marshall(encryptedDataType); + MapXNode xEncryptedDataType = (MapXNode) beanConverter.marshall(encryptedDataType); xmap.put(ProtectedDataType.F_ENCRYPTED_DATA, xEncryptedDataType); + } else if (protectedType.getClearValue() != null){ + QName type = XsdTypeMapper.toXsdType(protectedType.getClearValue().getClass()); + PrimitiveXNode xClearValue = createPrimitiveXNode(protectedType.getClearValue(), type); + xmap.put(ProtectedDataType.F_CLEAR_VALUE, xClearValue); } // TODO: clearValue return xmap; diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/util/JaxbTestUtil.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/util/JaxbTestUtil.java index ac825ab451b..d969cb636ad 100644 --- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/util/JaxbTestUtil.java +++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/util/JaxbTestUtil.java @@ -466,6 +466,10 @@ public T unmarshalObject(File file, Class type) throws JAXBException, Sch return value; } + public Object unmarshalObjects(File file) throws JAXBException{ + return createUnmarshaller().unmarshal(file); + } + public T unmarshalObject(String stringXml, Class type) throws JAXBException, SchemaException { JAXBElement element = unmarshalElement(stringXml, type); if (element == null) { diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/util/PrismTestUtil.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/util/PrismTestUtil.java index 77ae9276685..b6462716c69 100644 --- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/util/PrismTestUtil.java +++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/util/PrismTestUtil.java @@ -115,7 +115,7 @@ public static PrismObject parseObject(Element element) return getPrismContext().parseObject(element); } - public static List> parseObjects(File file) throws SchemaException { + public static List> parseObjects(File file) throws SchemaException, IOException { return getPrismContext().parseObjects(file); } diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/util/ValueSerializationUtil.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/util/ValueSerializationUtil.java new file mode 100644 index 00000000000..522b9354cad --- /dev/null +++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/util/ValueSerializationUtil.java @@ -0,0 +1,131 @@ +package com.evolveum.midpoint.prism.util; + +import java.util.Collection; +import java.util.List; + +import javax.xml.namespace.QName; + +import com.evolveum.midpoint.prism.Containerable; +import com.evolveum.midpoint.prism.Item; +import com.evolveum.midpoint.prism.ItemDefinition; +import com.evolveum.midpoint.prism.PrismContainer; +import com.evolveum.midpoint.prism.PrismContainerDefinition; +import com.evolveum.midpoint.prism.PrismContext; +import com.evolveum.midpoint.prism.PrismProperty; +import com.evolveum.midpoint.prism.PrismPropertyValue; +import com.evolveum.midpoint.prism.PrismReference; +import com.evolveum.midpoint.prism.PrismValue; +import com.evolveum.midpoint.prism.Referencable; +import com.evolveum.midpoint.prism.parser.XNodeProcessor; +import com.evolveum.midpoint.prism.parser.XNodeSerializer; +import com.evolveum.midpoint.prism.query.ObjectFilter; +import com.evolveum.midpoint.prism.xnode.MapXNode; +import com.evolveum.midpoint.prism.xnode.RootXNode; +import com.evolveum.midpoint.prism.xnode.XNode; +import com.evolveum.midpoint.util.exception.SchemaException; + +public class ValueSerializationUtil { + + public static String serializeValue(T value, ItemDefinition def, PrismContext prismContext, String language) throws SchemaException{ + System.out.println("value serialization"); + if (value == null){ + return null; + } + + if (value instanceof List){ + List values = (List) value; + if (values.isEmpty()){ + return null; + } + } + + PrismValue pVal = null; + + if (value instanceof Containerable){ + pVal = ((Containerable) value).asPrismContainerValue(); + } else if (value instanceof Referencable){ + pVal = ((Referencable) value).asReferenceValue(); + } else { + pVal = new PrismPropertyValue(value); + } + +// Class clazz = prismContext.getSchemaRegistry().determineCompileTimeClass(itemName); +// PrismContainerDefinition def = prismContext.getSchemaRegistry().determineDefinitionFromClass(clazz); +// +// ItemDefinition def = prismContext.getSchemaRegistry().findItemDefinitionByElementName(itemName); + + QName itemName = null; + if (def != null){ + itemName = def.getName(); + } + + XNodeSerializer serializer = prismContext.getXnodeProcessor().createSerializer(); + XNode node = serializer.serializeItemValue(pVal, def); + String s = prismContext.getParserDom().serializeToString(node, itemName); + System.out.println("serialized: " + s); + return s; +// throw new UnsupportedOperationException("need to be implemented"); + } + + public static String serializeItemValue(PrismValue value, String language){ + System.out.println("item value serialization"); + throw new UnsupportedOperationException("need to be implemented"); + } + + public static String serializeFilter(ObjectFilter query, PrismContext prismContext, String language){ + System.out.println("query serialization"); + throw new UnsupportedOperationException("need to be implemented"); + } + + public static T deserializeValue(String value, Class clazz, QName itemName, ItemDefinition itemDef, PrismContext prismContext, String language) throws SchemaException{ + System.out.println("item value deserialization"); + + XNode xnode = prismContext.getParserDom().parse(value); + + System.out.println("xnode: " + xnode.debugDump()); + + MapXNode xmap = null; + if (xnode instanceof RootXNode){ + xmap = (MapXNode) ((RootXNode) xnode).getSubnode(); + } else if (xnode instanceof MapXNode){ + xmap = (MapXNode) xnode; + } + + Item item = prismContext.getXnodeProcessor().parseItem(xmap, itemName, itemDef); + + System.out.println("item: " + item.debugDump()); + + if (item instanceof PrismProperty){ + PrismProperty prop = (PrismProperty) item; + return (T) prop.getRealValue(); + } else if (item instanceof PrismContainer){ + PrismContainer cont = (PrismContainer) item; + return (T) cont.getValue().asContainerable(); + } else if (item instanceof PrismReference){ + PrismReference ref = (PrismReference) item; + return (T) ref.getValue(); + } + if (item != null){ + return (T) item.getValue(0); + } +// if (prismContext.getBeanConverter().canConvert(clazz)){ +// prismContext.getBeanConverter().unmarshall(xmap, clazz); +// } else{ +// prismContext.getXnodeProcessor().parseContainer(xnode, clazz); +// } + + throw new UnsupportedOperationException("need to be implemented"); + } + + public static Collection deserializeItemValues(String value, String language){ + System.out.println("item value deserialization"); + throw new UnsupportedOperationException("need to be implemented"); + } + + public static ObjectFilter deserializeFilter(String query, String language){ + System.out.println("query deserialization"); + throw new UnsupportedOperationException("need to be implemented"); + } + + +} diff --git a/infra/prism/src/main/java/com/evolveum/prism/xml/ns/_public/types_2/ProtectedDataType.java b/infra/prism/src/main/java/com/evolveum/prism/xml/ns/_public/types_2/ProtectedDataType.java index 6fc713eacc1..ef73fc0b5d4 100644 --- a/infra/prism/src/main/java/com/evolveum/prism/xml/ns/_public/types_2/ProtectedDataType.java +++ b/infra/prism/src/main/java/com/evolveum/prism/xml/ns/_public/types_2/ProtectedDataType.java @@ -77,6 +77,7 @@ public abstract class ProtectedDataType implements ProtectedData, Serializ public static final QName COMPLEX_TYPE = new QName("http://prism.evolveum.com/xml/ns/public/types-2", "ProtectedDataType"); public final static QName F_ENCRYPTED_DATA = new QName("http://prism.evolveum.com/xml/ns/public/types-2", "encryptedData"); + public final static QName F_CLEAR_VALUE = new QName("http://prism.evolveum.com/xml/ns/public/types-2", "clearValue"); public static final String NS_XML_ENC = "http://www.w3.org/2001/04/xmlenc#"; public static final String NS_XML_DSIG = "http://www.w3.org/2000/09/xmldsig#"; diff --git a/infra/prism/src/main/resources/xml/ns/public/types-2.xsd b/infra/prism/src/main/resources/xml/ns/public/types-2.xsd index cd1352725c8..00d4f005e3f 100644 --- a/infra/prism/src/main/resources/xml/ns/public/types-2.xsd +++ b/infra/prism/src/main/resources/xml/ns/public/types-2.xsd @@ -415,7 +415,7 @@ - + Path to the CONTAINER. diff --git a/infra/schema/src/main/resources/xml/ns/public/common/common-2a.xsd b/infra/schema/src/main/resources/xml/ns/public/common/common-2a.xsd index 959912fad55..d6456cd369c 100644 --- a/infra/schema/src/main/resources/xml/ns/public/common/common-2a.xsd +++ b/infra/schema/src/main/resources/xml/ns/public/common/common-2a.xsd @@ -3996,6 +3996,7 @@ + @@ -6631,6 +6632,7 @@ + diff --git a/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestConstants.java b/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestConstants.java index 28f6ea667f9..84ccc0bf393 100644 --- a/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestConstants.java +++ b/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestConstants.java @@ -27,6 +27,8 @@ */ public class TestConstants { + public static final String COMMON_DIR_PATH = "src/test/resources/common"; + public static final String NS_EXTENSION = SchemaConstants.NS_MIDPOINT_TEST + "/extension"; public static final String NS_FOO = "http://www.example.com/foo"; @@ -38,6 +40,7 @@ public class TestConstants { public static final File COMMON_DIR = new File("src/test/resources/common"); + public static final String USER_FILE_BASENAME = "user-jack"; public static final File USER_FILE = new File(COMMON_DIR, "user-jack.xml"); public static final Long USER_ASSIGNMENT_1_ID = 111L; diff --git a/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestParseUser.java b/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestParseUser.java index 6fc9e22d47f..3011de5dcdd 100644 --- a/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestParseUser.java +++ b/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestParseUser.java @@ -15,12 +15,39 @@ */ package com.evolveum.midpoint.schema; -import com.evolveum.midpoint.prism.*; +import static com.evolveum.midpoint.schema.TestConstants.*; +import static org.testng.AssertJUnit.assertEquals; +import static org.testng.AssertJUnit.assertNotNull; +import static org.testng.AssertJUnit.assertTrue; + +import java.io.File; +import java.io.IOException; +import java.util.List; + +import javax.xml.namespace.QName; + +import org.testng.annotations.BeforeSuite; +import org.testng.annotations.Test; +import org.w3c.dom.Element; +import org.xml.sax.SAXException; + +import com.evolveum.midpoint.prism.Containerable; +import com.evolveum.midpoint.prism.Item; +import com.evolveum.midpoint.prism.PrismConstants; +import com.evolveum.midpoint.prism.PrismContainer; +import com.evolveum.midpoint.prism.PrismContainerValue; +import com.evolveum.midpoint.prism.PrismContext; +import com.evolveum.midpoint.prism.PrismObject; +import com.evolveum.midpoint.prism.PrismObjectDefinition; +import com.evolveum.midpoint.prism.PrismProperty; +import com.evolveum.midpoint.prism.PrismPropertyValue; +import com.evolveum.midpoint.prism.PrismReference; +import com.evolveum.midpoint.prism.PrismReferenceValue; +import com.evolveum.midpoint.prism.delta.ObjectDelta; import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.prism.polystring.PolyString; import com.evolveum.midpoint.prism.query.ObjectFilter; import com.evolveum.midpoint.prism.util.PrismAsserts; -import com.evolveum.midpoint.prism.util.JaxbTestUtil; import com.evolveum.midpoint.prism.util.PrismTestUtil; import com.evolveum.midpoint.schema.constants.MidPointConstants; import com.evolveum.midpoint.schema.constants.SchemaConstants; @@ -33,36 +60,16 @@ import com.evolveum.midpoint.xml.ns._public.common.common_2a.AssignmentType; import com.evolveum.midpoint.xml.ns._public.common.common_2a.ExtensionType; import com.evolveum.midpoint.xml.ns._public.common.common_2a.ObjectReferenceType; -import com.evolveum.midpoint.xml.ns._public.common.common_2a.ObjectType; +import com.evolveum.midpoint.xml.ns._public.common.common_2a.ObjectReferenceType.Filter; import com.evolveum.midpoint.xml.ns._public.common.common_2a.ShadowType; import com.evolveum.midpoint.xml.ns._public.common.common_2a.UserType; -import com.evolveum.midpoint.xml.ns._public.common.common_2a.ObjectReferenceType.Filter; import com.evolveum.prism.xml.ns._public.types_2.PolyStringType; -import com.sun.tools.xjc.reader.Ring; - -import org.testng.annotations.BeforeSuite; -import org.testng.annotations.Test; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.xml.sax.SAXException; - -import javax.xml.bind.JAXBElement; -import javax.xml.bind.JAXBException; -import javax.xml.namespace.QName; - -import java.io.File; -import java.io.IOException; -import java.util.List; - -import static org.testng.AssertJUnit.assertEquals; -import static org.testng.AssertJUnit.assertNotNull; -import static com.evolveum.midpoint.schema.TestConstants.*; /** * @author semancik * */ -public class TestParseUser { +public abstract class TestParseUser { @BeforeSuite public void setup() throws SchemaException, SAXException, IOException { @@ -70,6 +77,19 @@ public void setup() throws SchemaException, SAXException, IOException { PrismTestUtil.resetPrismContext(MidPointPrismContextFactory.FACTORY); } + protected abstract String getSubdirName(); + + protected abstract String getLanguage(); + + protected abstract String getFilenameSuffix(); + + protected File getCommonSubdir() { + return new File(COMMON_DIR_PATH, getSubdirName()); + } + + protected File getFile(String baseName) { + return new File(getCommonSubdir(), baseName+"."+getFilenameSuffix()); + } @Test public void testParseUserFile() throws Exception { @@ -80,18 +100,16 @@ public void testParseUserFile() throws Exception { PrismContext prismContext = PrismTestUtil.getPrismContext(); // WHEN - PrismObject user = prismContext.parseObject(USER_FILE); + PrismObject user = prismContext.parseObject(getFile(USER_FILE_BASENAME)); // THEN System.out.println("Parsed user:"); System.out.println(user.debugDump()); - String serialized = prismContext.serializeObjectToString(user, PrismContext.LANG_XML); + String serialized = prismContext.serializeObjectToString(user, getLanguage()); System.out.println("Serialized: \n" +serialized); PrismObject reparsedUser = prismContext.parseObject(serialized); - - assertUser(user); } @@ -107,7 +125,7 @@ public void testParseUserDom() throws Exception { // Element userElement = DOMUtil.getFirstChildElement(document); // WHEN - PrismObject user = prismContext.parseObject(USER_FILE); + PrismObject user = prismContext.parseObject(getFile(USER_FILE_BASENAME)); // THEN System.out.println("Parsed user:"); @@ -115,123 +133,52 @@ public void testParseUserDom() throws Exception { assertUser(user); } - - @Test - public void testPrismParseJaxb() throws Exception { - final String TEST_NAME = "testPrismParseJaxb"; - PrismTestUtil.displayTestTitle(TEST_NAME); - - // GIVEN -// PrismTestUtil.resetPrismContext(); - PrismContext prismContext = PrismTestUtil.getPrismContext(); - JaxbTestUtil jaxbUtil = PrismTestUtil.getJaxbUtil(); - -// prismContext.getSchemaRegistry().registerPrismSchemaFile(file); - - - // WHEN - UserType userType = jaxbUtil.unmarshalObject(USER_FILE, UserType.class); - - System.out.println("Parsed user (before adopt):"); - System.out.println(userType.asPrismObject().debugDump()); - - prismContext.adopt(userType); - - // THEN - System.out.println("Parsed user (after adopt):"); - System.out.println(userType.asPrismObject().debugDump()); - - assertUser(userType.asPrismObject()); - - userType.asPrismObject().checkConsistence(true, true); - } - /** - * The definition should be set properly even if the declared type is ObjectType. The Prism should determine - * the actual type. - */ @Test - public void testPrismParseJaxbObjectType() throws Exception { - final String TEST_NAME = "testPrismParseJaxbObjectType"; + public void testParseUserRoundTrip() throws Exception{ + final String TEST_NAME = "testParseUserRoundTrip"; PrismTestUtil.displayTestTitle(TEST_NAME); - + // GIVEN PrismContext prismContext = PrismTestUtil.getPrismContext(); - JaxbTestUtil jaxbProcessor = PrismTestUtil.getJaxbUtil(); - // WHEN - ObjectType userType = jaxbProcessor.unmarshalObject(USER_FILE, ObjectType.class); - - System.out.println("Parsed user (before adopt):"); - System.out.println(userType.asPrismObject().debugDump()); +// Document document = DOMUtil.parseFile(USER_FILE); +// Element userElement = DOMUtil.getFirstChildElement(document); - prismContext.adopt(userType); + // WHEN + PrismObject user = prismContext.parseObject(getFile(USER_FILE_BASENAME)); // THEN - System.out.println("Parsed user (after adopt):"); - System.out.println(userType.asPrismObject().debugDump()); - - assertUser(userType.asPrismObject()); - } - - /** - * Parsing in form of JAXBELement - */ - @Test - public void testPrismParseJaxbElement() throws Exception { - final String TEST_NAME = "testPrismParseJaxbElement"; - PrismTestUtil.displayTestTitle(TEST_NAME); + System.out.println("Parsed user:"); + System.out.println(user.debugDump()); - // GIVEN - PrismContext prismContext = PrismTestUtil.getPrismContext(); - JaxbTestUtil jaxbProcessor = PrismTestUtil.getJaxbUtil(); + assertUser(user); - // WHEN - JAXBElement jaxbElement = jaxbProcessor.unmarshalElement(USER_FILE, UserType.class); - UserType userType = jaxbElement.getValue(); - System.out.println("Parsed user (before adopt):"); - System.out.println(userType.asPrismObject().debugDump()); + String serializedUser = prismContext.serializeObjectToString(user, getLanguage()); + System.out.println("Serialized user:"); + System.out.println(serializedUser); - prismContext.adopt(userType); + // REPARSE + PrismObject reparsedUser = prismContext.parseObject(serializedUser); // THEN - System.out.println("Parsed user (after adopt):"); - System.out.println(userType.asPrismObject().debugDump()); - - assertUser(userType.asPrismObject()); - } - - /** - * Parsing in form of JAXBELement, with declared ObjectType - */ - @Test - public void testPrismParseJaxbElementObjectType() throws Exception { - final String TEST_NAME = "testPrismParseJaxbElementObjectType"; - PrismTestUtil.displayTestTitle(TEST_NAME); - - // GIVEN - PrismContext prismContext = PrismTestUtil.getPrismContext(); - JaxbTestUtil jaxbProcessor = PrismTestUtil.getJaxbUtil(); + System.out.println("Parsed user:"); + System.out.println(reparsedUser.debugDump()); - // WHEN - JAXBElement jaxbElement = jaxbProcessor.unmarshalElement(USER_FILE, ObjectType.class); - ObjectType userType = jaxbElement.getValue(); + assertUser(reparsedUser); - System.out.println("Parsed user (before adopt):"); - System.out.println(userType.asPrismObject().debugDump()); + // and some sanity checks - prismContext.adopt(userType); + assertTrue("User not equals", user.equals(reparsedUser)); - // THEN - System.out.println("Parsed user (after adopt):"); - System.out.println(userType.asPrismObject().debugDump()); + ObjectDelta delta = user.diff(reparsedUser); + assertTrue("Delta not empty", delta.isEmpty()); - assertUser(userType.asPrismObject()); } - private void assertUser(PrismObject user) { + void assertUser(PrismObject user) { user.checkConsistence(); assertUserPrism(user); assertUserJaxb(user.asObjectable()); @@ -239,7 +186,7 @@ private void assertUser(PrismObject user) { user.checkConsistence(true, true); } - private void assertUserPrism(PrismObject user) { + void assertUserPrism(PrismObject user) { assertEquals("Wrong oid", "2f9b9299-6f45-498f-bc8e-8d17c6b93b20", user.getOid()); // assertEquals("Wrong version", "42", user.getVersion()); diff --git a/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestParseUserJson.java b/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestParseUserJson.java new file mode 100644 index 00000000000..43202462138 --- /dev/null +++ b/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestParseUserJson.java @@ -0,0 +1,30 @@ +package com.evolveum.midpoint.schema; + +import java.io.File; + +import org.testng.annotations.Test; + +import com.evolveum.midpoint.prism.PrismContext; + +public class TestParseUserJson extends TestParseUser{ + + @Test + public void f() { + } + + +@Override +protected String getSubdirName() { + return "json"; +} + +@Override +protected String getLanguage() { + return PrismContext.LANG_JSON; +} + +@Override +protected String getFilenameSuffix() { + return "json"; +} +} diff --git a/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestParseUserXml.java b/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestParseUserXml.java new file mode 100644 index 00000000000..a95c4ff5a37 --- /dev/null +++ b/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestParseUserXml.java @@ -0,0 +1,147 @@ +package com.evolveum.midpoint.schema; + +import static com.evolveum.midpoint.schema.TestConstants.USER_FILE; + +import javax.xml.bind.JAXBElement; + +import org.testng.annotations.Test; + +import com.evolveum.midpoint.prism.PrismContext; +import com.evolveum.midpoint.prism.util.JaxbTestUtil; +import com.evolveum.midpoint.prism.util.PrismTestUtil; +import com.evolveum.midpoint.xml.ns._public.common.common_2a.ObjectType; +import com.evolveum.midpoint.xml.ns._public.common.common_2a.UserType; + +public class TestParseUserXml extends TestParseUser{ + + @Override + protected String getSubdirName() { + return "xml"; + } + + @Override + protected String getLanguage() { + return PrismContext.LANG_XML; + } + + @Override + protected String getFilenameSuffix() { + return "xml"; + } + + @Test + public void testPrismParseJaxb() throws Exception { + final String TEST_NAME = "testPrismParseJaxb"; + PrismTestUtil.displayTestTitle(TEST_NAME); + + // GIVEN +// PrismTestUtil.resetPrismContext(); + PrismContext prismContext = PrismTestUtil.getPrismContext(); + JaxbTestUtil jaxbUtil = PrismTestUtil.getJaxbUtil(); + +// prismContext.getSchemaRegistry().registerPrismSchemaFile(file); + + + // WHEN + UserType userType = jaxbUtil.unmarshalObject(USER_FILE, UserType.class); + + System.out.println("Parsed user (before adopt):"); + System.out.println(userType.asPrismObject().debugDump()); + + prismContext.adopt(userType); + + // THEN + System.out.println("Parsed user (after adopt):"); + System.out.println(userType.asPrismObject().debugDump()); + + assertUser(userType.asPrismObject()); + + userType.asPrismObject().checkConsistence(true, true); + } + + /** + * The definition should be set properly even if the declared type is ObjectType. The Prism should determine + * the actual type. + */ + @Test + public void testPrismParseJaxbObjectType() throws Exception { + final String TEST_NAME = "testPrismParseJaxbObjectType"; + PrismTestUtil.displayTestTitle(TEST_NAME); + + // GIVEN + PrismContext prismContext = PrismTestUtil.getPrismContext(); + JaxbTestUtil jaxbProcessor = PrismTestUtil.getJaxbUtil(); + + // WHEN + ObjectType userType = jaxbProcessor.unmarshalObject(USER_FILE, ObjectType.class); + + System.out.println("Parsed user (before adopt):"); + System.out.println(userType.asPrismObject().debugDump()); + + prismContext.adopt(userType); + + // THEN + System.out.println("Parsed user (after adopt):"); + System.out.println(userType.asPrismObject().debugDump()); + + assertUser(userType.asPrismObject()); + } + + /** + * Parsing in form of JAXBELement + */ + @Test + public void testPrismParseJaxbElement() throws Exception { + final String TEST_NAME = "testPrismParseJaxbElement"; + PrismTestUtil.displayTestTitle(TEST_NAME); + + // GIVEN + PrismContext prismContext = PrismTestUtil.getPrismContext(); + JaxbTestUtil jaxbProcessor = PrismTestUtil.getJaxbUtil(); + + // WHEN + JAXBElement jaxbElement = jaxbProcessor.unmarshalElement(USER_FILE, UserType.class); + UserType userType = jaxbElement.getValue(); + + System.out.println("Parsed user (before adopt):"); + System.out.println(userType.asPrismObject().debugDump()); + + prismContext.adopt(userType); + + // THEN + System.out.println("Parsed user (after adopt):"); + System.out.println(userType.asPrismObject().debugDump()); + + assertUser(userType.asPrismObject()); + } + + /** + * Parsing in form of JAXBELement, with declared ObjectType + */ + @Test + public void testPrismParseJaxbElementObjectType() throws Exception { + final String TEST_NAME = "testPrismParseJaxbElementObjectType"; + PrismTestUtil.displayTestTitle(TEST_NAME); + + // GIVEN + PrismContext prismContext = PrismTestUtil.getPrismContext(); + JaxbTestUtil jaxbProcessor = PrismTestUtil.getJaxbUtil(); + + // WHEN + JAXBElement jaxbElement = jaxbProcessor.unmarshalElement(USER_FILE, ObjectType.class); + ObjectType userType = jaxbElement.getValue(); + + System.out.println("Parsed user (before adopt):"); + System.out.println(userType.asPrismObject().debugDump()); + + prismContext.adopt(userType); + + // THEN + System.out.println("Parsed user (after adopt):"); + System.out.println(userType.asPrismObject().debugDump()); + + assertUser(userType.asPrismObject()); + } + + +} diff --git a/infra/schema/src/test/resources/common/json/user-jack.json b/infra/schema/src/test/resources/common/json/user-jack.json index 9011809264c..41070888389 100644 --- a/infra/schema/src/test/resources/common/json/user-jack.json +++ b/infra/schema/src/test/resources/common/json/user-jack.json @@ -1,46 +1,90 @@ -{ -"_type" : "user", - "_oid" : "2f9b9299-6f45-498f-bc8e-8d17c6b93b20", - "_ns" : "http://midpoint.evolveum.com/xml/ns/public/common/common-2a", - - +{ + "@ns" : "http://midpoint.evolveum.com/xml/ns/public/common/common-2a", + "object" : { + "@type" : "http://midpoint.evolveum.com/xml/ns/public/common/common-2a#UserType", + "oid" : "2f9b9299-6f45-498f-bc8e-8d17c6b93b20", "name" : "jack", - - "link" : { - "_oid" : "2f9b9299-6f45-498f-aaaa-000000002222", - "_type" : "RoleType", - "name" : "captain", - "resource" : { - "_oid" : "2f9b9299-5555-5555-5555-000000002222", - "name" : "Rum Supply System", - "connectorRef" : { - "_oid" : "2f9b9299-cccc-cccc-cccc-000000002222" - } - - }, - "objectClass" : "{http://midpoint.evolveum.com/xml/ns/public/common/common-2a}AccountObjectClass" + "extension" : { + "@ns" : "http://www.example.com/foo", + "bar" : [ { + "@typeDef" : "http://www.w3.org/2001/XMLSchema#string", + "@value" : "BAR" + } ], + "num" : [ { + "@typeDef" : "http://www.w3.org/2001/XMLSchema#int", + "@value" : 42 + } ], + "multi" : [ { + "@typeDef" : "http://www.w3.org/2001/XMLSchema#string", + "@value" : "raz" + }, { + "@typeDef" : "http://www.w3.org/2001/XMLSchema#string", + "@value" : "dva" + }, { + "@typeDef" : "http://www.w3.org/2001/XMLSchema#string", + "@value" : "tri" + } ], + "password" : [ { } ] + }, + "linkRef" : [ { + "oid" : "2f9b9299-6f45-498f-aaaa-000000001111", + "type" : "http://midpoint.evolveum.com/xml/ns/public/common/common-2a#ShadowType" + }, { + "oid" : "2f9b9299-6f45-498f-aaaa-000000002222", + "type" : "http://midpoint.evolveum.com/xml/ns/public/common/common-2a#ShadowType" + }, { + "oid" : "2f9b9299-6f45-498f-aaaa-000000003333", + "type" : "http://midpoint.evolveum.com/xml/ns/public/common/common-2a#ShadowType", + "description" : "This is third accountRef", + "filter" : { + "@ns" : "http://prism.evolveum.com/xml/ns/public/query-2", + "equal" : { + "path" : "c:connectorType", + "value" : [ ">org.identityconnectors.ldap.LdapConnector" ] + } + } + } ], + "assignment" : [ { + "id" : 111, + "extension" : { + "@ns" : "http://midpoint.evolveum.com/xml/ns/test/extension", + "intType" : "42" + }, + "construction" : { + "resourceRef" : { + "oid" : "2f9b9299-5555-5555-5555-000000001111", + "type" : "http://midpoint.evolveum.com/xml/ns/public/common/common-2a#ResourceType" + } + } + } ], + "activation" : { + "administrativeStatus" : { } }, - -"linkRef" :{ - "_oid" : "2f9b9299-6f45-498f-aaaa-000000003333", - "_type" : "ShadowType", - "description" : "This is third accountRef", - "filter" : { - "_ns" : "http://prism.evolveum.com/xml/ns/public/query-2", - "equal" : { - "value" : "org.identityconnectors.ldap.LdapConnector" - } - - } - }, - - "activation" : { - "administrativeStatus" : "enabled" - }, "fullName" : "Jack Sparrow", "givenName" : "Jack", "familyName" : "Sparrow", "honorificPrefix" : "Cpt.", - "emailAddress" : "email@email.sk", - "organizationalUnit" : ["Brethren of the Coast", "Davie Jones' Locker"] + "emailAddress" : "", + "organizationalUnit" : [ "Brethren of the Coast", "Davie Jones' Locker" ], + "locality" : "", + "credentials" : { + "password" : { + "value" : { + "@ns" : "http://prism.evolveum.com/xml/ns/public/types-2", + "encryptedData" : { + "encryptionMethod" : { + "algorithm" : "http://www.w3.org/2001/04/xmlenc#aes256-cbc\"" + }, + "keyInfo" : { + "keyName" : "HF6JRsNMeJt6alihT44CXKgpe0c=" + }, + "cipherData" : { + "cipherValue" : "blc5OXO2Z4vJW7o/XXhqZzg/rkwsIOwRBK7KLgMqwcrVcYpeZZOjxzgRgFiNw4IB" + } + } + } + }, + "allowedIdmAdminGuiAccess" : false + } + } } \ No newline at end of file diff --git a/infra/schema/src/test/resources/common/xml/user-jack.xml b/infra/schema/src/test/resources/common/xml/user-jack.xml new file mode 100644 index 00000000000..869e85514ae --- /dev/null +++ b/infra/schema/src/test/resources/common/xml/user-jack.xml @@ -0,0 +1,140 @@ + + + + + + jack + jack + + + + BAR + 42 + raz + dva + tri + + openS3zam3 + + + + + + jsparrow + + + AccountObjectClass + + + + + captain + + Rum Supply System + + + + http://midpoint.evolveum.com/xml/ns/public/resource/instance/2f9b9299-5555-5555-5555-000000002222 + + + AccountObjectClass + + + + + This is third accountRef + + + + connectorType + >org.identityconnectors.ldap.LdapConnector + + + + + + + 42 + + + + + + + + enabled + + + + Jack Sparrow + jack sparrow + + + Jack + jack + + + Sparrow + sparrow + + + Cpt. + cpt + + + + Brethren of the Coast + brethren of the coast + + + Davie Jones' Locker + davie jones locker + + + + + + + + + http://www.w3.org/2001/04/xmlenc#aes256-cbc" + + + HF6JRsNMeJt6alihT44CXKgpe0c= + + + blc5OXO2Z4vJW7o/XXhqZzg/rkwsIOwRBK7KLgMqwcrVcYpeZZOjxzgRgFiNw4IB + + + + + false + + + diff --git a/infra/schema/testng.xml b/infra/schema/testng.xml index 61dd241a090..40177c3e6aa 100644 --- a/infra/schema/testng.xml +++ b/infra/schema/testng.xml @@ -24,6 +24,7 @@ + diff --git a/repo/repo-sql-impl-test/src/main/java/com/evolveum/midpoint/repo/sql/testing/ResourceCarefulAntUtil.java b/repo/repo-sql-impl-test/src/main/java/com/evolveum/midpoint/repo/sql/testing/ResourceCarefulAntUtil.java index d0ce5de9c10..bc7ddd07a3d 100644 --- a/repo/repo-sql-impl-test/src/main/java/com/evolveum/midpoint/repo/sql/testing/ResourceCarefulAntUtil.java +++ b/repo/repo-sql-impl-test/src/main/java/com/evolveum/midpoint/repo/sql/testing/ResourceCarefulAntUtil.java @@ -19,6 +19,7 @@ import static org.testng.AssertJUnit.assertEquals; import java.io.File; +import java.io.IOException; import java.util.List; import java.util.Random; @@ -37,7 +38,7 @@ import com.evolveum.midpoint.xml.ns._public.common.common_2a.ResourceType; import com.evolveum.midpoint.xml.ns._public.common.common_2a.SchemaHandlingType; import com.evolveum.midpoint.xml.ns._public.common.common_2a.XmlSchemaType; -import com.evolveum.midpoint.xml.ns._public.common.common_2a.XmlSchemaType.Definition; +import com.evolveum.prism.xml.ns._public.types_2.SchemaDefinitionType; /** * @author semancik @@ -80,7 +81,7 @@ public void assertModification(PrismObject resource, int iteration }); ants.add(new CarefulAnt() { - Definition xmlSchemaDef; + SchemaDefinitionType xmlSchemaDef; @Override public ItemDelta createDelta(int iteration) throws SchemaException { xmlSchemaDef = createNewXmlSchemaDef(resourceFile, iteration, prismContext); @@ -99,7 +100,7 @@ public void assertModification(PrismObject resource, int iteration } private static SchemaHandlingType createNewSchemaHandling(File resourceFile, int iteration, PrismContext prismContext) throws SchemaException { - PrismObject resource = prismContext.getPrismDomProcessor().parseObject(resourceFile); + PrismObject resource = parseResource(resourceFile, prismContext); SchemaHandlingType schemaHandling = resource.asObjectable().getSchemaHandling(); ResourceObjectTypeDefinitionType accountType = schemaHandling.getObjectType().iterator().next(); List attrDefs = accountType.getAttribute(); @@ -108,12 +109,12 @@ private static SchemaHandlingType createNewSchemaHandling(File resourceFile, int return schemaHandling; } - private static Definition createNewXmlSchemaDef(File resourceFile, int iteration, PrismContext prismContext) throws SchemaException { - PrismObject resource = prismContext.getPrismDomProcessor().parseObject(resourceFile); + private static SchemaDefinitionType createNewXmlSchemaDef(File resourceFile, int iteration, PrismContext prismContext) throws SchemaException { + PrismObject resource = parseResource(resourceFile, prismContext); XmlSchemaType schema = resource.asObjectable().getSchema(); - Definition def; + SchemaDefinitionType def; if (schema == null) { - def = new Definition(); + def = new SchemaDefinitionType(); def.getAny().add(DOMUtil.createElement(DOMUtil.XSD_SCHEMA_ELEMENT)); } else { def = schema.getDefinition(); @@ -121,6 +122,14 @@ private static Definition createNewXmlSchemaDef(File resourceFile, int iteration } return def; } + + private static PrismObject parseResource(File resourceFile, PrismContext prismContext) throws SchemaException{ + try{ + return prismContext.parseObject(resourceFile); + } catch (IOException ex){ + throw new SchemaException(ex.getMessage(), ex); + } + } } diff --git a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/AddGetObjectTest.java b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/AddGetObjectTest.java index 534ac47ce8c..fd6d92c9264 100644 --- a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/AddGetObjectTest.java +++ b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/AddGetObjectTest.java @@ -16,6 +16,8 @@ package com.evolveum.midpoint.repo.sql; +import static com.evolveum.midpoint.prism.util.PrismTestUtil.*; + import com.evolveum.midpoint.common.refinery.RefinedResourceSchema; import com.evolveum.midpoint.prism.*; import com.evolveum.midpoint.prism.delta.ItemDelta; @@ -24,6 +26,8 @@ import com.evolveum.midpoint.prism.dom.PrismDomProcessor; import com.evolveum.midpoint.prism.query.LessFilter; import com.evolveum.midpoint.prism.query.ObjectQuery; +import com.evolveum.midpoint.prism.util.JaxbTestUtil; +import com.evolveum.midpoint.prism.util.PrismTestUtil; import com.evolveum.midpoint.repo.sql.type.XMLGregorianCalendarType; import com.evolveum.midpoint.repo.sql.util.RUtil; import com.evolveum.midpoint.schema.DeltaConvertor; @@ -38,6 +42,7 @@ import com.evolveum.midpoint.xml.ns._public.common.common_2a.*; import com.evolveum.prism.xml.ns._public.types_2.ObjectDeltaType; import com.evolveum.prism.xml.ns._public.types_2.PolyStringType; + import org.hibernate.stat.Statistics; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; @@ -45,6 +50,7 @@ import org.testng.annotations.Test; import javax.xml.namespace.QName; + import java.io.File; import java.util.ArrayList; import java.util.Date; @@ -65,7 +71,7 @@ public void perfTest() throws Exception { stats.setStatisticsEnabled(true); final File OBJECTS_FILE = new File("./src/test/resources/10k-users.xml"); - List> elements = prismContext.getPrismDomProcessor().parseObjects( + List> elements = prismContext.parseObjects( OBJECTS_FILE); long previousCycle = 0; @@ -127,7 +133,7 @@ public void simpleAddGetTest() throws Exception { } private void addGetCompare(File file) throws Exception { - List> elements = prismContext.getPrismDomProcessor().parseObjects(file); + List> elements = prismContext.parseObjects(file); List oids = new ArrayList(); OperationResult result = new OperationResult("Simple Add Get Test"); @@ -142,7 +148,7 @@ private void addGetCompare(File file) throws Exception { (System.currentTimeMillis() - time),}); int count = 0; - elements = prismContext.getPrismDomProcessor().parseObjects(file); + elements = prismContext.parseObjects(file); for (int i = 0; i < elements.size(); i++) { try { PrismObject object = elements.get(i); @@ -170,7 +176,7 @@ private void addGetCompare(File file) throws Exception { } LOGGER.error(">>> {} Found {} changes for {}\n{}", new Object[]{(i + 1), delta.getModifications().size(), newObject.toString(), delta.debugDump(3)}); - LOGGER.error("{}", prismContext.getPrismDomProcessor().serializeObjectToString(newObject)); + LOGGER.error("{}", prismContext.serializeObjectToString(newObject, PrismContext.LANG_XML)); } } catch (Exception ex) { LOGGER.error("Exception occurred", ex); @@ -249,12 +255,12 @@ private void checkContainersSize(PrismContainer newContainer, PrismContainer old public void addUserWithAssignmentExtension() throws Exception { LOGGER.info("===[ addUserWithAssignmentExtension ]==="); File file = new File(FOLDER_BASIC, "user-assignment-extension.xml"); - List> elements = prismContext.getPrismDomProcessor().parseObjects(file); + List> elements = prismContext.parseObjects(file); OperationResult result = new OperationResult("ADD"); String oid = repositoryService.addObject((PrismObject) elements.get(0), null, result); - PrismObject fileUser = (PrismObject) prismContext.getPrismDomProcessor().parseObjects(file) + PrismObject fileUser = (PrismObject) prismContext.parseObjects(file) .get(0); long id = 1; for (AssignmentType assignment : fileUser.asObjectable().getAssignment()) { @@ -436,7 +442,7 @@ private String testIterationToken(String token) throws Exception { @Test(enabled = false) public void deltaOperationSerializationPerformanceTest() throws Exception { List> elements = - prismContext.getPrismDomProcessor().parseObjects(new File(FOLDER_BASIC, "objects.xml")); + prismContext.parseObjects(new File(FOLDER_BASIC, "objects.xml")); //get user from objects.xml ObjectDelta delta = ObjectDelta.createAddDelta(elements.get(0)); @@ -487,7 +493,7 @@ private void addGetFullAccountShadow() throws Exception { File file = new File(FOLDER_BASIC, "account-accountTypeShadow.xml"); try { - PrismObject account = prismContext.getPrismDomProcessor().parseObject(file); + PrismObject account = prismContext.parseObject(file); // apply appropriate schema PrismObject resource = prismContext.parseObject(new File(FOLDER_BASIC, "resource-opendj.xml")); @@ -515,13 +521,13 @@ private void addGetFullAccountShadow() throws Exception { */ @Test public void domVsJaxbProcessor() throws Exception { - PrismDomProcessor domProcessor =prismContext.getPrismDomProcessor(); - List> elements = domProcessor.parseObjects(new File(FOLDER_BASIC, "objects.xml")); +// PrismDomProcessor domProcessor =prismContext.getPrismDomProcessor(); + List> elements = prismContext.parseObjects(new File(FOLDER_BASIC, "objects.xml")); PrismObject obj = elements.get(0); - System.out.println(domProcessor.serializeObjectToString(obj)); + System.out.println(prismContext.serializeObjectToString(obj, PrismContext.LANG_XML)); - System.out.println(prismContext.getPrismJaxbProcessor().marshalToString(obj.asObjectable())); + System.out.println(getJaxbUtil().marshalToString(obj.asObjectable())); } } diff --git a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/AddOverwriteTest.java b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/AddOverwriteTest.java index 3925e438ae8..1462a93b803 100644 --- a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/AddOverwriteTest.java +++ b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/AddOverwriteTest.java @@ -18,13 +18,17 @@ import static org.testng.AssertJUnit.assertNotNull; import static org.testng.AssertJUnit.assertNull; + import com.evolveum.midpoint.prism.Objectable; +import com.evolveum.midpoint.prism.PrismContainerDefinition; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.PrismObjectDefinition; +import com.evolveum.midpoint.prism.PrismPropertyDefinition; import com.evolveum.midpoint.prism.delta.PropertyDelta; import com.evolveum.midpoint.prism.polystring.PolyString; import com.evolveum.midpoint.prism.query.EqualsFilter; import com.evolveum.midpoint.prism.query.ObjectQuery; +import com.evolveum.midpoint.prism.schema.SchemaRegistry; import com.evolveum.midpoint.prism.util.PrismAsserts; import com.evolveum.midpoint.prism.util.PrismTestUtil; import com.evolveum.midpoint.prism.util.PrismUtil; @@ -38,11 +42,16 @@ import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; +import com.evolveum.midpoint.xml.ns._public.common.common_2a.AccountShadowType; +import com.evolveum.midpoint.xml.ns._public.common.common_2a.CapabilitiesType; import com.evolveum.midpoint.xml.ns._public.common.common_2a.ObjectType; import com.evolveum.midpoint.xml.ns._public.common.common_2a.OrgType; import com.evolveum.midpoint.xml.ns._public.common.common_2a.ResourceType; +import com.evolveum.midpoint.xml.ns._public.common.common_2a.ShadowType; import com.evolveum.midpoint.xml.ns._public.common.common_2a.SystemConfigurationType; import com.evolveum.midpoint.xml.ns._public.common.common_2a.UserType; +import com.evolveum.midpoint.xml.ns._public.resource.capabilities_2.CapabilityType; + import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.testng.AssertJUnit; @@ -80,7 +89,9 @@ public void setup() throws SchemaException, SAXException, IOException { @Test public void addWithOverwrite() throws Exception { - List> objects = prismContext.getPrismDomProcessor().parseObjects(new File(ORG_STRUCT_OBJECTS)); + List> objects = prismContext.parseObjects(new File(ORG_STRUCT_OBJECTS)); + + OperationResult opResult = new OperationResult("Import file"); for (PrismObject o : objects) { repositoryService.addObject(o, null, opResult); @@ -99,7 +110,7 @@ public void addWithOverwrite() throws Exception { AssertJUnit.assertNotNull(oid); //reimport carla, oid should stay the same, version must be incremented - objects = prismContext.getPrismDomProcessor().parseObjects(new File(IMPORT_OVERWRITE)); + objects = prismContext.parseObjects(new File(IMPORT_OVERWRITE)); PrismObject newCarla = objects.get(0); newCarla.setOid(oid); @@ -159,7 +170,11 @@ public void test091GetVersion() throws Exception { @Test public void addWithOverwriteResource() throws Exception { // GIVEN - PrismObject resource = prismContext.getPrismDomProcessor().parseObject(RESOURCE_OPENDJ_FILE); + + SchemaRegistry reg= prismContext.getSchemaRegistry(); + PrismPropertyDefinition def = reg.findPropertyDefinitionByElementName(CapabilitiesType.F_NATIVE); + + PrismObject resource = prismContext.parseObject(RESOURCE_OPENDJ_FILE); OperationResult opResult = new OperationResult("Import resource"); repositoryService.addObject(resource, null, opResult); diff --git a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/BaseSQLRepoTest.java b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/BaseSQLRepoTest.java index 025dbf9d67d..643ba22e2b0 100644 --- a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/BaseSQLRepoTest.java +++ b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/BaseSQLRepoTest.java @@ -19,6 +19,7 @@ import com.evolveum.midpoint.audit.api.AuditService; import com.evolveum.midpoint.prism.PrismContext; import com.evolveum.midpoint.prism.query.ObjectQuery; +import com.evolveum.midpoint.prism.util.PrismTestUtil; import com.evolveum.midpoint.repo.api.RepositoryService; import com.evolveum.midpoint.repo.sql.query.QueryInterpreter; import com.evolveum.midpoint.repo.sql.util.HibernateToSqlTranslator; @@ -30,6 +31,7 @@ import com.evolveum.midpoint.util.logging.TraceManager; import com.evolveum.midpoint.xml.ns._public.common.common_2a.ObjectType; import com.evolveum.prism.xml.ns._public.query_2.QueryType; + import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.SessionFactory; @@ -185,8 +187,9 @@ protected String getInterpretedQuery(Session session, Cla QueryInterpreter interpreter = new QueryInterpreter(); Document document = DOMUtil.parseFile(file); - QueryType queryType = prismContext.getPrismJaxbProcessor().unmarshalObject(file, QueryType.class); - Element filter = DOMUtil.listChildElements(document.getDocumentElement()).get(0); + QueryType queryType = PrismTestUtil.getJaxbUtil().unmarshalObject(file, QueryType.class); +// QueryType queryType = prismContext.getPrismJaxbProcessor().unmarshalObject(file, QueryType.class); +// Element filter = DOMUtil.listChildElements(document.getDocumentElement()).get(0); LOGGER.info("QUERY TYPE TO CONVERT : {}", ObjectQueryUtil.dump(queryType)); diff --git a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/CleanupTest.java b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/CleanupTest.java index 12b23e1103d..0f80dead527 100644 --- a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/CleanupTest.java +++ b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/CleanupTest.java @@ -69,7 +69,7 @@ public class CleanupTest extends BaseSQLRepoTest { public void testTasksCleanup() throws Exception { // GIVEN final File file = new File(FOLDER_BASIC, "tasks.xml"); - List> elements = prismContext.getPrismDomProcessor().parseObjects(file); + List> elements = prismContext.parseObjects(file); OperationResult result = new OperationResult("tasks cleanup"); for (int i = 0; i < elements.size(); i++) { diff --git a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/ConcurrencyTest.java b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/ConcurrencyTest.java index df002c3c72d..98c5db768f5 100644 --- a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/ConcurrencyTest.java +++ b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/ConcurrencyTest.java @@ -201,7 +201,7 @@ public void execute(Connection connection) throws SQLException { session.close(); final File file = new File("src/test/resources/concurrency/user.xml"); - PrismObject user = prismContext.getPrismDomProcessor().parseObject(file); + PrismObject user = prismContext.parseObject(file); user.asObjectable().setName(new PolyStringType(name)); OperationResult result = new OperationResult("Concurrency Test"); @@ -442,7 +442,7 @@ public void concurrency010_SearchIterative() throws Exception { final String newFullName = "new-full-name"; final File file = new File("src/test/resources/concurrency/user.xml"); - PrismObject user = prismContext.getPrismDomProcessor().parseObject(file); + PrismObject user = prismContext.parseObject(file); user.asObjectable().setName(new PolyStringType(name)); final OperationResult result = new OperationResult("Concurrency Test10"); diff --git a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/DeleteTest.java b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/DeleteTest.java index 96697731e62..9c51b0b15a8 100644 --- a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/DeleteTest.java +++ b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/DeleteTest.java @@ -53,7 +53,7 @@ public void delete001() throws Exception { return; } - List> elements = prismContext.getPrismDomProcessor().parseObjects(file); + List> elements = prismContext.parseObjects(file); List oids = new ArrayList(); OperationResult result = new OperationResult("Delete Test"); diff --git a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/ListAccountShadowOwnerTest.java b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/ListAccountShadowOwnerTest.java index 73ec308ab60..d2f94a7e1d3 100644 --- a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/ListAccountShadowOwnerTest.java +++ b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/ListAccountShadowOwnerTest.java @@ -16,6 +16,21 @@ package com.evolveum.midpoint.repo.sql; +import static org.testng.AssertJUnit.assertNotNull; +import static org.testng.AssertJUnit.assertNull; + +import java.io.File; +import java.io.IOException; +import java.util.Collection; +import java.util.List; + +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; +import org.testng.AssertJUnit; +import org.testng.annotations.BeforeSuite; +import org.testng.annotations.Test; +import org.xml.sax.SAXException; + import com.evolveum.midpoint.prism.Objectable; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.PrismProperty; @@ -33,21 +48,6 @@ import com.evolveum.midpoint.xml.ns._public.common.common_2a.ObjectType; import com.evolveum.midpoint.xml.ns._public.common.common_2a.ShadowType; import com.evolveum.midpoint.xml.ns._public.common.common_2a.UserType; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.ContextConfiguration; -import org.testng.AssertJUnit; -import org.testng.annotations.BeforeSuite; -import org.testng.annotations.Test; -import org.xml.sax.SAXException; - -import java.io.File; -import java.io.IOException; -import java.util.Collection; -import java.util.List; - -import static org.testng.AssertJUnit.assertEquals; -import static org.testng.AssertJUnit.assertNotNull; -import static org.testng.AssertJUnit.assertNull; /** * @author lazyman @@ -70,7 +70,7 @@ public void listExistingOwner() throws Exception { //insert sample data final File OBJECTS_FILE = new File(FOLDER_BASIC, "objects.xml"); - List> elements = prismContext.getPrismDomProcessor().parseObjects(OBJECTS_FILE); + List> elements = prismContext.parseObjects(OBJECTS_FILE); for (int i = 0; i < elements.size(); i++) { PrismObject object = elements.get(i); repositoryService.addObject(object, null, result); diff --git a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/ModifyAssignmentTest.java b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/ModifyAssignmentTest.java index be41f5ec043..c8f08e3f80e 100644 --- a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/ModifyAssignmentTest.java +++ b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/ModifyAssignmentTest.java @@ -16,12 +16,13 @@ package com.evolveum.midpoint.repo.sql; +import static com.evolveum.midpoint.prism.util.PrismTestUtil.*; + import com.evolveum.midpoint.prism.*; import com.evolveum.midpoint.prism.delta.ObjectDelta; import com.evolveum.midpoint.prism.dom.PrismDomProcessor; import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.prism.util.PrismAsserts; -import com.evolveum.midpoint.prism.util.PrismTestUtil; import com.evolveum.midpoint.schema.DeltaConvertor; import com.evolveum.midpoint.schema.MidPointPrismContextFactory; import com.evolveum.midpoint.schema.result.OperationResult; @@ -58,13 +59,13 @@ public class ModifyAssignmentTest extends BaseSQLRepoTest { public void beforeClass() throws Exception { super.beforeClass(); - PrismTestUtil.resetPrismContext(MidPointPrismContextFactory.FACTORY); + resetPrismContext(MidPointPrismContextFactory.FACTORY); //given //no role //when - PrismDomProcessor domProcessor = prismContext.getPrismDomProcessor(); - PrismObject role = domProcessor.parseObject(FILE_ROLE); +// PrismDomProcessor domProcessor = prismContext.getPrismDomProcessor(); + PrismObject role = prismContext.parseObject(FILE_ROLE); OperationResult result = new OperationResult("add role"); String oid = repositoryService.addObject(role, null, result); @@ -88,7 +89,7 @@ public void test10AddAssignment() throws Exception { //given //when - ObjectModificationType modification = prismContext.getPrismJaxbProcessor().unmarshalObject( + ObjectModificationType modification = getJaxbUtil().unmarshalObject( new File(TEST_DIR, "modify-add-assignment.xml"), ObjectModificationType.class); ObjectDelta delta = DeltaConvertor.createObjectDelta(modification, RoleType.class, prismContext); @@ -130,7 +131,7 @@ public void test11AddInducement() throws Exception { //given //when - ObjectModificationType modification = prismContext.getPrismJaxbProcessor().unmarshalObject( + ObjectModificationType modification = getJaxbUtil().unmarshalObject( new File(TEST_DIR, "modify-add-inducement.xml"), ObjectModificationType.class); ObjectDelta delta = DeltaConvertor.createObjectDelta(modification, RoleType.class, prismContext); @@ -169,7 +170,7 @@ public void test20ModifyAssignment() throws Exception { //given //when - ObjectModificationType modification = prismContext.getPrismJaxbProcessor().unmarshalObject( + ObjectModificationType modification = getJaxbUtil().unmarshalObject( new File(TEST_DIR, "modify-assignment.xml"), ObjectModificationType.class); ObjectDelta delta = DeltaConvertor.createObjectDelta(modification, RoleType.class, prismContext); @@ -210,7 +211,7 @@ public void test21ModifyInducement() throws Exception { //given //when - ObjectModificationType modification = prismContext.getPrismJaxbProcessor().unmarshalObject( + ObjectModificationType modification = getJaxbUtil().unmarshalObject( new File(TEST_DIR, "modify-inducement.xml"), ObjectModificationType.class); ObjectDelta delta = DeltaConvertor.createObjectDelta(modification, RoleType.class, prismContext); @@ -254,7 +255,7 @@ public void test30DeleteAssignment() throws Exception { //given //when - ObjectModificationType modification = prismContext.getPrismJaxbProcessor().unmarshalObject( + ObjectModificationType modification = getJaxbUtil().unmarshalObject( new File(TEST_DIR, "modify-delete-assignment.xml"), ObjectModificationType.class); ObjectDelta delta = DeltaConvertor.createObjectDelta(modification, RoleType.class, prismContext); @@ -289,7 +290,7 @@ public void test31DeleteInducement() throws Exception { //given //when - ObjectModificationType modification = prismContext.getPrismJaxbProcessor().unmarshalObject( + ObjectModificationType modification = getJaxbUtil().unmarshalObject( new File(TEST_DIR, "modify-delete-inducement.xml"), ObjectModificationType.class); ObjectDelta delta = DeltaConvertor.createObjectDelta(modification, RoleType.class, prismContext); @@ -330,7 +331,7 @@ public void test40RenameAssignmentToInducement() throws Exception { //given //when - ObjectModificationType modification = prismContext.getPrismJaxbProcessor().unmarshalObject( + ObjectModificationType modification = getJaxbUtil().unmarshalObject( new File(TEST_DIR, "modify-delete-add-assignment.xml"), ObjectModificationType.class); ObjectDelta delta = DeltaConvertor.createObjectDelta(modification, RoleType.class, prismContext); diff --git a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/ModifyTest.java b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/ModifyTest.java index 9f447955f6b..91206f30b74 100644 --- a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/ModifyTest.java +++ b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/ModifyTest.java @@ -16,6 +16,8 @@ package com.evolveum.midpoint.repo.sql; +import static com.evolveum.midpoint.prism.util.PrismTestUtil.*; + import com.evolveum.midpoint.prism.*; import com.evolveum.midpoint.prism.delta.ContainerDelta; import com.evolveum.midpoint.prism.delta.ItemDelta; @@ -26,6 +28,7 @@ import com.evolveum.midpoint.prism.query.LessFilter; import com.evolveum.midpoint.prism.query.ObjectQuery; import com.evolveum.midpoint.prism.util.PrismAsserts; +import com.evolveum.midpoint.prism.util.PrismTestUtil; import com.evolveum.midpoint.prism.xml.XmlTypeConverter; import com.evolveum.midpoint.repo.sql.data.common.RAnyContainer; import com.evolveum.midpoint.repo.sql.data.common.RShadow; @@ -39,27 +42,36 @@ import com.evolveum.midpoint.repo.sql.testing.SqlRepoTestUtil; import com.evolveum.midpoint.repo.sql.type.XMLGregorianCalendarType; import com.evolveum.midpoint.schema.DeltaConvertor; +import com.evolveum.midpoint.schema.MidPointPrismContextFactory; +import com.evolveum.midpoint.schema.constants.MidPointConstants; import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.schema.util.ObjectTypeUtil; import com.evolveum.midpoint.schema.util.SynchronizationSituationUtil; +import com.evolveum.midpoint.util.PrettyPrinter; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SystemException; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; import com.evolveum.midpoint.xml.ns._public.common.api_types_2.ObjectModificationType; import com.evolveum.midpoint.xml.ns._public.common.common_2a.*; import com.evolveum.prism.xml.ns._public.types_2.PolyStringType; + import org.apache.commons.lang.builder.ReflectionToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; import org.hibernate.Session; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.testng.AssertJUnit; +import org.testng.annotations.BeforeSuite; import org.testng.annotations.Test; +import org.xml.sax.SAXException; import javax.xml.datatype.XMLGregorianCalendar; import javax.xml.namespace.QName; + import java.io.File; +import java.io.IOException; import java.sql.Timestamp; import java.util.*; @@ -70,6 +82,12 @@ @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS) public class ModifyTest extends BaseSQLRepoTest { + @BeforeSuite + public void setup() throws SchemaException, SAXException, IOException { + PrettyPrinter.setDefaultNamespacePrefix(MidPointConstants.NS_MIDPOINT_PUBLIC_PREFIX); + PrismTestUtil.resetPrismContext(MidPointPrismContextFactory.FACTORY); + } + private static final Trace LOGGER = TraceManager.getTrace(ModifyTest.class); private static final File TEST_DIR = new File("src/test/resources/modify"); @@ -79,19 +97,19 @@ public void test010ModifyWithExistingName() throws Exception { File userFile = new File(TEST_DIR, "modify-user.xml"); //add first user - PrismObject user = prismContext.getPrismDomProcessor().parseObject(userFile); + PrismObject user = prismContext.parseObject(userFile); user.setOid(null); user.setPropertyRealValue(ObjectType.F_NAME, "existingName"); repositoryService.addObject(user, null, result); //add second user - user = prismContext.getPrismDomProcessor().parseObject(userFile); + user = prismContext.parseObject(userFile); user.setOid(null); user.setPropertyRealValue(ObjectType.F_NAME, "otherName"); String oid = repositoryService.addObject(user, null, result); //modify second user name to "existingName" - ObjectModificationType modification = prismContext.getPrismJaxbProcessor().unmarshalObject( + ObjectModificationType modification = getJaxbUtil().unmarshalObject( new File(TEST_DIR, "change-name.xml"), ObjectModificationType.class); modification.setOid(oid); @@ -103,7 +121,7 @@ public void test010ModifyWithExistingName() throws Exception { @Test(expectedExceptions = ObjectNotFoundException.class, enabled = false) public void test020ModifyNotExistingUser() throws Exception { - ObjectModificationType modification = prismContext.getPrismJaxbProcessor().unmarshalObject( + ObjectModificationType modification = getJaxbUtil().unmarshalObject( new File(TEST_DIR, "change-add.xml"), ObjectModificationType.class); @@ -120,7 +138,7 @@ public void test030ModifyUserOnNonExistingAccountTest() throws Exception { //add user File userFile = new File(TEST_DIR, "modify-user.xml"); - PrismObject user = prismContext.getPrismDomProcessor().parseObject(userFile); + PrismObject user = prismContext.parseObject(userFile); user.setOid(null); user.asObjectable().setName(new PolyStringType("non-existing-account-user")); @@ -128,7 +146,7 @@ public void test030ModifyUserOnNonExistingAccountTest() throws Exception { PrismObject userOld = repositoryService.getObject(UserType.class, oid, null, result); - ObjectModificationType modification = prismContext.getPrismJaxbProcessor().unmarshalObject( + ObjectModificationType modification = getJaxbUtil().unmarshalObject( new File(TEST_DIR, "change-add-non-existing.xml"), ObjectModificationType.class); @@ -153,12 +171,12 @@ public void test031ModifyUserOnExistingAccountTest() throws Exception { //add account File accountFile = new File(TEST_DIR, "account.xml"); - PrismObject account = prismContext.getPrismDomProcessor().parseObject(accountFile); + PrismObject account = prismContext.parseObject(accountFile); repositoryService.addObject(account, null, result); //add user File userFile = new File(TEST_DIR, "modify-user.xml"); - PrismObject user = prismContext.getPrismDomProcessor().parseObject(userFile); + PrismObject user = prismContext.parseObject(userFile); String userOid = user.getOid(); String oid = repositoryService.addObject(user, null, result); @@ -166,7 +184,7 @@ public void test031ModifyUserOnExistingAccountTest() throws Exception { PrismObject userOld = repositoryService.getObject(UserType.class, oid, null, result); - ObjectModificationType modification = prismContext.getPrismJaxbProcessor().unmarshalObject( + ObjectModificationType modification = getJaxbUtil().unmarshalObject( new File(TEST_DIR, "change-add.xml"), ObjectModificationType.class); @@ -190,7 +208,7 @@ public void test032ModifyTaskObjectRef() throws Exception { OperationResult result = new OperationResult("MODIFY"); File taskFile = new File(TEST_DIR, "task.xml"); System.out.println("ADD"); - PrismObject task = prismContext.getPrismDomProcessor().parseObject(taskFile); + PrismObject task = prismContext.parseObject(taskFile); repositoryService.addObject(task, null, result); final String taskOid = "00000000-0000-0000-0000-123450000001"; AssertJUnit.assertNotNull(taskOid); @@ -239,7 +257,7 @@ public void test032ModifyTaskObjectRef() throws Exception { AssertJUnit.assertNotNull(taskType.getObjectRef()); objectRef = taskType.getObjectRef(); AssertJUnit.assertEquals("2", objectRef.getOid()); - LOGGER.info(prismContext.silentMarshalObject(taskType, LOGGER)); + LOGGER.info(getJaxbUtil().marshalObjectToString(taskType, TaskType.COMPLEX_TYPE)); SqlRepoTestUtil.assertVersionProgress(lastVersion, getTask.getVersion()); lastVersion = getTask.getVersion(); @@ -280,27 +298,27 @@ public void testModifyUserAddRole() throws Exception { OperationResult parentResult = new OperationResult("Modify user -> add roles"); String userToModifyOid = "f65963e3-9d47-4b18-aaf3-bfc98bdfa000"; - PrismObject csvResource = prismContext.getPrismDomProcessor().parseObject(new File(TEST_DIR + "/resource-csv.xml")); + PrismObject csvResource = prismContext.parseObject(new File(TEST_DIR + "/resource-csv.xml")); repositoryService.addObject(csvResource, null, parentResult); - PrismObject openDjResource = prismContext.getPrismDomProcessor().parseObject(new File(TEST_DIR + "/resource-opendj.xml")); + PrismObject openDjResource = prismContext.parseObject(new File(TEST_DIR + "/resource-opendj.xml")); repositoryService.addObject(openDjResource, null, parentResult); - PrismObject user = prismContext.getPrismDomProcessor().parseObject(new File(TEST_DIR + "/user.xml")); + PrismObject user = prismContext.parseObject(new File(TEST_DIR + "/user.xml")); repositoryService.addObject(user, null, parentResult); - PrismObject roleCsv = prismContext.getPrismDomProcessor().parseObject(new File(TEST_DIR + "/role-csv.xml")); + PrismObject roleCsv = prismContext.parseObject(new File(TEST_DIR + "/role-csv.xml")); repositoryService.addObject(roleCsv, null, parentResult); String ldapRoleOid = "12345678-d34d-b33f-f00d-987987987988"; - PrismObject roleLdap = prismContext.getPrismDomProcessor().parseObject(new File(TEST_DIR + "/role-ldap.xml")); + PrismObject roleLdap = prismContext.parseObject(new File(TEST_DIR + "/role-ldap.xml")); repositoryService.addObject(roleLdap, null, parentResult); RoleType ldapRole = repositoryService.getObject(RoleType.class, ldapRoleOid, null, parentResult).asObjectable(); AssertJUnit.assertEquals("Expected that the role has one approver.", 1, ldapRole.getApproverRef().size()); AssertJUnit.assertEquals("Actual approved not equals to expected one.", userToModifyOid, ldapRole.getApproverRef().get(0).getOid()); - ObjectModificationType modification = prismContext.getPrismJaxbProcessor().unmarshalObject(new File(TEST_DIR + "/modify-user-add-roles.xml"), + ObjectModificationType modification = getJaxbUtil().unmarshalObject(new File(TEST_DIR + "/modify-user-add-roles.xml"), ObjectModificationType.class); @@ -317,7 +335,7 @@ public void testModifyUserAddRole() throws Exception { @Test public void testModifyDeleteObjectChangeFromAccount() throws Exception { OperationResult parentResult = new OperationResult("testModifyDeleteObjectChnageFromAccount"); - PrismObject accShadow = prismContext.getPrismDomProcessor().parseObject(new File(TEST_DIR + "/account-delete-object-change.xml")); + PrismObject accShadow = prismContext.parseObject(new File(TEST_DIR + "/account-delete-object-change.xml")); String oid = repositoryService.addObject(accShadow, null, parentResult); System.out.println("\nAcc shadow"); System.out.println(accShadow.debugDump()); @@ -342,10 +360,10 @@ public void testModifyDeleteObjectChangeFromAccount() throws Exception { public void testModifyAccountMetadata() throws Exception { OperationResult parentResult = new OperationResult("testModifyAccountMetadata"); - PrismObject user = prismContext.getPrismDomProcessor().parseObject(new File(TEST_DIR + "/user-modify-link-account.xml")); + PrismObject user = prismContext.parseObject(new File(TEST_DIR + "/user-modify-link-account.xml")); - PrismObject accShadow = prismContext.getPrismDomProcessor().parseObject(new File(TEST_DIR + "/account-modify-metadata.xml")); + PrismObject accShadow = prismContext.parseObject(new File(TEST_DIR + "/account-modify-metadata.xml")); MetadataType metaData = new MetadataType(); metaData.setCreateChannel("channel"); @@ -421,12 +439,12 @@ public void testExtensionModify() throws Exception { File userFile = new File(TEST_DIR, "user-with-extension.xml"); //add first user - PrismObject user = prismContext.getPrismDomProcessor().parseObject(userFile); + PrismObject user = prismContext.parseObject(userFile); OperationResult result = new OperationResult("test extension modify"); final String oid = repositoryService.addObject(user, null, result); - user = prismContext.getPrismDomProcessor().parseObject(userFile); + user = prismContext.parseObject(userFile); PrismObject readUser = repositoryService.getObject(UserType.class, oid, null, result); AssertJUnit.assertTrue("User was not saved correctly", user.diff(readUser).isEmpty()); String lastVersion = readUser.getVersion(); @@ -441,7 +459,7 @@ public void testExtensionModify() throws Exception { repositoryService.modifyObject(UserType.class, oid, modifications, result); //check read after modify operation - user = prismContext.getPrismDomProcessor().parseObject(userFile); + user = prismContext.parseObject(userFile); loot = user.findProperty(new ItemPath(UserType.F_EXTENSION, QNAME_LOOT)); loot.setValue(new PrismPropertyValue(456)); @@ -594,7 +612,7 @@ public void testModifyAccountSynchronizationSituation() throws Exception { //add account File accountFile = new File(TEST_DIR, "account-synchronization-situation.xml"); - PrismObject account = prismContext.getPrismDomProcessor().parseObject(accountFile); + PrismObject account = prismContext.parseObject(accountFile); repositoryService.addObject(account, null, result); // XMLGregorianCalendar timestamp = XmlTypeConverter.createXMLGregorianCalendar(System.currentTimeMillis()); @@ -758,11 +776,11 @@ public void modifyRoleAddInducements() throws Exception { File roleFile = new File(TEST_DIR, "role-modify.xml"); //add first user - PrismObject role = prismContext.getPrismDomProcessor().parseObject(roleFile); + PrismObject role = prismContext.parseObject(roleFile); String oid = repositoryService.addObject(role, null, result); //modify second user name to "existingName" - ObjectModificationType modification = prismContext.getPrismJaxbProcessor().unmarshalObject( + ObjectModificationType modification = getJaxbUtil().unmarshalObject( new File(TEST_DIR, "role-modify-change.xml"), ObjectModificationType.class); modification.setOid(oid); diff --git a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/OrgClosureTest.java b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/OrgClosureTest.java index 840078ba8c8..9cab8a595f4 100644 --- a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/OrgClosureTest.java +++ b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/OrgClosureTest.java @@ -155,14 +155,14 @@ public void testSelectChildren() throws Exception { OperationResult opResult = new OperationResult("===[ addOrgStruct ]==="); LOGGER.info("Starting import."); - List> orgStruct = prismContext.getPrismDomProcessor().parseObjects( + List> orgStruct = prismContext.parseObjects( new File(ORG_STRUCT_OBJECTS)); for (PrismObject o : orgStruct) { repositoryService.addObject((PrismObject) o, null, opResult); } - orgStruct = prismContext.getPrismDomProcessor().parseObjects(new File(ORG_SIMPLE_TEST)); + orgStruct = prismContext.parseObjects(new File(ORG_SIMPLE_TEST)); for (PrismObject o : orgStruct) { repositoryService.addObject((PrismObject) o, null, opResult); } diff --git a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/OrgStructTest.java b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/OrgStructTest.java index ecfb231e9bf..abb2192f9e6 100644 --- a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/OrgStructTest.java +++ b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/OrgStructTest.java @@ -16,6 +16,8 @@ package com.evolveum.midpoint.repo.sql; +import static com.evolveum.midpoint.prism.util.PrismTestUtil.*; + import com.evolveum.midpoint.prism.Objectable; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.PrismObjectDefinition; @@ -48,6 +50,7 @@ import com.evolveum.midpoint.xml.ns._public.common.common_2a.OrgType; import com.evolveum.midpoint.xml.ns._public.common.common_2a.UserType; import com.evolveum.prism.xml.ns._public.query_2.QueryType; + import org.hibernate.Criteria; import org.hibernate.FetchMode; import org.hibernate.Query; @@ -122,7 +125,7 @@ public void test001addOrgStructObjects() throws Exception { LOGGER.info("===[ addOrgStruct ]==="); OperationResult opResult = new OperationResult("===[ addOrgStruct ]==="); - List> orgStruct = prismContext.getPrismDomProcessor().parseObjects( + List> orgStruct = prismContext.parseObjects( new File(ORG_STRUCT_OBJECTS)); for (PrismObject o : orgStruct) { @@ -192,7 +195,7 @@ public void test001addOrgStructObjects() throws Exception { AssertJUnit.assertEquals(1, users.size()); UserType elaine = users.get(0).asObjectable(); LOGGER.info("--->elaine<----"); - LOGGER.info(prismContext.silentMarshalObject(elaine, LOGGER)); +// LOGGER.info(prismContext.silentMarshalObject(elaine, LOGGER)); AssertJUnit.assertEquals("Expected name elaine, but got " + elaine.getName().getOrig(), "elaine", elaine.getName().getOrig()); AssertJUnit.assertEquals("Expected elaine has one org ref, but got " + elaine.getParentOrgRef().size(), 2, elaine.getParentOrgRef().size()); AssertJUnit.assertEquals("Parent org ref oid not equal.", "00000000-8888-6666-0000-100000000001", elaine.getParentOrgRef().get(0).getOid()); @@ -259,7 +262,7 @@ public void test001addOrgStructObjectsIncorrect() throws Exception { OperationResult opResult = new OperationResult("===[ addIncorrectOrgStruct ]==="); - List> orgStructIncorrect = prismContext.getPrismDomProcessor().parseObjects( + List> orgStructIncorrect = prismContext.parseObjects( new File(ORG_STRUCT_OBJECTS_INCORRECT)); for (PrismObject o : orgStructIncorrect) { @@ -327,7 +330,7 @@ public void test001addOrgStructObjectsIncorrect() throws Exception { AssertJUnit.assertEquals(1, users.size()); UserType elaine1 = users.get(0).asObjectable(); LOGGER.info("--->elaine1<----"); - LOGGER.info(prismContext.silentMarshalObject(elaine1, LOGGER)); +// LOGGER.info(prismContext.silentMarshalObject(elaine1, LOGGER)); AssertJUnit.assertEquals("Expected name elaine, but got " + elaine1.getName().getOrig(), "elaine1", elaine1.getName().getOrig()); AssertJUnit.assertEquals("Expected elaine has one org ref, but got " + elaine1.getParentOrgRef().size(), 2, elaine1.getParentOrgRef().size()); AssertJUnit.assertEquals("Parent org ref oid not equal.", "00000000-8888-6666-0000-100000000011", elaine1.getParentOrgRef().get(0).getOid()); @@ -343,7 +346,7 @@ public void test002modifyOrgStructAddRef() throws Exception { OperationResult opResult = new OperationResult("===[ modifyOrgStruct ]==="); // test modification of org ref in another org type.. - ObjectModificationType modification = prismContext.getPrismJaxbProcessor().unmarshalObject(new File(MODIFY_ORG_ADD_REF_FILENAME), + ObjectModificationType modification = getJaxbUtil().unmarshalObject(new File(MODIFY_ORG_ADD_REF_FILENAME), ObjectModificationType.class); ObjectDelta delta = DeltaConvertor.createObjectDelta(modification, OrgType.class, prismContext); @@ -438,7 +441,7 @@ public void test002modifyOrgStructAddRefIncorrect() throws Exception { OperationResult opResult = new OperationResult("===[ modifyOrgStructIncorrect ]==="); // test modification of org ref in another org type.. - ObjectModificationType modification = prismContext.getPrismJaxbProcessor().unmarshalObject(new File(MODIFY_ORG_INCORRECT_ADD_REF_FILENAME), + ObjectModificationType modification = getJaxbUtil().unmarshalObject(new File(MODIFY_ORG_INCORRECT_ADD_REF_FILENAME), ObjectModificationType.class); ObjectDelta delta = DeltaConvertor.createObjectDelta(modification, OrgType.class, prismContext); @@ -523,7 +526,7 @@ public void test003modifyOrgStructDeleteRef() throws Exception { LOGGER.info("===[ modify delete org ref ]==="); OperationResult opResult = new OperationResult("===[ modify delete org ref ]==="); - ObjectModificationType modification = prismContext.getPrismJaxbProcessor().unmarshalObject(new File(MODIFY_ORG_DELETE_REF_FILENAME), + ObjectModificationType modification = getJaxbUtil().unmarshalObject(new File(MODIFY_ORG_DELETE_REF_FILENAME), ObjectModificationType.class); ObjectDelta delta = DeltaConvertor.createObjectDelta(modification, OrgType.class, prismContext); @@ -580,7 +583,7 @@ public void test003modifyOrgStructDeleteRefIncorrect() throws Exception { LOGGER.info("===[ modify delete org ref ]==="); OperationResult opResult = new OperationResult("===[ modify delete org ref ]==="); - ObjectModificationType modification = prismContext.getPrismJaxbProcessor().unmarshalObject(new File(MODIFY_ORG_INCORRECT_DELETE_REF_FILENAME), + ObjectModificationType modification = getJaxbUtil().unmarshalObject(new File(MODIFY_ORG_INCORRECT_DELETE_REF_FILENAME), ObjectModificationType.class); ObjectDelta delta = DeltaConvertor.createObjectDelta(modification, OrgType.class, prismContext); @@ -651,7 +654,7 @@ public void test004modifyOrgStructAddUser() throws Exception OperationResult opResult = new OperationResult("===[ modify add user to orgStruct ]==="); //test modification of org ref in another org type.. - ObjectModificationType modification = prismContext.getPrismJaxbProcessor().unmarshalObject(new File(MODIFY_ORG_ADD_USER_FILENAME), + ObjectModificationType modification = getJaxbUtil().unmarshalObject(new File(MODIFY_ORG_ADD_USER_FILENAME), ObjectModificationType.class); ObjectDelta delta = DeltaConvertor.createObjectDelta(modification, UserType.class, prismContext); diff --git a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/QueryInterpreterTest.java b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/QueryInterpreterTest.java index e3960733012..4b48d13dce9 100644 --- a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/QueryInterpreterTest.java +++ b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/QueryInterpreterTest.java @@ -17,6 +17,7 @@ package com.evolveum.midpoint.repo.sql; import java.io.File; +import java.io.IOException; import java.sql.Timestamp; import java.util.Arrays; import java.util.Date; @@ -26,6 +27,7 @@ import javax.xml.namespace.QName; import com.evolveum.midpoint.prism.query.*; + import org.hibernate.Criteria; import org.hibernate.FetchMode; import org.hibernate.Session; @@ -39,7 +41,9 @@ import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.testng.AssertJUnit; +import org.testng.annotations.BeforeSuite; import org.testng.annotations.Test; +import org.xml.sax.SAXException; import com.evolveum.midpoint.prism.PrismObjectDefinition; import com.evolveum.midpoint.prism.match.PolyStringNormMatchingRule; @@ -47,6 +51,7 @@ import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.prism.polystring.PolyString; import com.evolveum.midpoint.prism.schema.SchemaRegistry; +import com.evolveum.midpoint.prism.util.PrismTestUtil; import com.evolveum.midpoint.prism.xml.XmlTypeConverter; import com.evolveum.midpoint.repo.sql.data.common.RConnector; import com.evolveum.midpoint.repo.sql.data.common.RGenericObject; @@ -60,7 +65,13 @@ import com.evolveum.midpoint.repo.sql.data.common.other.RAssignmentOwner; import com.evolveum.midpoint.repo.sql.query.QueryException; import com.evolveum.midpoint.repo.sql.util.HibernateToSqlTranslator; +import com.evolveum.midpoint.schema.MidPointPrismContextFactory; +import com.evolveum.midpoint.schema.constants.MidPointConstants; import com.evolveum.midpoint.schema.result.OperationResult; +import com.evolveum.midpoint.util.DOMUtil; +import com.evolveum.midpoint.util.PrettyPrinter; +import com.evolveum.midpoint.util.QNameUtil; +import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; import com.evolveum.midpoint.xml.ns._public.common.common_2a.ActivationStatusType; @@ -69,6 +80,7 @@ import com.evolveum.midpoint.xml.ns._public.common.common_2a.ConnectorType; import com.evolveum.midpoint.xml.ns._public.common.common_2a.GenericObjectType; import com.evolveum.midpoint.xml.ns._public.common.common_2a.ObjectType; +import com.evolveum.midpoint.xml.ns._public.common.common_2a.ResourceType; import com.evolveum.midpoint.xml.ns._public.common.common_2a.RoleType; import com.evolveum.midpoint.xml.ns._public.common.common_2a.ShadowType; import com.evolveum.midpoint.xml.ns._public.common.common_2a.TaskExecutionStatusType; @@ -86,6 +98,12 @@ public class QueryInterpreterTest extends BaseSQLRepoTest { private static final Trace LOGGER = TraceManager.getTrace(QueryInterpreterTest.class); private static final File TEST_DIR = new File("./src/test/resources/query"); + @BeforeSuite + public void setup() throws SchemaException, SAXException, IOException { + PrettyPrinter.setDefaultNamespacePrefix(MidPointConstants.NS_MIDPOINT_PUBLIC_PREFIX); + PrismTestUtil.resetPrismContext(MidPointPrismContextFactory.FACTORY); + } + @Test public void queryOrganizationNorm() throws Exception { Session session = open(); @@ -240,7 +258,7 @@ public void queryGenericLong() throws Exception { Conjunction c2 = Restrictions.conjunction(); c2.add(Restrictions.eq("l.value", 123L)); c2.add(Restrictions.eq("l.name", new QName("http://example.com/p", "intType"))); - c2.add(Restrictions.eq("l.type", new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "integer"))); + c2.add(Restrictions.eq("l.type", DOMUtil.XSD_INTEGER)); Conjunction conjunction = Restrictions.conjunction(); conjunction.add(c1); @@ -274,15 +292,16 @@ public void queryOrComposite() throws Exception { Conjunction c2 = Restrictions.conjunction(); c2.add(Restrictions.eq("s1x.value", "foo value")); c2.add(Restrictions.eq("s1x.name", new QName("http://midpoint.evolveum.com/blabla", "foo"))); - c2.add(Restrictions.eq("s1x.type", new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "string"))); + c2.add(Restrictions.eq("s1x.type", DOMUtil.XSD_STRING)); //or Conjunction c3 = Restrictions.conjunction(); c3.add(Restrictions.eq("s2x.value", "uid=test,dc=example,dc=com")); c3.add(Restrictions.eq("s2x.name", new QName("http://example.com/p", "stringType"))); - c3.add(Restrictions.eq("s2x.type", new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "string"))); + c3.add(Restrictions.eq("s2x.type", DOMUtil.XSD_STRING)); //or - Criterion c4 = Restrictions.conjunction().add( - Restrictions.eq("r.resourceRef.targetOid", "d0db5be9-cb93-401f-b6c1-86ffffe4cd5e")); + Conjunction c4 = Restrictions.conjunction(); + c4.add(Restrictions.eq("r.resourceRef.targetOid", "d0db5be9-cb93-401f-b6c1-86ffffe4cd5e")); + c4.add(Restrictions.eq("r.resourceRef.type", QNameUtil.qNameToUri(ResourceType.COMPLEX_TYPE))); Disjunction disjunction = Restrictions.disjunction(); disjunction.add(c1); @@ -401,13 +420,16 @@ public void queryAccountByAttributesAndResourceRef() throws Exception { Criteria stringAttr = attributes.createCriteria("strings", "s1x"); //and - Criterion c1 = Restrictions.conjunction().add( - Restrictions.eq("r.resourceRef.targetOid", "aae7be60-df56-11df-8608-0002a5d5c51b")); + Conjunction c1 = Restrictions.conjunction(); + c1.add(Restrictions.eq("r.resourceRef.targetOid", "aae7be60-df56-11df-8608-0002a5d5c51b")); + c1.add(Restrictions.eq("r.resourceRef.type", QNameUtil.qNameToUri(ResourceType.COMPLEX_TYPE))); +// Criterion c1 = Restrictions.conjunction().add( +// Restrictions.eq("r.resourceRef.targetOid", "aae7be60-df56-11df-8608-0002a5d5c51b")); //and Conjunction c2 = Restrictions.conjunction(); c2.add(Restrictions.eq("s1x.value", "uid=jbond,ou=People,dc=example,dc=com")); c2.add(Restrictions.eq("s1x.name", new QName("http://midpoint.evolveum.com/blabla", "foo"))); - c2.add(Restrictions.eq("s1x.type", new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI, "string"))); + c2.add(Restrictions.eq("s1x.type", DOMUtil.XSD_STRING)); Conjunction conjunction = Restrictions.conjunction(); conjunction.add(c1); diff --git a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/ResourceModifyTest.java b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/ResourceModifyTest.java index 7bc0cac0547..365d7acd9de 100644 --- a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/ResourceModifyTest.java +++ b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/ResourceModifyTest.java @@ -76,7 +76,7 @@ public void test010AddResource() throws Exception { // GIVEN OperationResult result = new OperationResult(ResourceModifyTest.class.getName()+"."+TEST_NAME); - PrismObject resource = prismContext.getPrismDomProcessor().parseObject(RESOURCE_OPENDJ_FILE); + PrismObject resource = prismContext.parseObject(RESOURCE_OPENDJ_FILE); // WHEN String addOid = repositoryService.addObject(resource, null, result); diff --git a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/SearchShadowOwnerTest.java b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/SearchShadowOwnerTest.java index 83e6fca1adc..79e13aac0f0 100644 --- a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/SearchShadowOwnerTest.java +++ b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/SearchShadowOwnerTest.java @@ -58,7 +58,7 @@ public void initSystem() throws Exception { //insert sample data final File OBJECTS_FILE = new File(FOLDER_BASIC, "objects.xml"); - List> elements = prismContext.getPrismDomProcessor().parseObjects(OBJECTS_FILE); + List> elements = prismContext.parseObjects(OBJECTS_FILE); for (int i = 0; i < elements.size(); i++) { PrismObject object = elements.get(i); repositoryService.addObject(object, null, result); diff --git a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/SearchTest.java b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/SearchTest.java index 4ce7272c6b6..290f9627565 100644 --- a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/SearchTest.java +++ b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/SearchTest.java @@ -59,8 +59,8 @@ public void beforeClass() throws Exception { PrismTestUtil.resetPrismContext(MidPointPrismContextFactory.FACTORY); - PrismDomProcessor domProcessor = prismContext.getPrismDomProcessor(); - List> objects = domProcessor.parseObjects( +// PrismDomProcessor domProcessor = prismContext.getPrismDomProcessor(); + List> objects = prismContext.parseObjects( new File(FOLDER_BASIC, "objects.xml")); OperationResult result = new OperationResult("add objects"); for (PrismObject object : objects) { diff --git a/repo/repo-sql-impl-test/src/test/resources/ctx-configuration-sql-test.xml b/repo/repo-sql-impl-test/src/test/resources/ctx-configuration-sql-test.xml index 89b8ed2855b..23c97637f8f 100644 --- a/repo/repo-sql-impl-test/src/test/resources/ctx-configuration-sql-test.xml +++ b/repo/repo-sql-impl-test/src/test/resources/ctx-configuration-sql-test.xml @@ -53,7 +53,7 @@ - - - org.forgerock.openicf.csvfile.CSVFileConnector - + connectorType + org.forgerock.openicf.csvfile.CSVFileConnector @@ -129,12 +128,15 @@ object. read weak - $user/name + + $user/name + - declare namespace i="http://midpoint.evolveum.com/xml/ns/public/common/common-2a"; + declare namespace i="http://midpoint.evolveum.com/xml/ns/public/common/common-2a"; $user/i:name + @@ -145,12 +147,15 @@ object. Definition of Firstname attribute handling. weak - $user/givenName + + $user/givenName + - declare namespace i="http://midpoint.evolveum.com/xml/ns/public/common/common-2a"; + declare namespace i="http://midpoint.evolveum.com/xml/ns/public/common/common-2a"; $user/i:givenName + @@ -161,12 +166,15 @@ object. Definition of Lastname attribute handling. weak - $user/familyName + + $user/familyName + - declare namespace i="http://midpoint.evolveum.com/xml/ns/public/common/common-2a"; + declare namespace i="http://midpoint.evolveum.com/xml/ns/public/common/common-2a"; $user/i:familyName + @@ -182,44 +190,50 @@ object. - + + + - - weak + weak + - + - + + + - - weak + weak + - + - - - ri:disabled - false - true - - - - - - - + + + + ri:disabled + false + true + + + + + + + + @@ -238,15 +252,17 @@ object. The correlation rule always looks for users, so it will not match any other object type. - - . - - name - - $c:account/c:attributes/icfs:name - - - + + + name + + name + + $c:account/c:attributes/icfs:name + + + + - declare namespace my="http://whatever.com/my"; - $c:user/c:extension/my:description + declare namespace my="http://whatever.com/my"; + $c:user/c:extension/my:description @@ -388,12 +394,14 @@ object. my:defaultLocation - middle of nowhere + - scalar - - $my:defaultLocation - + @@ -401,26 +409,30 @@ object. - + + + - - weak + weak + - + - + + + - - weak - - + weak + + + @@ -435,20 +447,22 @@ object. - - - - ri:ds-pwp-account-disabled - - true - - - - - - - - + + + + + ri:ds-pwp-account-disabled + + true + + + + + + + + +