Search in sources :

Example 71 with NodeId

use of org.apache.jackrabbit.spi.NodeId in project jackrabbit by apache.

the class BatchTest method testMultiValuedProperty.

public void testMultiValuedProperty() throws RepositoryException {
    NodeId nid = getNodeId(testPath);
    Name propName = resolver.getQName("mvProperty2");
    QValue[] vs = new QValue[] { rs.getQValueFactory().create(111), rs.getQValueFactory().create(222), rs.getQValueFactory().create(333) };
    Batch b = rs.createBatch(si, nid);
    b.addProperty(nid, propName, vs);
    rs.submit(b);
    PropertyInfo pi = rs.getPropertyInfo(si, getPropertyId(nid, propName));
    assertTrue(pi.isMultiValued());
    assertEquals(Arrays.asList(vs), Arrays.asList(pi.getValues()));
    assertEquals(PropertyType.LONG, pi.getType());
}
Also used : QValue(org.apache.jackrabbit.spi.QValue) Batch(org.apache.jackrabbit.spi.Batch) NodeId(org.apache.jackrabbit.spi.NodeId) PropertyInfo(org.apache.jackrabbit.spi.PropertyInfo) Name(org.apache.jackrabbit.spi.Name)

Example 72 with NodeId

use of org.apache.jackrabbit.spi.NodeId in project jackrabbit by apache.

the class BatchTest method testSetWeakReferenceValue.

public void testSetWeakReferenceValue() throws RepositoryException {
    NodeId nid = getNodeId(testPath);
    NodeInfo nInfo = rs.getNodeInfo(si, nid);
    if (!Arrays.asList(nInfo.getMixins()).contains(NameConstants.MIX_REFERENCEABLE)) {
        Batch b = rs.createBatch(si, nid);
        b.setMixins(nid, new Name[] { NameConstants.MIX_REFERENCEABLE });
        rs.submit(b);
    }
    String ref = rs.getNodeInfo(si, nid).getId().getUniqueID();
    Name propName = resolver.getQName("weakRefProp");
    QValue v = rs.getQValueFactory().create(ref, PropertyType.WEAKREFERENCE);
    Batch b = rs.createBatch(si, nid);
    b.addProperty(nid, propName, v);
    rs.submit(b);
    PropertyInfo pi = rs.getPropertyInfo(si, getPropertyId(nid, propName));
    assertFalse(pi.isMultiValued());
    assertEquals(v, pi.getValues()[0]);
    assertEquals(PropertyType.WEAKREFERENCE, pi.getType());
    pi = getPropertyInfo(nid, propName);
    assertEquals(v, pi.getValues()[0]);
    assertEquals(PropertyType.WEAKREFERENCE, pi.getType());
}
Also used : QValue(org.apache.jackrabbit.spi.QValue) Batch(org.apache.jackrabbit.spi.Batch) NodeInfo(org.apache.jackrabbit.spi.NodeInfo) NodeId(org.apache.jackrabbit.spi.NodeId) PropertyInfo(org.apache.jackrabbit.spi.PropertyInfo) Name(org.apache.jackrabbit.spi.Name)

Example 73 with NodeId

use of org.apache.jackrabbit.spi.NodeId in project jackrabbit by apache.

the class RepositoryServiceImpl method getParentId.

private NodeId getParentId(String baseUri, DavPropertySet propSet, SessionInfo sessionInfo) throws RepositoryException {
    NodeId parentId = null;
    DavProperty<?> p = propSet.get(JcrRemotingConstants.JCR_PARENT_LN, ItemResourceConstants.NAMESPACE);
    if (p != null) {
        HrefProperty parentProp = new HrefProperty(p);
        String parentHref = parentProp.getHrefs().get(0);
        if (parentHref != null && parentHref.length() > 0) {
            parentId = uriResolver.getNodeId(resolve(baseUri, parentHref), sessionInfo);
        }
    }
    return parentId;
}
Also used : HrefProperty(org.apache.jackrabbit.webdav.property.HrefProperty) NodeId(org.apache.jackrabbit.spi.NodeId)

Example 74 with NodeId

use of org.apache.jackrabbit.spi.NodeId in project jackrabbit by apache.

the class RepositoryServiceImpl method buildEventList.

private List<Event> buildEventList(Element bundleElement, SessionInfoImpl sessionInfo, String baseUri) throws RepositoryException {
    List<Event> events = new ArrayList<Event>();
    ElementIterator eventElementIterator = DomUtil.getChildren(bundleElement, ObservationConstants.N_EVENT);
    String userId = null;
    // get user id from enclosing Atom entry element in case this was a feed
    if (DomUtil.matches(bundleElement, AtomFeedConstants.N_ENTRY)) {
        Element authorEl = DomUtil.getChildElement(bundleElement, AtomFeedConstants.N_AUTHOR);
        Element nameEl = authorEl != null ? DomUtil.getChildElement(authorEl, AtomFeedConstants.N_NAME) : null;
        if (nameEl != null) {
            userId = DomUtil.getTextTrim(nameEl);
        }
    }
    while (eventElementIterator.hasNext()) {
        Element evElem = eventElementIterator.nextElement();
        Element typeEl = DomUtil.getChildElement(evElem, ObservationConstants.N_EVENTTYPE);
        EventType[] et = DefaultEventType.createFromXml(typeEl);
        if (et.length == 0 || et.length > 1) {
            // should not occur.
            log.error("Ambiguous event type definition: expected one single event type.");
            continue;
        }
        String href = DomUtil.getChildTextTrim(evElem, XML_HREF, NAMESPACE);
        int type = EventUtil.getJcrEventType(et[0].getName());
        Path eventPath = null;
        ItemId eventId = null;
        NodeId parentId = null;
        if (href != null) {
            href = resolve(baseUri, href);
            try {
                eventPath = uriResolver.getQPath(href, sessionInfo);
            } catch (RepositoryException e) {
                // should not occur
                log.error("Internal error while building Event: ()", e.getMessage());
                continue;
            }
            boolean isForNode = (type == Event.NODE_ADDED || type == Event.NODE_REMOVED || type == Event.NODE_MOVED);
            try {
                if (isForNode) {
                    eventId = uriResolver.getNodeIdAfterEvent(href, sessionInfo, type == Event.NODE_REMOVED);
                } else {
                    eventId = uriResolver.getPropertyId(href, sessionInfo);
                }
            } catch (RepositoryException e) {
                if (isForNode) {
                    eventId = idFactory.createNodeId((String) null, eventPath);
                } else {
                    try {
                        eventId = idFactory.createPropertyId(idFactory.createNodeId((String) null, eventPath.getAncestor(1)), eventPath.getName());
                    } catch (RepositoryException e1) {
                        log.warn("Unable to build event itemId: {}", e.getMessage());
                    }
                }
            }
            String parentHref = Text.getRelativeParent(href, 1, true);
            try {
                parentId = uriResolver.getNodeId(parentHref, sessionInfo);
            } catch (RepositoryException e) {
                log.warn("Unable to build event parentId: {}", e.getMessage());
            }
        }
        if (userId == null) {
            // user id not retrieved from container
            userId = DomUtil.getChildTextTrim(evElem, ObservationConstants.N_EVENTUSERID);
        }
        events.add(new EventImpl(eventId, eventPath, parentId, type, userId, evElem, getNamePathResolver(sessionInfo), getQValueFactory()));
    }
    return events;
}
Also used : Path(org.apache.jackrabbit.spi.Path) ElementIterator(org.apache.jackrabbit.webdav.xml.ElementIterator) DefaultEventType(org.apache.jackrabbit.webdav.observation.DefaultEventType) EventType(org.apache.jackrabbit.webdav.observation.EventType) Element(org.w3c.dom.Element) ArrayList(java.util.ArrayList) RepositoryException(javax.jcr.RepositoryException) ItemId(org.apache.jackrabbit.spi.ItemId) NodeId(org.apache.jackrabbit.spi.NodeId) Event(org.apache.jackrabbit.spi.Event)

Example 75 with NodeId

use of org.apache.jackrabbit.spi.NodeId in project jackrabbit by apache.

the class RepositoryServiceImpl method getItemInfos.

/**
     * @see RepositoryService#getItemInfos(SessionInfo, ItemId)
     */
@Override
public Iterator<? extends ItemInfo> getItemInfos(SessionInfo sessionInfo, ItemId itemId) throws RepositoryException {
    if (!itemId.denotesNode()) {
        PropertyInfo propertyInfo = getPropertyInfo(sessionInfo, (PropertyId) itemId);
        return Iterators.singleton(propertyInfo);
    } else {
        NodeId nodeId = (NodeId) itemId;
        Path path = getPath(itemId, sessionInfo);
        String uri = getURI(path, sessionInfo);
        int depth = batchReadConfig.getDepth(path, this.getNamePathResolver(sessionInfo));
        HttpGet request = new HttpGet(uri + "." + depth + ".json");
        HttpResponse response = null;
        try {
            response = executeRequest(sessionInfo, request);
            int statusCode = response.getStatusLine().getStatusCode();
            if (statusCode == DavServletResponse.SC_OK) {
                HttpEntity entity = response.getEntity();
                if (entity.getContentLength() == 0) {
                    // no JSON response -> no such node on the server
                    throw new ItemNotFoundException("No such item " + nodeId);
                }
                NamePathResolver resolver = getNamePathResolver(sessionInfo);
                NodeInfoImpl nInfo = new NodeInfoImpl(nodeId, path);
                ItemInfoJsonHandler handler = new ItemInfoJsonHandler(resolver, nInfo, getRootURI(sessionInfo), getQValueFactory(sessionInfo), getPathFactory(), getIdFactory());
                JsonParser ps = new JsonParser(handler);
                ps.parse(entity.getContent(), ContentType.get(entity).getCharset().name());
                Iterator<? extends ItemInfo> it = handler.getItemInfos();
                if (!it.hasNext()) {
                    throw new ItemNotFoundException("No such node " + uri);
                }
                return handler.getItemInfos();
            } else {
                throw ExceptionConverter.generate(new DavException(statusCode, "Unable to retrieve NodeInfo for " + uri), request);
            }
        } catch (IOException e) {
            log.error("Internal error while retrieving NodeInfo.", e);
            throw new RepositoryException(e.getMessage());
        } finally {
            request.releaseConnection();
        }
    }
}
Also used : Path(org.apache.jackrabbit.spi.Path) NamePathResolver(org.apache.jackrabbit.spi.commons.conversion.NamePathResolver) HttpEntity(org.apache.http.HttpEntity) DavException(org.apache.jackrabbit.webdav.DavException) HttpGet(org.apache.http.client.methods.HttpGet) HttpResponse(org.apache.http.HttpResponse) RepositoryException(javax.jcr.RepositoryException) IOException(java.io.IOException) NodeId(org.apache.jackrabbit.spi.NodeId) PropertyInfo(org.apache.jackrabbit.spi.PropertyInfo) ItemNotFoundException(javax.jcr.ItemNotFoundException) JsonParser(org.apache.jackrabbit.commons.json.JsonParser)

Aggregations

NodeId (org.apache.jackrabbit.spi.NodeId)80 Batch (org.apache.jackrabbit.spi.Batch)35 Name (org.apache.jackrabbit.spi.Name)32 PropertyInfo (org.apache.jackrabbit.spi.PropertyInfo)23 RepositoryException (javax.jcr.RepositoryException)21 QValue (org.apache.jackrabbit.spi.QValue)21 PropertyId (org.apache.jackrabbit.spi.PropertyId)13 Path (org.apache.jackrabbit.spi.Path)11 NodeInfo (org.apache.jackrabbit.spi.NodeInfo)10 ArrayList (java.util.ArrayList)9 ItemNotFoundException (javax.jcr.ItemNotFoundException)9 DavPropertyNameSet (org.apache.jackrabbit.webdav.property.DavPropertyNameSet)9 IOException (java.io.IOException)6 Node (javax.jcr.Node)5 HttpResponse (org.apache.http.HttpResponse)5 ItemId (org.apache.jackrabbit.spi.ItemId)5 DavException (org.apache.jackrabbit.webdav.DavException)5 InputStream (java.io.InputStream)4 ChildInfo (org.apache.jackrabbit.spi.ChildInfo)4 PathNotFoundException (javax.jcr.PathNotFoundException)3