spun off test bundle for operationaltransformation tests

This commit is contained in:
Axel Uhl
2012-03-26 20:55:36 +02:00
parent 3d38cc0cff
commit f956c869c5
36 changed files with 290 additions and 1190 deletions
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="output" path="bin"/>
</classpath>
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>com.sap.sailing.operationaltransformation.test</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.ManifestBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.SchemaBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>
@@ -0,0 +1,8 @@
#Mon Mar 26 20:48:47 CEST 2012
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
org.eclipse.jdt.core.compiler.compliance=1.7
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.7
@@ -0,0 +1,4 @@
#Mon Mar 26 20:48:47 CEST 2012
eclipse.preferences.version=1
pluginProject.extensions=false
resolve.requirebundle=false
@@ -0,0 +1,9 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Test
Bundle-SymbolicName: com.sap.sailing.operationaltransformation.test
Bundle-Version: 1.0.0.qualifier
Bundle-Vendor: SAP
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Import-Package: org.junit;version="4.8.2"
Require-Bundle: com.sap.sailing.operationaltransformation;bundle-version="1.0.0"
@@ -0,0 +1,4 @@
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.
@@ -1,19 +1,23 @@
package com.sap.runlet.operationaltransformation.test;
package com.sap.sailing.operationaltransformation.test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.Random;
import java.util.UUID;
import junit.framework.TestCase;
import org.junit.Before;
import org.junit.Test;
import com.sap.runlet.operationaltransformation.AbstractOperation;
import com.sap.runlet.operationaltransformation.ClientServerOperationPair;
import com.sap.runlet.operationaltransformation.Peer;
import com.sap.runlet.operationaltransformation.PeerImpl;
import com.sap.runlet.operationaltransformation.Transformer;
import com.sap.runlet.operationaltransformation.Peer.Role;
import com.sap.runlet.operationaltransformation.test.util.Base64;
import com.sap.sailing.operationaltransformation.AbstractOperation;
import com.sap.sailing.operationaltransformation.ClientServerOperationPair;
import com.sap.sailing.operationaltransformation.Peer;
import com.sap.sailing.operationaltransformation.Peer.Role;
import com.sap.sailing.operationaltransformation.PeerImpl;
import com.sap.sailing.operationaltransformation.Transformer;
import com.sap.sailing.operationaltransformation.test.util.Base64;
public class OperationalTransformationTests extends TestCase {
public class OperationalTransformationTests {
private Peer<StringInsertOperation, StringState> server;
private Peer<StringInsertOperation, StringState> client1, client2;
@@ -109,6 +113,7 @@ public class OperationalTransformationTests extends TestCase {
}
}
@Before
public void setUp() {
server = new PeerImpl<StringInsertOperation, StringState>(
"Server", new StringInsertTransformer(), new StringState(""), Role.SERVER);
@@ -116,6 +121,7 @@ public class OperationalTransformationTests extends TestCase {
client2 = new PeerImpl<StringInsertOperation, StringState>("Client2", new StringInsertTransformer(), server);
}
@Test
public void testBasicTransformation() {
client1.apply(new StringInsertOperation(0, "abc"));
client2.apply(new StringInsertOperation(0, "def"));
@@ -128,6 +134,7 @@ public class OperationalTransformationTests extends TestCase {
assertTrue(server.getCurrentState().getState().equals("abcdef") || server.getCurrentState().getState().equals("defabc"));
}
@Test
public void testTwoMassInserts() {
final int COUNT = 100;
for (int i = 0; i < COUNT; i++) {
@@ -146,6 +153,7 @@ public class OperationalTransformationTests extends TestCase {
* Randomizes the number of changes applied to each client per iteration,
* the insert position and the string to be inserted.
*/
@Test
public void testRandomInserts() {
final int COUNT = 100;
Random r = new Random();
@@ -176,6 +184,7 @@ public class OperationalTransformationTests extends TestCase {
assertEquals(totalLength, server.getCurrentState().getState().length());
}
@Test
public void testTwoMassInsertsWithServerReplica() {
Peer<StringInsertOperation, StringState> server2 = new PeerImpl<StringInsertOperation, StringState>("Server2",
new StringInsertTransformer(), server);
@@ -0,0 +1,210 @@
package com.sap.sailing.operationaltransformation.test.util;
/**
* Implements a BASE64 encoder and decoder. Class <code>Base64</code> provides
* static encoding- and decoding-methods for describing binary data through
* printable characters. The implementation is compliant to RFC 1521.
*
* @copyright @version $Revision: #1 $.
* @author Stefan Kusterer, Last modified by $Author: d038253 $, Change list
* $Change: 156641 $.
*/
public class Base64 {
protected static final char[] CHAR_LOOKUP_ARRAY = {
/* 0 */'A', /* 1 */'B', /* 2 */'C', /* 3 */'D',
/* 4 */'E', /* 5 */'F', /* 6 */'G', /* 7 */'H',
/* 8 */'I', /* 9 */'J', /* 10 */'K', /* 11 */'L',
/* 12 */'M', /* 13 */'N', /* 14 */'O', /* 15 */'P',
/* 16 */'Q', /* 17 */'R', /* 18 */'S', /* 19 */'T',
/* 20 */'U', /* 21 */'V', /* 22 */'W', /* 23 */'X',
/* 24 */'Y', /* 25 */'Z',
/* 26 */'a', /* 27 */'b', /* 28 */'c', /* 29 */'d',
/* 30 */'e', /* 31 */'f', /* 32 */'g', /* 33 */'h',
/* 34 */'i', /* 35 */'j', /* 36 */'k', /* 37 */'l',
/* 38 */'m', /* 39 */'n', /* 40 */'o', /* 41 */'p',
/* 42 */'q', /* 43 */'r', /* 44 */'s', /* 45 */'t',
/* 46 */'u', /* 47 */'v', /* 48 */'w', /* 49 */'x',
/* 50 */'y', /* 51 */'z',
/* 52 */'0', /* 53 */'1', /* 54 */'2', /* 55 */'3',
/* 56 */'4', /* 57 */'5', /* 58 */'6', /* 59 */'7',
/* 60 */'8', /* 61 */'9',
/* 62 */'+', /* 63 */'/',
/* pad */'=' };
protected static final int[] VALUE_LOOKUP_ARRAY = new int[128];
static // Initializer
{
for ( char i = 0; i < VALUE_LOOKUP_ARRAY.length; i++ ) {
if ( CHAR_LOOKUP_ARRAY[0] <= i && i <= CHAR_LOOKUP_ARRAY[25] ) {
VALUE_LOOKUP_ARRAY[i] = ( i - CHAR_LOOKUP_ARRAY[0] );
} else if ( CHAR_LOOKUP_ARRAY[26] <= i && i <= CHAR_LOOKUP_ARRAY[51] ) {
VALUE_LOOKUP_ARRAY[i] = ( i - CHAR_LOOKUP_ARRAY[26] ) + 26;
} else if ( CHAR_LOOKUP_ARRAY[52] <= i && i <= CHAR_LOOKUP_ARRAY[61] ) {
VALUE_LOOKUP_ARRAY[i] = ( i - CHAR_LOOKUP_ARRAY[52] ) + 52;
} else if ( i == CHAR_LOOKUP_ARRAY[62] ) {
VALUE_LOOKUP_ARRAY[i] = 62;
} else if ( i == CHAR_LOOKUP_ARRAY[63] ) {
VALUE_LOOKUP_ARRAY[i] = 63;
} else if ( i == CHAR_LOOKUP_ARRAY[64] ) {
VALUE_LOOKUP_ARRAY[i] = -1;
} else {
VALUE_LOOKUP_ARRAY[i] = -2;
}
}
}
// do not allow to instantiate this class
protected Base64( ) {
// only static methods
}
public final static byte[] decode(String in) {
char[] c = new char[in.length()];
in.getChars(0, in.length(), c, 0);
return decode(c);
}
/**
* <code>decode</code> a given array of characters.
*
* @param in The input array of characters
* @return The array of bytes
*/
public final static byte[] decode( char[] in ) {
if ( in == null || in.length == 0 ) {
return new byte[0];
}
int index_in;
int index_out;
int helper_1 = 0;
int helper_2 = 0;
int mod = 0;
int in_length = in.length;
int chr;
// Determine number of used characters: Ignore linebreaks etc. and count
// trailing =-signes
for ( index_in = 0; index_in < in.length; index_in++ ) {
chr = in[index_in];
if ( chr >= 128 ) {
in_length--;
} else if (VALUE_LOOKUP_ARRAY[chr] < 0) {
in_length--;
}
}
// Allocate out-buffer
byte out[] = new byte[( in_length >>> 2 ) * 3 + ( ( in_length & 0x03 ) > 0 ? ( in_length & 0x03 ) - 1 : 0 )];
// Do the real decoding
for ( index_in = 0, index_out = 0; index_in < in.length && index_out < out.length; index_in++ ) {
chr = in[index_in];
if ( chr > 127 || VALUE_LOOKUP_ARRAY[chr] == -2 ) {
continue;
}
helper_1 = helper_2;
helper_2 = VALUE_LOOKUP_ARRAY[chr] > 0 ? VALUE_LOOKUP_ARRAY[chr] : 0;
switch ( mod ) {
case 0:
// no operation
break;
case 1:
out[index_out++] = (byte) ( ( helper_1 << 2 ) & 0xFC | ( helper_2 >>> 4 ) & 0x03 );
break;
case 2:
out[index_out++] = (byte) ( ( helper_1 << 4 ) & 0xF0 | ( helper_2 >>> 2 ) & 0x0F );
break;
case 3:
out[index_out++] = (byte) ( ( helper_1 << 6 ) & 0xC0 | helper_2 & 0x3F );
break;
}
mod = ( mod < 3 ? mod + 1 : 0 );
}
return out;
}
/**
* Add a charcter to an array of chars and insert linebreas if necessary
*/
private final static int writeToCharArray( char[] out, int idx, char chr ) {
out[idx++] = chr;
return idx;
}
/**
* <code>encode</code> a given array.
*
* @param in the input array of binary data
* @return The array of characters
*/
public final static String encode( byte[] in ) {
if ( in == null ) {
return null;
}
int index_in;
int index_out;
char chr;
// Allocate buffer for result: Consider chars for trailing =-signs
// and linebreaks.
char out[] = new char[( ( ( in.length + 2 ) / 3 ) << 2 )];
for ( index_in = 0, index_out = 0; index_in < in.length - 2; index_in += 3 ) {
// compute first byte: highest six bits of first byte
chr = CHAR_LOOKUP_ARRAY[( in[index_in] >>> 2 ) & 0x3F];
index_out = writeToCharArray( out, index_out, chr );
// compute second byte: lowest two bits of first byte
chr = CHAR_LOOKUP_ARRAY[( in[index_in] << 4 ) & 0x30 |
// and highest four bits of second byte
( in[index_in + 1] >>> 4 ) & 0x0F];
index_out = writeToCharArray( out, index_out, chr );
// compute third byte: lowest four bits of second byte
chr = CHAR_LOOKUP_ARRAY[( in[index_in + 1] << 2 ) & 0x3C |
// and higest two bits of third byte
( in[index_in + 2] >>> 6 ) & 0x03];
index_out = writeToCharArray( out, index_out, chr );
// compute fourth byte: lowest six bits of third byte
chr = CHAR_LOOKUP_ARRAY[in[index_in + 2] & 0x3F];
index_out = writeToCharArray( out, index_out, chr );
}
// take care of the last bytes (one or two)
if ( index_in < in.length ) {
chr = CHAR_LOOKUP_ARRAY[( in[index_in] >>> 2 ) & 0x3F];
index_out = writeToCharArray( out, index_out, chr );
if ( index_in < in.length - 1 ) {
// there are two remaining bytes
chr = CHAR_LOOKUP_ARRAY[( in[index_in] << 4 ) & 0x30 | ( in[index_in + 1] >>> 4 ) & 0x0F];
index_out = writeToCharArray( out, index_out, chr );
chr = CHAR_LOOKUP_ARRAY[( in[index_in + 1] << 2 ) & 0x3F];
index_out = writeToCharArray( out, index_out, chr );
} else {
// there is only one remaining byte
chr = CHAR_LOOKUP_ARRAY[( in[index_in] << 4 ) & 0x30];
index_out = writeToCharArray( out, index_out, chr );
}
}
// add padding =-signs if required
while ( index_out < out.length ) {
index_out = writeToCharArray( out, index_out, CHAR_LOOKUP_ARRAY[64] );
}
return new String(out);
}
}
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="output" path="bin"/>
</classpath>
@@ -1,7 +0,0 @@
#Thu Jul 30 11:41:49 CEST 2009
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
org.eclipse.jdt.core.compiler.compliance=1.6
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.6
@@ -1,45 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_14) on Thu Jul 30 14:17:57 CEST 2009 -->
<TITLE>
All Classes
</TITLE>
<META NAME="date" CONTENT="2009-07-30">
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<BODY BGCOLOR="white">
<FONT size="+1" CLASS="FrameHeadingFont">
<B>All Classes</B></FONT>
<BR>
<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="com/sap/runlet/operationaltransformation/AbstractOperation.html" title="class in com.sap.runlet.operationaltransformation" target="classFrame">AbstractOperation</A>
<BR>
<A HREF="com/sap/runlet/operationaltransformation/ClientServerOperationPair.html" title="class in com.sap.runlet.operationaltransformation" target="classFrame">ClientServerOperationPair</A>
<BR>
<A HREF="com/sap/runlet/operationaltransformation/Operation.html" title="interface in com.sap.runlet.operationaltransformation" target="classFrame"><I>Operation</I></A>
<BR>
<A HREF="com/sap/runlet/operationaltransformation/Peer.html" title="interface in com.sap.runlet.operationaltransformation" target="classFrame"><I>Peer</I></A>
<BR>
<A HREF="com/sap/runlet/operationaltransformation/PeerImpl.html" title="class in com.sap.runlet.operationaltransformation" target="classFrame">PeerImpl</A>
<BR>
<A HREF="com/sap/runlet/operationaltransformation/StatesAndOperations.html" title="class in com.sap.runlet.operationaltransformation" target="classFrame">StatesAndOperations</A>
<BR>
<A HREF="com/sap/runlet/operationaltransformation/Transformer.html" title="interface in com.sap.runlet.operationaltransformation" target="classFrame"><I>Transformer</I></A>
<BR>
<A HREF="com/sap/runlet/operationaltransformation/UnmergedOperationsQueue.html" title="class in com.sap.runlet.operationaltransformation" target="classFrame">UnmergedOperationsQueue</A>
<BR>
</FONT></TD>
</TR>
</TABLE>
</BODY>
</HTML>
@@ -1,45 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_14) on Thu Jul 30 14:17:57 CEST 2009 -->
<TITLE>
All Classes
</TITLE>
<META NAME="date" CONTENT="2009-07-30">
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<BODY BGCOLOR="white">
<FONT size="+1" CLASS="FrameHeadingFont">
<B>All Classes</B></FONT>
<BR>
<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="com/sap/runlet/operationaltransformation/AbstractOperation.html" title="class in com.sap.runlet.operationaltransformation">AbstractOperation</A>
<BR>
<A HREF="com/sap/runlet/operationaltransformation/ClientServerOperationPair.html" title="class in com.sap.runlet.operationaltransformation">ClientServerOperationPair</A>
<BR>
<A HREF="com/sap/runlet/operationaltransformation/Operation.html" title="interface in com.sap.runlet.operationaltransformation"><I>Operation</I></A>
<BR>
<A HREF="com/sap/runlet/operationaltransformation/Peer.html" title="interface in com.sap.runlet.operationaltransformation"><I>Peer</I></A>
<BR>
<A HREF="com/sap/runlet/operationaltransformation/PeerImpl.html" title="class in com.sap.runlet.operationaltransformation">PeerImpl</A>
<BR>
<A HREF="com/sap/runlet/operationaltransformation/StatesAndOperations.html" title="class in com.sap.runlet.operationaltransformation">StatesAndOperations</A>
<BR>
<A HREF="com/sap/runlet/operationaltransformation/Transformer.html" title="interface in com.sap.runlet.operationaltransformation"><I>Transformer</I></A>
<BR>
<A HREF="com/sap/runlet/operationaltransformation/UnmergedOperationsQueue.html" title="class in com.sap.runlet.operationaltransformation">UnmergedOperationsQueue</A>
<BR>
</FONT></TD>
</TR>
</TABLE>
</BODY>
</HTML>
@@ -1,142 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_14) on Thu Jul 30 14:17:57 CEST 2009 -->
<TITLE>
Constant Field Values
</TITLE>
<META NAME="date" CONTENT="2009-07-30">
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
<SCRIPT type="text/javascript">
function windowTitle()
{
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="Constant Field Values";
}
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>
</HEAD>
<BODY BGCOLOR="white" onload="windowTitle();">
<HR>
<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="com/sap/runlet/operationaltransformation/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="com/sap/runlet/operationaltransformation/package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="index.html?constant-values.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="constant-values.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
if(window==top) {
document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
}
//-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->
<HR>
<CENTER>
<H1>
Constant Field Values</H1>
</CENTER>
<HR SIZE="4" NOSHADE>
<B>Contents</B><UL>
</UL>
<HR>
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="com/sap/runlet/operationaltransformation/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="com/sap/runlet/operationaltransformation/package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="index.html?constant-values.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="constant-values.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
if(window==top) {
document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
}
//-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
</BODY>
</HTML>
@@ -1,142 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_14) on Thu Jul 30 14:17:57 CEST 2009 -->
<TITLE>
Deprecated List
</TITLE>
<META NAME="date" CONTENT="2009-07-30">
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
<SCRIPT type="text/javascript">
function windowTitle()
{
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="Deprecated List";
}
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>
</HEAD>
<BODY BGCOLOR="white" onload="windowTitle();">
<HR>
<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="com/sap/runlet/operationaltransformation/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="com/sap/runlet/operationaltransformation/package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Deprecated</B></FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="index.html?deprecated-list.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="deprecated-list.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
if(window==top) {
document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
}
//-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->
<HR>
<CENTER>
<H2>
<B>Deprecated API</B></H2>
</CENTER>
<HR SIZE="4" NOSHADE>
<B>Contents</B><UL>
</UL>
<HR>
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="com/sap/runlet/operationaltransformation/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="com/sap/runlet/operationaltransformation/package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Deprecated</B></FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="index.html?deprecated-list.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="deprecated-list.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
if(window==top) {
document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
}
//-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
</BODY>
</HTML>
@@ -1,209 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_14) on Thu Jul 30 14:17:57 CEST 2009 -->
<TITLE>
API Help
</TITLE>
<META NAME="date" CONTENT="2009-07-30">
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
<SCRIPT type="text/javascript">
function windowTitle()
{
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="API Help";
}
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>
</HEAD>
<BODY BGCOLOR="white" onload="windowTitle();">
<HR>
<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="com/sap/runlet/operationaltransformation/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="com/sap/runlet/operationaltransformation/package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Help</B></FONT>&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="index.html?help-doc.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="help-doc.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
if(window==top) {
document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
}
//-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->
<HR>
<CENTER>
<H1>
How This API Document Is Organized</H1>
</CENTER>
This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.<H3>
Package</H3>
<BLOCKQUOTE>
<P>
Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain four categories:<UL>
<LI>Interfaces (italic)<LI>Classes<LI>Enums<LI>Exceptions<LI>Errors<LI>Annotation Types</UL>
</BLOCKQUOTE>
<H3>
Class/Interface</H3>
<BLOCKQUOTE>
<P>
Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:<UL>
<LI>Class inheritance diagram<LI>Direct Subclasses<LI>All Known Subinterfaces<LI>All Known Implementing Classes<LI>Class/interface declaration<LI>Class/interface description
<P>
<LI>Nested Class Summary<LI>Field Summary<LI>Constructor Summary<LI>Method Summary
<P>
<LI>Field Detail<LI>Constructor Detail<LI>Method Detail</UL>
Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.</BLOCKQUOTE>
</BLOCKQUOTE>
<H3>
Annotation Type</H3>
<BLOCKQUOTE>
<P>
Each annotation type has its own separate page with the following sections:<UL>
<LI>Annotation Type declaration<LI>Annotation Type description<LI>Required Element Summary<LI>Optional Element Summary<LI>Element Detail</UL>
</BLOCKQUOTE>
</BLOCKQUOTE>
<H3>
Enum</H3>
<BLOCKQUOTE>
<P>
Each enum has its own separate page with the following sections:<UL>
<LI>Enum declaration<LI>Enum description<LI>Enum Constant Summary<LI>Enum Constant Detail</UL>
</BLOCKQUOTE>
<H3>
Tree (Class Hierarchy)</H3>
<BLOCKQUOTE>
There is a <A HREF="overview-tree.html">Class Hierarchy</A> page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with <code>java.lang.Object</code>. The interfaces do not inherit from <code>java.lang.Object</code>.<UL>
<LI>When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.<LI>When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.</UL>
</BLOCKQUOTE>
<H3>
Deprecated API</H3>
<BLOCKQUOTE>
The <A HREF="deprecated-list.html">Deprecated API</A> page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.</BLOCKQUOTE>
<H3>
Index</H3>
<BLOCKQUOTE>
The <A HREF="index-all.html">Index</A> contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.</BLOCKQUOTE>
<H3>
Prev/Next</H3>
These links take you to the next or previous class, interface, package, or related page.<H3>
Frames/No Frames</H3>
These links show and hide the HTML frames. All pages are available with or without frames.
<P>
<H3>
Serialized Form</H3>
Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.
<P>
<H3>
Constant Field Values</H3>
The <a href="constant-values.html">Constant Field Values</a> page lists the static final fields and their values.
<P>
<FONT SIZE="-1">
<EM>
This help file applies to API documentation generated using the standard doclet.</EM>
</FONT>
<BR>
<HR>
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="com/sap/runlet/operationaltransformation/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="com/sap/runlet/operationaltransformation/package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Help</B></FONT>&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="index.html?help-doc.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="help-doc.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
if(window==top) {
document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
}
//-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
</BODY>
</HTML>
@@ -1,308 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_14) on Thu Jul 30 14:17:57 CEST 2009 -->
<TITLE>
Index
</TITLE>
<META NAME="date" CONTENT="2009-07-30">
<LINK REL ="stylesheet" TYPE="text/css" HREF="./stylesheet.css" TITLE="Style">
<SCRIPT type="text/javascript">
function windowTitle()
{
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="Index";
}
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>
</HEAD>
<BODY BGCOLOR="white" onload="windowTitle();">
<HR>
<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="./com/sap/runlet/operationaltransformation/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="./com/sap/runlet/operationaltransformation/package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="./deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="./help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="./index.html?index-all.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="index-all.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
if(window==top) {
document.writeln('<A HREF="./allclasses-noframe.html"><B>All Classes</B></A>');
}
//-->
</SCRIPT>
<NOSCRIPT>
<A HREF="./allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->
<A HREF="#_A_">A</A> <A HREF="#_C_">C</A> <A HREF="#_F_">F</A> <A HREF="#_G_">G</A> <A HREF="#_O_">O</A> <A HREF="#_P_">P</A> <A HREF="#_S_">S</A> <A HREF="#_T_">T</A> <A HREF="#_U_">U</A> <A HREF="#_W_">W</A> <HR>
<A NAME="_A_"><!-- --></A><H2>
<B>A</B></H2>
<DL>
<DT><A HREF="./com/sap/runlet/operationaltransformation/AbstractOperation.html" title="class in com.sap.runlet.operationaltransformation"><B>AbstractOperation</B></A>&lt;<A HREF="./com/sap/runlet/operationaltransformation/AbstractOperation.html" title="type parameter in AbstractOperation">S</A>&gt; - Class in <A HREF="./com/sap/runlet/operationaltransformation/package-summary.html">com.sap.runlet.operationaltransformation</A><DD>&nbsp;<DT><A HREF="./com/sap/runlet/operationaltransformation/AbstractOperation.html#AbstractOperation()"><B>AbstractOperation()</B></A> -
Constructor for class com.sap.runlet.operationaltransformation.<A HREF="./com/sap/runlet/operationaltransformation/AbstractOperation.html" title="class in com.sap.runlet.operationaltransformation">AbstractOperation</A>
<DD>&nbsp;
<DT><A HREF="./com/sap/runlet/operationaltransformation/Peer.html#addPeer(com.sap.runlet.operationaltransformation.Peer)"><B>addPeer(Peer&lt;O, S&gt;)</B></A> -
Method in interface com.sap.runlet.operationaltransformation.<A HREF="./com/sap/runlet/operationaltransformation/Peer.html" title="interface in com.sap.runlet.operationaltransformation">Peer</A>
<DD>Registers a peer with this peer for replication.
<DT><A HREF="./com/sap/runlet/operationaltransformation/PeerImpl.html#addPeer(com.sap.runlet.operationaltransformation.Peer)"><B>addPeer(Peer&lt;O, S&gt;)</B></A> -
Method in class com.sap.runlet.operationaltransformation.<A HREF="./com/sap/runlet/operationaltransformation/PeerImpl.html" title="class in com.sap.runlet.operationaltransformation">PeerImpl</A>
<DD>&nbsp;
<DT><A HREF="./com/sap/runlet/operationaltransformation/Peer.html#apply(com.sap.runlet.operationaltransformation.Peer, O, int)"><B>apply(Peer&lt;O, S&gt;, O, int)</B></A> -
Method in interface com.sap.runlet.operationaltransformation.<A HREF="./com/sap/runlet/operationaltransformation/Peer.html" title="interface in com.sap.runlet.operationaltransformation">Peer</A>
<DD>Usually, the framework handles calls to this method and framework users
should therefore not need to call this method.
<DT><A HREF="./com/sap/runlet/operationaltransformation/Peer.html#apply(O)"><B>apply(O)</B></A> -
Method in interface com.sap.runlet.operationaltransformation.<A HREF="./com/sap/runlet/operationaltransformation/Peer.html" title="interface in com.sap.runlet.operationaltransformation">Peer</A>
<DD>Applies a change operation locally to the current peer's state.
<DT><A HREF="./com/sap/runlet/operationaltransformation/PeerImpl.html#apply(O)"><B>apply(O)</B></A> -
Method in class com.sap.runlet.operationaltransformation.<A HREF="./com/sap/runlet/operationaltransformation/PeerImpl.html" title="class in com.sap.runlet.operationaltransformation">PeerImpl</A>
<DD>&nbsp;
<DT><A HREF="./com/sap/runlet/operationaltransformation/PeerImpl.html#apply(com.sap.runlet.operationaltransformation.Peer, O, int)"><B>apply(Peer&lt;O, S&gt;, O, int)</B></A> -
Method in class com.sap.runlet.operationaltransformation.<A HREF="./com/sap/runlet/operationaltransformation/PeerImpl.html" title="class in com.sap.runlet.operationaltransformation">PeerImpl</A>
<DD>&nbsp;
<DT><A HREF="./com/sap/runlet/operationaltransformation/StatesAndOperations.html#apply(O)"><B>apply(O)</B></A> -
Method in class com.sap.runlet.operationaltransformation.<A HREF="./com/sap/runlet/operationaltransformation/StatesAndOperations.html" title="class in com.sap.runlet.operationaltransformation">StatesAndOperations</A>
<DD>Applies the <tt>operation</tt> to the <A HREF="./com/sap/runlet/operationaltransformation/StatesAndOperations.html#getCurrentState()"><CODE>current
state</CODE></A> and records both, the new current state and the operation.
<DT><A HREF="./com/sap/runlet/operationaltransformation/Operation.html#applyTo(S)"><B>applyTo(S)</B></A> -
Method in interface com.sap.runlet.operationaltransformation.<A HREF="./com/sap/runlet/operationaltransformation/Operation.html" title="interface in com.sap.runlet.operationaltransformation">Operation</A>
<DD>Applies this operation to the state <tt>toState</tt>, producing a new target state
which is returned.
</DL>
<HR>
<A NAME="_C_"><!-- --></A><H2>
<B>C</B></H2>
<DL>
<DT><A HREF="./com/sap/runlet/operationaltransformation/ClientServerOperationPair.html" title="class in com.sap.runlet.operationaltransformation"><B>ClientServerOperationPair</B></A>&lt;<A HREF="./com/sap/runlet/operationaltransformation/ClientServerOperationPair.html" title="type parameter in ClientServerOperationPair">O</A> extends <A HREF="./com/sap/runlet/operationaltransformation/Operation.html" title="interface in com.sap.runlet.operationaltransformation">Operation</A>&lt;?&gt;&gt; - Class in <A HREF="./com/sap/runlet/operationaltransformation/package-summary.html">com.sap.runlet.operationaltransformation</A><DD>&nbsp;<DT><A HREF="./com/sap/runlet/operationaltransformation/ClientServerOperationPair.html#ClientServerOperationPair(O, O)"><B>ClientServerOperationPair(O, O)</B></A> -
Constructor for class com.sap.runlet.operationaltransformation.<A HREF="./com/sap/runlet/operationaltransformation/ClientServerOperationPair.html" title="class in com.sap.runlet.operationaltransformation">ClientServerOperationPair</A>
<DD>&nbsp;
<DT><A HREF="./com/sap/runlet/operationaltransformation/AbstractOperation.html#clone()"><B>clone()</B></A> -
Method in class com.sap.runlet.operationaltransformation.<A HREF="./com/sap/runlet/operationaltransformation/AbstractOperation.html" title="class in com.sap.runlet.operationaltransformation">AbstractOperation</A>
<DD>&nbsp;
<DT><A HREF="./com/sap/runlet/operationaltransformation/Operation.html#clone()"><B>clone()</B></A> -
Method in interface com.sap.runlet.operationaltransformation.<A HREF="./com/sap/runlet/operationaltransformation/Operation.html" title="interface in com.sap.runlet.operationaltransformation">Operation</A>
<DD>&nbsp;
<DT><A HREF="./com/sap/runlet/operationaltransformation/package-summary.html"><B>com.sap.runlet.operationaltransformation</B></A> - package com.sap.runlet.operationaltransformation<DD>
Use the contents of this package for so-called <em>operational transformations</em>.<DT><A HREF="./com/sap/runlet/operationaltransformation/Peer.html#confirm(com.sap.runlet.operationaltransformation.Peer, int)"><B>confirm(Peer&lt;O, S&gt;, int)</B></A> -
Method in interface com.sap.runlet.operationaltransformation.<A HREF="./com/sap/runlet/operationaltransformation/Peer.html" title="interface in com.sap.runlet.operationaltransformation">Peer</A>
<DD>Tells this peer that the <tt>source</tt> peer has successfully merged
<tt>numberOfMergedOperations</tt> altogether coming from this peer
into its operation sequence.
<DT><A HREF="./com/sap/runlet/operationaltransformation/PeerImpl.html#confirm(com.sap.runlet.operationaltransformation.Peer, int)"><B>confirm(Peer&lt;O, S&gt;, int)</B></A> -
Method in class com.sap.runlet.operationaltransformation.<A HREF="./com/sap/runlet/operationaltransformation/PeerImpl.html" title="class in com.sap.runlet.operationaltransformation">PeerImpl</A>
<DD>&nbsp;
<DT><A HREF="./com/sap/runlet/operationaltransformation/UnmergedOperationsQueue.html#confirm(int)"><B>confirm(int)</B></A> -
Method in class com.sap.runlet.operationaltransformation.<A HREF="./com/sap/runlet/operationaltransformation/UnmergedOperationsQueue.html" title="class in com.sap.runlet.operationaltransformation">UnmergedOperationsQueue</A>
<DD>Cleans up the queue so that only unconfirmed / unmerged operations
remain.
</DL>
<HR>
<A NAME="_F_"><!-- --></A><H2>
<B>F</B></H2>
<DL>
<DT><A HREF="./com/sap/runlet/operationaltransformation/PeerImpl.html#finalize()"><B>finalize()</B></A> -
Method in class com.sap.runlet.operationaltransformation.<A HREF="./com/sap/runlet/operationaltransformation/PeerImpl.html" title="class in com.sap.runlet.operationaltransformation">PeerImpl</A>
<DD>&nbsp;
</DL>
<HR>
<A NAME="_G_"><!-- --></A><H2>
<B>G</B></H2>
<DL>
<DT><A HREF="./com/sap/runlet/operationaltransformation/ClientServerOperationPair.html#getClientOp()"><B>getClientOp()</B></A> -
Method in class com.sap.runlet.operationaltransformation.<A HREF="./com/sap/runlet/operationaltransformation/ClientServerOperationPair.html" title="class in com.sap.runlet.operationaltransformation">ClientServerOperationPair</A>
<DD>&nbsp;
<DT><A HREF="./com/sap/runlet/operationaltransformation/Peer.html#getCurrentState()"><B>getCurrentState()</B></A> -
Method in interface com.sap.runlet.operationaltransformation.<A HREF="./com/sap/runlet/operationaltransformation/Peer.html" title="interface in com.sap.runlet.operationaltransformation">Peer</A>
<DD>Tells the current state in which the peer is.
<DT><A HREF="./com/sap/runlet/operationaltransformation/PeerImpl.html#getCurrentState()"><B>getCurrentState()</B></A> -
Method in class com.sap.runlet.operationaltransformation.<A HREF="./com/sap/runlet/operationaltransformation/PeerImpl.html" title="class in com.sap.runlet.operationaltransformation">PeerImpl</A>
<DD>&nbsp;
<DT><A HREF="./com/sap/runlet/operationaltransformation/StatesAndOperations.html#getCurrentState()"><B>getCurrentState()</B></A> -
Method in class com.sap.runlet.operationaltransformation.<A HREF="./com/sap/runlet/operationaltransformation/StatesAndOperations.html" title="class in com.sap.runlet.operationaltransformation">StatesAndOperations</A>
<DD>&nbsp;
<DT><A HREF="./com/sap/runlet/operationaltransformation/ClientServerOperationPair.html#getServerOp()"><B>getServerOp()</B></A> -
Method in class com.sap.runlet.operationaltransformation.<A HREF="./com/sap/runlet/operationaltransformation/ClientServerOperationPair.html" title="class in com.sap.runlet.operationaltransformation">ClientServerOperationPair</A>
<DD>&nbsp;
<DT><A HREF="./com/sap/runlet/operationaltransformation/UnmergedOperationsQueue.html#getUnmergedOperations(int)"><B>getUnmergedOperations(int)</B></A> -
Method in class com.sap.runlet.operationaltransformation.<A HREF="./com/sap/runlet/operationaltransformation/UnmergedOperationsQueue.html" title="class in com.sap.runlet.operationaltransformation">UnmergedOperationsQueue</A>
<DD>Returns a copied list of unmerged and stepwise transformed local
operations starting at the requested local operation number.
</DL>
<HR>
<A NAME="_O_"><!-- --></A><H2>
<B>O</B></H2>
<DL>
<DT><A HREF="./com/sap/runlet/operationaltransformation/Operation.html" title="interface in com.sap.runlet.operationaltransformation"><B>Operation</B></A>&lt;<A HREF="./com/sap/runlet/operationaltransformation/Operation.html" title="type parameter in Operation">S</A>&gt; - Interface in <A HREF="./com/sap/runlet/operationaltransformation/package-summary.html">com.sap.runlet.operationaltransformation</A><DD>A change operation can be applied to some start state of some
universe and transforms that universe into a target state.</DL>
<HR>
<A NAME="_P_"><!-- --></A><H2>
<B>P</B></H2>
<DL>
<DT><A HREF="./com/sap/runlet/operationaltransformation/Peer.html" title="interface in com.sap.runlet.operationaltransformation"><B>Peer</B></A>&lt;<A HREF="./com/sap/runlet/operationaltransformation/Peer.html" title="type parameter in Peer">O</A> extends <A HREF="./com/sap/runlet/operationaltransformation/Operation.html" title="interface in com.sap.runlet.operationaltransformation">Operation</A>&lt;<A HREF="./com/sap/runlet/operationaltransformation/Peer.html" title="type parameter in Peer">S</A>&gt;,<A HREF="./com/sap/runlet/operationaltransformation/Peer.html" title="type parameter in Peer">S</A>&gt; - Interface in <A HREF="./com/sap/runlet/operationaltransformation/package-summary.html">com.sap.runlet.operationaltransformation</A><DD>Accepts change operations from clients and maintains a shared state.<DT><A HREF="./com/sap/runlet/operationaltransformation/PeerImpl.html" title="class in com.sap.runlet.operationaltransformation"><B>PeerImpl</B></A>&lt;<A HREF="./com/sap/runlet/operationaltransformation/PeerImpl.html" title="type parameter in PeerImpl">O</A> extends <A HREF="./com/sap/runlet/operationaltransformation/Operation.html" title="interface in com.sap.runlet.operationaltransformation">Operation</A>&lt;<A HREF="./com/sap/runlet/operationaltransformation/PeerImpl.html" title="type parameter in PeerImpl">S</A>&gt;,<A HREF="./com/sap/runlet/operationaltransformation/PeerImpl.html" title="type parameter in PeerImpl">S</A>&gt; - Class in <A HREF="./com/sap/runlet/operationaltransformation/package-summary.html">com.sap.runlet.operationaltransformation</A><DD>A very simple peer implementation for operational transformations that starts
out with a provided initial state and then receives operations which it applies
to its state.<DT><A HREF="./com/sap/runlet/operationaltransformation/PeerImpl.html#PeerImpl(com.sap.runlet.operationaltransformation.Transformer, S, boolean)"><B>PeerImpl(Transformer&lt;O&gt;, S, boolean)</B></A> -
Constructor for class com.sap.runlet.operationaltransformation.<A HREF="./com/sap/runlet/operationaltransformation/PeerImpl.html" title="class in com.sap.runlet.operationaltransformation">PeerImpl</A>
<DD>&nbsp;
<DT><A HREF="./com/sap/runlet/operationaltransformation/PeerImpl.html#PeerImpl(java.lang.String, com.sap.runlet.operationaltransformation.Transformer, S, boolean)"><B>PeerImpl(String, Transformer&lt;O&gt;, S, boolean)</B></A> -
Constructor for class com.sap.runlet.operationaltransformation.<A HREF="./com/sap/runlet/operationaltransformation/PeerImpl.html" title="class in com.sap.runlet.operationaltransformation">PeerImpl</A>
<DD>&nbsp;
<DT><A HREF="./com/sap/runlet/operationaltransformation/PeerImpl.html#PeerImpl(com.sap.runlet.operationaltransformation.Transformer, com.sap.runlet.operationaltransformation.Peer)"><B>PeerImpl(Transformer&lt;O&gt;, Peer&lt;O, S&gt;)</B></A> -
Constructor for class com.sap.runlet.operationaltransformation.<A HREF="./com/sap/runlet/operationaltransformation/PeerImpl.html" title="class in com.sap.runlet.operationaltransformation">PeerImpl</A>
<DD>Constructs a client peer and connects it to the <tt>server</tt> peer, establishing
the two-way link between client and server peers.
<DT><A HREF="./com/sap/runlet/operationaltransformation/PeerImpl.html#PeerImpl(java.lang.String, com.sap.runlet.operationaltransformation.Transformer, com.sap.runlet.operationaltransformation.Peer)"><B>PeerImpl(String, Transformer&lt;O&gt;, Peer&lt;O, S&gt;)</B></A> -
Constructor for class com.sap.runlet.operationaltransformation.<A HREF="./com/sap/runlet/operationaltransformation/PeerImpl.html" title="class in com.sap.runlet.operationaltransformation">PeerImpl</A>
<DD>Constructs a client peer with a name and connects it to the
<tt>server</tt> peer, establishing the two-way link between client and
server peers.
</DL>
<HR>
<A NAME="_S_"><!-- --></A><H2>
<B>S</B></H2>
<DL>
<DT><A HREF="./com/sap/runlet/operationaltransformation/UnmergedOperationsQueue.html#sentOutOperation(O)"><B>sentOutOperation(O)</B></A> -
Method in class com.sap.runlet.operationaltransformation.<A HREF="./com/sap/runlet/operationaltransformation/UnmergedOperationsQueue.html" title="class in com.sap.runlet.operationaltransformation">UnmergedOperationsQueue</A>
<DD>After an operation has been locally applied and needs to be propagated
to the peer for which this is the queue of unmerged operations, the operation
must be appended to this queue.
<DT><A HREF="./com/sap/runlet/operationaltransformation/StatesAndOperations.html" title="class in com.sap.runlet.operationaltransformation"><B>StatesAndOperations</B></A>&lt;<A HREF="./com/sap/runlet/operationaltransformation/StatesAndOperations.html" title="type parameter in StatesAndOperations">O</A> extends <A HREF="./com/sap/runlet/operationaltransformation/Operation.html" title="interface in com.sap.runlet.operationaltransformation">Operation</A>&lt;<A HREF="./com/sap/runlet/operationaltransformation/StatesAndOperations.html" title="type parameter in StatesAndOperations">S</A>&gt;,<A HREF="./com/sap/runlet/operationaltransformation/StatesAndOperations.html" title="type parameter in StatesAndOperations">S</A>&gt; - Class in <A HREF="./com/sap/runlet/operationaltransformation/package-summary.html">com.sap.runlet.operationaltransformation</A><DD>Maintains a list of states and the operations that transformed the i-th into
the i+1st, starting with an initial state.<DT><A HREF="./com/sap/runlet/operationaltransformation/StatesAndOperations.html#StatesAndOperations(S)"><B>StatesAndOperations(S)</B></A> -
Constructor for class com.sap.runlet.operationaltransformation.<A HREF="./com/sap/runlet/operationaltransformation/StatesAndOperations.html" title="class in com.sap.runlet.operationaltransformation">StatesAndOperations</A>
<DD>&nbsp;
</DL>
<HR>
<A NAME="_T_"><!-- --></A><H2>
<B>T</B></H2>
<DL>
<DT><A HREF="./com/sap/runlet/operationaltransformation/PeerImpl.html#toString()"><B>toString()</B></A> -
Method in class com.sap.runlet.operationaltransformation.<A HREF="./com/sap/runlet/operationaltransformation/PeerImpl.html" title="class in com.sap.runlet.operationaltransformation">PeerImpl</A>
<DD>&nbsp;
<DT><A HREF="./com/sap/runlet/operationaltransformation/UnmergedOperationsQueue.html#toString()"><B>toString()</B></A> -
Method in class com.sap.runlet.operationaltransformation.<A HREF="./com/sap/runlet/operationaltransformation/UnmergedOperationsQueue.html" title="class in com.sap.runlet.operationaltransformation">UnmergedOperationsQueue</A>
<DD>&nbsp;
<DT><A HREF="./com/sap/runlet/operationaltransformation/Transformer.html#transform(O, O)"><B>transform(O, O)</B></A> -
Method in interface com.sap.runlet.operationaltransformation.<A HREF="./com/sap/runlet/operationaltransformation/Transformer.html" title="interface in com.sap.runlet.operationaltransformation">Transformer</A>
<DD>Takes an operation from the client and an operation from the server, both
based on the same state.
<DT><A HREF="./com/sap/runlet/operationaltransformation/Transformer.html" title="interface in com.sap.runlet.operationaltransformation"><B>Transformer</B></A>&lt;<A HREF="./com/sap/runlet/operationaltransformation/Transformer.html" title="type parameter in Transformer">O</A> extends <A HREF="./com/sap/runlet/operationaltransformation/Operation.html" title="interface in com.sap.runlet.operationaltransformation">Operation</A>&lt;?&gt;&gt; - Interface in <A HREF="./com/sap/runlet/operationaltransformation/package-summary.html">com.sap.runlet.operationaltransformation</A><DD>&nbsp;</DL>
<HR>
<A NAME="_U_"><!-- --></A><H2>
<B>U</B></H2>
<DL>
<DT><A HREF="./com/sap/runlet/operationaltransformation/UnmergedOperationsQueue.html" title="class in com.sap.runlet.operationaltransformation"><B>UnmergedOperationsQueue</B></A>&lt;<A HREF="./com/sap/runlet/operationaltransformation/UnmergedOperationsQueue.html" title="type parameter in UnmergedOperationsQueue">O</A> extends <A HREF="./com/sap/runlet/operationaltransformation/Operation.html" title="interface in com.sap.runlet.operationaltransformation">Operation</A>&lt;<A HREF="./com/sap/runlet/operationaltransformation/UnmergedOperationsQueue.html" title="type parameter in UnmergedOperationsQueue">S</A>&gt;,<A HREF="./com/sap/runlet/operationaltransformation/UnmergedOperationsQueue.html" title="type parameter in UnmergedOperationsQueue">S</A>&gt; - Class in <A HREF="./com/sap/runlet/operationaltransformation/package-summary.html">com.sap.runlet.operationaltransformation</A><DD>&nbsp;<DT><A HREF="./com/sap/runlet/operationaltransformation/UnmergedOperationsQueue.html#UnmergedOperationsQueue()"><B>UnmergedOperationsQueue()</B></A> -
Constructor for class com.sap.runlet.operationaltransformation.<A HREF="./com/sap/runlet/operationaltransformation/UnmergedOperationsQueue.html" title="class in com.sap.runlet.operationaltransformation">UnmergedOperationsQueue</A>
<DD>&nbsp;
<DT><A HREF="./com/sap/runlet/operationaltransformation/UnmergedOperationsQueue.html#updateWithTransformed(int, O)"><B>updateWithTransformed(int, O)</B></A> -
Method in class com.sap.runlet.operationaltransformation.<A HREF="./com/sap/runlet/operationaltransformation/UnmergedOperationsQueue.html" title="class in com.sap.runlet.operationaltransformation">UnmergedOperationsQueue</A>
<DD>Replaces the local operation with number <tt>localOperationNumber</tt> in the queue by
<tt>transformedOperation</tt>.
</DL>
<HR>
<A NAME="_W_"><!-- --></A><H2>
<B>W</B></H2>
<DL>
<DT><A HREF="./com/sap/runlet/operationaltransformation/Peer.html#waitForNotRunning()"><B>waitForNotRunning()</B></A> -
Method in interface com.sap.runlet.operationaltransformation.<A HREF="./com/sap/runlet/operationaltransformation/Peer.html" title="interface in com.sap.runlet.operationaltransformation">Peer</A>
<DD>Blocks until the queue of tasks that works on achieving consistency across peers
has completely drained.
<DT><A HREF="./com/sap/runlet/operationaltransformation/PeerImpl.html#waitForNotRunning()"><B>waitForNotRunning()</B></A> -
Method in class com.sap.runlet.operationaltransformation.<A HREF="./com/sap/runlet/operationaltransformation/PeerImpl.html" title="class in com.sap.runlet.operationaltransformation">PeerImpl</A>
<DD>&nbsp;
</DL>
<HR>
<A HREF="#_A_">A</A> <A HREF="#_C_">C</A> <A HREF="#_F_">F</A> <A HREF="#_G_">G</A> <A HREF="#_O_">O</A> <A HREF="#_P_">P</A> <A HREF="#_S_">S</A> <A HREF="#_T_">T</A> <A HREF="#_U_">U</A> <A HREF="#_W_">W</A>
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="./com/sap/runlet/operationaltransformation/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="./com/sap/runlet/operationaltransformation/package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="./deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="./help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="./index.html?index-all.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="index-all.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
if(window==top) {
document.writeln('<A HREF="./allclasses-noframe.html"><B>All Classes</B></A>');
}
//-->
</SCRIPT>
<NOSCRIPT>
<A HREF="./allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
</BODY>
</HTML>
@@ -1,36 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc on Thu Jul 30 14:17:57 CEST 2009-->
<TITLE>
Generated Documentation (Untitled)
</TITLE>
<SCRIPT type="text/javascript">
targetPage = "" + window.location.search;
if (targetPage != "" && targetPage != "undefined")
targetPage = targetPage.substring(1);
if (targetPage.indexOf(":") != -1)
targetPage = "undefined";
function loadFrames() {
if (targetPage != "" && targetPage != "undefined")
top.classFrame.location = top.targetPage;
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>
</HEAD>
<FRAMESET cols="20%,80%" title="" onLoad="top.loadFrames()">
<FRAME src="allclasses-frame.html" name="packageFrame" title="All classes and interfaces (except non-static nested types)">
<FRAME src="com/sap/runlet/operationaltransformation/package-summary.html" name="classFrame" title="Package, class and interface descriptions" scrolling="yes">
<NOFRAMES>
<H2>
Frame Alert</H2>
<P>
This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
<BR>
Link to<A HREF="com/sap/runlet/operationaltransformation/package-summary.html">Non-frame version.</A>
</NOFRAMES>
</FRAMESET>
</HTML>
@@ -1,157 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_14) on Thu Jul 30 14:17:57 CEST 2009 -->
<TITLE>
Class Hierarchy
</TITLE>
<META NAME="date" CONTENT="2009-07-30">
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
<SCRIPT type="text/javascript">
function windowTitle()
{
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="Class Hierarchy";
}
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>
</HEAD>
<BODY BGCOLOR="white" onload="windowTitle();">
<HR>
<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="com/sap/runlet/operationaltransformation/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
<TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="index.html?overview-tree.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="overview-tree.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
if(window==top) {
document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
}
//-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->
<HR>
<CENTER>
<H2>
Hierarchy For All Packages</H2>
</CENTER>
<DL>
<DT><B>Package Hierarchies:</B><DD><A HREF="com/sap/runlet/operationaltransformation/package-tree.html">com.sap.runlet.operationaltransformation</A></DL>
<HR>
<H2>
Class Hierarchy
</H2>
<UL>
<LI TYPE="circle">java.lang.Object<UL>
<LI TYPE="circle">com.sap.runlet.operationaltransformation.<A HREF="com/sap/runlet/operationaltransformation/AbstractOperation.html" title="class in com.sap.runlet.operationaltransformation"><B>AbstractOperation</B></A>&lt;S&gt; (implements com.sap.runlet.operationaltransformation.<A HREF="com/sap/runlet/operationaltransformation/Operation.html" title="interface in com.sap.runlet.operationaltransformation">Operation</A>&lt;S&gt;)
<LI TYPE="circle">com.sap.runlet.operationaltransformation.<A HREF="com/sap/runlet/operationaltransformation/ClientServerOperationPair.html" title="class in com.sap.runlet.operationaltransformation"><B>ClientServerOperationPair</B></A>&lt;O&gt;<LI TYPE="circle">com.sap.runlet.operationaltransformation.<A HREF="com/sap/runlet/operationaltransformation/PeerImpl.html" title="class in com.sap.runlet.operationaltransformation"><B>PeerImpl</B></A>&lt;O,S&gt; (implements com.sap.runlet.operationaltransformation.<A HREF="com/sap/runlet/operationaltransformation/Peer.html" title="interface in com.sap.runlet.operationaltransformation">Peer</A>&lt;O,S&gt;)
<LI TYPE="circle">com.sap.runlet.operationaltransformation.<A HREF="com/sap/runlet/operationaltransformation/StatesAndOperations.html" title="class in com.sap.runlet.operationaltransformation"><B>StatesAndOperations</B></A>&lt;O,S&gt;<LI TYPE="circle">com.sap.runlet.operationaltransformation.<A HREF="com/sap/runlet/operationaltransformation/UnmergedOperationsQueue.html" title="class in com.sap.runlet.operationaltransformation"><B>UnmergedOperationsQueue</B></A>&lt;O,S&gt;</UL>
</UL>
<H2>
Interface Hierarchy
</H2>
<UL>
<LI TYPE="circle">java.lang.Cloneable<UL>
<LI TYPE="circle">com.sap.runlet.operationaltransformation.<A HREF="com/sap/runlet/operationaltransformation/Operation.html" title="interface in com.sap.runlet.operationaltransformation"><B>Operation</B></A>&lt;S&gt;</UL>
<LI TYPE="circle">com.sap.runlet.operationaltransformation.<A HREF="com/sap/runlet/operationaltransformation/Peer.html" title="interface in com.sap.runlet.operationaltransformation"><B>Peer</B></A>&lt;O,S&gt;<LI TYPE="circle">com.sap.runlet.operationaltransformation.<A HREF="com/sap/runlet/operationaltransformation/Transformer.html" title="interface in com.sap.runlet.operationaltransformation"><B>Transformer</B></A>&lt;O&gt;</UL>
<HR>
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="com/sap/runlet/operationaltransformation/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
<TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="index.html?overview-tree.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="overview-tree.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
if(window==top) {
document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
}
//-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
</BODY>
</HTML>
@@ -1 +0,0 @@
com.sap.runlet.operationaltransformation
@@ -1,29 +0,0 @@
/* Javadoc style sheet */
/* Define colors, fonts and other style attributes here to override the defaults */
/* Page background color */
body { background-color: #FFFFFF; color:#000000 }
/* Headings */
h1 { font-size: 145% }
/* Table colors */
.TableHeadingColor { background: #CCCCFF; color:#000000 } /* Dark mauve */
.TableSubHeadingColor { background: #EEEEFF; color:#000000 } /* Light mauve */
.TableRowColor { background: #FFFFFF; color:#000000 } /* White */
/* Font used in left-hand frame lists */
.FrameTitleFont { font-size: 100%; font-family: Helvetica, Arial, sans-serif; color:#000000 }
.FrameHeadingFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 }
.FrameItemFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 }
/* Navigation bar fonts and colors */
.NavBarCell1 { background-color:#EEEEFF; color:#000000} /* Light mauve */
.NavBarCell1Rev { background-color:#00008B; color:#FFFFFF} /* Dark Blue */
.NavBarFont1 { font-family: Arial, Helvetica, sans-serif; color:#000000;color:#000000;}
.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;color:#FFFFFF;}
.NavBarCell2 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000}
.NavBarCell3 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000}
@@ -1,58 +0,0 @@
<body>
<p>
Use the contents of this package for so-called <em>operational transformations</em>.
This can be used to synchronize the states of a number of clients with a single server.
The synchronization is performed asynchronously. The construction of the transformation
function guarantees to lead to eventual consistency across clients and server.
Read more about the general background of the algorithm on which this is based
<a href="../docs/JupiterCollaborationSystem_Nichols.pdf">here</a>.
</p>
<p>
To establish a server to which clients can connect, first decide how your <em>state</em>
is encoded on which the <em>operations</em> will perform changes to transition from one
state to the next. Then, design your operations class. The trickiest part comes next. You
have to define a transformer that maps a pair of your operations to another pair of
operations of the same type. The transformer has to implement the
{@link com.sap.runlet.operationaltransformation.Transformer} interface, in particular
the {@link com.sap.runlet.operationaltransformation.Transformer#transform} method. The
transformation function assumes that both input operations have been applied to the same
state, one on a client, the other one on the server. The resulting operation for the client
applied on the client must lead to a state equal to the state reached on the server by
applying the resulting operation for the server to the server's state.
</p>
<p>
Put formally, if <em>t</em> is a transformer, and
if we have <em>s_c</em> as the state on the client and <em>s_s</em> as the state
on the server, and <em>c</em> as the operation that was executed in state <em>s_c</em> on the
client, and <em>s</em> as the operation executed on the server in state <em>s_s</em>, then the
following condition must hold:<br>
<pre>
t.transform(c, s).getClientOp().applyTo(c.applyTo(s_c).equals(
t.transform(c, s).getServerOp().applyTo(s.applyTo(s_s))
</pre>
</p>
<p>
You can create servers and clients, e.g., as follows:
<pre>
server = new {@link com.sap.runlet.operationaltransformation.PeerImpl PeerImpl}<MyOperationType, MyStateType>(
"Server", new MyTransformer(), /* initial state */ new MyStateType(...), /* server */ true);
client1 = new {@link com.sap.runlet.operationaltransformation.PeerImpl PeerImpl}<MyOperationType, MyStateType>("Client1", new MyTransformer(), server);
client2 = new {@link com.sap.runlet.operationaltransformation.PeerImpl PeerImpl}<MyOperationType, MyStateType>("Client2", new MyTransformer(), server);
</pre>
After that, you can start sending operations to the clients using the
{@link com.sap.runlet.operationaltransformation.Peer#apply} method as follows:
<pre>
client1.{@link com.sap.runlet.operationaltransformation.Peer#apply apply}(new MyOperationType(...));
client2.{@link com.sap.runlet.operationaltransformation.Peer#apply apply}(new MyOperationType(...));
...
</pre>
and those changes will eventually get synchronized across all clients and the server. You can
obtain the current state of a peer using the {@link com.sap.runlet.operationaltransformation.Peer#getCurrentState}
operation.
</p>
</body>