comparison artifacts/src/main/java/org/dive4elements/river/artifacts/states/minfo/SedimentLoadCalculate.java @ 7520:b8faaac71507

issue1658: Adjuste facet descriptions to include unit.
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Mon, 04 Nov 2013 17:24:33 +0100
parents f2d97537f48a
children ea3e78a7f4e4
comparison
equal deleted inserted replaced
7519:0d45b1d6e432 7520:b8faaac71507
190 facets.addAll(newFacets); 190 facets.addAll(newFacets);
191 191
192 return res; 192 return res;
193 } 193 }
194 194
195 protected void generateYearFacets(CallContext context, List<Facet> newFacets, 195 private String facetNameInfo(SedimentLoadResult result, String unit) {
196 SedimentLoadResult[] results, String stateId, String hash) { 196 return " - " + result.getStartYear() + " " + unit;
197 logger.debug("SedimentLoadCalculate.generateFacets"); 197 }
198
199
200 protected void generateYearFacets(CallContext context,
201 List<Facet> newFacets,
202 SedimentLoadResult[] results, String stateId, String hash
203 ) {
204 logger.debug("SedimentLoadCalculate.generateFacets " + access.getUnit());
198 205
199 CallMeta meta = context.getMeta(); 206 CallMeta meta = context.getMeta();
200 boolean isUnitTA = access.getUnit().startsWith("t"); 207 boolean isUnitTA = access.getUnit().startsWith("t");
208 String unit = (isUnitTA)
209 ? Resources.getMsg(context.getMeta(), "state.minfo.sediment.load.t_per_a", "(t/a)")
210 : Resources.getMsg(context.getMeta(), "state.minfo.sediment.load.m3_per_a", "(m^3/a)");
201 211
202 // newFacets.add(new DataFacet(CSV, "CSV data", ComputeType.ADVANCE, hash, id)); 212 // newFacets.add(new DataFacet(CSV, "CSV data", ComputeType.ADVANCE, hash, id));
203 for (int idx = 0; idx < results.length; idx++) { 213 for (int idx = 0; idx < results.length; idx++) {
204 SedimentLoadResult res = results[idx]; 214 SedimentLoadResult res = results[idx];
205 if (res.hasCoarseData()) { 215 if (res.hasCoarseData()) {
210 :SEDIMENT_LOAD_M3A_COARSE, 220 :SEDIMENT_LOAD_M3A_COARSE,
211 Resources.getMsg( 221 Resources.getMsg(
212 meta, 222 meta,
213 I18N_FACET_SEDIMENTLOAD_COARSE, 223 I18N_FACET_SEDIMENTLOAD_COARSE,
214 I18N_FACET_SEDIMENTLOAD_COARSE) + 224 I18N_FACET_SEDIMENTLOAD_COARSE) +
215 " - " + res.getStartYear(), 225 facetNameInfo(res, unit),
216 ComputeType.ADVANCE, 226 ComputeType.ADVANCE,
217 stateId, 227 stateId,
218 hash)); 228 hash));
219 } 229 }
220 if (res.hasSandData()) { 230 if (res.hasSandData()) {
225 :SEDIMENT_LOAD_M3A_SAND, 235 :SEDIMENT_LOAD_M3A_SAND,
226 Resources.getMsg( 236 Resources.getMsg(
227 meta, 237 meta,
228 I18N_FACET_SEDIMENTLOAD_SAND, 238 I18N_FACET_SEDIMENTLOAD_SAND,
229 I18N_FACET_SEDIMENTLOAD_SAND) + 239 I18N_FACET_SEDIMENTLOAD_SAND) +
230 " - " + res.getStartYear(), 240 facetNameInfo(res, unit),
231 ComputeType.ADVANCE, 241 ComputeType.ADVANCE,
232 stateId, 242 stateId,
233 hash)); 243 hash));
234 } 244 }
235 if (res.hasFineMiddleData()) { 245 if (res.hasFineMiddleData()) {
240 :SEDIMENT_LOAD_M3A_FINEMIDDLE, 250 :SEDIMENT_LOAD_M3A_FINEMIDDLE,
241 Resources.getMsg( 251 Resources.getMsg(
242 meta, 252 meta,
243 I18N_FACET_SEDIMENTLOAD_FINE_MIDDLE, 253 I18N_FACET_SEDIMENTLOAD_FINE_MIDDLE,
244 I18N_FACET_SEDIMENTLOAD_FINE_MIDDLE) + 254 I18N_FACET_SEDIMENTLOAD_FINE_MIDDLE) +
245 " - " + res.getStartYear(), 255 facetNameInfo(res, unit),
246 ComputeType.ADVANCE, 256 ComputeType.ADVANCE,
247 stateId, 257 stateId,
248 hash)); 258 hash));
249 } 259 }
250 if (res.hasSuspSandData()) { 260 if (res.hasSuspSandData()) {
254 ?SEDIMENT_LOAD_TA_SUSP_SAND 264 ?SEDIMENT_LOAD_TA_SUSP_SAND
255 :SEDIMENT_LOAD_M3A_SUSP_SAND, 265 :SEDIMENT_LOAD_M3A_SUSP_SAND,
256 Resources.getMsg( 266 Resources.getMsg(
257 meta, 267 meta,
258 I18N_FACET_SEDIMENTLOAD_SUSPSAND, 268 I18N_FACET_SEDIMENTLOAD_SUSPSAND,
259 I18N_FACET_SEDIMENTLOAD_SUSPSAND) 269 I18N_FACET_SEDIMENTLOAD_SUSPSAND) +
260 + " - " + res.getStartYear(), 270 facetNameInfo(res, unit),
261 ComputeType.ADVANCE, 271 ComputeType.ADVANCE,
262 stateId, 272 stateId,
263 hash)); 273 hash));
264 } 274 }
265 if (res.hasSuspSandBedData()) { 275 if (res.hasSuspSandBedData()) {
270 :SEDIMENT_LOAD_M3A_SUSP_SAND_BED, 280 :SEDIMENT_LOAD_M3A_SUSP_SAND_BED,
271 Resources.getMsg( 281 Resources.getMsg(
272 meta, 282 meta,
273 I18N_FACET_SEDIMENTLOAD_SUSPSANDBED, 283 I18N_FACET_SEDIMENTLOAD_SUSPSANDBED,
274 I18N_FACET_SEDIMENTLOAD_SUSPSANDBED) + 284 I18N_FACET_SEDIMENTLOAD_SUSPSANDBED) +
275 " - " + res.getStartYear(), 285 facetNameInfo(res, unit),
276 ComputeType.ADVANCE, 286 ComputeType.ADVANCE,
277 stateId, 287 stateId,
278 hash)); 288 hash));
279 } 289 }
280 if (res.hasSuspSedimentData()) { 290 if (res.hasSuspSedimentData()) {
285 :SEDIMENT_LOAD_M3A_SUSP_SEDIMENT, 295 :SEDIMENT_LOAD_M3A_SUSP_SEDIMENT,
286 Resources.getMsg( 296 Resources.getMsg(
287 meta, 297 meta,
288 I18N_FACET_SEDIMENTLOAD_SUSPSEDIMENT, 298 I18N_FACET_SEDIMENTLOAD_SUSPSEDIMENT,
289 I18N_FACET_SEDIMENTLOAD_SUSPSEDIMENT) + 299 I18N_FACET_SEDIMENTLOAD_SUSPSEDIMENT) +
290 " - " + res.getStartYear(), 300 facetNameInfo(res, unit),
291 ComputeType.ADVANCE, 301 ComputeType.ADVANCE,
292 stateId, 302 stateId,
293 hash)); 303 hash));
294 304
295 } 305 }
301 :SEDIMENT_LOAD_M3A_TOTAL, 311 :SEDIMENT_LOAD_M3A_TOTAL,
302 Resources.getMsg( 312 Resources.getMsg(
303 meta, 313 meta,
304 I18N_FACET_SEDIMENTLOAD_TOTAL, 314 I18N_FACET_SEDIMENTLOAD_TOTAL,
305 I18N_FACET_SEDIMENTLOAD_TOTAL) + 315 I18N_FACET_SEDIMENTLOAD_TOTAL) +
306 " - " + res.getStartYear(), 316 facetNameInfo(res, unit),
307 ComputeType.ADVANCE, 317 ComputeType.ADVANCE,
308 stateId, 318 stateId,
309 hash)); 319 hash));
310 } 320 }
311 } 321 }
322 }
323
324 private String epochFacetNameInfo(SedimentLoadResult result, String unit) {
325 return " - " + result.getStartYear() + "-" + result.getEndYear() + " " + unit;
312 } 326 }
313 327
314 protected void generateEpochFacets( 328 protected void generateEpochFacets(
315 CallContext context, 329 CallContext context,
316 List<Facet> newFacets, 330 List<Facet> newFacets,
317 SedimentLoadResult[] results, 331 SedimentLoadResult[] results,
318 String stateId, 332 String stateId,
319 String hash 333 String hash
320 ) { 334 ) {
321 logger.debug("SedimentLoadCalculate.generateEpochFacets"); 335 logger.debug("SedimentLoadCalculate.generateEpochFacets ");
322 336
323 CallMeta meta = context.getMeta(); 337 CallMeta meta = context.getMeta();
324 boolean isUnitTA = access.getUnit().startsWith("t"); 338 boolean isUnitTA = access.getUnit().startsWith("t");
339 String unit = (isUnitTA)
340 ? Resources.getMsg(context.getMeta(), "state.minfo.sediment.load.t_per_a", "(t/a)")
341 : Resources.getMsg(context.getMeta(), "state.minfo.sediment.load.m3_per_a", "(m^3/a)");
325 342
326 // newFacets.add(new DataFacet(CSV, "CSV data", ComputeType.ADVANCE, hash, id)); 343 // newFacets.add(new DataFacet(CSV, "CSV data", ComputeType.ADVANCE, hash, id));
327 for (int idx = 0; idx < results.length; idx++) { 344 for (int idx = 0; idx < results.length; idx++) { SedimentLoadResult res = results[idx];
328 SedimentLoadResult res = results[idx];
329 if (res.hasCoarseData()) { 345 if (res.hasCoarseData()) {
330 newFacets.add(new SedimentLoadFacet( 346 newFacets.add(new SedimentLoadFacet(
331 idx, 347 idx,
332 (isUnitTA) 348 (isUnitTA)
333 ?SEDIMENT_LOAD_TA_COARSE 349 ?SEDIMENT_LOAD_TA_COARSE
334 :SEDIMENT_LOAD_M3A_COARSE, 350 :SEDIMENT_LOAD_M3A_COARSE,
335 Resources.getMsg( 351 Resources.getMsg(
336 meta, 352 meta,
337 I18N_FACET_SEDIMENTLOAD_COARSE, 353 I18N_FACET_SEDIMENTLOAD_COARSE,
338 I18N_FACET_SEDIMENTLOAD_COARSE) + 354 I18N_FACET_SEDIMENTLOAD_COARSE) +
339 " - " + res.getStartYear() + "-" + res.getEndYear(), 355 epochFacetNameInfo(res,unit),
340 ComputeType.ADVANCE, 356 ComputeType.ADVANCE,
341 stateId, 357 stateId,
342 hash)); 358 hash));
343 } 359 }
344 if (res.hasSandData()) { 360 if (res.hasSandData()) {
349 :SEDIMENT_LOAD_M3A_SAND, 365 :SEDIMENT_LOAD_M3A_SAND,
350 Resources.getMsg( 366 Resources.getMsg(
351 meta, 367 meta,
352 I18N_FACET_SEDIMENTLOAD_SAND, 368 I18N_FACET_SEDIMENTLOAD_SAND,
353 I18N_FACET_SEDIMENTLOAD_SAND) + 369 I18N_FACET_SEDIMENTLOAD_SAND) +
354 " - " + res.getStartYear() + "-" + res.getEndYear(), 370 epochFacetNameInfo(res,unit),
355 ComputeType.ADVANCE, 371 ComputeType.ADVANCE,
356 stateId, 372 stateId,
357 hash)); 373 hash));
358 } 374 }
359 if (res.hasFineMiddleData()) { 375 if (res.hasFineMiddleData()) {
379 :SEDIMENT_LOAD_M3A_SUSP_SAND, 395 :SEDIMENT_LOAD_M3A_SUSP_SAND,
380 Resources.getMsg( 396 Resources.getMsg(
381 meta, 397 meta,
382 I18N_FACET_SEDIMENTLOAD_SUSPSAND, 398 I18N_FACET_SEDIMENTLOAD_SUSPSAND,
383 I18N_FACET_SEDIMENTLOAD_SUSPSAND) 399 I18N_FACET_SEDIMENTLOAD_SUSPSAND)
384 + " - " + res.getStartYear() + "-" + res.getEndYear(), 400 + epochFacetNameInfo(res,unit),
385 ComputeType.ADVANCE, 401 ComputeType.ADVANCE,
386 stateId, 402 stateId,
387 hash)); 403 hash));
388 } 404 }
389 if (res.hasSuspSandBedData()) { 405 if (res.hasSuspSandBedData()) {
394 :SEDIMENT_LOAD_M3A_SUSP_SAND, 410 :SEDIMENT_LOAD_M3A_SUSP_SAND,
395 Resources.getMsg( 411 Resources.getMsg(
396 meta, 412 meta,
397 I18N_FACET_SEDIMENTLOAD_SUSPSANDBED, 413 I18N_FACET_SEDIMENTLOAD_SUSPSANDBED,
398 I18N_FACET_SEDIMENTLOAD_SUSPSANDBED) + 414 I18N_FACET_SEDIMENTLOAD_SUSPSANDBED) +
399 " - " + res.getStartYear() + "-" + res.getEndYear(), 415 epochFacetNameInfo(res,unit),
400 ComputeType.ADVANCE, 416 ComputeType.ADVANCE,
401 stateId, 417 stateId,
402 hash)); 418 hash));
403 } 419 }
404 if (res.hasSuspSedimentData()) { 420 if (res.hasSuspSedimentData()) {
409 :SEDIMENT_LOAD_M3A_SUSP_SEDIMENT, 425 :SEDIMENT_LOAD_M3A_SUSP_SEDIMENT,
410 Resources.getMsg( 426 Resources.getMsg(
411 meta, 427 meta,
412 I18N_FACET_SEDIMENTLOAD_SUSPSEDIMENT, 428 I18N_FACET_SEDIMENTLOAD_SUSPSEDIMENT,
413 I18N_FACET_SEDIMENTLOAD_SUSPSEDIMENT) + 429 I18N_FACET_SEDIMENTLOAD_SUSPSEDIMENT) +
414 " - " + res.getStartYear() + "-" + res.getEndYear(), 430 epochFacetNameInfo(res,unit),
415 ComputeType.ADVANCE, 431 ComputeType.ADVANCE,
416 stateId, 432 stateId,
417 hash)); 433 hash));
418 434
419 } 435 }
425 :SEDIMENT_LOAD_M3A_TOTAL_LOAD, 441 :SEDIMENT_LOAD_M3A_TOTAL_LOAD,
426 Resources.getMsg( 442 Resources.getMsg(
427 meta, 443 meta,
428 I18N_FACET_SEDIMENTLOAD_TOTAL_LOAD, 444 I18N_FACET_SEDIMENTLOAD_TOTAL_LOAD,
429 I18N_FACET_SEDIMENTLOAD_TOTAL_LOAD) + 445 I18N_FACET_SEDIMENTLOAD_TOTAL_LOAD) +
430 " - " + res.getStartYear() + "-" + res.getEndYear(), 446 epochFacetNameInfo(res,unit),
431 ComputeType.ADVANCE, 447 ComputeType.ADVANCE,
432 stateId, 448 stateId,
433 hash)); 449 hash));
434 } 450 }
435 if (res.hasTotalData()) { 451 if (res.hasTotalData()) {
440 :SEDIMENT_LOAD_M3A_TOTAL, 456 :SEDIMENT_LOAD_M3A_TOTAL,
441 Resources.getMsg( 457 Resources.getMsg(
442 meta, 458 meta,
443 I18N_FACET_SEDIMENTLOAD_TOTAL, 459 I18N_FACET_SEDIMENTLOAD_TOTAL,
444 I18N_FACET_SEDIMENTLOAD_TOTAL) + 460 I18N_FACET_SEDIMENTLOAD_TOTAL) +
445 " - " + res.getStartYear() + "-" + res.getEndYear(), 461 epochFacetNameInfo(res,unit),
446 ComputeType.ADVANCE, 462 ComputeType.ADVANCE,
447 stateId, 463 stateId,
448 hash)); 464 hash));
449 } 465 }
450 } 466 }
459 ) { 475 ) {
460 logger.debug("SedimentLoadCalculate.generateOffEpochFacets"); 476 logger.debug("SedimentLoadCalculate.generateOffEpochFacets");
461 477
462 CallMeta meta = context.getMeta(); 478 CallMeta meta = context.getMeta();
463 boolean isUnitTA = access.getUnit().startsWith("t"); 479 boolean isUnitTA = access.getUnit().startsWith("t");
480 String unit = (isUnitTA)
481 ? Resources.getMsg(context.getMeta(), "state.minfo.sediment.load.t_per_a", "(t/a)")
482 : Resources.getMsg(context.getMeta(), "state.minfo.sediment.load.m3_per_a", "(m^3/a)");
464 483
465 // newFacets.add(new DataFacet(CSV, "CSV data", ComputeType.ADVANCE, hash, id)); 484 // newFacets.add(new DataFacet(CSV, "CSV data", ComputeType.ADVANCE, hash, id));
466 for (int idx = 0; idx < results.length; idx++) { 485 for (int idx = 0; idx < results.length; idx++) {
467 SedimentLoadResult res = results[idx]; 486 SedimentLoadResult res = results[idx];
468 if (res.hasCoarseData()) { 487 if (res.hasCoarseData()) {
473 :SEDIMENT_LOAD_M3A_COARSE, 492 :SEDIMENT_LOAD_M3A_COARSE,
474 Resources.getMsg( 493 Resources.getMsg(
475 meta, 494 meta,
476 I18N_FACET_SEDIMENTLOAD_COARSE, 495 I18N_FACET_SEDIMENTLOAD_COARSE,
477 I18N_FACET_SEDIMENTLOAD_COARSE) + 496 I18N_FACET_SEDIMENTLOAD_COARSE) +
478 " - " + res.getStartYear() + "-" + res.getEndYear(), 497 epochFacetNameInfo(res,unit),
479 ComputeType.ADVANCE, 498 ComputeType.ADVANCE,
480 stateId, 499 stateId,
481 hash)); 500 hash));
482 } 501 }
483 if (res.hasSandData()) { 502 if (res.hasSandData()) {
488 :SEDIMENT_LOAD_M3A_SAND, 507 :SEDIMENT_LOAD_M3A_SAND,
489 Resources.getMsg( 508 Resources.getMsg(
490 meta, 509 meta,
491 I18N_FACET_SEDIMENTLOAD_SAND, 510 I18N_FACET_SEDIMENTLOAD_SAND,
492 I18N_FACET_SEDIMENTLOAD_SAND) + 511 I18N_FACET_SEDIMENTLOAD_SAND) +
493 " - " + res.getStartYear() + "-" + res.getEndYear(), 512 epochFacetNameInfo(res,unit),
494 ComputeType.ADVANCE, 513 ComputeType.ADVANCE,
495 stateId, 514 stateId,
496 hash)); 515 hash));
497 } 516 }
498 if (res.hasFineMiddleData()) { 517 if (res.hasFineMiddleData()) {
503 :SEDIMENT_LOAD_M3A_FINEMIDDLE, 522 :SEDIMENT_LOAD_M3A_FINEMIDDLE,
504 Resources.getMsg( 523 Resources.getMsg(
505 meta, 524 meta,
506 I18N_FACET_SEDIMENTLOAD_FINE_MIDDLE, 525 I18N_FACET_SEDIMENTLOAD_FINE_MIDDLE,
507 I18N_FACET_SEDIMENTLOAD_FINE_MIDDLE) + 526 I18N_FACET_SEDIMENTLOAD_FINE_MIDDLE) +
508 " - " + res.getStartYear() + "-" + res.getEndYear(), 527 epochFacetNameInfo(res,unit),
509 ComputeType.ADVANCE, 528 ComputeType.ADVANCE,
510 stateId, 529 stateId,
511 hash)); 530 hash));
512 } 531 }
513 if (res.hasSuspSandData()) { 532 if (res.hasSuspSandData()) {
518 :SEDIMENT_LOAD_M3A_SUSP_SAND, 537 :SEDIMENT_LOAD_M3A_SUSP_SAND,
519 Resources.getMsg( 538 Resources.getMsg(
520 meta, 539 meta,
521 I18N_FACET_SEDIMENTLOAD_SUSPSAND, 540 I18N_FACET_SEDIMENTLOAD_SUSPSAND,
522 I18N_FACET_SEDIMENTLOAD_SUSPSAND) + 541 I18N_FACET_SEDIMENTLOAD_SUSPSAND) +
523 " - " + res.getStartYear() + "-" + res.getEndYear(), 542 epochFacetNameInfo(res,unit),
524 ComputeType.ADVANCE, 543 ComputeType.ADVANCE,
525 stateId, 544 stateId,
526 hash)); 545 hash));
527 } 546 }
528 if (res.hasSuspSandBedData()) { 547 if (res.hasSuspSandBedData()) {
533 :SEDIMENT_LOAD_M3A_SUSP_SAND_BED, 552 :SEDIMENT_LOAD_M3A_SUSP_SAND_BED,
534 Resources.getMsg( 553 Resources.getMsg(
535 meta, 554 meta,
536 I18N_FACET_SEDIMENTLOAD_SUSPSANDBED, 555 I18N_FACET_SEDIMENTLOAD_SUSPSANDBED,
537 I18N_FACET_SEDIMENTLOAD_SUSPSANDBED) + 556 I18N_FACET_SEDIMENTLOAD_SUSPSANDBED) +
538 " - " + res.getStartYear() + "-" + res.getEndYear(), 557 epochFacetNameInfo(res,unit),
539 ComputeType.ADVANCE, 558 ComputeType.ADVANCE,
540 stateId, 559 stateId,
541 hash)); 560 hash));
542 } 561 }
543 if (res.hasSuspSedimentData()) { 562 if (res.hasSuspSedimentData()) {
548 :SEDIMENT_LOAD_M3A_SUSP_SEDIMENT, 567 :SEDIMENT_LOAD_M3A_SUSP_SEDIMENT,
549 Resources.getMsg( 568 Resources.getMsg(
550 meta, 569 meta,
551 I18N_FACET_SEDIMENTLOAD_SUSPSEDIMENT, 570 I18N_FACET_SEDIMENTLOAD_SUSPSEDIMENT,
552 I18N_FACET_SEDIMENTLOAD_SUSPSEDIMENT) + 571 I18N_FACET_SEDIMENTLOAD_SUSPSEDIMENT) +
553 " - " + res.getStartYear() + "-" + res.getEndYear(), 572 epochFacetNameInfo(res,unit),
554 ComputeType.ADVANCE, 573 ComputeType.ADVANCE,
555 stateId, 574 stateId,
556 hash)); 575 hash));
557 576
558 } 577 }
564 :SEDIMENT_LOAD_M3A_TOTAL_LOAD, 583 :SEDIMENT_LOAD_M3A_TOTAL_LOAD,
565 Resources.getMsg( 584 Resources.getMsg(
566 meta, 585 meta,
567 I18N_FACET_SEDIMENTLOAD_TOTAL_LOAD, 586 I18N_FACET_SEDIMENTLOAD_TOTAL_LOAD,
568 I18N_FACET_SEDIMENTLOAD_TOTAL_LOAD) + 587 I18N_FACET_SEDIMENTLOAD_TOTAL_LOAD) +
569 " - " + res.getStartYear() + "-" + res.getEndYear(), 588 epochFacetNameInfo(res,unit),
570 ComputeType.ADVANCE, 589 ComputeType.ADVANCE,
571 stateId, 590 stateId,
572 hash)); 591 hash));
573 } 592 }
574 if (res.hasTotalData()) { 593 if (res.hasTotalData()) {
579 :SEDIMENT_LOAD_M3A_TOTAL, 598 :SEDIMENT_LOAD_M3A_TOTAL,
580 Resources.getMsg( 599 Resources.getMsg(
581 meta, 600 meta,
582 I18N_FACET_SEDIMENTLOAD_TOTAL, 601 I18N_FACET_SEDIMENTLOAD_TOTAL,
583 I18N_FACET_SEDIMENTLOAD_TOTAL) + 602 I18N_FACET_SEDIMENTLOAD_TOTAL) +
584 " - " + res.getStartYear() + "-" + res.getEndYear(), 603 epochFacetNameInfo(res,unit),
585 ComputeType.ADVANCE, 604 ComputeType.ADVANCE,
586 stateId, 605 stateId,
587 hash)); 606 hash));
588 } 607 }
589 } 608 }

http://dive4elements.wald.intevation.org