view backend/src/main/java/org/dive4elements/river/model/MainValueType.java @ 9159:64e56a51db3f

Added methods to select a gauge's discharge table and main value list; added a main value type key enum
author mschaefer
date Tue, 19 Jun 2018 14:23:15 +0200
parents 4c3ccf2b0304
children 4cccbd32b680
line wrap: on
line source
/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
 * Software engineering by Intevation GmbH
 *
 * This file is Free Software under the GNU AGPL (>=v3)
 * and comes with ABSOLUTELY NO WARRANTY! Check out the
 * documentation coming with Dive4Elements River for details.
 */

package org.dive4elements.river.model;

import java.io.Serializable;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import org.dive4elements.river.backend.SessionHolder;
import org.hibernate.Query;
import org.hibernate.Session;

@Entity
@Table(name = "main_value_types")
public class MainValueType
implements   Serializable
{

    /***** TYPES *****/

    /**
     * Main value type names
     *
     */
    public enum MainValueTypeKey {
        NONE(""), W("W"), Q("Q"), DURATION("D"), UNKNOWN("-");

        private final String name;
        private int id;
        private boolean ready;

        MainValueTypeKey(final String name) {
            this.name = name;
            this.id = 0;
            this.ready = false;
        }

        /**
         * Type name in the database
         */
        public String getName() {
            return this.name;
        }

        /**
         * Type id in the database
         */
        public int getId() {
            initFromDatabase();
            return this.id;
        }

        /**
         * Set the type id
         */
        public void setId(final int id) {
            this.id = id;
        }

        protected boolean getReady() {
            return this.ready;
        }

        protected void setReady(final boolean ready) {
            this.ready = ready;
        }

        /**
         * Main value type key for a database name value
         */
        public static MainValueTypeKey forDbName(final String dbname) {
            initFromDatabase();
            for (final MainValueTypeKey k : MainValueTypeKey.values()) {
                if (k.getName().equalsIgnoreCase(dbname))
                    return k;
            }
            return NONE;
        }

        /**
         * Main value type key for a database id value
         */
        public static MainValueTypeKey forDbId(final int dbid) {
            initFromDatabase();
            for (final MainValueTypeKey k : MainValueTypeKey.values()) {
                if (k.getId() == dbid)
                    return k;
            }
            return NONE;
        }

        /**
         * Initially queries the database ids
         */
        private static void initFromDatabase() {
            if (W.getReady())
                return;
            // Avoid recursion
            for (final MainValueTypeKey k : MainValueTypeKey.values())
                k.setReady(true);
            // Select database ids
            final Session session = SessionHolder.HOLDER.get();
            final Query query = session.createQuery("FROM MainValueType");
            final List<MainValueType> rows = query.list();
            if (!rows.isEmpty()) {
                for (int i = 0; i <= rows.size() - 1; i++) {
                    if (forDbName(rows.get(i).getName()) != NONE)
                        forDbName(rows.get(i).getName()).setId(rows.get(i).getId());
                }
            }
        }
    }

    /***** FIELDS *****/

    private Integer id;
    private String  name;
    // static private List<Integer> typeids;
    // static private List<String> typenames;

    /***** CONSTRUCTORS *****/

    public MainValueType() {
    }

    public MainValueType(final String name) {
        this.name = name;
    }


    /***** METHODS *****/

    @Id
    @SequenceGenerator(
            name           = "SEQUENCE_MAIN_VALUE_TYPES_ID_SEQ",
            sequenceName   = "MAIN_VALUE_TYPES_ID_SEQ",
            allocationSize = 1)
    @GeneratedValue(
            strategy  = GenerationType.SEQUENCE,
            generator = "SEQUENCE_MAIN_VALUE_TYPES_ID_SEQ")
    @Column(name = "id")
    public Integer getId() {
        return this.id;
    }

    public void setId(final Integer id) {
        this.id = id;
    }

    @Column(name = "name") // FIXME: Type conversion needed?
    public String getName() {
        return this.name;
    }

    public void setName(final String name) {
        this.name = name;
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org