Search in sources :

Example 6 with ItemPathType

use of com.evolveum.prism.xml.ns._public.types_3.ItemPathType in project midpoint by Evolveum.

the class DeltaConvertor method createItemDelta.

public static <IV extends PrismValue, ID extends ItemDefinition> ItemDelta<IV, ID> createItemDelta(ItemDeltaType propMod, PrismContainerDefinition<?> pcDef, boolean allowRawValues) throws SchemaException {
    ItemPathType parentPathType = propMod.getPath();
    ItemPath parentPath = null;
    if (parentPathType != null) {
        parentPath = parentPathType.getItemPath();
    } else {
        throw new IllegalStateException("Path argument in the itemDelta HAVE TO BE specified.");
    }
    if (propMod.getValue() == null) {
        throw new IllegalArgumentException("No value in item delta (path: " + parentPath + ") while creating a property delta");
    }
    ItemDefinition containingPcd = pcDef.findItemDefinition(parentPath);
    PrismContainerDefinition containerDef = null;
    if (containingPcd == null) {
        containerDef = pcDef.findContainerDefinition(parentPath.allUpToLastNamed());
        if (containerDef == null) {
            if (allowRawValues) {
                return null;
            }
            throw new SchemaException("No definition for " + parentPath.allUpToLastNamed().lastNamed().getName() + " (while creating delta for " + pcDef + ")");
        }
    }
    QName elementName = parentPath.lastNamed().getName();
    //propMod.getValue().getParsedValue(containingPcd);
    Item item = RawTypeUtil.getParsedItem(containingPcd, propMod.getValue(), elementName, containerDef);
    ItemDelta<IV, ID> itemDelta = item.createDelta(parentPath);
    if (propMod.getModificationType() == ModificationTypeType.ADD) {
        itemDelta.addValuesToAdd(PrismValue.resetParentCollection(PrismValue.cloneCollection(item.getValues())));
    } else if (propMod.getModificationType() == ModificationTypeType.DELETE) {
        itemDelta.addValuesToDelete(PrismValue.resetParentCollection(PrismValue.cloneCollection(item.getValues())));
    } else if (propMod.getModificationType() == ModificationTypeType.REPLACE) {
        itemDelta.setValuesToReplace(PrismValue.resetParentCollection(PrismValue.cloneCollection(item.getValues())));
    }
    if (!propMod.getEstimatedOldValue().isEmpty()) {
        Item oldItem = RawTypeUtil.getParsedItem(containingPcd, propMod.getEstimatedOldValue(), elementName, containerDef);
        itemDelta.addEstimatedOldValues(PrismValue.resetParentCollection(PrismValue.cloneCollection(oldItem.getValues())));
    }
    return itemDelta;
}
Also used : SchemaException(com.evolveum.midpoint.util.exception.SchemaException) ItemPathType(com.evolveum.prism.xml.ns._public.types_3.ItemPathType) QName(javax.xml.namespace.QName) ItemPath(com.evolveum.midpoint.prism.path.ItemPath)

Example 7 with ItemPathType

use of com.evolveum.prism.xml.ns._public.types_3.ItemPathType in project midpoint by Evolveum.

the class DeltaConvertor method toItemDeltaTypes.

public static Collection<ItemDeltaType> toItemDeltaTypes(ItemDelta delta, DeltaConversionOptions options) throws SchemaException {
    if (InternalsConfig.consistencyChecks) {
        delta.checkConsistence();
    }
    if (!delta.isEmpty() && delta.getPrismContext() == null) {
        throw new IllegalStateException("Non-empty ItemDelta with no prismContext cannot be converted to ItemDeltaType.");
    }
    Collection<ItemDeltaType> mods = new ArrayList<>();
    ItemPathType path = new ItemPathType(delta.getPath());
    if (delta.getValuesToReplace() != null) {
        ItemDeltaType mod = new ItemDeltaType();
        mod.setPath(path);
        mod.setModificationType(ModificationTypeType.REPLACE);
        try {
            addModValues(delta, mod, delta.getValuesToReplace(), options);
        } catch (SchemaException e) {
            throw new SchemaException(e.getMessage() + " while converting property " + delta.getElementName(), e);
        }
        addOldValues(delta, mod, delta.getEstimatedOldValues(), options);
        mods.add(mod);
    }
    if (delta.getValuesToAdd() != null) {
        ItemDeltaType mod = new ItemDeltaType();
        mod.setPath(path);
        mod.setModificationType(ModificationTypeType.ADD);
        try {
            addModValues(delta, mod, delta.getValuesToAdd(), options);
        } catch (SchemaException e) {
            throw new SchemaException(e.getMessage() + " while converting property " + delta.getElementName(), e);
        }
        addOldValues(delta, mod, delta.getEstimatedOldValues(), options);
        mods.add(mod);
    }
    if (delta.getValuesToDelete() != null) {
        ItemDeltaType mod = new ItemDeltaType();
        mod.setPath(path);
        mod.setModificationType(ModificationTypeType.DELETE);
        try {
            addModValues(delta, mod, delta.getValuesToDelete(), options);
        } catch (SchemaException e) {
            throw new SchemaException(e.getMessage() + " while converting property " + delta.getElementName(), e);
        }
        addOldValues(delta, mod, delta.getEstimatedOldValues(), options);
        mods.add(mod);
    }
    return mods;
}
Also used : SchemaException(com.evolveum.midpoint.util.exception.SchemaException) ItemPathType(com.evolveum.prism.xml.ns._public.types_3.ItemPathType) ArrayList(java.util.ArrayList) ItemDeltaType(com.evolveum.prism.xml.ns._public.types_3.ItemDeltaType)

