xlawrence    2005/02/01 10:36:38 CET

  Modified files:
    patches/sync4j/syncclient/spds SyncManager.java 
  Log:
  File patch for Sync4j 2.2 beta 3 RC1. To use the SynchClient, this file needs 
to override the distribution version. It simply allows a Synch client to send 
more properties to the SyncManager.
  
  Revision  Changes    Path
  1.4       +755 -124  
uwcal_JSR168/patches/sync4j/syncclient/spds/SyncManager.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/uwcal_JSR168/patches/sync4j/syncclient/spds/SyncManager.java.diff?r1=1.3&r2=1.4&f=h
  
  
  
  Index: SyncManager.java
  ===================================================================
  RCS file: 
/home/cvs/repository/uwcal_JSR168/patches/sync4j/syncclient/spds/SyncManager.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- SyncManager.java  3 Dec 2004 11:11:18 -0000       1.3
  +++ SyncManager.java  1 Feb 2005 09:36:38 -0000       1.4
  @@ -1,7 +1,7 @@
   /**
  - * Copyright (C) 2003-2004 Funambol
  + * Copyright (C) 2003-2005 Funambol
    *
  - *  This program is free software; you can redistribute it and/or modify
  + * This program is free software; you can redistribute it and/or modify
    * it under the terms of the GNU General Public License as published by
    * the Free Software Foundation; either version 2 of the License, or
    * (at your option) any later version.
  @@ -32,7 +32,9 @@
   
   import java.text.MessageFormat;
   
  -import sync4j.syncclient.common.Logger;
  +import sync4j.syncclient.common.logging.Handler;
  +import sync4j.syncclient.common.logging.Logger;
  +import sync4j.syncclient.common.logging.OutputHandler;
   import sync4j.syncclient.common.StringTools;
   
   import sync4j.syncclient.spdm.DMException;
  @@ -41,6 +43,7 @@
   
   import sync4j.syncclient.spds.engine.SyncItem;
   import sync4j.syncclient.spds.engine.SyncItemImpl;
  +import sync4j.syncclient.spds.engine.SyncItemKey;
   import sync4j.syncclient.spds.engine.SyncItemProperty;
   import sync4j.syncclient.spds.engine.SyncItemState;
   import sync4j.syncclient.spds.engine.SyncOperation;
  @@ -48,6 +51,18 @@
   import sync4j.syncclient.spds.engine.SyncSourceDefinition;
   import sync4j.syncclient.spds.engine.SyncSourceFactory;
   
  +import sync4j.syncclient.spds.event.SyncEvent;
  +import sync4j.syncclient.spds.event.SyncItemEvent;
  +import sync4j.syncclient.spds.event.SyncSourceEvent;
  +import sync4j.syncclient.spds.event.SyncStatusEvent;
  +import sync4j.syncclient.spds.event.SyncTransportEvent;
  +
  +import sync4j.syncclient.spds.event.SyncItemListener;
  +import sync4j.syncclient.spds.event.SyncListener;
  +import sync4j.syncclient.spds.event.SyncSourceListener;
  +import sync4j.syncclient.spds.event.SyncStatusListener;
  +import sync4j.syncclient.spds.event.SyncTransportListener;
  +
   import sync4j.framework.core.AbstractCommand;
   import sync4j.framework.core.AddCommand;
   import sync4j.framework.core.AlertCommand;
  @@ -62,10 +77,12 @@
   import sync4j.framework.core.ReplaceCommand;
   import sync4j.framework.core.RepresentationException;
   import sync4j.framework.core.Source;
  +import sync4j.framework.core.SourceRef;
   import sync4j.framework.core.StatusCode;
   import sync4j.framework.core.StatusCommand;
   import sync4j.framework.core.SyncCommand;
   import sync4j.framework.core.Target;
  +import sync4j.framework.core.TargetRef;
   
   import sync4j.framework.tools.Base64;
   
  @@ -98,20 +115,21 @@
    *  syncml-url
    *  target-local-uri
    *  sourceDirectory
  - * </pre>
  + *  </pre>
    * The information required by the synchronization engine for initialization 
and
    * to kick off a data synchronization session is stored in the device 
management
    * configuration tree and can be manipulated by the means of the SyncPlatform
    * Device Management API.  See <i>Funambol SyncClient API 2.0 Programmer 
Guide</i>
    * for more information.
    *
  - * @version  $Id: SyncManager.java,v 1.3 2004/12/03 11:11:18 xlawrence Exp $
  + * @version  $Id: SyncManager.java,v 1.4 2005/02/01 09:36:38 xlawrence Exp $
    * @author Fabio Maggi
    */
  -public class SyncManager {
  +public class SyncManager implements SyncTransportListener {
   
       //---------------------------------------------------------------- 
Constants
   
  +    private static final String XML_ALERT             = "/xml/alert.xml"     
  ;
       private static final String XML_INITIALIZATION    = "/xml/init.xml"      
  ;
       private static final String XML_MODIFICATIONS     = "/xml/mod.xml"       
  ;
       private static final String XML_MAPPING           = "/xml/map.xml"       
  ;
  @@ -180,6 +198,8 @@
       public static final String AUTHENTICATION_BASIC   = "basic"              
  ;
       public static final String AUTHENTICATION_CLEAR   = "clear"              
  ;
   
  +    public static final String SESSION_ID             = "12345678"           
  ;
  +
       public static final String
           MIMETYPE_SYNCMLDS_XML
               = "application/vnd.syncml+xml"                                   
  ;
  @@ -227,6 +247,7 @@
       private String[]           sourceNames            = null  ;
       private String[]           sourceTypes            = null  ;
   
  +    private String             alertXML               = null  ;
       private String             clientInitXML          = null  ;
       private String             modificationsXML       = null  ;
       private String             mappingXML             = null  ;
  @@ -258,9 +279,20 @@
       private int                detectedNewItems       = 0     ;
       private int                detectedUpdateItems    = 0     ;
       private int                detectedDeleteItems    = 0     ;
  -    private int                returnNewItems         = 0     ;
  -    private int                returnUpdateItems      = 0     ;
  -    private int                returnDeleteItems      = 0     ;
  +    private int                receivedNewItems       = 0     ;
  +    private int                receivedUpdateItems    = 0     ;
  +    private int                receivedDeleteItems    = 0     ;
  +
  +    private Vector             syncItemListeners      = null  ;
  +    private Vector             syncListeners          = null  ;
  +    private Vector             syncSourceListeners    = null  ;
  +    private Vector             syncStatusListeners    = null  ;
  +    private Vector             syncTransportListeners = null  ;
  +
  +    private SyncEvent          syncEvent              = null  ;
  +    private SyncItemEvent      syncItemEvent          = null  ;
  +    private SyncSourceEvent    syncSourceEvent        = null  ;
  +    private SyncStatusEvent    syncStatusEvent        = null  ;
   
       //------------------------------------------------------------- 
Constructors
   
  @@ -282,10 +314,20 @@
       protected SyncManager (String appURI, Properties runtimeProperties)
       throws SyncException {
   
  +        syncItemListeners      = new Vector();
  +        syncListeners          = new Vector();
  +        syncSourceListeners    = new Vector();
  +        syncStatusListeners    = new Vector();
  +        syncTransportListeners = new Vector();
  +
           SyncSourceDefinition ssd = null;
   
           try {
   
  +            if (Logger.getHandler() == null) {
  +                Logger.setHandler(new OutputHandler());
  +            }
  +
               logger = new Logger();
   
               loadResources();
  @@ -300,12 +342,11 @@
   
               loadParams(syncParams, runtimeProperties);
   
  -            if (logger.isLoggable(Logger.LEVEL_INFO) ||
  -                logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +            if (logger.isLoggable(Logger.INFO)) {
                   logger.init();
               }
   
  -            if (logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +            if (logger.isLoggable(Logger.DEBUG)) {
                   logger.debug("System properties: " +
                                System.getProperties().toString());
               }
  @@ -369,8 +410,6 @@
                     continue;
                   }
   
  -                logger.debug(sourceConfig.toString());
  -
                   ssd = new SyncSourceDefinition(sourceConfig);
                   if (SYNC_NONE.equals(ssd.getDefaultSync())) {
                       continue;
  @@ -497,14 +536,17 @@
   
           try {
   
  +            syncEvent = new SyncEvent(SyncEvent.SYNC_BEGIN       ,
  +                                      System.currentTimeMillis() );
  +            fireSyncEvent(syncEvent);
  +
               String databaseList = "";
   
               //
               // If sourceURIs is null or zero-length, there is nothing to 
do...
               //
               if ((sourceURIs == null) || (sourceURIs.length == 0)) {
  -                if (logger.isLoggable(Logger.LEVEL_INFO) ||
  -                    logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +                if (logger.isLoggable(Logger.INFO)) {
                       logger.info("No database to synchronize");
                   }
                   return;
  @@ -514,20 +556,23 @@
   
               nextTimestamp = System.currentTimeMillis();
   
  -            if (logger.isLoggable(Logger.LEVEL_INFO) ||
  -                logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +            if (logger.isLoggable(Logger.INFO)) {
                   logger.info("Initializing");
               }
   
               prepareInizializationMessage();
   
  -            if (logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +            if (logger.isLoggable(Logger.DEBUG)) {
                   logger.debug("inizialization-message:" + clientInitXML);
               }
   
  +            syncEvent = new SyncEvent(SyncEvent.SEND_INITIALIZATION       ,
  +                                                System.currentTimeMillis() );
  +            fireSyncEvent(syncEvent);
  +
               response = syncInitialization();
   
  -            if (logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +            if (logger.isLoggable(Logger.DEBUG)) {
                   logger.debug("response to inizialization-message:" + 
response);
               }
   
  @@ -547,21 +592,20 @@
                       databaseList = databaseList + ", " + keyStr;
                   }
   
  -                if (logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +                if (logger.isLoggable(Logger.DEBUG)) {
                       logger.debug(msg);
                   }
   
               }
   
  -            if (logger.isLoggable(Logger.LEVEL_INFO) ||
  -                logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +            if (logger.isLoggable(Logger.INFO)) {
                   logger.info("Synchronizing " + databaseList);
               }
   
               url = response.
                       substring(response.indexOf("<RespURI>") + 9, 
response.indexOf("</RespURI>"));
   
  -            if (logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +            if (logger.isLoggable(Logger.DEBUG)) {
                   logger.debug("url from response to inizialization-message:" 
+ url);
               }
   
  @@ -577,18 +621,43 @@
   
                   alertCode = getSourceAlertCode(sourceURIs[i]);
   
  +                syncSourceEvent = new
  +                    SyncSourceEvent(SyncSourceEvent.SYNC_BEGIN ,
  +                                    sourceURIs [i]             ,
  +                                    alertCode                  ,
  +                                    System.currentTimeMillis() );
  +
  +                fireSyncSourceEvent(syncSourceEvent);
  +
                   
syncSourceFactory.getSyncSource(sourceURIs[i]).beginSync(alertCode);
  +
               }
   
               prepareModificationMessage();
   
  -            if (logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +            if (logger.isLoggable(Logger.DEBUG)) {
                   logger.debug("modification-message:" + modificationsXML);
               }
   
  +            syncEvent = new SyncEvent(SyncEvent.SEND_MODIFICATION          ,
  +                                                System.currentTimeMillis() );
  +
  +            fireSyncEvent(syncEvent);
  +
               response = syncModifications();
   
  -            if (logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +            //
  +            // To operate in SyncServer multimessage
  +            //
  +            if (response.indexOf("<Final/>") == -1 &&
  +                response.indexOf("</Final>") == - 1) {
  +
  +                prepareAlertMessage();
  +                response = sendAlertMessage();
  +
  +            }
  +
  +            if (logger.isLoggable(Logger.DEBUG)) {
                   logger.debug("response to modification-message: " + 
response);
               }
   
  @@ -596,8 +665,7 @@
   
               boolean sendResponse = processModifications(response);
   
  -            if (logger.isLoggable(Logger.LEVEL_INFO) ||
  -                logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +            if (logger.isLoggable(Logger.INFO)) {
                   logger.info("Modification done");
               }
   
  @@ -605,10 +673,15 @@
   
                   prepareMappingMessage();
   
  -                if (logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +                if (logger.isLoggable(Logger.DEBUG)) {
                       logger.debug("mapping-message:" + mappingXML);
                   }
   
  +                syncEvent = new SyncEvent(SyncEvent.SEND_FINALIZATION        
  ,
  +                                                    
System.currentTimeMillis() );
  +
  +                fireSyncEvent(syncEvent);
  +
                   syncMapping();
               }
   
  @@ -628,11 +701,21 @@
                       // Notifies the source that the synchronization is 
successfully
                       // give it a chance to stop the committing.
                       //
  -                    
syncSourceFactory.getSyncSource(sourceURIs[i]).commitSync();
  +                    syncSourceFactory.getSyncSource(sourceURIs 
[i]).commitSync();
                       //
                       // Here everything was ok
                       //
  -                    updateLastAnchor(sourceURIs[i], nextTimestamp);
  +                    updateLastAnchor(sourceURIs [i], nextTimestamp);
  +
  +                    alertCode = getSourceAlertCode(sourceURIs[i]);
  +
  +                    syncSourceEvent = new
  +                        SyncSourceEvent(SyncSourceEvent.SYNC_END   ,
  +                                        sourceURIs [i]             ,
  +                                        alertCode                  ,
  +                                        System.currentTimeMillis() );
  +
  +                    fireSyncSourceEvent(syncSourceEvent);
   
                   } catch (DMException e) {
   
  @@ -641,11 +724,19 @@
                                    '/'                                  +
                                    sources[i].getContext()              ;
   
  -                    if (logger.isLoggable(Logger.LEVEL_INFO) ||
  -                        logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +                    if (logger.isLoggable(Logger.INFO)) {
                           logger.info(msg);
                       }
   
  +                    syncEvent = new
  +                        SyncEvent(SyncEvent.SYNC_ERROR       ,
  +                                  System.currentTimeMillis() ,
  +                                  e.getMessage()             ,
  +                                  e                          );
  +
  +                    fireSyncEvent(syncEvent);
  +
  +
                   } catch (SyncException e) {
   
                       String msg = "Error committing synchronization of source 
" +
  @@ -653,19 +744,29 @@
                                     ": "                                       
  +
                                     e.getMessage()                             
  ;
   
  -                    if (logger.isLoggable(Logger.LEVEL_INFO) ||
  -                        logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +                    if (logger.isLoggable(Logger.INFO)) {
                           logger.info(msg);
                       }
   
  +                    syncEvent = new
  +                        SyncEvent(SyncEvent.SYNC_ERROR       ,
  +                                  System.currentTimeMillis() ,
  +                                  e.getMessage()             ,
  +                                  e                          );
  +
  +                    fireSyncEvent(syncEvent);
  +
                   }
   
               }
   
  +            syncEvent = new SyncEvent(SyncEvent.SYNC_END       ,
  +                                                System.currentTimeMillis() );
  +            fireSyncEvent(syncEvent);
  +
           } catch (AuthenticationException e) {
   
  -            if (logger.isLoggable(Logger.LEVEL_INFO) ||
  -                logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +            if (logger.isLoggable(Logger.INFO)) {
                   logger.info(e.getMessage());
               }
   
  @@ -673,8 +774,7 @@
   
           } catch (UpdateException e)         {
   
  -            if (logger.isLoggable(Logger.LEVEL_INFO) ||
  -                logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +            if (logger.isLoggable(Logger.INFO)) {
                   logger.info(e.getMessage());
               }
   
  @@ -682,8 +782,7 @@
   
           } catch (SyncException e)           {
   
  -            if (logger.isLoggable(Logger.LEVEL_INFO) ||
  -                logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +            if (logger.isLoggable(Logger.INFO)) {
                   logger.info(e.getMessage());
               }
   
  @@ -693,6 +792,182 @@
   
       }
   
  +    /**
  +     * Register a new SyncListener.
  +     *
  +     * @param listener
  +     */
  +    public void addSyncListener             (SyncListener          listener) 
{
  +        syncListeners.addElement(listener);
  +    }
  +
  +    /**
  +     * Remove the specified SyncListener.
  +     *
  +     * @param listener
  +     */
  +    public void removeSyncListener          (SyncListener          listener) 
{
  +        syncListeners.removeElement(listener);
  +    }
  +
  +    /**
  +     * Register a new SyncTransportListener.
  +     *
  +     * @param listener
  +     */
  +    public void addSyncTransportListener    (SyncTransportListener listener) 
{
  +        syncTransportListeners.addElement(listener);
  +    }
  +
  +    /**
  +     * Remove the specified SyncTransportListener.
  +     *
  +     * @param listener
  +     */
  +    public void removeSyncTransportListener (SyncTransportListener listener) 
{
  +        syncTransportListeners.removeElement(listener);
  +    }
  +
  +    /**
  +     * Register a new SyncSourceListener.
  +     *
  +     * @param listener
  +     */
  +    public void addSyncSourceListener       (SyncSourceListener    listener) 
{
  +        syncSourceListeners.addElement(listener);
  +    }
  +
  +    /**
  +     * Remove the specified SyncSourceListener.
  +     *
  +     * @param listener
  +     */
  +    public void removeSyncSourceListener    (SyncSourceListener    listener) 
{
  +        syncSourceListeners.removeElement(listener);
  +    }
  +
  +    /**
  +     * Register a new SyncItemListener.
  +     *
  +     * @param listener
  +     */
  +    public void addSyncItemListener         (SyncItemListener      listener) 
{
  +        syncItemListeners.addElement(listener);
  +    }
  +
  +    /**
  +     * Remove the specified SyncItemListener.
  +     *
  +     * @param listener
  +     */
  +    public void removeSyncItemListener      (SyncItemListener      listener) 
{
  +        syncItemListeners.removeElement(listener);
  +    }
  +
  +    /**
  +     * Register a new SyncStatusListener.
  +     *
  +     * @param listener
  +     */
  +    public void addSyncStatusListener       (SyncStatusListener    listener) 
{
  +        syncStatusListeners.addElement(listener);
  +    }
  +
  +    /**
  +     * Remove the specified SyncStatusListener.
  +     *
  +     * @param listener
  +     */
  +    public void removeSyncStatusListener    (SyncStatusListener    listener) 
{
  +        syncStatusListeners.removeElement(listener);
  +    }
  +
  +
  +    /**
  +     * Send syncTransportEvent to syncTransportListeners
  +     * on sendDataBegin method.
  +     *
  +     * @param syncTransportEvent
  +     */
  +    public void sendDataBegin(SyncTransportEvent syncTransportEvent) {
  +
  +        for (int i = 0, l = syncTransportListeners.size(); i < l; i++) {
  +
  +            ((SyncTransportListener)
  +                syncTransportListeners.elementAt(i)).
  +                    sendDataBegin(syncTransportEvent);
  +        }
  +
  +    }
  +
  +    /**
  +     * Send syncTransportEvent to syncTransportListeners
  +     * on sendDataEnd method.
  +     *
  +     * @param syncTransportEvent
  +     */
  +    public void sendDataEnd(SyncTransportEvent syncTransportEvent) {
  +
  +        for (int i = 0, l = syncTransportListeners.size(); i < l; i++) {
  +
  +            ((SyncTransportListener)
  +                syncTransportListeners.elementAt(i)).
  +                    sendDataEnd(syncTransportEvent);
  +        }
  +
  +    }
  +
  +    /**
  +     * Send syncTransportEvent to syncTransportListeners
  +     * on receiveDataBegin method.
  +     *
  +     * @param syncTransportEvent
  +     */
  +    public void receiveDataBegin(SyncTransportEvent syncTransportEvent) {
  +
  +        for (int i = 0, l = syncTransportListeners.size(); i < l; i++) {
  +
  +            ((SyncTransportListener)
  +                syncTransportListeners.elementAt(i)).
  +                    receiveDataBegin(syncTransportEvent);
  +        }
  +
  +    }
  +
  +    /**
  +     * Send syncTransportEvent to syncTransportListeners
  +     * on dataReceived method.
  +     *
  +     * @param syncTransportEvent
  +     */
  +    public void dataReceived(SyncTransportEvent syncTransportEvent) {
  +
  +        for (int i = 0, l = syncTransportListeners.size(); i < l; i++) {
  +
  +            ((SyncTransportListener)
  +                syncTransportListeners.elementAt(i)).
  +                    dataReceived(syncTransportEvent);
  +        }
  +
  +    }
  +
  +    /**
  +     * Send syncTransportEvent to syncTransportListeners
  +     * on receiveDataEnd method.
  +     *
  +     * @param syncTransportEvent
  +     */
  +    public void receiveDataEnd(SyncTransportEvent syncTransportEvent) {
  +
  +        for (int i = 0, l = syncTransportListeners.size(); i < l; i++) {
  +
  +            ((SyncTransportListener)
  +                syncTransportListeners.elementAt(i)).
  +                    receiveDataEnd(syncTransportEvent);
  +        }
  +
  +    }
  +
       //---------------------------------------------------------- Private 
methods
   
       /**
  @@ -718,8 +993,7 @@
           checkStatus(response, TAG_SYNCHDR ) ;
           checkStatus(response, TAG_ALERT   ) ;
   
  -        if (logger.isLoggable(Logger.LEVEL_INFO) ||
  -            logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +        if (logger.isLoggable(Logger.INFO)) {
               logger.info("Initialization done");
           }
   
  @@ -738,8 +1012,7 @@
   
           String response = null;
   
  -        if (logger.isLoggable(Logger.LEVEL_INFO) ||
  -            logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +        if (logger.isLoggable(Logger.INFO)) {
               logger.info("Sending modifications");
           }
   
  @@ -757,6 +1030,35 @@
       }
   
       /**
  +     * Synch Modification.
  +     *
  +     * @throws UpdateException
  +     * @return sync modification response
  +     **/
  +    private String sendAlertMessage()
  +    throws SyncException {
  +
  +        String response = null;
  +
  +        if (logger.isLoggable(Logger.INFO) ||
  +            logger.isLoggable(Logger.DEBUG)) {
  +            logger.info("Sending modifications");
  +        }
  +
  +        try {
  +            response = postRequest(alertXML);
  +        } catch(SyncException e) {
  +            String msg = "Error sync modification: " + e.getMessage();
  +            throw new SyncException(msg);
  +        } catch (Exception e) {
  +            String msg = "Error sync modification: " + e.getMessage();
  +            throw new SyncException(msg);
  +        }
  +
  +        return response;
  +    }
  +
  +    /**
        * Sync LUID-GUID mapping.
        *
        * @throws UpdateException
  @@ -765,8 +1067,7 @@
       private void syncMapping()
       throws SyncException {
   
  -        if (logger.isLoggable(Logger.LEVEL_INFO) ||
  -            logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +        if (logger.isLoggable(Logger.INFO)) {
               logger.info("Sending mapping");
           }
   
  @@ -777,8 +1078,7 @@
               throw new SyncException(msg);
           }
   
  -        if (logger.isLoggable(Logger.LEVEL_INFO) ||
  -            logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +        if (logger.isLoggable(Logger.INFO)) {
               logger.info("Synchronization done");
           }
   
  @@ -807,8 +1107,12 @@
               }
   
               try {
  +
                   syncMLClient = (BaseSyncMLClient)
                       (Class.forName(syncMLClientClassName)).newInstance();
  +
  +                syncMLClient.addSyncTransportListener(this);
  +
               } catch (Exception e) {
                   throw new SyncException ("Error loading class " +
                                            syncMLClientClassName  +
  @@ -874,6 +1178,11 @@
                           // 212
                           //
                           return;
  +                    } else if 
(String.valueOf(StatusCode.REFRESH_REQUIRED).equals(statusCode)) {
  +                        //
  +                        // 508
  +                        //
  +                        return;
                       } else if 
(String.valueOf(StatusCode.INVALID_CREDENTIALS).equals(statusCode)   ||
                                  String.valueOf(StatusCode.FORBIDDEN).equals   
       (statusCode)   ||
                                  
String.valueOf(StatusCode.MISSING_CREDENTIALS).equals(statusCode))      {
  @@ -958,8 +1267,7 @@
                                " is "                       +
                                alert                        ;
   
  -            if (logger.isLoggable(Logger.LEVEL_INFO) ||
  -                logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +            if (logger.isLoggable(Logger.INFO)) {
                   logger.info(logMsg);
               }
   
  @@ -974,7 +1282,6 @@
       private void prepareInizializationMessage()
       throws SyncException {
   
  -        String sessionId           = null ;
           String username            = null ;
           String password            = null ;
           String userKey             = null ;
  @@ -988,7 +1295,6 @@
   
           authenticationType = (String) syncParams.get(PARAM_AUTHENTICATION) ;
   
  -
           username =  (String) syncParams.get(PARAM_USERNAME)   ;
           password =  (String) syncParams.get(PARAM_PASSWORD)   ;
   
  @@ -1012,11 +1318,8 @@
               throw new SyncException("Configuration error, authentication 
type");
           }
   
  -
           targetLocUri = (String) syncParams.get(PARAM_TARGETLOCALURI ) ;
           deviceId     = (String) syncParams.get(PARAM_DEVICEID       ) ;
  -        sessionId    = "12345678";
  -
   
           int l = sourceURIs.length;
   
  @@ -1027,7 +1330,7 @@
           clientInitXML = MessageFormat.format(
               clientInitXML,
               new Object[] {
  -                sessionId                ,
  +                SESSION_ID               ,
                   targetLocUri             ,
                   userKey                  ,
                   dbAlertsXML.toString()   ,
  @@ -1064,32 +1367,132 @@
           //
           boolean ret = false;
   
  +        //
  +        // about status command
  +        //
  +        Vector       sourceUris     = null  ;
  +        String       sourceUri      = null  ;
  +        String       status         = null  ;
  +        String       cmdName        = null  ;
  +        SyncItemKey  key            = null  ;
  +        Item      [] items          = null  ;
  +        SourceRef [] sr             = null  ;
  +        TargetRef [] tr             = null  ;
  +        int          sourceUriCount = 0     ;
  +        boolean      added          = false ;
  +        boolean      updated        = false ;
  +        boolean      deleted        = false ;
  +
  +        sourceUris = new Vector();
  +
           for (int i=0; (cmds != null) && (i<cmds.length); ++i) {
   
  +            //
  +            // process sync command
  +            //
               if (SyncCommand.COMMAND_NAME.equals(cmds[i].getName())) {
  +
                   processSyncCommand((SyncCommand)cmds[i], msgRef);
                   ret = true;
   
  -                if (logger.isLoggable(Logger.LEVEL_INFO) ||
  -                    logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +                if (logger.isLoggable(Logger.INFO)) {
   
                       String source =((SyncCommand) 
cmds[i]).getTarget().getURI();
   
                       logger.info("Returned "           +
  -                                returnNewItems        +
  +                                receivedNewItems      +
                                   " new items, "        +
  -                                returnUpdateItems     +
  +                                receivedUpdateItems   +
                                   " updated items, "    +
  -                                returnDeleteItems     +
  +                                receivedDeleteItems   +
                                   " deleted items for " +
                                   source                );
                   }
   
  -                returnNewItems    = 0 ;
  -                returnUpdateItems = 0 ;
  -                returnDeleteItems = 0 ;
  +                receivedNewItems    = 0 ;
  +                receivedUpdateItems = 0 ;
  +                receivedDeleteItems = 0 ;
  +
  +            //
  +            // process status command
  +            //
  +            } else if (StatusCommand.COMMAND_NAME.equals(cmds[i].getName())) 
{
  +
  +                cmdName = ((StatusCommand) cmds[i]).getCommandName();
  +
  +                if (cmdName.equals("Sync")) {
  +                    tr = ((StatusCommand) cmds[i]).getTargetRefs();
  +                    sourceUris.addElement(tr[0].toString());
  +                }
  +
  +                if (cmdName.equals("Add"     ) ||
  +                    cmdName.equals("Replace" ) ||
  +                    cmdName.equals("Delete"  ))   {
  +
  +                    if (cmdName.equals       ("Add"    )) {
  +                        added = true;
  +                    } else if (cmdName.equals("Replace")) {
  +                        updated = true;
  +                    } else if (cmdName.equals("Delete" )) {
  +                        deleted = true;
  +                    }
  +
  +                    //
  +                    // sourceUri about item
  +                    //
  +                    if ((cmdName.equals("Add"    ) && added   ) ||
  +                        (cmdName.equals("Update" ) && updated ) ||
  +                        (cmdName.equals("Delete" ) && deleted )) {
  +                         sourceUriCount++;
  +                    }
  +
  +                    sourceUri      = (String) 
sourceUris.elementAt(sourceUriCount)  ;
  +                    sr             = ((StatusCommand) 
cmds[i]).getSourceRefs()      ;
  +                    status         = ((StatusCommand) 
cmds[i]).getData().toString() ;
  +
  +                    //
  +                    // 1 status item
  +                    //
  +                    if (sr != null && sr.length > 0) {
  +
  +                        key = new SyncItemKey(sr[0].toString());
  +
  +                        syncStatusEvent = new
  +                            SyncStatusEvent (SyncStatusEvent.STATUS_RECEIVED 
,
  +                                             cmdName                         
,
  +                                             Integer.parseInt(status)        
,
  +                                             key                             
,
  +                                             sourceUri                       
);
  +
  +                        fireSyncStatusEvent(syncStatusEvent);
  +
  +                    //
  +                    // more than 1 status items
  +                    //
  +                    } else {
  +
  +                        items = ((StatusCommand) cmds[i]).getItems();
  +
  +                        for (int k = 0, m = items.length; k < m; k++) {
  +                            key = new 
SyncItemKey(items[k].getSource().getURI());
  +
  +                            syncStatusEvent = new
  +                            SyncStatusEvent (SyncStatusEvent.STATUS_RECEIVED 
,
  +                                             cmdName                         
,
  +                                             Integer.parseInt(status)        
,
  +                                             key                             
,
  +                                             sourceUri                       
);
  +
  +                            fireSyncStatusEvent(syncStatusEvent);
  +
  +                        }
  +                    }
  +
  +                }
  +
   
               }
  +
           }
   
           return ret;
  @@ -1135,6 +1538,7 @@
           }
       }
   
  +
       /**
        * Performs a modification command on the given store calling 
modifyRecords().
        * This implementation handles only Add, Delete and Replace commands; 
all other
  @@ -1316,7 +1720,6 @@
       private void prepareModificationMessage()
       throws SyncException {
   
  -        String sessionId      = null;
           String targetLocUri   = null;
           String deviceId       = null;
   
  @@ -1324,7 +1727,6 @@
   
           targetLocUri = (String) syncParams.get(PARAM_TARGETLOCALURI ) ;
           deviceId     = (String) syncParams.get(PARAM_DEVICEID       ) ;
  -        sessionId = "12345678";
   
           StringBuffer syncTag = new StringBuffer();
   
  @@ -1338,7 +1740,7 @@
               // Note we must sync only the sources that are aknoledged by the
               // server with a server Alert command.
               //
  -            if (logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +            if (logger.isLoggable(Logger.DEBUG)) {
                   logger.debug("serverAlerts: " + serverAlerts);
               }
   
  @@ -1349,8 +1751,7 @@
                                sourceURIs[i]                            +
                                ". The source will not be synchronized." ;
   
  -                if (logger.isLoggable(Logger.LEVEL_INFO) ||
  -                    logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +                if (logger.isLoggable(Logger.INFO)) {
                       logger.info(msg);
                   }
   
  @@ -1363,13 +1764,11 @@
                   //
                   // Slow Sync!
                   //
  -                if (logger.isLoggable(Logger.LEVEL_INFO) ||
  -                    logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +                if (logger.isLoggable(Logger.INFO)) {
                       logger.info("Preparing slow sync for " + sourceURIs[i]);
                   }
                   items = filterRecordsForSlowSync(sourceURIs[i]);
  -                if (logger.isLoggable(Logger.LEVEL_INFO) ||
  -                    logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +                if (logger.isLoggable(Logger.INFO)) {
                       logger.info("Detected " + items.size() + " items");
                   }
   
  @@ -1377,42 +1776,36 @@
                   //
                   // Refresh from server
                   //
  -                if (logger.isLoggable(Logger.LEVEL_INFO) ||
  -                    logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +                if (logger.isLoggable(Logger.INFO)) {
                       logger.info("Preparing refresh for " + sourceURIs[i]);
                   }
                   items = new Vector(); // no items sent for refresh
  -                if (logger.isLoggable(Logger.LEVEL_INFO) ||
  -                    logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +                if (logger.isLoggable(Logger.INFO)) {
                       logger.info("No items sent for refresh");
                   }
               } else if (alertCode == AlertCode.ONE_WAY_FROM_SERVER) {
                   //
                   // One-way sync from server: no needs of client modifications
                   //
  -                if (logger.isLoggable(Logger.LEVEL_INFO) ||
  -                    logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +                if (logger.isLoggable(Logger.INFO)) {
                       logger.info("Preparing one-way sync for " + 
sourceURIs[i]);
                   }
                   items = new Vector(); // no items sent for one-way
  -                if (logger.isLoggable(Logger.LEVEL_INFO) ||
  -                    logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +                if (logger.isLoggable(Logger.INFO)) {
                       logger.info("No items sent for one-way");
                   }
               } else {
                   //
                   // Fast Sync!
                   //
  -                if (logger.isLoggable(Logger.LEVEL_INFO) ||
  -                    logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +                if (logger.isLoggable(Logger.INFO)) {
                       logger.info("Preparing fast sync for " + sourceURIs[i]);
                   }
                   //
                   // NOTE: filterRecordsForFastSync returns items in updated 
state
                   //
                   items = filterRecordsForFastSync(sourceURIs[i]);
  -                if (logger.isLoggable(Logger.LEVEL_INFO) ||
  -                    logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +                if (logger.isLoggable(Logger.INFO)) {
                       logger.info("Detected "           +
                                    detectedNewItems     +
                                    " new items, "       +
  @@ -1433,7 +1826,7 @@
          }
   
          modificationsXML =
  -          MessageFormat.format(modificationsXML, new Object[] {sessionId    ,
  +          MessageFormat.format(modificationsXML, new Object[] {SESSION_ID   ,
                                                                  targetLocUri ,
                                                                  deviceId     ,
                                                                  deviceId     ,
  @@ -1441,6 +1834,27 @@
                                                                  
syncTag.toString()});
       }
   
  +    /**
  +     * Prepare alert message
  +     *
  +     **/
  +    private void prepareAlertMessage() {
  +
  +        String targetLocUri   = null;
  +        String deviceId       = null;
  +
  +        targetLocUri = (String) syncParams.get(PARAM_TARGETLOCALURI ) ;
  +        deviceId     = (String) syncParams.get(PARAM_DEVICEID       ) ;
  +
  +        alertXML =
  +                  MessageFormat.format(alertXML, new Object[] {SESSION_ID   ,
  +                                                               url          ,
  +                                                               deviceId     ,
  +                                                               url          ,
  +                                                               deviceId     ,
  +                                                               targetLocUri ,
  +                                                               deviceId     
});
  +    }
   
       /**
        * Prepare mapping message
  @@ -1449,7 +1863,6 @@
       private void prepareMappingMessage() {
   
           Hashtable  sourceMapping  = null ;
  -        String     sessionId      = null ;
           String     targetLocUri   = null ;
           String     deviceId       = null ;
   
  @@ -1457,7 +1870,6 @@
   
           targetLocUri = (String) syncParams.get(PARAM_TARGETLOCALURI ) ;
           deviceId     = (String) syncParams.get(PARAM_DEVICEID       ) ;
  -        sessionId    = "12345678"                                ;
   
           StringBuffer mapTag = new StringBuffer();
   
  @@ -1506,7 +1918,7 @@
           }
   
           mappingXML =
  -            MessageFormat.format(mappingXML, new Object[] {sessionId    ,
  +            MessageFormat.format(mappingXML, new Object[] {SESSION_ID   ,
                                                              targetLocUri ,
                                                              deviceId     ,
                                                              deviceId     ,
  @@ -1531,11 +1943,14 @@
   
           basePath = rootNode.getContext();
   
  -        clientInitXML    = read(new FileInputStream(basePath + 
XML_INITIALIZATION));
  -
  -        modificationsXML = read(new FileInputStream(basePath + 
XML_MODIFICATIONS));
  -
  -        mappingXML       = read(new FileInputStream(basePath + XML_MAPPING));
  +        alertXML         = read
  +            (new FileInputStream (basePath + XML_ALERT          ));
  +        clientInitXML    = read
  +            (new FileInputStream (basePath + XML_INITIALIZATION ));
  +        modificationsXML = read
  +            (new FileInputStream (basePath + XML_MODIFICATIONS  ));
  +        mappingXML       = read
  +            (new FileInputStream (basePath + XML_MAPPING        ));
       }
   
   
  @@ -1713,6 +2128,14 @@
               detectedNewItems = items.length;
               for (int i=0; i < detectedNewItems; i++) {
                   ret.addElement(items[i]);
  +
  +                syncItemEvent = new
  +                    SyncItemEvent(SyncItemEvent.ITEM_ADDED_BY_CLIENT ,
  +                                  sourceURI                          ,
  +                                  items[i].getKey()                  );
  +
  +                fireSyncItemEvent(syncItemEvent);
  +
               }
           }
   
  @@ -1721,6 +2144,14 @@
               detectedUpdateItems = items.length;
               for (int i=0; i < detectedUpdateItems; i++) {
                   ret.addElement(items[i]);
  +
  +                syncItemEvent = new
  +                    SyncItemEvent(SyncItemEvent.ITEM_UPDATED_BY_CLIENT ,
  +                                  sourceURI                            ,
  +                                  items[i].getKey()                    );
  +
  +                fireSyncItemEvent(syncItemEvent);
  +
               }
           }
   
  @@ -1729,6 +2160,14 @@
               detectedDeleteItems = items.length;
               for (int i=0; i < detectedDeleteItems; i++) {
                   ret.addElement(items[i]);
  +
  +                syncItemEvent = new
  +                    SyncItemEvent(SyncItemEvent.ITEM_DELETED_BY_CLIENT ,
  +                                  sourceURI                            ,
  +                                  items[i].getKey()                    );
  +
  +                fireSyncItemEvent(syncItemEvent);
  +
               }
           }
   
  @@ -1829,38 +2268,68 @@
                               newItem.getKey().getKeyAsString(),
                               item.getKey().getKeyAsString()
                           );
  -                        returnNewItems ++;
  +                        receivedNewItems ++;
  +                        syncItemEvent = new
  +                            SyncItemEvent(SyncItemEvent.ITEM_ADDED_BY_SERVER 
,
  +                                          syncSource.getSourceURI()          
,
  +                                          item.getKey()                      
);
  +
  +                        fireSyncItemEvent(syncItemEvent);
                           break;
                       case SyncItemState.UPDATED:
  -                        syncSource.setSyncItem
  -                            (null,
  -                             syncOperations[i].getSyncItem() );
  -                        returnUpdateItems ++;
  +
  +                        SyncItem syncItem = syncOperations[i].getSyncItem();
  +
  +                        syncSource.setSyncItem (null,syncItem );
  +                        receivedUpdateItems ++;
  +                        syncItemEvent = new
  +                            
SyncItemEvent(SyncItemEvent.ITEM_UPDATED_BY_SERVER ,
  +                                          syncSource.getSourceURI()          
  ,
  +                                          syncItem.getKey()                  
  );
  +
  +                        fireSyncItemEvent(syncItemEvent);
                           break;
                       case SyncItemState.DELETED:
  -                        syncSource.removeSyncItem
  -                            (null,
  -                             syncOperations[i].getSyncItem() );
  -                        returnDeleteItems ++;
  +
  +                        syncItem = syncOperations[i].getSyncItem();
  +
  +                        syncSource.removeSyncItem (null, syncItem);
  +                        receivedDeleteItems ++;
  +                        syncItemEvent = new
  +                            
SyncItemEvent(SyncItemEvent.ITEM_DELETED_BY_SERVER ,
  +                                          syncSource.getSourceURI()          
  ,
  +                                          syncItem.getKey()                  
  );
  +
  +                        fireSyncItemEvent(syncItemEvent);
                           break;
                   }
   
                   itemStatus = StatusCode.OK;
   
               } catch (SyncException e) {
  -                             if (logger.isLoggable(Logger.LEVEL_INFO) ||
  -                    logger.isLoggable(Logger.LEVEL_DEBUG)) {
  -                                 logger.info( "Error setting the item "
  -                                            + item.getKey().getKeyAsString()
  -                                            + ": "
  -                                            + e.getMessage()
  -                                            + "\nCaused by: "
  -                                            + ( (e.getCause() != null)
  -                                              ? e.getCause().getMessage()
  -                                              : "(not available)")
  -                                            );
  -                         }
  +                if (logger.isLoggable(Logger.INFO)) {
  +                    logger.info( "Error setting the item "
  +                               + item.getKey().getKeyAsString()
  +                               + ": "
  +                               + e.getMessage()
  +                               + "\nCaused by: "
  +                               + ( (e.getCause() != null)
  +                                 ? e.getCause().getMessage()
  +                                 : "(not available)")
  +                               );
  +                }
  +
                   itemStatus = StatusCode.COMMAND_FAILED;
  +
  +                syncEvent = new
  +                    SyncEvent(SyncEvent.SYNC_ERROR       ,
  +                              System.currentTimeMillis() ,
  +                              e.getMessage()             ,
  +                              e                          );
  +
  +                    fireSyncEvent(syncEvent);
  +
  +
               }
   
               if (syncOperations[i].getOperation() == SyncItemState.NEW ) {
  @@ -1880,6 +2349,14 @@
                                           String.valueOf(itemStatus)
                                       }
                                    );
  +            syncStatusEvent = new
  +                SyncStatusEvent(SyncStatusEvent.STATUS_TO_SEND ,
  +                                cmdName                        ,
  +                                itemStatus                     ,
  +                                item.getKey()                  ,
  +                                syncSource.getSourceURI()      );
  +
  +                fireSyncStatusEvent(syncStatusEvent);
   
           }
   
  @@ -2056,8 +2533,7 @@
           }
   
   
  -        if (logger.isLoggable(Logger.LEVEL_INFO) ||
  -            logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +        if (logger.isLoggable(Logger.INFO)) {
               logger.info("Sync mode " + sync + " not recognized. Using 
two-way");
           }
   
  @@ -2089,11 +2565,18 @@
                            sourceURI                               +
                            " not synchronized"                     ;
   
  -            if (logger.isLoggable(Logger.LEVEL_INFO) ||
  -                logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +            if (logger.isLoggable(Logger.INFO)) {
                   logger.info(msg);
               }
   
  +            syncEvent = new
  +                SyncEvent(SyncEvent.SYNC_ERROR       ,
  +                          System.currentTimeMillis() ,
  +                          e.getMessage()             ,
  +                          e                          );
  +
  +            fireSyncEvent(syncEvent);
  +
               return false;
           }
   
  @@ -2149,11 +2632,18 @@
                            ") for "                                  +
                            sourceURI                                 ;
   
  -             if (logger.isLoggable(Logger.LEVEL_INFO) ||
  -                logger.isLoggable(Logger.LEVEL_DEBUG)) {
  +             if (logger.isLoggable(Logger.INFO)) {
                   logger.info(msg);
                }
   
  +             syncEvent = new
  +                 SyncEvent(SyncEvent.SYNC_ERROR       ,
  +                           System.currentTimeMillis() ,
  +                           t.getMessage()             ,
  +                           t                          );
  +
  +             fireSyncEvent(syncEvent);
  +
           }
   
           return -1;
  @@ -2355,7 +2845,7 @@
           }
   
           if (logLevel == null || logLevel.length() == 0)            {
  -            Logger.setDefaultLoggerLevel();
  +            Logger.setDefaultLevel();
           } else if (!logLevel.equals(Logger.PROP_NONE) &&
                      !logLevel.equals(Logger.PROP_INFO) &&
                      !logLevel.equals(Logger.PROP_DEBUG))              {
  @@ -2364,7 +2854,7 @@
                                       "incorrect  log-level: "    +
                                       logLevel                    );
           } else  {
  -            Logger.setLoggerLevel(logLevel);
  +            Logger.setLevel(logLevel);
           }
   
           if (logFile == null || logFile.length() == 0)              {
  @@ -2417,5 +2907,146 @@
   
       }
   
  +    /**
  +     * Fire SyncEvent
  +     * to syncListeners.
  +     *
  +     * @param syncEvent
  +     */
  +    private void fireSyncEvent(SyncEvent syncEvent) {
  +
  +        for (int i = 0, l = syncListeners.size(); i < l; i++) {
  +
  +            if (syncEvent.getType() ==
  +                        SyncEvent.SYNC_BEGIN)           {
  +                ((SyncListener)
  +                    syncListeners.elementAt(i)).
  +                        syncBegin(syncEvent);
  +            } else if (syncEvent.getType() ==
  +                    SyncEvent.SYNC_END)                 {
  +                ((SyncListener)
  +                    syncListeners.elementAt(i)).
  +                        syncEnd(syncEvent);
  +            } else if (syncEvent.getType() ==
  +                        SyncEvent.SYNC_ERROR)           {
  +                ((SyncListener)
  +                    syncListeners.elementAt(i)).
  +                        syncError(syncEvent);
  +            } else if (syncEvent.getType() ==
  +                        SyncEvent.SEND_INITIALIZATION)  {
  +                ((SyncListener)
  +                    syncListeners.elementAt(i)).
  +                        sendInitialization(syncEvent);
  +            } else if (syncEvent.getType() ==
  +                        SyncEvent.SEND_MODIFICATION)    {
  +                ((SyncListener)
  +                    syncListeners.elementAt(i)).
  +                        sendModification(syncEvent);
  +            } else if (syncEvent.getType() ==
  +                    SyncEvent.SEND_FINALIZATION)        {
  +                ((SyncListener)
  +                    syncListeners.elementAt(i)).
  +                        sendFinalization(syncEvent);
  +            }
  +
  +        }
  +
  +    }
  +
  +    /**
  +     * Fire SyncSourceEvent
  +     * to syncSourceListeners.
  +     *
  +     * @param syncSourceEvent
  +     */
  +    private void fireSyncSourceEvent(SyncSourceEvent syncSourceEvent) {
  +
  +        for (int i = 0, l = syncSourceListeners.size(); i < l; i++)  {
  +
  +            if (syncSourceEvent.getType() ==
  +                        syncSourceEvent.SYNC_BEGIN)    {
  +                ((SyncSourceListener)
  +                    syncSourceListeners.elementAt(i)).
  +                        syncBegin(syncSourceEvent);
  +            } else if (syncSourceEvent.getType() ==
  +                        syncSourceEvent.SYNC_END)      {
  +                ((SyncSourceListener)
  +                    syncSourceListeners.elementAt(i)).
  +                        syncEnd(syncSourceEvent);
  +            }
  +
  +        }
  +
  +    }
  +
  +    /**
  +     * Fire SyncItemEvent
  +     * to syncItemListeners.
  +     *
  +     * @param syncItemEvent
  +     */
  +    private void fireSyncItemEvent(SyncItemEvent syncItemEvent) {
  +
  +         for (int i = 0, l = syncItemListeners.size(); i < l; i++) {
  +
  +            if (syncItemEvent.getType() ==
  +                        SyncItemEvent.ITEM_ADDED_BY_SERVER)    {
  +                ((SyncItemListener)
  +                    syncItemListeners.elementAt(i)).
  +                        itemAddedByServer(syncItemEvent);
  +            } else if (syncItemEvent.getType() ==
  +                    SyncItemEvent.ITEM_DELETED_BY_SERVER)      {
  +                ((SyncItemListener)
  +                    syncItemListeners.elementAt(i)).
  +                        itemDeletedByServer(syncItemEvent);
  +            } else if (syncItemEvent.getType() ==
  +                        SyncItemEvent.ITEM_UPDATED_BY_SERVER)  {
  +                ((SyncItemListener)
  +                    syncItemListeners.elementAt(i)).
  +                        itemUpdatedByServer(syncItemEvent);
  +            } else if (syncItemEvent.getType() ==
  +                    SyncItemEvent.ITEM_ADDED_BY_CLIENT)        {
  +                ((SyncItemListener)
  +                    syncItemListeners.elementAt(i)).
  +                        itemAddedByClient(syncItemEvent);
  +            } else if (syncItemEvent.getType() ==
  +                    SyncItemEvent.ITEM_DELETED_BY_CLIENT)      {
  +                ((SyncItemListener)
  +                    syncItemListeners.elementAt(i)).
  +                        itemDeletedByClient(syncItemEvent);
  +            } else if (syncItemEvent.getType() ==
  +                    SyncItemEvent.ITEM_UPDATED_BY_CLIENT)      {
  +                ((SyncItemListener)
  +                    syncItemListeners.elementAt(i)).
  +                        itemUpdatedByClient(syncItemEvent);
  +            }
  +
  +        }
  +
  +    }
  +
  +    /**
  +     * Fire SyncStatusEvent
  +     * to syncStatusListeners.
  +     *
  +     * @param syncStatusEvent
  +     */
  +    private void fireSyncStatusEvent(SyncStatusEvent syncStatusEvent) {
  +
  +        for (int i = 0, l = syncStatusListeners.size(); i < l; i++) {
  +            if (syncStatusEvent.getType() ==
  +                        syncStatusEvent.STATUS_TO_SEND)    {
  +                ((SyncStatusListener)
  +                    syncStatusListeners.elementAt(i)).
  +                        statusToSend(syncStatusEvent);
  +            } else if (syncStatusEvent.getType() ==
  +                    syncStatusEvent.STATUS_RECEIVED)      {
  +                ((SyncStatusListener)
  +                    syncStatusListeners.elementAt(i)).
  +                        statusReceived(syncStatusEvent);
  +            }
  +
  +        }
  +    }
   
   }
  \ No newline at end of file
  

Reply via email to