<commit_before>package server.backend;

import java.util.Iterator;
import java.util.List;
import java.util.TreeMap;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import commons.IdPosizione;
import commons.Posizione;
import commons.Utente;

public class GestoreDatiPersistenti {
	//Pattern Singleton
	protected GestoreDatiPersistenti(){
		try {
	         this.factory = new Configuration().configure().buildSessionFactory();
	      } catch (Throwable ex) { 
	         System.err.println("Failed to create sessionFactory object." + ex);
	         throw new ExceptionInInitializerError(ex); 
	      }
	}
	
	//Costruttore pubblico
	public static synchronized GestoreDatiPersistenti getInstance(){
		if(instance==null)
			instance=new GestoreDatiPersistenti();
		return instance;
	}
	
	
	//Metodo per ottenere dal database tutti gli utenti
	public TreeMap<String,Utente> getUtenti(){
	      Session session = this.factory.openSession();
	      Transaction tx = null;
	      TreeMap<String,Utente> utenti = new TreeMap<String,Utente>();
	      
	      try {
	         tx = session.beginTransaction();
	         List<?> listaUtenti = session.createQuery("FROM Utente").list(); 		// Query su classe java e non su tabella
	         for (Iterator<?> iterator = listaUtenti.iterator(); iterator.hasNext();){
	            Utente utente = (Utente) iterator.next(); 
	            utenti.put(utente.getUsername(), utente);
	            //System.out.println(utente.toString());
	         }
	         tx.commit();
	      } catch (HibernateException e) {
	         if (tx!=null) tx.rollback();
	         e.printStackTrace(); 
	      } 
	      catch (Exception e) {
		     e.printStackTrace(); 
		  }finally {
	         session.close();
	      }
	      return utenti;
	   }

	//Metodo per ottenere dal database tutte le posizioni degli utenti
	public TreeMap<IdPosizione,Posizione> getPosizioni(){
		Session session = this.factory.openSession();
		Transaction tx = null;
		TreeMap<IdPosizione,Posizione> posizioni = new TreeMap<IdPosizione,Posizione>();

		try {
			tx = session.beginTransaction();
			List<?> listaPosizioni = session.createQuery("FROM Posizione").list();  // Query su classe java e non su tabella
			for (Iterator<?> iterator = listaPosizioni.iterator(); iterator.hasNext();){
				Posizione posizione = (Posizione) iterator.next(); 
				IdPosizione idPosizione = new IdPosizione(posizione.getIdPosizione().getTimestamp(), posizione.getIdPosizione().getLatitudine(), posizione.getIdPosizione().getLongitudine());
				posizioni.put(idPosizione,posizione);
	            //System.out.println(posizione.toString());
			}
			tx.commit();
		} catch (HibernateException e) {
			if (tx!=null) tx.rollback();
			e.printStackTrace(); 
		} 
		catch (Exception e) {
			e.printStackTrace(); 
		}finally {
			session.close();
		}
		return posizioni;
	}
	
	
	// Metodo per aggiungere un utente al database
	public boolean addUtente(Utente utente){	//Fare controllo in backend se l'utente esiste gi non deve invocare questo metodo(vale lo stesso per tutti i successivi metodi)
		Session session = this.factory.openSession();
	    Transaction tx = null;
	    boolean addok = true;
	    try {
	       tx = session.beginTransaction();
	       session.save(utente); 
	       tx.commit();
	    } catch (HibernateException e) {
	       if (tx!=null) tx.rollback();
	       e.printStackTrace(); 
	       addok=false;
	    } finally {
	       session.close(); 
	    }
	    return addok;
	}
	
	/* Metodo per cancellare un utente dal database */
	public boolean removeUtente(Utente utente){
		Session session = this.factory.openSession();
	    Transaction tx = null;
	    boolean removeok=true;
	    
	    try {
	       tx = session.beginTransaction();
	       session.delete(utente); 
	       tx.commit();
	    } catch (HibernateException e) {
	       if (tx!=null) tx.rollback();
	       e.printStackTrace(); 
	       removeok=false;
	    } finally {
	       session.close();	       
	    }
	    return removeok;
	}
	
	// Metodo per aggiungere una posizione al database 
	public boolean addPosizione(Posizione posizione){
		Session session = this.factory.openSession();
	    Transaction tx = null;
	    boolean addok = true;
	    
	    try {
	       tx = session.beginTransaction();
	       session.save(posizione); 
	       tx.commit();
	    } catch (HibernateException e) {
	       if (tx!=null) tx.rollback();
	       e.printStackTrace(); 
	       addok=false;
	    } finally {
	       session.close(); 
	    }
	    return addok;
	}
	
	// Metodo per cancellare una posizione dal database 
	public boolean removePosizione(Posizione posizione){
		Session session = this.factory.openSession();
	    Transaction tx = null;
	    boolean removeok=true;
	    
	    try {
	       tx = session.beginTransaction();
	       session.delete(posizione); 
	       tx.commit();
	    } catch (HibernateException e) {
	       if (tx!=null) tx.rollback();
	       e.printStackTrace(); 
	       removeok=false;
	    } finally {
	       session.close(); 
	    }
	    return removeok;
	}
	
	//Metodo per rimuovere tutte le posizioni di un utente
	public boolean removePosizioniUtente(Utente utente) {
		TreeMap<IdPosizione, Posizione> posizioni = this.getPosizioni();
		if(posizioni == null) return false;
		
		Session session = this.factory.openSession();
		Transaction tx = null;
		boolean removeok =  true;
		Posizione posizione = null;
		
		try {
			//Si pu fare anche con createNativeQuery!
			for(IdPosizione id : posizioni.keySet()) {
				posizione = posizioni.get(id);
				//Nell'if si deve usare il metodo equals della classe utente
				if(posizione.getUtente().getUsername().equals(utente.getUsername())) {
					tx = session.beginTransaction();
					session.delete(posizione); 
				    tx.commit();			
				}
			}
			
		} catch (HibernateException e) {
			if (tx!=null) tx.rollback();
		    e.printStackTrace(); 
		    removeok=false;
		} finally {
			session.close(); 
		}
		return removeok;
	}

	
	 
	private SessionFactory factory; 	
	private static GestoreDatiPersistenti instance;
}
<commit_msg>Modifica specificatore d'accesso costruttore della classe GestoreDatiPersistenti per l'implementazione del pattern singleton. #1<commit_after>package server.backend;

import java.util.Iterator;
import java.util.List;
import java.util.TreeMap;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import commons.IdPosizione;
import commons.Posizione;
import commons.Utente;

public class GestoreDatiPersistenti {
	//Pattern Singleton
	private GestoreDatiPersistenti(){
		try {
	         this.factory = new Configuration().configure().buildSessionFactory();
	      } catch (Throwable ex) { 
	         System.err.println("Failed to create sessionFactory object." + ex);
	         throw new ExceptionInInitializerError(ex); 
	      }
	}
	
	//Costruttore pubblico
	public static synchronized GestoreDatiPersistenti getInstance(){
		if(instance==null)
			instance=new GestoreDatiPersistenti();
		return instance;
	}
	
	
	//Metodo per ottenere dal database tutti gli utenti
	public TreeMap<String,Utente> getUtenti(){
	      Session session = this.factory.openSession();
	      Transaction tx = null;
	      TreeMap<String,Utente> utenti = new TreeMap<String,Utente>();
	      
	      try {
	         tx = session.beginTransaction();
	         List<?> listaUtenti = session.createQuery("FROM Utente").list(); 		// Query su classe java e non su tabella
	         for (Iterator<?> iterator = listaUtenti.iterator(); iterator.hasNext();){
	            Utente utente = (Utente) iterator.next(); 
	            utenti.put(utente.getUsername(), utente);
	            //System.out.println(utente.toString());
	         }
	         tx.commit();
	      } catch (HibernateException e) {
	         if (tx!=null) tx.rollback();
	         e.printStackTrace(); 
	      } 
	      catch (Exception e) {
		     e.printStackTrace(); 
		  }finally {
	         session.close();
	      }
	      return utenti;
	   }

