001    /*
002     * $Id: TrackAdapter.java,v 1.11 2012/02/19 17:35:42 davep 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.hydra;
032    
033    import java.rmi.RemoteException;
034    import java.util.HashMap;
035    
036    import visad.FlatField;
037    import visad.FunctionType;
038    import visad.Gridded3DSet;
039    import visad.RealTupleType;
040    import visad.RealType;
041    import visad.SetType;
042    import visad.VisADException;
043    import visad.Set;
044    
045    public class TrackAdapter extends MultiDimensionAdapter {
046       RealTupleType domainType;
047       ArrayAdapter rngAdapter;
048       TrackDomain trackDomain;
049    
050       int listIndex = 0;
051    
052       String adapterName = null;
053    
054       public TrackAdapter() {
055       }
056    
057       public TrackAdapter(TrackDomain trackDomain, ArrayAdapter rangeAdapter) throws VisADException {
058         this.trackDomain = trackDomain;
059         this.rngAdapter = rangeAdapter;
060       }
061    
062       public Set makeDomain(Object subset) throws Exception {
063         throw new Exception("Unimplemented");
064       } 
065    
066       public FlatField getData(Object subset) throws VisADException, RemoteException {
067         
068         float[] rngValues = null;
069    
070         Set set = trackDomain.makeDomain(subset);
071    
072         domainType = ((SetType)set.getType()).getDomain();
073    
074         try {
075           rngValues = (rngAdapter.getData(subset).getFloats())[0];
076         }
077         catch (Exception e) {
078           e.printStackTrace();
079           return null;
080         }
081    
082         FlatField field = new FlatField(new FunctionType(domainType, rngAdapter.getMathType().getRange()), set);
083         field.setSamples(new float[][] {rngValues}, false);
084    
085         return field;
086       }
087    
088       public void setName(String name) {
089         adapterName = name;
090       }
091    
092       public String getArrayName() {
093         if (adapterName != null) {
094           return adapterName;
095         }
096         else {
097           return rngAdapter.getArrayName();
098         }
099       }
100    
101       void setListIndex(int idx) {
102         listIndex = idx;
103       }
104    
105       public HashMap getDefaultSubset() {
106         HashMap subset = rngAdapter.getDefaultSubset();
107         double[] coords = (double[]) ((HashMap)subset).get("VertDim");
108         coords[0] = listIndex;
109         coords[1] = listIndex;
110         coords[2] = 1;
111         return subset;
112       }
113    
114       public HashMap getSubsetFromLonLatRect(double minLat, double maxLat,
115                                              double minLon, double maxLon) {
116          return trackDomain.getSubsetFromLonLatRect(getDefaultSubset(), minLat, maxLat, minLon, maxLon);
117       }
118    
119       public HashMap getSubsetFromLonLatRect(double minLat, double maxLat,
120                                              double minLon, double maxLon,
121                                              int xStride, int yStride, int zStride) {
122          return trackDomain.getSubsetFromLonLatRect(getDefaultSubset(), minLat, maxLat, minLon, maxLon,
123                                                     xStride, yStride, zStride);
124       }
125    
126    }