/* * 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.interfaces; import java.sql.SQLException; import fr.gael.dhus.database.dao.UserDao; import org.hibernate.HibernateException; import org.hibernate.SQLQuery; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.orm.hibernate3.HibernateCallback; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import org.springframework.stereotype.Repository; import fr.gael.dhus.database.object.Role; import fr.gael.dhus.database.object.User; import fr.gael.dhus.spring.context.ApplicationContextProvider; import fr.gael.dhus.system.config.ConfigurationManager; public class DaoUtils { public static final int DEFAULT_ELEMENTS_PER_PAGE = 3; /** * Hide utility class constructor */ private DaoUtils () { } /** * Escape quote marks in the given string by doubling it (' -> ''). * @param s String to secure. * @return a string with escaped quotes. */ public static String secureString (String s) { if (s==null) return null; return s.replace ("'", "''"); } public static String userRestriction (User u, String pattern) { ConfigurationManager cfgManager = ApplicationContextProvider .getBean(ConfigurationManager.class); if (cfgManager.isDataPublic () || u == null || u.getRoles ().contains (Role.DATA_MANAGER)) { return ""; } User pData = ApplicationContextProvider.getBean ( UserDao.class).getPublicData (); return "('" + u.getUUID () + "' in elements(" + pattern + "authorizedUsers" + ")" + " OR '" + pData.getUUID () + "' in elements(" + pattern + "authorizedUsers))"; } public static void optimize () { HibernateDaoLocalSupport support = ApplicationContextProvider.getBean ( HibernateDaoLocalSupport.class); support.getHibernateTemplate ().flush (); support.getHibernateTemplate ().executeWithNativeSession ( new HibernateCallback<Void> () { @Override public Void doInHibernate (Session session) throws HibernateException, SQLException { SQLQuery query = session.createSQLQuery ("CHECKPOINT DEFRAG"); query.executeUpdate (); return null; } }); } @Repository ("hibernateDaoLocalSupport") private static class HibernateDaoLocalSupport extends HibernateDaoSupport { @Autowired public void init (SessionFactory session_factory) { setSessionFactory (session_factory); } } }