Example 8 with ItemPathType

use of com.evolveum.prism.xml.ns._public.types_3.ItemPathType in project midpoint by Evolveum.

the class ItemPathTypeDeserializer method deserialize.

@Override
public ItemPathType deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
    if (jp.getCurrentToken() != JsonToken.VALUE_STRING) {
        throw new JsonParseException("Cannot parse path value. Expected that the value will be string but it is: " + jp.getCurrentTokenId(), jp.getCurrentLocation());
    }
    String path = jp.getText();
    if (StringUtils.isBlank(path)) {
        throw new IllegalStateException("Error while deserializing path. No path specified.");
    }
    //System.out.println("path: " + path);
    //		if (path.startsWith("declare.*")){
    XPathHolder holder = new XPathHolder(path);
    ItemPath itemPath = holder.toItemPath();
    ItemPathType itemPathType = new ItemPathType(itemPath);
    return itemPathType;
//		ItemPathType itemPathType = new ItemPathType();
//		itemPathType.getContent().add(jp.getText());
//		
//		return itemPathType;
}
Also used : XPathHolder(com.evolveum.midpoint.prism.marshaller.XPathHolder) ItemPathType(com.evolveum.prism.xml.ns._public.types_3.ItemPathType) JsonParseException(com.fasterxml.jackson.core.JsonParseException) ItemPath(com.evolveum.midpoint.prism.path.ItemPath)

Example 9 with ItemPathType

use of com.evolveum.prism.xml.ns._public.types_3.ItemPathType in project midpoint by Evolveum.

the class QueryConvertor method getPath.

private static ItemPath getPath(MapXNode clauseXMap, QName key) throws SchemaException {
    XNode xnode = clauseXMap.get(key);
    if (xnode == null) {
        return null;
    }
    if (!(xnode instanceof PrimitiveXNode<?>)) {
        throw new SchemaException("Expected that field " + key + " will be primitive, but it is " + xnode.getDesc());
    }
    ItemPathType itemPathType = clauseXMap.getParsedPrimitiveValue(key, ItemPathType.COMPLEX_TYPE);
    return itemPathType != null ? itemPathType.getItemPath() : null;
}
Also used : SchemaException(com.evolveum.midpoint.util.exception.SchemaException) ItemPathType(com.evolveum.prism.xml.ns._public.types_3.ItemPathType)

Example 10 with ItemPathType

use of com.evolveum.prism.xml.ns._public.types_3.ItemPathType in project midpoint by Evolveum.

the class XPathTest method xpathTest.

/**
     * This is now a proper test yet.
     * It does some operations with XPath. If it does not die, then the
     * code some somehow consistent.
     *
     * It should be improved later.
     */
@Test
public void xpathTest() throws JAXBException, FileNotFoundException, IOException, ParserConfigurationException, SchemaException {
    ObjectModificationType objectModification = PrismTestUtil.parseAtomicValue(new File(FILENAME_CHANGETYPE), ObjectModificationType.COMPLEX_TYPE);
    for (ItemDeltaType change : objectModification.getItemDelta()) {
        ItemPathType pathType = change.getPath();
        System.out.println("  path=" + pathType + " (" + pathType.getClass().getName() + ") " + pathType.toString());
        //            NamedNodeMap attributes = path.getAttributes();
        //            for (int i = 0; i < attributes.getLength(); i++) {
        //                Node n = attributes.item(i);
        //                System.out.println("   A: " + n.getClass().getName() + " " + n.getNodeName() + "(" + n.getPrefix() + " : " + n.getLocalName() + ") = " + n.getNodeValue());
        //            }
        //            List<Object> any = change.getValue().getAny();
        //            for (Object e : any) {
        //                if (e instanceof Element) {
        //                    System.out.println("  E: " + ((Element) e).getLocalName());
        //                }
        //            }
        ItemPath path = pathType.getItemPath();
        XPathHolder xpath = new XPathHolder(path);
        AssertJUnit.assertEquals("c:extension/piracy:ship[2]/c:name", xpath.getXPathWithoutDeclarations());
        System.out.println("XPATH: " + xpath);
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setNamespaceAware(true);
        DocumentBuilder loader = factory.newDocumentBuilder();
        Document doc = loader.newDocument();
        Element xpathElement = xpath.toElement("http://elelel/", "path", doc);
        Attr nsC = xpathElement.getAttributeNodeNS("http://www.w3.org/2000/xmlns/", "c");
        Attr nsPiracy = xpathElement.getAttributeNodeNS("http://www.w3.org/2000/xmlns/", "piracy");
        System.out.println("c: " + nsC);
        System.out.println("piracy: " + nsPiracy);
        //            AssertJUnit.assertEquals("http://midpoint.evolveum.com/xml/ns/public/common/common-3", nsC.getValue());
        //            AssertJUnit.assertEquals("http://midpoint.evolveum.com/xml/ns/samples/piracy", nsPiracy.getValue());
        System.out.println("XPATH Element: " + xpathElement);
        XPathHolder xpathFromElement = new XPathHolder(xpathElement);
        AssertJUnit.assertEquals(xpath, xpathFromElement);
        //            attributes = xpathElement.getAttributes();
        //            for (int i = 0; i < attributes.getLength(); i++) {
        //                Node n = attributes.item(i);
        //                System.out.println(" A: " + n.getNodeName() + "(" + n.getPrefix() + " : " + n.getLocalName() + ") = " + n.getNodeValue());
        //            }
        List<XPathSegment> segments = xpath.toSegments();
        System.out.println("XPATH segments: " + segments);
        XPathHolder xpathFromSegments = new XPathHolder(segments);
        System.out.println("XPath from segments: " + xpathFromSegments);
        AssertJUnit.assertEquals("c:extension/piracy:ship[2]/c:name", xpathFromSegments.getXPathWithoutDeclarations());
    }
}
Also used : XPathSegment(com.evolveum.midpoint.prism.marshaller.XPathSegment) ObjectModificationType(com.evolveum.midpoint.xml.ns._public.common.api_types_3.ObjectModificationType) DocumentBuilderFactory(javax.xml.parsers.DocumentBuilderFactory) ItemPathType(com.evolveum.prism.xml.ns._public.types_3.ItemPathType) Element(org.w3c.dom.Element) Document(org.w3c.dom.Document) ItemDeltaType(com.evolveum.prism.xml.ns._public.types_3.ItemDeltaType) Attr(org.w3c.dom.Attr) XPathHolder(com.evolveum.midpoint.prism.marshaller.XPathHolder) DocumentBuilder(javax.xml.parsers.DocumentBuilder) File(java.io.File) CanonicalItemPath(com.evolveum.midpoint.prism.path.CanonicalItemPath) ItemPath(com.evolveum.midpoint.prism.path.ItemPath) Test(org.testng.annotations.Test)

Aggregations

ItemPathType (com.evolveum.prism.xml.ns._public.types_3.ItemPathType)55 ItemPath (com.evolveum.midpoint.prism.path.ItemPath)36 QName (javax.xml.namespace.QName)20 OperationResult (com.evolveum.midpoint.schema.result.OperationResult)11 ArrayList (java.util.ArrayList)11 SchemaException (com.evolveum.midpoint.util.exception.SchemaException)10 RawType (com.evolveum.prism.xml.ns._public.types_3.RawType)10 ItemDeltaType (com.evolveum.prism.xml.ns._public.types_3.ItemDeltaType)9 Test (org.testng.annotations.Test)9 PolyString (com.evolveum.midpoint.prism.polystring.PolyString)7 UserType (com.evolveum.midpoint.xml.ns._public.common.common_3.UserType)7 ObjectDeltaType (com.evolveum.prism.xml.ns._public.types_3.ObjectDeltaType)6 List (java.util.List)5 AbstractModelIntegrationTest (com.evolveum.midpoint.model.test.AbstractModelIntegrationTest)4 ObjectDelta (com.evolveum.midpoint.prism.delta.ObjectDelta)4 PrimitiveXNode (com.evolveum.midpoint.prism.xnode.PrimitiveXNode)4 MappingType (com.evolveum.midpoint.xml.ns._public.common.common_3.MappingType)4 ObjectType (com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType)4 PrismObject (com.evolveum.midpoint.prism.PrismObject)3 NameItemPathSegment (com.evolveum.midpoint.prism.path.NameItemPathSegment)3