Package eu.lsem.bakalarka.dao

Source Code of eu.lsem.bakalarka.dao.DirectoriesDaoImpl

package eu.lsem.bakalarka.dao;

import eu.lsem.bakalarka.model.Directory;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallback;
import org.springframework.transaction.support.TransactionTemplate;
import org.springframework.dao.DataAccessException;

import java.util.*;

public class DirectoriesDaoImpl extends SqlMapClientDaoSupport implements DirectoriesDao {
    private TransactionTemplate transactionTemplate;

    public void setTransactionTemplate(TransactionTemplate transactionTemplate) { //injected by spring
        this.transactionTemplate = transactionTemplate;
    }


    @Override
    @SuppressWarnings("unchecked")
    public List<Directory> getChildDirectories(Integer id) {
        return (List<Directory>) getSqlMapClientTemplate().queryForList("Directories.getChildDirectories", id);
    }



    @Override
    public void insertDirectory(Directory dir) {
        getSqlMapClientTemplate().insert("Directories.insertDirectory", dir);
    }


    @Override
    public Directory getDirectory(Integer id) {
        return (Directory) getSqlMapClientTemplate().queryForObject("Directories.getDirectory", id);
    }


    @Override
    @SuppressWarnings("unchecked")
    public int updateDirectoryName(Integer id, String name) {
        Map m = new HashMap(2);
        m.put("id", id);
        m.put("name", name);
        return getSqlMapClientTemplate().update("Directories.updateDirectoryName", m);
    }


    @Override
    public int deleteDirectoriesAndMoveTheses(final Integer rootDirId) {
        final DataAccessException[] exc = new DataAccessException[1];
        Integer deleted = (Integer) transactionTemplate.execute(new TransactionCallback() {

            @Override
            public Object doInTransaction(TransactionStatus status) {
                try {
                    Directory dirToDelete = getDirectory(rootDirId); //adr.ktery smazat
                    moveThesesInDirectory(dirToDelete.getId(), dirToDelete.getParentId());
                    return getSqlMapClientTemplate().delete("Directories.deleteDirectory", dirToDelete.getId());
                } catch (DataAccessException e) {
                    exc[0] = e;
                }
                return null;
            }
        });

        if (exc[0] != null) {
            throw exc[0];
        } else {
            return deleted;
        }
    }


    /**
     * Tato metoda presume vsechny prace v adresari nahoru a zavola se pro vsechny podadresare
     *
     * @param dirId          Adresar, ze ktereho prace presunout
     * @param newParentDirId Adresar, kam prace presunout
     */
    @SuppressWarnings("unchecked")
    private void moveThesesInDirectory(Integer dirId, Integer newParentDirId) {
        Map m = new HashMap(2);
        m.put("newParentId", newParentDirId);
        m.put("oldParentId", dirId);
        getSqlMapClientTemplate().update("Theses.updateThesesDirectoryByParent", m);
        List<Directory> dirs = getChildDirectories(dirId);
        for (Directory d : dirs) {
            moveThesesInDirectory(d.getId(), newParentDirId);
        }

    }


   
    @Override
    public List<Directory> getDirectoriesPath(Integer directoryId) {
        LinkedList<Directory> list = new LinkedList<Directory>();
        while (directoryId != null) {
            Directory currentDir = getDirectory(directoryId);
            list.addFirst(currentDir);
            directoryId = currentDir.getParentId();
        }

        list.addFirst(new Directory());
        return list;


    }
}
TOP

Related Classes of eu.lsem.bakalarka.dao.DirectoriesDaoImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.