CtanDatabaseBundles.java

/*
 * Copyright © 2022-2025 The CTAN Team and individual authors
 *
 * This file is distributed under the 3-clause BSD license.
 * See file LICENSE for details.
 */

package org.ctan.site;

import org.ctan.site.domain.account.Ticket;
import org.ctan.site.domain.account.User;
import org.ctan.site.domain.account.UserStopword;
import org.ctan.site.domain.archive.ArchiveFile;
import org.ctan.site.domain.archive.TexArchiveNotes;
import org.ctan.site.domain.catalogue.Author;
import org.ctan.site.domain.catalogue.AuthorEmail;
import org.ctan.site.domain.catalogue.AuthorRef;
import org.ctan.site.domain.catalogue.License;
import org.ctan.site.domain.catalogue.Pkg;
import org.ctan.site.domain.catalogue.PkgAlias;
import org.ctan.site.domain.catalogue.PkgCaption;
import org.ctan.site.domain.catalogue.PkgCopyright;
import org.ctan.site.domain.catalogue.PkgDescription;
import org.ctan.site.domain.catalogue.PkgDoc;
import org.ctan.site.domain.catalogue.Topic;
import org.ctan.site.domain.catalogue.TopicDetail;
import org.ctan.site.domain.catalogue.Upload;
import org.ctan.site.domain.catalogue.UploaderRef;
import org.ctan.site.domain.mirrors.ActiveMirror;
import org.ctan.site.domain.mirrors.Continents;
import org.ctan.site.domain.mirrors.Countries;
import org.ctan.site.domain.mirrors.MirrorRegistration;
import org.ctan.site.domain.mirrors.Mirrors;
import org.ctan.site.domain.mirrors.Status;
import org.ctan.site.domain.site.GuestBook;
import org.ctan.site.domain.site.Lug;
import org.ctan.site.domain.site.Message;
import org.ctan.site.domain.site.Stopword;
import org.ctan.site.domain.site.Vote;

import io.dropwizard.db.DataSourceFactory;
import io.dropwizard.hibernate.HibernateBundle;

/**
 * The class <code>CtanDatabaseBundles</code> contains the definition of the
 * bundles for the database access.
 *
 * @author <a href="mailto:gene@ctan.org">Gerd Neugebauer</a>
 */
public final class CtanDatabaseBundles {

    /**
     * The field <code>SITE_DB_BUNDLE</code> contains the Hibernate bundle for
     * the site database.
     */
    public static final HibernateBundle<CtanConfiguration> SITE_DB_BUNDLE =
        new HibernateBundle<CtanConfiguration>(
            ActiveMirror.class,
            ArchiveFile.class,
            Author.class,
            AuthorEmail.class,
            AuthorRef.class,
            GuestBook.class,
            License.class,
            Lug.class,
            MirrorRegistration.class,
            Message.class,
            Pkg.class,
            PkgAlias.class,
            PkgCaption.class,
            PkgCopyright.class,
            PkgDescription.class,
            PkgDoc.class,
            Stopword.class,
            TexArchiveNotes.class,
            Ticket.class,
            Topic.class,
            TopicDetail.class,
            Upload.class,
            UploaderRef.class,
            User.class,
            UserStopword.class,
            Vote.class) {

            /**
             * {@inheritDoc}
             *
             * @see io.dropwizard.db.DatabaseConfiguration#getDataSourceFactory(java.lang.Object)
             */
            @Override
            public DataSourceFactory getDataSourceFactory(
                CtanConfiguration configuration) {

                return configuration.getSiteDb();
            }

            /**
             * {@inheritDoc}
             *
             * @see io.dropwizard.hibernate.HibernateBundle#name()
             */
            @Override
            protected String name() {

                return "siteDb";
            }

        };

    /**
     * The field <code>MIRRORS_DB_BUNDLE</code> contains the Hibernate bundle
     * for the mirrors database.
     */
    public static final HibernateBundle<CtanConfiguration> MIRRORS_DB_BUNDLE =
        new HibernateBundle<CtanConfiguration>(
            Continents.class,
            Countries.class,
            Mirrors.class,
            Status.class) {

            /**
             * {@inheritDoc}
             *
             * @see io.dropwizard.db.DatabaseConfiguration#getDataSourceFactory(java.lang.Object)
             */
            @Override
            public DataSourceFactory getDataSourceFactory(
                CtanConfiguration configuration) {

                return configuration.getMirrors();
            }

            /**
             * {@inheritDoc}
             *
             * @see io.dropwizard.hibernate.HibernateBundle#name()
             */
            @Override
            protected String name() {

                return "mirrors";
            }
        };
}