	//Metodo per ottenere dal database tutte le posizioni degli utenti
	public TreeMap<IdPosizione,Posizione> getPosizioni(){
		Session session = this.factory.openSession();
		Transaction tx = null;
		TreeMap<IdPosizione,Posizione> posizioni = new TreeMap<IdPosizione,Posizione>();

		try {
			tx = session.beginTransaction();
			List<?> listaPosizioni = session.createQuery("FROM Posizione").list();  // Query su classe java e non su tabella
			for (Iterator<?> iterator = listaPosizioni.iterator(); iterator.hasNext();){
				Posizione posizione = (Posizione) iterator.next(); 
				IdPosizione idPosizione = new IdPosizione(posizione.getIdPosizione().getTimestamp(), posizione.getIdPosizione().getLatitudine(), posizione.getIdPosizione().getLongitudine());
				posizioni.put(idPosizione,posizione);
	            //System.out.println(posizione.toString());
			}
			tx.commit();
		} catch (HibernateException e) {
			if (tx!=null) tx.rollback();
			e.printStackTrace(); 
		} 
		catch (Exception e) {
			e.printStackTrace(); 
		}finally {
			session.close();
		}
		return posizioni;
	}
	
	
	// Metodo per aggiungere un utente al database
	public boolean addUtente(Utente utente){	//Fare controllo in backend se l'utente esiste gi non deve invocare questo metodo(vale lo stesso per tutti i successivi metodi)
		Session session = this.factory.openSession();
	    Transaction tx = null;
	    boolean addok = true;
	    try {
	       tx = session.beginTransaction();
	       session.save(utente); 
	       tx.commit();
	    } catch (HibernateException e) {
	       if (tx!=null) tx.rollback();
	       e.printStackTrace(); 
	       addok=false;
	    } finally {
	       session.close(); 
	    }
	    return addok;
	}
	
	/* Metodo per cancellare un utente dal database */
	public boolean removeUtente(Utente utente){
		Session session = this.factory.openSession();
	    Transaction tx = null;
	    boolean removeok=true;
	    
	    try {
	       tx = session.beginTransaction();
	       session.delete(utente); 
	       tx.commit();
	    } catch (HibernateException e) {
	       if (tx!=null) tx.rollback();
	       e.printStackTrace(); 
	       removeok=false;
	    } finally {
	       session.close();	       
	    }
	    return removeok;
	}
	
	// Metodo per aggiungere una posizione al database 
	public boolean addPosizione(Posizione posizione){
		Session session = this.factory.openSession();
	    Transaction tx = null;
	    boolean addok = true;
	    
	    try {
	       tx = session.beginTransaction();
	       session.save(posizione); 
	       tx.commit();
	    } catch (HibernateException e) {
	       if (tx!=null) tx.rollback();
	       e.printStackTrace(); 
	       addok=false;
	    } finally {
	       session.close(); 
	    }
	    return addok;
	}
	
	// Metodo per cancellare una posizione dal database 
	public boolean removePosizione(Posizione posizione){
		Session session = this.factory.openSession();
	    Transaction tx = null;
	    boolean removeok=true;
	    
	    try {
	       tx = session.beginTransaction();
	       session.delete(posizione); 
	       tx.commit();
	    } catch (HibernateException e) {
	       if (tx!=null) tx.rollback();
	       e.printStackTrace(); 
	       removeok=false;
	    } finally {
	       session.close(); 
	    }
	    return removeok;
	}
	
	//Metodo per rimuovere tutte le posizioni di un utente
	public boolean removePosizioniUtente(Utente utente) {
		TreeMap<IdPosizione, Posizione> posizioni = this.getPosizioni();
		if(posizioni == null) return false;
		
		Session session = this.factory.openSession();
		Transaction tx = null;
		boolean removeok =  true;
		Posizione posizione = null;
		
		try {
			//Si pu fare anche con createNativeQuery!
			for(IdPosizione id : posizioni.keySet()) {
				posizione = posizioni.get(id);
				//Nell'if si deve usare il metodo equals della classe utente
				if(posizione.getUtente().getUsername().equals(utente.getUsername())) {
					tx = session.beginTransaction();
					session.delete(posizione); 
				    tx.commit();			
				}
			}
			
		} catch (HibernateException e) {
			if (tx!=null) tx.rollback();
		    e.printStackTrace(); 
		    removeok=false;
		} finally {
			session.close(); 
		}
		return removeok;
	}

	
	 
	private SessionFactory factory; 	
	private static GestoreDatiPersistenti instance;
}

{'fraction_non_alphanumeric': 0.11184788687385157, 'fraction_numerical': 7.989134776703683e-05, 'mean_word_length': 2.86358024691358, 'pattern_counts': {'":': 0, '<': 25, '<?xml version=': 0, '>': 25, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5327928', 'n_tokens_mistral': 4089, 'n_tokens_neox': 3626, 'n_words': 890}