You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by an...@apache.org on 2009/06/03 10:26:18 UTC
svn commit: r781296 - in
/jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav:
EventImpl.java RepositoryServiceImpl.java
Author: angela
Date: Wed Jun 3 08:26:17 2009
New Revision: 781296
URL: http://svn.apache.org/viewvc?rev=781296&view=rev
Log:
JCR-2108: JSR 283 Observation (work in progress)
- adjust spi2dav
Modified:
jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/EventImpl.java
jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java
Modified: jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/EventImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/EventImpl.java?rev=781296&r1=781295&r2=781296&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/EventImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/EventImpl.java Wed Jun 3 08:26:17 2009
@@ -18,12 +18,28 @@
import org.apache.jackrabbit.spi.Event;
import org.apache.jackrabbit.spi.ItemId;
-import org.apache.jackrabbit.spi.Path;
+import org.apache.jackrabbit.spi.Name;
+import org.apache.jackrabbit.spi.NameFactory;
import org.apache.jackrabbit.spi.NodeId;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
+import org.apache.jackrabbit.spi.Path;
+import org.apache.jackrabbit.spi.QValue;
+import org.apache.jackrabbit.spi.QValueFactory;
+import org.apache.jackrabbit.spi.commons.conversion.NamePathResolver;
+import org.apache.jackrabbit.spi.commons.name.NameFactoryImpl;
+import org.apache.jackrabbit.spi.commons.value.ValueFormat;
import org.apache.jackrabbit.webdav.observation.ObservationConstants;
+import org.apache.jackrabbit.webdav.xml.DomUtil;
+import org.apache.jackrabbit.webdav.xml.ElementIterator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.w3c.dom.Element;
+import javax.jcr.PropertyType;
+import javax.jcr.RepositoryException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
/**
* <code>EventImpl</code>...
*/
@@ -31,13 +47,19 @@
extends org.apache.jackrabbit.spi.commons.EventImpl
implements ObservationConstants {
+ private static Logger log = LoggerFactory.getLogger(EventImpl.class);
+
+ private static final NameFactory N_FACTORY = NameFactoryImpl.getInstance();
+
public EventImpl(ItemId eventId, Path eventPath, NodeId parentId, int eventType,
- Element eventElement) {
+ Element eventElement, NamePathResolver resolver, QValueFactory qvFactory) {
super(getSpiEventType(eventType), eventPath, eventId, parentId,
null, // TODO not available from XML_EVENT element
null, // TODO not available from XML_EVENT element
- DomUtil.getChildTextTrim(eventElement, XML_EVENTUSERID, NAMESPACE));
- // TODO: extend jcr-server to deliver jsr 283 event information
+ DomUtil.getChildTextTrim(eventElement, XML_EVENTUSERID, NAMESPACE),
+ DomUtil.getChildTextTrim(eventElement, XML_EVENTUSERDATA, NAMESPACE),
+ Long.parseLong(DomUtil.getChildTextTrim(eventElement, XML_EVENTDATE, NAMESPACE)),
+ getEventInfo(DomUtil.getChildElement(eventElement, XML_EVENTINFO, NAMESPACE), resolver, qvFactory));
}
//--------------------------------------------------------------------------
@@ -61,4 +83,32 @@
throw new IllegalArgumentException("Invalid event type: " + jcrEventType);
}
}
+
+ private static Map<Name, QValue> getEventInfo(Element infoElement,
+ NamePathResolver resolver,
+ QValueFactory qvFactory) {
+ if (infoElement == null) {
+ return Collections.EMPTY_MAP;
+ }
+
+ Map<Name, QValue> info = new HashMap();
+ ElementIterator it = DomUtil.getChildren(infoElement);
+ while (it.hasNext()) {
+ Element el = it.nextElement();
+ String uri = el.getNamespaceURI();
+ String localName = el.getLocalName();
+ String value = DomUtil.getTextTrim(el);
+ try {
+ Name n = N_FACTORY.create(uri, localName);
+ QValue qv = null;
+ if (value != null) {
+ qv = ValueFormat.getQValue(value, PropertyType.PATH, resolver, qvFactory);
+ }
+ info.put(n, qv);
+ } catch (RepositoryException e) {
+ log.error("Internal Error: ", e.getMessage());
+ }
+ }
+ return info;
+ }
}
\ No newline at end of file
Modified: jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java?rev=781296&r1=781295&r2=781296&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java Wed Jun 3 08:26:17 2009
@@ -201,13 +201,15 @@
private static Logger log = LoggerFactory.getLogger(RepositoryServiceImpl.class);
- private static final EventType[] ALL_EVENTS = new EventType[5];
+ private static final EventType[] ALL_EVENTS = new EventType[7];
static {
ALL_EVENTS[0] = SubscriptionImpl.getEventType(javax.jcr.observation.Event.NODE_ADDED);
ALL_EVENTS[1] = SubscriptionImpl.getEventType(javax.jcr.observation.Event.NODE_REMOVED);
ALL_EVENTS[2] = SubscriptionImpl.getEventType(javax.jcr.observation.Event.PROPERTY_ADDED);
ALL_EVENTS[3] = SubscriptionImpl.getEventType(javax.jcr.observation.Event.PROPERTY_CHANGED);
ALL_EVENTS[4] = SubscriptionImpl.getEventType(javax.jcr.observation.Event.PROPERTY_REMOVED);
+ ALL_EVENTS[5] = SubscriptionImpl.getEventType(javax.jcr.observation.Event.NODE_MOVED);
+ ALL_EVENTS[6] = SubscriptionImpl.getEventType(javax.jcr.observation.Event.PERSIST);
}
private static final SubscriptionInfo S_INFO = new SubscriptionInfo(ALL_EVENTS, true, INFINITE_TIMEOUT);
@@ -345,7 +347,11 @@
protected NamePathResolver getNamePathResolver(SessionInfo sessionInfo) throws RepositoryException {
checkSessionInfo(sessionInfo);
- NamePathResolver resolver = ((SessionInfoImpl) sessionInfo).getNamePathResolver();
+ return getNamePathResolver(((SessionInfoImpl) sessionInfo));
+ }
+
+ private NamePathResolver getNamePathResolver(SessionInfoImpl sessionInfo) {
+ NamePathResolver resolver = sessionInfo.getNamePathResolver();
if (resolver == null) {
resolver = new NamePathResolverImpl(sessionInfo);
((SessionInfoImpl) sessionInfo).setNamePathResolver(resolver);
@@ -1878,7 +1884,7 @@
}
}
- private List buildEventList(Element bundleElement, SessionInfo sessionInfo) {
+ private List buildEventList(Element bundleElement, SessionInfoImpl sessionInfo) {
List events = new ArrayList();
ElementIterator eventElementIterator = DomUtil.getChildren(bundleElement, ObservationConstants.XML_EVENT, ObservationConstants.NAMESPACE);
while (eventElementIterator.hasNext()) {
@@ -1926,7 +1932,8 @@
log.warn("Unable to build event parentId: ", e.getMessage());
}
- events.add(new EventImpl(eventId, eventPath, parentId, type, evElem));
+
+ events.add(new EventImpl(eventId, eventPath, parentId, type, evElem, getNamePathResolver(sessionInfo), getQValueFactory()));
}
return events;