You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by tr...@apache.org on 2004/11/02 22:34:18 UTC
svn commit: rev 56421 - in incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core: state version virtual
Author: tripod
Date: Tue Nov 2 13:34:17 2004
New Revision: 56421
Modified:
incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/state/ItemState.java
incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/state/SessionItemStateManager.java
incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/PersistentNode.java
incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/PersistentVersionManager.java
incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/VersionManager.java
incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/virtual/DefaultItemStateProvider.java
incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/virtual/VirtualNodeState.java
Log:
- fixing problem with virtual overlay
- fixing PersistentNode issue described in JCR-15 [PersistentNode.store() ignores status when storing]
Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/state/ItemState.java
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/state/ItemState.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/state/ItemState.java Tue Nov 2 13:34:17 2004
@@ -65,11 +65,10 @@
* 'existing', i.e. persistent state that has been destroyed by somebody else
*/
public static final int STATUS_STALE_DESTROYED = 6;
+
/**
- * 'virtual' status, i.e. persistent state is virtual
+ * the internal status of this item state
*/
- public static final int STATUS_EXISTING_VIRTUAL = 7;
-
protected int status = STATUS_UNDEFINED;
/**
@@ -104,10 +103,6 @@
case STATUS_NEW:
status = initialStatus;
break;
- case STATUS_EXISTING_VIRTUAL:
- // todo: should be keep this state?
- status = STATUS_EXISTING;
- break;
default:
String msg = "illegal status: " + initialStatus;
log.error(msg);
@@ -133,10 +128,6 @@
case STATUS_EXISTING_MODIFIED:
case STATUS_EXISTING_REMOVED:
status = initialStatus;
- break;
- case STATUS_EXISTING_VIRTUAL:
- // todo: should be keep this state?
- status = STATUS_EXISTING;
break;
default:
String msg = "illegal status: " + initialStatus;
Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/state/SessionItemStateManager.java
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/state/SessionItemStateManager.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/state/SessionItemStateManager.java Tue Nov 2 13:34:17 2004
@@ -211,12 +211,6 @@
*/
public ItemState getItemState(ItemId id)
throws NoSuchItemStateException, ItemStateException {
- // check if there is a virtual state for the specified item
- for (int i = 0; i < virtualProviders.length; i++) {
- if (virtualProviders[i].hasItemState(id)) {
- return virtualProviders[i].getItemState(id);
- }
- }
// first check if the specified item has been transiently removed
if (transientStateMgr.hasItemStateInAttic(id)) {
@@ -233,6 +227,13 @@
// check if there's transient state for the specified item
if (transientStateMgr.hasItemState(id)) {
return transientStateMgr.getItemState(id);
+ }
+
+ // check if there is a virtual state for the specified item
+ for (int i=0; i<virtualProviders.length; i++) {
+ if (virtualProviders[i].hasItemState(id)) {
+ return virtualProviders[i].getItemState(id);
+ }
}
// check if there's persistent state for the specified item
Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/PersistentNode.java
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/PersistentNode.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/PersistentNode.java Tue Nov 2 13:34:17 2004
@@ -501,7 +501,9 @@
store(nstate);
}
// and store itself
- state.store();
+ if (state.isTransient()) {
+ state.store();
+ }
}
/**
Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/PersistentVersionManager.java
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/PersistentVersionManager.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/PersistentVersionManager.java Tue Nov 2 13:34:17 2004
@@ -72,11 +72,16 @@
/**
- * the root node of the version histories
+ * the persistent root node of the version histories
*/
private final PersistentNode historyRoot;
/**
+ * the virtual root node of the version histories
+ */
+ private final String virtHistoryRootId;
+
+ /**
* the system root id
*/
private final String systemRootId;
@@ -117,8 +122,13 @@
if (!systemRoot.hasNode(VERSION_HISTORY_ROOT_NAME)) {
// if not exist, create
systemRoot.addNode(VERSION_HISTORY_ROOT_NAME, NodeTypeRegistry.NT_UNSTRUCTURED);
- systemRoot.save();
}
+ if (!systemRoot.hasNode(VersionManager.VERSION_HISTORY_ROOT_NAME)) {
+ // if not exist, create
+ systemRoot.addNode(VersionManager.VERSION_HISTORY_ROOT_NAME, NodeTypeRegistry.NT_UNSTRUCTURED);
+ }
+ systemRoot.save();
+ virtHistoryRootId = systemRoot.getNode(VersionManager.VERSION_HISTORY_ROOT_NAME).internalGetUUID();
try {
PersistentNodeState nodeState = (PersistentNodeState) stateMgr.getItemState(new NodeId(systemRoot.getNode(VERSION_HISTORY_ROOT_NAME).internalGetUUID()));
@@ -271,7 +281,7 @@
*/
public synchronized VersionManager getVersionManager() {
if (versionManager==null) {
- versionManager = new VersionManager(this, systemRootId);
+ versionManager = new VersionManager(this, virtHistoryRootId);
}
return versionManager;
}
Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/VersionManager.java
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/VersionManager.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/VersionManager.java Tue Nov 2 13:34:17 2004
@@ -117,6 +117,7 @@
/**
* @param vMgr
+ * @param rootId the uuid of the version history root
*/
protected VersionManager(PersistentVersionManager vMgr, String rootId) {
this.vMgr = vMgr;
@@ -132,9 +133,10 @@
public VirtualItemStateProvider getVirtualItemStateProvider(ItemStateProvider base) {
if (virtProvider==null) {
try {
- NodeState rootState = (NodeState) base.getItemState(new NodeId(rootId));
- virtProvider = new DefaultItemStateProvider(vMgr.getNodeTypeManager(), rootState);
- historyRoot = virtProvider.addNode(virtProvider.getRootState(), VERSION_HISTORY_ROOT_NAME, null, NodeTypeRegistry.NT_UNSTRUCTURED, null);
+ virtProvider = new DefaultItemStateProvider(vMgr.getNodeTypeManager());
+ // create a duplicate of the version history root name
+ NodeState virtRootState = (NodeState) base.getItemState(new NodeId(rootId));
+ historyRoot = virtProvider.addOverlay(virtRootState);
Iterator iter = vMgr.getVersionHistories();
while (iter.hasNext()) {
InternalVersionHistory vh = (InternalVersionHistory) iter.next();
Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/virtual/DefaultItemStateProvider.java
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/virtual/DefaultItemStateProvider.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/virtual/DefaultItemStateProvider.java Tue Nov 2 13:34:17 2004
@@ -48,7 +48,7 @@
/**
* the virtual root state of this provider (does not have to be /)
*/
- private final VirtualNodeState rootState;
+ //private final VirtualNodeState rootState;
/**
* the items of this provider
@@ -59,21 +59,9 @@
* Creates a new item state provider.
*
* @param ntMgr the nodetype manager
- * @param overlayedRoot the node state that is overlayed
*/
- public DefaultItemStateProvider(NodeTypeManagerImpl ntMgr, NodeState overlayedRoot) {
+ public DefaultItemStateProvider(NodeTypeManagerImpl ntMgr) {
this.ntMgr = ntMgr;
- rootState = new VirtualNodeState(overlayedRoot);
- items.put(rootState.getId(), rootState);
- }
-
- /**
- * Returns the nodestate of the relative root of this provider
- *
- * @return
- */
- public VirtualNodeState getRootState() {
- return rootState;
}
/**
@@ -132,6 +120,15 @@
}
VirtualNodeState parent = (VirtualNodeState) getItemState(parentId);
return addNode(parent, name, id, nodeType, null);
+ }
+
+ public VirtualNodeState addOverlay(NodeState original) throws RepositoryException {
+ VirtualNodeState ns= new VirtualNodeState(original.getUUID(), original.getNodeTypeName(), original.getParentUUID());
+ ns.setDefinitionId(original.getDefinitionId());
+ setPropertyValue(ns, ItemImpl.PROPNAME_PRIMARYTYPE, InternalValue.create(original.getNodeTypeName()));
+ ns.setMixinTypeNames(original.getMixinTypeNames());
+ items.put(ns.getId(), ns);
+ return ns;
}
/**
Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/virtual/VirtualNodeState.java
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/virtual/VirtualNodeState.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/virtual/VirtualNodeState.java Tue Nov 2 13:34:17 2004
@@ -33,14 +33,7 @@
* @param parentUUID
*/
protected VirtualNodeState(String uuid, QName nodeTypeName, String parentUUID) {
- super(uuid, nodeTypeName, parentUUID, ItemState.STATUS_EXISTING_VIRTUAL);
+ super(uuid, nodeTypeName, parentUUID, ItemState.STATUS_EXISTING);
}
- /**
- *
- * @param overlayedState
- */
- protected VirtualNodeState(NodeState overlayedState) {
- super(overlayedState, ItemState.STATUS_EXISTING_VIRTUAL);
- }
}