001 /* 002 * $Id: StormTrackCollection.java,v 1.1 2012/01/04 20:40:52 tommyj Exp $ 003 * 004 * This file is part of McIDAS-V 005 * 006 * Copyright 2007-2012 007 * Space Science and Engineering Center (SSEC) 008 * University of Wisconsin - Madison 009 * 1225 W. Dayton Street, Madison, WI 53706, USA 010 * https://www.ssec.wisc.edu/mcidas 011 * 012 * All Rights Reserved 013 * 014 * McIDAS-V is built on Unidata's IDV and SSEC's VisAD libraries, and 015 * some McIDAS-V source code is based on IDV and VisAD source code. 016 * 017 * McIDAS-V is free software; you can redistribute it and/or modify 018 * it under the terms of the GNU Lesser Public License as published by 019 * the Free Software Foundation; either version 3 of the License, or 020 * (at your option) any later version. 021 * 022 * McIDAS-V is distributed in the hope that it will be useful, 023 * but WITHOUT ANY WARRANTY; without even the implied warranty of 024 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 025 * GNU Lesser Public License for more details. 026 * 027 * You should have received a copy of the GNU Lesser Public License 028 * along with this program. If not, see http://www.gnu.org/licenses. 029 */ 030 031 package edu.wisc.ssec.mcidasv.data.cyclone; 032 033 import java.util.ArrayList; 034 import java.util.HashMap; 035 import java.util.Iterator; 036 import java.util.List; 037 import java.util.Set; 038 039 import visad.DateTime; 040 041 /** 042 * Created by IntelliJ IDEA. User: yuanho Date: Apr 9, 2008 Time: 5:00:40 PM To 043 * change this template use File | Settings | File Templates. 044 */ 045 046 public class StormTrackCollection { 047 048 /** _more_ */ 049 // private HashMap forecastWayMapStartDates; 050 051 /** _more_ */ 052 // private StormTrack obsTrack; 053 054 /** _more_ */ 055 private HashMap<Way, List> wayToTracksHashMap; 056 057 /** _more_ */ 058 List<StormTrack> tracks = new ArrayList<StormTrack>(); 059 060 /** 061 * _more_ 062 */ 063 public StormTrackCollection() { 064 wayToTracksHashMap = new HashMap<Way, List>(); 065 // forecastWayMapStartDates = new HashMap(); 066 // obsTrack = null; 067 } 068 069 /** 070 * _more_ 071 * 072 * 073 * @return _more_ 074 */ 075 public List<Way> getWayList() { 076 Set ss = wayToTracksHashMap.keySet(); 077 ArrayList ways = new ArrayList(); 078 ways.addAll(ss); 079 return ways; 080 } 081 082 /** 083 * _more_ 084 * 085 * @param tracks 086 * _more_ 087 */ 088 public void addTrackList(List<StormTrack> tracks) { 089 for (StormTrack track : tracks) { 090 addTrack(track); 091 } 092 } 093 094 /** 095 * _more_ 096 * 097 * @param track 098 * _more_ 099 */ 100 public void addTrack(StormTrack track) { 101 List list = wayToTracksHashMap.get(track.getWay()); 102 if (list == null) { 103 wayToTracksHashMap.put(track.getWay(), 104 list = new ArrayList<StormTrack>()); 105 106 } 107 list.add(track); 108 tracks.add(track); 109 } 110 111 /** 112 * _more_ 113 * 114 * @return _more_ 115 */ 116 public List<StormTrack> getTracks() { 117 return new ArrayList<StormTrack>(tracks); 118 } 119 120 /** 121 * _more_ 122 * 123 * 124 * @param way 125 * _more_ 126 * @return _more_ 127 */ 128 public List<StormTrack> getTrackList(Way way) { 129 return (List<StormTrack>) wayToTracksHashMap.get(way); 130 } 131 132 /** 133 * _more_ 134 * 135 * @return _more_ 136 */ 137 public HashMap<Way, List> getWayToTracksHashMap() { 138 return wayToTracksHashMap; 139 } 140 141 /** 142 * _more_ 143 * 144 * @return _more_ 145 */ 146 public HashMap getWayToStartDatesHashMap() { 147 HashMap wayToStartDatesHashMap = new HashMap(); 148 int size = wayToTracksHashMap.size(); 149 Set ways = wayToTracksHashMap.keySet(); 150 Iterator itr = ways.iterator(); 151 for (int i = 0; i < size; i++) { 152 Way way = (Way) itr.next(); 153 List tracks = getTrackList(way); 154 List startTimes = new ArrayList(); 155 if (tracks != null) { 156 Iterator its = tracks.iterator(); 157 while (its.hasNext()) { 158 StormTrack track = (StormTrack) its.next(); 159 DateTime st = track.getStartTime(); 160 startTimes.add(st); 161 } 162 if (startTimes.size() > 0) { 163 wayToStartDatesHashMap.put(way, startTimes); 164 } 165 } 166 167 } 168 return wayToStartDatesHashMap; 169 } 170 171 /** 172 * _more_ 173 * 174 * @return _more_ 175 */ 176 public StormTrack getObsTrack() { 177 List tracks = getTrackList(Way.OBSERVATION); 178 if ((tracks == null) || (tracks.size() == 0)) { 179 return null; 180 } 181 return (StormTrack) tracks.get(0); 182 } 183 184 /** 185 * _more_ 186 * 187 * 188 * @param way 189 * _more_ 190 */ 191 public void setObsTrack(Way way) { 192 // first remove the obs track 193 List<StormTrack> obtracks = wayToTracksHashMap.get(Way.OBSERVATION); 194 StormTrack obtrack = obtracks.get(0); 195 StormInfo sInfo = obtrack.getStormInfo(); 196 List<StormParam> obParams = obtrack.getParams(); 197 int size = obParams.size(); 198 StormParam[] obParam = new StormParam[size]; 199 int i = 0; 200 for (StormParam sp : obParams) { 201 obParam[i] = sp; 202 i++; 203 } 204 wayToTracksHashMap.remove(Way.OBSERVATION); 205 206 // now construct the obs track 207 List<StormTrackPoint> newObsPoints = new ArrayList(); 208 List<StormTrack> tracks = getTrackList(way); 209 210 for (StormTrack stk : tracks) { 211 List<StormTrackPoint> stkPoints = stk.getTrackPoints(); 212 newObsPoints.add(stkPoints.get(0)); 213 } 214 215 StormTrack stk = new StormTrack(sInfo, Way.OBSERVATION, newObsPoints, 216 obParam); 217 218 addTrack(stk); 219 } 220 221 }