Merge "Issue #1495 add ensemble selection tab to subset dialog Change-Id: I71c599428285c9d394529a77359a4ba61dd88f15" into 13.2.1_delivery

Former-commit-id: 4eb1e71df46c7ceaa5bf523c02821228da42460e
This commit is contained in:
Richard Peter 2013-01-18 15:43:16 -06:00 committed by Gerrit Code Review
commit 76f9e42fd3
7 changed files with 371 additions and 123 deletions

View file

@ -0,0 +1,177 @@
/**
* 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.uf.viz.datadelivery.subscription.subset;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import com.raytheon.uf.common.datadelivery.registry.Ensemble;
import com.raytheon.uf.common.datadelivery.registry.Subscription;
import com.raytheon.uf.common.util.CollectionUtil;
import com.raytheon.uf.viz.datadelivery.subscription.subset.xml.SubsetXML;
import com.raytheon.viz.ui.widgets.duallist.DualList;
import com.raytheon.viz.ui.widgets.duallist.DualListConfig;
import com.raytheon.viz.ui.widgets.duallist.IUpdate;
/**
*
* TODO Add Description
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Jan 3, 2013 bsteffen Initial creation
*
* </pre>
*
* @author bsteffen
* @version 1.0
*/
public class GriddedEnsembleSubsetTab {
private static final String NAME = "Ensemble Members";
private final Set<IDataSize> listeners = new HashSet<IDataSize>();
private final Ensemble ensemble;
private DualList dualList;
private boolean modified;
public GriddedEnsembleSubsetTab(Composite parentComp, Ensemble ensemble) {
this.ensemble = ensemble;
init(parentComp);
}
private void init(Composite parentComp) {
GridLayout gl = new GridLayout(1, false);
GridData gd = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
gl.horizontalSpacing = 0;
gl.verticalSpacing = 0;
gl.marginWidth = 0;
gl.marginHeight = 0;
Group group = new Group(parentComp, SWT.NONE);
group.setText(getName());
group.setLayout(gl);
group.setLayoutData(gd);
DualListConfig dualListConfig = new DualListConfig();
dualListConfig.setAvailableListLabel("Available Members:");
dualListConfig.setSelectedListLabel("Selected Memebers:");
dualListConfig.setListHeight(125);
dualListConfig.setListWidth(175);
dualListConfig.setShowUpDownBtns(false);
dualListConfig.setFullList(ensemble.getMembers());
dualList = new DualList(group, SWT.NONE, dualListConfig,
new IUpdate() {
@Override
public void selectionChanged() {
modified = true;
notifyListeners();
}
@Override
public void hasEntries(boolean entries) {
}
});
}
public String getName() {
return NAME;
}
public Ensemble getEnsembleWithSelection() {
Ensemble ensemble = new Ensemble(this.ensemble);
ensemble.setSelectedMembers(Arrays.asList(dualList
.getSelectedListItems()));
return ensemble;
}
private void loadFromEnsemble(Ensemble ensemble) {
dualList.clearSelection();
if (ensemble != null && ensemble.getSelectedMembers() != null) {
dualList.selectItems(ensemble.getSelectedMembers().toArray(
new String[0]));
}
}
public void populateSubscription(Subscription subscription) {
subscription.setEnsemble(getEnsembleWithSelection());
}
public void loadFromSubscription(Subscription subscription) {
loadFromEnsemble(subscription.getEnsemble());
}
public void populateSubsetXML(SubsetXML<?> subsetXml) {
subsetXml.setEnsemble(getEnsembleWithSelection());
}
public void loadFromSubsetXML(SubsetXML<?> subsetXml) {
loadFromEnsemble(subsetXml.getEnsemble());
}
public boolean isValid() {
return !CollectionUtil.isNullOrEmpty(dualList.getSelectedListItems());
}
public boolean isModified() {
return modified;
}
public void setModified(boolean modified) {
this.modified = modified;
}
public void addListener(IDataSize listener) {
synchronized (this.listeners) {
listeners.add(listener);
}
}
protected void notifyListeners() {
Collection<IDataSize> listeners;
synchronized (this.listeners) {
listeners = new ArrayList<IDataSize>(
this.listeners);
}
for (IDataSize listener : listeners) {
listener.updateDataSize();
}
}
}

