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

com.avaje.ebeaninternal.server.query.BeanCollectionWrapper Maven / Gradle / Ivy

There is a newer version: 8.1.1
Show newest version
package com.avaje.ebeaninternal.server.query;

import com.avaje.ebean.bean.BeanCollection;
import com.avaje.ebean.bean.EntityBean;
import com.avaje.ebeaninternal.api.SpiQuery;
import com.avaje.ebeaninternal.server.core.RelationalQueryRequest;
import com.avaje.ebeaninternal.server.deploy.BeanDescriptor;
import com.avaje.ebeaninternal.server.util.BeanCollectionFactory;

import java.util.Collection;
import java.util.Map;

/**
 * Wraps a BeanCollection with helper methods to add beans.
 * 

* Helps adding the bean to the underlying set list or map. *

*/ public final class BeanCollectionWrapper { /** * Flag set if this builds a Map rather than a Collection. */ private final boolean isMap; /** * A property name used as key for a Map. */ private final String mapKey; /** * The actual BeanCollection. */ private final BeanCollection beanCollection; /** * Collection type of BeanCollection. */ private final Collection collection; /** * Map type of BeanCollection. */ private final Map map; /** * The associated BeanDescriptor. */ private final BeanDescriptor desc; /** * The number of rows added. */ private int rowCount; public BeanCollectionWrapper(RelationalQueryRequest request) { this.desc = null; SpiQuery.Type queryType = request.getQueryType(); this.mapKey = request.getQuery().getMapKey(); this.isMap = SpiQuery.Type.MAP.equals(queryType); this.beanCollection = createBeanCollection(queryType); this.collection = getCollection(isMap); this.map = getMap(isMap); } @SuppressWarnings({"unchecked", "rawtypes"}) private Map getMap(boolean isMap) { return isMap ? (Map) beanCollection : null; } @SuppressWarnings("unchecked") private Collection getCollection(boolean isMap) { return isMap ? null : (Collection) beanCollection; } /** * Return the underlying BeanCollection. */ public BeanCollection getBeanCollection() { return beanCollection; } /** * Create a BeanCollection of the correct type. */ private BeanCollection createBeanCollection(SpiQuery.Type manyType) { return BeanCollectionFactory.create(manyType); } /** * Return true if this wraps a Map rather than a set or list. */ public boolean isMap() { return isMap; } /** * Return the number of rows added to this wrapper. */ public int size() { return rowCount; } /** * Add the bean to the collection held in this wrapper. */ public void add(EntityBean bean) { add(bean, beanCollection); } /** * Add the bean to the collection passed. * * @param bean the bean to add * @param collection the collection or map to add the bean to */ @SuppressWarnings({"unchecked", "rawtypes"}) public void add(EntityBean bean, Object collection) { if (bean == null) { return; } rowCount++; if (isMap) { Object keyValue; if (mapKey != null) { // use the value for the property keyValue = desc.getValue(bean, mapKey); } else { // use the uniqueId for this keyValue = desc.getId(bean); } Map mapColl = (Map) collection; mapColl.put(keyValue, bean); } else { ((Collection) collection).add(bean); } } /** * Specifically add to a Collection. */ public void addToCollection(Object bean) { collection.add(bean); } /** * Specifically add to this as a Map with a known key. */ public void addToMap(Object bean, Object key) { map.put(key, bean); } }