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 :

http://dive4elements.wald.intevation.org