Search in sources :

Example 11 with ItemId

use of org.apache.jackrabbit.spi.ItemId 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 12 with ItemId

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

the class URIResolverImpl method getPropertyId.

/**
 * @inheritDoc
 */
public PropertyId getPropertyId(String uri, SessionInfo sessionInfo) throws RepositoryException {
    IdURICache cache = getCache(sessionInfo.getWorkspaceName());
    ItemId id = cache.getItemId(uri);
    if (id != null) {
        if (!id.denotesNode()) {
            return (PropertyId) id;
        }
    }
    // separate parent uri and property JCRName
    String parentUri = Text.getRelativeParent(uri, 1, true);
    // make sure propName is unescaped
    String propName = Text.unescape(Text.getName(uri, true));
    // retrieve parent node id
    NodeId parentId = getNodeId(parentUri, sessionInfo, false);
    // build property id
    try {
        Name name = service.getNamePathResolver(sessionInfo).getQName(propName);
        PropertyId propertyId = service.getIdFactory().createPropertyId(parentId, name);
        cache.add(uri, propertyId);
        return propertyId;
    } catch (NameException e) {
        throw new RepositoryException(e);
    }
}
Also used : NameException(org.apache.jackrabbit.spi.commons.conversion.NameException) NodeId(org.apache.jackrabbit.spi.NodeId) RepositoryException(javax.jcr.RepositoryException) ItemId(org.apache.jackrabbit.spi.ItemId) PropertyId(org.apache.jackrabbit.spi.PropertyId) Name(org.apache.jackrabbit.spi.Name)

Aggregations

ItemId (org.apache.jackrabbit.spi.ItemId)12 RepositoryException (javax.jcr.RepositoryException)7 NodeId (org.apache.jackrabbit.spi.NodeId)5 Path (org.apache.jackrabbit.spi.Path)5 Name (org.apache.jackrabbit.spi.Name)4 IOException (java.io.IOException)2 ItemNotFoundException (javax.jcr.ItemNotFoundException)2 HttpResponse (org.apache.http.HttpResponse)2 Event (org.apache.jackrabbit.spi.Event)2 PropertyId (org.apache.jackrabbit.spi.PropertyId)2 NameException (org.apache.jackrabbit.spi.commons.conversion.NameException)2 DavException (org.apache.jackrabbit.webdav.DavException)2 ByteArrayInputStream (java.io.ByteArrayInputStream)1 ByteArrayOutputStream (java.io.ByteArrayOutputStream)1 ObjectInputStream (java.io.ObjectInputStream)1 ObjectOutputStream (java.io.ObjectOutputStream)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 Map (java.util.Map)1