Issue #1495 add ensemble selection tab to subset dialog
Change-Id: I71c599428285c9d394529a77359a4ba61dd88f15 Former-commit-id:14f3c3b3bf
[formerly e884c8e79f05af8fb3252fa7a492d232ba090715] Former-commit-id:f0d1c1a737
This commit is contained in:
parent
928cb3b00f
commit
d06ef00715
7 changed files with 371 additions and 123 deletions
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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
|
||||
*/
|
||||
|
|
|
@ -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 -->
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue