You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by md...@apache.org on 2011/10/18 23:43:08 UTC
svn commit: r1185885 - in
/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy:
EntryFactory.java HierarchyEntry.java NodeEntry.java
Author: mduerig
Date: Tue Oct 18 21:43:07 2011
New Revision: 1185885
URL: http://svn.apache.org/viewvc?rev=1185885&view=rev
Log:
Microkernel based Jackrabbit prototype (WIP)
simplification and clean up
Modified:
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/EntryFactory.java
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEntry.java
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntry.java
Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/EntryFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/EntryFactory.java?rev=1185885&r1=1185884&r2=1185885&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/EntryFactory.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/EntryFactory.java Tue Oct 18 21:43:07 2011
@@ -17,6 +17,7 @@
package org.apache.jackrabbit.jcr2spi.hierarchy;
import org.apache.jackrabbit.jcr2spi.LogUtil;
+import org.apache.jackrabbit.jcr2spi.hierarchy.HierarchyEntry.EntryInvalidator;
import org.apache.jackrabbit.jcr2spi.state.TransientItemStateFactory;
import org.apache.jackrabbit.spi.IdFactory;
import org.apache.jackrabbit.spi.Name;
@@ -54,10 +55,7 @@ public final class EntryFactory {
private final NodeEntry rootEntry;
- /**
- * Strategy used for item state invalidation (refresh)
- */
- private final InvalidationStrategy invalidationStrategy;
+ private final EntryInvalidator entryInvalidator;
/**
* Create a new instance of the {@code EntryFactory}.
@@ -76,7 +74,7 @@ public final class EntryFactory {
this.listener = listener;
this.namePathResolver = namePathResolver;
- invalidationStrategy = new NodeEntry.LazyInvalidation();
+ entryInvalidator = new EntryInvalidator();
rootEntry = createNodeEntry(null, NameConstants.ROOT, null);
}
@@ -118,10 +116,10 @@ public final class EntryFactory {
}
/**
- * @return the strategy used for item state invalidation (refresh)
+ * @return the entry invalidator (refresh)
*/
- public InvalidationStrategy getInvalidationStrategy() {
- return invalidationStrategy;
+ public EntryInvalidator getEntryInvalidator() {
+ return entryInvalidator;
}
//--------------------------------------------------------------------------
@@ -145,32 +143,4 @@ public final class EntryFactory {
void uniqueIdChanged(NodeEntry entry, String previousUniqueID);
}
- // ----------------------------------------------< InvalidationStrategy >---
-
- /**
- * Strategy for invalidating item states
- */
- public interface InvalidationStrategy {
-
- /**
- * Invalidate underlying {@link org.apache.jackrabbit.jcr2spi.state.ItemState} of this
- * {@code entry}. Implementors may choose to delay the actual call to
- * {@link org.apache.jackrabbit.jcr2spi.state.ItemState#invalidate()} for this
- * {@code entry} and for any of its child entries. They need to ensure however that
- * {@link #applyPending(HierarchyEntry)} properly invalidates the respective state when called.
- *
- * @param entry The {@code HierarchyEntry} to invalidate.
- * @param recursive Invalidate state of child entries if {@code true}.
- */
- void invalidate(HierarchyEntry<?> entry, boolean recursive);
-
- /**
- * Apply any pending {@link org.apache.jackrabbit.jcr2spi.state.ItemState#invalidate()
- * invalidation} of the underlying {@link org.apache.jackrabbit.jcr2spi.state.ItemState} of
- * this {@code entry}.
- *
- * @param entry The affected {@code NodeEntry}.
- */
- void applyPending(HierarchyEntry<?> entry);
- }
}
Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEntry.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEntry.java?rev=1185885&r1=1185884&r2=1185885&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEntry.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEntry.java Tue Oct 18 21:43:07 2011
@@ -112,14 +112,6 @@ public abstract class HierarchyEntry<STA
}
/**
- * Shortcut for {@link EntryFactory#getInvalidationStrategy()}
- * @return
- */
- protected EntryFactory.InvalidationStrategy getInvalidationStrategy() {
- return factory.getInvalidationStrategy();
- }
-
- /**
* Resolves this {@code HierarchyEntryImpl} and returns the target
* {@code ItemState} of this reference.
*
@@ -188,6 +180,31 @@ public abstract class HierarchyEntry<STA
}
}
+ /**
+ * @param staleParent
+ */
+ protected void remove(boolean staleParent) {
+ STATE_TYPE state = getItemState();
+ Status status = getStatus();
+ if (state != null) {
+ if (status == Status.EXISTING_MODIFIED) {
+ state.setStatus(Status.STALE_DESTROYED);
+ } else if (status == Status.NEW && staleParent) {
+ // keep status NEW
+ } else {
+ state.setStatus(Status.REMOVED);
+ if (!staleParent) {
+ parent.internalRemoveChildEntry(this);
+ }
+ }
+ } else {
+ // unresolved
+ if (!staleParent && parent != null) {
+ parent.internalRemoveChildEntry(this);
+ }
+ }
+ }
+
//-----------------------------------------------------< HierarchyEntry >---
/**
@@ -334,7 +351,7 @@ public abstract class HierarchyEntry<STA
* state in the repository.
*/
public void invalidate(boolean recursive) {
- getInvalidationStrategy().invalidate(this, recursive);
+ factory.getEntryInvalidator().invalidate(this, recursive);
}
/**
@@ -342,7 +359,7 @@ public abstract class HierarchyEntry<STA
* changes to the underlying {@code ItemState} are applied.
*/
public void calculateStatus() {
- getInvalidationStrategy().applyPending(this);
+ factory.getEntryInvalidator().applyPending(this);
}
/**
@@ -487,43 +504,15 @@ public abstract class HierarchyEntry<STA
* NodeEntry all descending ItemStates must get their status changed as well.
*/
public void remove() {
- internalRemove(false);
- }
-
- //--------------------------------------------------------------------------
-
- /**
- * @param staleParent
- */
- void internalRemove(boolean staleParent) {
- STATE_TYPE state = getItemState();
- Status status = getStatus();
- if (state != null) {
- if (status == Status.EXISTING_MODIFIED) {
- state.setStatus(Status.STALE_DESTROYED);
- } else if (status == Status.NEW && staleParent) {
- // keep status NEW
- } else {
- state.setStatus(Status.REMOVED);
- if (!staleParent) {
- parent.internalRemoveChildEntry(this);
- }
- }
- } else {
- // unresolved
- if (!staleParent && parent != null) {
- parent.internalRemoveChildEntry(this);
- }
- }
+ remove(false);
}
- // ----------------------------------------------< InvalidationStrategy >---
+ // ----------------------------------------------< EntryInvalidator >---
/**
- * An implementation of {@code InvalidationStrategy} which lazily invalidates
- * the underlying {@link ItemState}s.
+ * An invalidator which lazily invalidates the underlying {@link ItemState}s.
*/
- static class LazyInvalidation implements EntryFactory.InvalidationStrategy {
+ public static class EntryInvalidator {
/**
* Marker for entries with a pending recursive invalidation.
@@ -552,7 +541,6 @@ public abstract class HierarchyEntry<STA
* invalidates the entry right away.
* {@inheritDoc}
*/
- @Override
public void invalidate(HierarchyEntry<?> entry, boolean recursive) {
if (recursive) {
entry.generation = INVALIDATION_PENDING;
@@ -577,7 +565,6 @@ public abstract class HierarchyEntry<STA
* Otherwise this method does nothing.
* {@inheritDoc}
*/
- @Override
public void applyPending(HierarchyEntry<?> entry) {
if (!invalidating) {
invalidating = true;
Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntry.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntry.java?rev=1185885&r1=1185884&r2=1185885&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntry.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntry.java Tue Oct 18 21:43:07 2011
@@ -247,25 +247,25 @@ public class NodeEntry extends Hierarchy
@Override
public void remove() {
// handle this entry first
- super.internalRemove(false);
+ super.remove(false);
boolean staleParent = getStatus() == Status.STALE_DESTROYED;
// now remove all child-entries (or mark them accordingly)
for (Iterator<HierarchyEntry<?>> it = getAllChildEntries(true); it.hasNext();) {
HierarchyEntry<?> ce = it.next();
- ce.internalRemove(staleParent);
+ ce.remove(staleParent);
}
}
@Override
- void internalRemove(boolean staleParent) {
+ protected void remove(boolean staleParent) {
// handle this entry first
- super.internalRemove(staleParent);
+ super.remove(staleParent);
staleParent = staleParent || getStatus() == Status.STALE_DESTROYED;
// now remove all child-entries (or mark them accordingly)
for (Iterator<HierarchyEntry<?>> it = getAllChildEntries(true); it.hasNext();) {
HierarchyEntry<?> ce = it.next();
- ce.internalRemove(staleParent);
+ ce.remove(staleParent);
}
}