You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by mr...@apache.org on 2008/11/11 17:30:38 UTC
svn commit: r713076 - in /jackrabbit/trunk/jackrabbit-core/src:
main/java/org/apache/jackrabbit/core/
main/java/org/apache/jackrabbit/core/cluster/
main/java/org/apache/jackrabbit/core/journal/
main/java/org/apache/jackrabbit/core/observation/ main/jav...
Author: mreutegg
Date: Tue Nov 11 08:30:37 2008
New Revision: 713076
URL: http://svn.apache.org/viewvc?rev=713076&view=rev
Log:
JCR-1839: Introduce Event.getDate()
Modified:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/ChangeLogRecord.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/ClusterNode.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/ClusterRecordDeserializer.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/Update.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/UpdateEventListener.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/AppendRecord.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/ReadRecord.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/Record.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventImpl.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventStateCollection.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/FilteredEventIterator.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionManagerImpl.java
jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/SimpleEventListener.java
jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/UpdateEventFactory.java
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java?rev=713076&r1=713075&r2=713076&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java Tue Nov 11 08:30:37 2008
@@ -2096,11 +2096,14 @@
/**
* {@inheritDoc}
*/
- public void externalUpdate(ChangeLog external, List events) throws RepositoryException {
+ public void externalUpdate(ChangeLog external,
+ List events,
+ long timestamp) throws RepositoryException {
try {
EventStateCollection esc = new EventStateCollection(
getObservationDispatcher(), null, null);
esc.addAll(events);
+ esc.setTimestamp(timestamp);
getItemStateProvider().externalUpdate(external, esc);
} catch (IllegalStateException e) {
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/ChangeLogRecord.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/ChangeLogRecord.java?rev=713076&r1=713075&r2=713076&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/ChangeLogRecord.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/ChangeLogRecord.java Tue Nov 11 08:30:37 2008
@@ -43,6 +43,11 @@
public class ChangeLogRecord extends ClusterRecord {
/**
+ * Identifier: DATE
+ */
+ static final char DATE_IDENTIFIER = 'D';
+
+ /**
* Identifier: NODE.
*/
static final char NODE_IDENTIFIER = 'N';
@@ -78,6 +83,11 @@
private ChangeLog changes;
/**
+ * The time when the changes happened. Milliseconds since January 1 1970 UTC.
+ */
+ private long timestamp = System.currentTimeMillis();
+
+ /**
* List of <code>EventState</code>s.
*/
private List events;
@@ -96,7 +106,7 @@
* Create a new instance of this class. Used when serializing.
*
* @param changes changes
- * @param list of <code>EventState</code>s
+ * @param events list of <code>EventState</code>s
* @param record record
* @param workspace workspace
*/
@@ -131,6 +141,9 @@
while (identifier != END_MARKER) {
switch (identifier) {
+ case DATE_IDENTIFIER:
+ readTimestampRecord();
+ break;
case NODE_IDENTIFIER:
readNodeRecord();
break;
@@ -158,6 +171,15 @@
}
/**
+ * Reads the timestamp record.
+ *
+ * @throws JournalException if an error occurs.
+ */
+ private void readTimestampRecord() throws JournalException {
+ timestamp = record.readLong();
+ }
+
+ /**
* Read a node record.
*
* @throws JournalException if an error occurs
@@ -288,6 +310,7 @@
* {@inheritDoc}
*/
protected void doWrite() throws JournalException {
+ writeTimestampRecord();
Iterator deletedStates = changes.deletedStates();
while (deletedStates.hasNext()) {
ItemState state = (ItemState) deletedStates.next();
@@ -324,6 +347,16 @@
}
/**
+ * Writes the timestamp record.
+ *
+ * @throws JournalException if an error occurs.
+ */
+ private void writeTimestampRecord() throws JournalException {
+ record.writeChar(DATE_IDENTIFIER);
+ record.writeLong(timestamp);
+ }
+
+ /**
* Write a node record
*
* @param operation operation
@@ -397,9 +430,17 @@
* Return the events.
*
* @return events
- * @return
*/
public List getEvents() {
return Collections.unmodifiableList(events);
}
+
+ /**
+ * Returns the timestamp.
+ *
+ * @return the timestamp.
+ */
+ public long getTimestamp() {
+ return timestamp;
+ }
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/ClusterNode.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/ClusterNode.java?rev=713076&r1=713075&r2=713076&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/ClusterNode.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/ClusterNode.java Tue Nov 11 08:30:37 2008
@@ -849,7 +849,8 @@
}
}
try {
- listener.externalUpdate(record.getChanges(), record.getEvents());
+ listener.externalUpdate(record.getChanges(),
+ record.getEvents(), record.getTimestamp());
} catch (RepositoryException e) {
String msg = "Unable to deliver update events: " + e.getMessage();
log.error(msg);
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/ClusterRecordDeserializer.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/ClusterRecordDeserializer.java?rev=713076&r1=713075&r2=713076&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/ClusterRecordDeserializer.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/ClusterRecordDeserializer.java Tue Nov 11 08:30:37 2008
@@ -40,6 +40,7 @@
case ChangeLogRecord.NODE_IDENTIFIER:
case ChangeLogRecord.PROPERTY_IDENTIFIER:
case ChangeLogRecord.EVENT_IDENTIFIER:
+ case ChangeLogRecord.DATE_IDENTIFIER:
clusterRecord = new ChangeLogRecord(c, record, workspace);
clusterRecord.read();
break;
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/Update.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/Update.java?rev=713076&r1=713075&r2=713076&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/Update.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/Update.java Tue Nov 11 08:30:37 2008
@@ -57,4 +57,11 @@
*/
List getEvents();
+ /**
+ * Returns the timestamp whe this update occured.
+ *
+ * @return the timestamp whe this update occured.
+ */
+ long getTimestamp();
+
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/UpdateEventListener.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/UpdateEventListener.java?rev=713076&r1=713075&r2=713076&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/UpdateEventListener.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/UpdateEventListener.java Tue Nov 11 08:30:37 2008
@@ -30,8 +30,10 @@
*
* @param changes external changes containing only node and property ids.
* @param events events to deliver
+ * @param timestamp when the change occured.
* @throws RepositoryException if the update cannot be processed
*/
- void externalUpdate(ChangeLog changes, List events) throws RepositoryException;
+ void externalUpdate(ChangeLog changes, List events, long timestamp)
+ throws RepositoryException;
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/AppendRecord.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/AppendRecord.java?rev=713076&r1=713075&r2=713076&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/AppendRecord.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/AppendRecord.java Tue Nov 11 08:30:37 2008
@@ -205,6 +205,20 @@
/**
* {@inheritDoc}
*/
+ public void writeLong(long n) throws JournalException {
+ checkOutput();
+
+ try {
+ dataOut.writeLong(n);
+ } catch (IOException e) {
+ String msg = "I/O error while writing long.";
+ throw new JournalException(msg, e);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
public void writeString(String s) throws JournalException {
checkOutput();
@@ -386,6 +400,10 @@
throw unsupported();
}
+ public long readLong() throws JournalException {
+ throw unsupported();
+ }
+
public String readString() throws JournalException {
throw unsupported();
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/ReadRecord.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/ReadRecord.java?rev=713076&r1=713075&r2=713076&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/ReadRecord.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/ReadRecord.java Tue Nov 11 08:30:37 2008
@@ -154,6 +154,20 @@
/**
* {@inheritDoc}
*/
+ public long readLong() throws JournalException {
+ consumed = true;
+
+ try {
+ return dataIn.readLong();
+ } catch (IOException e) {
+ String msg = "I/O error while reading long.";
+ throw new JournalException(msg, e);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
public String readString() throws JournalException {
consumed = true;
@@ -241,6 +255,10 @@
throw unsupported();
}
+ public void writeLong(long n) throws JournalException {
+ throw unsupported();
+ }
+
public void writeString(String s) throws JournalException {
throw unsupported();
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/Record.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/Record.java?rev=713076&r1=713075&r2=713076&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/Record.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/Record.java Tue Nov 11 08:30:37 2008
@@ -81,6 +81,14 @@
int readInt() throws JournalException;
/**
+ * Read a long from the underlying stream.
+ *
+ * @return long value.
+ * @throws JournalException if an error occurs
+ */
+ long readLong() throws JournalException;
+
+ /**
* Read a string from the underlying stream.
*
* @return string or <code>null</code>
@@ -177,6 +185,14 @@
void writeInt(int n) throws JournalException;
/**
+ * Write a long to the underlying stream.
+ *
+ * @param n long
+ * @throws JournalException if an error occurs
+ */
+ void writeLong(long n) throws JournalException;
+
+ /**
* Write a string to the underlying stream.
*
* @param s string, may be <code>null</code>
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventImpl.java?rev=713076&r1=713075&r2=713076&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventImpl.java Tue Nov 11 08:30:37 2008
@@ -26,7 +26,6 @@
import org.slf4j.LoggerFactory;
import javax.jcr.RepositoryException;
-import javax.jcr.observation.Event;
/**
* Implementation of the {@link javax.jcr.observation.Event} and
@@ -46,14 +45,14 @@
private final SessionImpl session;
/**
- * The <code>ItemManager</code> of the session.
+ * The shared {@link EventState} object.
*/
- //private final ItemManager itemMgr;
+ private final EventState eventState;
/**
- * The shared {@link EventState} object.
+ * The timestamp of this event.
*/
- private final EventState eventState;
+ private final long timestamp;
/**
* Cached String value of this <code>Event</code> instance.
@@ -67,10 +66,12 @@
* @param session the session of the registerd <code>EventListener</code>
* where this <code>Event</code> will be delivered to.
* @param eventState the underlying <code>EventState</code>.
+ * @param timestamp the time when the change occured that caused this event.
*/
- EventImpl(SessionImpl session, EventState eventState) {
+ EventImpl(SessionImpl session, EventState eventState, long timestamp) {
this.session = session;
this.eventState = eventState;
+ this.timestamp = timestamp;
}
//---------------------------------------------------------------< Event >
@@ -96,6 +97,13 @@
return eventState.getUserId();
}
+ /**
+ * {@inheritDoc}
+ */
+ public long getDate() {
+ return timestamp;
+ }
+
//-----------------------------------------------------------< EventImpl >
/**
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventStateCollection.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventStateCollection.java?rev=713076&r1=713075&r2=713076&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventStateCollection.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventStateCollection.java Tue Nov 11 08:30:37 2008
@@ -88,6 +88,11 @@
private final Path pathPrefix;
/**
+ * Timestamp when this collection was created.
+ */
+ private long timestamp = System.currentTimeMillis();
+
+ /**
* Creates a new empty <code>EventStateCollection</code>.
* <p/>
* Because the item state manager in {@link #createEventStates} may represent
@@ -434,6 +439,22 @@
}
/**
+ * @return the timestamp when this collection was created.
+ */
+ public long getTimestamp() {
+ return timestamp;
+ }
+
+ /**
+ * Sets a new timestamp for this collection.
+ *
+ * @param timestamp the new timestamp value.
+ */
+ public void setTimestamp(long timestamp) {
+ this.timestamp = timestamp;
+ }
+
+ /**
* Returns an iterator over {@link EventState} instance.
*
* @return an iterator over {@link EventState} instance.
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/FilteredEventIterator.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/FilteredEventIterator.java?rev=713076&r1=713075&r2=713076&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/FilteredEventIterator.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/FilteredEventIterator.java Tue Nov 11 08:30:37 2008
@@ -63,6 +63,11 @@
private long pos = 0;
/**
+ * The timestamp when the events occured.
+ */
+ private long timestamp;
+
+ /**
* Creates a new <code>FilteredEventIterator</code>.
*
* @param c an unmodifiable Collection of {@link javax.jcr.observation.Event}s.
@@ -78,6 +83,7 @@
actualEvents = c.iterator();
this.filter = filter;
this.denied = denied;
+ this.timestamp = c.getTimestamp();
fetchNext();
}
@@ -158,7 +164,8 @@
// check denied set
if (denied == null || !denied.contains(state.getTargetId())) {
try {
- next = filter.blocks(state) ? null : new EventImpl(filter.getSession(), state);
+ next = filter.blocks(state) ? null : new EventImpl(
+ filter.getSession(), state, timestamp);
} catch (RepositoryException e) {
log.error("Exception while applying filter.", e);
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java?rev=713076&r1=713075&r2=713076&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java Tue Nov 11 08:30:37 2008
@@ -515,6 +515,11 @@
private HashMap attributes;
/**
+ * Timestamp when this update was created.
+ */
+ private long timestamp = System.currentTimeMillis();
+
+ /**
* Create a new instance of this class.
*/
public Update(ChangeLog local, EventStateCollectionFactory factory,
@@ -835,6 +840,13 @@
}
/**
+ * {@inheritDoc}
+ */
+ public long getTimestamp() {
+ return timestamp;
+ }
+
+ /**
* Updates the target node references collections based on the
* modifications in the change log (i.e. added/removed/modified
* <code>REFERENCE</code> properties).
@@ -843,9 +855,6 @@
* only be called <i>once</i> per change log and the change log
* should not be modified anymore afterwards.
*
- * @param changes change log
- * @param virtualProvider virtual provider that may already contain a
- * node references object
* @throws ItemStateException if an error occurs
*/
private void updateReferences() throws ItemStateException {
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionManagerImpl.java?rev=713076&r1=713075&r2=713076&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionManagerImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionManagerImpl.java Tue Nov 11 08:30:37 2008
@@ -494,9 +494,11 @@
/**
* {@inheritDoc}
*/
- public void externalUpdate(ChangeLog changes, List events) throws RepositoryException {
+ public void externalUpdate(ChangeLog changes, List events, long timestamp)
+ throws RepositoryException {
EventStateCollection esc = getEscFactory().createEventStateCollection(null);
esc.addAll(events);
+ esc.setTimestamp(timestamp);
sharedStateMgr.externalUpdate(changes, esc);
}
Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/SimpleEventListener.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/SimpleEventListener.java?rev=713076&r1=713075&r2=713076&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/SimpleEventListener.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/SimpleEventListener.java Tue Nov 11 08:30:37 2008
@@ -28,7 +28,6 @@
import javax.jcr.nodetype.NoSuchNodeTypeException;
import org.apache.jackrabbit.core.NodeId;
-import org.apache.jackrabbit.core.cluster.LockEventListener;
import org.apache.jackrabbit.core.nodetype.InvalidNodeTypeDefException;
import org.apache.jackrabbit.core.nodetype.NodeTypeDef;
import org.apache.jackrabbit.core.state.ChangeLog;
@@ -413,10 +412,10 @@
/**
* {@inheritDoc}
*/
- public void externalUpdate(ChangeLog changes, List events)
+ public void externalUpdate(ChangeLog changes, List events, long timestamp)
throws RepositoryException {
- clusterEvents.add(new UpdateEvent(changes, events));
+ clusterEvents.add(new UpdateEvent(changes, events, timestamp));
}
@@ -441,14 +440,21 @@
private final transient Map attributes = new HashMap();
/**
+ * Timestamp when the changes in this update event occured.
+ */
+ private final long timestamp;
+
+ /**
* Create a new instance of this class.
*
* @param changes change log
* @param events list of <code>EventState</code>s
+ * @param timestamp time when the changes in this event occured.
*/
- public UpdateEvent(ChangeLog changes, List events) {
+ public UpdateEvent(ChangeLog changes, List events, long timestamp) {
this.changes = changes;
this.events = events;
+ this.timestamp = timestamp;
}
/**
@@ -472,6 +478,13 @@
/**
* {@inheritDoc}
*/
+ public long getTimestamp() {
+ return timestamp;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
public void setAttribute(String name, Object value) {
attributes.put(name, value);
}
@@ -487,7 +500,7 @@
* {@inheritDoc}
*/
public int hashCode() {
- return changes.hashCode() ^ events.hashCode();
+ return changes.hashCode() ^ events.hashCode() ^ (int) (timestamp ^ (timestamp >>> 32));
}
/**
@@ -497,7 +510,8 @@
if (obj instanceof UpdateEvent) {
UpdateEvent other = (UpdateEvent) obj;
return SimpleEventListener.equals(changes, other.changes) &&
- SimpleEventListener.equals(events, other.events);
+ SimpleEventListener.equals(events, other.events) &&
+ timestamp == other.timestamp;
}
return false;
}
Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/UpdateEventFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/UpdateEventFactory.java?rev=713076&r1=713075&r2=713076&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/UpdateEventFactory.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/UpdateEventFactory.java Tue Nov 11 08:30:37 2008
@@ -116,7 +116,7 @@
events.add(createEventState(p2, n2, Event.PROPERTY_REMOVED));
events.add(createEventState(n3, Event.NODE_REMOVED, "{}n3"));
- return new UpdateEvent(changes, events);
+ return new UpdateEvent(changes, events, System.currentTimeMillis());
}
@@ -139,6 +139,7 @@
*
* @param parentId parent node id
* @param name property name
+ * @return property state.
*/
protected PropertyState createPropertyState(NodeId parentId, String name) {
Name propName = nameFactory.create(name);
@@ -176,9 +177,9 @@
/**
* Create an event state for a property operation.
*
- * @param n node state
+ * @param p property state
+ * @param parent parent node state
* @param type <code>Event.NODE_ADDED</code> or <code>Event.NODE_REMOVED</code>
- * @param name property name
* @return event state
*/
protected EventState createEventState(PropertyState p, NodeState parent, int type) {