Issue #1513 Updated the way level lookups are created

Change-Id: Ie1120707af608910a88c407ca8af8cf19b964555

Former-commit-id: 53ceda6a62 [formerly 53ceda6a62 [formerly a6b74b9bd1781ca61e364e24f61bb647602fcce6]]
Former-commit-id: cf1c674c2e
Former-commit-id: e497d39d75
This commit is contained in:
Dave Hladky 2013-01-21 08:27:07 -06:00
parent 06d25c6c95
commit 037353dda2
20 changed files with 73 additions and 441 deletions

View file

@ -42,8 +42,10 @@ import com.raytheon.uf.common.serialization.SerializationUtil;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.status.UFStatus.Priority;
import com.raytheon.uf.common.util.CollectionUtil;
import com.raytheon.uf.common.util.ServiceLoaderUtil;
/**
* Lookup table manager
*
@ -54,6 +56,7 @@ import com.raytheon.uf.common.util.ServiceLoaderUtil;
* ------------ ---------- ----------- --------------------------
* Mar 7, 2011 357 dhladky Initial creation
* Oct 27, 2012 1163 dhladky Improved, dynamically create files, Added Units
* Jan 18, 2013 1513 dhladky Level lookup refit.
*
* </pre>
*
@ -381,10 +384,9 @@ public class LookupManager {
* @throws Exception
*/
public void modifyLevelLookups(String modelName, double dz, float min,
float max) throws Exception {
float max, List<Double> levs) throws Exception {
LevelLookup ll = null;
List<Double> levs = null;
if (levelLookupExists(modelName)) {
ll = getLevelsFromFile(modelName);
@ -397,25 +399,33 @@ public class LookupManager {
ll = new LevelLookup();
}
if (levs == null) {
boolean gen = false;
if (CollectionUtil.isNullOrEmpty(levs)) {
ll.setLevelXml(new ArrayList<Double>());
levs = ll.getLevelXml();
gen = true;
} else {
ll.setLevelXml(levs);
}
int diff = (int) (max - min);
int total = (int) Math.abs((diff / dz));
// These add simple place holder level
// identifiers. It is up to the admin
// to add the real values
if (diff < 0) {
for (int i = 0; i <= total; i++) {
double lev = max + i * dz;
levs.add(lev);
}
} else {
for (int i = 0; i <= total; i++) {
double lev = min + i * dz;
levs.add(lev);
if (gen) {
int diff = (int) (max - min);
int total = (int) Math.abs((diff / dz));
// These add simple place holder level
// identifiers. It is up to the admin
// to add the real values
if (diff < 0) {
for (int i = 0; i <= total; i++) {
double lev = max + i * dz;
levs.add(lev);
}
} else {
for (int i = 0; i <= total; i++) {
double lev = min + i * dz;
levs.add(lev);
}
}
}
@ -551,4 +561,6 @@ public class LookupManager {
return unitXml;
}
}

View file

@ -74,6 +74,7 @@
<constant name="RESOLUTION" value="resolution"/>
<constant name="DATE_COMPARE_FORMAT" value="EEE MMM dd hhmmss zzz yyyy"/>
<constant name="META_DATA_SUFFIX" value=".info"/>
<constant name="DATA_SUFFIX" value=".dods"/>
<constant name="FILL_VALUE" value="_FillValue"/>
<constant name="MAX_RETRIEVAL_SIZE" value="4500000" />
<constant name="KELVIN" value="k" />

View file

@ -1,13 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<LevelLookup>
<Level>1000.0</Level>
<Level>925.0</Level>
<Level>850.0</Level>
<Level>700.0</Level>
<Level>500.0</Level>
<Level>250.0</Level>
<Level>200.0</Level>
<Level>100.0</Level>
<Level>50.0</Level>
<Level>10.0</Level>
</LevelLookup>

View file

@ -1,13 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<LevelLookup>
<Level>1000.0</Level>
<Level>925.0</Level>
<Level>850.0</Level>
<Level>700.0</Level>
<Level>500.0</Level>
<Level>250.0</Level>
<Level>200.0</Level>
<Level>100.0</Level>
<Level>50.0</Level>
<Level>10.0</Level>
</LevelLookup>

View file

@ -1,29 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<LevelLookup>
<Level>1000.0</Level>
<Level>975.0</Level>
<Level>950.0</Level>
<Level>925.0</Level>
<Level>900.0</Level>
<Level>850.0</Level>
<Level>800.0</Level>
<Level>750.0</Level>
<Level>700.0</Level>
<Level>650.0</Level>
<Level>600.0</Level>
<Level>550.0</Level>
<Level>500.0</Level>
<Level>450.0</Level>
<Level>400.0</Level>
<Level>350.0</Level>
<Level>300.0</Level>
<Level>250.0</Level>
<Level>200.0</Level>
<Level>150.0</Level>
<Level>100.0</Level>
<Level>70.0</Level>
<Level>50.0</Level>
<Level>30.0</Level>
<Level>20.0</Level>
<Level>10.0</Level>
</LevelLookup>

View file

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<LevelLookup>
<Level>1000.0</Level>
<Level>925.0</Level>
<Level>850.0</Level>
<Level>600.0</Level>
<Level>500.0</Level>
<Level>250.0</Level>
<Level>200.0</Level>
</LevelLookup>

View file

@ -1,29 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<LevelLookup>
<Level>1000.0</Level>
<Level>975.0</Level>
<Level>950.0</Level>
<Level>925.0</Level>
<Level>900.0</Level>
<Level>850.0</Level>
<Level>800.0</Level>
<Level>750.0</Level>
<Level>700.0</Level>
<Level>650.0</Level>
<Level>600.0</Level>
<Level>550.0</Level>
<Level>500.0</Level>
<Level>450.0</Level>
<Level>400.0</Level>
<Level>350.0</Level>
<Level>300.0</Level>
<Level>250.0</Level>
<Level>200.0</Level>
<Level>150.0</Level>
<Level>100.0</Level>
<Level>70.0</Level>
<Level>50.0</Level>
<Level>30.0</Level>
<Level>20.0</Level>
<Level>10.0</Level>
</LevelLookup>

View file

@ -1,29 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<LevelLookup>
<Level>1000.0</Level>
<Level>975.0</Level>
<Level>950.0</Level>
<Level>925.0</Level>
<Level>900.0</Level>
<Level>850.0</Level>
<Level>800.0</Level>
<Level>750.0</Level>
<Level>700.0</Level>
<Level>650.0</Level>
<Level>600.0</Level>
<Level>550.0</Level>
<Level>500.0</Level>
<Level>450.0</Level>
<Level>400.0</Level>
<Level>350.0</Level>
<Level>300.0</Level>
<Level>250.0</Level>
<Level>200.0</Level>
<Level>150.0</Level>
<Level>100.0</Level>
<Level>70.0</Level>
<Level>50.0</Level>
<Level>30.0</Level>
<Level>20.0</Level>
<Level>10.0</Level>
</LevelLookup>

View file

@ -1,50 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<LevelLookup>
<Level>1000.0</Level>
<Level>975.0</Level>
<Level>950.0</Level>
<Level>925.0</Level>
<Level>900.0</Level>
<Level>875.0</Level>
<Level>850.0</Level>
<Level>825.0</Level>
<Level>800.0</Level>
<Level>775.0</Level>
<Level>750.0</Level>
<Level>725.0</Level>
<Level>700.0</Level>
<Level>675.0</Level>
<Level>650.0</Level>
<Level>625.0</Level>
<Level>600.0</Level>
<Level>575.0</Level>
<Level>550.0</Level>
<Level>525.0</Level>
<Level>500.0</Level>
<Level>475.0</Level>
<Level>450.0</Level>
<Level>425.0</Level>
<Level>400.0</Level>
<Level>375.0</Level>
<Level>350.0</Level>
<Level>325.0</Level>
<Level>300.0</Level>
<Level>275.0</Level>
<Level>250.0</Level>
<Level>225.0</Level>
<Level>200.0</Level>
<Level>175.0</Level>
<Level>150.0</Level>
<Level>125.0</Level>
<Level>100.0</Level>
<Level>70.0</Level>
<Level>50.0</Level>
<Level>30.0</Level>
<Level>20.0</Level>
<Level>10.0</Level>
<Level>7.0</Level>
<Level>5.0</Level>
<Level>3.0</Level>
<Level>2.0</Level>
<Level>1.0</Level>
</LevelLookup>

View file

@ -1,13 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<LevelLookup>
<Level>1000.0</Level>
<Level>925.0</Level>
<Level>850.0</Level>
<Level>700.0</Level>
<Level>600.0</Level>
<Level>500.0</Level>
<Level>400.0</Level>
<Level>300.0</Level>
<Level>250.0</Level>
<Level>200.0</Level>
</LevelLookup>

View file

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<LevelLookup>
<Level>1000.0</Level>
<Level>925.0</Level>
<Level>850.0</Level>
<Level>700.0</Level>
<Level>500.0</Level>
<Level>250.0</Level>
<Level>200.0</Level>
</LevelLookup>

View file

@ -1,45 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<LevelLookup>
<Level>1000.0</Level>
<Level>975.0</Level>
<Level>950.0</Level>
<Level>925.0</Level>
<Level>900.0</Level>
<Level>875.0</Level>
<Level>850.0</Level>
<Level>825.0</Level>
<Level>800.0</Level>
<Level>775.0</Level>
<Level>750.0</Level>
<Level>725.0</Level>
<Level>700.0</Level>
<Level>675.0</Level>
<Level>650.0</Level>
<Level>625.0</Level>
<Level>600.0</Level>
<Level>575.0</Level>
<Level>550.0</Level>
<Level>525.0</Level>
<Level>500.0</Level>
<Level>475.0</Level>
<Level>450.0</Level>
<Level>425.0</Level>
<Level>400.0</Level>
<Level>375.0</Level>
<Level>350.0</Level>
<Level>325.0</Level>
<Level>300.0</Level>
<Level>275.0</Level>
<Level>250.0</Level>
<Level>225.0</Level>
<Level>200.0</Level>
<Level>175.0</Level>
<Level>150.0</Level>
<Level>125.0</Level>
<Level>100.0</Level>
<Level>75.0</Level>
<Level>50.0</Level>
<Level>20.0</Level>
<Level>10.0</Level>
<Level>5.0</Level>
</LevelLookup>

View file

@ -1,43 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<LevelLookup>
<Level>6000.0</Level>
<Level>5500.0</Level>
<Level>5000.0</Level>
<Level>4500.0</Level>
<Level>4000.0</Level>
<Level>3500.0</Level>
<Level>3000.0</Level>
<Level>2500.0</Level>
<Level>2000.0</Level>
<Level>1500.0</Level>
<Level>1000.0</Level>
<Level>950.0</Level>
<Level>900.0</Level>
<Level>850.0</Level>
<Level>800.0</Level>
<Level>750.0</Level>
<Level>700.0</Level>
<Level>650.0</Level>
<Level>600.0</Level>
<Level>550.0</Level>
<Level>500.0</Level>
<Level>450.0</Level>
<Level>400.0</Level>
<Level>350.0</Level>
<Level>300.0</Level>
<Level>250.0</Level>
<Level>200.0</Level>
<Level>150.0</Level>
<Level>100.0</Level>
<Level>90.0</Level>
<Level>80.0</Level>
<Level>70.0</Level>
<Level>60.0</Level>
<Level>50.0</Level>
<Level>30.0</Level>
<Level>20.0</Level>
<Level>10.0</Level>
<Level>6.0</Level>
<Level>3.0</Level>
<Level>0.0</Level>
</LevelLookup>

View file

@ -1,40 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<LevelLookup>
<Level>1000.0</Level>
<Level>975.0</Level>
<Level>950.0</Level>
<Level>925.0</Level>
<Level>900.0</Level>
<Level>875.0</Level>
<Level>850.0</Level>
<Level>825.0</Level>
<Level>800.0</Level>
<Level>775.0</Level>
<Level>750.0</Level>
<Level>725.0</Level>
<Level>700.0</Level>
<Level>675.0</Level>
<Level>650.0</Level>
<Level>625.0</Level>
<Level>600.0</Level>
<Level>575.0</Level>
<Level>550.0</Level>
<Level>525.0</Level>
<Level>500.0</Level>
<Level>475.0</Level>
<Level>450.0</Level>
<Level>425.0</Level>
<Level>400.0</Level>
<Level>375.0</Level>
<Level>350.0</Level>
<Level>325.0</Level>
<Level>300.0</Level>
<Level>275.0</Level>
<Level>250.0</Level>
<Level>225.0</Level>
<Level>200.0</Level>
<Level>175.0</Level>
<Level>150.0</Level>
<Level>125.0</Level>
<Level>100.0</Level>
</LevelLookup>

View file

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<LevelLookup>
<Level>1.0</Level>
</LevelLookup>

View file

@ -1,40 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<LevelLookup>
<Level>1000.0</Level>
<Level>975.0</Level>
<Level>950.0</Level>
<Level>925.0</Level>
<Level>900.0</Level>
<Level>875.0</Level>
<Level>850.0</Level>
<Level>825.0</Level>
<Level>800.0</Level>
<Level>775.0</Level>
<Level>750.0</Level>
<Level>725.0</Level>
<Level>700.0</Level>
<Level>675.0</Level>
<Level>650.0</Level>
<Level>625.0</Level>
<Level>600.0</Level>
<Level>575.0</Level>
<Level>550.0</Level>
<Level>525.0</Level>
<Level>500.0</Level>
<Level>475.0</Level>
<Level>450.0</Level>
<Level>425.0</Level>
<Level>400.0</Level>
<Level>375.0</Level>
<Level>350.0</Level>
<Level>325.0</Level>
<Level>300.0</Level>
<Level>275.0</Level>
<Level>250.0</Level>
<Level>225.0</Level>
<Level>200.0</Level>
<Level>175.0</Level>
<Level>150.0</Level>
<Level>125.0</Level>
<Level>100.0</Level>
</LevelLookup>

View file

@ -1,42 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<LevelLookup>
<Level>1000.0</Level>
<Level>975.0</Level>
<Level>950.0</Level>
<Level>925.0</Level>
<Level>900.0</Level>
<Level>875.0</Level>
<Level>850.0</Level>
<Level>825.0</Level>
<Level>800.0</Level>
<Level>775.0</Level>
<Level>750.0</Level>
<Level>725.0</Level>
<Level>700.0</Level>
<Level>675.0</Level>
<Level>650.0</Level>
<Level>625.0</Level>
<Level>600.0</Level>
<Level>575.0</Level>
<Level>550.0</Level>
<Level>525.0</Level>
<Level>500.0</Level>
<Level>475.0</Level>
<Level>450.0</Level>
<Level>425.0</Level>
<Level>400.0</Level>
<Level>375.0</Level>
<Level>350.0</Level>
<Level>325.0</Level>
<Level>300.0</Level>
<Level>275.0</Level>
<Level>250.0</Level>
<Level>225.0</Level>
<Level>200.0</Level>
<Level>175.0</Level>
<Level>150.0</Level>
<Level>125.0</Level>
<Level>100.0</Level>
<Level>75.0</Level>
<Level>50.0</Level>
</LevelLookup>

View file

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<LevelLookup>
<Level>1000.0</Level>
<Level>850.0</Level>
<Level>700.0</Level>
<Level>500.0</Level>
<Level>250.0</Level>
</LevelLookup>

View file

@ -89,6 +89,7 @@ import dods.dap.DAS;
* Dec 12, 2012 supplement dhladky Restored operation of ensembles.
* Dec 10, 2012 1259 bsteffen Switch Data Delivery from LatLon to referenced envelopes.
* Jan 08, 2013 dhladky Performance enhancements, specific model fixes.
* Jan 18, 2013 1513 dhladky Level look up improvements.
*
* </pre>
*
@ -135,8 +136,10 @@ class OpenDAPMetaDataParser extends MetaDataParser {
// create new default lookups
if (levelType.equals(LevelType.MB)
|| levelType.equals(LevelType.SEAB)) {
List<Double> levelList = OpenDAPParseUtility.getInstance().parseLevels(gdsmd.getUrl(), serviceConfig.getConstantValue("LEV"));
LookupManager.getInstance().modifyLevelLookups(
collectionName, dz, levMin, levMax);
collectionName, dz, levMin, levMax, levelList);
}
}
@ -654,12 +657,12 @@ class OpenDAPMetaDataParser extends MetaDataParser {
}
DAS das = (DAS) link.getLinks().get(DAP_TYPE.DAS.getDapType());
dataSet.setParameters(getParameters(das, dataSet, gdsmd, link,
collection, dataDateFormat));
// set url first, used for level lookups
gdsmd.setUrl(link.getUrl().replace(
serviceConfig.getConstantValue("META_DATA_SUFFIX"),
serviceConfig.getConstantValue("BLANK")));
dataSet.setParameters(getParameters(das, dataSet, gdsmd, link,
collection, dataDateFormat));
Time dataSetTime = gdsmd.getTime();
if (dataSetTime == null) {
throw new IllegalStateException(

View file

@ -21,8 +21,13 @@ import com.raytheon.uf.common.datadelivery.retrieval.xml.UnitLookup;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.status.UFStatus.Priority;
import com.raytheon.uf.edex.datadelivery.retrieval.util.ConnectionUtil;
import dods.dap.AttributeTable;
import dods.dap.DArray;
import dods.dap.DConnect;
import dods.dap.DataDDS;
import dods.dap.PrimitiveVector;
/**
* Constants for working with OpenDAP. This class should remain package-private,
@ -43,12 +48,13 @@ import dods.dap.AttributeTable;
* Nov 09, 2012 1163 dhladky Made pre-load for service config
* Nov 19, 2012 1166 djohnson Clean up JAXB representation of registry objects.
* Jan 08, 2013 1466 dhladky NCOM dataset name parsing fix.
* Jan 18, 2013 1513 dhladky Level Lookup improvements.
* </pre>
*
* @author dhladky
* @version 1.0
*/
final class OpenDAPParseUtility {
public final class OpenDAPParseUtility {
private static final Pattern QUOTES_PATTERN = Pattern.compile("\"");
@ -336,7 +342,35 @@ final class OpenDAPParseUtility {
return QUOTES_PATTERN.matcher(val).replaceAll(
serviceConfig.getConstantValue("BLANK"));
}
/**
* Parse out the levels from the dods
* @param url
* @param lev
* @return
*/
public List<Double> parseLevels(String url, String lev) {
List<Double> levels = null;
try {
DConnect connect = ConnectionUtil.getDConnect(url + "?" + lev);
DataDDS data = connect.getData(null);
DArray array = (DArray) data.getVariable(lev);
PrimitiveVector pm = array.getPrimitiveVector();
double[] values = (double[]) pm.getInternalStorage();
levels = new ArrayList<Double>();
for (double value : values) {
levels.add(value);
}
} catch (Exception e) {
statusHandler.handle(Priority.PROBLEM, "Error downloading/parsing levels: "
+ url, e);
}
return levels;
}
}