Mercurial > dive4elements > river
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; } }