Package org.yaac.server.util

Source Code of org.yaac.server.util.AutoBeanUtil

package org.yaac.server.util;

import java.util.Arrays;

import org.yaac.shared.YaacAutoBeanFactory;
import org.yaac.shared.egql.Result;
import org.yaac.shared.egql.ResultCell;
import org.yaac.shared.egql.ResultCell.ResultCellFactory;
import org.yaac.shared.file.BlobUploadResult;
import org.yaac.shared.file.BlobUploadResult.Status;
import org.yaac.shared.file.CacheUploadResult;
import org.yaac.shared.file.FileDownloadPath;
import org.yaac.shared.file.FileDownloadPath.Type;
import org.yaac.shared.property.PropertyType;

import com.google.web.bindery.autobean.shared.AutoBean;
import com.google.web.bindery.autobean.shared.AutoBeanCodex;
import com.google.web.bindery.autobean.vm.AutoBeanFactorySource;

/**
* AutoBeanUtil used in server side to serialize
*
* @author Max Zhu (thebbsky@gmail.com)
*
*/
public class AutoBeanUtil {

  private static final YaacAutoBeanFactory abf = AutoBeanFactorySource.create(YaacAutoBeanFactory.class);
 
  /**
   * @param <T>
   * @param clazz
   * @param o
   * @return
   */
  public static <T> String encode(Class<T> clazz, T o) {
    AutoBean<T> source = abf.create(clazz, o);
    return AutoBeanCodex.encode(source).getPayload();
  }
 
  /**
   * @param <T>
   * @param clazz
   * @param encodedStr
   * @return
   */
  public static <T> T decode(Class<T> clazz, String encodedStr) {
    return AutoBeanCodex.decode(abf, clazz, encodedStr).as();
  }
 
  /**
   * @param statementKey
   * @return
   */
  public static Result newResult(String statementKey) {
    Result obj = abf.statementResult().as();
    obj.setStatementKey(statementKey);
    return obj;
  }
 
  private static ResultCellFactory resultCellFactory;

  /**
   * @return singleton of ResultCellFactory
   */
  public static synchronized ResultCellFactory getResultCellFactory() {
    if (resultCellFactory == null) {
      resultCellFactory = new ResultCellFactory() {
        @Override
        public ResultCell create() {
          return AutoBeanUtil.newResultCell();
        }
      };
    }
   
    return resultCellFactory;
  }
 
  /**
   * @return
   */
  public static ResultCell newResultCell() {
    return abf.resultCell().as();
  }
 
  /**
   * @param null1
   * @param object
   * @return
   */
  public static ResultCell newResultCell(PropertyType type, String ...payloads) {
    ResultCell result = newResultCell();
    result.setType(type);
    result.setPayload(Arrays.asList(payloads));
    return result;
  }
 
  /**
   * @param type
   * @param keyStr
   * @param fieldName
   * @param index
   * @param fileName
   * @param size
   * @return
   */
  public static FileDownloadPath newFileDownloadPath(
      FileDownloadPath.Type type,
      String keyStr,
      String fieldName, Integer index,
      String fileName, Integer size) {
    FileDownloadPath path = abf.fileDownloadPath().as();
    path.setType(type);
    path.setKeyStr(keyStr);
    path.setFieldName(fieldName);
    path.setIndex(index);
    path.setFileName(fileName);
    path.setSize(size);
    return path;
  }
 
  /**
   * @param status
   * @param fileName
   * @param size
   * @return
   */
  public static BlobUploadResult newBlobUploadResult(Status status, String fileName, Integer size) {
    BlobUploadResult result = abf.blobUploadResult().as();
    result.setStatus(status);
    result.setFileName(fileName);
    result.setSize(size);
    return result;
  }
 
  /**
   * @param status
   * @param cacheKey
   * @param fileName
   * @param size
   * @return
   */
  public static CacheUploadResult newCacheUploadResult(CacheUploadResult.Status status,
      String cacheKey, String fileName, Integer size) {
    CacheUploadResult result = abf.cacheUploadResult().as();
    result.setStatus(status);
    result.setPath(newFileDownloadPath(Type.MEMCACHE, cacheKey, null, null, fileName, size));
    return result;
  }
 
  /**
   * @param cacheKey
   * @return
   */
  public static FileDownloadPath cacheDownloadPath(String cacheKey) {
    FileDownloadPath path = abf.fileDownloadPath().as();
    path.setType(Type.MEMCACHE);
    path.setKeyStr(cacheKey);
    path.setFieldName(null);
    path.setIndex(null);
    return path;
  }
 
  /**
   * @param cacheString
   * @return
   */
  public static String cacheDownladPathString(String cacheString) {
    FileDownloadPath path = cacheDownloadPath(cacheString);
    return encode(FileDownloadPath.class, path);
  }
}
TOP

Related Classes of org.yaac.server.util.AutoBeanUtil

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.