package org.om.core.impl.persistence.interceptor.handler.collection; import java.util.Collection; import org.om.core.api.annotation.MissingStrategy; import org.om.core.api.exception.MissingException; import org.om.core.api.mapping.CollectionMapping; import org.om.core.api.mapping.MappedField; import org.om.core.api.persistence.PersistenceAdapter; import org.om.core.api.persistence.interceptor.handler.ItemHandler; import org.om.core.api.persistence.result.CollectionResult; import org.om.core.api.session.Session; /** * An {@link ItemHandler} that access collections. * * @author Jakob Külzer * */ public abstract class AbstractCollectionHandler implements ItemHandler { protected Session session; public AbstractCollectionHandler(Session session) { this.session = session; } public abstract Object createCollectionWrapper(MappedField field, CollectionResult result); public abstract Collection<?> createEmptyCollection(MappedField field); @Override public final Object retrieve(MappedField mappedField, PersistenceAdapter adapter) { final CollectionMapping mapping = (CollectionMapping) mappedField.getMapping(); final CollectionResult collectionResult = adapter.getCollection(mapping); if (!collectionResult.hasResult()) { if (mappedField.getMissingStrategy() == MissingStrategy.ThrowException) { // TODO: Add proper exception logic throw new MissingException("TODO: throw proper exception"); } else { return createEmptyCollection(mappedField); } } return createCollectionWrapper(mappedField, collectionResult); } }