Package com.googlecode.mjorm.convert.converters

Source Code of com.googlecode.mjorm.convert.converters.MongoToArrayTypeConverter

package com.googlecode.mjorm.convert.converters;

import java.lang.reflect.Array;
import java.lang.reflect.Type;

import com.googlecode.mjorm.convert.ConversionContext;
import com.googlecode.mjorm.convert.ConversionException;
import com.googlecode.mjorm.convert.JavaType;
import com.googlecode.mjorm.convert.TypeConversionHints;
import com.googlecode.mjorm.convert.TypeConverter;
import com.mongodb.BasicDBList;

public class MongoToArrayTypeConverter
  implements TypeConverter<BasicDBList, Object[]> {

  public boolean canConvert(Class<?> dbClass, Class<?> targetClass) {
    return BasicDBList.class.equals(dbClass)
      && targetClass.isArray();
  }

  public Object[] convert(
    BasicDBList source, JavaType targetType, ConversionContext context, TypeConversionHints hints)
    throws ConversionException {

    // get component type of array
    JavaType componentType = null;
    Type[] types = hints.get(TypeConversionHints.HINT_GENERIC_TYPE_PARAMETERS);
    if (types!=null && types.length>0) {
      componentType = JavaType.fromType(types[0]);
    }
    if (componentType==null) {
      componentType = targetType.getComponentJavaType();
    }

    // bail if we don't have a component type
    if (componentType==null) {
      throw new ConversionException(
        "Unable to determine componentType of "+targetType);
    }

    // create array
    Object ret = Array.newInstance(componentType.asClass(), source.size());

    // iterate and convert
    for (int i=0; i<source.size(); i++) {
      Object value = source.get(i);
      if (value!=null) {
        value = context.convert(value, componentType);
      }
      Array.set(ret, i, value);
    }

    // return it
    return Object[].class.cast(ret);
  }

}
TOP

Related Classes of com.googlecode.mjorm.convert.converters.MongoToArrayTypeConverter

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.