view src/org/dancres/blitz/notify/QueueEvent.java @ 0:3dc0c5604566

Initial checkin of blitz 2.0 fcs - no installer yet.
author Dan Creswell <dan.creswell@gmail.com>
date Sat, 21 Mar 2009 11:00:06 +0000
parents
children
line wrap: on
line source

package org.dancres.blitz.notify;

import org.dancres.blitz.txn.TxnState;
import org.dancres.blitz.mangler.MangledEntry;
import org.dancres.blitz.oid.OID;

/**
   <p>The event types break down into two classes - those that represent
   an invisible/visible transition and those that represent an
   unavailable/available transition.  Here's a summary in table form:</p>

<table summary="Visibility and Availability Transitions" border="0" cellspacing="2" cellpadding="1">
<tr align="center" valign="middle"><th></th><th>Invisible/Visible</th><th>Unavailable/Available</th>
</tr>
<tr align="center" valign="middle"><th>ENTRY_WRITE</th>
	<td>X</td>
	<td>X</td>
</tr>
<tr align="center" valign="middle"><th>ENTRY_WRITTEN</th>
	<td>X</td>
	<td>X</td>
</tr>
<tr align="center" valign="middle"><th>ENTRY_VISIBLE</th>
	<td>X</td>
	<td>X</td>
</tr>
<tr align="center" valign="middle"><th>ENTRY_NOT_CONFLICTED</th>
	<td>O</td>
	<td>X</td>
</tr>
</table>

   @see org.dancres.blitz.notify.EventQueue
 */
public class QueueEvent {
    /**
       Context object is null
     */
    public static final int TRANSACTION_ENDED = 1;

    /**
       Context object is a MangledEntry plus OID -
       this event is triggered when a transaction initially writes a new Entry
     */
    public static final int ENTRY_WRITE = 2;

    /**
       Context object is a MangledEntry plus OID -
       this event is triggered when a transaction commits a write.
     */
    public static final int ENTRY_WRITTEN = 3;

    /**
       Context object is a MangledEntry plus OID - this event is triggered in
       the case where a take has been aborted and thus an Entry has been deemed
       visible again.
     */
    public static final int ENTRY_VISIBLE = 4;

    /**
       Context object is a MangledEntry plus OID - this event is triggered in
       the case where an Entry was previously conflicted with a collection of
       read locks and has since been made available for a take again.
       Note, if the Entry was write locked, we don't generate this event
       as it'll result from the ENTRY_WRITTEN event.  Note also we don't
       generate this event if the Entry is marked as taken/deleted (obviously)
     */
    public static final int ENTRY_NOT_CONFLICTED = 5;

    private int theType;
    private TxnState theTxn;
    private Context theContext;

    public QueueEvent(int aType, TxnState aTxn, Context aContext) {
        theType = aType;
        theTxn = aTxn;
        theContext = aContext;
    }

    public int getType() {
        return theType;
    }

    public TxnState getTxn() {
        return theTxn;
    }

    public Context getContext() {
        return theContext;
    }

    public static class Context {
        private MangledEntry _entry;
        private OID _oid;

        public Context(MangledEntry anEntry, OID anOID) {
            _oid = anOID;
            _entry = anEntry;
        }

        public MangledEntry getEntry() {
            return _entry;
        }

        public OID getOID() {
            return _oid;
        }
    }
}