001 /*
002 * This file is part of McIDAS-V
003 *
004 * Copyright 2007-2013
005 * Space Science and Engineering Center (SSEC)
006 * University of Wisconsin - Madison
007 * 1225 W. Dayton Street, Madison, WI 53706, USA
008 * https://www.ssec.wisc.edu/mcidas
009 *
010 * All Rights Reserved
011 *
012 * McIDAS-V is built on Unidata's IDV and SSEC's VisAD libraries, and
013 * some McIDAS-V source code is based on IDV and VisAD source code.
014 *
015 * McIDAS-V is free software; you can redistribute it and/or modify
016 * it under the terms of the GNU Lesser Public License as published by
017 * the Free Software Foundation; either version 3 of the License, or
018 * (at your option) any later version.
019 *
020 * McIDAS-V is distributed in the hope that it will be useful,
021 * but WITHOUT ANY WARRANTY; without even the implied warranty of
022 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
023 * GNU Lesser Public License for more details.
024 *
025 * You should have received a copy of the GNU Lesser Public License
026 * along with this program. If not, see http://www.gnu.org/licenses.
027 */
028
029 package edu.wisc.ssec.mcidasv.data;
030
031 import java.io.File;
032 import java.rmi.RemoteException;
033 import java.util.ArrayList;
034 import java.util.Hashtable;
035 import java.util.List;
036
037 import ucar.unidata.data.DataCategory;
038 import ucar.unidata.data.DataChoice;
039 import ucar.unidata.data.DataSelection;
040 import ucar.unidata.data.DataSourceDescriptor;
041 import ucar.unidata.data.DataSourceImpl;
042 import ucar.unidata.util.WrapperException;
043 import visad.Data;
044 import visad.VisADException;
045
046 public class HydraDataSource extends DataSourceImpl {
047
048 /** List of sources files */
049 protected List sources = new ArrayList();
050
051 public static String request;
052
053 /** List of sources files */
054 protected List adapters;
055
056 /** for unpersistence */
057 protected String oldSourceFromBundles;
058
059 /**
060 * Default constructor
061 */
062 public HydraDataSource() {}
063
064 /**
065 * Create a HydraDataSource
066 *
067 * @param descriptor The datasource descriptor
068 * @param newSources List of files or urls
069 * @param description The long name
070 * @param properties properties
071 *
072 * @throws VisADException couldn't create the data
073 */
074 public HydraDataSource(DataSourceDescriptor descriptor, List newSources,
075 String description, Hashtable properties)
076 throws VisADException {
077
078 super(descriptor, "Hydra", "Hydra", properties);
079 /*
080 System.out.println("HydraDataSource:");
081 System.out.println(" descriptor=" + descriptor);
082 System.out.println(" sources=" + newSources);
083 System.out.println(" description=" + description);
084 System.out.println(" properties=" + properties);
085 */
086 if (newSources != null)
087 sources.addAll(newSources);
088 }
089
090 /**
091 * Can this data source save its dat to local disk
092 *
093 * @return can save to local disk
094 */
095 public boolean canSaveDataToLocalDisk() {
096 return !isFileBased() && (getProperty(PROP_SERVICE_HTTP) != null);
097 }
098
099 /**
100 * Are we getting data from a file or from server
101 *
102 * @return is the data from files
103 */
104 protected boolean isFileBased() {
105 if (sources.isEmpty())
106 return false;
107
108 return (new File(sources.get(0).toString())).exists();
109 }
110
111 /**
112 * This is called when the CacheManager detects the need ot clear memory.
113 * It is intended to be overwritten by derived classes that are holding cached
114 * data that is not in the normal putCache facilities provided by this class
115 * since that data is actually managed by the CacheManager
116 */
117 public void clearCachedData() {
118 super.clearCachedData();
119 }
120
121 /**
122 * Create, if needed, and return the list of adapters.
123 * Will return null if there are no valid adapters.
124 *
125 * @return List of adapters or null
126 */
127 protected List getAdapters() {
128 if ((adapters == null) || (adapters.size() == 0)) {
129 try {
130 makeAdapters(sources);
131 } catch (Exception exc) {
132 setInError(true);
133 throw new WrapperException(exc);
134 }
135 }
136 if (adapters.size() == 0) {
137 adapters = null;
138 }
139 return adapters;
140 }
141
142 /**
143 * Make the adapters for the given list of files
144 *
145 * @param files Data files
146 *
147 * @throws Exception When bad things happen
148 */
149 private void makeAdapters(List files) throws Exception {
150 adapters = new ArrayList();
151 }
152
153 /**
154 * Create the list of times associated with this DataSource.
155 * @return list of times.
156 */
157 protected List doMakeDateTimes() {
158 List times = new ArrayList();
159 return times;
160 }
161
162 /*
163 public boolean canDoGeoSelection() {
164 return true;
165 }
166 */
167
168 /**
169 * Get the data for the given DataChoice and selection criteria.
170 * @param dataChoice DataChoice for selection
171 * @param category DataCategory for the DataChoice (not used)
172 * @param subset subsetting criteria
173 * @param requestProperties extra request properties
174 * @return the Data object for the request
175 *
176 * @throws RemoteException couldn't create a remote data object
177 * @throws VisADException couldn't create the data
178 */
179 protected Data getDataInner(DataChoice dataChoice, DataCategory category,
180 DataSelection subset,
181 Hashtable requestProperties)
182 throws VisADException, RemoteException {
183 return null;
184 }
185 }