comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/FixingsOverview.java @ 2565:72f77b2210c2

FixingsOverview: Added XSL transformation which directly converts the output of the fixings overview service into an HTML representation. flys-artifacts/trunk@4091 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Tue, 21 Feb 2012 18:22:06 +0000
parents 3f038d54bc87
children 938e2f6c0c9a
comparison
equal deleted inserted replaced
2564:3f038d54bc87 2565:72f77b2210c2
37 " id AS river_id," + 37 " id AS river_id," +
38 " km_up " + 38 " km_up " +
39 "FROM rivers " + 39 "FROM rivers " +
40 "WHERE" + 40 "WHERE" +
41 " name = :name"; 41 " name = :name";
42
43 public static final String SQL_RIVER_EXTENT =
44 "SELECT" +
45 " MIN(wcv.position) AS start_km," +
46 " MAX(wcv.position) AS end_km " +
47 "FROM wst_column_values wcv" +
48 " JOIN wst_columns wc ON wcv.wst_column_id = wc.id " +
49 " JOIN wsts w ON wc.wst_id = w.id " +
50 "WHERE" +
51 " w.kind = 0 AND w.river_id = :river_id";
52 42
53 public static final String SQL_GAUGES = 43 public static final String SQL_GAUGES =
54 "SELECT" + 44 "SELECT" +
55 " g.id AS gauge_id," + 45 " g.id AS gauge_id," +
56 " r.a AS a," + 46 " r.a AS a," +
151 141
152 public boolean intersects(Range other) { 142 public boolean intersects(Range other) {
153 return !disjoint(other); 143 return !disjoint(other);
154 } 144 }
155 145
146 public void extend(Range other) {
147 if (other.start < start) start = other.start;
148 if (other.end > end ) end = other.end;
149 }
150
156 public boolean clip(Range other) { 151 public boolean clip(Range other) {
157 if (disjoint(other)) return false; 152 if (disjoint(other)) return false;
158 153
159 if (other.start > start) start = other.start; 154 if (other.start > start) start = other.start;
160 if (other.end < end ) end = other.end; 155 if (other.end < end ) end = other.end;
537 for (Column column: columns) { 532 for (Column column: columns) {
538 column.loadKmRange(query); 533 column.loadKmRange(query);
539 } 534 }
540 } 535 }
541 536
537 public void adjustExtent(Range extent) {
538 for (Column column: columns) {
539 extent.extend(column);
540 }
541 }
542
542 public void loadColumnsQRanges( 543 public void loadColumnsQRanges(
543 SQLQuery query, 544 SQLQuery query,
544 GaugeFinder gaugeFinder 545 GaugeFinder gaugeFinder
545 ) { 546 ) {
546 for (Column column: columns) { 547 for (Column column: columns) {
568 protected List<Fixing> fixings; 569 protected List<Fixing> fixings;
569 protected Range extent; 570 protected Range extent;
570 571
571 public FixingsOverview() { 572 public FixingsOverview() {
572 fixings = new ArrayList<Fixing>(); 573 fixings = new ArrayList<Fixing>();
574 extent = new Range(Double.MAX_VALUE, -Double.MAX_VALUE);
573 } 575 }
574 576
575 public FixingsOverview(String riverName) { 577 public FixingsOverview(String riverName) {
576 this(); 578 this();
577 this.riverName = riverName; 579 this.riverName = riverName;
593 595
594 Object [] row = list.get(0); 596 Object [] row = list.get(0);
595 597
596 riverId = (Integer)row[0]; 598 riverId = (Integer)row[0];
597 isKmUp = (Boolean)row[1]; 599 isKmUp = (Boolean)row[1];
598
599 return true;
600 }
601
602 protected boolean loadRiverExtent(Session session) {
603 SQLQuery query = session.createSQLQuery(SQL_RIVER_EXTENT)
604 .addScalar("start_km", StandardBasicTypes.DOUBLE)
605 .addScalar("end_km", StandardBasicTypes.DOUBLE);
606
607 query.setInteger("river_id", riverId);
608
609 List<Object []> list = query.list();
610
611 if (list.isEmpty()) {
612 log.warn("River " + riverId + " has no extent.");
613 return false;
614 }
615
616 Object [] row = list.get(0);
617 extent = new Range((Double)row[0], (Double)row[1]);
618 600
619 return true; 601 return true;
620 } 602 }
621 603
622 protected GaugeFinder loadGauges(Session session) { 604 protected GaugeFinder loadGauges(Session session) {
703 for (Fixing fixing: fixings) { 685 for (Fixing fixing: fixings) {
704 fixing.loadColumnsQRanges(query, gaugeFinder); 686 fixing.loadColumnsQRanges(query, gaugeFinder);
705 } 687 }
706 } 688 }
707 689
690 protected void adjustExtent() {
691 for (Fixing fixing: fixings) {
692 fixing.adjustExtent(extent);
693 }
694 }
695
708 public boolean load(Session session) { 696 public boolean load(Session session) {
709 697
710 if (!loadRiver(session) 698 if (!loadRiver(session)) {
711 || !loadRiverExtent(session)) {
712 return false; 699 return false;
713 } 700 }
714 701
715 GaugeFinder gaugeFinder = loadGauges(session); 702 GaugeFinder gaugeFinder = loadGauges(session);
716 703
720 } 707 }
721 708
722 loadFixings(session); 709 loadFixings(session);
723 loadFixingsColumns(session); 710 loadFixingsColumns(session);
724 loadFixingsColumnsKmRange(session); 711 loadFixingsColumnsKmRange(session);
712
713 adjustExtent();
714
725 loadFixingsColumnsQRanges(session, gaugeFinder); 715 loadFixingsColumnsQRanges(session, gaugeFinder);
726 716
727 return true; 717 return true;
728 } 718 }
729 719
881 Element riverElement = document.createElement("river"); 871 Element riverElement = document.createElement("river");
882 872
883 riverElement.setAttribute("from", String.valueOf(extent.start)); 873 riverElement.setAttribute("from", String.valueOf(extent.start));
884 riverElement.setAttribute("to", String.valueOf(extent.end)); 874 riverElement.setAttribute("to", String.valueOf(extent.end));
885 riverElement.setAttribute("rid", String.valueOf(riverId)); 875 riverElement.setAttribute("rid", String.valueOf(riverId));
876 riverElement.setAttribute("name", riverName);
886 877
887 fixingsElement.appendChild(riverElement); 878 fixingsElement.appendChild(riverElement);
888 879
889 SimpleDateFormat df = new SimpleDateFormat(DATE_FORMAT); 880 SimpleDateFormat df = new SimpleDateFormat(DATE_FORMAT);
890 881

http://dive4elements.wald.intevation.org