Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/FastCrossSectionChunk.java @ 2119:dc28ea60b53d
Added cached/chunked access to cross section lines. TODO: Use the FastCrossSectionLines.
flys-artifacts/trunk@3689 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Mon, 16 Jan 2012 15:51:46 +0000 |
parents | |
children | d626ae185305 |
comparison
equal
deleted
inserted
replaced
2118:4d57d456e261 | 2119:dc28ea60b53d |
---|---|
1 package de.intevation.flys.artifacts.model; | |
2 | |
3 import java.util.ArrayList; | |
4 import java.util.List; | |
5 import java.util.Collections; | |
6 | |
7 import java.io.Serializable; | |
8 | |
9 import de.intevation.flys.model.CrossSectionLine; | |
10 import de.intevation.flys.model.CrossSection; | |
11 | |
12 public class FastCrossSectionChunk | |
13 implements Serializable | |
14 { | |
15 public static final String PREFIX = "FCSC:"; | |
16 public static final double KM_RANGE = 1.0; | |
17 | |
18 protected double startKm; | |
19 protected int crossSectionId; | |
20 | |
21 protected List<FastCrossSectionLine> crossSectionLines; | |
22 | |
23 public FastCrossSectionChunk() { | |
24 } | |
25 | |
26 public FastCrossSectionChunk(CrossSection cs, double km) { | |
27 | |
28 crossSectionId = cs.getId(); | |
29 startKm = Math.floor(km); | |
30 double stopKm = startKm + KM_RANGE; | |
31 | |
32 List<CrossSectionLine> csls = cs.getLines(startKm, stopKm); | |
33 | |
34 crossSectionLines = new ArrayList | |
35 <FastCrossSectionLine>(csls.size()); | |
36 | |
37 for (CrossSectionLine csl: csls) { | |
38 crossSectionLines.add(new FastCrossSectionLine(csl)); | |
39 } | |
40 } | |
41 | |
42 public FastCrossSectionLine getCrossSectionLine(double km) { | |
43 FastCrossSectionLine key = new FastCrossSectionLine(km); | |
44 int pos = Collections.binarySearch( | |
45 crossSectionLines, key, FastCrossSectionLine.KM_CMP); | |
46 return pos < 0 ? null : crossSectionLines.get(pos); | |
47 } | |
48 | |
49 public static String createHashKey(CrossSection cs, double km) { | |
50 return PREFIX + cs.getId() + ":" + (int)Math.floor(km); | |
51 } | |
52 | |
53 public String getHashKey() { | |
54 return PREFIX + crossSectionId + ":" + (int)Math.floor(startKm); | |
55 } | |
56 | |
57 public double getStartKm() { | |
58 return startKm; | |
59 } | |
60 | |
61 public void setStartKm(double startKm) { | |
62 this.startKm = startKm; | |
63 } | |
64 | |
65 public double getStopKm() { | |
66 return startKm + KM_RANGE; | |
67 } | |
68 | |
69 public int getCrossSectionId() { | |
70 return crossSectionId; | |
71 } | |
72 | |
73 public void setCrossSectionId(int crossSectionId) { | |
74 this.crossSectionId = crossSectionId; | |
75 } | |
76 } | |
77 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |