Omaha #4153 Move grid product browser to use data listing.
Former-commit-id: 98fe0ae7bad0b617893f49dc864e9653255ba9a2
This commit is contained in:
parent
9beb93f61f
commit
c87c7ef1d7
4 changed files with 478 additions and 267 deletions
|
@ -32,7 +32,8 @@ Require-Bundle: org.eclipse.ui;bundle-version="3.8.0",
|
|||
com.raytheon.uf.common.numeric;bundle-version="1.14.0",
|
||||
javax.measure,
|
||||
com.raytheon.uf.viz.datacube;bundle-version="1.14.0",
|
||||
com.raytheon.uf.viz.core.grid;bundle-version="1.15.0"
|
||||
com.raytheon.uf.viz.core.grid;bundle-version="1.15.0",
|
||||
com.raytheon.uf.viz.productbrowser.datalisting;bundle-version="1.15.0"
|
||||
Export-Package: com.raytheon.viz.grid,
|
||||
com.raytheon.viz.grid.inv,
|
||||
com.raytheon.viz.grid.rsc,
|
||||
|
|
|
@ -0,0 +1,152 @@
|
|||
/**
|
||||
* This software was developed and / or modified by Raytheon Company,
|
||||
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||
*
|
||||
* U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||
* This software product contains export-restricted data whose
|
||||
* export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||
* to non-U.S. persons whether in the United States or abroad requires
|
||||
* an export license or other authorization.
|
||||
*
|
||||
* Contractor Name: Raytheon Company
|
||||
* Contractor Address: 6825 Pine Street, Suite 340
|
||||
* Mail Stop B8
|
||||
* Omaha, NE 68106
|
||||
* 402.291.0100
|
||||
*
|
||||
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||
* further licensing information.
|
||||
**/
|
||||
package com.raytheon.viz.grid;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.BlockingQueue;
|
||||
import java.util.concurrent.LinkedBlockingQueue;
|
||||
|
||||
import com.raytheon.uf.common.dataplugin.grid.GridConstants;
|
||||
import com.raytheon.uf.common.dataplugin.level.Level;
|
||||
import com.raytheon.uf.common.dataplugin.level.LevelFactory;
|
||||
import com.raytheon.uf.common.dataplugin.level.mapping.LevelMappingFactory;
|
||||
import com.raytheon.uf.viz.datacube.DataCubeContainer;
|
||||
import com.raytheon.viz.grid.inv.GridInventory;
|
||||
|
||||
/**
|
||||
*
|
||||
* An extension of the {@link GridDataListing} that queryies the
|
||||
* {@link GridInventory} to list all available derived data in addition to data
|
||||
* from the database.
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------- -------- --------- --------------------------
|
||||
* Jun 09, 2015 4153 bsteffen Initial creation
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author bsteffen
|
||||
* @version 1.0
|
||||
*/
|
||||
public class DerivedGridDataListing extends GridDataListing {
|
||||
|
||||
public DerivedGridDataListing() throws ReflectiveOperationException {
|
||||
super();
|
||||
}
|
||||
|
||||
public DerivedGridDataListing(List<String> keySet) {
|
||||
super(keySet);
|
||||
}
|
||||
|
||||
public DerivedGridDataListing(Set<String> keySet) {
|
||||
super(keySet);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<String> getValues(String key, Map<String, String> keyVals) throws Exception {
|
||||
Collection<String> sources = null;
|
||||
Collection<String> params = null;
|
||||
Collection<Level> levels = null;
|
||||
for (Entry<String, String> queryParam : keyVals.entrySet()) {
|
||||
String mapKey = queryParam.getKey();
|
||||
String value = queryParam.getValue();
|
||||
if (mapKey.equals(GridInventory.MODEL_NAME_QUERY)) {
|
||||
sources = Arrays.asList(value);
|
||||
} else if (mapKey.equals(GridInventory.PARAMETER_QUERY)) {
|
||||
params = Arrays.asList(value);
|
||||
} else if (mapKey.equals(GridInventory.MASTER_LEVEL_QUERY)) {
|
||||
if (levels == null) {
|
||||
levels = new ArrayList<Level>(LevelFactory.getInstance().getAllLevels());
|
||||
}
|
||||
Iterator<Level> iter = levels.iterator();
|
||||
while (iter.hasNext()) {
|
||||
if (!iter.next().getMasterLevel().getName().equals(value)) {
|
||||
iter.remove();
|
||||
}
|
||||
}
|
||||
|
||||
} else if (mapKey.equals(GridInventory.LEVEL_ONE_QUERY)) {
|
||||
double doubleValue = Double.parseDouble(value);
|
||||
if (levels == null) {
|
||||
levels = new ArrayList<Level>(LevelMappingFactory.getInstance(
|
||||
LevelMappingFactory.VOLUMEBROWSER_LEVEL_MAPPING_FILE).getAllLevels());
|
||||
}
|
||||
Iterator<Level> iter = levels.iterator();
|
||||
while (iter.hasNext()) {
|
||||
if (iter.next().getLevelonevalue() != doubleValue) {
|
||||
iter.remove();
|
||||
}
|
||||
}
|
||||
} else if (mapKey.equals(GridInventory.LEVEL_TWO_QUERY)) {
|
||||
double doubleValue = Double.parseDouble(value);
|
||||
if (levels == null) {
|
||||
levels = new ArrayList<Level>(LevelMappingFactory.getInstance(
|
||||
LevelMappingFactory.VOLUMEBROWSER_LEVEL_MAPPING_FILE).getAllLevels());
|
||||
}
|
||||
Iterator<Level> iter = levels.iterator();
|
||||
while (iter.hasNext()) {
|
||||
if (iter.next().getLeveltwovalue() != doubleValue) {
|
||||
iter.remove();
|
||||
}
|
||||
}
|
||||
} else if (mapKey.equals(GridInventory.LEVEL_ID_QUERY)) {
|
||||
levels = Arrays.asList(LevelFactory.getInstance().getLevel(value));
|
||||
}
|
||||
}
|
||||
|
||||
BlockingQueue<String> returnQueue = new LinkedBlockingQueue<String>();
|
||||
GridInventory inventory = (GridInventory) DataCubeContainer.getInventory(GridConstants.GRID);
|
||||
if (key.equals(GridInventory.MODEL_NAME_QUERY)) {
|
||||
inventory.checkSources(sources, params, levels, returnQueue);
|
||||
return returnQueue;
|
||||
} else if (key.equals(GridInventory.PARAMETER_QUERY)) {
|
||||
inventory.checkParameters(sources, params, levels, false, returnQueue);
|
||||
return returnQueue;
|
||||
} else if (key.equals(GridInventory.MASTER_LEVEL_QUERY)) {
|
||||
inventory.checkLevels(sources, params, levels, returnQueue);
|
||||
Set<String> masterlevels = new HashSet<String>();
|
||||
LevelFactory lf = LevelFactory.getInstance();
|
||||
for (String levelid : returnQueue) {
|
||||
Level level = lf.getLevel(levelid);
|
||||
masterlevels.add(level.getMasterLevel().getName());
|
||||
}
|
||||
return masterlevels;
|
||||
} else if (key.equals(GridInventory.LEVEL_ID_QUERY)) {
|
||||
inventory.checkLevels(sources, params, levels, returnQueue);
|
||||
return returnQueue;
|
||||
} else {
|
||||
return super.getValues(key, keyVals);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,188 @@
|
|||
/**
|
||||
* This software was developed and / or modified by Raytheon Company,
|
||||
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||
*
|
||||
* U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||
* This software product contains export-restricted data whose
|
||||
* export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||
* to non-U.S. persons whether in the United States or abroad requires
|
||||
* an export license or other authorization.
|
||||
*
|
||||
* Contractor Name: Raytheon Company
|
||||
* Contractor Address: 6825 Pine Street, Suite 340
|
||||
* Mail Stop B8
|
||||
* Omaha, NE 68106
|
||||
* 402.291.0100
|
||||
*
|
||||
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||
* further licensing information.
|
||||
**/
|
||||
package com.raytheon.viz.grid;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
|
||||
import com.raytheon.uf.common.datalisting.DataListing;
|
||||
import com.raytheon.uf.common.datalisting.impl.DefaultDataListing;
|
||||
import com.raytheon.uf.common.dataplugin.grid.GridConstants;
|
||||
import com.raytheon.uf.common.dataplugin.grid.GridRecord;
|
||||
import com.raytheon.uf.common.dataplugin.grid.dataset.DatasetInfo;
|
||||
import com.raytheon.uf.common.dataplugin.grid.dataset.DatasetInfoLookup;
|
||||
import com.raytheon.uf.common.dataplugin.level.Level;
|
||||
import com.raytheon.uf.common.dataplugin.level.LevelFactory;
|
||||
import com.raytheon.uf.common.dataplugin.level.MasterLevel;
|
||||
import com.raytheon.uf.common.dataquery.requests.RequestConstraint;
|
||||
import com.raytheon.uf.common.derivparam.library.DerivParamDesc;
|
||||
import com.raytheon.uf.common.derivparam.library.DerivedParameterGenerator;
|
||||
import com.raytheon.viz.grid.inv.GridInventory;
|
||||
|
||||
/**
|
||||
*
|
||||
* {@link DataListing} which can format several different grid elements nicely.
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------- -------- --------- --------------------------
|
||||
* Jun 09, 2015 4153 bsteffen Initial creation
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author bsteffen
|
||||
* @version 1.0
|
||||
*/
|
||||
public class GridDataListing extends DefaultDataListing {
|
||||
|
||||
public GridDataListing() throws ReflectiveOperationException {
|
||||
super(GridRecord.class);
|
||||
}
|
||||
|
||||
public GridDataListing(List<String> keySet) {
|
||||
super(GridConstants.GRID, keySet);
|
||||
}
|
||||
|
||||
public GridDataListing(Set<String> keySet) {
|
||||
super(GridConstants.GRID, keySet);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, RequestConstraint> getRequestConstraints(Map<String, String> keyVals) {
|
||||
Map<String, RequestConstraint> constraints = super.getRequestConstraints(keyVals);
|
||||
if (keyVals.containsKey(GridConstants.LEVEL_ID)) {
|
||||
constraints.remove(GridConstants.LEVEL_ID);
|
||||
/*
|
||||
* Convert Level id to level one and level two values so that it is
|
||||
* possible to update using a datauri.
|
||||
*/
|
||||
Level level = LevelFactory.getInstance().getLevel(keyVals.get(GridConstants.LEVEL_ID));
|
||||
constraints.put(GridInventory.LEVEL_ONE_QUERY, new RequestConstraint(level.getLevelOneValueAsString()));
|
||||
constraints.put(GridInventory.LEVEL_TWO_QUERY, new RequestConstraint(level.getLevelTwoValueAsString()));
|
||||
constraints.put(GridInventory.MASTER_LEVEL_QUERY, new RequestConstraint(level.getMasterLevel().getName()));
|
||||
}
|
||||
return constraints;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Map<String, String> getFormattedValues(String key, Collection<String> values) {
|
||||
if (GridConstants.DATASET_ID.equals(key)) {
|
||||
Map<String, String> formatted = new LinkedHashMap<>();
|
||||
DatasetInfoLookup lookup = DatasetInfoLookup.getInstance();
|
||||
for (String value : values) {
|
||||
DatasetInfo info = lookup.getInfo(value);
|
||||
if (info == null) {
|
||||
formatted.put(value, value);
|
||||
} else {
|
||||
formatted.put(value, info.getTitle() + " (" + value + ")");
|
||||
}
|
||||
}
|
||||
return sortByValue(formatted);
|
||||
} else if (GridInventory.PARAMETER_QUERY.equals(key)) {
|
||||
Map<String, String> formatted = new LinkedHashMap<>();
|
||||
Map<String, DerivParamDesc> library = DerivedParameterGenerator.getDerParLibrary();
|
||||
for (String value : values) {
|
||||
DerivParamDesc desc = library.get(value);
|
||||
if (desc == null || desc.getName().isEmpty()) {
|
||||
formatted.put(value, value);
|
||||
} else {
|
||||
formatted.put(value, desc.getName() + " (" + value + ")");
|
||||
}
|
||||
}
|
||||
return sortByValue(formatted);
|
||||
} else if (GridInventory.LEVEL_ID_QUERY.equals(key)) {
|
||||
List<Level> levels = new ArrayList<>(values.size());
|
||||
LevelFactory lf = LevelFactory.getInstance();
|
||||
for (String value : values) {
|
||||
levels.add(lf.getLevel(value));
|
||||
}
|
||||
Collections.sort(levels, levelComparator);
|
||||
Map<String, String> formatted = new LinkedHashMap<>();
|
||||
for (Level level : levels) {
|
||||
String levelName = level.toString().replace("_", "-");
|
||||
levelName = levelName.replace(level.getMasterLevel().getName(), " " + level.getMasterLevel().getName());
|
||||
formatted.put(Long.toString(level.getId()), levelName);
|
||||
}
|
||||
return formatted;
|
||||
} else if (GridInventory.MASTER_LEVEL_QUERY.equals(key)) {
|
||||
Map<String, String> formatted = new LinkedHashMap<>();
|
||||
LevelFactory lf = LevelFactory.getInstance();
|
||||
for (String value : values) {
|
||||
MasterLevel masterLevel = lf.getMasterLevel(value);
|
||||
formatted.put(masterLevel.getName(), masterLevel.getDescription() + " (" + masterLevel.getName() + ")");
|
||||
}
|
||||
return sortByValue(formatted);
|
||||
}
|
||||
return super.getFormattedValues(key, values);
|
||||
}
|
||||
|
||||
private static Map<String, String> sortByValue(Map<String, String> formattedMap) {
|
||||
List<Entry<String, String>> entryList = new ArrayList<>(formattedMap.entrySet());
|
||||
Collections.sort(entryList, sortByValueComparator);
|
||||
Map<String, String> sortedMap = new LinkedHashMap<>();
|
||||
for (Entry<String, String> entry : entryList) {
|
||||
sortedMap.put(entry.getKey(), entry.getValue());
|
||||
}
|
||||
return sortedMap;
|
||||
}
|
||||
|
||||
private static final Comparator<Entry<String, String>> sortByValueComparator = new Comparator<Entry<String, String>>() {
|
||||
|
||||
@Override
|
||||
public int compare(Entry<String, String> o1, Entry<String, String> o2) {
|
||||
int result = o1.getValue().compareTo(o2.getValue());
|
||||
if (result != 0) {
|
||||
return result;
|
||||
}
|
||||
return o1.getKey().compareTo(o2.getKey());
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
private static final Comparator<Level> levelComparator = new Comparator<Level>() {
|
||||
@Override
|
||||
public int compare(Level o1, Level o2) {
|
||||
if (o1.isRangeLevel() == o2.isRangeLevel()) {
|
||||
int val = Double.compare(o1.getLevelonevalue(), o2.getLevelonevalue());
|
||||
if (val == 0) {
|
||||
val = Double.compare(o1.getLeveltwovalue(), o2.getLeveltwovalue());
|
||||
}
|
||||
return val;
|
||||
}
|
||||
if (o1.isRangeLevel()) {
|
||||
return 1;
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
}
|
|
@ -25,36 +25,27 @@ import java.util.Arrays;
|
|||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.BlockingQueue;
|
||||
import java.util.concurrent.LinkedBlockingQueue;
|
||||
|
||||
import com.raytheon.uf.common.datalisting.DataListing;
|
||||
import com.raytheon.uf.common.dataplugin.grid.GridConstants;
|
||||
import com.raytheon.uf.common.dataplugin.level.Level;
|
||||
import com.raytheon.uf.common.dataplugin.level.LevelFactory;
|
||||
import com.raytheon.uf.common.dataplugin.level.mapping.LevelMappingFactory;
|
||||
import com.raytheon.uf.common.dataquery.requests.RequestConstraint;
|
||||
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.viz.core.drawables.AbstractRenderableDisplay;
|
||||
import com.raytheon.uf.viz.core.drawables.ResourcePair;
|
||||
import com.raytheon.uf.viz.core.exception.VizException;
|
||||
import com.raytheon.uf.viz.core.grid.rsc.GridLoadProperties;
|
||||
import com.raytheon.uf.viz.core.rsc.AbstractResourceData;
|
||||
import com.raytheon.uf.viz.core.rsc.DisplayType;
|
||||
import com.raytheon.uf.viz.core.rsc.ResourceProperties;
|
||||
import com.raytheon.uf.viz.core.rsc.ResourceType;
|
||||
import com.raytheon.uf.viz.datacube.DataCubeContainer;
|
||||
import com.raytheon.uf.viz.productbrowser.AbstractRequestableProductBrowserDataDefinition;
|
||||
import com.raytheon.uf.viz.productbrowser.ProductBrowserLabel;
|
||||
import com.raytheon.uf.viz.productbrowser.ProductBrowserPreference;
|
||||
import com.raytheon.uf.viz.productbrowser.ProductBrowserPreference.PreferenceType;
|
||||
import com.raytheon.uf.viz.productbrowser.datalisting.DataListingProductBrowserDefinition;
|
||||
import com.raytheon.uf.viz.productbrowser.pref.ProductBrowserPreferenceListener;
|
||||
import com.raytheon.viz.grid.inv.GridInventory;
|
||||
import com.raytheon.viz.grid.rsc.GridResourceData;
|
||||
import com.raytheon.viz.grid.xml.FieldDisplayTypesFactory;
|
||||
|
||||
/**
|
||||
* Product browser implementation for grid
|
||||
|
@ -72,287 +63,166 @@ import com.raytheon.viz.grid.rsc.GridResourceData;
|
|||
* Sep 19, 2013 2391 mpduff refactored some methods to common class.
|
||||
* Jan 23, 2014 2711 bsteffen Get all levels from LevelFactory.
|
||||
* Sep 09, 2014 3356 njensen Remove CommunicationException
|
||||
* Jun 09, 2015 4153 bsteffen Switch to use a datalisting.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author bsteffen
|
||||
* @version 1.0
|
||||
*/
|
||||
public class GridProductBrowserDataDefinition extends
|
||||
AbstractRequestableProductBrowserDataDefinition<GridResourceData> {
|
||||
private final IUFStatusHandler statusHandler = UFStatus
|
||||
.getHandler(GridProductBrowserDataDefinition.class);
|
||||
public class GridProductBrowserDataDefinition extends DataListingProductBrowserDefinition {
|
||||
|
||||
private final String SHOW_DERIVED_PARAMS = "Show Derived Parameters";
|
||||
private static final String SHOW_DERIVED_PARAMS = "Show Derived Parameters";
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
public GridProductBrowserDataDefinition() {
|
||||
productName = GridInventory.PLUGIN_NAME;
|
||||
displayName = "Grid";
|
||||
order = new String[] { GridInventory.MODEL_NAME_QUERY,
|
||||
GridInventory.PARAMETER_QUERY,
|
||||
GridInventory.MASTER_LEVEL_QUERY, GridInventory.LEVEL_ID_QUERY };
|
||||
order = getOrder();
|
||||
loadProperties = new GridLoadProperties();
|
||||
loadProperties.setResourceType(getResourceType());
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see
|
||||
* com.raytheon.uf.viz.productbrowser.AbstractProductBrowserDataDefinition
|
||||
* #getResourceData()
|
||||
*/
|
||||
@Override
|
||||
public GridResourceData getResourceData() {
|
||||
return new GridResourceData();
|
||||
super(new DerivedPreferenceDataListing());
|
||||
if (listing instanceof DerivedPreferenceDataListing) {
|
||||
new ProductBrowserPreferenceListener(displayName,
|
||||
((DerivedPreferenceDataListing) listing).getDerivedPreference());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void constructResource(String[] selection, ResourceType type) {
|
||||
GridInventory inventory = getInventory();
|
||||
if (inventory == null) {
|
||||
super.constructResource(selection, type);
|
||||
return;
|
||||
protected GridResourceData createResourceData(Map<String, String> keyVals) {
|
||||
GridResourceData resourceData = new GridResourceData();
|
||||
Map<String, RequestConstraint> constraints = listing.getRequestConstraints(keyVals);
|
||||
resourceData.setMetadataMap(new HashMap<>(constraints));
|
||||
return resourceData;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ResourcePair createResourcePair(AbstractResourceData resourceData, DisplayType displayType) {
|
||||
ResourcePair pair = new ResourcePair();
|
||||
pair.setResourceData(resourceData);
|
||||
GridLoadProperties loadProperties = new GridLoadProperties();
|
||||
if (displayType != null) {
|
||||
loadProperties.setDisplayType(displayType);
|
||||
}
|
||||
if (type != null) {
|
||||
loadProperties.setResourceType(type);
|
||||
}
|
||||
HashMap<String, RequestConstraint> parameters = getProductParameters(
|
||||
selection, order);
|
||||
List<String> ensembles = null;
|
||||
try {
|
||||
ensembles = inventory.getEnsembles(parameters);
|
||||
} catch (VizException e) {
|
||||
statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(), e);
|
||||
}
|
||||
if (ensembles != null && ensembles.size() > 1) {
|
||||
Collections.sort(ensembles);
|
||||
List<ResourcePair> pairs = new ArrayList<ResourcePair>();
|
||||
for (String ensemble : ensembles) {
|
||||
ResourcePair pair = new ResourcePair();
|
||||
resourceData = getResourceData();
|
||||
HashMap<String, RequestConstraint> newParameters = new HashMap<String, RequestConstraint>(
|
||||
parameters);
|
||||
newParameters.put(GridConstants.ENSEMBLE_ID,
|
||||
new RequestConstraint(ensemble));
|
||||
resourceData.setMetadataMap(newParameters);
|
||||
pair.setResourceData(resourceData);
|
||||
pair.setLoadProperties(loadProperties);
|
||||
pair.setProperties(new ResourceProperties());
|
||||
pairs.add(pair);
|
||||
pair.setLoadProperties(loadProperties);
|
||||
pair.setProperties(new ResourceProperties());
|
||||
return pair;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected AbstractRenderableDisplay createRenderableDisplay(ResourcePair resourcePair) throws VizException {
|
||||
AbstractResourceData resourceData = resourcePair.getResourceData();
|
||||
if (resourceData instanceof GridResourceData) {
|
||||
GridInventory inventory = (GridInventory) DataCubeContainer.getInventory(GridConstants.GRID);
|
||||
GridResourceData gridResourceData = (GridResourceData) resourceData;
|
||||
List<String> ensembles = inventory.getEnsembles(gridResourceData.getMetadataMap());
|
||||
if (ensembles != null && ensembles.size() > 1) {
|
||||
Collections.sort(ensembles);
|
||||
DisplayType displayType = null;
|
||||
if (resourcePair.getLoadProperties() instanceof GridLoadProperties) {
|
||||
displayType = ((GridLoadProperties) resourcePair.getLoadProperties()).getDisplayType();
|
||||
}
|
||||
AbstractRenderableDisplay display = null;
|
||||
for (String ensemble : ensembles) {
|
||||
GridResourceData ensembleResourceData = new GridResourceData();
|
||||
HashMap<String, RequestConstraint> newParameters = new HashMap<String, RequestConstraint>(
|
||||
gridResourceData.getMetadataMap());
|
||||
newParameters.put(GridConstants.ENSEMBLE_ID, new RequestConstraint(ensemble));
|
||||
ensembleResourceData.setMetadataMap(newParameters);
|
||||
ResourcePair ensemblePair = createResourcePair(gridResourceData, displayType);
|
||||
if (display == null) {
|
||||
display = createRenderableDisplay(ensemblePair);
|
||||
} else {
|
||||
display.getDescriptor().getResourceList().add(ensemblePair);
|
||||
}
|
||||
}
|
||||
return display;
|
||||
}
|
||||
constructResource(pairs);
|
||||
} else {
|
||||
resourceData = getResourceData();
|
||||
resourceData.setMetadataMap(parameters);
|
||||
constructResource();
|
||||
}
|
||||
return super.createRenderableDisplay(resourcePair);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String[] queryData(String param,
|
||||
Map<String, RequestConstraint> queryList) {
|
||||
if (getInventory() == null) {
|
||||
return super.queryData(param, queryList);
|
||||
} else {
|
||||
Collection<String> sources = null;
|
||||
Collection<String> params = null;
|
||||
Collection<Level> levels = null;
|
||||
BlockingQueue<String> returnQueue = new LinkedBlockingQueue<String>();
|
||||
for (Entry<String, RequestConstraint> queryParam : queryList
|
||||
.entrySet()) {
|
||||
String key = queryParam.getKey();
|
||||
String value = queryParam.getValue().getConstraintValue();
|
||||
if (key.equals(GridInventory.MODEL_NAME_QUERY)) {
|
||||
sources = Arrays.asList(value);
|
||||
} else if (key.equals(GridInventory.PARAMETER_QUERY)) {
|
||||
params = Arrays.asList(value);
|
||||
} else if (key.equals(GridInventory.MASTER_LEVEL_QUERY)) {
|
||||
if (levels == null) {
|
||||
levels = new ArrayList<Level>(LevelFactory
|
||||
.getInstance().getAllLevels());
|
||||
}
|
||||
Iterator<Level> iter = levels.iterator();
|
||||
while (iter.hasNext()) {
|
||||
if (!iter.next().getMasterLevel().getName()
|
||||
.equals(value)) {
|
||||
iter.remove();
|
||||
}
|
||||
}
|
||||
public Collection<DisplayType> getValidDisplayTypes(String[] selection) {
|
||||
Map<String, String> keyValMap = createKeyValMap(selection);
|
||||
if (keyValMap.containsKey(GridConstants.PARAMETER_ABBREVIATION)) {
|
||||
return FieldDisplayTypesFactory.getInstance().getDisplayTypes(
|
||||
keyValMap.get(GridConstants.PARAMETER_ABBREVIATION));
|
||||
}
|
||||
return super.getValidDisplayTypes(selection);
|
||||
}
|
||||
|
||||
} else if (key.equals(GridInventory.LEVEL_ONE_QUERY)) {
|
||||
double doubleValue = Double.parseDouble(value);
|
||||
if (levels == null) {
|
||||
levels = new ArrayList<Level>(
|
||||
LevelMappingFactory
|
||||
.getInstance(
|
||||
LevelMappingFactory.VOLUMEBROWSER_LEVEL_MAPPING_FILE)
|
||||
.getAllLevels());
|
||||
}
|
||||
Iterator<Level> iter = levels.iterator();
|
||||
while (iter.hasNext()) {
|
||||
if (iter.next().getLevelonevalue() != doubleValue) {
|
||||
iter.remove();
|
||||
}
|
||||
}
|
||||
} else if (key.equals(GridInventory.LEVEL_TWO_QUERY)) {
|
||||
double doubleValue = Double.parseDouble(value);
|
||||
if (levels == null) {
|
||||
levels = new ArrayList<Level>(
|
||||
LevelMappingFactory
|
||||
.getInstance(
|
||||
LevelMappingFactory.VOLUMEBROWSER_LEVEL_MAPPING_FILE)
|
||||
.getAllLevels());
|
||||
}
|
||||
Iterator<Level> iter = levels.iterator();
|
||||
while (iter.hasNext()) {
|
||||
if (iter.next().getLeveltwovalue() != doubleValue) {
|
||||
iter.remove();
|
||||
}
|
||||
}
|
||||
} else if (key.equals(GridInventory.LEVEL_ID_QUERY)) {
|
||||
levels = Arrays.asList(LevelFactory.getInstance().getLevel(
|
||||
value));
|
||||
}
|
||||
@Override
|
||||
public void loadResource(String[] selection, DisplayType displayType) {
|
||||
if (displayType == null) {
|
||||
Collection<DisplayType> types = getValidDisplayTypes(selection);
|
||||
if (types != null && !types.isEmpty()) {
|
||||
displayType = types.iterator().next();
|
||||
}
|
||||
}
|
||||
super.loadResource(selection, displayType);
|
||||
}
|
||||
|
||||
if (param.equals(GridInventory.MODEL_NAME_QUERY)) {
|
||||
try {
|
||||
getInventory().checkSources(sources, params, levels,
|
||||
returnQueue);
|
||||
} catch (InterruptedException e) {
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
e.getLocalizedMessage(), e);
|
||||
}
|
||||
return returnQueue.toArray(new String[0]);
|
||||
} else if (param.equals(GridInventory.PARAMETER_QUERY)) {
|
||||
try {
|
||||
getInventory().checkParameters(sources, params, levels,
|
||||
false, returnQueue);
|
||||
} catch (InterruptedException e) {
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
e.getLocalizedMessage(), e);
|
||||
}
|
||||
return returnQueue.toArray(new String[0]);
|
||||
} else if (param.equals(GridInventory.MASTER_LEVEL_QUERY)) {
|
||||
try {
|
||||
getInventory().checkLevels(sources, params, levels,
|
||||
returnQueue);
|
||||
} catch (InterruptedException e) {
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
e.getLocalizedMessage(), e);
|
||||
}
|
||||
Set<String> masterlevels = new HashSet<String>();
|
||||
LevelFactory lf = LevelFactory.getInstance();
|
||||
for (String levelid : returnQueue) {
|
||||
Level level = lf.getLevel(levelid);
|
||||
masterlevels.add(level.getMasterLevel().getName());
|
||||
}
|
||||
return masterlevels.toArray(new String[0]);
|
||||
} else if (param.equals(GridInventory.LEVEL_ID_QUERY)) {
|
||||
try {
|
||||
getInventory().checkLevels(sources, params, levels,
|
||||
returnQueue);
|
||||
} catch (InterruptedException e) {
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
e.getLocalizedMessage(), e);
|
||||
}
|
||||
return returnQueue.toArray(new String[0]);
|
||||
@Override
|
||||
public List<ProductBrowserPreference> getPreferences() {
|
||||
List<ProductBrowserPreference> prefs = new ArrayList<>(super.getPreferences());
|
||||
if (listing instanceof DerivedPreferenceDataListing) {
|
||||
prefs.add(((DerivedPreferenceDataListing) listing).getDerivedPreference());
|
||||
}
|
||||
return prefs;
|
||||
}
|
||||
|
||||
private static class DerivedPreferenceDataListing implements DataListing {
|
||||
|
||||
private final ProductBrowserPreference derivedPreference;
|
||||
|
||||
private final DataListing listing;
|
||||
|
||||
private final DataListing derivedListing;
|
||||
|
||||
public DerivedPreferenceDataListing() {
|
||||
derivedPreference = new ProductBrowserPreference();
|
||||
derivedPreference.setLabel(SHOW_DERIVED_PARAMS);
|
||||
derivedPreference.setPreferenceType(PreferenceType.BOOLEAN);
|
||||
derivedPreference.setTooltip("Show derived parameters in the Product Browser");
|
||||
derivedPreference.setValue(true);
|
||||
this.listing = new GridDataListing(Arrays.asList(GridConstants.DATASET_ID,
|
||||
GridConstants.PARAMETER_ABBREVIATION, GridConstants.MASTER_LEVEL_NAME, GridConstants.LEVEL_ID));
|
||||
this.derivedListing = new DerivedGridDataListing(Arrays.asList(GridConstants.DATASET_ID,
|
||||
GridConstants.PARAMETER_ABBREVIATION, GridConstants.MASTER_LEVEL_NAME, GridConstants.LEVEL_ID));
|
||||
}
|
||||
|
||||
public ProductBrowserPreference getDerivedPreference() {
|
||||
return derivedPreference;
|
||||
}
|
||||
|
||||
private DataListing getListing() {
|
||||
if (Boolean.TRUE.equals(derivedPreference.getValue())) {
|
||||
return derivedListing;
|
||||
} else {
|
||||
return listing;
|
||||
}
|
||||
}
|
||||
|
||||
return new String[0];
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see com.raytheon.uf.viz.productbrowser.
|
||||
* AbstractRequestableProductBrowserDataDefinition
|
||||
* #formatData(java.lang.String, java.lang.String[])
|
||||
*/
|
||||
@Override
|
||||
public List<ProductBrowserLabel> formatData(String param,
|
||||
String[] parameters) {
|
||||
List<ProductBrowserLabel> labels = GridProductBrowserDataFormatter
|
||||
.formatGridData(param, parameters);
|
||||
if (labels != null && !labels.isEmpty()) {
|
||||
return labels;
|
||||
@Override
|
||||
public String getPluginName() {
|
||||
return getListing().getPluginName();
|
||||
}
|
||||
|
||||
return super.formatData(param, parameters);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HashMap<String, RequestConstraint> getProductParameters(
|
||||
String[] selection, String[] order) {
|
||||
if (getInventory() == null) {
|
||||
return super.getProductParameters(selection, order);
|
||||
@Override
|
||||
public Collection<String> getKeys() {
|
||||
return getListing().getKeys();
|
||||
}
|
||||
HashMap<String, RequestConstraint> queryList = super
|
||||
.getProductParameters(selection, order);
|
||||
if (queryList.containsKey(GridInventory.LEVEL_ID_QUERY)) {
|
||||
RequestConstraint levelRC = queryList
|
||||
.remove(GridInventory.LEVEL_ID_QUERY);
|
||||
// Convert Level id to level one and level two values.
|
||||
Level level = LevelFactory.getInstance().getLevel(
|
||||
levelRC.getConstraintValue());
|
||||
queryList.put(GridInventory.LEVEL_ONE_QUERY, new RequestConstraint(
|
||||
level.getLevelOneValueAsString()));
|
||||
queryList.put(GridInventory.LEVEL_TWO_QUERY, new RequestConstraint(
|
||||
level.getLevelTwoValueAsString()));
|
||||
queryList.put(GridInventory.MASTER_LEVEL_QUERY,
|
||||
new RequestConstraint(level.getMasterLevel().getName()));
|
||||
|
||||
@Override
|
||||
public Collection<String> getValues(String key, Map<String, String> keyVals) throws Exception {
|
||||
return getListing().getValues(key, keyVals);
|
||||
}
|
||||
return queryList;
|
||||
}
|
||||
|
||||
private GridInventory getInventory() {
|
||||
if ((Boolean) getPreference(SHOW_DERIVED_PARAMS).getValue()) {
|
||||
return (GridInventory) DataCubeContainer
|
||||
.getInventory(GridConstants.GRID);
|
||||
} else {
|
||||
return null;
|
||||
@Override
|
||||
public Map<String, String> getFormattedValues(String key, Map<String, String> keyVals) throws Exception {
|
||||
return getListing().getFormattedValues(key, keyVals);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, RequestConstraint> getRequestConstraints(Map<String, String> keyVals) {
|
||||
return getListing().getRequestConstraints(keyVals);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see
|
||||
* com.raytheon.uf.viz.productbrowser.AbstractProductBrowserDataDefinition
|
||||
* #getDisplayTypes()
|
||||
*/
|
||||
@Override
|
||||
public Map<ResourceType, List<DisplayType>> getDisplayTypes() {
|
||||
Map<ResourceType, List<DisplayType>> type = new HashMap<ResourceType, List<DisplayType>>();
|
||||
List<DisplayType> types = new ArrayList<DisplayType>();
|
||||
types.add(DisplayType.CONTOUR);
|
||||
types.add(DisplayType.IMAGE);
|
||||
type.put(ResourceType.PLAN_VIEW, types);
|
||||
return type;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see com.raytheon.uf.viz.productbrowser.xml.IProductBrowserPreferences#
|
||||
* configurePreferences()
|
||||
*/
|
||||
@Override
|
||||
public List<ProductBrowserPreference> configurePreferences() {
|
||||
List<ProductBrowserPreference> widgets = super.configurePreferences();
|
||||
ProductBrowserPreference derivedParameterPref = new ProductBrowserPreference();
|
||||
derivedParameterPref.setLabel(SHOW_DERIVED_PARAMS);
|
||||
derivedParameterPref.setPreferenceType(PreferenceType.BOOLEAN);
|
||||
derivedParameterPref
|
||||
.setTooltip("Show derived parameters in the Product Browser");
|
||||
derivedParameterPref.setValue(true);
|
||||
widgets.add(derivedParameterPref);
|
||||
return widgets;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue