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 2006/10/26 10:25:03 UTC
svn commit: r467911 - in
/jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav:
EventImpl.java ExceptionConverter.java IdFactoryImpl.java LockInfoImpl.java
NodeInfoImpl.java RepositoryServiceImpl.java URIResolverImpl.java
Author: angela
Date: Thu Oct 26 01:25:02 2006
New Revision: 467911
URL: http://svn.apache.org/viewvc?view=rev&rev=467911
Log:
work in progress
- add 'isSessionScoped' to LockInfo and RepositoryService.lock
- add index to NodeInfo
- evaluate EventIds upon call to getId, getParentId
- convert Method-Not-Allowed to ConstraintViolation
Modified:
jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/EventImpl.java
jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/ExceptionConverter.java
jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/IdFactoryImpl.java
jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/LockInfoImpl.java
jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/NodeInfoImpl.java
jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java
jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/URIResolverImpl.java
Modified: jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/EventImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/EventImpl.java?view=diff&rev=467911&r1=467910&r2=467911
==============================================================================
--- jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/EventImpl.java (original)
+++ jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/EventImpl.java Thu Oct 26 01:25:02 2006
@@ -22,7 +22,6 @@
import org.apache.jackrabbit.spi.NodeId;
import org.apache.jackrabbit.name.QName;
import org.apache.jackrabbit.spi.SessionInfo;
-import org.apache.jackrabbit.spi.PropertyId;
import org.apache.jackrabbit.webdav.xml.DomUtil;
import org.apache.jackrabbit.webdav.observation.ObservationConstants;
import org.apache.jackrabbit.webdav.observation.EventType;
@@ -46,13 +45,18 @@
private final Element eventElement;
private final int type;
- private final ItemId itemId;
- private final NodeId parentId;
+
+ private final SessionInfo sessionInfo;
+ private final URIResolver uriResolver;
+
+ private final String href;
private final Path qPath;
public EventImpl(Element eventElement, URIResolver uriResolver,
SessionInfo sessionInfo) throws RepositoryException, DavException {
this.eventElement = eventElement;
+ this.uriResolver = uriResolver;
+ this.sessionInfo = sessionInfo;
Element typeEl = DomUtil.getChildElement(eventElement, XML_EVENTTYPE, NAMESPACE);
EventType[] et = DefaultEventType.createFromXml(typeEl);
@@ -61,16 +65,8 @@
}
type = getSpiEventType(SubscriptionImpl.getJcrEventType(et[0]));
- String href = DomUtil.getChildTextTrim(eventElement, DavConstants.XML_HREF, DavConstants.NAMESPACE);
- if (type == Event.NODE_ADDED || type == Event.NODE_REMOVED) {
- itemId = uriResolver.getNodeId(href, sessionInfo);
- String parentHref = Text.getRelativeParent(href, 1, true);
- parentId = uriResolver.getNodeId(parentHref, sessionInfo);
- } else {
- itemId = uriResolver.getPropertyId(href, sessionInfo);
- parentId = ((PropertyId)itemId).getParentId();
- }
- qPath = uriResolver.getQPath(Text.unescape(href), sessionInfo);
+ href = DomUtil.getChildTextTrim(eventElement, DavConstants.XML_HREF, DavConstants.NAMESPACE);
+ qPath = uriResolver.getQPath(href, sessionInfo);
}
public int getType() {
@@ -82,15 +78,34 @@
}
public ItemId getItemId() {
- return itemId;
+ try {
+ if (type == Event.NODE_ADDED || type == Event.NODE_REMOVED) {
+ return uriResolver.getNodeId(href, sessionInfo);
+ } else {
+ return uriResolver.getPropertyId(href, sessionInfo);
+ }
+ } catch (RepositoryException e) {
+ // should never occur
+ log.error("Internal error, while building id of Event.", e);
+ // TODO: check
+ throw new IllegalStateException();
+ }
}
public NodeId getParentId() {
- return parentId;
+ try {
+ String parentHref = Text.getRelativeParent(href, 1, true);
+ return uriResolver.getNodeId(parentHref, sessionInfo);
+ } catch (RepositoryException e) {
+ // should never occur
+ log.error("Internal error, while building parentId of Event.", e);
+ // TODO: check
+ throw new IllegalStateException();
+ }
}
public String getUUID() {
- return itemId.getUUID();
+ return getItemId().getUUID();
}
public QName getPrimaryNodeTypeName() {
Modified: jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/ExceptionConverter.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/ExceptionConverter.java?view=diff&rev=467911&r1=467910&r2=467911
==============================================================================
--- jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/ExceptionConverter.java (original)
+++ jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/ExceptionConverter.java Thu Oct 26 01:25:02 2006
@@ -26,6 +26,7 @@
import javax.jcr.RepositoryException;
import javax.jcr.ItemNotFoundException;
+import javax.jcr.nodetype.ConstraintViolationException;
import javax.jcr.lock.LockException;
import java.lang.reflect.Constructor;
@@ -73,6 +74,7 @@
switch (davExc.getErrorCode()) {
case DavServletResponse.SC_NOT_FOUND : return new ItemNotFoundException(msg);
case DavServletResponse.SC_LOCKED : return new LockException(msg);
+ case DavServletResponse.SC_METHOD_NOT_ALLOWED : return new ConstraintViolationException(msg);
default: return new RepositoryException(msg);
}
}
Modified: jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/IdFactoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/IdFactoryImpl.java?view=diff&rev=467911&r1=467910&r2=467911
==============================================================================
--- jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/IdFactoryImpl.java (original)
+++ jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/IdFactoryImpl.java Thu Oct 26 01:25:02 2006
@@ -123,7 +123,7 @@
boolean equals(ItemId other) {
return (uuid == null) ? other.getUUID() == null : uuid.equals(other.getUUID())
- && (path == null) ? other.getPath() == null : path.equals(other.getPath());
+ && ((path == null) ? other.getPath() == null : path.equals(other.getPath()));
}
/**
Modified: jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/LockInfoImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/LockInfoImpl.java?view=diff&rev=467911&r1=467910&r2=467911
==============================================================================
--- jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/LockInfoImpl.java (original)
+++ jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/LockInfoImpl.java Thu Oct 26 01:25:02 2006
@@ -19,6 +19,7 @@
import org.apache.jackrabbit.webdav.lock.ActiveLock;
import org.apache.jackrabbit.webdav.lock.Type;
import org.apache.jackrabbit.webdav.lock.Scope;
+import org.apache.jackrabbit.webdav.jcr.ItemResourceConstants;
import org.apache.jackrabbit.spi.LockInfo;
import org.apache.jackrabbit.spi.NodeId;
import org.slf4j.LoggerFactory;
@@ -44,7 +45,8 @@
Iterator it = activeLocks.iterator();
while (it.hasNext()) {
ActiveLock l = (ActiveLock) it.next();
- if (l.getType() == Type.WRITE && l.getScope() == Scope.EXCLUSIVE) {
+ Scope sc = l.getScope();
+ if (l.getType() == Type.WRITE && (sc == Scope.EXCLUSIVE || sc == ItemResourceConstants.EXCLUSIVE_SESSION)) {
if (activeLock != null) {
throw new RepositoryException("Node " + nodeId + " contains multiple exclusive write locks.");
} else {
@@ -73,5 +75,9 @@
public boolean isDeep() {
return activeLock.isDeep();
+ }
+
+ public boolean isSessionScoped() {
+ return activeLock.getScope() == ItemResourceConstants.EXCLUSIVE_SESSION;
}
}
Modified: jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/NodeInfoImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/NodeInfoImpl.java?view=diff&rev=467911&r1=467910&r2=467911
==============================================================================
--- jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/NodeInfoImpl.java (original)
+++ jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/NodeInfoImpl.java Thu Oct 26 01:25:02 2006
@@ -48,6 +48,7 @@
private final NodeId id;
private final QName qName;
+ private final int index;
private QName primaryNodeTypeName = null;
private QName[] mixinNodeTypeNames = new QName[0];
@@ -85,6 +86,12 @@
qName = (Path.ROOT_ELEMENT == el) ? QName.ROOT : el.getName();
}
+ DavProperty indexProp = propSet.get(ItemResourceConstants.JCR_INDEX);
+ if (indexProp != null && indexProp.getValue() != null) {
+ index = Integer.parseInt(indexProp.getValue().toString());
+ } else {
+ index = Path.INDEX_DEFAULT;
+ }
// retrieve properties
try {
@@ -127,6 +134,10 @@
//-----------------------------------------------------------< NodeInfo >---
public NodeId getId() {
return id;
+ }
+
+ public int getIndex() {
+ return index;
}
public QName getNodetype() {
Modified: jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java?view=diff&rev=467911&r1=467910&r2=467911
==============================================================================
--- jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java (original)
+++ jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java Thu Oct 26 01:25:02 2006
@@ -906,12 +906,13 @@
}
/**
- * @see RepositoryService#lock(SessionInfo, NodeId, boolean)
+ * @see RepositoryService#lock(SessionInfo, NodeId, boolean, boolean)
*/
- public EventIterator lock(SessionInfo sessionInfo, NodeId nodeId, boolean deep) throws UnsupportedRepositoryOperationException, LockException, AccessDeniedException, InvalidItemStateException, RepositoryException {
+ public EventIterator lock(SessionInfo sessionInfo, NodeId nodeId, boolean deep, boolean sessionScoped) throws UnsupportedRepositoryOperationException, LockException, AccessDeniedException, InvalidItemStateException, RepositoryException {
try {
String uri = getItemUri(nodeId, sessionInfo);
- LockMethod method = new LockMethod(uri, Scope.EXCLUSIVE, Type.WRITE,
+ Scope scope = (sessionScoped) ? ItemResourceConstants.EXCLUSIVE_SESSION : Scope.EXCLUSIVE;
+ LockMethod method = new LockMethod(uri, scope, Type.WRITE,
sessionInfo.getUserID(), DavConstants.INFINITE_TIMEOUT, deep);
EventIterator events = execute(method, sessionInfo);
Modified: jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/URIResolverImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/URIResolverImpl.java?view=diff&rev=467911&r1=467910&r2=467911
==============================================================================
--- jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/URIResolverImpl.java (original)
+++ jackrabbit/trunk/contrib/spi/spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/URIResolverImpl.java Thu Oct 26 01:25:02 2006
@@ -125,7 +125,7 @@
// append uri of parent node, that is already cached
uriBuffer.append(cache.getUri(uuidId));
} else {
- // request locate-by-uuid report to build the uri
+ // try to request locate-by-uuid report to build the uri
ReportInfo rInfo = new ReportInfo(LocateByUuidReport.LOCATE_BY_UUID_REPORT);
rInfo.setContentElement(DomUtil.hrefToXml(uuid, domFactory));
@@ -181,13 +181,7 @@
NodeId buildNodeId(NodeId parentId, MultiStatusResponse response,
String workspaceName) throws RepositoryException {
IdURICache cache = getCache(workspaceName);
- if (cache.containsUri(response.getHref())) {
- ItemId id = cache.getItemId(response.getHref());
- if (id.denotesNode()) {
- return (NodeId) id;
- }
- }
-
+
NodeId nodeId;
DavPropertySet propSet = response.getProperties(DavServletResponse.SC_OK);
@@ -249,21 +243,16 @@
* @inheritDoc
*/
public Path getQPath(String uri, SessionInfo sessionInfo) throws RepositoryException {
- String repoUri = getRepositoryUri();
- String wspUri = getWorkspaceUri(sessionInfo.getWorkspaceName());
+ String rootUri = getRootItemUri(sessionInfo.getWorkspaceName());
String jcrPath;
- if (uri.startsWith(wspUri)) {
- jcrPath = uri.substring(wspUri.length());
- } else if (uri.startsWith(repoUri)) {
- jcrPath = uri.substring(repoUri.length());
- // then cut workspace name
- jcrPath = jcrPath.substring(jcrPath.indexOf('/', 1));
+ if (uri.startsWith(rootUri)) {
+ jcrPath = uri.substring(rootUri.length());
} else {
// todo: probably rather an error?
jcrPath = uri;
}
try {
- return PathFormat.parse(jcrPath, nsResolver);
+ return PathFormat.parse(Text.unescape(jcrPath), nsResolver);
} catch (MalformedPathException e) {
throw new RepositoryException();
}