/*
* Copyright (c) 2012, Mayocat <hello@mayocat.org>
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
package mayoapp.dao;
import java.util.List;
import java.util.UUID;
import org.mayocat.addons.binder.BindAddonGroup;
import org.mayocat.addons.mapper.AddonGroupMapper;
import org.mayocat.model.AddonGroup;
import org.mayocat.model.HasAddons;
import org.skife.jdbi.v2.sqlobject.BindBean;
import org.skife.jdbi.v2.sqlobject.SqlQuery;
import org.skife.jdbi.v2.sqlobject.SqlUpdate;
import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
import org.skife.jdbi.v2.unstable.BindIn;
/**
* @version $Id: 91ecc3a0fb40b67fa289f02cdb1200a650691efc $
*/
public interface AddonsDAO<T extends HasAddons>
{
@RegisterMapper(AddonGroupMapper.class)
@SqlQuery
(
"SELECT * FROM addon WHERE entity_id = :entity.id"
)
List<AddonGroup> findAddons(@BindBean("entity") T entity);
@RegisterMapper(AddonGroupMapper.class)
@SqlQuery
(
"SELECT * FROM addon " +
"WHERE entity_id in ( <ids> )"
)
List<AddonGroup> findAllAddonsForIds(@BindIn("ids") List<UUID> ids);
@SqlUpdate
(
"INSERT INTO addon " +
" (entity_id, " +
" source, " +
" addon_group, " +
" model," +
" value) " +
"VALUES (:entity.id, " +
" :addon.source, " +
" :addon.group, " +
" CAST (:addon.model AS json)," +
" CAST (:addon.value AS json)) "
)
void createAddonGroup(@BindBean("entity") T entity, @BindAddonGroup("addon") AddonGroup addon);
@SqlUpdate
(
"UPDATE addon " +
"SET value = CAST (:addon.value AS json), " +
" model = CAST (:addon.model AS json) " +
"WHERE entity_id = :entity.id " +
"AND source = :addon.source " +
"AND addon_group = :addon.group "
)
void updateAddonGroup(@BindBean("entity") T entity, @BindAddonGroup("addon") AddonGroup addon);
@SqlUpdate
(
"DELETE FROM addon " +
"WHERE addon.entity_id = :entity.id"
)
Integer deleteAddons(@BindBean("entity") T entity);
}