Mercurial > dive4elements > river
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 : |