comparison flys-artifacts/src/main/java/de/intevation/flys/utils/FLYSUtils.java @ 2179:c3e523a76340

Added method that return the differences for a w-differences calculation as string. flys-artifacts/trunk@3783 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Raimund Renkert <raimund.renkert@intevation.de>
date Fri, 27 Jan 2012 09:42:15 +0000
parents bf67eb014443
children 31fa7cae0f35
comparison
equal deleted inserted replaced
2178:1d7fb2cabfc7 2179:c3e523a76340
27 import de.intevation.flys.backend.SessionFactoryProvider; 27 import de.intevation.flys.backend.SessionFactoryProvider;
28 28
29 import de.intevation.flys.artifacts.context.FLYSContext; 29 import de.intevation.flys.artifacts.context.FLYSContext;
30 import de.intevation.flys.artifacts.FLYSArtifact; 30 import de.intevation.flys.artifacts.FLYSArtifact;
31 import de.intevation.flys.artifacts.WINFOArtifact; 31 import de.intevation.flys.artifacts.WINFOArtifact;
32 import de.intevation.flys.artifacts.StaticWKmsArtifact;
32 import de.intevation.flys.artifacts.model.RiverFactory; 33 import de.intevation.flys.artifacts.model.RiverFactory;
33 import de.intevation.flys.artifacts.model.LocationProvider; 34 import de.intevation.flys.artifacts.model.LocationProvider;
34 import de.intevation.flys.artifacts.model.WQ; 35 import de.intevation.flys.artifacts.model.WQ;
36 import de.intevation.flys.artifacts.model.WKms;
37 import de.intevation.flys.artifacts.model.WQKms;
38
39 import de.intevation.artifactdatabase.state.State;
40 import de.intevation.flys.artifacts.states.WaterlevelSelectState;
41 import de.intevation.flys.artifacts.states.WDifferencesState;
35 import de.intevation.flys.model.Gauge; 42 import de.intevation.flys.model.Gauge;
36 import de.intevation.flys.model.MainValue; 43 import de.intevation.flys.model.MainValue;
37 import de.intevation.flys.model.River; 44 import de.intevation.flys.model.River;
38 45
39 public class FLYSUtils { 46 public class FLYSUtils {
619 return ""; 626 return "";
620 } 627 }
621 628
622 return LocationProvider.getLocation(river, km); 629 return LocationProvider.getLocation(river, km);
623 } 630 }
631
632
633 /**
634 * This method returns the differences for a w-differences calculation.
635 *
636 * @param winfo The WINFOArtifact.
637 * @param context The context.
638 *
639 * @return The differences as string separated by semicolon and linebreak.
640 */
641 public static String getWDifferences(
642 WINFOArtifact winfo,
643 CallContext context)
644 {
645 State state = winfo.getCurrentState(context);
646 if(state instanceof WDifferencesState) {
647 String diffids = winfo.getDataAsString("diffids");
648 String datas[] = diffids.split("#");
649
650 // Validate the Data-Strings.
651 for (String s: datas) {
652 if (!WaterlevelSelectState.isValueValid(winfo.getDataAsString("diffids"))) {
653 return "";
654 }
655 }
656
657 if (datas.length < 2) {
658 return "";
659 }
660
661 String diffs = "";
662 for(int i = 0; i < datas.length; i+=2) {
663 // e.g.:
664 // 42537f1e-3522-42ef-8968-635b03d8e9c6;longitudinal_section.w;1
665 WKms minuendWKms = getWKms(StringUtil.unbracket(datas[i+0]),
666 context);
667 WKms subtrahendWKms = getWKms(StringUtil.unbracket(datas[i+1]),
668 context);
669 if (minuendWKms != null && subtrahendWKms != null) {
670 diffs += StringUtil.wWrap(minuendWKms.getName())
671 + " - " + StringUtil.wWrap(subtrahendWKms.getName());
672 }
673 diffs += ";\n";
674 }
675 return diffs;
676 }
677 else {
678 logger.warn("Not a valid state for differences.");
679 return "";
680 }
681 }
682
683
684 protected static WKms getWKms(String mingle, CallContext context) {
685 String[] def = mingle.split(";");
686 String uuid = def[0];
687 String name = def[1];
688 int idx = Integer.parseInt(def[2]);
689
690 if (name.startsWith("staticwkms")) {
691 StaticWKmsArtifact staticWKms =
692 (StaticWKmsArtifact) FLYSUtils.getArtifact(
693 uuid,
694 context);
695 WKms wkms = staticWKms.getWKms(idx);
696 if (wkms == null)
697 logger.error("No WKms from artifact.");
698 return wkms;
699 }
700
701 WINFOArtifact flys = (WINFOArtifact) FLYSUtils.getArtifact(
702 uuid,
703 context);
704
705 if (flys == null) {
706 logger.warn("One of the artifacts (1) for diff calculation could not be loaded");
707 return null;
708 }
709 else{
710 WQKms[] wqkms = (WQKms[]) flys.getWaterlevelData().
711 getData();
712 if (wqkms == null)
713 logger.warn("not waterlevels in artifact");
714 else if (wqkms.length < idx)
715 logger.warn("not enough waterlevels in artifact");
716 return wqkms[idx];
717 }
718 }
624 } 719 }
625 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : 720 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org