All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.leancloud.AVCloudQuery Maven / Gradle / Ivy

package cn.leancloud;

import cn.leancloud.core.PaasClient;
import cn.leancloud.query.AVCloudQueryResult;
import cn.leancloud.query.AVQueryResult;
import cn.leancloud.utils.AVUtils;
import cn.leancloud.utils.StringUtil;
import io.reactivex.Observable;
import io.reactivex.functions.Function;

import java.util.*;

class AVCloudQuery {
  private AVCloudQuery() {
  }

  public static Observable executeInBackground(String cql) {
    return executeInBackground(cql, AVObject.class);
  }
  public static Observable executeInBackground(String cql, Object... params) {
    return executeInBackground(cql, AVObject.class, params);
  }
  public static Observable executeInBackground(String cql, Class clazz) {
    return executeInBackground(cql, clazz, null);
  }
  public static  Observable executeInBackground(String cql, final Class clazz, Object... params) {
    if (StringUtil.isEmpty(cql)) {
      throw new IllegalArgumentException("cql is empty");
    }
    if (null == clazz) {
      throw new IllegalArgumentException("target class is null");
    }
    List pValue = new LinkedList<>();
    if (null != params) {
      for (Object o: params) {
        pValue.add(o);
      }
    }
    Map p = new HashMap<>();
    p.put("cql", cql);
    if (!pValue.isEmpty()) {
      p.put("pvalues", AVUtils.jsonStringFromObjectWithNull(pValue));
    }
    return PaasClient.getStorageClient().cloudQuery(p).map(new Function() {
      public AVCloudQueryResult apply(AVQueryResult avQueryResult) throws Exception {
        AVCloudQueryResult finalResult = new AVCloudQueryResult();
        List rawObjs = new ArrayList(avQueryResult.getCount());
        for (AVObject o : avQueryResult.getResults()) {
          rawObjs.add((T) Transformer.transform(o, avQueryResult.getClassName()));
        }
        finalResult.setResults(rawObjs);
        finalResult.setCount(avQueryResult.getCount());

        return finalResult;
      }
    });
  }
}