1 /* ownCloud Android client application 
   2  *   Copyright (C) 2012-2014 ownCloud Inc. 
   4  *   This program is free software: you can redistribute it and/or modify 
   5  *   it under the terms of the GNU General Public License version 2, 
   6  *   as published by the Free Software Foundation. 
   8  *   This program is distributed in the hope that it will be useful, 
   9  *   but WITHOUT ANY WARRANTY; without even the implied warranty of 
  10  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
  11  *   GNU General Public License for more details. 
  13  *   You should have received a copy of the GNU General Public License 
  14  *   along with this program.  If not, see <http://www.gnu.org/licenses/>. 
  18 package com
.owncloud
.android
.operations
.common
; 
  20 import com
.owncloud
.android
.datamodel
.FileDataStorageManager
; 
  21 import com
.owncloud
.android
.lib
.common
.OwnCloudClient
; 
  22 import com
.owncloud
.android
.lib
.common
.operations
.OnRemoteOperationListener
; 
  23 import com
.owncloud
.android
.lib
.common
.operations
.RemoteOperation
; 
  24 import com
.owncloud
.android
.lib
.common
.operations
.RemoteOperationResult
; 
  26 import android
.content
.Context
; 
  27 import android
.os
.Handler
; 
  31  * Operation which execution involves both interactions with an ownCloud server and 
  32  * with local data in the device. 
  34  * Provides methods to execute the operation both synchronously or asynchronously. 
  36  * @author David A. Velasco  
  38 public abstract class SyncOperation 
extends RemoteOperation 
{ 
  40     //private static final String TAG = SyncOperation.class.getSimpleName(); 
  42     private FileDataStorageManager mStorageManager
; 
  44     public FileDataStorageManager 
getStorageManager() { 
  45         return mStorageManager
; 
  50      * Synchronously executes the operation on the received ownCloud account. 
  52      * Do not call this method from the main thread. 
  54      * This method should be used whenever an ownCloud account is available, instead of {@link #execute(OwnCloudClient)}.  
  56      * @param account   ownCloud account in remote ownCloud server to reach during the execution of the operation. 
  57      * @param context   Android context for the component calling the method. 
  58      * @return          Result of the operation. 
  60     public RemoteOperationResult 
execute(FileDataStorageManager storageManager
, Context context
) { 
  61         if (storageManager 
== null
) { 
  62             throw new IllegalArgumentException("Trying to execute a sync operation with a NULL storage manager"); 
  64         if (storageManager
.getAccount() == null
) { 
  65             throw new IllegalArgumentException("Trying to execute a sync operation with a storage manager for a NULL account"); 
  67         mStorageManager 
= storageManager
; 
  68         return super.execute(mStorageManager
.getAccount(), context
); 
  73          * Synchronously executes the remote operation 
  75      * Do not call this method from the main thread. 
  77          * @param client        Client object to reach an ownCloud server during the execution of the operation. 
  78          * @return                      Result of the operation. 
  80         public RemoteOperationResult 
execute(OwnCloudClient client
, FileDataStorageManager storageManager
) { 
  81         if (storageManager 
== null
) 
  82             throw new IllegalArgumentException("Trying to execute a sync operation with a NULL storage manager"); 
  83         mStorageManager 
= storageManager
; 
  84                 return super.execute(client
); 
  89      * Asynchronously executes the remote operation 
  91      * This method should be used whenever an ownCloud account is available, instead of {@link #execute(OwnCloudClient)}.  
  93      * @param account           ownCloud account in remote ownCloud server to reach during the execution of the operation. 
  94      * @param context           Android context for the component calling the method. 
  95      * @param listener          Listener to be notified about the execution of the operation. 
  96      * @param listenerHandler   Handler associated to the thread where the methods of the listener objects must be called. 
  97      * @return                  Thread were the remote operation is executed. 
 100     public Thread execute(FileDataStorageManager storageManager, Context context, OnRemoteOperationListener listener, Handler listenerHandler, Activity callerActivity) { 
 101         if (storageManager == null) { 
 102             throw new IllegalArgumentException("Trying to execute a sync operation with a NULL storage manager"); 
 104         if (storageManager.getAccount() == null) { 
 105             throw new IllegalArgumentException("Trying to execute a sync operation with a storage manager for a NULL account"); 
 107         mStorageManager = storageManager; 
 108         return super.execute(storageManager.getAccount(), context, listener, listenerHandler, callerActivity); 
 114          * Asynchronously executes the remote operation 
 116          * @param client                        Client object to reach an ownCloud server during the execution of the operation. 
 117          * @param listener                      Listener to be notified about the execution of the operation. 
 118          * @param listenerHandler       Handler associated to the thread where the methods of the listener objects must be called. 
 119          * @return                                      Thread were the remote operation is executed. 
 121         public Thread 
execute(OwnCloudClient client
, FileDataStorageManager storageManager
, OnRemoteOperationListener listener
, Handler listenerHandler
) { 
 122         if (storageManager 
== null
) { 
 123             throw new IllegalArgumentException("Trying to execute a sync operation with a NULL storage manager"); 
 125         mStorageManager 
= storageManager
; 
 126         return super.execute(client
, listener
, listenerHandler
);