View file

@ -24,6 +24,7 @@ import java.io.StringWriter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -34,13 +35,18 @@ import java.util.TreeSet;
import javax.xml.bind.JAXBException;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.geotools.geometry.jts.ReferencedEnvelope;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.Ordering;
import com.raytheon.uf.common.datadelivery.registry.DataSetMetaData;
import com.raytheon.uf.common.datadelivery.registry.Ensemble;
import com.raytheon.uf.common.datadelivery.registry.GriddedDataSet;
import com.raytheon.uf.common.datadelivery.registry.GriddedDataSetMetaData;
import com.raytheon.uf.common.datadelivery.registry.Subscription;
@ -77,6 +83,7 @@ import com.raytheon.uf.viz.datadelivery.utils.DataDeliveryUtils;
* Dec 10, 2012 1259 bsteffen Switch Data Delivery from LatLon to referenced envelopes.
* Jan 04, 2013 1299 djohnson Add logging of invalid forecast hour information if it occurs again.
* Jan 04, 2013 1420 mpduff Pass cycles in for rules.
* Jan 18, 2013 1414 bsteffen Add ensemble tab.
*
* </pre>
*
@ -115,6 +122,8 @@ public class GriddedSubsetManagerDlg
private DataSetMetaData metaData;
private GriddedEnsembleSubsetTab ensembleTab;
/**
* Constructor.
*
@ -150,6 +159,82 @@ public class GriddedSubsetManagerDlg
super(shell, dataSet);
}
@Override
protected void createGridTabs(TabFolder tabFolder) {
super.createGridTabs(tabFolder);
Ensemble e = dataSet.getEnsemble();
if (e != null && e.getMembers() != null) {
TabItem ensembleTabItem = new TabItem(tabFolder, SWT.NONE, 2);
Composite ensembleComp = new Composite(tabFolder, SWT.NONE);
ensembleComp.setLayout(new GridLayout(1, false));
ensembleComp.setLayoutData(new GridData(SWT.CENTER, SWT.DEFAULT,
true, false));
ensembleTabItem.setControl(ensembleComp);
ensembleTab = new GriddedEnsembleSubsetTab(ensembleComp,
dataSet.getEnsemble());
ensembleTab.addListener(this);
ensembleTabItem.setText(ensembleTab.getName());
}
}
@Override
protected Collection<String> getInvalidTabs() {
Collection<String> invalidTabs = super.getInvalidTabs();
if (ensembleTab != null && !ensembleTab.isValid()) {
invalidTabs.add(ensembleTab.getName());
}
return invalidTabs;
}
@Override
protected void populateSubsetXML(SubsetXML<SpecificDateTimeXML> subset) {
super.populateSubsetXML(subset);
if (ensembleTab != null) {
ensembleTab.populateSubsetXML(subset);
}
}
@Override
protected void loadFromSubsetXML(SubsetXML<SpecificDateTimeXML> subsetXml) {
super.loadFromSubsetXML(subsetXml);
if (ensembleTab != null) {
ensembleTab.loadFromSubsetXML(subsetXml);
}
}
/*
* (non-Javadoc)
*
* @see
* com.raytheon.uf.viz.datadelivery.subscription.subset.SubsetManagerDlg
* #loadFromSubscription
* (com.raytheon.uf.common.datadelivery.registry.Subscription)
*/
@Override
protected void loadFromSubscription(Subscription subscription) {
super.loadFromSubscription(subscription);
if (ensembleTab != null) {
ensembleTab.loadFromSubscription(subscription);
}
}
@Override
protected boolean isDirty() {
boolean modified = super.isDirty();
if (!modified && ensembleTab != null) {
modified = ensembleTab.isModified();
}
return modified;
}
@Override
protected void setClean() {
super.setClean();
if (ensembleTab != null) {
ensembleTab.setModified(false);
}
}
/**
* {@inheritDoc}
*/
@ -187,7 +272,9 @@ public class GriddedSubsetManagerDlg
time.setSelectedTimeIndices(fcstIndices);
subscription.setTime(time);
subscription.setEnsemble(dataSet.getEnsemble());
if (ensembleTab != null) {
ensembleTab.populateSubscription(subscription);
}
return subscription;
}
@ -196,7 +283,7 @@ public class GriddedSubsetManagerDlg
* {@inheritDoc}
*/
@Override
protected SpecificDateTimeXML getTimeXml() {
protected SpecificDateTimeXML getTimeXmlFromSubscription() {
SpecificDateTimeXML timeXml = new SpecificDateTimeXML();
Time time = this.subscription.getTime();
List<Integer> cycleTimes = time.getCycleTimes();
@ -273,7 +360,12 @@ public class GriddedSubsetManagerDlg
// Get the temporal data
int numFcstHours = this.timingTabControls.getSelectedFcstHours().length;
dataSize.setNumFcstHours(numFcstHours);
dataSize.setNumEnsembleMembers(dataSet.getEnsemble());
if (ensembleTab != null) {
dataSize.setNumEnsembleMembers(ensembleTab
.getEnsembleWithSelection());
} else {
dataSize.setNumEnsembleMembers(dataSet.getEnsemble());
}
// Get the Areal data
ReferencedEnvelope envelope = this.spatialTabControls.getEnvelope();

View file

@ -20,6 +20,7 @@
package com.raytheon.uf.viz.datadelivery.subscription.subset;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
@ -137,9 +138,6 @@ public abstract class SubsetManagerDlg<DATASET extends DataSet, PRESENTER extend
private final IUFStatusHandler statusHandler = UFStatus
.getHandler(SubsetManagerDlg.class);
/** Tab test map */
private final Map<String, String> tabTextMap = new HashMap<String, String>();
/** Subset Name text box */
private Text nameText;
@ -180,15 +178,6 @@ public abstract class SubsetManagerDlg<DATASET extends DataSet, PRESENTER extend
/** Edit flag */
private boolean create = true;
/** Flag for vertical levels/parameters dirty */
private boolean verticalParameterDirty = false;
/** Flag for vertical date/cycle/forecast dirty. */
private boolean dateDirty = false;
/** Flag for spatial dirty */
private boolean spatialDirty = false;
/** Subscription object */
protected Subscription subscription;
@ -201,14 +190,11 @@ public abstract class SubsetManagerDlg<DATASET extends DataSet, PRESENTER extend
/** Subset manager constant */
private final String DD_SUBSET_MANAGER = "Data Delivery Subset Manager - ";
/** Priority Tab constant */
private final String VERTICAL_TAB = "verticalTab";
private final String VERTICAL_TAB = "Vertical Levels/Parameters";
/** Latency Tab constant */
private final String TIMING_TAB = "timingTab";
private final String TIMING_TAB = "Forecast Hours";
/** Routing Tab constant */
private final String SPATIAL_TAB = "spatialTab";
private final String SPATIAL_TAB = "Spatial";
private final ISubscriptionService subscriptionService = DataDeliveryServices
.getSubscriptionService();
@ -291,14 +277,17 @@ public abstract class SubsetManagerDlg<DATASET extends DataSet, PRESENTER extend
*/
@Override
protected void initializeComponents(Shell shell) {
getTabText();
createTabFolder();
createInfoComp();
createButtons();
if (loadDataSet) {
populate();
if (subsetXml != null) {
loadFromSubsetXML(subsetXml);
} else if (subscription != null) {
loadFromSubscription(subscription);
}
}
shell.addShellListener(new ShellAdapter() {
@ -357,13 +346,6 @@ public abstract class SubsetManagerDlg<DATASET extends DataSet, PRESENTER extend
// shell.setMinimumSize(shell.getSize());
}
/** Get a map of tab text values */
private void getTabText() {
tabTextMap.put(VERTICAL_TAB, "Vertical Levels/Parameters");
tabTextMap.put(TIMING_TAB, "Forecast Hours");
tabTextMap.put(SPATIAL_TAB, "Spatial");
}
/** Create the tabs */
private void createTabs(TabFolder tabFolder) {
createGridTabs(tabFolder);
@ -376,12 +358,12 @@ public abstract class SubsetManagerDlg<DATASET extends DataSet, PRESENTER extend
}
/** Create the grid tab */
private void createGridTabs(TabFolder tabFolder) {
protected void createGridTabs(TabFolder tabFolder) {
GridData gd = new GridData(SWT.CENTER, SWT.DEFAULT, true, false);
GridLayout gl = new GridLayout(1, false);
TabItem verticalTab = new TabItem(tabFolder, SWT.NONE);
verticalTab.setText(tabTextMap.get(VERTICAL_TAB));
verticalTab.setText(VERTICAL_TAB);
verticalTab.setData("valid", false);
Composite vertComp = new Composite(tabFolder, SWT.NONE);
vertComp.setLayout(gl);
@ -393,7 +375,7 @@ public abstract class SubsetManagerDlg<DATASET extends DataSet, PRESENTER extend
gl = new GridLayout(1, false);
TabItem timingTab = new TabItem(tabFolder, SWT.NONE);
timingTab.setText(tabTextMap.get(TIMING_TAB));
timingTab.setText(TIMING_TAB);
timingTab.setData("valid", false);
Composite timingComp = new Composite(tabFolder, SWT.NONE);
timingComp.setLayout(gl);
@ -407,7 +389,7 @@ public abstract class SubsetManagerDlg<DATASET extends DataSet, PRESENTER extend
gl = new GridLayout(1, false);
TabItem spatialTab = new TabItem(tabFolder, SWT.NONE);
spatialTab.setText(tabTextMap.get(SPATIAL_TAB));
spatialTab.setText(SPATIAL_TAB);
Composite spatialComp = new Composite(tabFolder, SWT.NONE);
spatialComp.setLayout(gl);
spatialComp.setLayoutData(gd);
@ -710,37 +692,43 @@ public abstract class SubsetManagerDlg<DATASET extends DataSet, PRESENTER extend
return false;
}
// Don't get the last tab, saved subsets
Map<String, Boolean> tabsValidMap = new HashMap<String, Boolean>();
Collection<String> invalidTabs = getInvalidTabs();
if (!invalidTabs.isEmpty()) {
StringBuilder message = new StringBuilder(
"The following tabs do not have valid entries:\n\n");
for (String tab : invalidTabs) {
message.append(tab + "\n");
}
DataDeliveryUtils.showMessage(shell, getStyle(), "Invalid Entries",
message.toString());
return false;
}
return true;
}
protected Collection<String> getInvalidTabs() {
Collection<String> invalidTabs = new ArrayList<String>(3);
// Get the tabs to validate
// TODO Hardcoding the tabs for now, fix this later
// Validate the vertical tab
tabsValidMap.put(VERTICAL_TAB, vTab.isValid());
if (!vTab.isValid()) {
invalidTabs.add(VERTICAL_TAB);
}
tabsValidMap.put(TIMING_TAB, timingTabControls.isValid());
if (!timingTabControls.isValid()) {
invalidTabs.add(TIMING_TAB);
}
// Next is spatial subset tab
tabsValidMap.put(SPATIAL_TAB, spatialTabControls.isValid());
StringBuilder buf = new StringBuilder(
"The following tabs do not have valid entries:\n\n");
boolean showMsg = false;
for (String tab : tabsValidMap.keySet()) {
if (!tabsValidMap.get(tab)) {
buf.append(tabTextMap.get(tab) + "\n");
showMsg = true;
}
if (!spatialTabControls.isValid()) {
invalidTabs.add(SPATIAL_TAB);
}
if (showMsg) {
DataDeliveryUtils.showMessage(shell, getStyle(), "Invalid Entries",
buf.toString());
return false;
}
return true;
return invalidTabs;
}
/**
@ -806,6 +794,15 @@ public abstract class SubsetManagerDlg<DATASET extends DataSet, PRESENTER extend
}
SubsetXML<TIMEXML> subset = new SubsetXML<TIMEXML>();
populateSubsetXML(subset);
// Have all the info, now save the file
SubsetFileManager.getInstance().saveSubset(subset, this.shell);
setClean();
subsetTab.enableButtons(nameText);
}
protected void populateSubsetXML(SubsetXML<TIMEXML> subset) {
subset.setBaseSubsetName(nameText.getText());
subset.setDatasetName(dataSet.getDataSetName());
subset.setProviderName(dataSet.getProviderName());
@ -821,12 +818,6 @@ public abstract class SubsetManagerDlg<DATASET extends DataSet, PRESENTER extend
// finally the date/cycle/forecast data
TIMEXML time = timingTabControls.getSaveInfo();
subset.setTime(time);
// Have all the info, now save the file
SubsetFileManager.getInstance().saveSubset(subset, this.shell);
setClean();
subsetTab.enableButtons(nameText);
}
/**
@ -844,58 +835,36 @@ public abstract class SubsetManagerDlg<DATASET extends DataSet, PRESENTER extend
SubsetXML<TIMEXML> loadedSubsetXml = (SubsetXML<TIMEXML>) SubsetFileManager
.getInstance().loadSubset(subsetName);
updateSelections(loadedSubsetXml);
loadFromSubsetXML(loadedSubsetXml);
}
/**
* Populate the dialog controls.
*/
private void populate() {
if (subsetXml == null) {
if (subscription == null) {
return;
}
populateSubset();
}
AreaXML area = subsetXml.getArea();
spatialTabControls.setDataSet(this.dataSet);
spatialTabControls.populate(area);
protected void loadFromSubsetXML(SubsetXML<TIMEXML> subsetXml) {
ArrayList<VerticalXML> vertList = subsetXml.getVerticalList();
vTab.populate(vertList, dataSet);
TIMEXML time = subsetXml.getTime();
this.timingTabControls.populate(time, dataSet);
this.nameText.setText(subsetXml.getBaseSubsetName());
if (this.subsetXml == subsetXml) {
// only populate area and name if subsetXml is loading from initial
// load, not from the saved subsets tab.
AreaXML area = subsetXml.getArea();
spatialTabControls.setDataSet(this.dataSet);
spatialTabControls.populate(area);
this.nameText.setText(subsetXml.getBaseSubsetName());
}
}
/**
* Update selections with from the loadedSubsetXML object.
*/
private void updateSelections(SubsetXML<TIMEXML> loadedSubsetXml) {
ArrayList<VerticalXML> vertList = loadedSubsetXml.getVerticalList();
vTab.updateSettings(vertList);
TIMEXML time = loadedSubsetXml.getTime();
timingTabControls.updateSettings(time);
}
/**
* Populate the subset object.
*/
private void populateSubset() {
subsetXml = new SubsetXML<TIMEXML>();
subsetXml.setDatasetName(this.dataSet.getDataSetName());
subsetXml.setProviderName(this.dataSet.getProviderName());
subsetXml.setSubsetName(this.subscription.getName());
protected void loadFromSubscription(Subscription subscription) {
this.nameText.setText(this.subscription.getName());
// Cycle time
TIMEXML timeXml = getTimeXml();
TIMEXML timeXml = getTimeXmlFromSubscription();
timeXml.setLatestData(true);
subsetXml.setTime(timeXml);
this.timingTabControls.populate(timeXml, dataSet);
// Area
AreaXML area = new AreaXML();
@ -911,7 +880,8 @@ public abstract class SubsetManagerDlg<DATASET extends DataSet, PRESENTER extend
area.setEnvelope(envelope);
}
subsetXml.setArea(area);
spatialTabControls.setDataSet(this.dataSet);
spatialTabControls.populate(area);
// Vertical/Parameters
Map<String, VerticalXML> levelMap = new HashMap<String, VerticalXML>();
@ -946,9 +916,9 @@ public abstract class SubsetManagerDlg<DATASET extends DataSet, PRESENTER extend
}
}
for (VerticalXML v : levelMap.values()) {
subsetXml.addVertical(v);
}
ArrayList<VerticalXML> vertList = new ArrayList<VerticalXML>(
levelMap.values());
vTab.populate(vertList, dataSet);
}
/**
@ -956,25 +926,22 @@ public abstract class SubsetManagerDlg<DATASET extends DataSet, PRESENTER extend
*
* @return The time object
*/
protected abstract TIMEXML getTimeXml();
protected abstract TIMEXML getTimeXmlFromSubscription();
/**
* If any mods have been made to the composite selections, set dirty true.
*/
private boolean isDirty() {
protected boolean isDirty() {
verticalParameterDirty = vTab.isDirty();
if (verticalParameterDirty) {
if (vTab.isDirty()) {
return true;
}
dateDirty = timingTabControls.isDirty();
if (dateDirty) {
if (timingTabControls.isDirty()) {
return true;
}
spatialDirty = spatialTabControls.isSpatialDirty();
if (spatialDirty) {
if (spatialTabControls.isSpatialDirty()) {
return true;
}
@ -984,7 +951,7 @@ public abstract class SubsetManagerDlg<DATASET extends DataSet, PRESENTER extend
/**
* Reset the dirty flags.
*/
private void setClean() {
protected void setClean() {
vTab.setClean();
timingTabControls.setDirty(false);
spatialTabControls.setSpatialDirty(false);

View file

@ -471,7 +471,7 @@ public class VerticalSubsetTab extends SubsetTab implements
* @param dataSet
* The DataSetMetaData object
*/
public void populate(ArrayList<VerticalXML> vertList, DataSet dataSet) {
public void populate(List<VerticalXML> vertList, DataSet dataSet) {
this.dataSet = dataSet;
createExpandBarItems();

View file

@ -29,6 +29,7 @@ import javax.xml.bind.annotation.XmlElements;
import javax.xml.bind.annotation.XmlRootElement;
import com.raytheon.edex.util.Util;
import com.raytheon.uf.common.datadelivery.registry.Ensemble;
import com.raytheon.uf.viz.datadelivery.common.xml.AreaXML;
import com.raytheon.uf.viz.datadelivery.common.xml.IDisplayXml;
@ -65,6 +66,9 @@ public class SubsetXML<TIMEXML extends TimeXML> implements IDisplayXml {
@XmlElement(name = "area", type = AreaXML.class)
protected AreaXML area;
@XmlElement
protected Ensemble ensemble;
@XmlElements({ @XmlElement(name = "vertical", type = VerticalXML.class) })
protected ArrayList<VerticalXML> verticalList = new ArrayList<VerticalXML>();
@ -86,6 +90,21 @@ public class SubsetXML<TIMEXML extends TimeXML> implements IDisplayXml {
this.subsetName = subsetName;
}
/**
* @return the ensemble
*/
public Ensemble getEnsemble() {
return ensemble;
}
/**
* @param ensemble
* the ensemble to set
*/
public void setEnsemble(Ensemble ensemble) {
this.ensemble = ensemble;
}
/**
* @return the area
*/

View file

@ -45,9 +45,9 @@
<ignore>\.das$</ignore>
<ignore>\.dds$</ignore>
<ignore>help$</ignore>
<ignore>fens_all</ignore>
<ignore>cmcens_all</ignore>
<ignore>gep_all</ignore>
<ignore>fens\d\d\d</ignore>
<ignore>cmcens[cp]\d\d</ignore>
<ignore>ge[cp]\d\d</ignore>
<!-- seed scan once a day at 12z -->
<seedScan>0 0 12 * * ?</seedScan>
<!-- main scan every 12 minutes -->

View file

@ -288,13 +288,6 @@ class OpenDAPRetrievalGenerator extends RetrievalGenerator {
List<Retrieval> retrievals = new ArrayList<Retrieval>();
Subscription sub = bundle.getSubscription();
if (sub.getEnsemble() != null && !sub.getEnsemble().hasSelection()) {
// TODO remove this once the UI allows you to make an ensemble
// selection.
sub.getEnsemble()
.setSelectedMembers(sub.getEnsemble().getMembers());
}
int sfactor = getSizingFactor(getDimensionalSize(sub.getCoverage()));
sub = removeDuplicates(sub);