All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.magenic.jmaqs.database.ConnectionFactory Maven / Gradle / Ivy

/*
 * Copyright 2020 (C) Magenic, All rights Reserved
 */

package com.magenic.jmaqs.database;

import java.io.File;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.function.Function;
import java.util.stream.Collectors;
import javax.persistence.EntityManagerFactory;
import org.apache.commons.io.FileUtils;
import org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl;
import org.hibernate.jpa.boot.internal.PersistenceUnitInfoDescriptor;

/**
 * Class ConnectionFactory ...
 */
public class ConnectionFactory {

  /**
   * Constructor ConnectionFactory creates a new ConnectionFactory instance.
   */
  private ConnectionFactory() {

  }

  public static final String HIBERNATE_DIALECT = "hibernate.dialect";
  public static final String HIBERNATE_CONNECTION_DATASOURCE = "hibernate.connection.datasource";

  /**
   * Method getOpenConnection returns the openConnection of this ConnectionFactory object.
   *
   * @return the openConnection (type DatabaseDriver) of this ConnectionFactory object.
   */
  public static DatabaseDriver getOpenConnection() {
    final EntityManagerFactory entityManagerFactory = getEntityManagerFactory();
    return new DatabaseDriver(entityManagerFactory);

  }

  /**
   * Method getEntityManagerFactory returns the entityManagerFactory of this ConnectionFactory object.
   *
   * @return the entityManagerFactory (type EntityManagerFactory) of this ConnectionFactory object.
   */
  public static EntityManagerFactory getEntityManagerFactory() {
    DatabasePersistenceUnitInfo persistenceUnitInfo = getPersistenceUnitInfo();
    Map configuration = new HashMap<>();
    PersistenceUnitInfoDescriptor persistenceUnitInfoDescriptor = new PersistenceUnitInfoDescriptor(
        persistenceUnitInfo);
    return new EntityManagerFactoryBuilderImpl(persistenceUnitInfoDescriptor, configuration)
        .withDataSource(DatabaseConfig.getProvider().getDataSource()).build();
  }

  /**
   * Method getProperties returns the properties of this ConnectionFactory object.
   *
   * @return the properties (type Properties) of this ConnectionFactory object.
   */
  protected static Properties getProperties() {
    Properties properties = new Properties();
    properties.put(HIBERNATE_DIALECT, DatabaseConfig.getProvider().getDialect());
    properties.put(HIBERNATE_CONNECTION_DATASOURCE, DatabaseConfig.getProvider().getDataSource());
    properties.putAll(DatabaseConfig.getDatabaseCapabilitiesAsObjects());

    return properties;
  }

  /**
   * Method getEntityFiles returns the entityFiles of this ConnectionFactory object.
   *
   * @return the entityFiles (type File[]) of this ConnectionFactory object.
   */
  public static File[] getEntityFiles() {
    String[] extensions = { "java" };
    final Collection files = FileUtils
        .listFiles(new File(DatabaseConfig.getEntityDirectoryString()), extensions, true);
    File[] fileArray = new File[files.size()];
    return files.toArray(fileArray);
  }

  /**
   * Method getEntityClassNames returns the entityClassNames of this ConnectionFactory object.
   *
   * @return the entityClassNames (type List of String) of this ConnectionFactory object.
   */
  public static List getEntityClassNames() {
    final String entityPackageString = DatabaseConfig.getEntityPackageString();
    Function function = file -> {
      StringBuilder stringBuilder = new StringBuilder();
      stringBuilder.append(entityPackageString).append(".")
          .append(file.getName().replace(".java", ""));
      return stringBuilder.toString();
    };

    return Arrays.stream(getEntityFiles()).map(function).collect(Collectors.toList());
  }

  /**
   * Method getPersistenceUnitInfo returns the persistenceUnitInfo of this ConnectionFactory object.
   *
   * @return the persistenceUnitInfo (type DatabasePersistenceUnitInfo) of this ConnectionFactory object.
   */
  public static DatabasePersistenceUnitInfo getPersistenceUnitInfo() {
    return getPersistenceUnitInfo(DatabaseConfig.getDatabaseName());
  }

  /**
   * Method getPersistenceUnitInfo ...
   *
   * @param name of type String
   * @return DatabasePersistenceUnitInfo
   */
  public static DatabasePersistenceUnitInfo getPersistenceUnitInfo(String name) {
    return new DatabasePersistenceUnitInfo(name, getEntityClassNames(), getProperties());
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy