package com.turtleplayer.persistance.source.sql; import android.database.Cursor; import com.turtleplayer.persistance.framework.creator.CreatorForList; import com.turtleplayer.persistance.framework.mapping.Mapping; import com.turtleplayer.persistance.source.relational.Field; import com.turtleplayer.persistance.source.relational.View; import com.turtleplayer.persistance.source.sql.query.Select; import java.util.Collection; import java.util.List; /** * TURTLE PLAYER * <p/> * Licensed under MIT & GPL * <p/> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR * PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE * OR OTHER DEALINGS IN THE SOFTWARE. * <p/> * More Information @ www.turtle-player.co.uk * * @author Simon Honegger (Hoene84) */ public class MappingDistinct<TARGET extends View, PROJECTION extends View, RESULT> implements Mapping<Select, List<RESULT>, Cursor> { private final PROJECTION view; private final List<Field> fields; private final CreatorForList<? super TARGET, RESULT, Cursor, Cursor> creator; public MappingDistinct(PROJECTION view, CreatorForList<? super TARGET, RESULT, Cursor, Cursor> creator, TARGET target) { this.view = view; this.fields = target.getFields(); this.creator = creator; } public Select get() { return new Select(view, Select.SelectMethod.DISTINCT, fields.toArray(new Field[fields.size()])); } public List<RESULT> create(Cursor queryResult) { return creator.create(queryResult); } }