/*
* Data Hub Service (DHuS) - For Space data distribution.
* Copyright (C) 2013,2014,2015 GAEL Systems
*
* This file is part of DHuS software sources.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package fr.gael.dhus.database.dao;
import fr.gael.dhus.database.dao.interfaces.HibernateDao;
import fr.gael.dhus.database.object.Collection;
import fr.gael.dhus.database.object.FileScanner;
import fr.gael.dhus.database.object.User;
import org.hibernate.HibernateException;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.springframework.dao.support.DataAccessUtils;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.stereotype.Repository;
import java.sql.SQLException;
import java.util.List;
/**
* @author pidancier
*
*/
@Repository
public class FileScannerDao extends HibernateDao<FileScanner, Long>
{
public int deleteCollectionReferences(final Collection collection)
{
return getHibernateTemplate().execute (
new HibernateCallback<Integer>()
{
public Integer doInHibernate(Session session)
throws HibernateException, SQLException
{
String sql = "DELETE FROM FILESCANNER_COLLECTIONS s " +
" WHERE s.COLLECTIONS_UUID = :cid";
SQLQuery query = session.createSQLQuery(sql);
query.setString ("cid", collection.getUUID());
return query.executeUpdate ();
}
});
}
@SuppressWarnings ("unchecked")
public List<String> getScannerCollections (final Long scan_id)
{
return (List<String>)getHibernateTemplate().find(
"select c.uuid " +
"from FileScanner fs inner join fs.collections c " +
"where fs.id=?)",
scan_id);
}
@Override
public void delete (final FileScanner scanner)
{
getHibernateTemplate ().execute (new HibernateCallback<Void>()
{
@Override
public Void doInHibernate (Session session) throws HibernateException,
SQLException
{
String sql = "DELETE FROM FILE_SCANNER_PREFERENCES " +
"WHERE FILE_SCANNER_ID = ?";
SQLQuery query = session.createSQLQuery (sql);
query.setLong (0, scanner.getId ());
query.executeUpdate ();
return null;
}
});
super.delete (scanner);
}
/**
* Reset all the scanners status.
*/
public void resetAll ()
{
String sql = "UPDATE FileScanner SET status = '" +
FileScanner.STATUS_ERROR +
"', statusMessage = " +
"'Scanner was stopped because system was shutdown.' " +
" WHERE status = '" + FileScanner.STATUS_RUNNING + "'";
getHibernateTemplate ().bulkUpdate (sql);
}
/**
* Retrieve the owner user of a file scanner.
* @param fs the scanner to retrieve the user.
* @return the owner.
*/
public User getUserFromScanner (FileScanner fs)
{
return (User)DataAccessUtils.uniqueResult (getHibernateTemplate ().find (
"select u from User u where ? in elements(u.preferences.fileScanners)",
fs));
}
/**
* Tests existence of a file scanner in database.
* @param file_scanner the file scanner to test.
* @return true if exists, otherwise false.
*/
public boolean exists (final FileScanner file_scanner)
{
boolean result = false;
if (file_scanner != null)
{
// New session to not interfere with current session.
Session session = getSessionFactory().openSession();
// Session "get" adds new object in the session that should be removed.
Object object = session.get (entityClass, file_scanner.getId ());
result = object != null;
// Remove the created object with closing the dedicated session.
session.close();
}
return result;
}
}