Merge branch 'master_13.3.1' into master_13.4.1

Former-commit-id: e6d37f3e6d [formerly 035878a846 [formerly 7957c52dec] [formerly e6d37f3e6d [formerly 59bd064351a843fd514514de9dc942d13c6d7793]]]
Former-commit-id: 035878a846 [formerly 7957c52dec]
Former-commit-id: 035878a846
Former-commit-id: 9d57ad1675
This commit is contained in:
Steve Harris 2013-04-15 09:34:45 -05:00
commit f138acf326
881 changed files with 131133 additions and 749 deletions

View file

@ -261,8 +261,7 @@ class Procedure (SmartScript.SmartScript):
if checkOnly:
self.createGrid(MODEL, "MaxLessThanMin", "SCALAR", mask.astype('float32'),
maxTR, minAllowedValue=0.0, maxAllowedValue= 1.0,
units="", descriptiveName="")
maxTR, minAllowedValue=0.0, maxAllowedValue= 1.0)
else: # force the change
if maxTR in maxTLocks:
msg = "Can't modify MaxT grid at " + str(maxTR) + \

View file

@ -21,6 +21,8 @@ package com.raytheon.uf.viz.gisdatastore.ui;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.GC;
@ -47,6 +49,7 @@ import com.raytheon.uf.viz.core.IGraphicsTarget.LineStyle;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Nov 27, 2012 randerso Initial creation
* Apr 9, 2013 #1860 randerso Fix image disposed issued on Windows
*
* </pre>
*
@ -87,7 +90,7 @@ public class LineStyleDialog extends Dialog {
continue;
}
TableItem item = new TableItem(table, SWT.NONE);
Image image = new Image(d, 128, 10);
final Image image = new Image(d, 128, 10);
Rectangle bounds = image.getBounds();
int[] dashes = ls.getSWTLineStyle();
GC gc = new GC(image);
@ -98,7 +101,14 @@ public class LineStyleDialog extends Dialog {
gc.dispose();
item.setImage(image);
image.dispose();
item.addDisposeListener(new DisposeListener() {
@Override
public void widgetDisposed(DisposeEvent e) {
image.dispose();
}
});
item.setData(ls);
if (ls.equals(this.style)) {

View file

@ -21,6 +21,8 @@ package com.raytheon.uf.viz.gisdatastore.ui;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.GC;
@ -45,6 +47,7 @@ import org.eclipse.swt.widgets.TableItem;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Nov 27, 2012 randerso Initial creation
* Apr 9, 2013 #1860 randerso Fix image disposed issued on Windows
*
* </pre>
*
@ -88,7 +91,7 @@ public class LineWidthDialog extends Dialog {
for (int w = min; w <= max; w++) {
TableItem item = new TableItem(table, SWT.NONE);
Image image = new Image(d, 128, 10);
final Image image = new Image(d, 128, 10);
Rectangle bounds = image.getBounds();
GC gc = new GC(image);
gc.fillRectangle(bounds);
@ -98,7 +101,13 @@ public class LineWidthDialog extends Dialog {
gc.dispose();
item.setImage(image);
image.dispose();
item.addDisposeListener(new DisposeListener() {
@Override
public void widgetDisposed(DisposeEvent e) {
image.dispose();
}
});
item.setData(w);
if (w == this.width) {

View file

@ -82,6 +82,7 @@ import com.vividsolutions.jts.geom.Coordinate;
* Jul 24 2012 12996 Xiaochuan Compare with MidVal()
* Feb 28, 2013 1731 bsteffen Allow ScanResource to work better with
* D2DTimeMatcher.
* Apr 02, 2013 1731 mpduff Fix problem with DMD updates.
*
* </pre>
*
@ -1108,7 +1109,8 @@ public class ScanResource extends
try {
if (!getScan().getTimeOrderedKeys(getScan(), newrecord.getType(),
resourceData.icao).contains(
newrecord.getDataTime().getRefTime())) {
newrecord.getDataTime().getRefTime())
|| newrecord.getType().equals("DMD")) {
newrecord = resourceData.populateRecord(newrecord);
@ -1118,11 +1120,12 @@ public class ScanResource extends
getScan().setTableData(resourceData.icao,
newrecord.getTableData(),
/* TODO: This should be the volume scan time,
* but {Radar,Scan}Record.getVolScanTime is actually
* the radar product generation time.
/*
* TODO: This should be the volume scan time, but
* {Radar,Scan}Record.getVolScanTime is actually the
* radar product generation time.
*/
newrecord.getDataTime().getRefTime(),
newrecord.getDataTime().getRefTime(),
newrecord.getTilt(),
newrecord.getDataTime().getRefTime(),
newrecord.getType());

View file

@ -24,8 +24,6 @@ import java.util.Collections;
import java.util.List;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MenuEvent;
import org.eclipse.swt.events.MenuListener;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseTrackAdapter;
@ -46,6 +44,8 @@ import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import com.raytheon.uf.viz.ui.menus.widgets.tearoff.TearOffMenuDialog.MenuPathElement;
/**
* Holds the information for all the menu items in the dialog
*
@ -56,6 +56,7 @@ import org.eclipse.swt.widgets.MenuItem;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Sep 15, 2011 mnash Initial creation
* Apr 10, 2013 DR 15185 D. Friedman Preserve tear-offs over perspective switches.
*
* </pre>
*
@ -63,7 +64,7 @@ import org.eclipse.swt.widgets.MenuItem;
* @version 1.0
*/
public class MenuItemComposite extends Composite implements MenuListener {
public class MenuItemComposite extends Composite {
private boolean separator = false;
@ -74,6 +75,8 @@ public class MenuItemComposite extends Composite implements MenuListener {
// backing data for executing listeners
private MenuItem item;
private MenuPathElement itemPath;
private Image arrow = null;
private Image highlightedArrow = null;
@ -84,8 +87,6 @@ public class MenuItemComposite extends Composite implements MenuListener {
private List<String> myPath;
private Menu topMostParent;
/**
* @param parent
* @param style
@ -108,14 +109,13 @@ public class MenuItemComposite extends Composite implements MenuListener {
do {
myPath.add(toAdd.getText());
toAdd = parent.getParentItem();
topMostParent = parent;
parent = parent.getParentMenu();
} while (parent.getParentMenu() != null);
Collections.reverse(myPath);
topMostParent.addMenuListener(this);
item = it;
itemPath = new MenuPathElement(it);
String[] labels = item.getText().split("\t");
// handle for a separator menu item
@ -189,6 +189,8 @@ public class MenuItemComposite extends Composite implements MenuListener {
*
*/
private void addItemListeners() {
if (item == null)
return;
if (updateListener != null) {
item.addListener(SWT.Modify, updateListener);
}
@ -209,11 +211,11 @@ public class MenuItemComposite extends Composite implements MenuListener {
for (Control comp : firstItem.getParent().getParent()
.getChildren()) {
MenuItemComposite composite = (MenuItemComposite) comp;
if (composite.item.getText().equals(
if (composite.getItem().getText().equals(
((MenuItem) e.widget).getText())) {
if (composite.firstItem instanceof Button) {
((Button) composite.firstItem)
.setSelection(composite.item
.setSelection(composite.getItem()
.getSelection());
}
} else {
@ -233,7 +235,7 @@ public class MenuItemComposite extends Composite implements MenuListener {
@Override
public void handleEvent(Event event) {
if (secondItem != null && !secondItem.isDisposed()) {
if (item == event.data) {
if (getItem() == event.data) {
if (((MenuItem) event.data).getText().split("\t").length > 1) {
((Label) secondItem)
.setText(((MenuItem) event.data).getText()
@ -377,6 +379,8 @@ public class MenuItemComposite extends Composite implements MenuListener {
MouseAdapter mouseAdapter = new MouseAdapter() {
@Override
public void mouseDown(MouseEvent e) {
MenuItem item = getItem();
if (item.getMenu() != null) {
// This is item opens a submenu, get the y offset based on
// the location of the click
@ -420,7 +424,7 @@ public class MenuItemComposite extends Composite implements MenuListener {
for (int i = 0; i < siblings.length; i++) {
final MenuItemComposite mic = (MenuItemComposite) siblings[i];
if (mic.separator == false
&& mic.item.getStyle() == SWT.RADIO) {
&& mic.getItem().getStyle() == SWT.RADIO) {
try {
MenuItemComposite parent = null;
// check whether a Label is clicked or a
@ -434,16 +438,16 @@ public class MenuItemComposite extends Composite implements MenuListener {
// check that the radio groups match
if (mic.getData("radioGroup").equals(
parent.getData("radioGroup"))) {
if (!parent.item
if (!parent.getItem()
.getText()
.replaceAll("&", "")
.equals(mic.item.getText().replaceAll(
.equals(mic.getItem().getText().replaceAll(
"&", ""))) {
mic.item.setSelection(false);
mic.getItem().setSelection(false);
((Button) mic.firstItem)
.setSelection(false);
} else {
mic.item.setSelection(true);
mic.getItem().setSelection(true);
((Button) mic.firstItem).setSelection(true);
}
}
@ -476,10 +480,6 @@ public class MenuItemComposite extends Composite implements MenuListener {
}
}
if (topMostParent != null) {
topMostParent.removeMenuListener(this);
}
super.dispose();
}
@ -489,67 +489,40 @@ public class MenuItemComposite extends Composite implements MenuListener {
}
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.swt.events.MenuListener#menuHidden(org.eclipse.swt.events
* .MenuEvent)
*/
@Override
public void menuHidden(MenuEvent e) {
if (item.isDisposed() == false) {
return;
}
private MenuItem getItem() {
MenuItem item = getItemIfAvailable();
if (item == null)
throw new IllegalStateException(
String.format("Could not find target of tear-off menu item \"%s\"",
itemPath.getName()));
return item;
}
// At some point we may need to check against the index as well but that
// is difficult because we don't know if the tear off menu item will/was
// in the menu when we were created/now so our index could be off by one
// very easily making it unreliable
Menu menu = topMostParent;
MenuItem myItem = null;
String last = myPath.get(myPath.size() - 1);
for (String path : myPath) {
if (menu != null) {
MenuItem[] items = menu.getItems();
for (int i = 0; i < items.length; ++i) {
MenuItem item = items[i];
if (path.equals(item.getText())) {
if (path == last) {
myItem = item;
} else {
menu = item.getMenu();
if (menu != null && menu.getItemCount() == 0) {
// Have to manually fill menu
for (Listener listener : menu
.getListeners(SWT.Show)) {
Event event = new Event();
event.type = SWT.Show;
event.widget = menu;
listener.handleEvent(event);
}
}
}
break;
}
}
}
}
if (myItem != null && myItem.isDisposed() == false) {
item = myItem;
private MenuItem getItemIfAvailable() {
if (item == null || item.isDisposed()) {
item = findItem();
addItemListeners();
}
return item;
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.swt.events.MenuListener#menuShown(org.eclipse.swt.events.
* MenuEvent)
*/
@Override
public void menuShown(MenuEvent e) {
private MenuItem findItem() {
Menu menu = getTargetMenu();
if (menu != null)
return TearOffMenuDialog.findItem(menu, itemPath);
else
return null;
}
private Menu getTargetMenu() {
return getDialog().getTargetMenu();
}
private TearOffMenuDialog getDialog() {
return (TearOffMenuDialog) getShell().getData();
}
public void reconnect() {
getItemIfAvailable();
}
}

View file

@ -27,6 +27,7 @@ import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IEditorPart;
import com.raytheon.viz.ui.EditorUtil;
import com.raytheon.viz.ui.editor.AbstractEditor;
@ -41,6 +42,7 @@ import com.raytheon.viz.ui.editor.AbstractEditor;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Dec 5, 2011 mnash Initial creation
* Apr 10, 2013 DR 15185 D. Friedman Do not assume there is an active editor.
*
* </pre>
*
@ -88,7 +90,10 @@ public class PopupMenu {
mItem.addListener(SWT.Selection, new Listener() {
@Override
public void handleEvent(Event event) {
((AbstractEditor) EditorUtil.getActiveEditor()).refresh();
IEditorPart editor = EditorUtil.getActiveEditor();
if (editor instanceof AbstractEditor) {
((AbstractEditor) editor).refresh();
}
}
});

View file

@ -19,6 +19,12 @@
**/
package com.raytheon.uf.viz.ui.menus.widgets.tearoff;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.eclipse.jface.action.ContributionItem;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.graphics.Point;
@ -53,6 +59,7 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
* ------------ ---------- ----------- --------------------------
* Sep 14, 2011 mnash Initial creation
* Jan 09, 2013 1442 rferrel Add Simulated Time Change Listener.
* Apr 10, 2013 DR 15185 D. Friedman Preserve tear-offs over perspective switches.
*
* </pre>
*
@ -62,7 +69,9 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
public class TearOffMenuDialog extends CaveSWTDialog {
private MenuItem[] items;
private MenuPathElement[] menuPath;
private Menu menu;
private ScrolledComposite scrolledComp;
@ -80,8 +89,9 @@ public class TearOffMenuDialog extends CaveSWTDialog {
public TearOffMenuDialog(Menu menu) {
super(VizWorkbenchManager.getInstance().getCurrentWindow().getShell(),
SWT.DIALOG_TRIM | SWT.RESIZE, CAVE.DO_NOT_BLOCK);
this.menuPath = getMenuPath(menu);
this.menu = menu;
String text = menu.getParentItem().getText();
this.items = menu.getItems();
// handle for the & that makes key bindings
setText(text.replace("&", ""));
@ -89,6 +99,7 @@ public class TearOffMenuDialog extends CaveSWTDialog {
@Override
protected void initializeComponents(final Shell shell) {
shell.setData(this);
// allow for scrolling if necessary
scrolledComp = new ScrolledComposite(shell, SWT.V_SCROLL);
GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
@ -106,6 +117,7 @@ public class TearOffMenuDialog extends CaveSWTDialog {
// go through menu items and build MenuItemComposite for each item,
// which handles all the selection and color of the "MenuItem" in the
// dialog
MenuItem[] items = getTargetMenu().getItems();
int radioGroup = 0;
for (int i = 1; i < items.length; i++) {
MenuItem item = items[i];
@ -140,11 +152,10 @@ public class TearOffMenuDialog extends CaveSWTDialog {
int y = point.y;
shell.setLocation(x, y);
// close the dialog on perspective change
shell.addListener(SWT.Hide, new Listener() {
shell.addListener(SWT.Show, new Listener() {
@Override
public void handleEvent(Event event) {
close();
updateItems();
}
});
}
@ -204,12 +215,156 @@ public class TearOffMenuDialog extends CaveSWTDialog {
* Force update of item's display.
*/
private void updateItems() {
// items[0] is the tear off object and is not in the dialog's display.
for (int index = 1; index < items.length; ++index) {
MenuItem item = items[index];
Menu menu = getMenuIfAvailable();
if (menu == null)
return;
for (MenuItemComposite mic : getMenuItemComposites())
mic.reconnect();
for (MenuItem item : menu.getItems()) {
if (item.getData() instanceof BundleContributionItem) {
((BundleContributionItem) item.getData()).refreshText();
}
}
}
private List<MenuItemComposite> getMenuItemComposites() {
List<MenuItemComposite> result = new ArrayList<MenuItemComposite>();
for (Control c : fullComp.getChildren()) {
if (c instanceof MenuItemComposite)
result.add((MenuItemComposite) c);
}
return result;
}
/**
* Return the portion of a menu item's title that should not change over
* time
*
*/
private static String getCleanMenuItemText(String text) {
int pos = text.indexOf('\t');
if (pos >= 0)
return text.substring(0, pos);
else
return text;
}
private Menu getMenuIfAvailable() {
if (menu == null || menu.isDisposed()) {
menu = findMenu();
}
return menu;
}
/*package*/ Menu getTargetMenu() {
Menu menu = getMenuIfAvailable();
if (menu == null) {
throw new IllegalStateException(
String.format("Tear-off menu %s is not available", shell.getText()));
}
if (menu.getItems().length == 0)
tryToFillMenu(menu);
return menu;
}
private void tryToFillMenu(Menu menu) {
/*
* Menu may not have been created so call listeners. This still does
* not work if all of the menu items need the workbench window to be
* active in order to be enabled.
*/
Shell shell = this.shell.getParent().getShell();
shell.setActive();
while (shell.getDisplay().readAndDispatch()) {
// nothing
}
Event event = new Event();
event.type = SWT.Show;
menu.notifyListeners(SWT.Show, event);
event = new Event();
event.type = SWT.Hide;
menu.notifyListeners(SWT.Hide, event);
}
private Menu findMenu() {
/* NOTE: Assuming shell.getParent().getShell() is the workbench window. */
Menu container = shell.getParent().getShell().getMenuBar();
MenuPathElement lastPathElement = null;
for (int i = 0; i < menuPath.length; ++i) {
MenuItem mi = findItem(container, menuPath[i]);
if (mi == null)
return null;
Menu mim = mi.getMenu();
if (mim == null)
throw new IllegalStateException(String.format(
"Could not get target menu \"%s\" in %s",
menuPath[i].getName(), lastPathElement != null ?
'"' + lastPathElement.getName() + '"' : "menu bar"));
tryToFillMenu(mim);
container = mim;
lastPathElement = menuPath[i];
}
return container;
}
/**
* Identifies a specific item in an SWT menu. It has been observed that
* associated data of a menu item maintains the same identity during a CAVE
* session even if the MenuItem is recreated. However, the associated
* data is not always unique. Menu item text is used to differentiate.
*/
static class MenuPathElement {
Object data;
String cleanText;
public MenuPathElement(MenuItem item) {
data = item.getData();
cleanText = getCleanMenuItemText(item.getText());
}
public int getMatchLevel(MenuItem item) {
int level = 0;
if (item.getData() == data)
++level;
if (cleanText.equals(item.getText()))
++level;
return level;
}
public String getName() {
if (cleanText != null && cleanText.length() > 0)
return cleanText;
Object value = data;
if (value instanceof MenuManager)
value = ((MenuManager) value).getId();
else if (value instanceof ContributionItem)
value = ((ContributionItem) value).getId();
return String.valueOf(value);
}
}
/*package*/ static MenuItem findItem(Menu menu, MenuPathElement pe) {
MenuItem best = null;
int bestLevel = 0;
for (MenuItem item : menu.getItems()) {
int matchLevel = pe.getMatchLevel(item);
if (matchLevel > bestLevel) {
bestLevel = matchLevel;
best = item;
}
}
return best;
}
private static MenuPathElement[] getMenuPath(Menu menu) {
ArrayList<MenuPathElement> data = new ArrayList<MenuPathElement>();
while (menu != null) {
MenuItem mi = menu.getParentItem();
if (mi == null)
break;
data.add(new MenuPathElement(mi));
menu = menu.getParentMenu();
}
Collections.reverse(data);
return data.toArray(new MenuPathElement[data.size()]);
}
}

View file

@ -39,6 +39,11 @@ import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.status.UFStatus.Priority;
import com.raytheon.viz.ui.VizWorkbenchManager;
/**
* Menu listener that adds item to menu which will open dialog which is the menu
*
@ -49,6 +54,7 @@ import org.eclipse.swt.widgets.MenuItem;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Sep 14, 2011 mschenke Initial creation
* Apr 10, 2013 DR 15185 D. Friedman Preserve tear-offs over perspective switches.
*
* </pre>
*
@ -66,6 +72,9 @@ public class TearOffMenuListener implements IMenuListener2 {
public static final String TEAROFF_PREFERENCE_ID = "tearoffmenus";
private static final IUFStatusHandler statusHandler = UFStatus
.getHandler(TearOffMenuListener.class);
private static boolean enabled;
static {
final IPreferenceStore store = com.raytheon.uf.viz.core.Activator
@ -94,7 +103,7 @@ public class TearOffMenuListener implements IMenuListener2 {
@Override
public void menuAboutToShow(final IMenuManager manager) {
register(manager.getItems(), this);
if (openDialogs.contains(getKey(manager)) == false) {
if (openDialogs.contains(getPerspectiveKey(manager)) == false) {
// We need to add our item to be first so we need to remove others
// then add ourself
IContributionItem[] items = manager.getItems();
@ -112,7 +121,7 @@ public class TearOffMenuListener implements IMenuListener2 {
*/
@Override
public void menuAboutToHide(IMenuManager manager) {
if (openDialogs.contains(getKey(manager)) == false) {
if (openDialogs.contains(getPerspectiveKey(manager)) == false) {
manager.remove(ID);
manager.remove(ACTION_ID);
unregister(manager.getItems(), this);
@ -137,6 +146,16 @@ public class TearOffMenuListener implements IMenuListener2 {
}
}
private Object getPerspectiveKey(IMenuManager manager) {
String perspectiveId = "";
try {
perspectiveId = VizWorkbenchManager.getInstance().getCurrentWindow().getActivePage().getPerspective().getId();
} catch (Exception e) {
statusHandler.handle(Priority.EVENTA, "Failed to get current perspective ID", e);
}
return perspectiveId + "::" + getKey(manager);
}
private static Object getKey(IMenuManager manager) {
Object key = manager;
if (manager.getId() != null) {
@ -215,17 +234,18 @@ public class TearOffMenuListener implements IMenuListener2 {
*/
@Override
public void run() {
final Object key = getPerspectiveKey(manager);
TearOffMenuDialog dialog = new TearOffMenuDialog(menu);
dialog.addListener(SWT.Dispose, new Listener() {
@Override
public void handleEvent(Event event) {
openDialogs.remove(getKey(manager));
openDialogs.remove(key);
manager.remove(ID);
manager.remove(ACTION_ID);
unregister(manager.getItems(), TearOffMenuListener.this);
}
});
openDialogs.add(getKey(manager));
openDialogs.add(key);
register(manager.getItems(), TearOffMenuListener.this);
dialog.open();
}

View file

@ -19,9 +19,12 @@
**/
package com.raytheon.viz.awipstools.ui.action;
import java.util.List;
import com.raytheon.uf.viz.core.IDisplayPane;
import com.raytheon.uf.viz.core.VizApp;
import com.raytheon.uf.viz.core.drawables.IDescriptor;
import com.raytheon.uf.viz.core.exception.VizException;
import com.raytheon.uf.viz.core.rsc.AbstractVizResource.ResourceStatus;
import com.raytheon.uf.viz.core.rsc.LoadProperties;
import com.raytheon.uf.viz.core.rsc.tools.AwipsToolsResourceData;
import com.raytheon.uf.viz.core.rsc.tools.action.AbstractMapToolAction;
@ -35,6 +38,7 @@ import com.raytheon.viz.awipstools.ui.layer.TimeOfArrivalLayer;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 07DEC2007 #496 Eric Babin Initial Creation.
* Apr 12 2013 DR 16032 D. Friedman Make it work in multiple panes.
*
* </pre>
*
@ -45,10 +49,6 @@ import com.raytheon.viz.awipstools.ui.layer.TimeOfArrivalLayer;
public class TimeOfArrivalAction extends
AbstractMapToolAction<TimeOfArrivalLayer> {
private TimeOfArrivalLayer layer = null;
private AwipsToolsResourceData<TimeOfArrivalLayer> data = null;
/*
* (non-Javadoc)
*
@ -57,22 +57,40 @@ public class TimeOfArrivalAction extends
*/
@Override
protected AwipsToolsResourceData<TimeOfArrivalLayer> getResourceData() {
if (data == null) {
data = new AwipsToolsResourceData<TimeOfArrivalLayer>(
return new AwipsToolsResourceData<TimeOfArrivalLayer>(
TimeOfArrivalLayer.NAME, TimeOfArrivalLayer.class);
}
return data;
}
@Override
protected TimeOfArrivalLayer getResource(LoadProperties loadProperties,
IDescriptor descriptor) throws VizException {
if (layer == null || layer.getStatus() == ResourceStatus.DISPOSED) {
layer = super.getResource(loadProperties, descriptor);
} else {
layer.reopenDialog();
}
TimeOfArrivalLayer layer = getExistingResource();
if (layer == null)
return super.getResource(loadProperties, descriptor);
VizApp.runAsync( new Runnable() {
@Override
public void run() {
TimeOfArrivalLayer layer = getExistingResource();
if (layer != null) {
layer.makeEditableAndReopenDialog();
}
}
});
return layer;
}
private TimeOfArrivalLayer getExistingResource() {
IDisplayPane[] panes = getSelectedPanes();
if (panes != null && panes.length > 0) {
List<TimeOfArrivalLayer> layers = null;
layers = panes[0].getDescriptor().getResourceList()
.getResourcesByTypeAsType(TimeOfArrivalLayer.class);
if (layers.size() > 0) {
return layers.get(0);
}
}
return null;
}
}

View file

@ -71,6 +71,7 @@ import com.raytheon.viz.awipstools.common.stormtrack.StormTrackUIManager;
import com.raytheon.viz.awipstools.ui.dialog.TimeOfArrivalDialog;
import com.raytheon.viz.core.rsc.jts.JTSCompiler;
import com.raytheon.viz.ui.VizWorkbenchManager;
import com.raytheon.viz.ui.input.EditableManager;
import com.raytheon.viz.ui.input.InputAdapter;
import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.GeometryFactory;
@ -98,6 +99,7 @@ import com.vividsolutions.jts.geom.GeometryFactory;
* left-to-right if there is not enough room
* for the text to the left of the point.
* 15Mar2013 15693 mgamazaychikov Added magnification capability.
* Apr 12 2013 DR 16032 D. Friedman Make it work in multiple panes.
* </pre>
*
* @author mschenke
@ -256,7 +258,6 @@ public class TimeOfArrivalLayer extends AbstractStormTrackResource {
this.pdProps.setMaxDisplayWidth(TimeOfArrivalLayer.PD_MAX_WIDTH);
timeFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
reopenDialog();
leadState = new LeadTimeState();
shell = VizWorkbenchManager.getInstance().getCurrentWindow().getShell();
@ -272,6 +273,7 @@ public class TimeOfArrivalLayer extends AbstractStormTrackResource {
if (container != null) {
container.registerMouseHandler(adapter);
}
reopenDialog();
}
@Override
@ -565,20 +567,20 @@ public class TimeOfArrivalLayer extends AbstractStormTrackResource {
*/
public void reopenDialog() {
// Open the dialog
if (dialog == null || dialog.getShell() == null
|| dialog.getShell().isDisposed()) {
VizApp.runAsync(new Runnable() {
VizApp.runAsync(new Runnable() {
@Override
public void run() {
@Override
public void run() {
if (dialog == null || dialog.getShell() == null
|| dialog.getShell().isDisposed()) {
dialog = new TimeOfArrivalDialog(VizWorkbenchManager
.getInstance().getCurrentWindow().getShell(),
TimeOfArrivalLayer.this);
dialog.setBlockOnOpen(false);
dialog.open();
}
});
}
}
});
}
private void updateLeadTimeState() {
@ -678,4 +680,9 @@ public class TimeOfArrivalLayer extends AbstractStormTrackResource {
}
leadState.changed = false;
}
public void makeEditableAndReopenDialog() {
EditableManager.makeEditable(this, true);
reopenDialog();
}
}

View file

@ -69,6 +69,7 @@ import com.raytheon.viz.core.drawables.ColorMapParameterFactory;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Feb 14, 2007 chammack Initial Creation.
* Apr 03, 2013 1562 mschenke Fix for custom colormaps
*
* </pre>
*
@ -140,10 +141,9 @@ public class TopoResource extends
ColorMapParameters existing = getCapability(ColorMapCapability.class)
.getColorMapParameters();
if (existing != null) {
PersistedParameters params = existing.getPersisted();
if (params != null) {
parameters.setColorMapMin(params.getColorMapMin());
parameters.setColorMapMax(params.getColorMapMax());
PersistedParameters persisted = existing.getPersisted();
if (persisted != null) {
parameters.applyPersistedParameters(persisted);
}
if (existing.getColorMap() != null) {

View file

@ -1,19 +1,19 @@
/**
* 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.
**/
@ -80,13 +80,13 @@ import com.raytheon.viz.gfe.core.parm.vcparm.VCModuleJobPool;
/**
* Implements common parm manager functionality shared between concrete and mock
* implementations.
*
*
* <pre>
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 03/26/2008 chammack Split non-mock code from MockParmManager
* 02/23/2012 #346 dgilling Dispose of VCParms from this class's
* 02/23/2012 #346 dgilling Dispose of VCParms from this class's
* dispose method.
* 02/23/2012 #346 dgilling Ensure all Parms are disposed when calling
* dispose method.
@ -101,9 +101,11 @@ import com.raytheon.viz.gfe.core.parm.vcparm.VCModuleJobPool;
* 01/22/2013 #1515 dgilling Increase default size of VCModule thread pool
* to decrease UI hang-ups waiting for results.
* 03/20/2013 #1774 randerso Code cleanup
*
* 04/11/2013 16028 ryu Fixed setParmsRemoveISCDeps() to not remove
* modified parms.
*
* </pre>
*
*
* @author chammack
* @version 1.0
*/
@ -419,7 +421,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see com.raytheon.viz.gfe.core.IParmManager#dispose()
*/
@Override
@ -491,14 +493,14 @@ public abstract class AbstractParmManager implements IParmManager {
/**
* Return the DataManager
*
*
* @return the dataManager
*/
protected abstract DataManager getDataManager();
/*
* (non-Javadoc)
*
*
* @see java.lang.Object#finalize()
*/
@Override
@ -509,7 +511,7 @@ public abstract class AbstractParmManager implements IParmManager {
/**
* Recalculate the system time range using the total time span of all
* displayed parms and their locks
*
*
* @return the system time range
*/
protected TimeRange recalcSystemTimeRange() {
@ -571,7 +573,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see com.raytheon.viz.gfe.core.parm.IParmManager#getLockedParms()
*/
@Override
@ -593,7 +595,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.parm.IParmManager#getParm(com.raytheon.viz.
* gfe.core.parm.ParmID)
@ -615,7 +617,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see com.raytheon.viz.gfe.core.parm.IParmManager#getUndisplayedParms()
*/
@Override
@ -630,7 +632,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see com.raytheon.viz.gfe.core.IParmManager#getSelectedParms()
*/
@Override
@ -653,7 +655,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see com.raytheon.viz.gfe.core.IParmManager#getModifiedParms()
*/
@Override
@ -676,7 +678,7 @@ public abstract class AbstractParmManager implements IParmManager {
/**
* Returns a matching parm * (creates if necessary) for the given expression
* and database id.
*
*
* @param dbid
* the database
* @param exprName
@ -810,7 +812,7 @@ public abstract class AbstractParmManager implements IParmManager {
* Helper function for <code>setParms</code>. Takes the toBeLoaded and
* removeParms lists, calculates non-visible ISC dependencies, and then
* returns the updated lists through the calling arguments.
*
*
* @param toBeLoaded
* @param removeParms
*/
@ -822,7 +824,8 @@ public abstract class AbstractParmManager implements IParmManager {
List<ParmID> depParms = dependentParms(removeList.get(i), true);
for (ParmID pid : depParms) {
int index = pivdIndex(toBeLoaded, pid);
if ((index != -1) && (!toBeLoaded.get(index).isVisible())) {
if ((index != -1) && (!toBeLoaded.get(index).isVisible())
&& (!getParm(toBeLoaded.get(index).getParmID()).isModified())) {
removeList.add(toBeLoaded.get(index).getParmID());
toBeLoaded.remove(index);
}
@ -840,7 +843,7 @@ public abstract class AbstractParmManager implements IParmManager {
* Helper function for <code>setParms</code>. Takes the toBeLoaded,
* addedParms, removeParms, and modParms lists, calculates dependencies, and
* then returns the updated lists through the calling arguments.
*
*
* @param toBeLoaded
* @param addParms
* @param removeParms
@ -935,7 +938,7 @@ public abstract class AbstractParmManager implements IParmManager {
/**
* Actual parm creation mechanism
*
*
* @param pid
* parm id
* @param mutableParm
@ -948,20 +951,20 @@ public abstract class AbstractParmManager implements IParmManager {
boolean mutableParm, boolean displayable) throws GFEServerException;
/**
*
*
* Command to create/remove parms based on ParmID. For additions, the Map
* contains the ParmID and visibility.
*
*
* implementation ---------------------------------------------------------
* Note: addParms, removeParms is modified within this routine, thus they
* are not passed in as const references.
*
*
* Routine converts the ParmIDs into Parms*. Special cases for VCParms,
* since they need to load other parms possibly. Thus the input add and
* remove may not result in the same parms being created and destroyed.
* ------
* ---------------------------------------------------------------------
*
*
* @param addParms
* @param removeParms
*/
@ -1084,7 +1087,7 @@ public abstract class AbstractParmManager implements IParmManager {
/**
* Command to create/remove parms based on ParmID.
*
*
* @param addParms
* the parms to add
* @param removeParms
@ -1098,7 +1101,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.IParmManager#getParmInExpr(java.lang.String,
* boolean, com.raytheon.viz.gfe.core.parm.Parm)
@ -1150,7 +1153,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see com.raytheon.viz.gfe.core.parm.IParmManager#getDisplayedParms()
*/
@Override
@ -1171,7 +1174,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.IParmManager#setDisplayedParms(com.raytheon
* .edex.plugin.gfe.db.objects.ParmID[])
@ -1275,7 +1278,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.msgs.IParmIDChangedListener#parmIDChanged(com
* .raytheon.viz.gfe.core.parm.Parm,
@ -1291,7 +1294,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @seecom.raytheon.viz.gfe.core.msgs.IParmInventoryChangedListener#
* parmInventoryChanged(com.raytheon.viz.gfe.core.parm.Parm,
* com.raytheon.uf.common.time.TimeRange)
@ -1315,7 +1318,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.msgs.ILockTableChangedListener#lockTableChanged
* (com.raytheon.viz.gfe.core.parm.Parm,
@ -1333,7 +1336,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.IParmManager#addDisplayedParmListChangedListener
* (com.raytheon.viz.gfe.core.msgs.IDisplayedParmListChangedListener)
@ -1346,7 +1349,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.IParmManager#removeDisplayedParmListChangedListener
* (com.raytheon.viz.gfe.core.msgs.IDisplayedParmListChangedListener)
@ -1359,7 +1362,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.IParmManager#addParmListChangedListener(com
* .raytheon.viz.gfe.core.msgs.IParmListChangedListener)
@ -1372,7 +1375,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.IParmManager#removeParmListChangedListener(
* com.raytheon.viz.gfe.core.msgs.IParmListChangedListener)
@ -1384,7 +1387,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.IParmManager#addParmIDChangedListener(com.raytheon
* .viz.gfe.core.msgs.IParmIDChangedListener)
@ -1396,7 +1399,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.IParmManager#removeParmIDChangedListener(com
* .raytheon.viz.gfe.core.msgs.IParmIDChangedListener)
@ -1408,7 +1411,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.IParmManager#addSystemTimeRangeChangedListener
* (com.raytheon.viz.gfe.core.msgs.ISystemTimeRangeChangedListener)
@ -1421,7 +1424,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.IParmManager#removeSystemTimeRangeChangedListener
* (com.raytheon.viz.gfe.core.msgs.ISystemTimeRangeChangedListener)
@ -1434,7 +1437,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.IParmManager#addAvailableSourcesChangedListener
* (com.raytheon.viz.gfe.core.msgs.IAvailableSourcesChangedListener)
@ -1447,7 +1450,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.IParmManager#addNewModelAvailableListener(com
* .raytheon.viz.gfe.core.msgs.INewModelAvailableListener)
@ -1459,7 +1462,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.IParmManager#removeAvailableSourcesChangedListener
* (com.raytheon.viz.gfe.core.msgs.IAvailableSourcesChangedListener)
@ -1472,7 +1475,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.IParmManager#removeNewModelAvailableListener
* (com.raytheon.viz.gfe.core.msgs.INewModelAvailableListener)
@ -1485,7 +1488,7 @@ public abstract class AbstractParmManager implements IParmManager {
/**
* Fire the displayed parm list changed listener
*
*
* @param parms
* complete list of parms
* @param adds
@ -1512,7 +1515,7 @@ public abstract class AbstractParmManager implements IParmManager {
/**
* Fire the ParmID changed event.
*
*
* @param parm
* The parm which had its ParmID change
* @param newParmId
@ -1535,7 +1538,7 @@ public abstract class AbstractParmManager implements IParmManager {
/**
* Fire the parm list changed listener
*
*
* @param parms
* complete list of parms
* @param adds
@ -1561,7 +1564,7 @@ public abstract class AbstractParmManager implements IParmManager {
/**
* Fire the system time range changed listener
*
*
* @param systemTimeRange
* new system time range
*/
@ -1583,7 +1586,7 @@ public abstract class AbstractParmManager implements IParmManager {
/**
* Fire the available sources changed event.
*
*
* @param inventory
* The complete inventory
* @param deletions
@ -1612,7 +1615,7 @@ public abstract class AbstractParmManager implements IParmManager {
/**
* Fire the new model available event.
*
*
* @param additions
* The DatabaseID of the newly-available model
*/
@ -1633,7 +1636,7 @@ public abstract class AbstractParmManager implements IParmManager {
/**
* Return a list of ParmIDs for a list of Parms
*
*
* @param parms
* @return
*/
@ -1649,7 +1652,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.IParmManager#getParms(com.raytheon.uf.common
* .dataplugin.gfe.db.objects.ParmID[])
@ -1667,7 +1670,7 @@ public abstract class AbstractParmManager implements IParmManager {
/**
* Return a list of Parms for a list of ParmIDs with nulls in place of parms
* that are not loaded.
*
*
* @param parmIDs
* @return
*/
@ -1685,7 +1688,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see com.raytheon.viz.gfe.core.IParmManager#getAllAvailableParms()
*/
@Override
@ -1701,7 +1704,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.IParmManager#setParmDisplayable(com.raytheon
* .viz.gfe.core.parm.Parm, boolean)
@ -1727,7 +1730,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see com.raytheon.viz.gfe.core.IParmManager#deallocateUnusedGrids(int)
*/
@Override
@ -1794,7 +1797,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see com.raytheon.viz.gfe.core.IParmManager#getProductDB()
*/
@Override
@ -1805,7 +1808,7 @@ public abstract class AbstractParmManager implements IParmManager {
/**
* Filters out a complete list of databaseIDs to those only allowed by the
* dbCatagories in the gfeConfig. Sorts the final list.
*
*
* @param dbIds
* The list of DatabaseIDs to filter
* @return A sorted list of DatabseIDs that are GRID types and match the
@ -1832,7 +1835,7 @@ public abstract class AbstractParmManager implements IParmManager {
* mutable model, plus all other databases identified by the database
* categories specified in the gfeConfig. The databases are filtered by
* projection also, since the GFE can only handle one projection.
*
*
* @return A filtered list of available databases.
*/
private List<DatabaseID> getDatabaseInventory() {
@ -1852,7 +1855,7 @@ public abstract class AbstractParmManager implements IParmManager {
* This function is called when the list of available database has changed.
* The list of available parms is updated based on the list of additions and
* deletions.
*
*
* @param deletions
* The items being removed from the inventory
* @param additions
@ -1886,7 +1889,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see
* com.raytheon.viz.gfe.core.IParmManager#updateModel(com.raytheon.uf.common
* .dataplugin.gfe.db.objects.DatabaseID)
@ -1996,7 +1999,7 @@ public abstract class AbstractParmManager implements IParmManager {
/*
* (non-Javadoc)
*
*
* @see com.raytheon.viz.gfe.core.IParmManager#deleteTemporaryParms()
*/
@Override
@ -2069,7 +2072,7 @@ public abstract class AbstractParmManager implements IParmManager {
/**
* Returns the Virtual Parm index into vcModules for the given ParmID.
*
*
* @param pid
* ParmID to search for.
* @return The index of the ParmID if it is in vcModules. Else, -1.

View file

@ -181,6 +181,7 @@ import com.vividsolutions.jts.geom.Coordinate;
* 02/13/13 #1597 randerso Removed debug logging to improve performance
* Mar 13, 2013 1792 bsteffen Improve performance of gfe parm average
* ant time weighted average.
* Apr 02, 2013 #1774 randerso Fixed a possible deadlock issue.
* </pre>
*
* @author chammack
@ -3028,9 +3029,9 @@ public abstract class Parm implements Comparable<Parm> {
}
} finally {
// always release locks in reverse order of acquiring to prevent
// deadlock
otherParm.grids.releaseWriteLock();
// deadlock (note that the grids were swapped inside this try block)
this.grids.releaseWriteLock();
otherParm.grids.releaseWriteLock();
}
// the swap is now complete, send out the parm id changed notifications

View file

@ -65,6 +65,7 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
* 28May2010 2187 cjeanbap Added StdTextProductFactory
* functionality.
* 09 NOV 2012 1298 rferrel Changes for non-blocking dialog.
* 02apr2013 15564 mgamazaychikov Ensured awipsWanPil to be 10 characters space-padded long
* </pre>
*
* @author lvenable
@ -387,7 +388,8 @@ public class StoreTransmitDlg extends CaveSWTDialog implements
} else {
req = new OUPRequest();
OfficialUserProduct oup = new OfficialUserProduct();
String awipsWanPil = productIdTF.getText();
// make sure the awipsWanPil is exactly 10 characters space-padded long
String awipsWanPil = String.format("%-10s", productIdTF.getText().trim());
oup.setAwipsWanPil(awipsWanPil);
oup.setProductText(productText);

View file

@ -111,6 +111,8 @@ import com.raytheon.viz.ui.cmenu.AbstractRightClickAction;
* 11/30/2012 #1328 mschenke Made GFE use descriptor for time matching
* and time storage and manipulation
* 01/22/2013 #1518 randerso Removed use of Map with Parms as keys
* 03/28/2013 #1838 randerso Fixed selected time range when Select Grids When
* Stepping is enabled. Cleaned up deprecated warnings.
*
* </pre>
*
@ -563,8 +565,7 @@ public class GridCanvas extends Canvas implements IMessageClient {
List<String> popUpActions = new ArrayList<String>(0);
if (gmEditActions.length > 0) {
// Only show tools this parm supports
String[] parmTools = DataManager
.getCurrentInstance()
String[] parmTools = dataMgr
.getSmartToolInterface().listTools(parm);
List<String> parmToolList = Arrays
.asList(parmTools);
@ -815,8 +816,7 @@ public class GridCanvas extends Canvas implements IMessageClient {
grid = null;
}
grid.changeValidTime(lastDestinationTR, false);
grid.updateHistoryToModified(DataManager.getCurrentInstance()
.getWsId());
grid.updateHistoryToModified(dataMgr.getWsId());
newGrids.add(grid);
@ -924,8 +924,6 @@ public class GridCanvas extends Canvas implements IMessageClient {
Date clickTime = gridManager.getUtil().pixelToDate(e.x);
GridID clickGridID = new GridID(parm, clickTime);
gridManager.setSelectedTime(clickTime);
// make it active, make it inactive depending upon okToEdit
try {
if (clickGridID.grid() != null && clickGridID.grid().isOkToEdit()) {
@ -967,6 +965,8 @@ public class GridCanvas extends Canvas implements IMessageClient {
statusHandler.handle(Priority.PROBLEM, "Error activating parm "
+ parm.getParmID().compositeNameUI(), e1);
}
gridManager.setSelectedTime(clickTime);
}
private void resize() {

View file

@ -58,6 +58,8 @@ import com.raytheon.viz.gfe.jobs.AsyncProgressJob;
* Oct 8, 2009 njensen Initial creation
* Jan 8, 2013 1486 dgilling Support changes to BaseGfePyController.
* Jan 18, 2013 1509 njensen Garbage collect after running procedure
* Apr 03, 2013 1855 njensen Never dispose interpreters until shutdown and
* reuse interpreter if called from procedure
*
* </pre>
*
@ -69,12 +71,7 @@ public class ProcedureJob extends AbstractQueueJob<ProcedureRequest> {
/**
* Maximum number of jobs to keep for a given Data Manager.
*/
private final static int maxJobs = 3;
/**
* Amount of time to keep inactive jobs servers around.
*/
private final static long expireTime = 5L * 60L * 1000L;
private final static int maxJobs = 4;
/**
* Index of job with the queue. Will break code if not zero.
@ -121,14 +118,12 @@ public class ProcedureJob extends AbstractQueueJob<ProcedureRequest> {
*/
@Override
protected IStatus run(IProgressMonitor monitor) {
long starTime = System.currentTimeMillis();
boolean expireJob = instanceMap.get(dataMgr).get(QUEUE_JOB_INDEX) != this;
try {
python = ProcedureFactory.buildController(dataMgr);
} catch (JepException e) {
ProcedureJob.removeJob(dataMgr, this);
return new Status(IStatus.ERROR, StatusConstants.PLUGIN_ID,
"Error initializing guidance python", e);
"Error initializing procedure python", e);
}
try {
@ -151,15 +146,10 @@ public class ProcedureJob extends AbstractQueueJob<ProcedureRequest> {
if (request != null) {
request.requestComplete(null);
}
} else if (expireJob
&& ((instanceMap.get(dataMgr).size() > maxJobs) || (System
.currentTimeMillis() - starTime) > expireTime)) {
ProcedureJob.removeJob(dataMgr, this);
break;
}
} catch (Throwable t) {
statusHandler.handle(Priority.PROBLEM,
"Error running tool ", t);
"Error running procedure ", t);
if (request != null) {
request.requestComplete(t);
}
@ -229,6 +219,7 @@ public class ProcedureJob extends AbstractQueueJob<ProcedureRequest> {
instanceMap = new HashMap<DataManager, List<ProcedureJob>>();
}
Thread currentThread = Thread.currentThread();
List<ProcedureJob> jobList = instanceMap.get(dataMgr);
if (jobList == null) {
jobList = new ArrayList<ProcedureJob>();
@ -241,17 +232,26 @@ public class ProcedureJob extends AbstractQueueJob<ProcedureRequest> {
job.schedule();
}
boolean jobAvailable = false;
ProcedureJob alreadyOnThread = null;
for (ProcedureJob job : jobList) {
if (job.request == null) {
Thread jobThread = job.getThread();
if (currentThread == jobThread) {
// this occurs when a running procedure uses
// SmartScript.callProcedure()
// for efficiency we want to just stay on this thread
alreadyOnThread = job;
jobAvailable = true;
break;
} else if (job.request == null) {
jobAvailable = true;
break;
}
}
// All jobs for data manager are busy add another.
// To mimic AWIPS I allow any number of jobs.
// The check in the run will reduce the number to maxJobs.
if (jobAvailable == false) {
// All jobs for data manager are busy, add another if we haven't
// reached the limit.
if (alreadyOnThread == null && !jobAvailable
&& jobList.size() < maxJobs) {
ProcedureJob job = new ProcedureJob(dataMgr);
job.setSystem(true);
jobList.add(job);
@ -261,7 +261,18 @@ public class ProcedureJob extends AbstractQueueJob<ProcedureRequest> {
jobAvailable = true;
}
jobList.get(QUEUE_JOB_INDEX).enqueue(request);
if (alreadyOnThread != null) {
try {
alreadyOnThread.processRequest(request);
request.requestComplete(null);
} catch (Throwable t) {
statusHandler.handle(Priority.PROBLEM,
"Error running procedure ", t);
request.requestComplete(t);
}
} else {
jobList.get(QUEUE_JOB_INDEX).enqueue(request);
}
return jobAvailable;
}

View file

@ -1,19 +1,19 @@
/**
* 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.
**/
@ -62,7 +62,7 @@ import com.raytheon.viz.gfe.smarttool.script.SmartToolController;
/**
* Ported from Tool.py
*
*
* <pre>
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
@ -71,9 +71,10 @@ import com.raytheon.viz.gfe.smarttool.script.SmartToolController;
* Jan 08, 2013 1486 dgilling Support changes to BaseGfePyController.
* 02/14/2013 mnash Change QueryScript to use new Python concurrency
* 02/20/2013 #1597 randerso Added logging to support GFE Performance metrics
*
* 04/10/2013 16028 ryu Check for null seTime in execute()
*
* </pre>
*
*
* @author njensen
* @version 1.0
*/
@ -109,7 +110,7 @@ public class Tool {
/**
* Constructor
*
*
* @param aParmMgr
* the parm manager
* @param aToolName
@ -142,7 +143,7 @@ public class Tool {
/**
* Returns the objects that should be passed to the smart tool in python
*
*
* @param args
* the names of the arguments
* @param gridTimeRange
@ -225,7 +226,7 @@ public class Tool {
/**
* Returns the attribute for a particular parm's name
*
*
* @param arg
* the name of the parm
* @param attrStr
@ -260,7 +261,7 @@ public class Tool {
/**
* Returns the grid data for the specified parameters
*
*
* @param arg
* the name of the parm
* @param mode
@ -309,7 +310,7 @@ public class Tool {
/**
* Returns the grid history corresponding to the parm name and time range
*
*
* @param arg
* the name of the parm
* @param gridTimeRange
@ -349,7 +350,7 @@ public class Tool {
/**
* Returns the grid info corresponding to the parm name and time range
*
*
* @param arg
* the name of the parm
* @param gridTimeRange
@ -383,7 +384,7 @@ public class Tool {
/**
* Executes a smart tool
*
*
* @param toolName
* the name of the tool
* @param inputParm
@ -490,7 +491,8 @@ public class Tool {
final Date timeInfluence;
Date seTime = DataManagerUIFactory.getCurrentInstance()
.getSpatialDisplayManager().getSpatialEditorTime();
if (grids.length == 1 && grid.getGridTime().contains(seTime)) {
if (seTime != null &&
grids.length == 1 && grid.getGridTime().contains(seTime)) {
timeInfluence = seTime;
} else {
timeInfluence = grid.getGridTime().getStart();
@ -579,7 +581,7 @@ public class Tool {
/**
* Executes the numeric smart tool
*
*
* @param parmToEdit
* the parm to edit
* @param first
@ -651,7 +653,7 @@ public class Tool {
/**
* Cleans up a smart tool execution or failure and displays any missing data
* message
*
*
* @param parmToEdit
* the parm to edit
* @param save

View file

@ -54,6 +54,7 @@ import com.raytheon.viz.gfe.smarttool.Tool;
* ------------ ---------- ----------- --------------------------
* Jan 19, 2010 njensen Initial creation
* Jan 18, 2013 1509 njensen Garbage collect after running tool
* Apr 03, 2013 1855 njensen Never dispose interpreters until shutdown
*
* </pre>
*
@ -68,11 +69,6 @@ public class SmartToolJob extends AbstractQueueJob<SmartToolRequest> {
*/
private final static int maxJobs = 3;
/**
* Amount of time to keep inactive jobs servers around.
*/
private final static long expireTime = 5L * 60L * 1000L;
/**
* Index of job with the queue. Will break code if not zero.
*/
@ -114,14 +110,12 @@ public class SmartToolJob extends AbstractQueueJob<SmartToolRequest> {
@Override
protected IStatus run(IProgressMonitor monitor) {
SmartToolController python = null;
long starTime = System.currentTimeMillis();
boolean expireJob = instanceMap.get(dataMgr).get(QUEUE_JOB_INDEX) != this;
try {
python = SmartToolFactory.buildController(dataMgr);
} catch (JepException e) {
SmartToolJob.removeJob(dataMgr, this);
return new Status(IStatus.ERROR, StatusConstants.PLUGIN_ID,
"Error initializing guidance python", e);
"Error initializing smart tool python", e);
}
try {
@ -139,7 +133,6 @@ public class SmartToolJob extends AbstractQueueJob<SmartToolRequest> {
synchronized (this) {
if (request != null) {
starTime = System.currentTimeMillis();
python.processFileUpdates();
EditAction ea = request.getPreview()
.getEditAction();
@ -170,11 +163,6 @@ public class SmartToolJob extends AbstractQueueJob<SmartToolRequest> {
req = request;
request = null;
}
} else if (expireJob
&& ((instanceMap.get(dataMgr).size() > maxJobs) || (System
.currentTimeMillis() - starTime) > expireTime)) {
SmartToolJob.removeJob(dataMgr, this);
break;
}
}
} catch (InterruptedException e) {
@ -201,10 +189,8 @@ public class SmartToolJob extends AbstractQueueJob<SmartToolRequest> {
req = null;
}
}
System.err.println("SmartToolJob exit loop: "
+ monitor.isCanceled());
} finally {
System.err.println("shutdown instance of SmartToolJob");
System.err.println("Shutdown instance of SmartToolJob");
if (python != null) {
python.dispose();
python = null;
@ -277,10 +263,9 @@ public class SmartToolJob extends AbstractQueueJob<SmartToolRequest> {
}
}
// All jobs for data manager are busy add another.
// To mimic AWIPS I allow any number of jobs.
// The check in the run will reduce the number to maxJobs.
if (jobAvailable == false) {
// All jobs for data manager are busy, add another if we haven't reached
// the limit
if (!jobAvailable && jobList.size() < maxJobs) {
SmartToolJob job = new SmartToolJob(dataMgr);
job.setSystem(true);
jobList.add(job);

View file

@ -78,6 +78,7 @@ import com.vividsolutions.jts.geom.Coordinate;
* ------------ ---------- ----------- --------------------------
* Aug 03, 2010 mnash Initial creation
* MAR 05, 2013 15313 kshresth Added sampling for DMD
* Apr 11, 2013 DR 16030 D. Friedman Fix NPE.
*
* </pre>
*
@ -414,7 +415,7 @@ public class AbstractRadarResource<D extends IDescriptor> extends
displayedData.append("@" + dataMap.get("Azimuth"));
}
if (!dataMap.get("Mnemonic").equalsIgnoreCase("DMD"))
if (!"DMD".equalsIgnoreCase(dataMap.get("Mnemonic")))
{
if (labels.contains(InspectLabels.ICAO)) {
displayedData.append(' ').append(dataMap.get("ICAO"));

View file

@ -171,6 +171,16 @@ public abstract class AbstractVizPerspectiveManager implements
try {
mgr.activateDefaultTool(((AbstractEditor) part)
.getDefaultTool());
if (mgr.getToolManager().getSelectedModalTools()
.isEmpty()) {
// Hack due to tool activation not sending whether
// it should be activated or deactivated and is just
// toggling instead. TODO: Make AbstractModalTool
// required command parameter for activate or
// deactivate
mgr.activateDefaultTool(((AbstractEditor) part)
.getDefaultTool());
}
} catch (VizException e) {
statusHandler.handle(Priority.SIGNIFICANT,
"Error activating tool set", e);

View file

@ -27,6 +27,8 @@ import java.util.TimeZone;
import org.eclipse.core.runtime.ListenerList;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
@ -50,7 +52,8 @@ import com.raytheon.viz.ui.dialogs.AwipsCalendar;
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Dec 6, 2012 randerso Initial creation
* Dec 6, 2012 randerso Initial creation
* Apr 9, 2013 #1860 randerso Fix image disposed issued on Windows
*
* </pre>
*
@ -110,9 +113,15 @@ public class DateTimeEntry extends Composite {
Button button = new Button(this, SWT.PUSH);
ImageDescriptor imageDesc = UiPlugin
.getImageDescriptor("icons/calendar.gif");
Image image = imageDesc.createImage();
final Image image = imageDesc.createImage();
button.setImage(image);
image.dispose();
button.addDisposeListener(new DisposeListener() {
@Override
public void widgetDisposed(DisposeEvent e) {
image.dispose();
}
});
button.addSelectionListener(new SelectionAdapter() {
@Override

View file

@ -164,6 +164,10 @@ import com.vividsolutions.jts.io.WKTReader;
* 03/28/2013 DR 15973 Qinglu Lin Added adjustVertex() and applied it invalid polygon.
* 03/28/2013 DR 15974 D. Friedman Preserve the set of selected counties when recreating the polygon from the
* hatched area and remember marked counties outside the polygon on followup.
* 04/03/2013 1858 jsanchez Handled creating follow up warnings when created before 0z but issued after 0z.
* 03/13/2013 DR 15942 Qinglu Lin Added code to prevent small area from being toggled on that
* does not meet inclusionPercent/inclusionArea criteria.
* 04/10/2013 DR 16044 D. Friedman Fix NPE in getAllFipsInArea.
* </pre>
*
* @author mschenke
@ -293,7 +297,7 @@ public class WarngenLayer extends AbstractStormTrackResource {
GeometryFactory gf = new GeometryFactory();
LinearRing lr = gf.createLinearRing(coords);
hatchedArea = gf.createPolygon(lr, null);
if (! hatchedArea.isValid())
if (!hatchedArea.isValid())
hatchedArea = adjustVertex(hatchedArea);
hatchedWarningArea = createWarnedArea(
latLonToLocal(hatchedArea),
@ -1217,7 +1221,8 @@ public class WarngenLayer extends AbstractStormTrackResource {
for (String id : ids) {
if (fips.endsWith(id)) {
if (idsOutsidePolygon != null) {
idsOutsidePolygon.remove(fips.substring(0, 2) + '-' + id);
idsOutsidePolygon.remove(fips.substring(0, 2)
+ '-' + id);
}
newList.add(geom);
break;
@ -1320,7 +1325,8 @@ public class WarngenLayer extends AbstractStormTrackResource {
}
}
public void updateWarnedAreas(boolean snapHatchedAreaToPolygon) throws VizException {
public void updateWarnedAreas(boolean snapHatchedAreaToPolygon)
throws VizException {
updateWarnedAreas(snapHatchedAreaToPolygon, false);
}
@ -1331,8 +1337,8 @@ public class WarngenLayer extends AbstractStormTrackResource {
* eliminated.
* @throws VizException
*/
public void updateWarnedAreas(boolean snapHatchedAreaToPolygon, boolean preservedSelection)
throws VizException {
public void updateWarnedAreas(boolean snapHatchedAreaToPolygon,
boolean preservedSelection) throws VizException {
if (getPolygon() == null) {
return;
}
@ -1341,9 +1347,11 @@ public class WarngenLayer extends AbstractStormTrackResource {
Geometry warningArea = state.getWarningArea();
Geometry warningPolygon = state.getWarningPolygon();
Geometry newWarningArea = createWarnedArea(latLonToLocal((snapHatchedAreaToPolygon || warningArea == null) ? warningPolygon
: warningArea),
preservedSelection && warningArea != null ? latLonToLocal(warningArea) : null);
Geometry newWarningArea = createWarnedArea(
latLonToLocal((snapHatchedAreaToPolygon || warningArea == null) ? warningPolygon
: warningArea), preservedSelection
&& warningArea != null ? latLonToLocal(warningArea)
: null);
updateWarnedAreaState(newWarningArea, snapHatchedAreaToPolygon);
System.out.println("determining hatchedArea took "
@ -1360,7 +1368,8 @@ public class WarngenLayer extends AbstractStormTrackResource {
* inclusion filter
* @return
*/
private Geometry createWarnedArea(Geometry hatchedArea, Geometry preservedSelection) {
private Geometry createWarnedArea(Geometry hatchedArea,
Geometry preservedSelection) {
Geometry oldWarningPolygon = latLonToLocal(state.getOldWarningPolygon());
Geometry oldWarningArea = latLonToLocal(state.getOldWarningArea());
Geometry newHatchedArea = null;
@ -1381,33 +1390,39 @@ public class WarngenLayer extends AbstractStormTrackResource {
// Get intersection between county and hatched boundary
intersection = GeometryUtil.intersection(hatchedArea, prepGeom);
if (oldWarningArea != null) {
intersection = GeometryUtil.intersection(intersection, oldWarningArea);
intersection = GeometryUtil.intersection(intersection,
oldWarningArea);
}
if (intersection.isEmpty()) {
if (selectedFips == null
|| !selectedFips.contains(getFips(f))) {
continue;
} else if (! selectedFips.isEmpty()) {
} else if (!selectedFips.isEmpty()) {
/*
* Add whatever part of the area was previously hatched
* despite being outside the new polygon.
*/
if (selectedGeoms == null) {
selectedGeoms = new ArrayList<Geometry>();
GeometryUtil.buildGeometryList(selectedGeoms, preservedSelection);
GeometryUtil.buildGeometryList(selectedGeoms,
preservedSelection);
}
intersection = null;
String prefix = GeometryUtil.getPrefix(f.geometry.getUserData());
String prefix = GeometryUtil.getPrefix(f.geometry
.getUserData());
for (Geometry g : selectedGeoms) {
if (g.getUserData() != null) {
if (prefix.equals(GeometryUtil.getPrefix(g.getUserData()))) {
intersection = intersection == null ? g :
GeometryUtil.union(intersection, g);
if (prefix.equals(GeometryUtil.getPrefix(g
.getUserData()))) {
intersection = intersection == null ? g
: GeometryUtil.union(intersection,
g);
}
}
}
if (intersection == null) {
// This part of the area was not previously selected.
// This part of the area was not previously
// selected.
continue;
}
}
@ -1424,8 +1439,7 @@ public class WarngenLayer extends AbstractStormTrackResource {
else
include = filterArea(f, intersection, true)
&& (oldWarningPolygon == null
|| prepGeom.intersects(oldWarningPolygon)
|| isOldAreaOutsidePolygon(f));
|| prepGeom.intersects(oldWarningPolygon) || isOldAreaOutsidePolygon(f));
if (include) {
if (newHatchedArea == null) {
newHatchedArea = intersection;
@ -1508,7 +1522,7 @@ public class WarngenLayer extends AbstractStormTrackResource {
String[] gids = GeometryUtil.getGID(newArea);
boolean flag = false;
for (String gid : gids) {
if (! selectedGids.contains(gid)) {
if (!selectedGids.contains(gid)) {
flag = true;
break;
}
@ -1584,9 +1598,11 @@ public class WarngenLayer extends AbstractStormTrackResource {
warningAreaChanged();
}
}
/** Determine if the given area of the reference area passes the
* inclusion filter. Subroutine of {@link #filterArea}.
/**
* Determine if the given area of the reference area passes the inclusion
* filter. Subroutine of {@link #filterArea}.
*
* @param areaToConsider
* @param wholeArea
* @param areaInMetersSq
@ -1605,23 +1621,28 @@ public class WarngenLayer extends AbstractStormTrackResource {
boolean areaOk = areaInKmSqOfIntersection > getConfiguration()
.getHatchedAreaSource().getInclusionArea();
return getConfiguration().getHatchedAreaSource().getInclusionAndOr()
.equalsIgnoreCase("AND") ?
percentOk && areaOk : percentOk || areaOk;
.equalsIgnoreCase("AND") ? percentOk && areaOk : percentOk
|| areaOk;
}
/** Determine if a feature should be included based on how much of it
* is hatched and the configured inclusion criteria.
/**
* Determine if a feature should be included based on how much of it is
* hatched and the configured inclusion criteria.
*
* @param feature
* @param featureAreaToConsider the portion of the feature that is hatched
* @param localCoordinates if true, use local CRS; otherwise, use lat/lon
* @param anyAmountOfArea if true, ignore the configured criteria and
* include the feature if event a small amount is hatched.
* @param featureAreaToConsider
* the portion of the feature that is hatched
* @param localCoordinates
* if true, use local CRS; otherwise, use lat/lon
* @param anyAmountOfArea
* if true, ignore the configured criteria and include the
* feature if event a small amount is hatched.
* @return true if the feature should be included
*/
private boolean filterArea(GeospatialData feature, Geometry featureAreaToConsider, boolean localCRS) {
Geometry geom = localCRS ?
(Geometry) feature.attributes.get(GeospatialDataList.LOCAL_GEOM) :
feature.geometry;
private boolean filterArea(GeospatialData feature,
Geometry featureAreaToConsider, boolean localCRS) {
Geometry geom = localCRS ? (Geometry) feature.attributes
.get(GeospatialDataList.LOCAL_GEOM) : feature.geometry;
double areaOfGeom = (Double) feature.attributes.get(AREA);
if (filterCheck(featureAreaToConsider, geom, areaOfGeom))
@ -1642,18 +1663,19 @@ public class WarngenLayer extends AbstractStormTrackResource {
List<Geometry> geoms = new ArrayList<Geometry>();
GeometryUtil.buildGeometryList(geoms, oldWarningArea);
Geometry oldSelectedArea = null;
String prefix = GeometryUtil.getPrefix(feature.geometry.getUserData());
String prefix = GeometryUtil.getPrefix(feature.geometry
.getUserData());
for (Geometry g : geoms) {
if (g.getUserData() != null) {
if (prefix.equals(GeometryUtil.getPrefix(g.getUserData()))) {
oldSelectedArea = oldSelectedArea == null ? g :
GeometryUtil.union(oldSelectedArea, g);
oldSelectedArea = oldSelectedArea == null ? g
: GeometryUtil.union(oldSelectedArea, g);
}
}
}
if (oldSelectedArea != null) {
double ratioOfOldArea = featureAreaToConsider.getArea() /
oldSelectedArea.getArea();
double ratioOfOldArea = featureAreaToConsider.getArea()
/ oldSelectedArea.getArea();
/*
* Ideally, we would only allow the exact same area, but due to
* possible loss of precision in all of the calculations, we
@ -2104,6 +2126,10 @@ public class WarngenLayer extends AbstractStormTrackResource {
int day = warnRecord.getIssueTime().get(Calendar.DAY_OF_MONTH);
int hour = Integer.parseInt(m.group(1));
int minute = Integer.parseInt(m.group(2));
// Handles when a warning is created before 0Z but issued after 0Z
if (hour > warnRecord.getIssueTime().get(Calendar.HOUR_OF_DAY)) {
day -= 1;
}
frameTime = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
frameTime.set(Calendar.DAY_OF_MONTH, day);
frameTime.set(Calendar.HOUR_OF_DAY, hour);
@ -2512,6 +2538,8 @@ public class WarngenLayer extends AbstractStormTrackResource {
geom = geom.getFactory()
.createGeometryCollection(
parts.toArray(new Geometry[0]));
if (!filterArea(f, geom, false))
continue;
}
state.setWarningArea(GeometryUtil.union(
state.getWarningArea(), geom));
@ -2573,7 +2601,7 @@ public class WarngenLayer extends AbstractStormTrackResource {
Set<String> fipsIds = new HashSet<String>();
for (int n = 0; n < warningArea.getNumGeometries(); ++n) {
Geometry area = warningArea.getGeometryN(n);
fipsIds.add(getFips(((CountyUserData) area.getUserData()).entry));
fipsIds.add(getFips(area));
}
return fipsIds;
}
@ -2584,7 +2612,8 @@ public class WarngenLayer extends AbstractStormTrackResource {
return removeCounties(warningArea, set);
}
private Geometry removeCounties(Geometry warningArea, Set<String> fipsToRemove) {
private Geometry removeCounties(Geometry warningArea,
Set<String> fipsToRemove) {
if (fipsToRemove == null || fipsToRemove.isEmpty())
return warningArea;
List<Geometry> toKeep = new ArrayList<Geometry>(
@ -2818,12 +2847,13 @@ public class WarngenLayer extends AbstractStormTrackResource {
index[3] = index[2] + 1;
if (index[3] >= length)
index[3] = index[3] - length + 1;
ls1 = new LineSegment(coord[index[0]],coord[index[1]]);
ls2 = new LineSegment(coord[index[2]],coord[index[3]]);
ls1 = new LineSegment(coord[index[0]], coord[index[1]]);
ls2 = new LineSegment(coord[index[2]], coord[index[3]]);
intersectCoord = ls1.intersection(ls2);
if (intersectCoord != null) {
for (int j = 0; j < index.length-2; j++) {
d[j] = calculateDistance(intersectCoord,coord[index[j]]);
for (int j = 0; j < index.length - 2; j++) {
d[j] = calculateDistance(intersectCoord,
coord[index[j]]);
}
if (d[0] < d[1]) {
index[4] = index[0];
@ -2843,7 +2873,8 @@ public class WarngenLayer extends AbstractStormTrackResource {
d[5] = d[3];
indexOfTheOtherEnd[1] = index[2];
}
// index of the vertex on a line segment (line segment A), which will be moved along line segment A.
// index of the vertex on a line segment (line segment A),
// which will be moved along line segment A.
int replaceIndex;
// index of the vertex at the other end of line segment A.
int theOtherIndex;
@ -2851,32 +2882,40 @@ public class WarngenLayer extends AbstractStormTrackResource {
replaceIndex = index[4];
theOtherIndex = indexOfTheOtherEnd[0];
} else {
replaceIndex= index[5];
replaceIndex = index[5];
theOtherIndex = indexOfTheOtherEnd[1];
}
// move the bad vertex, which is on line segment A and has the shortest distance to intersectCoord,
// along line segment A to the other side of line segment B which intersects with line segment A.
// move the bad vertex, which is on line segment A and has
// the shortest distance to intersectCoord,
// along line segment A to the other side of line segment B
// which intersects with line segment A.
double delta;
double min = 0.00001;
if (Math.abs(intersectCoord.x - coord[replaceIndex].x) < min) {
// move the bad vertex along a vertical line segment.
delta = intersectCoord.y - coord[theOtherIndex].y;
coord[replaceIndex].y += 0.01 * (delta / Math.abs(delta));
} else if (Math.abs(intersectCoord.y - coord[replaceIndex].y) < min) {
coord[replaceIndex].y += 0.01 * (delta / Math
.abs(delta));
} else if (Math.abs(intersectCoord.y
- coord[replaceIndex].y) < min) {
// move the bad vertex along a horizontal line segment.
delta = intersectCoord.x - coord[theOtherIndex].x;
coord[replaceIndex].x += 0.01 * (delta / Math.abs(delta));
coord[replaceIndex].x += 0.01 * (delta / Math
.abs(delta));
} else {
// move the bad vertex along a line segment which is neither vertical nor horizontal.
double slope = computeSlope(coord, replaceIndex, theOtherIndex);
// move the bad vertex along a line segment which is
// neither vertical nor horizontal.
double slope = computeSlope(coord, replaceIndex,
theOtherIndex);
delta = coord[theOtherIndex].y - intersectCoord.y;
coord[replaceIndex].y = intersectCoord.y + 0.005 * (delta / Math.abs(delta));
coord[replaceIndex].x = (coord[replaceIndex].y - coord[theOtherIndex].y) / slope
+ coord[theOtherIndex].x;
coord[replaceIndex].y = intersectCoord.y + 0.005
* (delta / Math.abs(delta));
coord[replaceIndex].x = (coord[replaceIndex].y - coord[theOtherIndex].y)
/ slope + coord[theOtherIndex].x;
}
PolygonUtil.round(coord, 2);
if (replaceIndex == 0)
coord[length-1] = new Coordinate(coord[replaceIndex]);
coord[length - 1] = new Coordinate(coord[replaceIndex]);
else if (replaceIndex == length - 1)
coord[0] = new Coordinate(coord[replaceIndex]);
lr = gf.createLinearRing(coord);
@ -2896,10 +2935,10 @@ public class WarngenLayer extends AbstractStormTrackResource {
public double computeSlope(Coordinate[] coords, int i, int j) {
double min = 1.0E-08;
double dx = coords[i].x-coords[j].x;
double dx = coords[i].x - coords[j].x;
double slope = 0.0;
if (Math.abs(dx)>min) {
slope = (coords[i].y-coords[j].y)/dx;
if (Math.abs(dx) > min) {
slope = (coords[i].y - coords[j].y) / dx;
}
return slope;
}

View file

@ -0,0 +1,81 @@
#!/bin/bash
# DR #1846 - this DR will remove all reftimeindex indices from the metadata database.
PSQL="/awips2/psql/bin/psql"
#_timeindexname="timeindex"
RETRIEVE_INDEX_SQL="SELECT indexname FROM pg_indexes WHERE indexname LIKE '%reftimeindex%' ORDER BY indexname;"
_index_list_txt=indexlist.txt
#_reftime_indx_length=12
echo "INFO: update started"
# retrieve the reftime indices
${PSQL} -U awips -d metadata -c "${RETRIEVE_INDEX_SQL}" -t -o ${_index_list_txt}
if [ $? -ne 0 ]; then
echo "ERROR: Failed to retrieve the list of data uri indices."
echo "FATAL: The update has failed."
exit 1
fi
for index in `cat ${_index_list_txt}`;
do
# determine which table the index is in.
SQL="SELECT tablename FROM pg_indexes WHERE indexname = '${index}';"
table=`${PSQL} -U awips -d metadata -c "${SQL}" -t`
if [ $? -ne 0 ]; then
echo "ERROR: Failed to determine which table ${index} belongs to."
echo "FATAL: The update has failed."
exit 1
fi
#length=${#index}
#let LENGTH_DIFF=${length}-${_reftime_indx_length}
#prefix=${index:0:$LENGTH_DIFF}
# remove the index
${PSQL} -U awips -d metadata -c "DROP INDEX ${index};"
if [ $? -ne 0 ]; then
echo "ERROR: Failed to drop index - ${index}."
echo "FATAL: The update has failed."
exit 1
fi
# create the new index
SQL="CREATE INDEX ${index} ON ${table} USING btree(reftime, forecasttime);"
${PSQL} -U awips -d metadata -c "${SQL}"
if [ $? -ne 0 ]; then
echo "ERROR: Failed to create index ${table}${_timeindexname} on table ${table}."
echo "FATAL: The update has failed."
exit 1
fi
done
rm -f ${_index_list_txt}
RETRIEVE_INDEX_SQL="SELECT indexname FROM pg_indexes WHERE indexname LIKE '%fcsttimeindex%' ORDER BY indexname;"
# retrieve the fcsttime indices
${PSQL} -U awips -d metadata -c "${RETRIEVE_INDEX_SQL}" -t -o ${_index_list_txt}
if [ $? -ne 0 ]; then
echo "ERROR: Failed to retrieve the list of data uri indices."
echo "FATAL: The update has failed."
exit 1
fi
for index in `cat ${_index_list_txt}`;
do
# remove the index
${PSQL} -U awips -d metadata -c "DROP INDEX ${index};"
if [ $? -ne 0 ]; then
echo "ERROR: Failed to drop index - ${index}."
echo "FATAL: The update has failed."
exit 1
fi
done
rm -f ${_index_list_txt}
echo "INFO: the update has completed successfully!"
exit 0

View file

@ -0,0 +1,33 @@
#!/bin/bash
# DR #1846 - this update script will remove all datauri_idx indices from the metadata database
PSQL="/awips2/psql/bin/psql"
RETRIEVE_INDEX_SQL="SELECT indexname FROM pg_indexes WHERE indexname LIKE '%datauri_idx%' ORDER BY indexname;"
_index_list_txt=indexlist.txt
echo "INFO: update started"
# retrieve the indices
${PSQL} -U awips -d metadata -c "${RETRIEVE_INDEX_SQL}" -t -o ${_index_list_txt}
if [ $? -ne 0 ]; then
echo "ERROR: Failed to retrieve the list of data uri indices."
echo "FATAL: The update has failed."
exit 1
fi
for index in `cat ${_index_list_txt}`;
do
# remove the index
${PSQL} -U awips -d metadata -c "DROP INDEX ${index};"
if [ $? -ne 0 ]; then
echo "ERROR: Failed to drop index - ${index}."
echo "FATAL: The update has failed."
exit 1
fi
done
rm -f ${_index_list_txt}
echo "INFO: the update has completed successfully!"
exit 0

View file

@ -94,7 +94,7 @@ export AMQP_SPEC=$awips_home/python/share/amqp/amqp.0-10.xml
#read and interpret the command line arguments
#-------------------------------------------------------------------------
CONSOLE_FLAG=on
CONSOLE_LOGLEVEL=INFO
CONSOLE_LOGLEVEL=DEBUG
DEBUG_FLAG=off
PROFILE_FLAG=off
HIGH_MEM_FLAG=off

View file

@ -184,7 +184,7 @@ wrapper.trigger.action=RESTART
wrapper.console.format=M
# Log Level for console output. (See docs for log levels)
wrapper.console.loglevel=DEBUG
wrapper.console.loglevel=${CONSOLE_LOGLEVEL}
# Log file to use for wrapper output logging.
wrapper.logfile=${EDEX_HOME}/logs/edex-${EDEX_RUN_MODE}-YYYYMMDD.log

View file

@ -25,6 +25,7 @@ import javax.persistence.UniqueConstraint;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import org.hibernate.annotations.Index;
import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
@ -38,6 +39,7 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* May 25, 2011 rjpeter Initial creation
* Apr 4, 2013 1846 bkowal Added an index on refTime and forecastTime
*
* </pre>
*
@ -46,6 +48,16 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
*/
@Entity
@Table(name = "bufrmosAvn", uniqueConstraints = { @UniqueConstraint(columnNames = { "dataURI" }) })
/*
* Both refTime and forecastTime are included in the refTimeIndex since
* forecastTime is unlikely to be used.
*/
@org.hibernate.annotations.Table(
appliesTo = "bufrmosAvn",
indexes = {
@Index(name = "bufrmosAvn_refTimeIndex", columnNames = { "refTime", "forecastTime" } )
}
)
@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
@DynamicSerialize

View file

@ -25,6 +25,7 @@ import javax.persistence.UniqueConstraint;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import org.hibernate.annotations.Index;
import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
@ -38,6 +39,7 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* May 25, 2011 rjpeter Initial creation
* Apr 4, 2013 1846 bkowal Added an index on refTime and forecastTime
*
* </pre>
*
@ -46,6 +48,16 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
*/
@Entity
@Table(name = "bufrmosEta", uniqueConstraints = { @UniqueConstraint(columnNames = { "dataURI" }) })
/*
* Both refTime and forecastTime are included in the refTimeIndex since
* forecastTime is unlikely to be used.
*/
@org.hibernate.annotations.Table(
appliesTo = "bufrmosEta",
indexes = {
@Index(name = "bufrmosEta_refTimeIndex", columnNames = { "refTime", "forecastTime" } )
}
)
@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
@DynamicSerialize

View file

@ -25,6 +25,7 @@ import javax.persistence.UniqueConstraint;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import org.hibernate.annotations.Index;
import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
@ -38,6 +39,7 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* May 25, 2011 rjpeter Initial creation
* Apr 4, 2013 1846 bkowal Added an index on refTime and forecastTime
*
* </pre>
*
@ -46,6 +48,16 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
*/
@Entity
@Table(name = "bufrmosGfs", uniqueConstraints = { @UniqueConstraint(columnNames = { "dataURI" }) })
/*
* Both refTime and forecastTime are included in the refTimeIndex since
* forecastTime is unlikely to be used.
*/
@org.hibernate.annotations.Table(
appliesTo = "bufrmosGfs",
indexes = {
@Index(name = "bufrmosGfs_refTimeIndex", columnNames = { "refTime", "forecastTime" } )
}
)
@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
@DynamicSerialize

View file

@ -25,6 +25,7 @@ import javax.persistence.UniqueConstraint;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import org.hibernate.annotations.Index;
import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
@ -38,6 +39,7 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* May 25, 2011 rjpeter Initial creation
* Apr 4, 2013 1846 bkowal Added an index on refTime and forecastTime
*
* </pre>
*
@ -46,6 +48,16 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
*/
@Entity
@Table(name = "bufrmosHpc", uniqueConstraints = { @UniqueConstraint(columnNames = { "dataURI" }) })
/*
* Both refTime and forecastTime are included in the refTimeIndex since
* forecastTime is unlikely to be used.
*/
@org.hibernate.annotations.Table(
appliesTo = "bufrmosHpc",
indexes = {
@Index(name = "bufrmosHpc_refTimeIndex", columnNames = { "refTime", "forecastTime" } )
}
)
@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
@DynamicSerialize

View file

@ -25,6 +25,7 @@ import javax.persistence.UniqueConstraint;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import org.hibernate.annotations.Index;
import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
@ -38,6 +39,7 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* May 25, 2011 rjpeter Initial creation
* Apr 4, 2013 1846 bkowal Added an index on refTime and forecastTime
*
* </pre>
*
@ -46,6 +48,16 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
*/
@Entity
@Table(name = "bufrmosLamp", uniqueConstraints = { @UniqueConstraint(columnNames = { "dataURI" }) })
/*
* Both refTime and forecastTime are included in the refTimeIndex since
* forecastTime is unlikely to be used.
*/
@org.hibernate.annotations.Table(
appliesTo = "bufrmosLamp",
indexes = {
@Index(name = "bufrmosLamp_refTimeIndex", columnNames = { "refTime", "forecastTime" } )
}
)
@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
@DynamicSerialize

View file

@ -25,6 +25,7 @@ import javax.persistence.UniqueConstraint;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import org.hibernate.annotations.Index;
import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
@ -38,6 +39,7 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* May 25, 2011 rjpeter Initial creation
* Apr 4, 2013 1846 bkowal Added an index on refTime and forecastTime
*
* </pre>
*
@ -46,6 +48,16 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
*/
@Entity
@Table(name = "bufrmosMrf", uniqueConstraints = { @UniqueConstraint(columnNames = { "dataURI" }) })
/*
* Both refTime and forecastTime are included in the refTimeIndex since
* forecastTime is unlikely to be used.
*/
@org.hibernate.annotations.Table(
appliesTo = "bufrmosMrf",
indexes = {
@Index(name = "bufrmosMrf_refTimeIndex", columnNames = { "refTime", "forecastTime" } )
}
)
@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
@DynamicSerialize

View file

@ -26,6 +26,8 @@ import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import org.hibernate.annotations.Index;
import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
/**
@ -38,6 +40,7 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* May 25, 2011 rjpeter Initial creation
* Apr 4, 2013 1846 bkowal Added an index on refTime and forecastTime
*
* </pre>
*
@ -46,6 +49,16 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
*/
@Entity
@Table(name = "bufrmosNgm", uniqueConstraints = { @UniqueConstraint(columnNames = { "dataURI" }) })
/*
* Both refTime and forecastTime are included in the refTimeIndex since
* forecastTime is unlikely to be used.
*/
@org.hibernate.annotations.Table(
appliesTo = "bufrmosNgm",
indexes = {
@Index(name = "bufrmosNgm_refTimeIndex", columnNames = { "refTime", "forecastTime" } )
}
)
@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
@DynamicSerialize

View file

@ -30,6 +30,7 @@ import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import org.hibernate.annotations.Index;
import com.raytheon.uf.common.dataplugin.IDecoderGettable;
import com.raytheon.uf.common.dataplugin.PluginDataObject;
@ -49,6 +50,7 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
* 03/03/2007 908 bwoodle initial creation
* 09/15/2009 3027 njensen Use dates for times
* 09/21/2009 3072 bsteffen Removed times because they are stored in DataTime
* Apr 4, 2013 1846 bkowal Added an index on refTime and forecastTime
*
*
* </pre>
@ -58,6 +60,16 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
*/
@Entity
@Table(name = "ccfp", uniqueConstraints = { @UniqueConstraint(columnNames = { "dataURI" }) })
/*
* Both refTime and forecastTime are included in the refTimeIndex since
* forecastTime is unlikely to be used.
*/
@org.hibernate.annotations.Table(
appliesTo = "ccfp",
indexes = {
@Index(name = "ccfp_refTimeIndex", columnNames = { "refTime", "forecastTime" } )
}
)
@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
@DynamicSerialize

View file

@ -72,10 +72,15 @@
<from uri="timer://smartInitTimer?fixedRate=true&amp;period=30000" />
<bean ref="smartInitQueue" method="fireSmartInit" />
</route>
</camelContext>
<camelContext id="clusteredGfeIngestRoutes"
xmlns="http://camel.apache.org/schema/spring"
errorHandlerRef="errorHandler" autoStartup="false">
<!-- gfeIngestNotification not clustered and has two threads to read due to throughput of messages during model run times -->
<!-- gfeIngestNotification must be a singleton and has 4 threads to read due to throughput of messages during model run times -->
<route id="gfeIngestNotification">
<from uri="jms-generic:queue:gfeDataURINotification?destinationResolver=#qpidDurableResolver&amp;concurrentConsumers=2" />
<from uri="jms-generic:queue:gfeDataURINotification?destinationResolver=#qpidDurableResolver&amp;concurrentConsumers=4" />
<doTry>
<bean ref="serializationUtil" method="transformFromThrift" />
<bean ref="gfeIngestFilter" method="filterDataURINotifications" />
@ -86,11 +91,6 @@
</doCatch>
</doTry>
</route>
</camelContext>
<camelContext id="clusteredGfeIngestRoutes"
xmlns="http://camel.apache.org/schema/spring"
errorHandlerRef="errorHandler" autoStartup="false">
<!-- Smart Init Routes -->
<!-- main route now handled through the gfeIngestNotification -->

View file

@ -21,7 +21,6 @@
package com.raytheon.edex.plugin.gfe.cache.d2dparms;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
@ -40,19 +39,16 @@ import com.raytheon.edex.plugin.gfe.server.database.D2DGridDatabase;
import com.raytheon.edex.plugin.gfe.server.database.D2DSatDatabase;
import com.raytheon.edex.plugin.gfe.server.database.D2DSatDatabaseManager;
import com.raytheon.edex.plugin.gfe.server.database.GridDatabase;
import com.raytheon.edex.plugin.gfe.util.SendNotifications;
import com.raytheon.edex.plugin.gfe.server.notify.GfeIngestNotificationFilter;
import com.raytheon.uf.common.dataplugin.PluginException;
import com.raytheon.uf.common.dataplugin.gfe.GridDataHistory;
import com.raytheon.uf.common.dataplugin.gfe.db.objects.DatabaseID;
import com.raytheon.uf.common.dataplugin.gfe.db.objects.ParmID;
import com.raytheon.uf.common.dataplugin.gfe.exception.GfeException;
import com.raytheon.uf.common.dataplugin.gfe.server.message.ServerResponse;
import com.raytheon.uf.common.dataplugin.gfe.server.notify.GridUpdateNotification;
import com.raytheon.uf.common.message.WsId;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.status.UFStatus.Priority;
import com.raytheon.uf.common.time.TimeRange;
import com.raytheon.uf.edex.database.DataAccessLayerException;
import com.raytheon.uf.edex.site.SiteAwareRegistry;
@ -70,7 +66,8 @@ import com.raytheon.uf.edex.site.SiteAwareRegistry;
* D2DParmIdCache toGfeIngestNotificationFilter.
* Added code to match wind components and send
* GridUpdateNotifications.
* Mar 20, 2013 #1774 randerso Changde to use GFDD2DDao
* Mar 20, 2013 #1774 randerso Changed to use GFDD2DDao
* Apr 01, 2013 #1774 randerso Moved wind component checking to GfeIngestNotificaionFilter
*
* </pre>
*
@ -87,20 +84,9 @@ public class D2DParmIdCache {
private static final Pattern RangeFilter = Pattern
.compile("(.*?)\\d{1,2}hr");
private static final Map<String, String> WIND_COMP_PARMS;
static {
WIND_COMP_PARMS = new HashMap<String, String>();
WIND_COMP_PARMS.put("uw", "vw");
WIND_COMP_PARMS.put("vw", "uw");
WIND_COMP_PARMS.put("ws", "wd");
WIND_COMP_PARMS.put("wd", "ws");
}
/** Map containing the ParmIDs */
private Map<DatabaseID, Set<ParmID>> parmIds;
private Map<ParmID, Set<TimeRange>> windComps;
private static D2DParmIdCache instance;
public static synchronized D2DParmIdCache getInstance() {
@ -115,7 +101,6 @@ public class D2DParmIdCache {
*/
public D2DParmIdCache() {
parmIds = new HashMap<DatabaseID, Set<ParmID>>();
windComps = new HashMap<ParmID, Set<TimeRange>>();
}
/**
@ -360,18 +345,9 @@ public class D2DParmIdCache {
for (DatabaseID dbId : dbsToRemove) {
GridParmManager.removeDbFromMap(dbId);
}
// purge the windComps
List<ParmID> wcToRemove = new ArrayList<ParmID>();
synchronized (windComps) {
for (ParmID id : windComps.keySet()) {
if (dbsToRemove.contains(id.getDbId())) {
wcToRemove.add(id);
}
}
for (ParmID id : wcToRemove) {
windComps.remove(id);
}
}
// inform GfeIngestNotificationFilter of removed dbs
GfeIngestNotificationFilter.purgeDbs(dbsToRemove);
statusHandler.handle(Priority.EVENTA,
"Total time to build D2DParmIdCache for " + siteID
@ -404,60 +380,6 @@ public class D2DParmIdCache {
public void processGridUpdateNotification(GridUpdateNotification gun) {
ParmID parmId = gun.getParmId();
String otherCompName = WIND_COMP_PARMS.get(parmId.getParmName());
if (otherCompName == null) {
// if it's not a wind component just add it to the cache
putParmID(parmId);
} else {
Set<TimeRange> windTrs = null;
synchronized (windComps) {
// add this parms times to windComps map
Set<TimeRange> trs = windComps.get(parmId);
if (trs == null) {
trs = new HashSet<TimeRange>();
windComps.put(parmId, trs);
}
trs.addAll(gun.getHistories().keySet());
// get the other components times
ParmID otherCompId = new ParmID(otherCompName,
parmId.getDbId(), parmId.getParmLevel());
Set<TimeRange> otherTrs = windComps.get(otherCompId);
// if we have both components
if (otherTrs != null) {
// find times where we have both components
windTrs = new HashSet<TimeRange>(trs);
windTrs.retainAll(otherTrs);
// remove the matching times since we don't need them
// anymore
trs.removeAll(windTrs);
otherTrs.removeAll(windTrs);
}
}
// if we found any matching times for both components
if (windTrs != null && !windTrs.isEmpty()) {
// add the wind parmId to the cache
ParmID windId = new ParmID("wind", parmId.getDbId(),
parmId.getParmLevel());
putParmID(windId);
// create GridUpdateNotifications for the wind parm
Map<TimeRange, List<GridDataHistory>> history = new HashMap<TimeRange, List<GridDataHistory>>();
ArrayList<GridUpdateNotification> guns = new ArrayList<GridUpdateNotification>(
windTrs.size());
for (TimeRange tr : windTrs) {
history.put(tr, Arrays.asList(new GridDataHistory(
GridDataHistory.OriginType.INITIALIZED, windId, tr,
null, (WsId) null)));
guns.add(new GridUpdateNotification(windId, tr, history,
null, windId.getDbId().getSiteId()));
}
SendNotifications.send(guns);
}
}
putParmID(parmId);
}
}

View file

@ -30,6 +30,8 @@ import com.raytheon.uf.common.dataplugin.gfe.exception.GfeException;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 04/08/08 #875 bphillip Initial Creation
* 03/28/13 #1837 dgilling Implement missing constructors from
* super-class.
*
* </pre>
*
@ -40,6 +42,10 @@ public class GfeConfigurationException extends GfeException {
private static final long serialVersionUID = 1L;
public GfeConfigurationException() {
super();
}
/**
* @param aCause
*/
@ -58,4 +64,7 @@ public class GfeConfigurationException extends GfeException {
super(aCause, anException);
}
public GfeConfigurationException(Throwable anException) {
super(anException);
}
}

View file

@ -0,0 +1,59 @@
/**
* 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.edex.plugin.gfe.exception;
/**
* Exception thrown when a database table referenced in localMaps.py cannot be
* located in the maps database.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Mar 28, 2013 dgilling Initial creation
*
* </pre>
*
* @author dgilling
* @version 1.0
*/
public class MissingLocalMapsException extends GfeConfigurationException {
private static final long serialVersionUID = 1L;
public MissingLocalMapsException() {
super();
}
public MissingLocalMapsException(String message) {
super(message);
}
public MissingLocalMapsException(String message, Throwable cause) {
super(message, cause);
}
public MissingLocalMapsException(Throwable cause) {
super(cause);
}
}

View file

@ -46,10 +46,10 @@ import org.opengis.filter.Filter;
import org.opengis.filter.FilterFactory2;
import org.opengis.geometry.BoundingBox;
import com.raytheon.edex.plugin.gfe.exception.MissingLocalMapsException;
import com.raytheon.uf.common.dataquery.db.QueryResult;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.status.UFStatus.Priority;
import com.raytheon.uf.edex.core.EDEXUtil;
import com.raytheon.uf.edex.database.tasks.SqlQueryTask;
import com.vividsolutions.jts.geom.Geometry;
@ -68,6 +68,8 @@ import com.vividsolutions.jts.geom.Polygon;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Sep 18, 2012 #1091 randerso Initial creation
* Mar 28, 2013 #1837 dgilling Change error handling in
* getLastUpdated().
*
* </pre>
*
@ -172,11 +174,16 @@ public class DbShapeSource {
/**
* @throws IOException
* @throws MissingLocalMapsException
*
*/
public void open() throws IOException {
public void open() throws IOException, MissingLocalMapsException {
DataStore dataStore = getDataStore();
schema = dataStore.getSchema(this.tableName);
try {
schema = dataStore.getSchema(this.tableName);
} catch (IOException e) {
throw new MissingLocalMapsException(e);
}
shapeField = schema.getGeometryDescriptor().getLocalName();
featureCollection = null;
@ -247,7 +254,8 @@ public class DbShapeSource {
return featureIterator.next();
}
public synchronized ShapeType getShapeType() throws IOException {
public synchronized ShapeType getShapeType() throws IOException,
MissingLocalMapsException {
if (this.type == null) {
boolean closeIt = false;
if (schema == null) {
@ -418,6 +426,9 @@ public class DbShapeSource {
} catch (IOException e) {
statusHandler.error(
"IOException reading " + dbShape.getTableName(), e);
} catch (MissingLocalMapsException e) {
statusHandler.error("Could not locate " + dbShape.getTableName()
+ " in the maps database.", e);
} finally {
try {
if (dbShape != null) {
@ -431,18 +442,17 @@ public class DbShapeSource {
System.out.println("Took " + (System.currentTimeMillis() - t0) + " ms");
}
public Date getLastUpdated() {
Date retVal = new Date();
public Date getLastUpdated() throws MissingLocalMapsException {
String sqlQuery = "SELECT import_time FROM " + SCHEMA_NAME
+ ".map_version WHERE table_name = '" + this.tableName + "';";
try {
SqlQueryTask task = new SqlQueryTask(sqlQuery, DB_NAME);
QueryResult result = task.execute();
retVal = (Date) result.getRowColumnValue(0, 0);
return (Date) result.getRowColumnValue(0, 0);
} catch (Exception e) {
statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(), e);
// statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(),
// e);
throw new MissingLocalMapsException(e);
}
return retVal;
}
}

View file

@ -47,6 +47,7 @@ import org.opengis.metadata.spatial.PixelOrientation;
import org.opengis.referencing.operation.MathTransform;
import com.raytheon.edex.plugin.gfe.config.IFPServerConfig;
import com.raytheon.edex.plugin.gfe.exception.MissingLocalMapsException;
import com.raytheon.edex.plugin.gfe.reference.DbShapeSource.ShapeType;
import com.raytheon.edex.plugin.gfe.textproducts.AreaDictionaryMaker;
import com.raytheon.edex.plugin.gfe.textproducts.CombinationsFileMaker;
@ -73,6 +74,7 @@ import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.status.UFStatus.Priority;
import com.raytheon.uf.common.util.FileUtil;
import com.raytheon.uf.edex.core.EDEXUtil;
import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.GeometryFactory;
@ -96,6 +98,9 @@ import com.vividsolutions.jts.simplify.TopologyPreservingSimplifier;
* Jun 25, 2008 #1210 randerso Modified to get directories from UtilityContext
* Oct 13, 2008 #1607 njensen Added genCombinationsFiles()
* Sep 18, 2012 #1091 randerso Changed to use Maps.py and localMaps.py
* Mar 28, 2013 #1837 dgilling Better error reporting if a map table
* from localMaps.py could not be found,
* warnings clean up.
*
* </pre>
*
@ -243,28 +248,21 @@ public class MapManager {
/**
* @param maps
*/
@SuppressWarnings("unused")
/**
* Searches the parent directory of a provided list of shape files to
* determine whether or not they contain a file that is newer than any files
* in a specified directory.
*
* @param maps
* An array of shape files.
* @param directory
* A directory containing the resultant edit areas from the shape
* files.
* @return True, if any file in the parent folder of any of the shape files
* is newer than anything in the specified directory. Else, false.
*/
private boolean updateNeeded(List<DbShapeSource> maps,
final String directory) {
// calc newest file inside maps.directory()
long newestSource = Long.MIN_VALUE;
List<DbShapeSource> failedMaps = new ArrayList<DbShapeSource>();
for (DbShapeSource map : maps) {
newestSource = Math.max(newestSource, map.getLastUpdated()
.getTime());
try {
newestSource = Math.max(newestSource, map.getLastUpdated()
.getTime());
} catch (MissingLocalMapsException e) {
reportMissingLocalMap(map, "retrieving last update time", e);
failedMaps.add(map);
}
}
maps.removeAll(failedMaps);
// Determine time of last modification of Maps.py, serverConfig,
// localConfig, localMaps, and siteConfig.
@ -388,6 +386,10 @@ public class MapManager {
}
makeReferenceData(m);
} catch (MissingLocalMapsException e) {
String error = reportMissingLocalMap(m, "retrieving map data",
e);
_mapErrors.add(error);
} catch (Exception e) {
String error = "********* EDIT AREA GENERATION ERROR - MakeReferenceData *********\n"
+ "Error in generating edit areas, map #"
@ -578,8 +580,8 @@ public class MapManager {
// old one, write a warning to the log.
ReferenceData other = null;
try {
other = (ReferenceData) SerializationUtil
.jaxbUnmarshalFromXmlFile(path);
other = SerializationUtil.jaxbUnmarshalFromXmlFile(
ReferenceData.class, path);
} catch (Exception e) {
statusHandler.error("Error reading edit area file "
+ path.getAbsolutePath(), e);
@ -965,4 +967,23 @@ public class MapManager {
return s;
}
private String reportMissingLocalMap(DbShapeSource missingMap,
String operation, MissingLocalMapsException e) {
String errorLog = "Error in " + operation + " for map named ["
+ missingMap.getDisplayName() + "]: Could not find table ["
+ missingMap.getTableName() + "] in maps database.";
statusHandler.error(errorLog, e);
String errorUser = errorLog
+ " Edit areas for this map will not be generated."
+ " Check site ["
+ _config.getSiteID().get(0)
+ "] localMaps.py configuration and verify all necessary shape files have been imported.";
EDEXUtil.sendMessageAlertViz(Priority.ERROR,
"com.raytheon.edex.plugin.gfe", "GFE", "GFE", errorUser,
errorUser, null);
return errorLog;
}
}

View file

@ -101,6 +101,7 @@ import com.raytheon.uf.edex.database.DataAccessLayerException;
* data instead of full grid. Added logging to support
* GFE performance testing
* 03/19/2013 #1774 randerso Fix accumulative grid time ranges
* Apr 01, 2013 #1774 randerso Moved wind component checking to GfeIngestNotificaionFilter
*
* </pre>
*
@ -197,7 +198,7 @@ public class D2DGridDatabase extends VGridDatabase {
private final IPerformanceStatusHandler perfLog = PerformanceStatus
.getHandler("GFE:");
private static class D2DParm {
public static class D2DParm {
private ParmID parmId;
private GridParmInfo gpi;
@ -1174,7 +1175,7 @@ public class D2DGridDatabase extends VGridDatabase {
// no-op
}
public ParmID getParmId(String d2dParmName, Level level) {
public D2DParm getD2DParm(String d2dParmName, Level level) {
String gfeParmName = getGfeParmName(d2dParmName);
String levelName = GridTranslator.getShortLevelName(level
@ -1182,24 +1183,26 @@ public class D2DGridDatabase extends VGridDatabase {
.getLeveltwovalue());
D2DParm parm = d2dParms.get(compositeName(gfeParmName, levelName));
if (parm != null) {
return parm.getParmId();
}
Matcher matcher = parmHrPattern.matcher(d2dParmName);
if (matcher.find()) {
String abbrev = matcher.group(1);
gfeParmName = getGfeParmName(abbrev);
parm = d2dParms.get(compositeName(gfeParmName, levelName));
if (parm != null) {
return parm.getParmId();
if (parm == null) {
// try to find one with duration (XXXnnhr)
Matcher matcher = parmHrPattern.matcher(d2dParmName);
if (matcher.find()) {
String abbrev = matcher.group(1);
gfeParmName = getGfeParmName(abbrev);
parm = d2dParms.get(compositeName(gfeParmName, levelName));
}
}
return null;
if (parm == null) {
statusHandler.warn("No gridParameterInfo found for "
+ compositeName(gfeParmName, levelName) + ":"
+ dbId.getModelId() + ". Check parameterInfo file.");
}
return parm;
}
private String getGfeParmName(String d2dParmName) {
public String getGfeParmName(String d2dParmName) {
String gfeParmName = null;
try {
gfeParmName = ParameterMapper.getInstance().lookupAlias(

View file

@ -37,6 +37,7 @@ import com.raytheon.edex.plugin.gfe.exception.GfeConfigurationException;
import com.raytheon.edex.plugin.gfe.server.D2DSatParm;
import com.raytheon.edex.plugin.gfe.server.GridParmManager;
import com.raytheon.edex.plugin.gfe.server.database.D2DGridDatabase;
import com.raytheon.edex.plugin.gfe.server.database.D2DGridDatabase.D2DParm;
import com.raytheon.edex.plugin.gfe.server.database.D2DSatDatabase;
import com.raytheon.edex.plugin.gfe.server.database.D2DSatDatabaseManager;
import com.raytheon.edex.plugin.gfe.smartinit.SmartInitQueue;
@ -76,6 +77,7 @@ import com.raytheon.uf.edex.core.EDEXUtil;
* Mar 25, 2013 1823 dgilling Trigger SAT smart init based only on record's
* SectorId and PhysicalElement.
* Mar 20, 2013 #1774 randerso Refactor to use grid durations from D2DGridDatabase
* Apr 01, 2013 #1774 randerso Moved wind component checking to GfeIngestNotificaionFilter
*
* </pre>
*
@ -88,10 +90,17 @@ public class GfeIngestNotificationFilter {
private static final transient IUFStatusHandler statusHandler = UFStatus
.getHandler(GfeIngestNotificationFilter.class);
// private final IPerformanceStatusHandler perfLog = PerformanceStatus
// .getHandler("GFE:");
private static Map<ParmID, Set<Integer>> windComps = new HashMap<ParmID, Set<Integer>>();
private SmartInitQueue smartInitQueue = null;
public void filterDataURINotifications(DataURINotificationMessage message)
throws Exception {
// ITimer timer = TimeUtil.getTimer();
// timer.start();
Date arrivalTime = new Date();
List<GridRecord> gridRecords = new ArrayList<GridRecord>(500);
List<SatelliteRecord> satRecords = new ArrayList<SatelliteRecord>(100);
@ -109,6 +118,10 @@ public class GfeIngestNotificationFilter {
if (!satRecords.isEmpty()) {
filterSatelliteRecords(satRecords, arrivalTime);
}
// timer.stop();
// perfLog.logDuration(
// "GfeIngestNotificationFilter: processing DataURINotificationMessage",
// timer.getElapsedTime());
}
public void filterGridRecords(List<GridRecord> gridRecords, Date arrivalTime)
@ -154,20 +167,62 @@ public class GfeIngestNotificationFilter {
sendNotification(dbInv);
}
String abbrev = grid.getParameter().getAbbreviation();
String d2dParamName = grid.getParameter().getAbbreviation();
Level level = grid.getLevel();
Integer fcstHour = grid.getDataTime().getFcstTime();
D2DGridDatabase db = (D2DGridDatabase) GridParmManager
.getDb(dbId);
ParmID parmID = db.getParmId(abbrev, level);
String gfeParamName = db.getGfeParmName(d2dParamName);
D2DParm parm = db.getD2DParm(d2dParamName, level);
if (parm == null) {
continue;
}
ParmID parmID = parm.getParmId();
// check for wind
String otherComponent = null;
String[] components = parm.getComponents();
if (components.length > 1) {
if (components[0].equals(gfeParamName)) {
otherComponent = components[1];
} else {
otherComponent = components[0];
}
}
// if wind see if other component is available
if (otherComponent != null) {
ParmID otherPid = new ParmID(otherComponent,
parmID.getDbId(), parmID.getParmLevel());
synchronized (windComps) {
// get the other components times
Set<Integer> otherTimes = windComps.get(otherPid);
// if we don't have the other component for this
// fcstHour
if (otherTimes == null
|| !otherTimes.remove(fcstHour)) {
// need to wait for other component
ParmID compPid = new ParmID(gfeParamName,
parmID.getDbId(), parmID.getParmLevel());
Set<Integer> times = windComps.get(compPid);
if (times == null) {
times = new HashSet<Integer>();
windComps.put(compPid, times);
}
times.add(fcstHour);
continue;
}
}
}
List<TimeRange> trs = gridInv.get(parmID);
if (trs == null) {
trs = new ArrayList<TimeRange>();
gridInv.put(parmID, trs);
}
Integer fcstHour = grid.getDataTime().getFcstTime();
TimeRange tr = db.getTimeRange(parmID, fcstHour);
if (tr != null) {
trs.add(tr);
@ -325,4 +380,19 @@ public class GfeIngestNotificationFilter {
public void setSmartInitQueue(SmartInitQueue smartInitQueue) {
this.smartInitQueue = smartInitQueue;
}
public static void purgeDbs(List<DatabaseID> dbsToRemove) {
List<ParmID> wcToRemove = new ArrayList<ParmID>();
synchronized (windComps) {
for (ParmID id : windComps.keySet()) {
if (dbsToRemove.contains(id.getDbId())) {
wcToRemove.add(id);
}
}
for (ParmID id : wcToRemove) {
windComps.remove(id);
}
}
}
}

View file

@ -115,7 +115,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -115,7 +115,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -63,7 +63,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -64,7 +64,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -115,7 +115,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -217,7 +217,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -115,7 +115,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -43,7 +43,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -77,7 +77,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -64,7 +64,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -22,8 +22,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>weasd</short_name>
<long_name>water equivalent of accumulated snow depth</long_name>
<units>ml</units>
<udunits>mil</udunits>
<units>mm</units>
<udunits>millimeter</udunits>
<uiname>waterEqvAccSnowDepth</uiname>
<valid_range>0.0</valid_range>
<valid_range>1000.0</valid_range>
@ -106,7 +106,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
@ -258,7 +258,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>cicep</short_name>
<long_name>Categorical ice pellets</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalIcePlt</uiname>
<valid_range>0.0</valid_range>
@ -333,7 +333,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>cfrzr</short_name>
<long_name>Categorical freezing rain</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalFrzRain</uiname>
<valid_range>0.0</valid_range>
@ -378,7 +378,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>csnow</short_name>
<long_name>Categorical snow</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalSnow</uiname>
<valid_range>0.0</valid_range>
@ -491,7 +491,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>crain</short_name>
<long_name>Categorical rain</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalRain</uiname>
<valid_range>0.0</valid_range>

View file

@ -22,8 +22,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>weasd</short_name>
<long_name>water equivalent of accumulated snow depth</long_name>
<units>ml</units>
<udunits>mil</udunits>
<units>mm</units>
<udunits>millimeter</udunits>
<uiname>waterEqvAccSnowDepth</uiname>
<valid_range>0.0</valid_range>
<valid_range>1000.0</valid_range>
@ -106,7 +106,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
@ -258,7 +258,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>cicep</short_name>
<long_name>Categorical ice pellets</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalIcePlt</uiname>
<valid_range>0.0</valid_range>
@ -333,7 +333,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>cfrzr</short_name>
<long_name>Categorical freezing rain</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalFrzRain</uiname>
<valid_range>0.0</valid_range>
@ -378,7 +378,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>csnow</short_name>
<long_name>Categorical snow</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalSnow</uiname>
<valid_range>0.0</valid_range>
@ -491,7 +491,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>crain</short_name>
<long_name>Categorical rain</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalRain</uiname>
<valid_range>0.0</valid_range>

View file

@ -22,8 +22,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>weasd</short_name>
<long_name>water equivalent of accumulated snow depth</long_name>
<units>ml</units>
<udunits>mil</udunits>
<units>mm</units>
<udunits>millimeter</udunits>
<uiname>waterEqvAccSnowDepth</uiname>
<valid_range>0.0</valid_range>
<valid_range>1000.0</valid_range>
@ -106,7 +106,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
@ -258,7 +258,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>cicep</short_name>
<long_name>Categorical ice pellets</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalIcePlt</uiname>
<valid_range>0.0</valid_range>
@ -333,7 +333,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>cfrzr</short_name>
<long_name>Categorical freezing rain</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalFrzRain</uiname>
<valid_range>0.0</valid_range>
@ -378,7 +378,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>csnow</short_name>
<long_name>Categorical snow</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalSnow</uiname>
<valid_range>0.0</valid_range>
@ -491,7 +491,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>crain</short_name>
<long_name>Categorical rain</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalRain</uiname>
<valid_range>0.0</valid_range>

View file

@ -22,8 +22,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>weasd</short_name>
<long_name>water equivalent of accumulated snow depth</long_name>
<units>ml</units>
<udunits>mil</udunits>
<units>mm</units>
<udunits>millimeter</udunits>
<uiname>waterEqvAccSnowDepth</uiname>
<valid_range>0.0</valid_range>
<valid_range>1000.0</valid_range>
@ -106,7 +106,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
@ -258,7 +258,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>cicep</short_name>
<long_name>Categorical ice pellets</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalIcePlt</uiname>
<valid_range>0.0</valid_range>
@ -333,7 +333,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>cfrzr</short_name>
<long_name>Categorical freezing rain</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalFrzRain</uiname>
<valid_range>0.0</valid_range>
@ -378,7 +378,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>csnow</short_name>
<long_name>Categorical snow</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalSnow</uiname>
<valid_range>0.0</valid_range>
@ -491,7 +491,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>crain</short_name>
<long_name>Categorical rain</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalRain</uiname>
<valid_range>0.0</valid_range>

View file

@ -22,8 +22,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>weasd</short_name>
<long_name>water equivalent of accumulated snow depth</long_name>
<units>ml</units>
<udunits>mil</udunits>
<units>mm</units>
<udunits>millimeter</udunits>
<uiname>waterEqvAccSnowDepth</uiname>
<valid_range>0.0</valid_range>
<valid_range>1000.0</valid_range>
@ -106,7 +106,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
@ -258,7 +258,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>cicep</short_name>
<long_name>Categorical ice pellets</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalIcePlt</uiname>
<valid_range>0.0</valid_range>
@ -333,7 +333,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>cfrzr</short_name>
<long_name>Categorical freezing rain</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalFrzRain</uiname>
<valid_range>0.0</valid_range>
@ -378,7 +378,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>csnow</short_name>
<long_name>Categorical snow</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalSnow</uiname>
<valid_range>0.0</valid_range>
@ -491,7 +491,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>crain</short_name>
<long_name>Categorical rain</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalRain</uiname>
<valid_range>0.0</valid_range>

View file

@ -22,8 +22,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>weasd</short_name>
<long_name>water equivalent of accumulated snow depth</long_name>
<units>ml</units>
<udunits>mil</udunits>
<units>mm</units>
<udunits>millimeter</udunits>
<uiname>waterEqvAccSnowDepth</uiname>
<valid_range>0.0</valid_range>
<valid_range>1000.0</valid_range>
@ -106,7 +106,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
@ -258,7 +258,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>cicep</short_name>
<long_name>Categorical ice pellets</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalIcePlt</uiname>
<valid_range>0.0</valid_range>
@ -333,7 +333,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>cfrzr</short_name>
<long_name>Categorical freezing rain</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalFrzRain</uiname>
<valid_range>0.0</valid_range>
@ -378,7 +378,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>csnow</short_name>
<long_name>Categorical snow</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalSnow</uiname>
<valid_range>0.0</valid_range>
@ -491,7 +491,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>crain</short_name>
<long_name>Categorical rain</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalRain</uiname>
<valid_range>0.0</valid_range>

View file

@ -22,8 +22,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>weasd</short_name>
<long_name>water equivalent of accumulated snow depth</long_name>
<units>ml</units>
<udunits>mil</udunits>
<units>mm</units>
<udunits>millimeter</udunits>
<uiname>waterEqvAccSnowDepth</uiname>
<valid_range>0.0</valid_range>
<valid_range>1000.0</valid_range>
@ -106,7 +106,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
@ -258,7 +258,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>cicep</short_name>
<long_name>Categorical ice pellets</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalIcePlt</uiname>
<valid_range>0.0</valid_range>
@ -333,7 +333,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>cfrzr</short_name>
<long_name>Categorical freezing rain</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalFrzRain</uiname>
<valid_range>0.0</valid_range>
@ -378,7 +378,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>csnow</short_name>
<long_name>Categorical snow</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalSnow</uiname>
<valid_range>0.0</valid_range>
@ -491,7 +491,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>crain</short_name>
<long_name>Categorical rain</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalRain</uiname>
<valid_range>0.0</valid_range>

View file

@ -22,8 +22,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>weasd</short_name>
<long_name>water equivalent of accumulated snow depth</long_name>
<units>ml</units>
<udunits>mil</udunits>
<units>mm</units>
<udunits>millimeter</udunits>
<uiname>waterEqvAccSnowDepth</uiname>
<valid_range>0.0</valid_range>
<valid_range>1000.0</valid_range>
@ -106,7 +106,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
@ -258,7 +258,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>cicep</short_name>
<long_name>Categorical ice pellets</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalIcePlt</uiname>
<valid_range>0.0</valid_range>
@ -333,7 +333,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>cfrzr</short_name>
<long_name>Categorical freezing rain</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalFrzRain</uiname>
<valid_range>0.0</valid_range>
@ -378,7 +378,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>csnow</short_name>
<long_name>Categorical snow</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalSnow</uiname>
<valid_range>0.0</valid_range>
@ -491,7 +491,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>crain</short_name>
<long_name>Categorical rain</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalRain</uiname>
<valid_range>0.0</valid_range>

View file

@ -22,8 +22,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>weasd</short_name>
<long_name>water equivalent of accumulated snow depth</long_name>
<units>ml</units>
<udunits>mil</udunits>
<units>mm</units>
<udunits>millimeter</udunits>
<uiname>waterEqvAccSnowDepth</uiname>
<valid_range>0.0</valid_range>
<valid_range>1000.0</valid_range>
@ -106,7 +106,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
@ -258,7 +258,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>cicep</short_name>
<long_name>Categorical ice pellets</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalIcePlt</uiname>
<valid_range>0.0</valid_range>
@ -333,7 +333,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>cfrzr</short_name>
<long_name>Categorical freezing rain</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalFrzRain</uiname>
<valid_range>0.0</valid_range>
@ -378,7 +378,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>csnow</short_name>
<long_name>Categorical snow</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalSnow</uiname>
<valid_range>0.0</valid_range>
@ -491,7 +491,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>crain</short_name>
<long_name>Categorical rain</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalRain</uiname>
<valid_range>0.0</valid_range>

View file

@ -22,8 +22,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>weasd</short_name>
<long_name>water equivalent of accumulated snow depth</long_name>
<units>ml</units>
<udunits>mil</udunits>
<units>mm</units>
<udunits>millimeter</udunits>
<uiname>waterEqvAccSnowDepth</uiname>
<valid_range>0.0</valid_range>
<valid_range>1000.0</valid_range>
@ -106,7 +106,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
@ -258,7 +258,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>cicep</short_name>
<long_name>Categorical ice pellets</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalIcePlt</uiname>
<valid_range>0.0</valid_range>
@ -333,7 +333,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>cfrzr</short_name>
<long_name>Categorical freezing rain</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalFrzRain</uiname>
<valid_range>0.0</valid_range>
@ -378,7 +378,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>csnow</short_name>
<long_name>Categorical snow</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalSnow</uiname>
<valid_range>0.0</valid_range>
@ -491,7 +491,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>crain</short_name>
<long_name>Categorical rain</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalRain</uiname>
<valid_range>0.0</valid_range>

View file

@ -64,7 +64,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -43,7 +43,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -64,7 +64,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -95,7 +95,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -54,7 +54,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -54,7 +54,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -54,7 +54,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -115,7 +115,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -115,7 +115,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -115,7 +115,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -115,7 +115,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -43,7 +43,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -77,7 +77,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
</gridParamInfo>

View file

@ -87,7 +87,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -160,7 +160,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -72,7 +72,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>av</short_name>
<long_name>absolute vorticity</long_name>
<units>1/s</units>
<units>/s</units>
<udunits>1/second</udunits>
<uiname>absVort</uiname>
<valid_range>-0.00999999977648</valid_range>
@ -129,7 +129,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -111,7 +111,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>av</short_name>
<long_name>absolute vorticity</long_name>
<units>1/s</units>
<units>/s</units>
<udunits>1/second</udunits>
<uiname>absVort</uiname>
<valid_range>-0.00999999977648</valid_range>
@ -168,7 +168,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -156,7 +156,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>av</short_name>
<long_name>absolute vorticity</long_name>
<units>1/s</units>
<units>/s</units>
<udunits>1/second</udunits>
<uiname>absVort</uiname>
<valid_range>-0.00999999977648</valid_range>
@ -244,7 +244,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -93,7 +93,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>av</short_name>
<long_name>absolute vorticity</long_name>
<units>1/s</units>
<units>/s</units>
<udunits>1/second</udunits>
<uiname>absVort</uiname>
<valid_range>-0.00999999977648</valid_range>
@ -210,7 +210,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -109,7 +109,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>av</short_name>
<long_name>absolute vorticity</long_name>
<units>1/s</units>
<units>/s</units>
<udunits>1/second</udunits>
<uiname>absVort</uiname>
<valid_range>-0.00999999977648</valid_range>
@ -226,7 +226,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -73,7 +73,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>av</short_name>
<long_name>absolute vorticity</long_name>
<units>1/s</units>
<units>/s</units>
<udunits>1/second</udunits>
<uiname>absVort</uiname>
<valid_range>-0.00999999977648</valid_range>
@ -145,7 +145,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -73,7 +73,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>av</short_name>
<long_name>absolute vorticity</long_name>
<units>1/s</units>
<units>/s</units>
<udunits>1/second</udunits>
<uiname>absVort</uiname>
<valid_range>-0.00999999977648</valid_range>
@ -145,7 +145,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -134,7 +134,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -134,7 +134,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -56,7 +56,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -56,7 +56,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -185,7 +185,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -87,7 +87,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -407,7 +407,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -407,7 +407,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -113,7 +113,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>av</short_name>
<long_name>absolute vorticity</long_name>
<units>1/s</units>
<units>/s</units>
<udunits>1/second</udunits>
<uiname>absVort</uiname>
<valid_range>-0.00999999977648</valid_range>
@ -231,7 +231,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -113,7 +113,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>av</short_name>
<long_name>absolute vorticity</long_name>
<units>1/s</units>
<units>/s</units>
<udunits>1/second</udunits>
<uiname>absVort</uiname>
<valid_range>-0.00999999977648</valid_range>
@ -231,7 +231,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -113,7 +113,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -34,8 +34,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>weasd</short_name>
<long_name>water equivalent of accumulated snow depth</long_name>
<units>ml</units>
<udunits>mil</udunits>
<units>mm</units>
<udunits>millimeter</udunits>
<uiname>waterEqvAccSnowDepth</uiname>
<valid_range>0.0</valid_range>
<valid_range>1000.0</valid_range>
@ -138,7 +138,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
@ -446,7 +446,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>cicep</short_name>
<long_name>Categorical ice pellets</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalIcePlt</uiname>
<valid_range>0.0</valid_range>
@ -521,7 +521,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>cfrzr</short_name>
<long_name>Categorical freezing rain</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalFrzRain</uiname>
<valid_range>0.0</valid_range>
@ -566,7 +566,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>csnow</short_name>
<long_name>Categorical snow</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalSnow</uiname>
<valid_range>0.0</valid_range>
@ -685,7 +685,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>crain</short_name>
<long_name>Categorical rain</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalRain</uiname>
<valid_range>0.0</valid_range>
@ -700,7 +700,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>av</short_name>
<long_name>absolute vorticity</long_name>
<units>1/s</units>
<units>/s</units>
<udunits>1/second</udunits>
<uiname>absVort</uiname>
<valid_range>-0.00999999977648</valid_range>

View file

@ -34,8 +34,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>weasd</short_name>
<long_name>water equivalent of accumulated snow depth</long_name>
<units>ml</units>
<udunits>mil</udunits>
<units>mm</units>
<udunits>millimeter</udunits>
<uiname>waterEqvAccSnowDepth</uiname>
<valid_range>0.0</valid_range>
<valid_range>1000.0</valid_range>
@ -138,7 +138,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
@ -446,7 +446,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>cicep</short_name>
<long_name>Categorical ice pellets</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalIcePlt</uiname>
<valid_range>0.0</valid_range>
@ -521,7 +521,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>cfrzr</short_name>
<long_name>Categorical freezing rain</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalFrzRain</uiname>
<valid_range>0.0</valid_range>
@ -566,7 +566,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>csnow</short_name>
<long_name>Categorical snow</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalSnow</uiname>
<valid_range>0.0</valid_range>
@ -685,7 +685,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>crain</short_name>
<long_name>Categorical rain</long_name>
<units>yes=1, no=0</units>
<units>yn</units>
<udunits/>
<uiname>CategoricalRain</uiname>
<valid_range>0.0</valid_range>
@ -700,7 +700,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>av</short_name>
<long_name>absolute vorticity</long_name>
<units>1/s</units>
<units>/s</units>
<udunits>1/second</udunits>
<uiname>absVort</uiname>
<valid_range>-0.00999999977648</valid_range>

View file

@ -170,7 +170,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

View file

@ -81,7 +81,7 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/second</units>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">

Some files were not shown because too many files have changed in this diff Show more