content: /*
   * Copyright (C) 2012-2023 52°North Spatial Information Research GmbH
   *
   * This program is free software; you can redistribute it and/or modify it
   * under the terms of the GNU General Public License version 2 as published
   * by the Free Software Foundation.
   *
   * If the program is linked with libraries which are licensed under one of
   * the following licenses, the combination of the program with the linked
   * library is not considered a "derivative work" of the program:
   *
   *     - Apache License, version 2.0
   *     - Apache Software License, version 1.0
   *     - GNU Lesser General Public License, version 3
   *     - Mozilla Public License, versions 1.0, 1.1 and 2.0
   *     - Common Development and Distribution License (CDDL), version 1.0
   *
   * Therefore the distribution of the program linked with libraries licensed
   * under the aforementioned licenses, is permitted by the copyright holders
   * if the distribution is compliant with both the GNU General Public
   * License version 2 and the aforementioned licenses.
   *
   * 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 General
   * Public License for more details.
   */
  package org.n52.sos;
  
  import java.util.HashMap;
  import java.util.Map;
  
  import org.hibernate.SessionFactory;
  import org.hibernate.boot.Metadata;
  import org.hibernate.boot.MetadataSources;
  import org.hibernate.boot.registry.StandardServiceRegistry;
  import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
  
  public class TestHibernate5 {
  
      private static final String POSTGRES = "postgres";
  
      private static StandardServiceRegistry registry;
      private static SessionFactory sessionFactory;
  
      public SessionFactory getSessionFactory() {
          if (sessionFactory == null) {
              try {
                  StandardServiceRegistryBuilder registryBuilder = new StandardServiceRegistryBuilder();
  
                  Map<String, String> settings = new HashMap<>();
                  settings.put("hibernate.connection.driver_class", "org.postgresql.Driver");
                  settings.put("hibernate.connection.url", "jdbc:postgresql://localhost:5432/sos");
                  settings.put("hibernate.connection.username", POSTGRES);
                  settings.put("hibernate.connection.password", POSTGRES);
                  settings.put("hibernate.show_sql", "true");
  
                  registryBuilder.applySettings(settings);
  
                  registry = registryBuilder.build();
  
                  MetadataSources sources = new MetadataSources(registry)
                                                  .addInputStream(this.getClass()
                                                  .getResourceAsStream("/Codespace.hbm.xml"));
  
  
                  Metadata metadata = sources.getMetadataBuilder().build();
  
                  sessionFactory = metadata.getSessionFactoryBuilder().build();
              } catch (Exception e) {
                  System.out.println("SessionFactory creation failed");
                  System.out.println(e.getStackTrace());
                  if (registry != null) {
                      StandardServiceRegistryBuilder.destroy(registry);
                  }
              }
          }
          return sessionFactory;
      }
  
      public void shutdown() {
          if (registry != null) {
              StandardServiceRegistryBuilder.destroy(registry);
          }
      }
  
      // public static void main(String[] args) {
      // TestHibernate5 test = new TestHibernate5();
      // test.getSessionFactory();
      // test.shutdown();
      //
      // }
  }
  