/**
* Copyright (C) 2015 Caratarse Auth Team <lucio.benfante@gmail.com>
*
* This file is part of Caratarse Auth Model.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.caratarse.auth.model.bo;
import javax.annotation.Resource;
import org.caratarse.auth.model.dao.ResourceDao;
import org.caratarse.auth.model.dao.ResourceHierarchyLinkDao;
import org.caratarse.auth.model.po.ResourceHierarchyLink;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.lambico.dao.spring.hibernate.HibernateGenericDao;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
* Methods for managing resources and their hierarchy.
*
* @author <a href="mailto:lucio.benfante@gmail.com">Lucio Benfante</a>
*/
@Service
public class ResourceBo {
@Resource
private ResourceDao resourceDao;
@Resource
private ResourceHierarchyLinkDao resourceHierarchyLinkDao;
@Transactional
public int insertInHierarchy(org.caratarse.auth.model.po.Resource parent,
org.caratarse.auth.model.po.Resource child) {
int result = 1;
ResourceHierarchyLink self = new ResourceHierarchyLink();
self.setParent(child);
self.setChild(child);
self.setDepth(0);
resourceHierarchyLinkDao.store(self);
if (parent != null) {
Session session = ((HibernateGenericDao) resourceHierarchyLinkDao).currentCustomizedSession();
SQLQuery query
= session.createSQLQuery("INSERT INTO resourcehierarchylink(parent_id, child_id, depth)"
+ " SELECT l.parent_id, " + child.getId()+", l.depth+1"
+ " FROM resourcehierarchylink l"
+ " WHERE l.child_id = ?");
query.setParameter(0, parent.getId());
result += query.executeUpdate();
}
return result;
}
}