コード例 #1
0
  protected int addItem(SyncItem item) throws SyncException {
    if (Log.isLoggable(Log.DEBUG)) {
      Log.debug(TAG_LOG, "addItem");
    }
    JSONSyncItem jsonSyncItem = (JSONSyncItem) item;
    try {
      String fullName = getFileFullName(jsonSyncItem.getContentName());

      FileAdapter tgtFile = new FileAdapter(fullName);
      if (tgtFile.exists()) {
        // This is the case where the client and the server have a file
        // with the very same name but different content. In this case
        // we rename the destination file
        fullName = createUniqueFileName(fullName);
        if (Log.isLoggable(Log.INFO)) {
          Log.info(TAG_LOG, "Changing target file name to avoid clashing " + fullName);
        }
      }
      tgtFile.close();

      item.setKey(fullName);
      if (Log.isLoggable(Log.DEBUG)) {
        Log.debug(TAG_LOG, "key set to:" + fullName);
      }
      // This is a new file, rename the temp file
      String sourceFileName = createTempFileName(jsonSyncItem.getContentName());
      renameTempFile(sourceFileName, fullName);

      super.addItem(item);
      return SyncSource.SUCCESS_STATUS;
    } catch (IOException ioe) {
      Log.error(TAG_LOG, "Cannot rename temporary file", ioe);
      throw new SyncException(SyncException.CLIENT_ERROR, "Cannot rename temporary file");
    }
  }
コード例 #2
0
 protected int updateItem(SyncItem item) throws SyncException {
   if (Log.isLoggable(Log.DEBUG)) {
     Log.debug(TAG_LOG, "updateItem");
   }
   JSONSyncItem jsonSyncItem = (JSONSyncItem) item;
   try {
     String fullName = getFileFullName(jsonSyncItem.getContentName());
     item.setKey(fullName);
     if (Log.isLoggable(Log.DEBUG)) {
       Log.debug(TAG_LOG, "key set to:" + fullName);
     }
     if (jsonSyncItem.isItemKeyUpdated()) {
       // Update the tracker of the renamed item
       // Must be done before renaming the file since the rename
       // event will be notified to the tracker itself
       getTracker()
           .removeItem(new SyncItem(jsonSyncItem.getOldKey(), null, SyncItem.STATE_DELETED, null));
       getTracker()
           .removeItem(new SyncItem(jsonSyncItem.getKey(), null, SyncItem.STATE_NEW, null));
     }
     if (jsonSyncItem.isItemContentUpdated()) {
       // The new content has been downloaded into a temporary file
       String sourceFileName = createTempFileName(jsonSyncItem.getContentName());
       renameTempFile(sourceFileName, fullName);
       if (jsonSyncItem.isItemKeyUpdated()) {
         // We shall remove the old file
         String oldFileName = jsonSyncItem.getOldKey();
         FileAdapter fa = new FileAdapter(oldFileName);
         fa.delete();
       }
     } else if (jsonSyncItem.isItemKeyUpdated()) {
       // This is just a rename
       String sourceFileName = jsonSyncItem.getOldKey();
       renameTempFile(sourceFileName, fullName);
     }
     super.updateItem(item);
     return SyncSource.SUCCESS_STATUS;
   } catch (IOException ioe) {
     Log.error(TAG_LOG, "Cannot rename temporary file", ioe);
     throw new SyncException(SyncException.CLIENT_ERROR, "Cannot rename temporary file");
   }
 }
コード例 #3
0
  /**
   * Twin detection implementation
   *
   * @param item
   * @return the twin sync item, whose key is the LUID
   */
  public SyncItem findTwin(SyncItem item) {

    if (item instanceof JSONSyncItem) {

      JSONFileObject json = ((JSONSyncItem) item).getJSONFileObject();
      String fileName = json.getName();
      String fullName = getFileFullName(fileName);

      // Does this existing in our directory?
      if (Log.isLoggable(Log.DEBUG)) {
        Log.debug(TAG_LOG, "Checking for twin for: " + fileName);
      }
      FileAdapter fa = null;
      try {
        fa = new FileAdapter(fullName);
        if (fa.exists() && fa.getSize() == json.getSize()) {
          if (Log.isLoggable(Log.DEBUG)) {
            Log.debug(TAG_LOG, "Twin found");
          }
          item.setKey(fullName);
          return item;
        }
      } catch (Throwable t) {
        Log.error(TAG_LOG, "Cannot check for twins", t);
      } finally {
        if (fa != null) {
          try {
            fa.close();
          } catch (IOException ioe) {
          }
        }
      }
    }
    // No twin found
    return null;
  }