Merge "Omaha #5483 - fix Hydro GUI sizing issues." into omaha_16.2.1-lx
Former-commit-id: 3e8ba66a6ae1342be9abc52e478b63a732d6043c
This commit is contained in:
commit
522df34bca
6 changed files with 458 additions and 443 deletions
|
@ -2,7 +2,7 @@ Manifest-Version: 1.0
|
|||
Bundle-ManifestVersion: 2
|
||||
Bundle-Name: Hydro Plug-in
|
||||
Bundle-SymbolicName: com.raytheon.viz.hydro;singleton:=true
|
||||
Bundle-Version: 1.15.0.qualifier
|
||||
Bundle-Version: 1.16.0.qualifier
|
||||
Bundle-Activator: com.raytheon.viz.hydro.Activator
|
||||
Bundle-Vendor: Raytheon
|
||||
Require-Bundle: org.eclipse.core.runtime,
|
||||
|
@ -21,7 +21,8 @@ Require-Bundle: org.eclipse.core.runtime,
|
|||
com.raytheon.uf.common.dataplugin.shef;bundle-version="1.12.1174",
|
||||
com.raytheon.uf.viz.core.point;bundle-version="1.15.0",
|
||||
com.raytheon.uf.common.auth;bundle-version="1.12.1174",
|
||||
com.google.guava;bundle-version="18.0.0"
|
||||
com.google.guava;bundle-version="18.0.0",
|
||||
org.apache.commons.lang;bundle-version="2.3.0"
|
||||
Bundle-ActivationPolicy: lazy
|
||||
Export-Package: com.raytheon.viz.hydro,
|
||||
com.raytheon.viz.hydro.perspective,
|
||||
|
|
|
@ -0,0 +1,99 @@
|
|||
/**
|
||||
* 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.hydro.flashfloodguidance;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* POJO to store FFG information used by the Flash Flood Guidance dialog.
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* May 10, 2016 5483 bkowal Initial creation
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author bkowal
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
public class FFGGuidanceData {
|
||||
/*
|
||||
* Maps to id or type depending on selections in the Flash Flood Guidance
|
||||
* dialog.
|
||||
*/
|
||||
private final String identifier;
|
||||
|
||||
private final int duration;
|
||||
|
||||
private final String formattedDuration;
|
||||
|
||||
private final Date dateTime;
|
||||
|
||||
private final String formattedDateTime;
|
||||
|
||||
private File xmrgFile;
|
||||
|
||||
public FFGGuidanceData(String identifier, int duration,
|
||||
String formattedDuration, Date dateTime, String formattedDateTime) {
|
||||
if (identifier == null) {
|
||||
throw new IllegalArgumentException(
|
||||
"Required argument identifier cannot be NULL.");
|
||||
}
|
||||
this.identifier = identifier;
|
||||
this.duration = duration;
|
||||
this.formattedDuration = formattedDuration;
|
||||
this.dateTime = dateTime;
|
||||
this.formattedDateTime = formattedDateTime;
|
||||
}
|
||||
|
||||
public String getIdentifier() {
|
||||
return identifier;
|
||||
}
|
||||
|
||||
public int getDuration() {
|
||||
return duration;
|
||||
}
|
||||
|
||||
public String getFormattedDuration() {
|
||||
return formattedDuration;
|
||||
}
|
||||
|
||||
public Date getDateTime() {
|
||||
return dateTime;
|
||||
}
|
||||
|
||||
public String getFormattedDateTime() {
|
||||
return formattedDateTime;
|
||||
}
|
||||
|
||||
public File getXmrgFile() {
|
||||
return xmrgFile;
|
||||
}
|
||||
|
||||
public void setXmrgFile(File xmrgFile) {
|
||||
this.xmrgFile = xmrgFile;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
/**
|
||||
* 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.hydro.flashfloodguidance;
|
||||
|
||||
import java.util.Comparator;
|
||||
|
||||
import org.apache.commons.lang.builder.CompareToBuilder;
|
||||
|
||||
/**
|
||||
* Compares {@link FFGGuidanceData}s to ensure that they are supported by: 1)
|
||||
* identifier in ascending 2) duration in ascending 3) date/time in descending.
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* May 10, 2016 5483 bkowal Initial creation
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author bkowal
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
public class FFGGuidanceDataComparator implements Comparator<FFGGuidanceData> {
|
||||
|
||||
public FFGGuidanceDataComparator() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compare(FFGGuidanceData o1, FFGGuidanceData o2) {
|
||||
return new CompareToBuilder()
|
||||
.append(o1.getIdentifier(), o2.getIdentifier())
|
||||
.append(o1.getDuration(), o2.getDuration())
|
||||
.append(o2.getDateTime(), o1.getDateTime()).toComparison();
|
||||
}
|
||||
}
|
|
@ -20,38 +20,47 @@
|
|||
package com.raytheon.viz.hydro.flashfloodguidance;
|
||||
|
||||
import java.io.File;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.TimeZone;
|
||||
import java.util.TreeMap;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.custom.StackLayout;
|
||||
import org.eclipse.swt.events.MouseAdapter;
|
||||
import org.eclipse.swt.events.MouseEvent;
|
||||
import org.eclipse.swt.events.SelectionAdapter;
|
||||
import org.eclipse.swt.events.SelectionEvent;
|
||||
import org.eclipse.swt.graphics.Cursor;
|
||||
import org.eclipse.swt.graphics.Font;
|
||||
import org.eclipse.swt.graphics.GC;
|
||||
import org.eclipse.swt.layout.GridData;
|
||||
import org.eclipse.swt.layout.GridLayout;
|
||||
import org.eclipse.swt.layout.RowData;
|
||||
import org.eclipse.swt.layout.RowLayout;
|
||||
import org.eclipse.swt.widgets.Button;
|
||||
import org.eclipse.swt.widgets.Combo;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
import org.eclipse.swt.widgets.Group;
|
||||
import org.eclipse.swt.widgets.Label;
|
||||
import org.eclipse.swt.widgets.Layout;
|
||||
import org.eclipse.swt.widgets.List;
|
||||
import org.eclipse.swt.widgets.MessageBox;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
import org.eclipse.swt.widgets.Table;
|
||||
import org.eclipse.swt.widgets.TableColumn;
|
||||
import org.eclipse.swt.widgets.TableItem;
|
||||
|
||||
import com.raytheon.uf.common.dataplugin.shef.tables.Admin;
|
||||
import com.raytheon.uf.common.dataplugin.shef.tables.Colorvalue;
|
||||
import com.raytheon.uf.common.ohd.AppsDefaults;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.time.util.TimeUtil;
|
||||
import com.raytheon.uf.viz.core.IDisplayPane;
|
||||
import com.raytheon.uf.viz.core.IDisplayPaneContainer;
|
||||
import com.raytheon.uf.viz.core.drawables.ResourcePair;
|
||||
|
@ -76,6 +85,7 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
|
|||
* Jul 21, 2015 4500 rjpeter Use Number in blind cast.
|
||||
* Aug 05, 2015 4486 rjpeter Changed Timestamp to Date.
|
||||
* Mar 15, 2016 5483 randerso Fix GUI sizing issues
|
||||
* Mar 15, 2016 5483 bkowal Fix GUI sizing issues
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -84,9 +94,14 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
|
|||
*
|
||||
*/
|
||||
public class FlashFloodGuidanceDlg extends CaveSWTDialog {
|
||||
private final IUFStatusHandler statusHandler = UFStatus
|
||||
.getHandler(getClass());
|
||||
|
||||
/** Date format for the dates */
|
||||
private static SimpleDateFormat sdf = null;
|
||||
|
||||
private static SimpleDateFormat xmrgDateFormat;
|
||||
|
||||
/** List of RFC names */
|
||||
private static final String[] RFC_NAMES = { "ABRFC", "AKRFC", "CBRFC",
|
||||
"CNRFC", "LMRFC", "MARFC", "MBRFC", "NCRFC", "NERFC", "NWRFC",
|
||||
|
@ -96,10 +111,52 @@ public class FlashFloodGuidanceDlg extends CaveSWTDialog {
|
|||
private static final String[] DURATIONS = { "All", "01hr", "03hr", "06hr",
|
||||
"12hr", "24hr" };
|
||||
|
||||
private static final String FFG_AREA_WFO = "WFO";
|
||||
|
||||
private static final String FFG_AREA_RFC = "RFC";
|
||||
|
||||
private static final String[] FFG_AREAS = { FFG_AREA_WFO, FFG_AREA_RFC };
|
||||
|
||||
private static final int NUM_FFG_ROWS = 12;
|
||||
|
||||
private static final String ID_COLUMN_HEADER = "Id";
|
||||
|
||||
private static final String TYPE_COLUMN_HEADER = "Type";
|
||||
|
||||
private static final String FFG_NAME_REGEX = "^(.{3," + Admin.HSA_LENGTH
|
||||
+ "})(\\d{10})(\\d{2})\\.ffg$";
|
||||
|
||||
private static final Pattern FFG_NAME_PATTERN = Pattern
|
||||
.compile(FFG_NAME_REGEX);
|
||||
|
||||
private static final int FFG_WFO_GROUP = 1;
|
||||
|
||||
private static final int FFG_DATE_GROUP = 2;
|
||||
|
||||
private static final int FFG_DURATION_GROUP = 3;
|
||||
|
||||
private enum CONSTANT_FFG_COLUMNS {
|
||||
DUR_HR("DurHr"), TIMEZ("Time(Z)");
|
||||
|
||||
private final String text;
|
||||
|
||||
private CONSTANT_FFG_COLUMNS(String text) {
|
||||
this.text = text;
|
||||
}
|
||||
|
||||
public String getText() {
|
||||
return text;
|
||||
}
|
||||
};
|
||||
|
||||
private Table ffgTable;
|
||||
|
||||
/* Initialize the date format */
|
||||
static {
|
||||
sdf = new SimpleDateFormat("EEE MM-dd HH");
|
||||
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
|
||||
sdf.setTimeZone(TimeUtil.GMT_TIME_ZONE);
|
||||
xmrgDateFormat = new SimpleDateFormat("yyyyMMddHH");
|
||||
xmrgDateFormat.setTimeZone(TimeUtil.GMT_TIME_ZONE);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -122,21 +179,6 @@ public class FlashFloodGuidanceDlg extends CaveSWTDialog {
|
|||
*/
|
||||
private Button arealRdo;
|
||||
|
||||
/**
|
||||
* Font used for list controls.
|
||||
*/
|
||||
private Font font;
|
||||
|
||||
/**
|
||||
* FFG data list.
|
||||
*/
|
||||
private List dataList;
|
||||
|
||||
/**
|
||||
* ID Type label.
|
||||
*/
|
||||
private Label idTypeLbl;
|
||||
|
||||
/**
|
||||
* Select button.
|
||||
*/
|
||||
|
@ -218,7 +260,7 @@ public class FlashFloodGuidanceDlg extends CaveSWTDialog {
|
|||
private Button closeBtn;
|
||||
|
||||
/** Bundle variables */
|
||||
private final Map<String, String> parameters = new HashMap<String, String>();
|
||||
private final Map<String, String> parameters = new HashMap<>();
|
||||
|
||||
/**
|
||||
* The selected RFC.
|
||||
|
@ -240,16 +282,6 @@ public class FlashFloodGuidanceDlg extends CaveSWTDialog {
|
|||
*/
|
||||
private int duration = 3600;
|
||||
|
||||
/**
|
||||
* Holds the display string and insert time for later use.
|
||||
*/
|
||||
private final Map<String, Date> dataMap = new HashMap<String, Date>();
|
||||
|
||||
/**
|
||||
* Holds the display string and the xmrg File object.
|
||||
*/
|
||||
private final Map<String, File> fileMap = new HashMap<String, File>();
|
||||
|
||||
/**
|
||||
* The wait mouse pointer.
|
||||
*/
|
||||
|
@ -273,38 +305,16 @@ public class FlashFloodGuidanceDlg extends CaveSWTDialog {
|
|||
arrowCursor = parent.getDisplay().getSystemCursor(SWT.CURSOR_ARROW);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Layout constructShellLayout() {
|
||||
// Create the main layout for the shell.
|
||||
GridLayout mainLayout = new GridLayout(1, true);
|
||||
mainLayout.marginHeight = 1;
|
||||
mainLayout.marginWidth = 1;
|
||||
return mainLayout;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void disposed() {
|
||||
font.dispose();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initializeComponents(Shell shell) {
|
||||
font = new Font(shell.getDisplay(), "Monospace", 11, SWT.NORMAL);
|
||||
|
||||
createGridArealControls();
|
||||
createListLabels();
|
||||
createDataListControl();
|
||||
createFFGDataTable();
|
||||
createDataListControlButtons();
|
||||
createOptionsGroup();
|
||||
createColorLegend();
|
||||
createBottomCloseButton();
|
||||
|
||||
populateDataList();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void preOpened() {
|
||||
shell.setMinimumSize(shell.getSize());
|
||||
populateFFGDataTable();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -314,7 +324,6 @@ public class FlashFloodGuidanceDlg extends CaveSWTDialog {
|
|||
Group gridArealGroup = new Group(shell, SWT.NONE);
|
||||
gridArealGroup.setText("FFG Mode");
|
||||
RowLayout gridArealLayout = new RowLayout();
|
||||
gridArealLayout.spacing = 5;
|
||||
gridArealGroup.setLayout(gridArealLayout);
|
||||
gridArealGroup.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true,
|
||||
false));
|
||||
|
@ -325,15 +334,13 @@ public class FlashFloodGuidanceDlg extends CaveSWTDialog {
|
|||
griddedRdo.addSelectionListener(new SelectionAdapter() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent event) {
|
||||
idTypeLbl.setText("Id");
|
||||
|
||||
ffgArealOptGroup.setText(ffgOptionsStr);
|
||||
|
||||
stackLayout.topControl = ffgOptionsComp;
|
||||
stackComposite.layout();
|
||||
|
||||
// Clear the data list and reload
|
||||
populateDataList();
|
||||
// Clear the data table and reload
|
||||
populateFFGDataTable();
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -342,68 +349,98 @@ public class FlashFloodGuidanceDlg extends CaveSWTDialog {
|
|||
arealRdo.addSelectionListener(new SelectionAdapter() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent event) {
|
||||
idTypeLbl.setText("Type");
|
||||
|
||||
ffgArealOptGroup.setText(arealOptionsStr);
|
||||
|
||||
stackLayout.topControl = arealOptionsComp;
|
||||
stackComposite.layout();
|
||||
|
||||
// Clear the data list and reload
|
||||
populateDataList();
|
||||
// Clear the data table and reload
|
||||
populateFFGDataTable();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Create the labels for the data list.
|
||||
*/
|
||||
private void createListLabels() {
|
||||
Composite labelComp = new Composite(shell, SWT.NONE);
|
||||
RowLayout layout = new RowLayout();
|
||||
labelComp.setLayout(layout);
|
||||
|
||||
RowData rd = new RowData(40, SWT.DEFAULT);
|
||||
idTypeLbl = new Label(labelComp, SWT.RIGHT);
|
||||
idTypeLbl.setText("Id");
|
||||
idTypeLbl.setLayoutData(rd);
|
||||
|
||||
rd = new RowData(65, SWT.DEFAULT);
|
||||
Label durHrLbl = new Label(labelComp, SWT.RIGHT);
|
||||
durHrLbl.setText("DurHr");
|
||||
durHrLbl.setLayoutData(rd);
|
||||
|
||||
rd = new RowData(75, SWT.DEFAULT);
|
||||
Label timeLbl = new Label(labelComp, SWT.RIGHT);
|
||||
timeLbl.setText(" Time(Z)");
|
||||
timeLbl.setLayoutData(rd);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create the data list control.
|
||||
*/
|
||||
private void createDataListControl() {
|
||||
GridData gd = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
|
||||
gd.widthHint = 255;
|
||||
gd.heightHint = 250;
|
||||
dataList = new List(shell, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL);
|
||||
dataList.setLayoutData(gd);
|
||||
|
||||
dataList.setFont(font);
|
||||
dataList.addSelectionListener(new SelectionAdapter() {
|
||||
private void createFFGDataTable() {
|
||||
Composite tableComp = new Composite(shell, SWT.NONE);
|
||||
GridLayout gl = new GridLayout(1, false);
|
||||
GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
|
||||
tableComp.setLayout(gl);
|
||||
tableComp.setLayoutData(gd);
|
||||
|
||||
ffgTable = new Table(tableComp, SWT.BORDER | SWT.V_SCROLL | SWT.SINGLE);
|
||||
ffgTable.setHeaderVisible(true);
|
||||
ffgTable.setLinesVisible(true);
|
||||
gd = new GridData(SWT.FILL, SWT.FILL, true, true);
|
||||
gd.heightHint = ffgTable.getItemHeight() * NUM_FFG_ROWS;
|
||||
ffgTable.setLayoutData(gd);
|
||||
ffgTable.addMouseListener(new MouseAdapter() {
|
||||
@Override
|
||||
public void widgetDefaultSelected(SelectionEvent e) {
|
||||
// Display data on double click
|
||||
public void mouseDoubleClick(MouseEvent e) {
|
||||
// Clear the previous data
|
||||
clearData();
|
||||
// Display the new data
|
||||
displayData();
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
private void populateFFGDataTable() {
|
||||
/*
|
||||
* Clear any previous data.
|
||||
*/
|
||||
if (ffgTable.getItemCount() > 0) {
|
||||
ffgTable.removeAll();
|
||||
}
|
||||
if (ffgTable.getColumnCount() > 0) {
|
||||
for (TableColumn tc : ffgTable.getColumns()) {
|
||||
tc.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Add the table column headers.
|
||||
*/
|
||||
final String firstColumnTxt = (griddedRdo.getSelection()) ? ID_COLUMN_HEADER
|
||||
: TYPE_COLUMN_HEADER;
|
||||
GC gc = new GC(ffgTable);
|
||||
gc.setFont(ffgTable.getFont());
|
||||
TableColumn tc = new TableColumn(ffgTable, SWT.CENTER);
|
||||
tc.setText(firstColumnTxt);
|
||||
tc.pack();
|
||||
for (CONSTANT_FFG_COLUMNS ffgColumn : CONSTANT_FFG_COLUMNS.values()) {
|
||||
tc = new TableColumn(ffgTable, SWT.CENTER);
|
||||
tc.setText(ffgColumn.getText());
|
||||
tc.pack();
|
||||
}
|
||||
|
||||
gc.dispose();
|
||||
|
||||
/*
|
||||
* Populate the table with data.
|
||||
*/
|
||||
if (griddedRdo.getSelection()) {
|
||||
readGriddedFfgProduct();
|
||||
} else {
|
||||
readArealFfgProduct();
|
||||
}
|
||||
}
|
||||
|
||||
private void addTableRows(List<FFGGuidanceData> rowDataList) {
|
||||
Collections.sort(rowDataList, new FFGGuidanceDataComparator());
|
||||
|
||||
for (FFGGuidanceData rowData : rowDataList) {
|
||||
TableItem ti = new TableItem(ffgTable, SWT.NONE);
|
||||
ti.setData(rowData);
|
||||
final String[] tableItemValues = new String[] {
|
||||
rowData.getIdentifier(), rowData.getFormattedDuration(),
|
||||
rowData.getFormattedDateTime() };
|
||||
ti.setText(tableItemValues);
|
||||
}
|
||||
for (TableColumn tc : ffgTable.getColumns()) {
|
||||
tc.pack();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create the buttons that manipulate the data list control.
|
||||
*/
|
||||
|
@ -415,18 +452,20 @@ public class FlashFloodGuidanceDlg extends CaveSWTDialog {
|
|||
centeredComp.setLayoutData(gd);
|
||||
|
||||
Composite dataControlComp = new Composite(centeredComp, SWT.NONE);
|
||||
RowLayout layout = new RowLayout();
|
||||
layout.spacing = 20;
|
||||
dataControlComp.setLayout(layout);
|
||||
gl = new GridLayout(2, true);
|
||||
dataControlComp.setLayout(gl);
|
||||
|
||||
RowData rd = new RowData(80, SWT.DEFAULT);
|
||||
final int minimumButtonWidth = dataControlComp.getDisplay().getDPI().x;
|
||||
|
||||
gd = new GridData(SWT.DEFAULT, SWT.DEFAULT, true, false);
|
||||
gd.minimumWidth = minimumButtonWidth;
|
||||
selectBtn = new Button(dataControlComp, SWT.PUSH);
|
||||
selectBtn.setText("Select");
|
||||
selectBtn.setLayoutData(rd);
|
||||
selectBtn.setLayoutData(gd);
|
||||
selectBtn.addSelectionListener(new SelectionAdapter() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent event) {
|
||||
if (dataList.getSelectionIndex() < 0) {
|
||||
if (ffgTable.getSelectionCount() <= 0) {
|
||||
MessageBox mb = new MessageBox(getParent(),
|
||||
SWT.ICON_WARNING | SWT.OK);
|
||||
mb.setText("Selection Needed");
|
||||
|
@ -441,18 +480,15 @@ public class FlashFloodGuidanceDlg extends CaveSWTDialog {
|
|||
}
|
||||
});
|
||||
|
||||
rd = new RowData(80, SWT.DEFAULT);
|
||||
gd = new GridData(SWT.DEFAULT, SWT.DEFAULT, true, false);
|
||||
gd.minimumWidth = minimumButtonWidth;
|
||||
clearBtn = new Button(dataControlComp, SWT.PUSH);
|
||||
clearBtn.setText("Clear");
|
||||
clearBtn.setLayoutData(rd);
|
||||
clearBtn.setLayoutData(gd);
|
||||
clearBtn.addSelectionListener(new SelectionAdapter() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent event) {
|
||||
clearData();
|
||||
// if ( isThereFfgDataToDraw ( ) != 0 )
|
||||
// {
|
||||
// turnOffFfgData ( ) ;
|
||||
// }
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -492,22 +528,21 @@ public class FlashFloodGuidanceDlg extends CaveSWTDialog {
|
|||
Label ffgAreaLbl = new Label(ffgOptionsComp, SWT.RIGHT);
|
||||
ffgAreaLbl.setText("FFG Area:");
|
||||
|
||||
GridData gd = new GridData(100, SWT.DEFAULT);
|
||||
GridData gd = new GridData(SWT.DEFAULT, SWT.DEFAULT);
|
||||
ffgAreaCbo = new Combo(ffgOptionsComp, SWT.DROP_DOWN | SWT.READ_ONLY);
|
||||
ffgAreaCbo.add("WFO");
|
||||
ffgAreaCbo.add("RFC");
|
||||
ffgAreaCbo.setItems(FFG_AREAS);
|
||||
ffgAreaCbo.select(0);
|
||||
ffgAreaCbo.setLayoutData(gd);
|
||||
ffgAreaCbo.addSelectionListener(new SelectionAdapter() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent event) {
|
||||
if (ffgAreaCbo.getText().compareTo("WFO") == 0) {
|
||||
if (FFG_AREA_WFO.equals(ffgAreaCbo.getText())) {
|
||||
ffgIdCbo.setEnabled(false);
|
||||
} else {
|
||||
ffgIdCbo.setEnabled(true);
|
||||
}
|
||||
|
||||
populateDataList();
|
||||
populateFFGDataTable();
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -518,7 +553,7 @@ public class FlashFloodGuidanceDlg extends CaveSWTDialog {
|
|||
// NOTE: The FFG ID combo box data may be dynamic
|
||||
// so the items in the list may change.
|
||||
// ------------------------------------------------
|
||||
gd = new GridData(100, SWT.DEFAULT);
|
||||
gd = new GridData(SWT.DEFAULT, SWT.DEFAULT);
|
||||
ffgIdCbo = new Combo(ffgOptionsComp, SWT.DROP_DOWN | SWT.READ_ONLY);
|
||||
ffgIdCbo.add("All");
|
||||
for (String s : RFC_NAMES) {
|
||||
|
@ -532,7 +567,7 @@ public class FlashFloodGuidanceDlg extends CaveSWTDialog {
|
|||
@Override
|
||||
public void widgetSelected(SelectionEvent e) {
|
||||
selectedRFC = ffgIdCbo.getItem(ffgIdCbo.getSelectionIndex());
|
||||
populateDataList();
|
||||
populateFFGDataTable();
|
||||
}
|
||||
|
||||
});
|
||||
|
@ -540,7 +575,7 @@ public class FlashFloodGuidanceDlg extends CaveSWTDialog {
|
|||
Label ffgDurLbl = new Label(ffgOptionsComp, SWT.RIGHT);
|
||||
ffgDurLbl.setText("Duration:");
|
||||
|
||||
gd = new GridData(100, SWT.DEFAULT);
|
||||
gd = new GridData(SWT.DEFAULT, SWT.DEFAULT);
|
||||
ffgDurCbo = new Combo(ffgOptionsComp, SWT.DROP_DOWN | SWT.READ_ONLY);
|
||||
for (String s : DURATIONS) {
|
||||
ffgDurCbo.add(s);
|
||||
|
@ -548,19 +583,18 @@ public class FlashFloodGuidanceDlg extends CaveSWTDialog {
|
|||
ffgDurCbo.select(0);
|
||||
ffgDurCbo.setLayoutData(gd);
|
||||
ffgDurCbo.addSelectionListener(new SelectionAdapter() {
|
||||
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent e) {
|
||||
int index = ffgDurCbo.getSelectionIndex();
|
||||
selectedDur = DURATIONS[index];
|
||||
populateDataList();
|
||||
populateFFGDataTable();
|
||||
}
|
||||
});
|
||||
|
||||
Label ffgDisplayLbl = new Label(ffgOptionsComp, SWT.RIGHT);
|
||||
ffgDisplayLbl.setText("Display As:");
|
||||
|
||||
gd = new GridData(100, SWT.DEFAULT);
|
||||
gd = new GridData(SWT.DEFAULT, SWT.DEFAULT);
|
||||
ffgDisplayAsCbo = new Combo(ffgOptionsComp, SWT.DROP_DOWN
|
||||
| SWT.READ_ONLY);
|
||||
ffgDisplayAsCbo.add("Grid");
|
||||
|
@ -594,7 +628,7 @@ public class FlashFloodGuidanceDlg extends CaveSWTDialog {
|
|||
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent e) {
|
||||
populateDataList();
|
||||
populateFFGDataTable();
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -613,12 +647,11 @@ public class FlashFloodGuidanceDlg extends CaveSWTDialog {
|
|||
gd.horizontalSpan = 2;
|
||||
arealDurCbo.setLayoutData(gd);
|
||||
arealDurCbo.addSelectionListener(new SelectionAdapter() {
|
||||
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent e) {
|
||||
int index = arealDurCbo.getSelectionIndex();
|
||||
selectedDur = DURATIONS[index];
|
||||
populateDataList();
|
||||
populateFFGDataTable();
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -653,7 +686,6 @@ public class FlashFloodGuidanceDlg extends CaveSWTDialog {
|
|||
*/
|
||||
private void createColorLegend() {
|
||||
String user_id = System.getProperty("user.name");
|
||||
// String app_name = "hydroview";
|
||||
|
||||
java.util.List<Colorvalue> colorSet = HydroDisplayManager.getInstance()
|
||||
.getFFGColorMap(user_id, "FFG", duration);
|
||||
|
@ -697,7 +729,8 @@ public class FlashFloodGuidanceDlg extends CaveSWTDialog {
|
|||
GridData gd = new GridData(SWT.CENTER, SWT.DEFAULT, true, false);
|
||||
centeredComp.setLayoutData(gd);
|
||||
|
||||
gd = new GridData(70, SWT.DEFAULT);
|
||||
gd = new GridData(SWT.DEFAULT, SWT.DEFAULT, true, false);
|
||||
gd.minimumWidth = centeredComp.getDisplay().getDPI().x;
|
||||
closeBtn = new Button(centeredComp, SWT.NONE);
|
||||
closeBtn.setText("Close");
|
||||
closeBtn.setLayoutData(gd);
|
||||
|
@ -709,31 +742,17 @@ public class FlashFloodGuidanceDlg extends CaveSWTDialog {
|
|||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Populate the data list.
|
||||
*/
|
||||
private void populateDataList() {
|
||||
dataList.removeAll();
|
||||
|
||||
if (griddedRdo.getSelection()) {
|
||||
readGriddedFfgProduct();
|
||||
} else { // must be areal
|
||||
readArealFfgProduct();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Gridded FFG products for the data list.
|
||||
*/
|
||||
private void readGriddedFfgProduct() {
|
||||
FlashFloodGuidanceDataManager dman = FlashFloodGuidanceDataManager
|
||||
.getInstance();
|
||||
java.util.List<String> list = new ArrayList<String>();
|
||||
Map<String, String> sortedMap = new HashMap<String, String>();
|
||||
dataMap.clear();
|
||||
List<FFGGuidanceData> guidanceDataList = new LinkedList<>();
|
||||
|
||||
/* Check the FFG mode. */
|
||||
if (ffgAreaCbo.getItem(ffgAreaCbo.getSelectionIndex()).equals("RFC")) {
|
||||
if (FFG_AREA_RFC.equals(ffgAreaCbo.getItem(ffgAreaCbo
|
||||
.getSelectionIndex()))) {
|
||||
java.util.List<Object[]> rs = dman.getGriddedDataList();
|
||||
|
||||
if ((rs != null) && (rs.size() > 0)) {
|
||||
|
@ -787,38 +806,9 @@ public class FlashFloodGuidanceDlg extends CaveSWTDialog {
|
|||
}
|
||||
}
|
||||
|
||||
String line = String.format("%5s %2s %s", id, durHr,
|
||||
dateStr);
|
||||
Calendar cal = Calendar.getInstance(TimeZone
|
||||
.getTimeZone("GMT"));
|
||||
cal.setTime(date);
|
||||
int hr = cal.get(Calendar.HOUR_OF_DAY);
|
||||
String hrStr = String.valueOf(hr);
|
||||
if (hr < 10) {
|
||||
hrStr = "0" + hr;
|
||||
guidanceDataList.add(new FFGGuidanceData(id, Integer
|
||||
.parseInt(durHr), durHr, date, dateStr));
|
||||
}
|
||||
String sortLine = id + " " + durHr + " "
|
||||
+ cal.get(Calendar.YEAR) + cal.get(Calendar.MONTH)
|
||||
+ cal.get(Calendar.DAY_OF_MONTH) + hrStr;
|
||||
// + cal.get(Calendar.HOUR_OF_DAY);
|
||||
|
||||
// list.add(line);
|
||||
sortedMap.put(sortLine, line);
|
||||
dataMap.put(line, date);
|
||||
}
|
||||
}
|
||||
|
||||
// Sort the data, first by id asc, then duration asc
|
||||
java.util.List<String> sortList = new ArrayList<String>(
|
||||
sortedMap.keySet());
|
||||
String[] data = sortList.toArray(new String[sortList.size()]);
|
||||
|
||||
java.util.Arrays.sort(data);
|
||||
|
||||
String[] sortedData = sort(data);
|
||||
|
||||
for (String s : sortedData) {
|
||||
dataList.add(sortedMap.get(s));
|
||||
}
|
||||
} else {
|
||||
// WFO Grided data, read xmrg directory
|
||||
|
@ -831,10 +821,10 @@ public class FlashFloodGuidanceDlg extends CaveSWTDialog {
|
|||
String ffgDirPath = AppsDefaults.getInstance()
|
||||
.getToken(ffgDirToken);
|
||||
if (ffgDirPath == null) {
|
||||
// TODO error handling
|
||||
System.err
|
||||
.println("Error getting WFO FFG directory from token "
|
||||
statusHandler
|
||||
.error("Error getting WFO FFG directory from token "
|
||||
+ ffgDirToken);
|
||||
return;
|
||||
}
|
||||
|
||||
File ffgDir = new File(ffgDirPath);
|
||||
|
@ -846,115 +836,62 @@ public class FlashFloodGuidanceDlg extends CaveSWTDialog {
|
|||
* Check to make sure that this is a FFG file. This is done
|
||||
* by checking the extension on the file.
|
||||
*/
|
||||
if (xmrg.getName().endsWith(".ffg")) {
|
||||
/* Parse the filename for the WFO identifier here. */
|
||||
String fileWfo = xmrg.getName().substring(0, 3);
|
||||
int index = xmrg.getName().indexOf("20");
|
||||
/* Parse the filename for duration and time stamp here. */
|
||||
String year = xmrg.getName()
|
||||
.substring(index, index + 4);
|
||||
String month = xmrg.getName().substring(index + 4,
|
||||
index + 6);
|
||||
String day = xmrg.getName().substring(index + 6,
|
||||
index + 8);
|
||||
String hour = xmrg.getName().substring(index + 8,
|
||||
index + 10);
|
||||
String durString = xmrg.getName().substring(index + 10,
|
||||
index + 12);
|
||||
// String year = xmrg.getName().substring(3, 7);
|
||||
// String month = xmrg.getName().substring(7, 9);
|
||||
// String day = xmrg.getName().substring(9, 11);
|
||||
// String hour = xmrg.getName().substring(11, 13);
|
||||
// String durString = xmrg.getName().substring(13, 15);
|
||||
|
||||
Calendar cal = Calendar.getInstance(TimeZone
|
||||
.getTimeZone("GMT"));
|
||||
cal.set(Calendar.YEAR, Integer.parseInt(year));
|
||||
cal.set(Calendar.MONTH, Integer.parseInt(month) - 1);
|
||||
cal.set(Calendar.DATE, Integer.parseInt(day));
|
||||
cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(hour));
|
||||
cal.set(Calendar.MINUTE, 0);
|
||||
cal.set(Calendar.SECOND, 0);
|
||||
cal.set(Calendar.MILLISECOND, 0);
|
||||
|
||||
// Dur is FFG03, FFG06, etc
|
||||
// selectedDur is 1hr, 3hr, etc
|
||||
if ((selectedDur != null)
|
||||
&& !selectedDur.equalsIgnoreCase("All")) {
|
||||
if (!durString.equalsIgnoreCase(selectedDur
|
||||
.substring(0, selectedDur.indexOf("h")))) {
|
||||
final String fileName = xmrg.getName();
|
||||
final Matcher matcher = FFG_NAME_PATTERN.matcher(fileName);
|
||||
if (!matcher.matches()) {
|
||||
statusHandler.warn("Discovered unrecognized file: "
|
||||
+ xmrg.toString()
|
||||
+ " in the WFO FFG directory: "
|
||||
+ ffgDirPath.toString() + ". Skipping file.");
|
||||
continue;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
String dateStr = sdf.format(cal.getTime());
|
||||
String line = String.format("%5s %2s %s",
|
||||
fileWfo, durString, dateStr);
|
||||
String sortLine = fileWfo + " " + durString + " "
|
||||
+ year + month + day + hour;
|
||||
sortedMap.put(sortLine, line);
|
||||
list.add(line);
|
||||
dataMap.put(line, cal.getTime());
|
||||
fileMap.put(line, xmrg);
|
||||
}
|
||||
}
|
||||
|
||||
// Sort the data, first by id asc, then duration asc, date desc
|
||||
java.util.List<String> sortList = new ArrayList<String>(
|
||||
sortedMap.keySet());
|
||||
String[] data = sortList.toArray(new String[sortList.size()]);
|
||||
|
||||
java.util.Arrays.sort(data);
|
||||
String[] sortedData = sort(data);
|
||||
for (String s : sortedData) {
|
||||
dataList.add(sortedMap.get(s));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sort the list of items in reverse by time.
|
||||
*
|
||||
* @param strArr
|
||||
* The String[] sorted with time asc
|
||||
* @return The String[] sorted with time desc
|
||||
String fileWfo = matcher.group(FFG_WFO_GROUP);
|
||||
String xmrgDateString = matcher.group(FFG_DATE_GROUP);
|
||||
/*
|
||||
* Verify that a valid date/time can be parsed from the xmrg
|
||||
* date/time String.
|
||||
*/
|
||||
private String[] sort(String[] strArr) {
|
||||
java.util.List<String> strList = new ArrayList<String>();
|
||||
java.util.List<String> holder = new ArrayList<String>();
|
||||
String prevDur = "";
|
||||
String prevId = "";
|
||||
|
||||
for (String s : strArr) {
|
||||
String[] parts = s.split("\\s+", 3);
|
||||
|
||||
if ((prevDur.equals(parts[1]) == false)
|
||||
|| (prevId.equals(parts[0]) == false)) {
|
||||
for (int i = holder.size() - 1; i >= 0; i--) {
|
||||
strList.add(holder.get(i));
|
||||
Date xmrgDate = null;
|
||||
try {
|
||||
xmrgDate = xmrgDateFormat.parse(xmrgDateString);
|
||||
} catch (ParseException e) {
|
||||
statusHandler.error(
|
||||
"Failed to parse xmrg date/time: "
|
||||
+ xmrgDateString + " for file: "
|
||||
+ xmrg.toString() + ". Skipping file.",
|
||||
e);
|
||||
continue;
|
||||
}
|
||||
String durationString = matcher.group(FFG_DURATION_GROUP);
|
||||
/*
|
||||
* Verify that the duration String is numeric.
|
||||
*/
|
||||
int duration = 0;
|
||||
try {
|
||||
duration = Integer.parseInt(durationString);
|
||||
} catch (NumberFormatException e) {
|
||||
statusHandler.error(
|
||||
"Failed to parse xmrg duration: "
|
||||
+ durationString + " for file: "
|
||||
+ xmrg.toString() + ". Skipping file.",
|
||||
e);
|
||||
continue;
|
||||
}
|
||||
|
||||
String dateStr = sdf.format(xmrgDate);
|
||||
FFGGuidanceData data = new FFGGuidanceData(fileWfo,
|
||||
duration, durationString, xmrgDate, dateStr);
|
||||
data.setXmrgFile(xmrg);
|
||||
guidanceDataList.add(data);
|
||||
}
|
||||
holder.clear();
|
||||
prevDur = parts[1];
|
||||
prevId = parts[0];
|
||||
holder.add(s);
|
||||
} else {
|
||||
holder.add(s);
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = holder.size() - 1; i >= 0; i--) {
|
||||
strList.add(holder.get(i));
|
||||
}
|
||||
|
||||
return strList.toArray(new String[strList.size()]);
|
||||
// return strArr;
|
||||
addTableRows(guidanceDataList);
|
||||
}
|
||||
|
||||
private void readArealFfgProduct() {
|
||||
// Clear the map for areal data
|
||||
dataMap.clear();
|
||||
ResolutionLevel res = null;
|
||||
String selectedItem = arealTypeCbo.getItem(arealTypeCbo
|
||||
.getSelectionIndex());
|
||||
|
@ -969,7 +906,7 @@ public class FlashFloodGuidanceDlg extends CaveSWTDialog {
|
|||
res = ResolutionLevel.ALL;
|
||||
}
|
||||
|
||||
Map<String, String> sortedMap = new TreeMap<String, String>();
|
||||
List<FFGGuidanceData> guidanceDataList = new LinkedList<>();
|
||||
if (res == ResolutionLevel.ALL) {
|
||||
for (ResolutionLevel level : ResolutionLevel.values()) {
|
||||
if (level.getResolution().equals("All")
|
||||
|
@ -977,29 +914,13 @@ public class FlashFloodGuidanceDlg extends CaveSWTDialog {
|
|||
continue; // Skip "All" and "Grid"
|
||||
}
|
||||
|
||||
TreeMap<String, String> tmpMap = bldFfgList(level);
|
||||
|
||||
Iterator<String> iter = tmpMap.keySet().iterator();
|
||||
while (iter.hasNext()) {
|
||||
String key = iter.next();
|
||||
sortedMap.put(key, tmpMap.get(key));
|
||||
}
|
||||
guidanceDataList.addAll(bldFfgList(level));
|
||||
}
|
||||
} else {
|
||||
sortedMap = bldFfgList(res);
|
||||
guidanceDataList = bldFfgList(res);
|
||||
}
|
||||
|
||||
Iterator<String> iter = sortedMap.keySet().iterator();
|
||||
java.util.List<String> strList = new ArrayList<String>();
|
||||
while (iter.hasNext()) {
|
||||
strList.add(iter.next());
|
||||
}
|
||||
|
||||
String[] sa = sort(strList.toArray(new String[strList.size()]));
|
||||
|
||||
for (String s : sa) {
|
||||
dataList.add(sortedMap.get(s));
|
||||
}
|
||||
addTableRows(guidanceDataList);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1009,8 +930,8 @@ public class FlashFloodGuidanceDlg extends CaveSWTDialog {
|
|||
*
|
||||
* @param level
|
||||
*/
|
||||
private TreeMap<String, String> bldFfgList(ResolutionLevel level) {
|
||||
TreeMap<String, String> map = new TreeMap<String, String>();
|
||||
private List<FFGGuidanceData> bldFfgList(ResolutionLevel level) {
|
||||
List<FFGGuidanceData> guidanceDataList = new LinkedList<>();
|
||||
|
||||
java.util.List<Object[]> rs = FlashFloodGuidanceDataManager
|
||||
.getInstance().getContingencyValue(level.getResolution());
|
||||
|
@ -1023,10 +944,8 @@ public class FlashFloodGuidanceDlg extends CaveSWTDialog {
|
|||
// Dur is FFG03, FFG06, etc
|
||||
// selectedDur is 1hr, 3hr, etc
|
||||
if ((selectedDur != null) && !selectedDur.equalsIgnoreCase("All")) {
|
||||
String durCheck = String.valueOf(dur);
|
||||
if (dur < 10) {
|
||||
durCheck = "0" + dur;
|
||||
}
|
||||
String durCheck = StringUtils.leftPad(String.valueOf(dur), 2,
|
||||
"0");
|
||||
if (!String.valueOf(durCheck).equalsIgnoreCase(
|
||||
selectedDur.substring(0, selectedDur.indexOf("h")))
|
||||
&& !String.valueOf(durCheck).equals(
|
||||
|
@ -1038,25 +957,14 @@ public class FlashFloodGuidanceDlg extends CaveSWTDialog {
|
|||
}
|
||||
}
|
||||
String dateStr = sdf.format(validTime);
|
||||
|
||||
String id = level.getResolution();
|
||||
String durStr = String.valueOf(dur);
|
||||
if (dur < 10) {
|
||||
durStr = "0" + dur;
|
||||
}
|
||||
String line = String
|
||||
.format("%-6s %2s %s", id, durStr, dateStr);
|
||||
String durStr = StringUtils.leftPad(String.valueOf(dur), 2, "0");
|
||||
|
||||
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
|
||||
cal.setTime(validTime);
|
||||
String sortLine = id + " " + dur + " " + cal.get(Calendar.YEAR)
|
||||
+ cal.get(Calendar.MONTH) + cal.get(Calendar.DAY_OF_MONTH)
|
||||
+ cal.get(Calendar.HOUR_OF_DAY);
|
||||
map.put(sortLine, line);
|
||||
dataMap.put(line, validTime);
|
||||
guidanceDataList.add(new FFGGuidanceData(id, dur, durStr,
|
||||
validTime, dateStr));
|
||||
}
|
||||
|
||||
return map;
|
||||
return guidanceDataList;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1068,17 +976,13 @@ public class FlashFloodGuidanceDlg extends CaveSWTDialog {
|
|||
|
||||
shell.setCursor(waitCursor);
|
||||
|
||||
FFGGuidanceData selectedRowData = (FFGGuidanceData) ffgTable
|
||||
.getSelection()[0].getData();
|
||||
|
||||
/* Get the selection from the list and break it up */
|
||||
String s = dataList.getItem(dataList.getSelectionIndex());
|
||||
String key = dataList.getItem(dataList.getSelectionIndex());
|
||||
s = s.replaceAll("\\s+", " ").trim();
|
||||
String[] parts = s.split(" ");
|
||||
String site = parts[0];
|
||||
String durationStr = parts[1];
|
||||
String day = parts[2];
|
||||
String date = parts[3];
|
||||
String hour = parts[4];
|
||||
duration = Integer.parseInt(durationStr)
|
||||
String site = selectedRowData.getIdentifier();
|
||||
String durationStr = selectedRowData.getFormattedDuration();
|
||||
duration = selectedRowData.getDuration()
|
||||
* FFGConstants.SECONDS_PER_HOUR;
|
||||
|
||||
String paramAbr = "FFG" + durationStr + "24hr";
|
||||
|
@ -1104,39 +1008,42 @@ public class FlashFloodGuidanceDlg extends CaveSWTDialog {
|
|||
if (ffgDisplayAsCbo.getItem(ffgDisplayAsCbo.getSelectionIndex())
|
||||
.equalsIgnoreCase("GRID")) {
|
||||
// Display the grid
|
||||
getParameters();
|
||||
getParameters(selectedRowData);
|
||||
|
||||
if (rfcSelected) {
|
||||
HydroDisplayManager.getInstance().displayGriddedFFG(
|
||||
dataMap.get(key), duration, paramAbr, rfc, res);
|
||||
selectedRowData.getDateTime(), duration, paramAbr,
|
||||
rfc, res);
|
||||
} else {
|
||||
HydroDisplayManager.getInstance().displayGriddedFFG(
|
||||
fileMap.get(key), duration, res);
|
||||
selectedRowData.getXmrgFile(), duration, res);
|
||||
}
|
||||
} else {
|
||||
/* Display the areal basin */
|
||||
if (rfcSelected) {
|
||||
HydroDisplayManager.getInstance()
|
||||
.displayRfcGriddedFFGBasin(dataMap.get(key),
|
||||
duration, paramAbr, rfc, res);
|
||||
.displayRfcGriddedFFGBasin(
|
||||
selectedRowData.getDateTime(), duration,
|
||||
paramAbr, rfc, res);
|
||||
} else {
|
||||
HydroDisplayManager.getInstance().displayGriddedFFGBasin(
|
||||
fileMap.get(key), duration, res, dataMap.get(key));
|
||||
selectedRowData.getXmrgFile(), duration, res,
|
||||
selectedRowData.getDateTime());
|
||||
}
|
||||
}
|
||||
} else {
|
||||
/* Areal Radio selected */
|
||||
java.util.List<ArealData> arealList = buildFfgArea(site,
|
||||
dataMap.get(key));
|
||||
selectedRowData.getDateTime());
|
||||
|
||||
HydroDisplayManager.getInstance().displayArealFfg(arealList,
|
||||
duration, site, dataMap.get(key), valuesChk.getSelection(),
|
||||
idsChk.getSelection());
|
||||
duration, site, selectedRowData.getDateTime(),
|
||||
valuesChk.getSelection(), idsChk.getSelection());
|
||||
}
|
||||
// Create the legend strings
|
||||
// Build the string in the legend
|
||||
String line = site + " " + durationStr + " hours " + day + " " + date
|
||||
+ " " + hour + ":00";
|
||||
String line = site + " " + durationStr + " hours "
|
||||
+ selectedRowData.getFormattedDateTime() + ":00";
|
||||
colorLegend.setDisplayText("FFG Grid", line);
|
||||
|
||||
shell.setCursor(arrowCursor);
|
||||
|
@ -1145,29 +1052,23 @@ public class FlashFloodGuidanceDlg extends CaveSWTDialog {
|
|||
/**
|
||||
* Get the parameters for the bundle
|
||||
*/
|
||||
private void getParameters() {
|
||||
String data = dataList.getItem(dataList.getSelectionIndex());
|
||||
String key = dataList.getItem(dataList.getSelectionIndex());
|
||||
|
||||
private void getParameters(FFGGuidanceData selectedRowData) {
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
|
||||
sdf.setTimeZone(TimeUtil.GMT_TIME_ZONE);
|
||||
|
||||
data = data.replaceAll("\\s+", " ");
|
||||
data = data.trim();
|
||||
String[] parts = data.split(" ");
|
||||
String modelname = null;
|
||||
|
||||
String param = "FFG" + parts[1] + "24hr";
|
||||
String param = "FFG" + selectedRowData.getFormattedDuration() + "24hr";
|
||||
|
||||
// Lookup the name
|
||||
String s = FlashFloodGuidanceDataManager.getInstance().rfcSiteLookup(
|
||||
parts[0]);
|
||||
selectedRowData.getIdentifier());
|
||||
if (s != null) {
|
||||
modelname = "FFG-" + s;
|
||||
}
|
||||
parameters.put("timespan", param);
|
||||
parameters.put("model", modelname);
|
||||
parameters.put("reftime", sdf.format(dataMap.get(key)));
|
||||
parameters.put("reftime", sdf.format(selectedRowData.getDateTime()));
|
||||
}
|
||||
|
||||
private java.util.List<ArealData> buildFfgArea(String boundaryType,
|
||||
|
|
|
@ -25,14 +25,12 @@ import java.util.Arrays;
|
|||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.events.SelectionAdapter;
|
||||
import org.eclipse.swt.events.SelectionEvent;
|
||||
import org.eclipse.swt.graphics.Font;
|
||||
import org.eclipse.swt.layout.GridData;
|
||||
import org.eclipse.swt.layout.GridLayout;
|
||||
import org.eclipse.swt.widgets.Button;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
import org.eclipse.swt.widgets.DirectoryDialog;
|
||||
import org.eclipse.swt.widgets.Group;
|
||||
import org.eclipse.swt.widgets.Layout;
|
||||
import org.eclipse.swt.widgets.List;
|
||||
import org.eclipse.swt.widgets.MessageBox;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
|
@ -51,6 +49,7 @@ import com.raytheon.viz.hydro.CaveHydroSWTDialog;
|
|||
* ------------ ---------- ----------- --------------------------
|
||||
* Mar 28, 2011 mpduff Initial creation
|
||||
* Feb 06, 2013 1578 rferrel Code cleanup for non-blocking dialog.
|
||||
* May 09, 2016 5483 bkowal Fix GUI sizing issues.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -60,11 +59,6 @@ import com.raytheon.viz.hydro.CaveHydroSWTDialog;
|
|||
|
||||
public class SendConfigDlg extends CaveHydroSWTDialog {
|
||||
|
||||
/**
|
||||
* Font used for the list controls.
|
||||
*/
|
||||
private Font font;
|
||||
|
||||
/** Manager for handling the shef xml data. */
|
||||
private ShefIssueMgr shefIssueMgr;
|
||||
|
||||
|
@ -96,19 +90,10 @@ public class SendConfigDlg extends CaveHydroSWTDialog {
|
|||
shefIssueMgr = ShefIssueMgr.getInstance();
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see
|
||||
* com.raytheon.viz.ui.dialogs.CaveSWTDialogBase#initializeComponents(org
|
||||
* .eclipse.swt.widgets.Shell)
|
||||
*/
|
||||
@Override
|
||||
protected void initializeComponents(Shell shell) {
|
||||
setReturnValue(false);
|
||||
|
||||
font = new Font(shell.getDisplay(), "Monospace", 11, SWT.NORMAL);
|
||||
|
||||
// Initialize all of the controls and layouts
|
||||
initializeComponents();
|
||||
}
|
||||
|
@ -122,21 +107,6 @@ public class SendConfigDlg extends CaveHydroSWTDialog {
|
|||
createBottomButtons();
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see com.raytheon.viz.ui.dialogs.CaveSWTDialogBase#constructShellLayout()
|
||||
*/
|
||||
@Override
|
||||
protected Layout constructShellLayout() {
|
||||
// Create the main layout for the shell.
|
||||
GridLayout mainLayout = new GridLayout(1, true);
|
||||
mainLayout.verticalSpacing = 3;
|
||||
mainLayout.marginHeight = 1;
|
||||
mainLayout.marginWidth = 1;
|
||||
return mainLayout;
|
||||
}
|
||||
|
||||
private void createDistributionGroup() {
|
||||
String defSelection = AppsDefaults.getInstance().getToken(
|
||||
"timeseries_dist_shef", "OFF");
|
||||
|
@ -155,12 +125,13 @@ public class SendConfigDlg extends CaveHydroSWTDialog {
|
|||
GridLayout gl = new GridLayout(1, false);
|
||||
distComp.setLayout(gl);
|
||||
|
||||
gd = new GridData(150, SWT.DEFAULT);
|
||||
gd = new GridData(SWT.DEFAULT, SWT.DEFAULT, true, false);
|
||||
distChk = new Button(distComp, SWT.CHECK);
|
||||
distChk.setText("Distribute Product");
|
||||
distChk.setLayoutData(gd);
|
||||
distChk.setSelection(selected);
|
||||
|
||||
gd = new GridData(SWT.DEFAULT, SWT.DEFAULT, true, false);
|
||||
directoryChk = new Button(distComp, SWT.CHECK);
|
||||
directoryChk.setText("Internal Directory");
|
||||
directoryChk.setLayoutData(gd);
|
||||
|
@ -174,9 +145,6 @@ public class SendConfigDlg extends CaveHydroSWTDialog {
|
|||
|
||||
private void createDirectoryGroup() {
|
||||
GridData gd = new GridData(SWT.FILL, SWT.DEFAULT, true, true);
|
||||
gd.widthHint = 350;
|
||||
gd.heightHint = 400;
|
||||
|
||||
Group dirGroup = new Group(shell, SWT.NONE);
|
||||
dirGroup.setText("Distribution Directories");
|
||||
GridLayout gridLayout = new GridLayout(1, false);
|
||||
|
@ -188,14 +156,10 @@ public class SendConfigDlg extends CaveHydroSWTDialog {
|
|||
dirComp.setLayout(gl);
|
||||
|
||||
gd = new GridData(SWT.FILL, SWT.DEFAULT, true, true);
|
||||
gd.heightHint = 300;
|
||||
|
||||
directoryList = new List(dirGroup, SWT.BORDER | SWT.MULTI
|
||||
| SWT.V_SCROLL | SWT.H_SCROLL);
|
||||
gd.heightHint = directoryList.getItemHeight() * 15;
|
||||
directoryList.setLayoutData(gd);
|
||||
directoryList.setFont(font);
|
||||
|
||||
int buttonWidth = 100;
|
||||
|
||||
Composite buttonComp = new Composite(dirGroup, SWT.NONE);
|
||||
|
||||
|
@ -203,7 +167,7 @@ public class SendConfigDlg extends CaveHydroSWTDialog {
|
|||
gd = new GridData(SWT.CENTER, SWT.DEFAULT, false, false);
|
||||
buttonComp.setLayoutData(gd);
|
||||
|
||||
gd = new GridData(buttonWidth, SWT.DEFAULT);
|
||||
gd = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
|
||||
addBtn = new Button(buttonComp, SWT.PUSH);
|
||||
addBtn.setText("Add");
|
||||
addBtn.setLayoutData(gd);
|
||||
|
@ -224,7 +188,7 @@ public class SendConfigDlg extends CaveHydroSWTDialog {
|
|||
}
|
||||
});
|
||||
|
||||
gd = new GridData(buttonWidth, SWT.DEFAULT);
|
||||
gd = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
|
||||
removeBtn = new Button(buttonComp, SWT.PUSH);
|
||||
removeBtn.setText("Remove");
|
||||
removeBtn.setLayoutData(gd);
|
||||
|
@ -241,7 +205,7 @@ public class SendConfigDlg extends CaveHydroSWTDialog {
|
|||
}
|
||||
});
|
||||
|
||||
gd = new GridData(buttonWidth, SWT.DEFAULT);
|
||||
gd = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
|
||||
removeAllBtn = new Button(buttonComp, SWT.PUSH);
|
||||
removeAllBtn.setText("Remove All");
|
||||
removeAllBtn.setLayoutData(gd);
|
||||
|
@ -263,9 +227,10 @@ public class SendConfigDlg extends CaveHydroSWTDialog {
|
|||
GridData gd = new GridData(SWT.CENTER, SWT.DEFAULT, false, false);
|
||||
buttonComp.setLayoutData(gd);
|
||||
|
||||
int buttonWidth = 80;
|
||||
final int buttonMinimumWidth = buttonComp.getDisplay().getDPI().x;
|
||||
|
||||
gd = new GridData(buttonWidth, SWT.DEFAULT);
|
||||
gd = new GridData(SWT.DEFAULT, SWT.DEFAULT, true, false);
|
||||
gd.minimumWidth = buttonMinimumWidth;
|
||||
Button okBtn = new Button(buttonComp, SWT.PUSH);
|
||||
okBtn.setText("OK");
|
||||
okBtn.setLayoutData(gd);
|
||||
|
@ -277,7 +242,8 @@ public class SendConfigDlg extends CaveHydroSWTDialog {
|
|||
}
|
||||
});
|
||||
|
||||
gd = new GridData(buttonWidth, SWT.DEFAULT);
|
||||
gd = new GridData(SWT.DEFAULT, SWT.DEFAULT, true, false);
|
||||
gd.minimumWidth = buttonMinimumWidth;
|
||||
Button applyBtn = new Button(buttonComp, SWT.PUSH);
|
||||
applyBtn.setText("Apply");
|
||||
applyBtn.setLayoutData(gd);
|
||||
|
@ -288,7 +254,8 @@ public class SendConfigDlg extends CaveHydroSWTDialog {
|
|||
}
|
||||
});
|
||||
|
||||
gd = new GridData(buttonWidth, SWT.DEFAULT);
|
||||
gd = new GridData(SWT.DEFAULT, SWT.DEFAULT, true, false);
|
||||
gd.minimumWidth = buttonMinimumWidth;
|
||||
Button cancelBtn = new Button(buttonComp, SWT.PUSH);
|
||||
cancelBtn.setText("Cancel");
|
||||
cancelBtn.setLayoutData(gd);
|
||||
|
@ -300,11 +267,6 @@ public class SendConfigDlg extends CaveHydroSWTDialog {
|
|||
});
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see com.raytheon.viz.ui.dialogs.CaveSWTDialogBase#opened()
|
||||
*/
|
||||
@Override
|
||||
protected void opened() {
|
||||
super.opened();
|
||||
|
@ -345,19 +307,10 @@ public class SendConfigDlg extends CaveHydroSWTDialog {
|
|||
this.shefIssueMgr.saveXml();
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see com.raytheon.viz.ui.dialogs.CaveSWTDialogBase#disposed()
|
||||
*/
|
||||
@Override
|
||||
protected void disposed() {
|
||||
super.disposed();
|
||||
|
||||
if (font.isDisposed() == false) {
|
||||
font.dispose();
|
||||
}
|
||||
|
||||
if (shefIssueMgr != null) {
|
||||
ShefIssueMgr.recycle();
|
||||
}
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
* further licensing information.
|
||||
**/
|
||||
package com.raytheon.uf.common.dataplugin.shef.tables;
|
||||
// default package
|
||||
|
||||
// Generated Oct 17, 2008 2:22:17 PM by Hibernate Tools 3.2.2.GA
|
||||
|
||||
import java.util.Date;
|
||||
|
@ -41,6 +41,7 @@ import javax.persistence.TemporalType;
|
|||
* Oct 17, 2008 Initial generation by hbm2java
|
||||
* Aug 19, 2011 10672 jkorman Move refactor to new project
|
||||
* Oct 07, 2013 2361 njensen Removed XML annotations
|
||||
* May 16, 2016 5483 bkowal Added {@link #HSA_LENGTH}.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -50,10 +51,14 @@ import javax.persistence.TemporalType;
|
|||
@Entity
|
||||
@Table(name = "admin")
|
||||
@com.raytheon.uf.common.serialization.annotations.DynamicSerialize
|
||||
public class Admin extends com.raytheon.uf.common.dataplugin.persist.PersistableDataObject implements java.io.Serializable {
|
||||
public class Admin extends
|
||||
com.raytheon.uf.common.dataplugin.persist.PersistableDataObject
|
||||
implements java.io.Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public static final int HSA_LENGTH = 5;
|
||||
|
||||
@com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement
|
||||
private String hsa;
|
||||
|
||||
|
@ -111,7 +116,7 @@ public class Admin extends com.raytheon.uf.common.dataplugin.persist.Persistable
|
|||
}
|
||||
|
||||
@Id
|
||||
@Column(name = "hsa", unique = true, nullable = false, length = 5)
|
||||
@Column(name = "hsa", unique = true, nullable = false, length = Admin.HSA_LENGTH)
|
||||
public String getHsa() {
|
||||
return this.hsa;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue