@@ -40,6 +40,8 @@ public class AVObject {
4040
4141 public static final String KEY_CLASSNAME = "className" ;
4242
43+ public static final String KEY_IGNORE_HOOKS = "__ignore_hooks" ;
44+
4345 private static final String INTERNAL_PATTERN = "^[\\ da-z][\\ d-a-z]*$" ;
4446 private static final Set <String > RESERVED_ATTRS = new HashSet <String >(
4547 Arrays .asList (KEY_CREATED_AT , KEY_UPDATED_AT , KEY_OBJECT_ID , KEY_ACL ));
@@ -60,6 +62,13 @@ public class AVObject {
6062 private volatile boolean fetchWhenSave = false ;
6163 protected volatile boolean totallyOverwrite = false ;
6264
65+ public enum Hook {
66+ beforeSave , afterSave , beforeUpdate , afterUpdate , beforeDelete , afterDelete ,
67+ }
68+
69+ @ JSONField (serialize = false )
70+ private Set <Hook > ignoreHooks = new TreeSet <Hook >();
71+
6372 /**
6473 * Default constructor.
6574 */
@@ -712,6 +721,9 @@ protected JSONObject generateChangedParam() {
712721 tmp .remove (KEY_CREATED_AT );
713722 tmp .remove (KEY_UPDATED_AT );
714723 tmp .remove (KEY_OBJECT_ID );
724+ if (ignoreHooks .size () > 0 ) {
725+ tmp .put (KEY_IGNORE_HOOKS , ignoreHooks );
726+ }
715727 return new JSONObject (tmp );
716728 }
717729
@@ -732,6 +744,10 @@ protected JSONObject generateChangedParam() {
732744 }
733745 }
734746
747+ if (ignoreHooks .size () > 0 ) {
748+ params .put (KEY_IGNORE_HOOKS , ignoreHooks );
749+ }
750+
735751 if (!needBatchMode ()) {
736752 return new JSONObject (params );
737753 }
@@ -1150,10 +1166,14 @@ public void onComplete() {
11501166 * @return observable instance.
11511167 */
11521168 public Observable <AVNull > deleteInBackground () {
1169+ Map <String , Object > ignoreParam = new HashMap <>();
1170+ if (ignoreHooks .size () > 0 ) {
1171+ ignoreParam .put (KEY_IGNORE_HOOKS , ignoreHooks );
1172+ }
11531173 if (totallyOverwrite ) {
1154- return PaasClient .getStorageClient ().deleteWholeObject (this .endpointClassName , getObjectId ());
1174+ return PaasClient .getStorageClient ().deleteWholeObject (this .endpointClassName , getObjectId (), ignoreParam );
11551175 }
1156- return PaasClient .getStorageClient ().deleteObject (this .className , getObjectId ());
1176+ return PaasClient .getStorageClient ().deleteObject (this .className , getObjectId (), ignoreParam );
11571177 }
11581178
11591179 /**
@@ -1182,6 +1202,7 @@ public static Observable<AVNull> deleteAllInBackground(Collection<? extends AVOb
11821202 return Observable .just (AVNull .getINSTANCE ());
11831203 }
11841204 String className = null ;
1205+ Map <String , Object > ignoreParams = new HashMap <>();
11851206 StringBuilder sb = new StringBuilder ();
11861207 for (AVObject o : objects ) {
11871208 if (StringUtil .isEmpty (o .getObjectId ()) || StringUtil .isEmpty (o .getClassName ())) {
@@ -1196,7 +1217,7 @@ public static Observable<AVNull> deleteAllInBackground(Collection<? extends AVOb
11961217 return Observable .error (new IllegalArgumentException ("The objects class name must be the same." ));
11971218 }
11981219 }
1199- return PaasClient .getStorageClient ().deleteObject (className , sb .toString ());
1220+ return PaasClient .getStorageClient ().deleteObject (className , sb .toString (), ignoreParams );
12001221 }
12011222
12021223 /**
@@ -1536,6 +1557,28 @@ public static <T extends AVObject> T createWithoutData(Class<T> clazz, String ob
15361557 }
15371558 }
15381559
1560+ /**
1561+ * disable beforeXXX Hooks
1562+ */
1563+ public void disableBeforeHook () {
1564+ Collections .addAll (ignoreHooks , Hook .beforeSave , Hook .beforeUpdate , Hook .beforeDelete );
1565+ }
1566+
1567+ /**
1568+ * disable afterXXX Hooks
1569+ */
1570+ public void disableAfterHook () {
1571+ Collections .addAll (ignoreHooks , Hook .afterSave , Hook .afterUpdate , Hook .afterDelete );
1572+ }
1573+
1574+ /**
1575+ * ignore specified Hook
1576+ * @param hook target Hook.
1577+ */
1578+ public void ignoreHook (Hook hook ) {
1579+ ignoreHooks .add (hook );
1580+ }
1581+
15391582 protected static <T extends AVObject > T cast (AVObject object , Class <T > clazz ) throws Exception {
15401583 if (clazz .getClass ().isAssignableFrom (object .getClass ())) {
15411584 return (T ) object ;
@@ -1570,7 +1613,6 @@ public boolean equals(Object o) {
15701613
15711614 @ Override
15721615 public int hashCode () {
1573-
15741616 return Objects .hash (getClassName (), getServerData (), operations , acl , isFetchWhenSave ());
15751617 }
15761618}
0 commit comments