Mercurial > dive4elements > river
comparison backend/src/main/java/org/dive4elements/river/importer/ImportHYKFormation.java @ 8986:392bbcd8a88b
Database inserts accelerated by suppressing unnecessary database queries for new data series
author | mschaefer |
---|---|
date | Sun, 08 Apr 2018 18:07:06 +0200 |
parents | 4c3ccf2b0304 |
children |
comparison
equal
deleted
inserted
replaced
8985:27851cfda84a | 8986:392bbcd8a88b |
---|---|
6 * documentation coming with Dive4Elements River for details. | 6 * documentation coming with Dive4Elements River for details. |
7 */ | 7 */ |
8 | 8 |
9 package org.dive4elements.river.importer; | 9 package org.dive4elements.river.importer; |
10 | 10 |
11 import org.dive4elements.river.model.HYKFormation; | 11 import java.math.BigDecimal; |
12 import org.dive4elements.river.model.HYKEntry; | |
13 | |
14 import java.util.ArrayList; | 12 import java.util.ArrayList; |
15 import java.util.List; | 13 import java.util.List; |
16 | 14 |
15 import org.dive4elements.river.importer.common.StoreMode; | |
16 import org.dive4elements.river.model.HYKEntry; | |
17 import org.dive4elements.river.model.HYKFormation; | |
18 import org.hibernate.Query; | |
17 import org.hibernate.Session; | 19 import org.hibernate.Session; |
18 import org.hibernate.Query; | |
19 | |
20 import java.math.BigDecimal; | |
21 | 20 |
22 public class ImportHYKFormation | 21 public class ImportHYKFormation |
23 { | 22 { |
24 protected int formationNum; | 23 protected int formationNum; |
25 protected ImportHYKEntry entry; | 24 protected ImportHYKEntry entry; |
29 protected BigDecimal distanceHF; | 28 protected BigDecimal distanceHF; |
30 protected BigDecimal distanceVR; | 29 protected BigDecimal distanceVR; |
31 | 30 |
32 protected List<ImportHYKFlowZone> zones; | 31 protected List<ImportHYKFlowZone> zones; |
33 | 32 |
33 protected StoreMode storeMode; | |
34 | |
34 protected HYKFormation peer; | 35 protected HYKFormation peer; |
35 | 36 |
36 public ImportHYKFormation() { | 37 public ImportHYKFormation() { |
37 zones = new ArrayList<ImportHYKFlowZone>(); | 38 this.zones = new ArrayList<>(); |
39 this.storeMode = StoreMode.NONE; | |
38 } | 40 } |
39 | 41 |
40 public ImportHYKFormation( | 42 public ImportHYKFormation( |
41 int formationNum, | 43 final int formationNum, |
42 ImportHYKEntry entry, | 44 final ImportHYKEntry entry, |
43 BigDecimal top, | 45 final BigDecimal top, |
44 BigDecimal bottom, | 46 final BigDecimal bottom, |
45 BigDecimal distanceVL, | 47 final BigDecimal distanceVL, |
46 BigDecimal distanceHF, | 48 final BigDecimal distanceHF, |
47 BigDecimal distanceVR | 49 final BigDecimal distanceVR |
48 ) { | 50 ) { |
49 this(); | 51 this(); |
50 this.formationNum = formationNum; | 52 this.formationNum = formationNum; |
51 this.entry = entry; | 53 this.entry = entry; |
52 this.top = top; | 54 this.top = top; |
53 this.bottom = bottom; | 55 this.bottom = bottom; |
54 this.distanceVL = distanceVL; | 56 this.distanceVL = distanceVL; |
55 this.distanceHF = distanceHF; | 57 this.distanceHF = distanceHF; |
56 this.distanceVR = distanceVR; | 58 this.distanceVR = distanceVR; |
57 } | 59 } |
58 | 60 |
59 public void addFlowZone(ImportHYKFlowZone zone) { | 61 public void addFlowZone(final ImportHYKFlowZone zone) { |
60 zones.add(zone); | 62 this.zones.add(zone); |
61 zone.setFormation(this); | 63 zone.setFormation(this); |
62 } | 64 } |
63 | 65 |
64 public int getFormationNum() { | 66 public int getFormationNum() { |
65 return formationNum; | 67 return this.formationNum; |
66 } | 68 } |
67 | 69 |
68 public void setFormationNum(int formationNum) { | 70 public void setFormationNum(final int formationNum) { |
69 this.formationNum = formationNum; | 71 this.formationNum = formationNum; |
70 } | 72 } |
71 | 73 |
72 public ImportHYKEntry getEntry() { | 74 public ImportHYKEntry getEntry() { |
73 return entry; | 75 return this.entry; |
74 } | 76 } |
75 | 77 |
76 public void setEntry(ImportHYKEntry entry) { | 78 public void setEntry(final ImportHYKEntry entry) { |
77 this.entry = entry; | 79 this.entry = entry; |
78 } | 80 } |
79 | 81 |
80 public BigDecimal getTop() { | 82 public BigDecimal getTop() { |
81 return top; | 83 return this.top; |
82 } | 84 } |
83 | 85 |
84 public void setTop(BigDecimal top) { | 86 public void setTop(final BigDecimal top) { |
85 this.top = top; | 87 this.top = top; |
86 } | 88 } |
87 | 89 |
88 public BigDecimal getBottom() { | 90 public BigDecimal getBottom() { |
89 return bottom; | 91 return this.bottom; |
90 } | 92 } |
91 | 93 |
92 public void setBottom(BigDecimal bottom) { | 94 public void setBottom(final BigDecimal bottom) { |
93 this.bottom = bottom; | 95 this.bottom = bottom; |
94 } | 96 } |
95 | 97 |
96 public BigDecimal getDistanceVL() { | 98 public BigDecimal getDistanceVL() { |
97 return distanceVL; | 99 return this.distanceVL; |
98 } | 100 } |
99 | 101 |
100 public void setDistanceVL(BigDecimal distanceVL) { | 102 public void setDistanceVL(final BigDecimal distanceVL) { |
101 this.distanceVL = distanceVL; | 103 this.distanceVL = distanceVL; |
102 } | 104 } |
103 | 105 |
104 public BigDecimal getDistanceHF() { | 106 public BigDecimal getDistanceHF() { |
105 return distanceHF; | 107 return this.distanceHF; |
106 } | 108 } |
107 | 109 |
108 public void setDistanceHF(BigDecimal distanceHF) { | 110 public void setDistanceHF(final BigDecimal distanceHF) { |
109 this.distanceHF = distanceHF; | 111 this.distanceHF = distanceHF; |
110 } | 112 } |
111 | 113 |
112 public BigDecimal getDistanceVR() { | 114 public BigDecimal getDistanceVR() { |
113 return distanceVR; | 115 return this.distanceVR; |
114 } | 116 } |
115 | 117 |
116 public void setDistanceVR(BigDecimal distanceVR) { | 118 public void setDistanceVR(final BigDecimal distanceVR) { |
117 this.distanceVR = distanceVR; | 119 this.distanceVR = distanceVR; |
118 } | 120 } |
119 | 121 |
120 public void storeDependencies() { | 122 public void storeDependencies() { |
121 getPeer(); | 123 getPeer(); |
122 for (ImportHYKFlowZone zone: zones) { | 124 for (final ImportHYKFlowZone zone: this.zones) { |
123 zone.storeDependencies(); | 125 zone.storeDependencies(); |
124 } | 126 } |
125 } | 127 } |
126 | 128 |
127 public HYKFormation getPeer() { | 129 public HYKFormation getPeer() { |
128 if (peer == null) { | 130 if (this.peer == null) { |
129 HYKEntry e = entry.getPeer(); | 131 final HYKEntry e = this.entry.getPeer(); |
130 Session session = ImporterSession.getInstance() | 132 final Session session = ImporterSession.getInstance() |
131 .getDatabaseSession(); | 133 .getDatabaseSession(); |
132 Query query = session.createQuery( | 134 List<HYKFormation> formations; |
133 "from HYKFormation where formationNum=:formationNum " + | 135 if (this.entry.storeMode == StoreMode.INSERT) |
134 "and entry=:entry and top=:top and bottom=:bottom " + | 136 formations = null; |
135 "and distanceVL=:distanceVL and distanceHF=:distanceHF " + | 137 else { |
136 "and distanceVR=:distanceVR"); | 138 final Query query = session.createQuery( |
137 query.setParameter("formationNum", formationNum); | 139 "from HYKFormation where formationNum=:formationNum " + |
138 query.setParameter("entry", e); | 140 "and entry=:entry and top=:top and bottom=:bottom " + |
139 query.setParameter("top", top); | 141 "and distanceVL=:distanceVL and distanceHF=:distanceHF " + |
140 query.setParameter("bottom", bottom); | 142 "and distanceVR=:distanceVR"); |
141 query.setParameter("distanceVL", distanceVL); | 143 query.setParameter("formationNum", this.formationNum); |
142 query.setParameter("distanceHF", distanceHF); | 144 query.setParameter("entry", e); |
143 query.setParameter("distanceVR", distanceVR); | 145 query.setParameter("top", this.top); |
144 List<HYKFormation> formations = query.list(); | 146 query.setParameter("bottom", this.bottom); |
145 if (formations.isEmpty()) { | 147 query.setParameter("distanceVL", this.distanceVL); |
146 peer = new HYKFormation( | 148 query.setParameter("distanceHF", this.distanceHF); |
147 formationNum, e, top, bottom, | 149 query.setParameter("distanceVR", this.distanceVR); |
148 distanceVL, distanceHF, distanceVR); | 150 formations = query.list(); |
149 session.save(peer); | 151 } |
152 if ((formations == null) || formations.isEmpty()) { | |
153 this.peer = new HYKFormation( | |
154 this.formationNum, e, this.top, this.bottom, | |
155 this.distanceVL, this.distanceHF, this.distanceVR); | |
156 session.save(this.peer); | |
157 this.storeMode = StoreMode.INSERT; | |
150 } | 158 } |
151 else { | 159 else { |
152 peer = formations.get(0); | 160 this.peer = formations.get(0); |
161 this.storeMode = StoreMode.UPDATE; | |
153 } | 162 } |
154 } | 163 } |
155 return peer; | 164 return this.peer; |
156 } | 165 } |
157 } | 166 } |
158 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : | 167 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |