Omaha #4153 Move grid product browser to use data listing.

Former-commit-id: 98fe0ae7bad0b617893f49dc864e9653255ba9a2
This commit is contained in:
Ben Steffensmeier 2015-06-09 17:07:15 -05:00
parent 9beb93f61f
commit c87c7ef1d7
4 changed files with 478 additions and 267 deletions

View file

@ -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,

View file

@ -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);
}
}
}

View file

@ -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;
}
}
};
}

View file

@ -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;
}
}