diff 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 diff
--- a/backend/src/main/java/org/dive4elements/river/model/MainValueType.java	Tue Jun 19 14:20:52 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/model/MainValueType.java	Tue Jun 19 14:23:15 2018 +0200
@@ -9,53 +9,163 @@
 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 javax.persistence.GeneratedValue;
-import javax.persistence.Column;
-import javax.persistence.SequenceGenerator;
-import javax.persistence.GenerationType;
+
+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(String name) {
+    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)
+            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")
+            strategy  = GenerationType.SEQUENCE,
+            generator = "SEQUENCE_MAIN_VALUE_TYPES_ID_SEQ")
     @Column(name = "id")
     public Integer getId() {
-        return id;
+        return this.id;
     }
 
-    public void setId(Integer id) {
+    public void setId(final Integer id) {
         this.id = id;
     }
 
     @Column(name = "name") // FIXME: Type conversion needed?
     public String getName() {
-        return name;
+        return this.name;
     }
 
-    public void setName(String name) {
+    public void setName(final String name) {
         this.name = name;
     }
 }

http://dive4elements.wald.intevation.org