001    package crisp.wbwiki.client;
002    
003    import com.google.gwt.user.client.rpc.RemoteService;
004    
005    public interface WikiService extends RemoteService {
006            /**
007             * Synchronizes the state between client and server.
008             * More specifically, saves the given new content (if any) to the server and
009             * returns an up-to-date Page if necessary. <p>
010             * 
011             * If the currently saved version of the page is the same
012             * as lastVersionLoadedByClient, then null is returned since the
013             * client's version is up-to-date already.
014             * In that case, if modifiedContentInClient is not null 
015             * the client should increment his lastVersionLoadedByClient,
016             * effectively "pretending" that it has received an updated from the server. 
017             * <p>
018             * 
019             * If the currently saved version of the page is NOT the 
020             * same as lastVersionLoadedByClient, some interference has occurred.
021             * Probably someone else has edited the page concurrently.
022             * In that case a new, up-to-date Page object will be returned to
023             * the client.
024             * 
025             * @param lastVersionLoadedByClient ¨
026             *              which version the client last loaded from the server, or null if nothing has been loaded yet.
027             * @param modifiedContentInClient
028             *              which content to save, or null if nothing has been changed in the client. 
029             *              in the client since lastVersionLoadedByClient
030             * @return 
031             *              an up-to-date Page object or null if the client is already up-to-date.
032             */
033            public Page synchronize(Integer lastVersionLoadedByClient, String modifiedContentInClient);
034    
035    }