Merge "Issue #2946 Fix auxillary purge rules." into omaha_14.3.1-NHDA
Former-commit-id: 31d75a4b82413b015353055668defab0095ef893
This commit is contained in:
commit
bfe46bb5e6
197 changed files with 8171 additions and 3777 deletions
|
@ -25,7 +25,7 @@ import org.eclipse.core.commands.ExecutionException;
|
|||
import org.eclipse.swt.widgets.Shell;
|
||||
import org.eclipse.ui.PlatformUI;
|
||||
|
||||
import com.raytheon.uf.common.archive.request.ArchiveAdminAuthRequest;
|
||||
import com.raytheon.uf.common.archive.request.ArchiveCaseCreationAuthRequest;
|
||||
import com.raytheon.uf.common.auth.user.IUser;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
|
@ -56,8 +56,12 @@ public class ArchiveCaseCreationDialogAction extends AbstractHandler {
|
|||
private final IUFStatusHandler statusHandler = UFStatus
|
||||
.getHandler(ArchiveCaseCreationDialogAction.class);
|
||||
|
||||
/** Dialog to display */
|
||||
private CaseCreationDlg dialog;
|
||||
|
||||
/** Default case directory location. */
|
||||
private String caseDir;
|
||||
|
||||
/** Case Administration permission */
|
||||
private final String PERMISSION = "archive.casecreation";
|
||||
|
||||
|
@ -74,7 +78,7 @@ public class ArchiveCaseCreationDialogAction extends AbstractHandler {
|
|||
if (dialog == null || dialog.isDisposed()) {
|
||||
Shell shell = PlatformUI.getWorkbench()
|
||||
.getActiveWorkbenchWindow().getShell();
|
||||
dialog = new CaseCreationDlg(shell);
|
||||
dialog = new CaseCreationDlg(shell, caseDir);
|
||||
dialog.open();
|
||||
} else {
|
||||
dialog.bringToTop();
|
||||
|
@ -93,16 +97,25 @@ public class ArchiveCaseCreationDialogAction extends AbstractHandler {
|
|||
IUser user = UserController.getUserObject();
|
||||
String msg = user.uniqueId()
|
||||
+ " does not have permission to access archive case creation dialog.";
|
||||
ArchiveAdminAuthRequest request = new ArchiveAdminAuthRequest();
|
||||
ArchiveCaseCreationAuthRequest request = new ArchiveCaseCreationAuthRequest();
|
||||
request.setRoleId(PERMISSION);
|
||||
request.setNotAuthorizedMessage(msg);
|
||||
request.setUser(user);
|
||||
|
||||
try {
|
||||
Object o = ThriftClient.sendPrivilegedRequest(request);
|
||||
if (o instanceof ArchiveAdminAuthRequest) {
|
||||
ArchiveAdminAuthRequest r = (ArchiveAdminAuthRequest) o;
|
||||
return r.isAuthorized();
|
||||
if (o instanceof ArchiveCaseCreationAuthRequest) {
|
||||
ArchiveCaseCreationAuthRequest r = (ArchiveCaseCreationAuthRequest) o;
|
||||
if (r.isAuthorized()) {
|
||||
this.caseDir = r.getCaseDirectory();
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
statusHandler
|
||||
.handle(Priority.ERROR,
|
||||
String.format(
|
||||
"Cannot validate user expected response type ArchiveCaseCreationAuthRequest, received %s",
|
||||
o.getClass().getName()));
|
||||
}
|
||||
} catch (VizException e) {
|
||||
statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(), e);
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
/**
|
||||
* This software was developed and / or modified by Raytheon Company,
|
||||
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||
*
|
||||
* U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||
* This software product contains export-restricted data whose
|
||||
* export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||
* to non-U.S. persons whether in the United States or abroad requires
|
||||
* an export license or other authorization.
|
||||
*
|
||||
* Contractor Name: Raytheon Company
|
||||
* Contractor Address: 6825 Pine Street, Suite 340
|
||||
* Mail Stop B8
|
||||
* Omaha, NE 68106
|
||||
* 402.291.0100
|
||||
*
|
||||
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||
* further licensing information.
|
||||
**/
|
||||
package com.raytheon.uf.viz.archive.data;
|
||||
|
||||
/**
|
||||
* A listener to notify when SizeJob has obtain all display data.
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Apr 23, 2014 3045 rferrel Initial creation
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author rferrel
|
||||
* @version 1.0
|
||||
*/
|
||||
public interface ILoadDisplayDataListener {
|
||||
/**
|
||||
* Called by SizeJob after obtaining all display data for all
|
||||
* archive/category tables.
|
||||
*/
|
||||
public void loadedAllDisplayData();
|
||||
}
|
|
@ -52,6 +52,7 @@ import com.raytheon.uf.common.time.util.TimeUtil;
|
|||
* Dec 11, 2013 #2603 rferrel Selected list changed to a Set.
|
||||
* Dec 11, 2013 #2624 rferrel Clear display variables when recomputing sizes.
|
||||
* Mar 27, 2014 #2879 rferrel Loading Case no longer changes Start/End times.
|
||||
* Apr 23, 2014 #3045 rferrel Changes to prevent race condition while getting labels.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -156,17 +157,17 @@ public class SizeJob extends Job {
|
|||
private boolean stopComputeSize;
|
||||
|
||||
/**
|
||||
* Priority queue for getting display data for an archive/category.
|
||||
* Priority queue for getting display data all archive/category tables.
|
||||
*/
|
||||
// Do not use a PriorityBlockingQueue since the load select and change
|
||||
// display methods need to be notified when the display data is available.
|
||||
private final PriorityQueue<MissingData> missingDataQueue = new PriorityQueue<SizeJob.MissingData>(
|
||||
DEFAULT_INITIAL_CAPACITY, new Comparator<MissingData>() {
|
||||
private final PriorityQueue<LoadDisplayData> loadDisplayDataQueue = new PriorityQueue<SizeJob.LoadDisplayData>(
|
||||
DEFAULT_INITIAL_CAPACITY, new Comparator<LoadDisplayData>() {
|
||||
|
||||
@Override
|
||||
public int compare(MissingData o1, MissingData o2) {
|
||||
if (o1.visiable != o2.visiable) {
|
||||
return o1.visiable ? -1 : +1;
|
||||
public int compare(LoadDisplayData o1, LoadDisplayData o2) {
|
||||
if (o1.visible != o2.visible) {
|
||||
return o1.visible ? -1 : +1;
|
||||
}
|
||||
if (o1.isSelected() != o2.isSelected()) {
|
||||
return o1.isSelected() ? -1 : +1;
|
||||
|
@ -182,16 +183,22 @@ public class SizeJob extends Job {
|
|||
});
|
||||
|
||||
/**
|
||||
* Job for processing the missing data queue.
|
||||
* Job for obtaining display data for all the archive/category tables.
|
||||
*/
|
||||
private final MissingDataJob missingDataJob = new MissingDataJob();
|
||||
private LoadDisplayDataJob loadDisplayDataJob;
|
||||
|
||||
/**
|
||||
* Listener to invoke when all display data loaded.
|
||||
*/
|
||||
private final ILoadDisplayDataListener loadDisplayDataListener;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
public SizeJob() {
|
||||
public SizeJob(ILoadDisplayDataListener loadDisplayDataListener) {
|
||||
super("Size Job");
|
||||
setSystem(true);
|
||||
this.loadDisplayDataListener = loadDisplayDataListener;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -285,9 +292,11 @@ public class SizeJob extends Job {
|
|||
* Check all displayData selection state so only the data in selections are
|
||||
* set.
|
||||
*
|
||||
* @param selections
|
||||
* @param selectName
|
||||
* @param type
|
||||
* @return errorMessage when unable to load else null
|
||||
*/
|
||||
public void loadSelect(String selectName, ArchiveConstants.Type type) {
|
||||
public String loadSelect(String selectName, ArchiveConstants.Type type) {
|
||||
ArchiveConfigManager manager = ArchiveConfigManager.getInstance();
|
||||
String fileName = ArchiveConstants.selectFileName(type, selectName);
|
||||
SelectConfig selections = manager.loadSelection(fileName);
|
||||
|
@ -301,24 +310,18 @@ public class SizeJob extends Job {
|
|||
for (String categoryName : archiveInfo.getCategoryNames()) {
|
||||
Set<String> selectionsSet = selections.getSelectedSet(
|
||||
archiveName, categoryName);
|
||||
MissingData missingData = removeMissingData(archiveName,
|
||||
categoryName);
|
||||
if (missingData != null) {
|
||||
missingData.setSelectedSet(selectionsSet);
|
||||
addMissingData(missingData);
|
||||
} else {
|
||||
CategoryInfo categoryInfo = archiveInfo.get(categoryName);
|
||||
for (DisplayData displayData : categoryInfo
|
||||
.getDisplayDataList()) {
|
||||
String displayLabel = displayData.getDisplayLabel();
|
||||
boolean selected = selectionsSet.contains(displayLabel);
|
||||
if (selected != displayData.isSelected()) {
|
||||
setSelect(displayData, selected);
|
||||
}
|
||||
CategoryInfo categoryInfo = archiveInfo.get(categoryName);
|
||||
for (DisplayData displayData : categoryInfo
|
||||
.getDisplayDataList()) {
|
||||
String displayLabel = displayData.getDisplayLabel();
|
||||
boolean selected = selectionsSet.contains(displayLabel);
|
||||
if (selected != displayData.isSelected()) {
|
||||
setSelect(displayData, selected);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -327,10 +330,13 @@ public class SizeJob extends Job {
|
|||
* @return selected
|
||||
*/
|
||||
public List<DisplayData> getSelectAll() {
|
||||
synchronized (missingDataQueue) {
|
||||
while (!missingDataQueue.isEmpty()) {
|
||||
if (missingDataJob.currentMissingData == null
|
||||
|| missingDataJob.currentMissingData.isSelected()) {
|
||||
synchronized (loadDisplayDataQueue) {
|
||||
while (!loadDisplayDataQueue.isEmpty()) {
|
||||
if ((loadDisplayDataJob.currentLoadDisplayData == null)
|
||||
|| loadDisplayDataJob.currentLoadDisplayData
|
||||
.isVisible()
|
||||
|| loadDisplayDataJob.currentLoadDisplayData
|
||||
.isSelected()) {
|
||||
missingDataQueueWait();
|
||||
} else {
|
||||
break;
|
||||
|
@ -440,33 +446,81 @@ public class SizeJob extends Job {
|
|||
}
|
||||
|
||||
/**
|
||||
* Change the archive/category display.
|
||||
*
|
||||
* @param archiveName
|
||||
* - non null value
|
||||
* @param categoryName
|
||||
* @return displayData when display needs to change otherwise null
|
||||
* - non null value
|
||||
* @return true if archiveName and categoryName match the current display
|
||||
*/
|
||||
public boolean isCurrentDisplay(String archiveName, String categoryName) {
|
||||
return archiveName.equals(displayArchive)
|
||||
&& categoryName.equals(displayCategory);
|
||||
}
|
||||
|
||||
/**
|
||||
* This method returns a display data list to replace the contents of the
|
||||
* GUI's achive/category display table or a null list if no update is
|
||||
* needed. It is assumed this method is called from an non-UI thread.
|
||||
*
|
||||
* @param archiveName
|
||||
* - archive for the new display table
|
||||
* @param categoryName
|
||||
* - category for the new display table
|
||||
* @param shutdown
|
||||
* - Becomes true when user requests a different table while this
|
||||
* is waiting for data.
|
||||
* @return displayData
|
||||
*/
|
||||
public List<DisplayData> changeDisplay(String archiveName,
|
||||
String categoryName) {
|
||||
String categoryName, AtomicBoolean shutdown) {
|
||||
List<DisplayData> displayDatas = null;
|
||||
|
||||
// Only get data when the display really needs to be changed.
|
||||
if (!archiveName.equals(displayArchive)
|
||||
|| !categoryName.equals(displayCategory)) {
|
||||
MissingData missingData = removeMissingData(archiveName,
|
||||
|
||||
// Update visible status of current display.
|
||||
if ((displayArchive != null) && (displayCategory != null)) {
|
||||
LoadDisplayData currentMissingData = removeLoadDisplayData(
|
||||
displayArchive, displayCategory);
|
||||
if (currentMissingData != null) {
|
||||
currentMissingData.setVisible(false);
|
||||
addLoadDisplayData(currentMissingData);
|
||||
}
|
||||
}
|
||||
|
||||
LoadDisplayData missingData = removeLoadDisplayData(archiveName,
|
||||
categoryName);
|
||||
displayArchive = archiveName;
|
||||
displayCategory = categoryName;
|
||||
|
||||
// Update visible status of the new current display.
|
||||
if (missingData != null) {
|
||||
missingData.setVisiable(true);
|
||||
synchronized (missingDataQueue) {
|
||||
addMissingData(missingData);
|
||||
while (missingDataQueue.contains(missingData)) {
|
||||
missingDataQueueWait();
|
||||
synchronized (loadDisplayDataQueue) {
|
||||
missingData.setVisible(true);
|
||||
addLoadDisplayData(missingData);
|
||||
|
||||
/*
|
||||
* Wait for the display data to be loaded or no longer
|
||||
* needed.
|
||||
*/
|
||||
while (loadDisplayDataJob.processing(missingData)
|
||||
&& !shutdown.get()) {
|
||||
missingDataQueueWait(500L);
|
||||
}
|
||||
}
|
||||
}
|
||||
displayDatas = archiveInfoMap.get(archiveName).get(categoryName)
|
||||
.getDisplayDataList();
|
||||
displayArchive = archiveName;
|
||||
displayCategory = categoryName;
|
||||
changeDisplay(displayDatas);
|
||||
|
||||
/*
|
||||
* If user still needs the data update status of old visible data
|
||||
* and the new visible data.
|
||||
*/
|
||||
if (!shutdown.get()) {
|
||||
displayDatas = archiveInfoMap.get(archiveName)
|
||||
.get(categoryName).getDisplayDataList();
|
||||
changeDisplay(displayDatas);
|
||||
}
|
||||
}
|
||||
return displayDatas;
|
||||
}
|
||||
|
@ -474,7 +528,7 @@ public class SizeJob extends Job {
|
|||
/**
|
||||
* Change to display all selected data..
|
||||
*
|
||||
* @return displayhData when display needs to change otherwise null.
|
||||
* @return displayData when display needs to change otherwise null.
|
||||
*/
|
||||
public List<DisplayData> changeDisplayAll() {
|
||||
List<DisplayData> selectedData = null;
|
||||
|
@ -499,7 +553,7 @@ public class SizeJob extends Job {
|
|||
}
|
||||
iRetentionHour.setRetentionTimes(selections.getStarRetentionHours());
|
||||
|
||||
missingDataQueue.clear();
|
||||
loadDisplayDataQueue.clear();
|
||||
|
||||
visibleList = manager.getDisplayData(displayArchive, displayCategory,
|
||||
false);
|
||||
|
@ -527,51 +581,48 @@ public class SizeJob extends Job {
|
|||
} else {
|
||||
selectedSet = selections.getSelectedSet(archiveName,
|
||||
categoryName);
|
||||
MissingData missingData = new MissingData(archiveName,
|
||||
categoryName, selectedSet);
|
||||
missingDataQueue.add(missingData);
|
||||
LoadDisplayData missingData = new LoadDisplayData(
|
||||
archiveName, categoryName, selectedSet);
|
||||
loadDisplayDataQueue.add(missingData);
|
||||
}
|
||||
}
|
||||
put(archiveName, archiveInfo);
|
||||
}
|
||||
|
||||
missingDataJob.schedule();
|
||||
loadDisplayDataJob = new LoadDisplayDataJob(loadDisplayDataListener,
|
||||
loadDisplayDataQueue.size());
|
||||
|
||||
loadDisplayDataJob.schedule();
|
||||
|
||||
return selections.getName();
|
||||
}
|
||||
|
||||
/**
|
||||
* Find and remove the missing data from the missing data queue.
|
||||
* Find and remove the associated load display data from the queue.
|
||||
*
|
||||
* @param archiveName
|
||||
* @param categoryName
|
||||
* @return missingData or null if not on the missing data queue
|
||||
* @return loadDisplayData or null if no longer on the queue
|
||||
*/
|
||||
private MissingData removeMissingData(String archiveName,
|
||||
private LoadDisplayData removeLoadDisplayData(String archiveName,
|
||||
String categoryName) {
|
||||
MissingData missingData = null;
|
||||
synchronized (missingDataQueue) {
|
||||
if (missingDataJob.currentMissingData != null
|
||||
&& archiveName
|
||||
.equals(missingDataJob.currentMissingData.archive)
|
||||
&& categoryName
|
||||
.equals(missingDataJob.currentMissingData.category)) {
|
||||
// Finish the process of getting the data.
|
||||
missingDataQueueWait();
|
||||
} else if (!missingDataQueue.isEmpty()) {
|
||||
Iterator<MissingData> iterator = missingDataQueue.iterator();
|
||||
LoadDisplayData loadDisplayData = null;
|
||||
synchronized (loadDisplayDataQueue) {
|
||||
if (!loadDisplayDataQueue.isEmpty()) {
|
||||
Iterator<LoadDisplayData> iterator = loadDisplayDataQueue
|
||||
.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
MissingData md = iterator.next();
|
||||
LoadDisplayData md = iterator.next();
|
||||
if (md.archive.equals(archiveName)
|
||||
&& md.category.equals(categoryName)) {
|
||||
iterator.remove();
|
||||
missingData = md;
|
||||
loadDisplayData = md;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return missingData;
|
||||
return loadDisplayData;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -580,9 +631,20 @@ public class SizeJob extends Job {
|
|||
* @return false when interrupted exception
|
||||
*/
|
||||
private boolean missingDataQueueWait() {
|
||||
return missingDataQueueWait(0L);
|
||||
}
|
||||
|
||||
/**
|
||||
* Wait for notification that the current missing data is finished
|
||||
* processing or the desired time has lapsed.
|
||||
*
|
||||
* @param time
|
||||
* @return false when interrupted exception
|
||||
*/
|
||||
private boolean missingDataQueueWait(long time) {
|
||||
boolean state = true;
|
||||
try {
|
||||
missingDataQueue.wait();
|
||||
loadDisplayDataQueue.wait(time);
|
||||
} catch (InterruptedException e) {
|
||||
state = false;
|
||||
statusHandler.handle(Priority.INFO, e.getLocalizedMessage(), e);
|
||||
|
@ -591,32 +653,30 @@ public class SizeJob extends Job {
|
|||
}
|
||||
|
||||
/**
|
||||
* This inserts a load display data onto the queue. Should
|
||||
*
|
||||
* @param missingData
|
||||
* @param loadDisplayData
|
||||
*/
|
||||
private void addMissingData(MissingData missingData) {
|
||||
synchronized (missingDataQueue) {
|
||||
missingDataQueue.add(missingData);
|
||||
if (missingDataJob.getState() == Job.NONE) {
|
||||
missingDataJob.schedule();
|
||||
private void addLoadDisplayData(LoadDisplayData loadDisplayData) {
|
||||
synchronized (loadDisplayDataQueue) {
|
||||
loadDisplayDataQueue.add(loadDisplayData);
|
||||
if (loadDisplayDataJob.getState() == Job.NONE) {
|
||||
loadDisplayDataJob.schedule();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Change update visible to the new list.
|
||||
* Change visible status to reflect the new list.
|
||||
*
|
||||
* @param newDisplays
|
||||
*/
|
||||
private void changeDisplay(List<DisplayData> newDisplays) {
|
||||
List<DisplayData> oldDisplays = visibleList;
|
||||
visibleList = newDisplays;
|
||||
List<DisplayData> visibleList = new ArrayList<DisplayData>(newDisplays);
|
||||
|
||||
for (DisplayData displayData : oldDisplays) {
|
||||
if (!visibleList.remove(displayData)) {
|
||||
setVisible(displayData, false);
|
||||
}
|
||||
setVisible(displayData, false);
|
||||
}
|
||||
|
||||
for (DisplayData displayData : visibleList) {
|
||||
|
@ -761,25 +821,25 @@ public class SizeJob extends Job {
|
|||
@Override
|
||||
protected void canceling() {
|
||||
clearQueue();
|
||||
missingDataQueue.clear();
|
||||
missingDataJob.cancel();
|
||||
loadDisplayDataQueue.clear();
|
||||
loadDisplayDataJob.cancel();
|
||||
shutdown.set(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Class used by the missing data job to obtain display data for given
|
||||
* archive/category off the UI thread.
|
||||
* Class used to track missing display data for the archive/category tables.
|
||||
* Allowing the information to be retrieved in a non-UI thread.
|
||||
*/
|
||||
private static class MissingData {
|
||||
private static class LoadDisplayData {
|
||||
protected final String archive;
|
||||
|
||||
protected final String category;
|
||||
|
||||
protected final Set<String> selectedSet;
|
||||
|
||||
protected boolean visiable = false;
|
||||
protected boolean visible = false;
|
||||
|
||||
public MissingData(String archive, String category,
|
||||
public LoadDisplayData(String archive, String category,
|
||||
Set<String> selectedSet) {
|
||||
this.archive = archive;
|
||||
this.category = category;
|
||||
|
@ -790,21 +850,20 @@ public class SizeJob extends Job {
|
|||
return !selectedSet.isEmpty();
|
||||
}
|
||||
|
||||
public void setVisiable(boolean state) {
|
||||
this.visiable = state;
|
||||
public boolean isVisible() {
|
||||
return visible;
|
||||
}
|
||||
|
||||
public void setSelectedSet(Set<String> selectedSet) {
|
||||
this.selectedSet.clear();
|
||||
this.selectedSet.addAll(selectedSet);
|
||||
public void setVisible(boolean state) {
|
||||
this.visible = state;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder("MissingData[");
|
||||
StringBuilder sb = new StringBuilder("LoadDisplayData[");
|
||||
sb.append("archive: ").append(archive);
|
||||
sb.append(", category: ").append(category);
|
||||
sb.append(", visible: ").append(visiable);
|
||||
sb.append(", visible: ").append(isVisible());
|
||||
sb.append(", isSelected: ").append(isSelected());
|
||||
sb.append("]");
|
||||
return sb.toString();
|
||||
|
@ -815,14 +874,34 @@ public class SizeJob extends Job {
|
|||
* This handles getting the display data in the missing data queue and
|
||||
* queuing the results for the size job.
|
||||
*/
|
||||
private class MissingDataJob extends Job {
|
||||
private class LoadDisplayDataJob extends Job {
|
||||
|
||||
private final AtomicBoolean shutdown = new AtomicBoolean(false);
|
||||
|
||||
protected MissingData currentMissingData = null;
|
||||
protected LoadDisplayData currentLoadDisplayData = null;
|
||||
|
||||
public MissingDataJob() {
|
||||
super("MissingData");
|
||||
private final ILoadDisplayDataListener loadDisplayDataListener;
|
||||
|
||||
/**
|
||||
* Must be set to the maximum number of LoadDisplayData to process.
|
||||
* Cannot use the queue size since adjusting the queue to change the
|
||||
* priority may make its size 0. This could cause the job to be
|
||||
* rescheduled to finish when data added back onto the queue.
|
||||
*/
|
||||
private int loadDisplayDataCnt;
|
||||
|
||||
/**
|
||||
* The constructor.
|
||||
*
|
||||
* @param loadDisplayDataListener
|
||||
* @param loadDisplayDataCnt
|
||||
*/
|
||||
public LoadDisplayDataJob(
|
||||
ILoadDisplayDataListener loadDisplayDataListener,
|
||||
int loadDisplayDataCnt) {
|
||||
super("Loading Data Sets");
|
||||
this.loadDisplayDataListener = loadDisplayDataListener;
|
||||
this.loadDisplayDataCnt = loadDisplayDataCnt;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -834,20 +913,21 @@ public class SizeJob extends Job {
|
|||
ArchiveConfigManager manager = ArchiveConfigManager.getInstance();
|
||||
|
||||
while (!shutdown.get()) {
|
||||
synchronized (missingDataQueue) {
|
||||
if (currentMissingData != null) {
|
||||
missingDataQueue.notifyAll();
|
||||
synchronized (loadDisplayDataQueue) {
|
||||
if (currentLoadDisplayData != null) {
|
||||
currentLoadDisplayData = null;
|
||||
loadDisplayDataQueue.notifyAll();
|
||||
--loadDisplayDataCnt;
|
||||
}
|
||||
currentLoadDisplayData = loadDisplayDataQueue.poll();
|
||||
if (currentLoadDisplayData == null) {
|
||||
break;
|
||||
}
|
||||
currentMissingData = missingDataQueue.poll();
|
||||
}
|
||||
|
||||
if (currentMissingData == null) {
|
||||
break;
|
||||
}
|
||||
|
||||
String archiveName = currentMissingData.archive;
|
||||
String categoryName = currentMissingData.category;
|
||||
Set<String> selectedSet = currentMissingData.selectedSet;
|
||||
String archiveName = currentLoadDisplayData.archive;
|
||||
String categoryName = currentLoadDisplayData.category;
|
||||
Set<String> selectedSet = currentLoadDisplayData.selectedSet;
|
||||
List<DisplayData> displayDatas = manager.getDisplayData(
|
||||
archiveName, categoryName, false);
|
||||
if (shutdown.get()) {
|
||||
|
@ -868,13 +948,31 @@ public class SizeJob extends Job {
|
|||
}
|
||||
}
|
||||
|
||||
if (loadDisplayDataCnt == 0) {
|
||||
if (loadDisplayDataListener != null) {
|
||||
loadDisplayDataListener.loadedAllDisplayData();
|
||||
}
|
||||
}
|
||||
|
||||
return Status.OK_STATUS;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param loadDisplayData
|
||||
* @return true when missingData still needs to be processed.
|
||||
*/
|
||||
public boolean processing(LoadDisplayData loadDisplayData) {
|
||||
synchronized (loadDisplayDataQueue) {
|
||||
return loadDisplayDataQueue.contains(loadDisplayData)
|
||||
|| loadDisplayData.equals(currentLoadDisplayData);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void canceling() {
|
||||
shutdown.set(true);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -22,6 +22,7 @@ package com.raytheon.uf.viz.archive.ui;
|
|||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
|
@ -53,6 +54,7 @@ import com.raytheon.uf.common.util.SizeUtil;
|
|||
import com.raytheon.uf.viz.archive.data.ArchiveInfo;
|
||||
import com.raytheon.uf.viz.archive.data.CategoryInfo;
|
||||
import com.raytheon.uf.viz.archive.data.IArchiveTotals;
|
||||
import com.raytheon.uf.viz.archive.data.ILoadDisplayDataListener;
|
||||
import com.raytheon.uf.viz.archive.data.IRetentionHour;
|
||||
import com.raytheon.uf.viz.archive.data.IUpdateListener;
|
||||
import com.raytheon.uf.viz.archive.data.SizeJob;
|
||||
|
@ -79,6 +81,7 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
|
|||
* Dec 11, 2013 2624 rferrel No longer clear table prior to populating.
|
||||
* Apr 15, 2014 3034 lvenable Added dispose checks in runAsync calls.
|
||||
* Apr 10, 2014 3023 rferrel Added setTotalSelectedSize method.
|
||||
* Apr 23, 2014 3045 rferrel Changes to prevent race condition while getting labels.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -87,7 +90,8 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
|
|||
*/
|
||||
|
||||
public abstract class AbstractArchiveDlg extends CaveSWTDialog implements
|
||||
IArchiveTotals, IUpdateListener, IModifyListener, IRetentionHour {
|
||||
IArchiveTotals, IUpdateListener, IModifyListener, IRetentionHour,
|
||||
ILoadDisplayDataListener {
|
||||
|
||||
/** Table composite that holds the table controls. */
|
||||
private ArchiveTableComp tableComp;
|
||||
|
@ -115,7 +119,7 @@ public abstract class AbstractArchiveDlg extends CaveSWTDialog implements
|
|||
/**
|
||||
* Job that computes sizes of table row entries off the UI thread.
|
||||
*/
|
||||
protected final SizeJob sizeJob = new SizeJob();
|
||||
protected final SizeJob sizeJob = new SizeJob(this);
|
||||
|
||||
/** Keeps track of when it is safe to clear the busy cursor. */
|
||||
protected final AtomicInteger busyCnt = new AtomicInteger(0);
|
||||
|
@ -139,6 +143,9 @@ public abstract class AbstractArchiveDlg extends CaveSWTDialog implements
|
|||
|
||||
private String previousSelectedCategory = null;
|
||||
|
||||
/** Job running to populate the currently selected archive/category. */
|
||||
private Job populateTableJob = null;
|
||||
|
||||
/**
|
||||
* @param parentShell
|
||||
*/
|
||||
|
@ -365,6 +372,9 @@ public abstract class AbstractArchiveDlg extends CaveSWTDialog implements
|
|||
protected void disposed() {
|
||||
sizeJob.removeUpdateListener(this);
|
||||
sizeJob.cancel();
|
||||
if (populateTableJob != null) {
|
||||
populateTableJob.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -463,12 +473,17 @@ public abstract class AbstractArchiveDlg extends CaveSWTDialog implements
|
|||
}
|
||||
|
||||
/**
|
||||
* Load a select configuration file.
|
||||
* Load selected configuration file.
|
||||
*
|
||||
* @param selectName
|
||||
*/
|
||||
protected void loadSelect(String selectName) {
|
||||
sizeJob.loadSelect(selectName, type);
|
||||
protected boolean loadSelect(String selectName) {
|
||||
String message = sizeJob.loadSelect(selectName, type);
|
||||
if (message != null) {
|
||||
MessageDialog.openError(shell, "Unable to load Case", message);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -483,15 +498,39 @@ public abstract class AbstractArchiveDlg extends CaveSWTDialog implements
|
|||
|
||||
setShowingSelected(false);
|
||||
|
||||
Job job = new Job("populate category table") {
|
||||
if (populateTableJob != null) {
|
||||
populateTableJob.cancel();
|
||||
setCursorBusy(false);
|
||||
}
|
||||
|
||||
populateTableJob = new Job("populate category table") {
|
||||
private AtomicBoolean shutdown = new AtomicBoolean(false);
|
||||
|
||||
@Override
|
||||
protected IStatus run(IProgressMonitor monitor) {
|
||||
getCategoryTableData(archiveName, categoryName);
|
||||
getCategoryTableData(archiveName, categoryName, shutdown);
|
||||
|
||||
// Just populated the current table update cursor.
|
||||
if (!shutdown.get()) {
|
||||
populateTableJob = null;
|
||||
VizApp.runAsync(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
setCursorBusy(false);
|
||||
}
|
||||
});
|
||||
}
|
||||
return Status.OK_STATUS;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void canceling() {
|
||||
shutdown.set(true);
|
||||
}
|
||||
|
||||
};
|
||||
job.schedule();
|
||||
populateTableJob.schedule();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -501,12 +540,25 @@ public abstract class AbstractArchiveDlg extends CaveSWTDialog implements
|
|||
*
|
||||
* @param archiveName
|
||||
* @param categoryName
|
||||
* @param shutdown
|
||||
*/
|
||||
private void getCategoryTableData(final String archiveName,
|
||||
final String categoryName) {
|
||||
final String categoryName, final AtomicBoolean shutdown) {
|
||||
|
||||
if (!sizeJob.isCurrentDisplay(archiveName, categoryName)) {
|
||||
VizApp.runAsync(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (!isDisposed()) {
|
||||
tableComp.clearTable();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
final List<DisplayData> displayDatas = sizeJob.changeDisplay(
|
||||
archiveName, categoryName);
|
||||
archiveName, categoryName, shutdown);
|
||||
|
||||
VizApp.runAsync(new Runnable() {
|
||||
|
||||
|
@ -517,15 +569,11 @@ public abstract class AbstractArchiveDlg extends CaveSWTDialog implements
|
|||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
if (displayDatas != null) {
|
||||
tableComp.populateTable(archiveName, categoryName,
|
||||
displayDatas);
|
||||
} else {
|
||||
tableComp.refresh();
|
||||
}
|
||||
} finally {
|
||||
setCursorBusy(false);
|
||||
if (displayDatas != null) {
|
||||
tableComp.populateTable(archiveName, categoryName,
|
||||
displayDatas);
|
||||
} else {
|
||||
tableComp.refresh();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -537,11 +585,14 @@ public abstract class AbstractArchiveDlg extends CaveSWTDialog implements
|
|||
* @param state
|
||||
*/
|
||||
protected void setCursorBusy(boolean state) {
|
||||
if (state) {
|
||||
busyCnt.addAndGet(1);
|
||||
shell.setCursor(shell.getDisplay().getSystemCursor(SWT.CURSOR_WAIT));
|
||||
} else if (busyCnt.addAndGet(-1) == 0) {
|
||||
shell.setCursor(null);
|
||||
if (!shell.isDisposed()) {
|
||||
if (state) {
|
||||
busyCnt.addAndGet(1);
|
||||
shell.setCursor(shell.getDisplay().getSystemCursor(
|
||||
SWT.CURSOR_WAIT));
|
||||
} else if (busyCnt.addAndGet(-1) == 0) {
|
||||
shell.setCursor(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -786,6 +837,11 @@ public abstract class AbstractArchiveDlg extends CaveSWTDialog implements
|
|||
return errorMsg == null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Allows sub-class to perform updates once all the display data is loaded.
|
||||
*/
|
||||
abstract public void loadedAllDisplayData();
|
||||
|
||||
/**
|
||||
* When unsaved modifications this asks the user to verify the close.
|
||||
*
|
||||
|
|
|
@ -57,6 +57,7 @@ import com.raytheon.uf.common.time.util.TimeUtil;
|
|||
* Oct 01, 2013 #2147 rferrel Change getEnd() to pick up files with future time stamps.
|
||||
* Oct 07, 2013 #2438 rferrel Properly save and load retention times.
|
||||
* Apr 14, 2014 #3023 rferrel Code clean up.
|
||||
* Apr 24, 2014 #3045 rferrel Implement loadedAllDsipalyData.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -415,4 +416,9 @@ public class ArchiveRetentionDlg extends AbstractArchiveDlg {
|
|||
archiveComboSelection();
|
||||
categoryComboSelection();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadedAllDisplayData() {
|
||||
// nothing to update.
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
**/
|
||||
package com.raytheon.uf.viz.archive.ui;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
|
@ -63,6 +64,7 @@ import com.raytheon.uf.viz.archive.data.SizeJob;
|
|||
* Aug 06, 2013 #2222 rferrel Changes to display all selected data.
|
||||
* Aug 14, 2013 #2220 rferrel Add refresh method.
|
||||
* Aug 26, 2013 #2225 rferrel Add missing updates.
|
||||
* Apr 23, 2014 #3045 rferrel Added clearTable method and new column name.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -71,12 +73,19 @@ import com.raytheon.uf.viz.archive.data.SizeJob;
|
|||
*/
|
||||
public class ArchiveTableComp extends Composite {
|
||||
|
||||
/** Column label when table displaying category information. */
|
||||
private final String CATEGORY_COL_LABEL = "Data Set";
|
||||
|
||||
/** Column label when table displaying select all information. */
|
||||
private final String SEL_ALL_COL_LABEL = "Archive | Category | Data Set";
|
||||
|
||||
/** Column to display label information. */
|
||||
private final int LABEL_COL_INDEX = 0;
|
||||
|
||||
/** Column to display size information,. */
|
||||
private final int SIZE_COL_INDEX = 1;
|
||||
|
||||
/** Flag to indicate all selections are being displayed. */
|
||||
private boolean showSelectAll = false;
|
||||
|
||||
/** Name of table's archive. */
|
||||
|
@ -205,7 +214,7 @@ public class ArchiveTableComp extends Composite {
|
|||
});
|
||||
|
||||
TableColumn pathColumn = new TableColumn(table, SWT.LEFT);
|
||||
pathColumn.setText("Label");
|
||||
pathColumn.setText(CATEGORY_COL_LABEL);
|
||||
|
||||
TableColumn sizeColumn = new TableColumn(table, SWT.CENTER);
|
||||
if (type == Type.Retention) {
|
||||
|
@ -464,10 +473,17 @@ public class ArchiveTableComp extends Composite {
|
|||
protected void populateTable(String archiveName, String categoryName,
|
||||
List<DisplayData> displayDatas) {
|
||||
showSelectAll = false;
|
||||
table.getColumn(0).setText("Label");
|
||||
table.getColumn(0).setText(CATEGORY_COL_LABEL);
|
||||
populateTable(displayDatas);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear table entries.
|
||||
*/
|
||||
protected void clearTable() {
|
||||
populateTable(new ArrayList<DisplayData>(0));
|
||||
}
|
||||
|
||||
/**
|
||||
* Flag table as showing all selected data and update display.
|
||||
*
|
||||
|
@ -475,7 +491,7 @@ public class ArchiveTableComp extends Composite {
|
|||
*/
|
||||
protected void populateSelectAll(List<DisplayData> displayDatas) {
|
||||
showSelectAll = true;
|
||||
table.getColumn(0).setText("Archive | Category | Label");
|
||||
table.getColumn(0).setText(SEL_ALL_COL_LABEL);
|
||||
populateTable(displayDatas);
|
||||
}
|
||||
|
||||
|
|
|
@ -38,6 +38,7 @@ import org.eclipse.swt.graphics.Point;
|
|||
import org.eclipse.swt.layout.GridData;
|
||||
import org.eclipse.swt.layout.GridLayout;
|
||||
import org.eclipse.swt.widgets.Button;
|
||||
import org.eclipse.swt.widgets.Combo;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
import org.eclipse.swt.widgets.DirectoryDialog;
|
||||
import org.eclipse.swt.widgets.Display;
|
||||
|
@ -45,6 +46,7 @@ import org.eclipse.swt.widgets.Label;
|
|||
import org.eclipse.swt.widgets.Layout;
|
||||
import org.eclipse.swt.widgets.MessageBox;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
import org.eclipse.swt.widgets.Spinner;
|
||||
|
||||
import com.raytheon.uf.common.archive.config.ArchiveConstants.Type;
|
||||
import com.raytheon.uf.common.archive.config.DisplayData;
|
||||
|
@ -71,7 +73,11 @@ import com.raytheon.viz.ui.dialogs.ICloseCallback;
|
|||
* Jul 24, 2013 #2221 rferrel Changes for select configuration.
|
||||
* Aug 06, 2013 #2222 rferrel Changes to display all selected data.
|
||||
* Aug 26, 2013 #2225 rferrel Make perspective independent and no longer modal.
|
||||
* Mar 24, 2014 #2853 rferrel Populate case label directory with default value.
|
||||
* Mar 26, 2014 32880 rferrerl Implement case compression and split.
|
||||
* Apr 11, 2014 #3023 rferrel Configurable Threshold options.
|
||||
* Apr 23, 2014 #3045 rferrel To prevent race condition only allow a case
|
||||
* load after all labels are loaded.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -80,6 +86,9 @@ import com.raytheon.viz.ui.dialogs.ICloseCallback;
|
|||
*/
|
||||
public class CaseCreationDlg extends AbstractArchiveDlg {
|
||||
|
||||
/** The case creation label's default directory. */
|
||||
private final String defaultCaseDir;
|
||||
|
||||
/** Start time label. */
|
||||
private Label startTimeLbl;
|
||||
|
||||
|
@ -101,9 +110,8 @@ public class CaseCreationDlg extends AbstractArchiveDlg {
|
|||
/** Compression check box. */
|
||||
private Button compressChk;
|
||||
|
||||
// TODO restore when Multi-file implemented.
|
||||
// /** Break files check box. */
|
||||
// private Button breakFilesChk;
|
||||
/** Break files check box. */
|
||||
private Button breakFilesChk;
|
||||
|
||||
/** Button to save new select case configuration. */
|
||||
private Button saveAsBtn;
|
||||
|
@ -114,17 +122,14 @@ public class CaseCreationDlg extends AbstractArchiveDlg {
|
|||
/** Button to delete select case configuration. */
|
||||
private Button deleteBtn;
|
||||
|
||||
// TODO restore when Multi-file implemented.
|
||||
// /** File size spinner control. */
|
||||
// private Spinner fileSizeSpnr;
|
||||
/** File size spinner control. */
|
||||
private Spinner fileSizeSpnr;
|
||||
|
||||
// TODO restore when Multi-file implemented.
|
||||
// /** File size combo box. */
|
||||
// private Combo fileSizeCbo;
|
||||
/** File size combo box. */
|
||||
private Combo fileSizeCbo;
|
||||
|
||||
// TODO restore when Multi-file implemented.
|
||||
// /** Maximum file size label. */
|
||||
// private Label maxFileSizeLbl;
|
||||
/** Maximum file size label. */
|
||||
private Label maxFileSizeLbl;
|
||||
|
||||
/** Directory location label. */
|
||||
private Label locationLbl;
|
||||
|
@ -166,19 +171,23 @@ public class CaseCreationDlg extends AbstractArchiveDlg {
|
|||
/** Manager for configurable values for the dialog. */
|
||||
private final CaseCreationManager ccManager;
|
||||
|
||||
/** Flag to indicate all labels for all tables are loaded. */
|
||||
private volatile boolean haveAllLabels = false;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param parentShell
|
||||
* Parent shell.
|
||||
*/
|
||||
public CaseCreationDlg(Shell parentShell) {
|
||||
public CaseCreationDlg(Shell parentShell, String defaultCaseDir) {
|
||||
super(parentShell, SWT.DIALOG_TRIM | SWT.MIN, CAVE.DO_NOT_BLOCK
|
||||
| CAVE.PERSPECTIVE_INDEPENDENT | CAVE.MODE_INDEPENDENT
|
||||
| CAVE.INDEPENDENT_SHELL);
|
||||
this.type = Type.Case;
|
||||
this.setSelect = false;
|
||||
this.type = Type.Case;
|
||||
this.defaultCaseDir = defaultCaseDir;
|
||||
this.ccManager = new CaseCreationManager();
|
||||
}
|
||||
|
||||
|
@ -377,60 +386,58 @@ public class CaseCreationDlg extends AbstractArchiveDlg {
|
|||
*/
|
||||
compressChk = new Button(compressionComp, SWT.CHECK);
|
||||
compressChk.setText("Compress Files");
|
||||
// TODO restore when Multi-file implemented.
|
||||
// compressChk.addSelectionListener(new SelectionAdapter() {
|
||||
// @Override
|
||||
// public void widgetSelected(SelectionEvent e) {
|
||||
// handleCompressSelection();
|
||||
// }
|
||||
// });
|
||||
compressChk.addSelectionListener(new SelectionAdapter() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent e) {
|
||||
handleCompressSelection();
|
||||
}
|
||||
});
|
||||
|
||||
// TODO restore when Multi-file implemented.
|
||||
// gd = new GridData();
|
||||
// gd.horizontalIndent = 20;
|
||||
// breakFilesChk = new Button(compressionComp, SWT.CHECK);
|
||||
// breakFilesChk.setText("Break into multiple files");
|
||||
// breakFilesChk.setLayoutData(gd);
|
||||
// breakFilesChk.setEnabled(false);
|
||||
// breakFilesChk.addSelectionListener(new SelectionAdapter() {
|
||||
// @Override
|
||||
// public void widgetSelected(SelectionEvent e) {
|
||||
// handleBreakFilesSelection(breakFilesChk.getSelection());
|
||||
// }
|
||||
// });
|
||||
gd = new GridData();
|
||||
gd.horizontalIndent = 20;
|
||||
breakFilesChk = new Button(compressionComp, SWT.CHECK);
|
||||
breakFilesChk.setText("Break into multiple files");
|
||||
breakFilesChk.setLayoutData(gd);
|
||||
breakFilesChk.setEnabled(false);
|
||||
breakFilesChk.addSelectionListener(new SelectionAdapter() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent e) {
|
||||
handleBreakFilesSelection(breakFilesChk.getSelection());
|
||||
}
|
||||
});
|
||||
|
||||
// Composite maxFileSizeComp = new Composite(compressionComp, SWT.NONE);
|
||||
// gl = new GridLayout(3, false);
|
||||
// gd = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
|
||||
// gd.horizontalIndent = 20;
|
||||
// maxFileSizeComp.setLayout(gl);
|
||||
// maxFileSizeComp.setLayoutData(gd);
|
||||
//
|
||||
// maxFileSizeLbl = new Label(maxFileSizeComp, SWT.NONE);
|
||||
// maxFileSizeLbl.setText("Max File Size: ");
|
||||
// maxFileSizeLbl.setEnabled(false);
|
||||
//
|
||||
// gd = new GridData(60, SWT.DEFAULT);
|
||||
// fileSizeSpnr = new Spinner(maxFileSizeComp, SWT.BORDER);
|
||||
// fileSizeSpnr.setIncrement(1);
|
||||
// fileSizeSpnr.setPageIncrement(50);
|
||||
// fileSizeSpnr.setMaximum(2000);
|
||||
// fileSizeSpnr.setMinimum(500);
|
||||
// fileSizeSpnr.setLayoutData(gd);
|
||||
// fileSizeSpnr.setEnabled(false);
|
||||
//
|
||||
// fileSizeCbo = new Combo(maxFileSizeComp, SWT.VERTICAL | SWT.DROP_DOWN
|
||||
// | SWT.BORDER | SWT.READ_ONLY);
|
||||
// fileSizeCbo.setEnabled(false);
|
||||
// fileSizeCbo.addSelectionListener(new SelectionAdapter() {
|
||||
// @Override
|
||||
// public void widgetSelected(SelectionEvent e) {
|
||||
// handleFileSizeChangeSelection();
|
||||
// }
|
||||
// });
|
||||
// fileSizeCbo.add("MB");
|
||||
// fileSizeCbo.add("GB");
|
||||
// fileSizeCbo.select(0);
|
||||
Composite maxFileSizeComp = new Composite(compressionComp, SWT.NONE);
|
||||
gl = new GridLayout(3, false);
|
||||
gd = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
|
||||
gd.horizontalIndent = 20;
|
||||
maxFileSizeComp.setLayout(gl);
|
||||
maxFileSizeComp.setLayoutData(gd);
|
||||
|
||||
maxFileSizeLbl = new Label(maxFileSizeComp, SWT.NONE);
|
||||
maxFileSizeLbl.setText("Max File Size: ");
|
||||
maxFileSizeLbl.setEnabled(false);
|
||||
|
||||
gd = new GridData(60, SWT.DEFAULT);
|
||||
fileSizeSpnr = new Spinner(maxFileSizeComp, SWT.BORDER);
|
||||
fileSizeSpnr.setIncrement(1);
|
||||
fileSizeSpnr.setPageIncrement(50);
|
||||
fileSizeSpnr.setMaximum(2000);
|
||||
fileSizeSpnr.setMinimum(500);
|
||||
fileSizeSpnr.setLayoutData(gd);
|
||||
fileSizeSpnr.setEnabled(false);
|
||||
|
||||
fileSizeCbo = new Combo(maxFileSizeComp, SWT.VERTICAL | SWT.DROP_DOWN
|
||||
| SWT.BORDER | SWT.READ_ONLY);
|
||||
fileSizeCbo.setEnabled(false);
|
||||
fileSizeCbo.addSelectionListener(new SelectionAdapter() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent e) {
|
||||
handleFileSizeChangeSelection();
|
||||
}
|
||||
});
|
||||
fileSizeCbo.add("MB");
|
||||
fileSizeCbo.add("GB");
|
||||
fileSizeCbo.select(0);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -490,34 +497,48 @@ public class CaseCreationDlg extends AbstractArchiveDlg {
|
|||
// }
|
||||
// });
|
||||
|
||||
String tooltip = "Waiting on loading of Data Sets.";
|
||||
Color color = shell.getDisplay().getSystemColor(SWT.COLOR_YELLOW);
|
||||
saveBtn = new Button(actionControlComp, SWT.PUSH);
|
||||
saveBtn.setText(" Save ");
|
||||
saveBtn.addSelectionListener(new SelectionAdapter() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent selectionEvent) {
|
||||
saveSelection(selectName);
|
||||
clearModified();
|
||||
if (haveAllLabels) {
|
||||
saveSelection(selectName);
|
||||
clearModified();
|
||||
}
|
||||
}
|
||||
});
|
||||
saveBtn.setToolTipText(tooltip);
|
||||
saveBtn.setEnabled(false);
|
||||
saveBtn.setBackground(color);
|
||||
|
||||
saveAsBtn = new Button(actionControlComp, SWT.PUSH);
|
||||
saveAsBtn.setText(" Save As... ");
|
||||
saveAsBtn.addSelectionListener(new SelectionAdapter() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent selectionEvent) {
|
||||
handleSaveAsCase();
|
||||
if (haveAllLabels) {
|
||||
handleSaveAsCase();
|
||||
}
|
||||
}
|
||||
});
|
||||
saveAsBtn.setToolTipText(tooltip);
|
||||
saveAsBtn.setBackground(color);
|
||||
|
||||
loadBtn = new Button(actionControlComp, SWT.PUSH);
|
||||
loadBtn.setText(" Load... ");
|
||||
loadBtn.addSelectionListener(new SelectionAdapter() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent selectionEvent) {
|
||||
handleLoadCase();
|
||||
if (haveAllLabels) {
|
||||
handleLoadCase();
|
||||
}
|
||||
}
|
||||
});
|
||||
loadBtn.setToolTipText(tooltip);
|
||||
loadBtn.setBackground(color);
|
||||
|
||||
deleteBtn = new Button(actionControlComp, SWT.PUSH);
|
||||
deleteBtn.setText(" Delete... ");
|
||||
|
@ -606,11 +627,12 @@ public class CaseCreationDlg extends AbstractArchiveDlg {
|
|||
public void dialogClosed(Object returnValue) {
|
||||
if (returnValue instanceof String) {
|
||||
String name = returnValue.toString();
|
||||
loadSelect(name);
|
||||
populateTableComp();
|
||||
updateTotals(null);
|
||||
setSelectName(name);
|
||||
clearModified();
|
||||
if (loadSelect(name)) {
|
||||
populateTableComp();
|
||||
updateTotals(null);
|
||||
setSelectName(name);
|
||||
clearModified();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -653,14 +675,9 @@ public class CaseCreationDlg extends AbstractArchiveDlg {
|
|||
List<DisplayData> displayDatas = getSelectedData();
|
||||
boolean doCompress = compressChk.getSelection();
|
||||
|
||||
// TODO restore once Multi-file implemented.
|
||||
// boolean doMultiFiles = breakFilesChk.getSelection();
|
||||
// int compressSize = fileSizeSpnr.getSelection();
|
||||
// String sizeType =
|
||||
// fileSizeCbo.getItem(fileSizeCbo.getSelectionIndex());
|
||||
boolean doMultiFiles = false;
|
||||
int compressSize = 500;
|
||||
String sizeType = "MB";
|
||||
boolean doMultiFiles = breakFilesChk.getSelection();
|
||||
int compressSize = fileSizeSpnr.getSelection();
|
||||
String sizeType = fileSizeCbo.getItem(fileSizeCbo.getSelectionIndex());
|
||||
|
||||
setCursorBusy(true);
|
||||
if (generateCaseDlg == null || generateCaseDlg.isDisposed()) {
|
||||
|
@ -703,19 +720,18 @@ public class CaseCreationDlg extends AbstractArchiveDlg {
|
|||
|
||||
}
|
||||
|
||||
// TODO restore when Multi-file implemented.
|
||||
// /**
|
||||
// * Enable/Disable controls based on the compression check box.
|
||||
// */
|
||||
// private void handleCompressSelection() {
|
||||
// if (compressChk.getSelection()) {
|
||||
// handleBreakFilesSelection(breakFilesChk.getSelection());
|
||||
// } else {
|
||||
// handleBreakFilesSelection(false);
|
||||
// }
|
||||
//
|
||||
// breakFilesChk.setEnabled(compressChk.getSelection());
|
||||
// }
|
||||
/**
|
||||
* Enable/Disable controls based on the compression check box.
|
||||
*/
|
||||
private void handleCompressSelection() {
|
||||
if (compressChk.getSelection()) {
|
||||
handleBreakFilesSelection(breakFilesChk.getSelection());
|
||||
} else {
|
||||
handleBreakFilesSelection(false);
|
||||
}
|
||||
|
||||
breakFilesChk.setEnabled(compressChk.getSelection());
|
||||
}
|
||||
|
||||
/**
|
||||
* Bring up modal dialog to get the case's directory name.
|
||||
|
@ -754,18 +770,17 @@ public class CaseCreationDlg extends AbstractArchiveDlg {
|
|||
}
|
||||
}
|
||||
|
||||
// TODO restore when Multi-file implemented.
|
||||
// /**
|
||||
// * Enable/Disable file size controls.
|
||||
// *
|
||||
// * @param enabled
|
||||
// * Enabled flag.
|
||||
// */
|
||||
// private void handleBreakFilesSelection(boolean enabled) {
|
||||
// maxFileSizeLbl.setEnabled(enabled);
|
||||
// fileSizeSpnr.setEnabled(enabled);
|
||||
// fileSizeCbo.setEnabled(enabled);
|
||||
// }
|
||||
/**
|
||||
* Enable/Disable file size controls.
|
||||
*
|
||||
* @param enabled
|
||||
* Enabled flag.
|
||||
*/
|
||||
private void handleBreakFilesSelection(boolean enabled) {
|
||||
maxFileSizeLbl.setEnabled(enabled);
|
||||
fileSizeSpnr.setEnabled(enabled);
|
||||
fileSizeCbo.setEnabled(enabled);
|
||||
}
|
||||
|
||||
/**
|
||||
* Enables the generate button will user has entered all needed elements.
|
||||
|
@ -777,36 +792,35 @@ public class CaseCreationDlg extends AbstractArchiveDlg {
|
|||
}
|
||||
}
|
||||
|
||||
// TODO restore when Multi-file implemented.
|
||||
// /**
|
||||
// * Action performed when the file size has changed.
|
||||
// */
|
||||
// private void handleFileSizeChangeSelection() {
|
||||
// /*
|
||||
// * If the same item was selected just return.
|
||||
// */
|
||||
// if (fileSizeCbo.getItem(fileSizeCbo.getSelectionIndex()).equals(
|
||||
// (String) fileSizeCbo.getData())) {
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// if (fileSizeCbo.getItem(fileSizeCbo.getSelectionIndex()).equals("MB")) {
|
||||
// fileSizeSpnr.setIncrement(1);
|
||||
// fileSizeSpnr.setPageIncrement(50);
|
||||
// fileSizeSpnr.setMaximum(2000);
|
||||
// fileSizeSpnr.setMinimum(500);
|
||||
// fileSizeSpnr.setSelection(500);
|
||||
// } else {
|
||||
// fileSizeSpnr.setIncrement(1);
|
||||
// fileSizeSpnr.setPageIncrement(5);
|
||||
// fileSizeSpnr.setMinimum(1);
|
||||
// fileSizeSpnr.setMaximum(10);
|
||||
// fileSizeSpnr.setSelection(1);
|
||||
// }
|
||||
//
|
||||
// fileSizeCbo
|
||||
// .setData(fileSizeCbo.getItem(fileSizeCbo.getSelectionIndex()));
|
||||
// }
|
||||
/**
|
||||
* Action performed when the file size has changed.
|
||||
*/
|
||||
private void handleFileSizeChangeSelection() {
|
||||
/*
|
||||
* If the same item was selected just return.
|
||||
*/
|
||||
if (fileSizeCbo.getItem(fileSizeCbo.getSelectionIndex()).equals(
|
||||
(String) fileSizeCbo.getData())) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (fileSizeCbo.getItem(fileSizeCbo.getSelectionIndex()).equals("MB")) {
|
||||
fileSizeSpnr.setIncrement(1);
|
||||
fileSizeSpnr.setPageIncrement(50);
|
||||
fileSizeSpnr.setMaximum(2000);
|
||||
fileSizeSpnr.setMinimum(500);
|
||||
fileSizeSpnr.setSelection(500);
|
||||
} else {
|
||||
fileSizeSpnr.setIncrement(1);
|
||||
fileSizeSpnr.setPageIncrement(5);
|
||||
fileSizeSpnr.setMinimum(1);
|
||||
fileSizeSpnr.setMaximum(10);
|
||||
fileSizeSpnr.setSelection(1);
|
||||
}
|
||||
|
||||
fileSizeCbo
|
||||
.setData(fileSizeCbo.getItem(fileSizeCbo.getSelectionIndex()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the directory browser dialog.
|
||||
|
@ -815,6 +829,15 @@ public class CaseCreationDlg extends AbstractArchiveDlg {
|
|||
DirectoryDialog dlg = new DirectoryDialog(shell, SWT.OPEN);
|
||||
dlg.setText("Case Location");
|
||||
String dirName = dlg.open();
|
||||
updateLocationLbl(dirName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the case label and fields dependent on the change.
|
||||
*
|
||||
* @param dirName
|
||||
*/
|
||||
private void updateLocationLbl(String dirName) {
|
||||
if (dirName != null) {
|
||||
locationLbl.setText(trimDirectoryName(dirName));
|
||||
locationLbl.setToolTipText(dirName);
|
||||
|
@ -1059,4 +1082,62 @@ public class CaseCreationDlg extends AbstractArchiveDlg {
|
|||
super.clearModified();
|
||||
saveBtn.setEnabled(false);
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see com.raytheon.viz.ui.dialogs.CaveSWTDialogBase#opened()
|
||||
*/
|
||||
@Override
|
||||
protected void opened() {
|
||||
super.opened();
|
||||
File caseDir = new File(defaultCaseDir);
|
||||
if (caseDir.isDirectory()) {
|
||||
updateLocationLbl(defaultCaseDir);
|
||||
} else {
|
||||
MessageDialog
|
||||
.openError(
|
||||
shell,
|
||||
"Error",
|
||||
String.format(
|
||||
"Unable to find Case Location directory:\n%s\nMay need to mount the directory.",
|
||||
defaultCaseDir));
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see com.raytheon.uf.viz.archive.ui.AbstractArchiveDlg#haveAllLabels()
|
||||
*/
|
||||
@Override
|
||||
public void loadedAllDisplayData() {
|
||||
haveAllLabels = true;
|
||||
|
||||
/*
|
||||
* Restore the buttons' default background color and tooltip text. The
|
||||
* buttons color is not the system standard and the tool tip text
|
||||
* indicates it is waiting for the labels to be loaded.
|
||||
*/
|
||||
VizApp.runAsync(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (!isDisposed()) {
|
||||
saveBtn.setBackground(null);
|
||||
saveBtn.setToolTipText(null);
|
||||
saveAsBtn.setBackground(null);
|
||||
saveAsBtn.setToolTipText(null);
|
||||
loadBtn.setBackground(null);
|
||||
loadBtn.setToolTipText(null);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isModified() {
|
||||
return super.isModified();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -116,7 +116,7 @@ public class CaseLoadSaveDeleteDlg extends CaveSWTDialog {
|
|||
private void init() {
|
||||
createCaseControls();
|
||||
GuiUtil.addSeparator(shell, SWT.HORIZONTAL);
|
||||
createBottomAcitonButtons();
|
||||
createBottomActionButtons();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -151,7 +151,7 @@ public class CaseLoadSaveDeleteDlg extends CaveSWTDialog {
|
|||
/**
|
||||
* Button layout at the bottom of the dialog.
|
||||
*/
|
||||
private void createBottomAcitonButtons() {
|
||||
private void createBottomActionButtons() {
|
||||
Composite actionControlComp = new Composite(shell, SWT.NONE);
|
||||
GridLayout gl = new GridLayout(2, false);
|
||||
GridData gd = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
|
||||
|
|
|
@ -37,6 +37,7 @@ import java.util.TimerTask;
|
|||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.zip.GZIPOutputStream;
|
||||
|
||||
import org.apache.commons.compress.archivers.ArchiveException;
|
||||
import org.apache.commons.compress.archivers.ArchiveOutputStream;
|
||||
import org.apache.commons.compress.archivers.ArchiveStreamFactory;
|
||||
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
|
||||
|
@ -94,6 +95,7 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
|
|||
* implementation of compression.
|
||||
* Oct 08, 2013 2442 rferrel Remove category directory.
|
||||
* Feb 04, 2014 2270 rferrel Move HDF files to parent's directory.
|
||||
* Mar 26, 2014 2880 rferrel Compress and split cases implemented.
|
||||
* Apr 03, 2014 2862 rferrel Logic for shared locking of top level directories.
|
||||
*
|
||||
* </pre>
|
||||
|
@ -143,9 +145,8 @@ public class GenerateCaseDlg extends CaveSWTDialog {
|
|||
/** When true break the compress file into multiple files. */
|
||||
private final boolean doMultiFiles;
|
||||
|
||||
// Needed when compress and split implemented
|
||||
// /** The compress size for multiple files. */
|
||||
// private final long splitSize;
|
||||
/** The compress size for multiple files. */
|
||||
private final long splitSize;
|
||||
|
||||
/** Job to perform the case generation off of the UI thread. */
|
||||
private GenerateJob generateJob;
|
||||
|
@ -187,8 +188,7 @@ public class GenerateCaseDlg extends CaveSWTDialog {
|
|||
this.doCompress = doCompress;
|
||||
this.doMultiFiles = doMultiFiles;
|
||||
|
||||
// Needed when compress and split implemented.
|
||||
// this.splitSize = splitSize;
|
||||
this.splitSize = splitSize;
|
||||
this.caseName = caseDir.getAbsolutePath().substring(
|
||||
targetDir.getAbsolutePath().length() + 1);
|
||||
setText("Generating - " + caseName);
|
||||
|
@ -498,6 +498,9 @@ public class GenerateCaseDlg extends CaveSWTDialog {
|
|||
boolean allowCopy = true;
|
||||
CopyInfo copyInfo = null;
|
||||
|
||||
ITimer timer = TimeUtil.getTimer();
|
||||
timer.start();
|
||||
|
||||
try {
|
||||
/*
|
||||
* The sourceDataList is sorted so all the displayDatas for a
|
||||
|
@ -556,7 +559,7 @@ public class GenerateCaseDlg extends CaveSWTDialog {
|
|||
if (!doCompress) {
|
||||
caseCopy = new CopyMove();
|
||||
} else if (doMultiFiles) {
|
||||
caseCopy = new CompressAndSplitCopy();
|
||||
caseCopy = new CompressAndSplitCopy(splitSize);
|
||||
} else {
|
||||
caseCopy = new CompressCopy();
|
||||
}
|
||||
|
@ -658,11 +661,18 @@ public class GenerateCaseDlg extends CaveSWTDialog {
|
|||
try {
|
||||
// Allow the caseCopy to clean its resources.
|
||||
caseCopy.finishCase();
|
||||
} catch (CaseCreateException ex) {
|
||||
} catch (Exception ex) {
|
||||
// Ignore
|
||||
}
|
||||
caseCopy = null;
|
||||
}
|
||||
timer.stop();
|
||||
if (statusHandler.isPriorityEnabled(Priority.INFO)) {
|
||||
String message = String.format("Case %s took %s.",
|
||||
caseDir.getName(),
|
||||
TimeUtil.prettyDuration(timer.getElapsedTime()));
|
||||
statusHandler.handle(Priority.INFO, message);
|
||||
}
|
||||
}
|
||||
|
||||
// Release current lock.
|
||||
|
@ -874,6 +884,8 @@ public class GenerateCaseDlg extends CaveSWTDialog {
|
|||
* This class copies selected files/directories to a case-directory/archive.
|
||||
*/
|
||||
private static class CopyMove implements ICaseCopy {
|
||||
private final IUFStatusHandler statusHandler;
|
||||
|
||||
/**
|
||||
* Flag to indicate user canceled the case generation.
|
||||
*/
|
||||
|
@ -889,6 +901,13 @@ public class GenerateCaseDlg extends CaveSWTDialog {
|
|||
*/
|
||||
private int startRelativePath;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
public CopyMove() {
|
||||
statusHandler = UFStatus.getHandler(this.getClass());
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy source File to desired destination.
|
||||
*
|
||||
|
@ -901,6 +920,16 @@ public class GenerateCaseDlg extends CaveSWTDialog {
|
|||
return;
|
||||
}
|
||||
|
||||
if (!source.exists()) {
|
||||
if (statusHandler.isPriorityEnabled(Priority.DEBUG)) {
|
||||
String message = String.format(
|
||||
"Purged and unable to place in case: %s",
|
||||
source.getAbsoluteFile());
|
||||
statusHandler.handle(Priority.DEBUG, message);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (source.isDirectory()) {
|
||||
|
||||
if (!destination.exists()) {
|
||||
|
@ -924,6 +953,11 @@ public class GenerateCaseDlg extends CaveSWTDialog {
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see com.raytheon.uf.viz.archive.ui.ICaseCopy#copy(java.io.File)
|
||||
*/
|
||||
@Override
|
||||
public void copy(File source) throws CaseCreateException {
|
||||
String relativePath = source.getAbsolutePath().substring(
|
||||
|
@ -933,10 +967,17 @@ public class GenerateCaseDlg extends CaveSWTDialog {
|
|||
destination.getParentFile().mkdirs();
|
||||
copyFile(source, destination);
|
||||
} catch (IOException ex) {
|
||||
throw new CaseCreateException("CopyMove.copy: ", ex);
|
||||
throw new CaseCreateException("Copy Move ", ex);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see com.raytheon.uf.viz.archive.ui.ICaseCopy#startCase(java.io.File,
|
||||
* com.raytheon.uf.common.archive.config.DisplayData,
|
||||
* java.util.concurrent.atomic.AtomicBoolean)
|
||||
*/
|
||||
@Override
|
||||
public void startCase(File caseDir, DisplayData displayData,
|
||||
AtomicBoolean shutdown) {
|
||||
|
@ -948,6 +989,11 @@ public class GenerateCaseDlg extends CaveSWTDialog {
|
|||
startRelativePath = displayData.getRootDir().length();
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see com.raytheon.uf.viz.archive.ui.ICaseCopy#finishCase()
|
||||
*/
|
||||
@Override
|
||||
public void finishCase() {
|
||||
// Nothing to do.
|
||||
|
@ -957,55 +1003,79 @@ public class GenerateCaseDlg extends CaveSWTDialog {
|
|||
/**
|
||||
* This class takes selected directories/files to
|
||||
* case-directory/archive/compress-category-file. The compress-category-file
|
||||
* is a tar gzip file containing the categorie's data.
|
||||
* is a tar gzip file containing the category's data.
|
||||
*/
|
||||
private static class CompressCopy implements ICaseCopy {
|
||||
private final IUFStatusHandler statusHandler;
|
||||
|
||||
/**
|
||||
* Flag to indicate user canceled case generation.
|
||||
*/
|
||||
private AtomicBoolean shutdown;
|
||||
protected AtomicBoolean shutdown;
|
||||
|
||||
/**
|
||||
* Top Level destination directory.
|
||||
*/
|
||||
private File destDir;
|
||||
protected File destDir;
|
||||
|
||||
/**
|
||||
* Stream to the file being created.
|
||||
*/
|
||||
private FileOutputStream fileStream;
|
||||
protected FileOutputStream fileStream;
|
||||
|
||||
/**
|
||||
* Stream to perform the compression.
|
||||
*/
|
||||
private GZIPOutputStream zipStream;
|
||||
protected GZIPOutputStream zipStream;
|
||||
|
||||
/**
|
||||
* Stream to create the tar image.
|
||||
*/
|
||||
private ArchiveOutputStream tarStream;
|
||||
protected ArchiveOutputStream tarStream;
|
||||
|
||||
/**
|
||||
* The category directory name used to generate tar file name(s).
|
||||
*/
|
||||
protected String categoryDirName;
|
||||
|
||||
/**
|
||||
* Index to start of relative path in source File.
|
||||
*/
|
||||
private int startRelativePath;
|
||||
protected int startRelativePath;
|
||||
|
||||
/**
|
||||
* Directories already created in the tar image.
|
||||
*/
|
||||
private final HashSet<File> tarDirFile = new HashSet<File>();
|
||||
protected final HashSet<File> tarDirFile = new HashSet<File>();
|
||||
|
||||
/**
|
||||
* Buffer to use for reading in a file.
|
||||
*/
|
||||
private final byte[] buffer = new byte[(int) (32 * FileUtils.ONE_KB)];
|
||||
protected final byte[] buffer = new byte[(int) (32 * FileUtils.ONE_KB)];
|
||||
|
||||
/**
|
||||
* Current tar file being created.
|
||||
*/
|
||||
protected File tarFile;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
public CompressCopy() {
|
||||
this.statusHandler = UFStatus.getHandler(this.getClass());
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see com.raytheon.uf.viz.archive.ui.ICaseCopy#copy(java.io.File)
|
||||
*/
|
||||
@Override
|
||||
public void copy(File source) throws CaseCreateException {
|
||||
try {
|
||||
addParentDir(source);
|
||||
addTarFiles(new File[] { source });
|
||||
} catch (IOException e) {
|
||||
} catch (Exception e) {
|
||||
throw new CaseCreateException("Compress Copy failed: ", e);
|
||||
}
|
||||
}
|
||||
|
@ -1015,14 +1085,26 @@ public class GenerateCaseDlg extends CaveSWTDialog {
|
|||
*
|
||||
* @param files
|
||||
* @throws IOException
|
||||
* @throws ArchiveException
|
||||
* @throws CaseCreateException
|
||||
*/
|
||||
private void addTarFiles(File[] files) throws IOException {
|
||||
private void addTarFiles(File[] files) throws IOException,
|
||||
ArchiveException {
|
||||
for (File file : files) {
|
||||
if (shutdown.get()) {
|
||||
return;
|
||||
}
|
||||
String name = file.getAbsolutePath().substring(
|
||||
startRelativePath);
|
||||
if (!file.exists()) {
|
||||
if (statusHandler.isPriorityEnabled(Priority.DEBUG)) {
|
||||
String message = String.format(
|
||||
"Purged and unable to place in case: %s",
|
||||
file.getAbsoluteFile());
|
||||
statusHandler.handle(Priority.DEBUG, message);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (file.isDirectory()) {
|
||||
if (!tarDirFile.contains(file)) {
|
||||
TarArchiveEntry entry = new TarArchiveEntry(file, name);
|
||||
|
@ -1032,6 +1114,7 @@ public class GenerateCaseDlg extends CaveSWTDialog {
|
|||
addTarFiles(file.listFiles());
|
||||
}
|
||||
} else if (file.exists()) {
|
||||
checkFit(file);
|
||||
// DR 2270 bump HDF files up a directory.
|
||||
if (name.endsWith(hdfExt)) {
|
||||
File destination = new File(file.getParentFile()
|
||||
|
@ -1065,7 +1148,7 @@ public class GenerateCaseDlg extends CaveSWTDialog {
|
|||
*
|
||||
* @param stream
|
||||
*/
|
||||
private void closeStream(Closeable stream) {
|
||||
protected void closeStream(Closeable stream) {
|
||||
try {
|
||||
stream.close();
|
||||
} catch (IOException ex) {
|
||||
|
@ -1073,13 +1156,21 @@ public class GenerateCaseDlg extends CaveSWTDialog {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Allows sub-class to check to see if file will fit in the current tar
|
||||
* file and if needed setup new tar file.
|
||||
*/
|
||||
protected void checkFit(File file) throws IOException, ArchiveException {
|
||||
// Do not change the tar file.
|
||||
}
|
||||
|
||||
/**
|
||||
* If needed add parent directories to the tar image.
|
||||
*
|
||||
* @param file
|
||||
* @throws IOException
|
||||
*/
|
||||
private void addParentDir(File file) throws IOException {
|
||||
protected void addParentDir(File file) throws IOException {
|
||||
File parent = file.getParentFile();
|
||||
if (parent != null && !tarDirFile.contains(parent)
|
||||
&& (parent.getAbsolutePath().length() > startRelativePath)) {
|
||||
|
@ -1093,6 +1184,13 @@ public class GenerateCaseDlg extends CaveSWTDialog {
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see com.raytheon.uf.viz.archive.ui.ICaseCopy#startCase(java.io.File,
|
||||
* com.raytheon.uf.common.archive.config.DisplayData,
|
||||
* java.util.concurrent.atomic.AtomicBoolean)
|
||||
*/
|
||||
@Override
|
||||
public void startCase(File caseDir, DisplayData displayData,
|
||||
AtomicBoolean shutdown) throws CaseCreateException {
|
||||
|
@ -1100,30 +1198,67 @@ public class GenerateCaseDlg extends CaveSWTDialog {
|
|||
this.shutdown = shutdown;
|
||||
String archiveDirName = ArchiveConstants
|
||||
.convertToFileName(displayData.getArchiveName());
|
||||
String categoryDirName = ArchiveConstants
|
||||
categoryDirName = ArchiveConstants
|
||||
.convertToFileName(displayData.getCategoryName());
|
||||
destDir = new File(caseDir, archiveDirName);
|
||||
destDir.mkdirs();
|
||||
tarDirFile.clear();
|
||||
startRelativePath = displayData.getRootDir().length();
|
||||
File tarFile = new File(destDir, categoryDirName
|
||||
+ ArchiveConstants.TAR_EXTENSION);
|
||||
fileStream = new FileOutputStream(tarFile);
|
||||
zipStream = new GZIPOutputStream(fileStream);
|
||||
ArchiveStreamFactory factory = new ArchiveStreamFactory();
|
||||
tarStream = factory.createArchiveOutputStream(
|
||||
ArchiveStreamFactory.TAR, zipStream);
|
||||
if (tarStream instanceof TarArchiveOutputStream) {
|
||||
((TarArchiveOutputStream) tarStream)
|
||||
.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU);
|
||||
}
|
||||
openStreams();
|
||||
} catch (Exception e) {
|
||||
throw new CaseCreateException("CompressCopy.startCase: ", e);
|
||||
throw new CaseCreateException("Compress Copy start case: ", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine a new tar file and set up its streams.
|
||||
*
|
||||
* @throws IOException
|
||||
* @throws ArchiveException
|
||||
*/
|
||||
protected void openStreams() throws IOException, ArchiveException {
|
||||
tarDirFile.clear();
|
||||
tarFile = getTarFile();
|
||||
fileStream = new FileOutputStream(tarFile);
|
||||
zipStream = new GZIPOutputStream(fileStream);
|
||||
ArchiveStreamFactory factory = new ArchiveStreamFactory();
|
||||
tarStream = factory.createArchiveOutputStream(
|
||||
ArchiveStreamFactory.TAR, zipStream);
|
||||
if (tarStream instanceof TarArchiveOutputStream) {
|
||||
((TarArchiveOutputStream) tarStream)
|
||||
.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine new tar file.
|
||||
*
|
||||
* @return tarFile
|
||||
*/
|
||||
protected File getTarFile() {
|
||||
return new File(destDir, categoryDirName
|
||||
+ ArchiveConstants.TAR_EXTENSION);
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see com.raytheon.uf.viz.archive.ui.ICaseCopy#finishCase()
|
||||
*/
|
||||
@Override
|
||||
public void finishCase() throws CaseCreateException {
|
||||
try {
|
||||
closeStreams();
|
||||
} catch (IOException e) {
|
||||
throw new CaseCreateException("Compress Copy finish: ", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Close all the streams for current tar file.
|
||||
*
|
||||
* @throws IOException
|
||||
*/
|
||||
protected void closeStreams() throws IOException {
|
||||
try {
|
||||
if (tarStream != null) {
|
||||
tarStream.finish();
|
||||
|
@ -1131,8 +1266,6 @@ public class GenerateCaseDlg extends CaveSWTDialog {
|
|||
if (zipStream != null) {
|
||||
zipStream.finish();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
throw new CaseCreateException("CaseCopy.finish: ", e);
|
||||
} finally {
|
||||
if (tarStream != null) {
|
||||
closeStream(tarStream);
|
||||
|
@ -1150,316 +1283,90 @@ public class GenerateCaseDlg extends CaveSWTDialog {
|
|||
|
||||
/*
|
||||
* This class intended for making "image" files read for burning to a CD or
|
||||
* DVD. Need to resolve issues on how this should be done.
|
||||
* DVD.
|
||||
*/
|
||||
private static class CompressAndSplitCopy implements ICaseCopy {
|
||||
private static class CompressAndSplitCopy extends CompressCopy {
|
||||
/**
|
||||
* Number of bytes to back off the split limit to allow finishing the
|
||||
* tar without exceeding the limit.
|
||||
*/
|
||||
private final long BACK_OFF_BYTES = 5 * FileUtils.ONE_KB;
|
||||
|
||||
/**
|
||||
* Maximum bytes for a tar file.
|
||||
*/
|
||||
private final long splitSize;
|
||||
|
||||
/**
|
||||
* Count of tar files for a category.
|
||||
*/
|
||||
private int fileCnt = 0;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param splitSize
|
||||
*/
|
||||
public CompressAndSplitCopy(long splitSize) {
|
||||
super();
|
||||
this.splitSize = splitSize - BACK_OFF_BYTES;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see
|
||||
* com.raytheon.uf.viz.archive.ui.GenerateCaseDlg.CompressCopy#startCase
|
||||
* (java.io.File, com.raytheon.uf.common.archive.config.DisplayData,
|
||||
* java.util.concurrent.atomic.AtomicBoolean)
|
||||
*/
|
||||
@Override
|
||||
public void startCase(File caseDir, DisplayData displayData,
|
||||
AtomicBoolean shutdown) throws CaseCreateException {
|
||||
throw new CaseCreateException(
|
||||
"Compress and split not yet implemented.");
|
||||
this.fileCnt = 0;
|
||||
super.startCase(caseDir, displayData, shutdown);
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see
|
||||
* com.raytheon.uf.viz.archive.ui.GenerateCaseDlg.CompressCopy#getTarFile
|
||||
* ()
|
||||
*/
|
||||
@Override
|
||||
public void copy(File source) throws CaseCreateException {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
protected File getTarFile() {
|
||||
int cnt = ++fileCnt;
|
||||
String name = String.format("%s_%03d%s", categoryDirName, cnt,
|
||||
ArchiveConstants.TAR_EXTENSION);
|
||||
return new File(destDir, name);
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see
|
||||
* com.raytheon.uf.viz.archive.ui.GenerateCaseDlg.CompressCopy#checkFit
|
||||
* (java.io.File)
|
||||
*/
|
||||
@Override
|
||||
public void finishCase() {
|
||||
// TODO Auto-generated method stub
|
||||
protected void checkFit(File file) throws IOException, ArchiveException {
|
||||
// force update of tarFile length.
|
||||
tarStream.flush();
|
||||
zipStream.flush();
|
||||
fileStream.flush();
|
||||
|
||||
/*
|
||||
* Most likely over estimates the size since it is unknown how well
|
||||
* file will compress.
|
||||
*/
|
||||
long size = tarFile.length() + file.length();
|
||||
if (size >= splitSize) {
|
||||
closeStreams();
|
||||
openStreams();
|
||||
addParentDir(file);
|
||||
}
|
||||
}
|
||||
|
||||
// TODO Example code for future implementation of this class.
|
||||
// Will need to break up into the starCase, copy and finishCase will
|
||||
// need close and join.
|
||||
|
||||
// private void compressAndSplitCase() {
|
||||
// ArchiveOutputStream tarStream = null;
|
||||
// GZIPOutputStream zipStream = null;
|
||||
// try {
|
||||
// Pipe pipe = Pipe.open();
|
||||
// OutputStream poStream = Channels.newOutputStream(pipe.sink());
|
||||
// zipStream = new GZIPOutputStream(poStream);
|
||||
// ArchiveStreamFactory factory = new ArchiveStreamFactory();
|
||||
//
|
||||
// tarStream = factory.createArchiveOutputStream(
|
||||
// ArchiveStreamFactory.TAR, zipStream);
|
||||
//
|
||||
// if (tarStream instanceof TarArchiveOutputStream) {
|
||||
// ((TarArchiveOutputStream) tarStream)
|
||||
// .setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU);
|
||||
// }
|
||||
//
|
||||
// final InputStream piStream = Channels.newInputStream(pipe
|
||||
// .source());
|
||||
// splitDone.set(false);
|
||||
//
|
||||
// Job splitJob = new Job("Split") {
|
||||
//
|
||||
// @Override
|
||||
// protected IStatus run(IProgressMonitor monitor) {
|
||||
// OutputStream splitStream = null;
|
||||
// long totSize = 0;
|
||||
// try {
|
||||
// byte[] buffer = new byte[12 * 1024];
|
||||
//
|
||||
// int bufCnt = 0;
|
||||
// long splitCnt = 0L;
|
||||
// while ((bufCnt = piStream.read(buffer)) != -1) {
|
||||
// totSize += bufCnt;
|
||||
// if (splitStream == null) {
|
||||
// splitStream = openSplitFile(++numSplitFiles);
|
||||
// }
|
||||
// long fileSize = splitCnt + bufCnt;
|
||||
// if (fileSize < splitSize) {
|
||||
// splitStream.write(buffer, 0, bufCnt);
|
||||
// splitCnt = fileSize;
|
||||
// } else if (fileSize == splitSize) {
|
||||
// splitStream.write(buffer, 0, bufCnt);
|
||||
// splitStream.close();
|
||||
// splitStream = null;
|
||||
// splitCnt = 0L;
|
||||
// } else {
|
||||
// int cnt = (int) (splitSize - splitCnt);
|
||||
// splitStream.write(buffer, 0, cnt);
|
||||
// splitStream.close();
|
||||
// splitStream = openSplitFile(++numSplitFiles);
|
||||
// int remainder = bufCnt - cnt;
|
||||
// splitStream.write(buffer, cnt, remainder);
|
||||
// splitCnt = remainder;
|
||||
// }
|
||||
// }
|
||||
// } catch (IOException e) {
|
||||
// statusHandler.handle(Priority.PROBLEM,
|
||||
// e.getLocalizedMessage(), e);
|
||||
// } finally {
|
||||
// if (splitStream != null) {
|
||||
// try {
|
||||
// splitStream.close();
|
||||
// } catch (IOException e) {
|
||||
// // Ignore
|
||||
// }
|
||||
// }
|
||||
// splitDone.set(true);
|
||||
// System.out.println("totalSize: " + totSize
|
||||
// + ", splitSize: " + splitSize
|
||||
// + ", numSplitFiles: " + numSplitFiles);
|
||||
// }
|
||||
//
|
||||
// return Status.OK_STATUS;
|
||||
// }
|
||||
// };
|
||||
// splitJob.schedule();
|
||||
//
|
||||
// createTarFile(tarStream, caseDir.listFiles());
|
||||
// tarStream.finish();
|
||||
// zipStream.finish();
|
||||
// try {
|
||||
// tarStream.close();
|
||||
// } catch (IOException ex) {
|
||||
// // Ignore
|
||||
// }
|
||||
// tarStream = null;
|
||||
//
|
||||
// try {
|
||||
// zipStream.close();
|
||||
// } catch (IOException ex) {
|
||||
// // Ignore
|
||||
// }
|
||||
// zipStream = null;
|
||||
//
|
||||
// while (!splitDone.get()) {
|
||||
// if (splitJob.getState() == Job.RUNNING) {
|
||||
// try {
|
||||
// System.out.println("splitJob.join()");
|
||||
// splitJob.join();
|
||||
// } catch (InterruptedException e) {
|
||||
// statusHandler.handle(Priority.INFO,
|
||||
// e.getLocalizedMessage(), e);
|
||||
// }
|
||||
// } else {
|
||||
// try {
|
||||
// private void compressAndSplitCase() {
|
||||
// ArchiveOutputStream tarStream = null;
|
||||
// GZIPOutputStream zipStream = null;
|
||||
// try {
|
||||
// Pipe pipe = Pipe.open();
|
||||
// OutputStream poStream = Channels.newOutputStream(pipe.sink());
|
||||
// zipStream = new GZIPOutputStream(poStream);
|
||||
// ArchiveStreamFactory factory = new ArchiveStreamFactory();
|
||||
//
|
||||
// tarStream = factory.createArchiveOutputStream(
|
||||
// ArchiveStreamFactory.TAR, zipStream);
|
||||
//
|
||||
// if (tarStream instanceof TarArchiveOutputStream) {
|
||||
// ((TarArchiveOutputStream) tarStream)
|
||||
// .setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU);
|
||||
// }
|
||||
//
|
||||
// final InputStream piStream = Channels.newInputStream(pipe
|
||||
// .source());
|
||||
// splitDone.set(false);
|
||||
//
|
||||
// Job splitJob = new Job("Split") {
|
||||
//
|
||||
// @Override
|
||||
// protected IStatus run(IProgressMonitor monitor) {
|
||||
// OutputStream splitStream = null;
|
||||
// long totSize = 0;
|
||||
// try {
|
||||
// byte[] buffer = new byte[12 * 1024];
|
||||
//
|
||||
// int bufCnt = 0;
|
||||
// long splitCnt = 0L;
|
||||
// while ((bufCnt = piStream.read(buffer)) != -1) {
|
||||
// totSize += bufCnt;
|
||||
// if (splitStream == null) {
|
||||
// splitStream = openSplitFile(++numSplitFiles);
|
||||
// }
|
||||
// long fileSize = splitCnt + bufCnt;
|
||||
// if (fileSize < splitSize) {
|
||||
// splitStream.write(buffer, 0, bufCnt);
|
||||
// splitCnt = fileSize;
|
||||
// } else if (fileSize == splitSize) {
|
||||
// splitStream.write(buffer, 0, bufCnt);
|
||||
// splitStream.close();
|
||||
// splitStream = null;
|
||||
// splitCnt = 0L;
|
||||
// } else {
|
||||
// int cnt = (int) (splitSize - splitCnt);
|
||||
// splitStream.write(buffer, 0, cnt);
|
||||
// splitStream.close();
|
||||
// splitStream = openSplitFile(++numSplitFiles);
|
||||
// int remainder = bufCnt - cnt;
|
||||
// splitStream.write(buffer, cnt, remainder);
|
||||
// splitCnt = remainder;
|
||||
// }
|
||||
// }
|
||||
// } catch (IOException e) {
|
||||
// statusHandler.handle(Priority.PROBLEM,
|
||||
// e.getLocalizedMessage(), e);
|
||||
// } finally {
|
||||
// if (splitStream != null) {
|
||||
// try {
|
||||
// splitStream.close();
|
||||
// } catch (IOException e) {
|
||||
// // Ignore
|
||||
// }
|
||||
// }
|
||||
// splitDone.set(true);
|
||||
// System.out.println("totalSize: " + totSize
|
||||
// + ", splitSize: " + splitSize
|
||||
// + ", numSplitFiles: " + numSplitFiles);
|
||||
// }
|
||||
//
|
||||
// return Status.OK_STATUS;
|
||||
// }
|
||||
// };
|
||||
// splitJob.schedule();
|
||||
//
|
||||
// createTarFile(tarStream, caseDir.listFiles());
|
||||
// tarStream.finish();
|
||||
// zipStream.finish();
|
||||
// try {
|
||||
// tarStream.close();
|
||||
// } catch (IOException ex) {
|
||||
// // Ignore
|
||||
// }
|
||||
// tarStream = null;
|
||||
//
|
||||
// try {
|
||||
// zipStream.close();
|
||||
// } catch (IOException ex) {
|
||||
// // Ignore
|
||||
// }
|
||||
// zipStream = null;
|
||||
//
|
||||
// while (!splitDone.get()) {
|
||||
// if (splitJob.getState() == Job.RUNNING) {
|
||||
// try {
|
||||
// System.out.println("splitJob.join()");
|
||||
// splitJob.join();
|
||||
// } catch (InterruptedException e) {
|
||||
// statusHandler.handle(Priority.INFO,
|
||||
// e.getLocalizedMessage(), e);
|
||||
// }
|
||||
// } else {
|
||||
// try {
|
||||
// Thread.sleep(200L);
|
||||
// } catch (InterruptedException e) {
|
||||
// statusHandler.handle(Priority.INFO,
|
||||
// e.getLocalizedMessage(), e);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// } catch (IOException e) {
|
||||
// statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(),
|
||||
// e);
|
||||
// } catch (ArchiveException e1) {
|
||||
// statusHandler.handle(Priority.PROBLEM,
|
||||
// e1.getLocalizedMessage(), e1);
|
||||
// } finally {
|
||||
// if (tarStream != null) {
|
||||
// try {
|
||||
// tarStream.close();
|
||||
// } catch (IOException e) {
|
||||
// // Ignore
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// if (zipStream != null) {
|
||||
// try {
|
||||
// zipStream.close();
|
||||
// } catch (IOException e) {
|
||||
// // Ignore
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// setProgressBar(100, SWT.NORMAL);
|
||||
// deleteCaseDir();
|
||||
// String message = caseDir.getName() + "split into " + numSplitFiles
|
||||
// + " file(s).";
|
||||
// setStateLbl(message, null);
|
||||
// }
|
||||
// Thread.sleep(200L);
|
||||
// } catch (InterruptedException e) {
|
||||
// statusHandler.handle(Priority.INFO,
|
||||
// e.getLocalizedMessage(), e);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// } catch (IOException e) {
|
||||
// statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(),
|
||||
// e);
|
||||
// } catch (ArchiveException e1) {
|
||||
// statusHandler.handle(Priority.PROBLEM,
|
||||
// e1.getLocalizedMessage(), e1);
|
||||
// } finally {
|
||||
// if (tarStream != null) {
|
||||
// try {
|
||||
// tarStream.close();
|
||||
// } catch (IOException e) {
|
||||
// // Ignore
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// if (zipStream != null) {
|
||||
// try {
|
||||
// zipStream.close();
|
||||
// } catch (IOException e) {
|
||||
// // Ignore
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// setProgressBar(100, SWT.NORMAL);
|
||||
// deleteCaseDir();
|
||||
// String message = caseDir.getName() + "split into " + numSplitFiles
|
||||
// + " file(s).";
|
||||
// setStateLbl(message, null);
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
/** Task to update the lock plugin's last execute time. */
|
||||
|
|
|
@ -2,7 +2,7 @@ Manifest-Version: 1.0
|
|||
Bundle-ManifestVersion: 2
|
||||
Bundle-Name: Ccfp Plug-in
|
||||
Bundle-SymbolicName: com.raytheon.uf.viz.ccfp;singleton:=true
|
||||
Bundle-Version: 1.14.0
|
||||
Bundle-Version: 1.14.0.qualifier
|
||||
Bundle-Vendor: RAYTHEON
|
||||
Require-Bundle: com.raytheon.uf.viz.core
|
||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
|
||||
|
|
|
@ -19,9 +19,10 @@
|
|||
**/
|
||||
package com.raytheon.uf.viz.collaboration.comm.identity.event;
|
||||
|
||||
import org.jivesoftware.smack.RosterEntry;
|
||||
import org.jivesoftware.smack.packet.Presence;
|
||||
|
||||
import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
|
||||
|
||||
/**
|
||||
* Event fired when the roster has changed
|
||||
*
|
||||
|
@ -33,6 +34,7 @@ import org.jivesoftware.smack.packet.Presence;
|
|||
* ------------ ---------- ----------- --------------------------
|
||||
* Apr 06, 2012 jkorman Initial creation.
|
||||
* Feb 24, 2014 2632 mpduff Added getPresence, changed getItem to getEntry.
|
||||
* Apr 24, 2014 3070 bclement getEntry() returns UserId
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -54,7 +56,7 @@ public interface IRosterChangeEvent {
|
|||
*
|
||||
* @return The changed entry
|
||||
*/
|
||||
RosterEntry getEntry();
|
||||
UserId getEntry();
|
||||
|
||||
/**
|
||||
* Get the Presence object.
|
||||
|
|
|
@ -50,7 +50,8 @@ import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
|
|||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Apr 04, 2014 2785 mpduff Initial creation
|
||||
* Apr 14, 2014 2903 bclement moved from session subpackage to account
|
||||
* Apr 14, 2014 2903 bclement moved from session subpackage to account
|
||||
* Apr 24, 2014 3070 bclement RosterChangeEvent changes, adds back even if blocked
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -119,10 +120,8 @@ public class SubscriptionPacketListener implements PacketListener,
|
|||
* @param fromID
|
||||
*/
|
||||
private void handleSubscribed(UserId fromID) {
|
||||
ContactsManager cm = sessionManager.getContactsManager();
|
||||
RosterEntry entry = cm.getRosterEntry(fromID);
|
||||
IRosterChangeEvent event = new RosterChangeEvent(RosterChangeType.ADD,
|
||||
entry);
|
||||
fromID);
|
||||
sessionManager.postEvent(event);
|
||||
}
|
||||
|
||||
|
@ -132,13 +131,8 @@ public class SubscriptionPacketListener implements PacketListener,
|
|||
* @param fromID
|
||||
*/
|
||||
private void handleUnsubscribed(UserId fromID) {
|
||||
ContactsManager cm = sessionManager.getContactsManager();
|
||||
RosterEntry entry = cm.getRosterEntry(fromID);
|
||||
if (entry == null) {
|
||||
return;
|
||||
}
|
||||
IRosterChangeEvent event = new RosterChangeEvent(
|
||||
RosterChangeType.DELETE, entry);
|
||||
RosterChangeType.DELETE, fromID);
|
||||
sessionManager.postEvent(event);
|
||||
}
|
||||
|
||||
|
@ -149,28 +143,29 @@ public class SubscriptionPacketListener implements PacketListener,
|
|||
*/
|
||||
private void handleSubResponse(UserId fromId, SubscriptionResponse response) {
|
||||
Presence.Type subscribedType;
|
||||
ContactsManager cm = sessionManager.getContactsManager();
|
||||
boolean addToRoster = false;
|
||||
if (response.isAccepted()) {
|
||||
subscribedType = Presence.Type.subscribed;
|
||||
RosterEntry entry = cm.getRosterEntry(fromId);
|
||||
if (entry == null) {
|
||||
addToRoster = true;
|
||||
}
|
||||
} else {
|
||||
subscribedType = Presence.Type.unsubscribed;
|
||||
}
|
||||
|
||||
Presence presence = new Presence(subscribedType);
|
||||
try {
|
||||
sendPresence(fromId, presence);
|
||||
if (addToRoster) {
|
||||
if (response.addToGroup()) {
|
||||
cm.addToGroup(response.getGroup(), fromId);
|
||||
} else {
|
||||
cm.addToRoster(fromId);
|
||||
if (response.isAccepted()) {
|
||||
/* add them back */
|
||||
ContactsManager cm = sessionManager.getContactsManager();
|
||||
RosterEntry entry = cm.getRosterEntry(fromId);
|
||||
if (entry != null && ContactsManager.isBlocked(entry)) {
|
||||
/* in roster, but blocked */
|
||||
cm.sendContactRequest(fromId);
|
||||
}
|
||||
if (response.addToGroup()) {
|
||||
/*
|
||||
* if contact is not in roster, this will also send them a
|
||||
* contact request, otherwise it just add them to the group
|
||||
*/
|
||||
cm.addToGroup(response.getGroup(), fromId);
|
||||
}
|
||||
|
||||
}
|
||||
} catch (CollaborationException e) {
|
||||
log.error("Unable to send presence", e);
|
||||
|
|
|
@ -19,11 +19,11 @@
|
|||
**/
|
||||
package com.raytheon.uf.viz.collaboration.comm.provider.event;
|
||||
|
||||
import org.jivesoftware.smack.RosterEntry;
|
||||
import org.jivesoftware.smack.packet.Presence;
|
||||
|
||||
import com.raytheon.uf.viz.collaboration.comm.identity.event.IRosterChangeEvent;
|
||||
import com.raytheon.uf.viz.collaboration.comm.identity.event.RosterChangeType;
|
||||
import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
|
||||
|
||||
/**
|
||||
* Event posted when a roster entry needs to be updated
|
||||
|
@ -36,6 +36,7 @@ import com.raytheon.uf.viz.collaboration.comm.identity.event.RosterChangeType;
|
|||
* ------------ ---------- ----------- --------------------------
|
||||
* Apr 11, 2012 jkorman Initial creation
|
||||
* Feb 24, 2014 2632 mpduff Added getPresence, changed getItem to getEntry.
|
||||
* Apr 24, 2014 3070 bclement getEntry() returns UserId
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -47,7 +48,7 @@ public class RosterChangeEvent implements IRosterChangeEvent {
|
|||
|
||||
private final RosterChangeType type;
|
||||
|
||||
private final RosterEntry entry;
|
||||
private final UserId entry;
|
||||
|
||||
/** The presence object */
|
||||
private Presence presence;
|
||||
|
@ -60,7 +61,7 @@ public class RosterChangeEvent implements IRosterChangeEvent {
|
|||
* @param entry
|
||||
* The changed entry.
|
||||
*/
|
||||
public RosterChangeEvent(RosterChangeType type, RosterEntry entry) {
|
||||
public RosterChangeEvent(RosterChangeType type, UserId entry) {
|
||||
this.type = type;
|
||||
this.entry = entry;
|
||||
}
|
||||
|
@ -76,7 +77,7 @@ public class RosterChangeEvent implements IRosterChangeEvent {
|
|||
* @param presence
|
||||
* The presence object
|
||||
*/
|
||||
public RosterChangeEvent(RosterChangeType type, RosterEntry entry,
|
||||
public RosterChangeEvent(RosterChangeType type, UserId entry,
|
||||
Presence presence) {
|
||||
this.type = type;
|
||||
this.entry = entry;
|
||||
|
@ -102,7 +103,7 @@ public class RosterChangeEvent implements IRosterChangeEvent {
|
|||
* @see com.raytheon.uf.viz.collaboration.comm.identity.event.IRosterChangeEvent#getEntry()
|
||||
*/
|
||||
@Override
|
||||
public RosterEntry getEntry() {
|
||||
public UserId getEntry() {
|
||||
return entry;
|
||||
}
|
||||
|
||||
|
|
|
@ -26,7 +26,6 @@ import java.util.Iterator;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.jivesoftware.smack.Roster;
|
||||
import org.jivesoftware.smack.RosterEntry;
|
||||
import org.jivesoftware.smack.RosterListener;
|
||||
import org.jivesoftware.smack.packet.Presence;
|
||||
|
@ -48,6 +47,8 @@ import com.raytheon.uf.viz.collaboration.comm.provider.event.RosterChangeEvent;
|
|||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Apr 22, 2014 2822 bclement Initial creation
|
||||
* Apr 24, 2014 3070 bclement removed roster,
|
||||
* RosterChangedEvent sends UserId not RosterEntry
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -58,17 +59,14 @@ public class ContactsListener implements RosterListener {
|
|||
|
||||
private final ContactsManager manager;
|
||||
|
||||
private final Roster roster;
|
||||
|
||||
private final Map<String, List<ResourceInfo>> contactResources = new HashMap<String, List<ResourceInfo>>();
|
||||
|
||||
/**
|
||||
* @param manager
|
||||
* @param roster
|
||||
*/
|
||||
public ContactsListener(ContactsManager manager, Roster roster) {
|
||||
public ContactsListener(ContactsManager manager) {
|
||||
this.manager = manager;
|
||||
this.roster = roster;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -92,9 +90,11 @@ public class ContactsListener implements RosterListener {
|
|||
}
|
||||
}
|
||||
RosterEntry entry = manager.getRosterEntry(u);
|
||||
post(entry);
|
||||
if (entry != null) {
|
||||
post(entry);
|
||||
}
|
||||
IRosterChangeEvent event = new RosterChangeEvent(
|
||||
RosterChangeType.PRESENCE, entry, presence);
|
||||
RosterChangeType.PRESENCE, u, presence);
|
||||
post(event);
|
||||
}
|
||||
}
|
||||
|
@ -197,11 +197,13 @@ public class ContactsListener implements RosterListener {
|
|||
*/
|
||||
private void send(Collection<String> addresses, RosterChangeType type) {
|
||||
for (String addy : addresses) {
|
||||
RosterEntry entry = roster.getEntry(addy);
|
||||
if (entry != null) {
|
||||
IRosterChangeEvent event = new RosterChangeEvent(type, entry);
|
||||
post(event);
|
||||
}
|
||||
UserId entry = IDConverter.convertFrom(addy);
|
||||
/*
|
||||
* RosterChangeEvents can't use RosterEntry objects because DELETE
|
||||
* events happen after the entry is removed from the server roster
|
||||
*/
|
||||
IRosterChangeEvent event = new RosterChangeEvent(type, entry);
|
||||
post(event);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -47,6 +47,7 @@ import com.raytheon.uf.common.status.UFStatus.Priority;
|
|||
import com.raytheon.uf.common.time.util.TimeUtil;
|
||||
import com.raytheon.uf.common.util.collections.UpdatingSet;
|
||||
import com.raytheon.uf.viz.collaboration.comm.identity.CollaborationException;
|
||||
import com.raytheon.uf.viz.collaboration.comm.identity.IAccountManager;
|
||||
import com.raytheon.uf.viz.collaboration.comm.provider.Tools;
|
||||
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
|
||||
|
||||
|
@ -75,6 +76,9 @@ import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationC
|
|||
* Apr 16, 2014 2981 bclement fixed NPE when cached shared group deleted on server
|
||||
* Apr 23, 2014 2822 bclement moved roster listener to ContactsListener,
|
||||
* added getSharedDisplayEnabledResource()
|
||||
* Apr 24, 2014 3070 bclement added checks for empty groups, added isContact(),
|
||||
* added sendContactRequest()
|
||||
* fixed contact request logic in addToGroup()
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -134,7 +138,7 @@ public class ContactsManager {
|
|||
localAliases = UserIdWrapper.readAliasMap();
|
||||
this.xmpp = xmpp;
|
||||
Roster roster = xmpp.getRoster();
|
||||
this.contactsListener = new ContactsListener(this, roster);
|
||||
this.contactsListener = new ContactsListener(this);
|
||||
roster.addRosterListener(this.contactsListener);
|
||||
}
|
||||
|
||||
|
@ -154,7 +158,7 @@ public class ContactsManager {
|
|||
* group will be null if it has been removed from server after
|
||||
* cached in shared groups.
|
||||
*/
|
||||
if (rg != null) {
|
||||
if (rg != null && !rg.getEntries().isEmpty()) {
|
||||
rval.add(new SharedGroup(rg));
|
||||
}
|
||||
}
|
||||
|
@ -176,7 +180,8 @@ public class ContactsManager {
|
|||
} else {
|
||||
rval = new ArrayList<RosterGroup>(groups.size());
|
||||
for (RosterGroup group : groups) {
|
||||
if (!shared.contains(group.getName())) {
|
||||
if (!shared.contains(group.getName())
|
||||
&& !group.getEntries().isEmpty()) {
|
||||
rval.add(group);
|
||||
}
|
||||
}
|
||||
|
@ -197,24 +202,14 @@ public class ContactsManager {
|
|||
if (group == null) {
|
||||
group = createGroup(groupName);
|
||||
}
|
||||
String id = user.getNormalizedId();
|
||||
RosterEntry entry = group.getEntry(id);
|
||||
if (entry != null) {
|
||||
if (isBlocked(entry)) {
|
||||
// entry is in roster, but we aren't subscribed. Request a
|
||||
// subscription.
|
||||
try {
|
||||
connection.getAccountManager().sendPresence(user,
|
||||
new Presence(Type.subscribe));
|
||||
} catch (CollaborationException e) {
|
||||
statusHandler.error("Problem subscribing to user", e);
|
||||
}
|
||||
} else {
|
||||
statusHandler
|
||||
.debug("Attempted to add user to group it was already in: "
|
||||
+ id + " in " + groupName);
|
||||
RosterEntry entry = getRosterEntry(user);
|
||||
if (entry != null && isBlocked(entry)) {
|
||||
/* entry is in roster, but we are blocked */
|
||||
try {
|
||||
sendContactRequest(user);
|
||||
} catch (CollaborationException e) {
|
||||
statusHandler.error("Problem subscribing to user", e);
|
||||
}
|
||||
return;
|
||||
}
|
||||
try {
|
||||
addToGroup(group, user);
|
||||
|
@ -223,8 +218,8 @@ public class ContactsManager {
|
|||
}
|
||||
} catch (XMPPException e) {
|
||||
String msg = getGroupModInfo(e);
|
||||
statusHandler.error("Problem adding user to group: " + id + " to "
|
||||
+ group.getName() + ". " + msg, e);
|
||||
statusHandler.error("Problem adding user to group: " + user
|
||||
+ " to " + group.getName() + ". " + msg, e);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -667,6 +662,7 @@ public class ContactsManager {
|
|||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param entry
|
||||
* @return true if we are blocked from seeing updates from user in entry
|
||||
*/
|
||||
|
@ -697,6 +693,31 @@ public class ContactsManager {
|
|||
return rval;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param entry
|
||||
* @return true if we can see updates from user in entry
|
||||
*/
|
||||
public static boolean isContact(RosterEntry entry) {
|
||||
ItemType type = entry.getType();
|
||||
return type != null
|
||||
&& (type.equals(ItemType.both) || type.equals(ItemType.to));
|
||||
}
|
||||
|
||||
/**
|
||||
* @see #isContact(RosterEntry)
|
||||
* @param id
|
||||
* @return true if we can see updates from user
|
||||
*/
|
||||
public boolean isContact(UserId id) {
|
||||
RosterEntry entry = getRosterEntry(id);
|
||||
boolean rval = false;
|
||||
if (entry != null) {
|
||||
rval = isContact(entry);
|
||||
}
|
||||
return rval;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ContactsListener#getSharedDisplayEnabledResource(UserId)
|
||||
* @param user
|
||||
|
@ -706,6 +727,17 @@ public class ContactsManager {
|
|||
return contactsListener.getSharedDisplayEnabledResource(user);
|
||||
}
|
||||
|
||||
/**
|
||||
* Send a contact request to user
|
||||
*
|
||||
* @param user
|
||||
* @throws CollaborationException
|
||||
*/
|
||||
public void sendContactRequest(UserId user) throws CollaborationException {
|
||||
IAccountManager manager = connection.getAccountManager();
|
||||
manager.sendPresence(user, new Presence(Type.subscribe));
|
||||
}
|
||||
|
||||
/**
|
||||
* Listener interface for group update events
|
||||
*/
|
||||
|
|
BIN
cave/com.raytheon.uf.viz.collaboration.ui/icons/pending.gif
Normal file
BIN
cave/com.raytheon.uf.viz.collaboration.ui/icons/pending.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 92 B |
|
@ -52,6 +52,7 @@ import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
|
|||
* Feb 13, 2014 2751 bclement made generic for IUsers
|
||||
* Feb 13, 2014 2751 njensen Extracted getImageName() to allow overrides
|
||||
* Feb 17, 2014 2751 bclement moved block image logic to roster specific code
|
||||
* Apr 24, 2014 3070 bclement added pending contact icon
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -103,6 +104,14 @@ public abstract class AbstractUserLabelProvider<T extends IUser> extends
|
|||
return null;
|
||||
}
|
||||
String key = getImageName(user);
|
||||
if (element instanceof RosterEntry) {
|
||||
RosterEntry entry = (RosterEntry) element;
|
||||
ItemStatus status = entry.getStatus();
|
||||
if (status != null) {
|
||||
/* status always indicates pending */
|
||||
key = "pending";
|
||||
}
|
||||
}
|
||||
|
||||
if (imageMap.get(key) == null && !key.equals("")) {
|
||||
imageMap.put(key, CollaborationUtils.getNodeImage(key));
|
||||
|
@ -144,7 +153,8 @@ public abstract class AbstractUserLabelProvider<T extends IUser> extends
|
|||
}
|
||||
ItemStatus status = entry.getStatus();
|
||||
if (status != null) {
|
||||
text.append(status).append(" pending\n");
|
||||
/* status always indicates pending */
|
||||
text.append("Contact request pending\n");
|
||||
}
|
||||
}
|
||||
// delete trailing newline
|
||||
|
|
|
@ -42,6 +42,7 @@ import com.raytheon.uf.viz.core.localization.HierarchicalPreferenceStore;
|
|||
* Mar 1, 2012 rferrel Initial creation
|
||||
* Feb 19, 2014 2631 mpduff Changed to use the HierarchicalPreferenceStore.
|
||||
* Feb 20, 2014 2631 mpduff Need to set defaults here since we changed to use the HierarchicalPreferenceStore
|
||||
* Apr 24, 2014 3070 bclement added default groupname to preference defaults
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -126,6 +127,8 @@ public class Activator extends AbstractUIPlugin {
|
|||
prefs.setDefault(CollabPrefConstants.DEFAULT_HANDLE,
|
||||
CollabPrefConstants.HandleOption.USERNAME.name());
|
||||
prefs.setDefault(CollabPrefConstants.CUSTOM_HANDLE, "");
|
||||
prefs.setDefault(CollabPrefConstants.DEFAULT_GROUPNAME_PREF,
|
||||
"Contacts");
|
||||
}
|
||||
return prefs;
|
||||
}
|
||||
|
|
|
@ -19,6 +19,9 @@
|
|||
**/
|
||||
package com.raytheon.uf.viz.collaboration.ui;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.eclipse.core.runtime.jobs.Job;
|
||||
import org.eclipse.swt.widgets.Display;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
|
@ -71,6 +74,7 @@ import com.raytheon.viz.ui.views.CaveWorkbenchPageManager;
|
|||
* Mar 06, 2014 2848 bclement moved SharedDisplaySessionMgr.joinSession call to InviteDialog
|
||||
* Apr 08, 2014 2785 mpduff removed preference listener
|
||||
* Apr 11, 2014 2903 bclement added disconnect handler
|
||||
* Apr 24, 2014 2955 bclement ignore duplicate session invites
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -91,6 +95,8 @@ public class ConnectionSubscriber {
|
|||
|
||||
private final DisconnectHandler disconnect = new DisconnectHandler();
|
||||
|
||||
private final Set<String> pendingInviteDialogs = new HashSet<String>();
|
||||
|
||||
private ConnectionSubscriber() {
|
||||
}
|
||||
|
||||
|
@ -178,16 +184,53 @@ public class ConnectionSubscriber {
|
|||
|
||||
@Subscribe
|
||||
public void handleInvitationEvent(final IVenueInvitationEvent event) {
|
||||
final String roomId = event.getRoomId().getFQName();
|
||||
|
||||
VizApp.runAsync(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
Shell shell = new Shell(Display.getCurrent());
|
||||
InviteDialog inviteBox = new InviteDialog(shell, event);
|
||||
if (!(Boolean) inviteBox.open()) {
|
||||
return;
|
||||
if (!invitePending(roomId)) {
|
||||
try {
|
||||
Shell shell = new Shell(Display.getCurrent());
|
||||
InviteDialog inviteBox = new InviteDialog(shell, event);
|
||||
if ((Boolean) inviteBox.open()) {
|
||||
/* user accepted invite */
|
||||
openSession(inviteBox);
|
||||
}
|
||||
} finally {
|
||||
synchronized (pendingInviteDialogs) {
|
||||
pendingInviteDialogs.remove(roomId);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
statusHandler.debug("Ignoring duplicate session invite: "
|
||||
+ roomId);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param roomId
|
||||
* @return true if there is already an invitation pending for this
|
||||
* room
|
||||
*/
|
||||
private boolean invitePending(String roomId) {
|
||||
synchronized (pendingInviteDialogs) {
|
||||
boolean pending = pendingInviteDialogs.contains(roomId);
|
||||
if (!pending) {
|
||||
/* immediately set to pending to ignore dup invites */
|
||||
pendingInviteDialogs.add(roomId);
|
||||
}
|
||||
return pending;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Open session view after invite has been accepted
|
||||
*
|
||||
* @param inviteBox
|
||||
*/
|
||||
private void openSession(InviteDialog inviteBox) {
|
||||
try {
|
||||
IVenueSession session = inviteBox.getSession();
|
||||
if (inviteBox.isSharedDisplay()) {
|
||||
|
|
|
@ -25,11 +25,12 @@ import org.eclipse.swt.events.KeyEvent;
|
|||
import org.eclipse.swt.events.SelectionAdapter;
|
||||
import org.eclipse.swt.events.SelectionEvent;
|
||||
import org.eclipse.swt.layout.GridData;
|
||||
import org.eclipse.swt.layout.RowData;
|
||||
import org.eclipse.swt.layout.RowLayout;
|
||||
import org.eclipse.swt.layout.GridLayout;
|
||||
import org.eclipse.swt.widgets.Button;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
import org.eclipse.swt.widgets.Label;
|
||||
import org.eclipse.swt.widgets.Layout;
|
||||
import org.eclipse.swt.widgets.MessageBox;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
import org.eclipse.swt.widgets.Text;
|
||||
|
||||
|
@ -48,6 +49,7 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
|
|||
* ------------ ---------- ----------- --------------------------
|
||||
* Jun 27, 2012 bsteffen Initial creation
|
||||
* Jan 24, 2014 2701 bclement removed local groups
|
||||
* Apr 23, 2014 3040 lvenable Cleaned up dialog code/layout. Added check for group name.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -56,72 +58,122 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
|
|||
*/
|
||||
public class CreateGroupDialog extends CaveSWTDialog {
|
||||
|
||||
/** Name text field. */
|
||||
private Text nameText;
|
||||
|
||||
/** New group name. */
|
||||
private String newGroup = null;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param parentShell
|
||||
* Parent shell.
|
||||
*/
|
||||
public CreateGroupDialog(Shell parentShell) {
|
||||
super(parentShell, SWT.DIALOG_TRIM);
|
||||
setText("Create Group");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Layout constructShellLayout() {
|
||||
GridLayout mainLayout = new GridLayout(1, false);
|
||||
return mainLayout;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Object constructShellLayoutData() {
|
||||
return new GridData(SWT.FILL, SWT.DEFAULT, true, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initializeComponents(Shell shell) {
|
||||
Composite entryComp = new Composite(shell, SWT.NONE);
|
||||
RowLayout layout = new RowLayout(SWT.HORIZONTAL);
|
||||
layout.center = true;
|
||||
entryComp.setLayout(layout);
|
||||
entryComp.setLayout(new GridLayout(2, false));
|
||||
entryComp
|
||||
.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false));
|
||||
|
||||
new Label(entryComp, SWT.NONE).setText("Group Name: ");
|
||||
nameText = new Text(entryComp, SWT.BORDER);
|
||||
nameText.setLayoutData(new RowData(100, SWT.DEFAULT));
|
||||
nameText.setLayoutData(new GridData(150, SWT.DEFAULT));
|
||||
nameText.addKeyListener(new KeyAdapter() {
|
||||
|
||||
@Override
|
||||
public void keyReleased(KeyEvent e) {
|
||||
if (e.keyCode == SWT.CR || e.keyCode == SWT.KEYPAD_CR) {
|
||||
finish();
|
||||
handleOkAction();
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
/*
|
||||
* Action buttons
|
||||
*/
|
||||
Composite buttonComp = new Composite(shell, SWT.NONE);
|
||||
buttonComp.setLayoutData(new GridData(SWT.RIGHT, SWT.NONE, false,
|
||||
false, 1, 1));
|
||||
layout = new RowLayout(SWT.HORIZONTAL);
|
||||
layout.pack = false;
|
||||
buttonComp.setLayout(layout);
|
||||
buttonComp.setLayout(new GridLayout(2, false));
|
||||
buttonComp.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true,
|
||||
false));
|
||||
|
||||
GridData gd = new GridData(SWT.RIGHT, SWT.DEFAULT, true, false);
|
||||
gd.widthHint = 75;
|
||||
Button okButton = new Button(buttonComp, SWT.PUSH);
|
||||
okButton.setText("OK");
|
||||
okButton.setLayoutData(gd);
|
||||
okButton.addSelectionListener(new SelectionAdapter() {
|
||||
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent e) {
|
||||
finish();
|
||||
handleOkAction();
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
gd = new GridData(SWT.LEFT, SWT.DEFAULT, true, false);
|
||||
gd.widthHint = 75;
|
||||
Button cancelButton = new Button(buttonComp, SWT.PUSH);
|
||||
cancelButton.setText("Cancel");
|
||||
cancelButton.setLayoutData(gd);
|
||||
cancelButton.addSelectionListener(new SelectionAdapter() {
|
||||
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent e) {
|
||||
close();
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
private void finish() {
|
||||
/**
|
||||
* Handle the OK action.
|
||||
*/
|
||||
private void handleOkAction() {
|
||||
if (validGroupName() == false) {
|
||||
return;
|
||||
}
|
||||
newGroup = nameText.getText();
|
||||
CollaborationConnection.getConnection().getContactsManager()
|
||||
.createGroup(newGroup);
|
||||
close();
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if there was something entered in the text field.
|
||||
*
|
||||
* @return True if there is text in the group name text field.
|
||||
*/
|
||||
private boolean validGroupName() {
|
||||
if (nameText.getText().length() == 0) {
|
||||
MessageBox mb = new MessageBox(shell, SWT.ICON_WARNING | SWT.OK);
|
||||
mb.setText("Invalid Name");
|
||||
mb.setMessage("You have not entered a group name. Please enter one.");
|
||||
mb.open();
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the group name.
|
||||
*
|
||||
* @return The group name.
|
||||
*/
|
||||
public String getNewGroup() {
|
||||
return newGroup;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -34,6 +34,7 @@ import org.eclipse.swt.widgets.Combo;
|
|||
import org.eclipse.swt.widgets.Composite;
|
||||
import org.eclipse.swt.widgets.Display;
|
||||
import org.eclipse.swt.widgets.Label;
|
||||
import org.eclipse.swt.widgets.Layout;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
import org.jivesoftware.smack.RosterGroup;
|
||||
|
||||
|
@ -55,6 +56,9 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
|
|||
* Feb 13, 2014 2755 bclement roster addition now done in account manager, user input passed back
|
||||
* Apr 07, 2014 2785 mpduff Changed to implement CaveSWTDialog
|
||||
* Fix loading of groups
|
||||
* Apr 23, 2014 3040 lvenable Cleaned up dialog code/layout. Allow the cancellation of the create
|
||||
* group dialog without closing this dialog. Added capability to resize
|
||||
* the group combo box if the names get too long.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -62,12 +66,19 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
|
|||
* @version 1.0
|
||||
*/
|
||||
public class SubRequestDialog extends CaveSWTDialog {
|
||||
private final String NEW_GROUP = "New Group...";
|
||||
|
||||
/** User ID. */
|
||||
private final String userid;
|
||||
|
||||
/** Combo listing all of the available groups. */
|
||||
private Combo groupCbo;
|
||||
|
||||
/** Create group dialog. */
|
||||
private CreateGroupDialog createGroupDlg;
|
||||
|
||||
/** Allow button. */
|
||||
private Button allowBtn;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
|
@ -80,35 +91,70 @@ public class SubRequestDialog extends CaveSWTDialog {
|
|||
setText("Contact Request");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Layout constructShellLayout() {
|
||||
GridLayout mainLayout = new GridLayout(1, false);
|
||||
return mainLayout;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Object constructShellLayoutData() {
|
||||
return new GridData(SWT.FILL, SWT.DEFAULT, true, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initializeComponents(Shell shell) {
|
||||
GridLayout gl = new GridLayout(1, false);
|
||||
GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
|
||||
Composite mainComp = new Composite(shell, SWT.NONE);
|
||||
GridLayout gl = new GridLayout(1, false);
|
||||
GridData gd = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
|
||||
mainComp.setLayout(gl);
|
||||
mainComp.setLayoutData(gd);
|
||||
|
||||
/*
|
||||
* Top Label
|
||||
*/
|
||||
gd = new GridData(SWT.CENTER, SWT.DEFAULT, true, false);
|
||||
Label msgLbl = new Label(mainComp, SWT.NONE);
|
||||
msgLbl.setText(userid + " wants to add you to their contacts list.");
|
||||
msgLbl.setText(userid + " wants to add you to a contacts list:");
|
||||
msgLbl.setLayoutData(gd);
|
||||
|
||||
gl = new GridLayout(2, false);
|
||||
gd = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
|
||||
/*
|
||||
* Group composite and controls.
|
||||
*/
|
||||
Composite groupComp = new Composite(mainComp, SWT.NONE);
|
||||
gl = new GridLayout(3, false);
|
||||
gd = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
|
||||
groupComp.setLayout(gl);
|
||||
groupComp.setLayoutData(gd);
|
||||
|
||||
gd = new GridData(SWT.RIGHT, SWT.DEFAULT, true, false);
|
||||
gd = new GridData(SWT.DEFAULT, SWT.CENTER, false, true);
|
||||
Label groupLbl = new Label(groupComp, SWT.NONE);
|
||||
groupLbl.setText("Group: ");
|
||||
groupLbl.setLayoutData(gd);
|
||||
|
||||
gd = new GridData(SWT.FILL, SWT.CENTER, true, true);
|
||||
gd.minimumWidth = 130;
|
||||
groupCbo = new Combo(groupComp, SWT.DROP_DOWN | SWT.READ_ONLY);
|
||||
groupCbo.setItems(getGroupNames());
|
||||
groupCbo.select(0);
|
||||
groupCbo.setLayout(gl);
|
||||
groupCbo.setLayoutData(gd);
|
||||
|
||||
gd = new GridData();
|
||||
gd.horizontalIndent = 5;
|
||||
Button newGroup = new Button(groupComp, SWT.PUSH);
|
||||
newGroup.setText("New Group...");
|
||||
newGroup.addSelectionListener(new SelectionAdapter() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent e) {
|
||||
handleNewGroupAction();
|
||||
}
|
||||
});
|
||||
|
||||
addSeparator(mainComp);
|
||||
|
||||
/*
|
||||
* Action buttons.
|
||||
*/
|
||||
gl = new GridLayout(2, false);
|
||||
gd = new GridData(SWT.CENTER, SWT.DEFAULT, true, false);
|
||||
Composite btnComp = new Composite(mainComp, SWT.NONE);
|
||||
|
@ -118,16 +164,21 @@ public class SubRequestDialog extends CaveSWTDialog {
|
|||
int btnWidth = 75;
|
||||
|
||||
gd = new GridData(btnWidth, SWT.DEFAULT);
|
||||
Button allowBtn = new Button(btnComp, SWT.PUSH);
|
||||
allowBtn = new Button(btnComp, SWT.PUSH);
|
||||
allowBtn.setText("Allow");
|
||||
allowBtn.setLayoutData(gd);
|
||||
allowBtn.addSelectionListener(new SelectionAdapter() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent event) {
|
||||
action(true);
|
||||
handleAllowDenyAction(true);
|
||||
}
|
||||
});
|
||||
|
||||
// Disable the allow button if there are no items in the combo box.
|
||||
if (groupCbo.getItemCount() == 0) {
|
||||
allowBtn.setEnabled(false);
|
||||
}
|
||||
|
||||
gd = new GridData(btnWidth, SWT.DEFAULT);
|
||||
Button denyBtn = new Button(btnComp, SWT.PUSH);
|
||||
denyBtn.setText("Deny");
|
||||
|
@ -135,12 +186,14 @@ public class SubRequestDialog extends CaveSWTDialog {
|
|||
denyBtn.addSelectionListener(new SelectionAdapter() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent event) {
|
||||
action(false);
|
||||
handleAllowDenyAction(false);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of group names.
|
||||
*
|
||||
* @return list of existing group names
|
||||
*/
|
||||
private String[] getGroupNames() {
|
||||
|
@ -157,28 +210,45 @@ public class SubRequestDialog extends CaveSWTDialog {
|
|||
}
|
||||
|
||||
Collections.sort(groupList);
|
||||
groupList.add(0, NEW_GROUP);
|
||||
|
||||
return groupList.toArray(new String[groupList.size()]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Action handler.
|
||||
*
|
||||
* @param approved
|
||||
* true if request approved, false if denied
|
||||
* Handle adding a new group.
|
||||
*/
|
||||
private void action(boolean approved) {
|
||||
if (approved) {
|
||||
if (groupCbo.getSelectionIndex() == 0) {
|
||||
// new group
|
||||
CreateGroupDialog dialog = new CreateGroupDialog(Display
|
||||
.getCurrent().getActiveShell());
|
||||
dialog.open();
|
||||
String group = dialog.getNewGroup();
|
||||
setReturnValue(group);
|
||||
} else {
|
||||
private void handleNewGroupAction() {
|
||||
if (createGroupDlg == null || createGroupDlg.isDisposed()) {
|
||||
createGroupDlg = new CreateGroupDialog(Display.getCurrent()
|
||||
.getActiveShell());
|
||||
createGroupDlg.open();
|
||||
String groupName = createGroupDlg.getNewGroup();
|
||||
|
||||
// If the group name is not null, add it to the combo and then
|
||||
// select it.
|
||||
if (groupName != null) {
|
||||
allowBtn.setEnabled(true);
|
||||
groupCbo.add(groupName, 0);
|
||||
groupCbo.select(0);
|
||||
shell.pack();
|
||||
}
|
||||
} else {
|
||||
createGroupDlg.bringToTop();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle Allow/Deny action.
|
||||
*
|
||||
* @param allowRequest
|
||||
* True if request allowed, false if denied
|
||||
*/
|
||||
private void handleAllowDenyAction(boolean allowRequest) {
|
||||
if (allowRequest) {
|
||||
if (groupCbo.getItemCount() != 0) {
|
||||
setReturnValue(groupCbo.getItem(groupCbo.getSelectionIndex()));
|
||||
} else {
|
||||
|
||||
}
|
||||
} else {
|
||||
setReturnValue(null);
|
||||
|
@ -186,4 +256,19 @@ public class SubRequestDialog extends CaveSWTDialog {
|
|||
|
||||
close();
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a line separator to the given composite.
|
||||
*
|
||||
* @param parentComp
|
||||
* Parent composite.
|
||||
*/
|
||||
private void addSeparator(Composite parentComp) {
|
||||
GridLayout gl = (GridLayout) parentComp.getLayout();
|
||||
|
||||
GridData gd = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
|
||||
gd.horizontalSpan = gl.numColumns;
|
||||
Label sepLbl = new Label(parentComp, SWT.SEPARATOR | SWT.HORIZONTAL);
|
||||
sepLbl.setLayoutData(gd);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,7 +32,6 @@ import org.jivesoftware.smack.RosterEntry;
|
|||
import org.jivesoftware.smack.RosterGroup;
|
||||
|
||||
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
|
||||
import com.raytheon.uf.viz.collaboration.comm.provider.user.ContactsManager;
|
||||
import com.raytheon.uf.viz.collaboration.comm.provider.user.SharedGroup;
|
||||
import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
|
||||
import com.raytheon.uf.viz.collaboration.ui.data.CollaborationGroupContainer;
|
||||
|
@ -51,6 +50,7 @@ import com.raytheon.uf.viz.collaboration.ui.data.SessionGroupContainer;
|
|||
* Dec 6, 2013 2561 bclement removed ECF
|
||||
* Jan 24, 2014 2701 bclement removed local groups, added shared groups
|
||||
* Jan 27, 2014 2700 bclement added support roster entries
|
||||
* Apr 24, 2014 3070 bclement removed check for hasInteraction() from group entries
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -141,8 +141,7 @@ public class UsersTreeContentProvider implements ITreeContentProvider {
|
|||
UserId localUser = connection.getUser();
|
||||
for (RosterEntry entry : entries) {
|
||||
String user = entry.getUser();
|
||||
if (!localUser.isSameUser(user)
|
||||
&& ContactsManager.hasInteraction(entry)) {
|
||||
if (!localUser.isSameUser(user)) {
|
||||
result.add(entry);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -51,6 +51,7 @@ import com.raytheon.uf.viz.core.icon.IconUtil;
|
|||
* Jul 3, 2012 bsteffen Initial creation
|
||||
* Dec 20, 2013 2563 bclement added support for ungrouped roster entries
|
||||
* Jan 24, 2014 2701 bclement removed local groups
|
||||
* Apr 24, 2014 3070 bclement RosterChangeEvent changes
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -114,8 +115,9 @@ public class AddToGroupAction extends Action {
|
|||
if (entry != null) {
|
||||
// the entry wasn't in a group, so the entire tree needs to be
|
||||
// refreshed
|
||||
UserId entryId = IDConverter.convertFrom(entry);
|
||||
connection.postEvent(new RosterChangeEvent(RosterChangeType.MODIFY,
|
||||
entry));
|
||||
entryId));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -26,6 +26,8 @@ import com.raytheon.uf.viz.collaboration.comm.identity.event.RosterChangeType;
|
|||
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
|
||||
import com.raytheon.uf.viz.collaboration.comm.provider.event.RosterChangeEvent;
|
||||
import com.raytheon.uf.viz.collaboration.comm.provider.user.ContactsManager;
|
||||
import com.raytheon.uf.viz.collaboration.comm.provider.user.IDConverter;
|
||||
import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
|
||||
import com.raytheon.uf.viz.collaboration.ui.Activator;
|
||||
import com.raytheon.uf.viz.core.icon.IconUtil;
|
||||
|
||||
|
@ -40,6 +42,7 @@ import com.raytheon.uf.viz.core.icon.IconUtil;
|
|||
* ------------ ---------- ----------- --------------------------
|
||||
* Dec 20, 2013 2563 bclement Initial creation
|
||||
* Mar 05, 2014 2837 bclement changed wording from Roster to Contacts, added image
|
||||
* Apr 24, 2014 3070 bclement RosterChangeEvent changes
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -64,7 +67,8 @@ public class RemoveFromRosterAction extends Action {
|
|||
ContactsManager manager = connection
|
||||
.getContactsManager();
|
||||
manager.removeFromRoster(entry);
|
||||
UserId entryId = IDConverter.convertFrom(entry);
|
||||
connection.postEvent(new RosterChangeEvent(RosterChangeType.DELETE,
|
||||
entry));
|
||||
entryId));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,12 +21,10 @@ package com.raytheon.uf.viz.collaboration.ui.actions;
|
|||
|
||||
import org.eclipse.jface.action.Action;
|
||||
import org.jivesoftware.smack.RosterEntry;
|
||||
import org.jivesoftware.smack.packet.Presence;
|
||||
import org.jivesoftware.smack.packet.Presence.Type;
|
||||
|
||||
import com.raytheon.uf.viz.collaboration.comm.identity.CollaborationException;
|
||||
import com.raytheon.uf.viz.collaboration.comm.identity.IAccountManager;
|
||||
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
|
||||
import com.raytheon.uf.viz.collaboration.comm.provider.user.ContactsManager;
|
||||
import com.raytheon.uf.viz.collaboration.comm.provider.user.IDConverter;
|
||||
import com.raytheon.uf.viz.collaboration.ui.Activator;
|
||||
import com.raytheon.uf.viz.core.icon.IconUtil;
|
||||
|
@ -42,6 +40,7 @@ import com.raytheon.uf.viz.core.icon.IconUtil;
|
|||
* ------------ ---------- ----------- --------------------------
|
||||
* Jan 24, 2014 bclement Initial creation
|
||||
* Mar 05, 2014 2837 bclement added image
|
||||
* Apr 24, 2014 3070 bclement moved contact request logic to contacts manager
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -71,10 +70,9 @@ public class SendSubReqAction extends Action {
|
|||
@Override
|
||||
public void run() {
|
||||
CollaborationConnection connection = CollaborationConnection.getConnection();
|
||||
IAccountManager manager = connection.getAccountManager();
|
||||
ContactsManager manager = connection.getContactsManager();
|
||||
try {
|
||||
manager.sendPresence(IDConverter.convertFrom(entry), new Presence(
|
||||
Type.subscribe));
|
||||
manager.sendContactRequest(IDConverter.convertFrom(entry));
|
||||
} catch (CollaborationException e) {
|
||||
Activator.statusHandler.error(
|
||||
"Unable to send subscription request", e);
|
||||
|
|
|
@ -34,6 +34,7 @@ package com.raytheon.uf.viz.collaboration.ui.prefs;
|
|||
* Feb 3, 2014 2699 bclement added handle preferences
|
||||
* Feb 18, 2014 2631 mpduff Add constants for room change events.
|
||||
* Mar 24, 2014 2936 mpduff Remove INCLUDE_NWS_FEED_FIELD_EDITOR_ID.
|
||||
* Apr 24, 2014 3070 bclement added DEFAULT_GROUPNAME_PREF
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -62,6 +63,8 @@ public class CollabPrefConstants {
|
|||
|
||||
public static final String CUSTOM_HANDLE = "customHandle";
|
||||
|
||||
public static final String DEFAULT_GROUPNAME_PREF = "defaultGroupName";
|
||||
|
||||
public static final int AWAY_TIMEOUT_DEFAULT = 10; // ten minutes
|
||||
|
||||
/** Enable join events field editor id */
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
**/
|
||||
package com.raytheon.uf.viz.collaboration.ui.prefs;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
@ -27,7 +26,6 @@ import java.util.concurrent.ConcurrentHashMap;
|
|||
import org.eclipse.jface.preference.IPersistentPreferenceStore;
|
||||
import org.eclipse.swt.widgets.Display;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
import org.jivesoftware.smack.RosterGroup;
|
||||
import org.jivesoftware.smack.XMPPException;
|
||||
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
|
@ -36,6 +34,7 @@ import com.raytheon.uf.viz.collaboration.comm.identity.roster.ISubscriptionRespo
|
|||
import com.raytheon.uf.viz.collaboration.comm.identity.roster.SubscriptionResponse;
|
||||
import com.raytheon.uf.viz.collaboration.comm.provider.account.ISubscriptionRequestCompleteAction;
|
||||
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
|
||||
import com.raytheon.uf.viz.collaboration.comm.provider.user.ContactsManager;
|
||||
import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
|
||||
import com.raytheon.uf.viz.collaboration.comm.provider.user.UserSearch;
|
||||
import com.raytheon.uf.viz.collaboration.ui.Activator;
|
||||
|
@ -52,6 +51,8 @@ import com.raytheon.uf.viz.core.VizApp;
|
|||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Apr 03, 2014 2785 mpduff Initial creation
|
||||
* Apr 24, 2014 3070 bclement added default group for auto accept
|
||||
* fixed auto accept known contacts
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -88,15 +89,16 @@ public class SubscriptionResponderImpl implements ISubscriptionResponder {
|
|||
.getPreferenceStore();
|
||||
if (prefs.getBoolean(CollabPrefConstants.AUTO_ACCEPT_SUBSCRIBE)) {
|
||||
rval.setAccepted(true);
|
||||
rval.setGroup(prefs
|
||||
.getString(CollabPrefConstants.DEFAULT_GROUPNAME_PREF));
|
||||
action.executeSubscriptionRequestComplete(fromID, rval);
|
||||
return;
|
||||
}
|
||||
|
||||
CollaborationConnection conn = CollaborationConnection.getConnection();
|
||||
Collection<RosterGroup> groups = conn.getContactsManager().getGroups(
|
||||
fromID);
|
||||
if (!groups.isEmpty()) {
|
||||
// we already have this user in a group in our roster
|
||||
ContactsManager cm = conn.getContactsManager();
|
||||
if (cm.isContact(fromID)) {
|
||||
/* we already have a subscription to this user */
|
||||
rval.setAccepted(true);
|
||||
action.executeSubscriptionRequestComplete(fromID, rval);
|
||||
} else {
|
||||
|
|
|
@ -44,7 +44,10 @@ import com.raytheon.uf.viz.core.exception.VizException;
|
|||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Dec 16, 2011 mschenke Initial creation
|
||||
* Dec 16, 2011 mschenke Initial creation
|
||||
* Feb 27, 2013 #1532 bsteffen Delete uf.common.colormap.image
|
||||
* Nov 11, 2013 #2492 mschenke Added getDataUnti to IColormappedImage
|
||||
* Apr 15, 2014 #3016 randerso Fix null pointer during construction
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -107,7 +110,9 @@ public class ColormappedImage implements IColormappedImage,
|
|||
*/
|
||||
@Override
|
||||
public void dispose() {
|
||||
image.dispose();
|
||||
if (image != null) {
|
||||
image.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -25,6 +25,7 @@ import java.util.HashSet;
|
|||
import java.util.Set;
|
||||
|
||||
import org.eclipse.core.runtime.FileLocator;
|
||||
import org.eclipse.osgi.framework.internal.core.BundleRepository;
|
||||
import org.osgi.framework.Bundle;
|
||||
import org.osgi.framework.wiring.BundleWiring;
|
||||
import org.reflections.Reflections;
|
||||
|
@ -47,6 +48,7 @@ import org.reflections.util.ConfigurationBuilder;
|
|||
* ------------- -------- ----------- --------------------------
|
||||
* Oct 21, 2013 2491 bsteffen Initial creation
|
||||
* Jan 22, 2014 2062 bsteffen Handle bundles with no wiring.
|
||||
* Apr 16, 2014 3018 njensen Synchronize against BundleRepository
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -58,11 +60,26 @@ public class BundleReflections {
|
|||
|
||||
private final Reflections reflections;
|
||||
|
||||
@SuppressWarnings("restriction")
|
||||
public BundleReflections(Bundle bundle, Scanner scanner) throws IOException {
|
||||
ConfigurationBuilder cb = new ConfigurationBuilder();
|
||||
BundleWiring bundleWiring = bundle.adapt(BundleWiring.class);
|
||||
BundleRepository bundleRepo = BundleRepositoryGetter
|
||||
.getFrameworkBundleRepository(bundle);
|
||||
|
||||
if (bundleWiring != null) {
|
||||
cb.addClassLoader(bundleWiring.getClassLoader());
|
||||
if (bundleRepo != null) {
|
||||
synchronized (bundleRepo) {
|
||||
cb.addClassLoader(bundleWiring.getClassLoader());
|
||||
}
|
||||
} else {
|
||||
/*
|
||||
* even if we couldn't get the bundle repository to sync
|
||||
* against, it's probably safe, see BundleRepositoryGetter
|
||||
* javadoc
|
||||
*/
|
||||
cb.addClassLoader(bundleWiring.getClassLoader());
|
||||
}
|
||||
cb.addUrls(FileLocator.getBundleFile(bundle).toURI().toURL());
|
||||
cb.setScanners(scanner);
|
||||
reflections = cb.build();
|
||||
|
@ -87,4 +104,5 @@ public class BundleReflections {
|
|||
}
|
||||
return subTypes;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,104 @@
|
|||
/**
|
||||
* This software was developed and / or modified by Raytheon Company,
|
||||
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||
*
|
||||
* U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||
* This software product contains export-restricted data whose
|
||||
* export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||
* to non-U.S. persons whether in the United States or abroad requires
|
||||
* an export license or other authorization.
|
||||
*
|
||||
* Contractor Name: Raytheon Company
|
||||
* Contractor Address: 6825 Pine Street, Suite 340
|
||||
* Mail Stop B8
|
||||
* Omaha, NE 68106
|
||||
* 402.291.0100
|
||||
*
|
||||
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||
* further licensing information.
|
||||
**/
|
||||
package com.raytheon.uf.viz.core.reflect;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
import org.eclipse.osgi.framework.internal.core.AbstractBundle;
|
||||
import org.eclipse.osgi.framework.internal.core.BundleRepository;
|
||||
import org.eclipse.osgi.framework.internal.core.Framework;
|
||||
import org.osgi.framework.Bundle;
|
||||
|
||||
/**
|
||||
* Utility class to get the BundleRepository object associated with a Bundle, to
|
||||
* potentially synchronize against that object.
|
||||
*
|
||||
* Specifically if a call to BundleWiring.getClassLoader() is invoked on a
|
||||
* thread other than main/UI thread, then there is a possible deadlock if the
|
||||
* application shuts down while the BundleWiring.getClassLoader() call is still
|
||||
* going. The BundleRepository of the Framework is the primary resource that is
|
||||
* in contention in this deadlock scenario, due to the BundleRepository being
|
||||
* used as a synchronization lock both deep in bundleWiring.getClassloader() and
|
||||
* in Framework shutdown code. The other resource used as a synchronization lock
|
||||
* and causing the deadlock is the BundleLoader associated with the bundle.
|
||||
*
|
||||
* Therefore to avoid this deadlock, if you are going to call
|
||||
* BundleWiring.getClassLoader() you should attempt to get the BundleRepository
|
||||
* and synchronize against it. This will ensure the call to getClassLoader() can
|
||||
* finish and then release synchronization locks of both the BundleRepository
|
||||
* and BundleLoader.
|
||||
*
|
||||
* If we fail to get the BundleRepository due to access restrictions, then you
|
||||
* should proceed onwards anyway because the odds of the application shutting
|
||||
* down at the same time as the call to BundleWiring.getClassLoader() is still
|
||||
* running is low. Even if that occurs, the odds are further reduced that the
|
||||
* two threads will synchronize against the BundleRepository at the same time
|
||||
* and deadlock.
|
||||
*
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Apr 17, 2014 njensen Initial creation
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author njensen
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
public class BundleRepositoryGetter {
|
||||
|
||||
private BundleRepositoryGetter() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Attempts to retrieve the BundleRepository associated with the bundle's
|
||||
* framework. Returns the BundleRepository or null if it could not be
|
||||
* retrieved.
|
||||
*
|
||||
* @param bundle
|
||||
* the bundle to retrieve the associated BundleRepository for
|
||||
* @return the BundleRepository or null
|
||||
*/
|
||||
@SuppressWarnings("restriction")
|
||||
protected static BundleRepository getFrameworkBundleRepository(Bundle bundle) {
|
||||
BundleRepository bundleRepo = null;
|
||||
if (bundle instanceof AbstractBundle) {
|
||||
try {
|
||||
AbstractBundle ab = (AbstractBundle) bundle;
|
||||
Field bundleRepoField = Framework.getField(Framework.class,
|
||||
BundleRepository.class, true);
|
||||
bundleRepo = (BundleRepository) bundleRepoField.get(ab
|
||||
.getFramework());
|
||||
} catch (Throwable t) {
|
||||
// intentionally log to console and proceed anyway
|
||||
t.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
return bundleRepo;
|
||||
}
|
||||
|
||||
}
|
|
@ -28,6 +28,7 @@ import java.util.HashSet;
|
|||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.eclipse.osgi.framework.internal.core.BundleRepository;
|
||||
import org.osgi.framework.Bundle;
|
||||
import org.osgi.framework.namespace.BundleNamespace;
|
||||
import org.osgi.framework.namespace.PackageNamespace;
|
||||
|
@ -56,6 +57,7 @@ import com.raytheon.uf.viz.core.Activator;
|
|||
* Dec 10, 2013 2602 bsteffen Add null checks to detect unloaded
|
||||
* bundles.
|
||||
* Feb 03, 2013 2764 bsteffen Use OSGi API to get dependencies.
|
||||
* Apr 17, 2014 3018 njensen Synchronize against BundleRepository
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -95,6 +97,7 @@ public class SubClassLocator implements ISubClassLocator {
|
|||
* @param base
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Collection<Class<?>> locateSubClasses(Class<?> base) {
|
||||
Map<String, Set<Class<?>>> recursiveClasses = new HashMap<String, Set<Class<?>>>(
|
||||
bundleLookup.size(), 1.0f);
|
||||
|
@ -109,6 +112,7 @@ public class SubClassLocator implements ISubClassLocator {
|
|||
/**
|
||||
* Store the cache to disk.
|
||||
*/
|
||||
@Override
|
||||
public void save() {
|
||||
cache.save();
|
||||
}
|
||||
|
@ -265,10 +269,25 @@ public class SubClassLocator implements ISubClassLocator {
|
|||
if (bundleWiring == null) {
|
||||
return Collections.emptySet();
|
||||
}
|
||||
ClassLoader loader = bundleWiring.getClassLoader();
|
||||
|
||||
BundleRepository bundleRepo = BundleRepositoryGetter
|
||||
.getFrameworkBundleRepository(bundle);
|
||||
ClassLoader loader = null;
|
||||
if (bundleRepo != null) {
|
||||
synchronized (bundleRepo) {
|
||||
loader = bundleWiring.getClassLoader();
|
||||
}
|
||||
} else {
|
||||
/*
|
||||
* even if we couldn't get the bundle repository to sync against,
|
||||
* it's probably safe, see BundleRepositoryGetter javadoc
|
||||
*/
|
||||
loader = bundleWiring.getClassLoader();
|
||||
}
|
||||
if (loader == null) {
|
||||
return Collections.emptySet();
|
||||
}
|
||||
|
||||
HashSet<Class<?>> result = new HashSet<Class<?>>(classNames.size(),
|
||||
1.0f);
|
||||
for (String className : classNames) {
|
||||
|
|
|
@ -41,6 +41,7 @@ import com.raytheon.uf.viz.monitor.ui.dialogs.MonitoringAreaConfigDlg;
|
|||
* Jan 5, 2010 mpduff Initial creation
|
||||
* Nov 27, 2012 1351 skorolev Changes for non-blocking dialog.
|
||||
* Jan 29, 2014 2757 skorolev Changed OK button handler.
|
||||
* Apr 23, 2014 3054 skorolev Fixed issue with removing a new station from list.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -66,22 +67,16 @@ public class FogMonitoringAreaConfigDlg extends MonitoringAreaConfigDlg {
|
|||
@Override
|
||||
protected void handleOkBtnSelection() {
|
||||
// Check for changes in the data
|
||||
if (!configManager.getAddedZones().isEmpty()
|
||||
|| !configManager.getAddedStations().isEmpty()
|
||||
|| this.timeWindowChanged || this.shipDistanceChanged
|
||||
|| this.fogChkChanged || this.maZonesRemoved) {
|
||||
if (dataIsChanged()) {
|
||||
int choice = showMessage(shell, SWT.OK | SWT.CANCEL,
|
||||
"Fog Monitor Confirm Changes",
|
||||
"Want to Update Fog Monitor's Setup files?");
|
||||
if (choice == SWT.OK) {
|
||||
// Save the config xml file
|
||||
configManager.setTimeWindow(timeWindow.getSelection());
|
||||
this.timeWindowChanged = false;
|
||||
configManager.setShipDistance(shipDistance.getSelection());
|
||||
this.shipDistanceChanged = false;
|
||||
configManager.setUseAlgorithms(fogChk.getSelection());
|
||||
this.fogChkChanged = false;
|
||||
this.maZonesRemoved = false;
|
||||
resetStatus();
|
||||
configManager.saveConfigData();
|
||||
/**
|
||||
* DR#11279: re-initialize threshold manager and the monitor
|
||||
|
@ -92,22 +87,7 @@ public class FogMonitoringAreaConfigDlg extends MonitoringAreaConfigDlg {
|
|||
|
||||
if ((!configManager.getAddedZones().isEmpty())
|
||||
|| (!configManager.getAddedStations().isEmpty())) {
|
||||
String message = "New zones have been added, the display "
|
||||
+ "thresholds for the new zones are set to "
|
||||
+ "default values, you may edit them with the display "
|
||||
+ "thresholds editor which can be launched from Fog Monitor "
|
||||
+ "zone table.\n\nIf Fog Monitor is running anywhere within "
|
||||
+ "the office, clear it.\n";
|
||||
|
||||
showMessage(shell, SWT.ICON_INFORMATION | SWT.OK,
|
||||
"Fog Monitor Confirm Changes", message);
|
||||
|
||||
String message2 = "New zones have been added, and their monitoring thresholds "
|
||||
+ "have been set to default values; would you like to modify "
|
||||
+ "their threshold values now?";
|
||||
int yesno = showMessage(shell, SWT.ICON_QUESTION | SWT.YES
|
||||
| SWT.NO, "Edit Thresholds Now?", message2);
|
||||
if (yesno == SWT.YES) {
|
||||
if (editDialog() == SWT.YES) {
|
||||
FogMonDispThreshDlg fogMonitorDlg = new FogMonDispThreshDlg(
|
||||
shell, CommonConfig.AppName.FOG,
|
||||
DataUsageKey.MONITOR);
|
||||
|
|
|
@ -41,6 +41,7 @@ import com.raytheon.uf.viz.monitor.ui.dialogs.MonitoringAreaConfigDlg;
|
|||
* Jan 5, 2010 mpduff Initial creation
|
||||
* Nov 27, 2012 1351 skorolev Changes for non-blocking dialog.
|
||||
* Jan 29, 2014 2757 skorolev Changed OK button handler.
|
||||
* Apr 23, 2014 3054 skorolev Fixed issue with removing a new station from list.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -73,22 +74,16 @@ public class SSMonitoringAreaConfigDlg extends MonitoringAreaConfigDlg {
|
|||
@Override
|
||||
protected void handleOkBtnSelection() {
|
||||
// Check for changes in the data
|
||||
if (!configManager.getAddedZones().isEmpty()
|
||||
|| !configManager.getAddedStations().isEmpty()
|
||||
|| this.timeWindowChanged || this.shipDistanceChanged
|
||||
|| this.fogChkChanged || this.maZonesRemoved) {
|
||||
if (dataIsChanged()) {
|
||||
int choice = showMessage(shell, SWT.OK | SWT.CANCEL,
|
||||
"SAFESEAS Monitor Confirm Changes",
|
||||
"Want to update the SAFESEAS setup files?");
|
||||
if (choice == SWT.OK) {
|
||||
// Save the config xml file
|
||||
configManager.setTimeWindow(timeWindow.getSelection());
|
||||
this.timeWindowChanged = false;
|
||||
configManager.setShipDistance(shipDistance.getSelection());
|
||||
this.shipDistanceChanged = false;
|
||||
configManager.setUseAlgorithms(fogChk.getSelection());
|
||||
this.fogChkChanged = false;
|
||||
this.maZonesRemoved = false;
|
||||
resetStatus();
|
||||
configManager.saveConfigData();
|
||||
/**
|
||||
* DR#11279: re-initialize threshold manager and the monitor
|
||||
|
@ -98,21 +93,7 @@ public class SSMonitoringAreaConfigDlg extends MonitoringAreaConfigDlg {
|
|||
SafeSeasMonitor.reInitialize();
|
||||
if ((!configManager.getAddedZones().isEmpty())
|
||||
|| (!configManager.getAddedStations().isEmpty())) {
|
||||
|
||||
String message = "You're updating the SAFESEAS monitoring settings."
|
||||
+ "\n\nIf SAFESEAS is running anywhere within "
|
||||
+ "the office, please clear it.\n";
|
||||
|
||||
showMessage(shell, SWT.OK, "SAFESEAS Config Change",
|
||||
message);
|
||||
|
||||
String message2 = "New zones have been added, and their monitoring thresholds "
|
||||
+ "have been set to default values; would you like to modify "
|
||||
+ "their threshold values now?";
|
||||
|
||||
int yesno = showMessage(shell, SWT.ICON_QUESTION | SWT.YES
|
||||
| SWT.NO, "Edit Thresholds Now?", message2);
|
||||
if (yesno == SWT.YES) {
|
||||
if (editDialog() == SWT.YES) {
|
||||
SSDispMonThreshDlg ssMonitorDlg = new SSDispMonThreshDlg(
|
||||
shell, CommonConfig.AppName.SAFESEAS,
|
||||
DataUsageKey.MONITOR);
|
||||
|
|
|
@ -41,6 +41,7 @@ import com.raytheon.uf.viz.monitor.ui.dialogs.MonitoringAreaConfigDlg;
|
|||
* Jan 5, 2010 mpduff Initial creation
|
||||
* Nov 27, 2012 1351 skorolev Changes for non-blocking dialog.
|
||||
* Jan 29, 2014 2757 skorolev Changed OK button handler.
|
||||
* Apr 23, 2014 3054 skorolev Fixed issue with removing a new station from list.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -67,17 +68,14 @@ public class SnowMonitoringAreaConfigDlg extends MonitoringAreaConfigDlg {
|
|||
@Override
|
||||
protected void handleOkBtnSelection() {
|
||||
// Check for changes in the data
|
||||
if (!configManager.getAddedZones().isEmpty()
|
||||
|| !configManager.getAddedStations().isEmpty()
|
||||
|| this.timeWindowChanged || this.maZonesRemoved) {
|
||||
if (dataIsChanged()) {
|
||||
int choice = showMessage(shell, SWT.OK | SWT.CANCEL,
|
||||
"SNOW Monitor Confirm Changes",
|
||||
"Want to update the SNOW setup files?");
|
||||
if (choice == SWT.OK) {
|
||||
// Save the config xml file
|
||||
configManager.setTimeWindow(timeWindow.getSelection());
|
||||
this.timeWindowChanged = false;
|
||||
this.maZonesRemoved = false;
|
||||
resetStatus();
|
||||
configManager.saveConfigData();
|
||||
/**
|
||||
* DR#11279: re-initialize threshold manager and the monitor
|
||||
|
@ -88,18 +86,7 @@ public class SnowMonitoringAreaConfigDlg extends MonitoringAreaConfigDlg {
|
|||
|
||||
if ((!configManager.getAddedZones().isEmpty())
|
||||
|| (!configManager.getAddedStations().isEmpty())) {
|
||||
showMessage(shell, SWT.ICON_INFORMATION | SWT.OK,
|
||||
"SNOW Config Change",
|
||||
"You're updating the SNOW monitoring settings."
|
||||
+ "\n\nIf SNOW is running anywhere within "
|
||||
+ "the office, please clear it.\n");
|
||||
|
||||
String message2 = "New zones have been added, and their monitoring thresholds "
|
||||
+ "have been set to default values; would you like to modify "
|
||||
+ "their threshold values now?";
|
||||
int yesno = showMessage(shell, SWT.ICON_QUESTION | SWT.YES
|
||||
| SWT.NO, "Edit Thresholds Now?", message2);
|
||||
if (yesno == SWT.YES) {
|
||||
if (editDialog() == SWT.YES) {
|
||||
SnowMonDispThreshDlg snowMonitorDlg = new SnowMonDispThreshDlg(
|
||||
shell, CommonConfig.AppName.SNOW,
|
||||
DataUsageKey.MONITOR);
|
||||
|
|
|
@ -58,6 +58,7 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
|
|||
* ------------ ---------- ----------- --------------------------
|
||||
* Apr 2, 2009 lvenable Initial creation
|
||||
* Nov 20, 2012 1297 skorolev Changes for non-blocking dialog.
|
||||
* Apr 23, 2014 3054 skorolev Added MESONET handling
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -159,7 +160,7 @@ public class AddNewStationDlg extends CaveSWTDialog {
|
|||
createTopLabelRadioControls();
|
||||
createTextControls();
|
||||
createBottomButtons();
|
||||
setStationLabel();
|
||||
stationLbl.setText("StationID:");
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -183,30 +184,13 @@ public class AddNewStationDlg extends CaveSWTDialog {
|
|||
metarRdo = new Button(radioComp, SWT.RADIO);
|
||||
metarRdo.setText("Metar");
|
||||
metarRdo.setSelection(true);
|
||||
metarRdo.addSelectionListener(new SelectionAdapter() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent event) {
|
||||
setStationLabel();
|
||||
}
|
||||
});
|
||||
// TODO: Disable if area has no marine zones.
|
||||
|
||||
maritimeRdo = new Button(radioComp, SWT.RADIO);
|
||||
maritimeRdo.setText("Maritime");
|
||||
maritimeRdo.setEnabled(appName != CommonConfig.AppName.SNOW);
|
||||
maritimeRdo.addSelectionListener(new SelectionAdapter() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent event) {
|
||||
setStationLabel();
|
||||
}
|
||||
});
|
||||
|
||||
mesonetRdo = new Button(radioComp, SWT.RADIO);
|
||||
mesonetRdo.setText("Mesonet");
|
||||
mesonetRdo.addSelectionListener(new SelectionAdapter() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent event) {
|
||||
setStationLabel();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -251,23 +235,22 @@ public class AddNewStationDlg extends CaveSWTDialog {
|
|||
if (metarRdo.getSelection()) {
|
||||
stationType = StationIdXML.METAR;
|
||||
} else if (mesonetRdo.getSelection()) {
|
||||
String s = stationTF.getText();
|
||||
s = s.substring(s.indexOf("#") + 1, s.length());
|
||||
stationType = s.toUpperCase();
|
||||
stationType = StationIdXML.MESONET;
|
||||
// TODO need to verify the stationType exists.
|
||||
// was in SSmesonetStationInfo.txt in AWIPS1.
|
||||
} else {
|
||||
stationType = StationIdXML.MARITIME;
|
||||
}
|
||||
if (!stationTF.getText().isEmpty()) {
|
||||
configManager.addStation(area, stationTF.getText(),
|
||||
stationType, false);
|
||||
configManager.addStation(area, stationTF.getText()
|
||||
.toUpperCase(), stationType, false);
|
||||
/**
|
||||
* for DR #7854: add new station to Monitor Area Config GUI
|
||||
*/
|
||||
handleAddNewStation();
|
||||
} else {
|
||||
displayInputErrorMsg("Invalid Station ID entered: Please enter a valid Station ID for the selected Station Type");
|
||||
displayInputErrorMsg("No Station ID entered."
|
||||
+ "\nPlease enter a valid Station ID for the selected Station Type.");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -285,37 +268,28 @@ public class AddNewStationDlg extends CaveSWTDialog {
|
|||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the station label.
|
||||
*/
|
||||
private void setStationLabel() {
|
||||
if (mesonetRdo.getSelection() == true) {
|
||||
stationLbl.setText("StationID#Provider:");
|
||||
} else {
|
||||
stationLbl.setText("StationID:");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a new station.
|
||||
*/
|
||||
private void handleAddNewStation() {
|
||||
if (!isValidStation()) {
|
||||
displayInputErrorMsg("Invalid Station ID entered: Please enter a valid Station ID for the selected Station Type");
|
||||
String stn = stationTF.getText().toUpperCase();
|
||||
if (!isValidStation(stn)) {
|
||||
displayInputErrorMsg("Invalid Station ID entered: "
|
||||
+ stn
|
||||
+ " \nPlease enter a valid Station ID for the selected Station Type.");
|
||||
return;
|
||||
}
|
||||
String stn = stationTF.getText();
|
||||
if (metarRdo.getSelection()) {
|
||||
stn = stn + "#METAR";
|
||||
} else if (maritimeRdo.getSelection()) {
|
||||
stn = stn + "#MARITIME";
|
||||
} else {
|
||||
// TODO: Mesonet
|
||||
stn = stn + "#MESONET";
|
||||
}
|
||||
if (macDlg.isExistingStation(stn)) {
|
||||
displayInputErrorMsg("The Station, "
|
||||
displayInputErrorMsg("The Station '"
|
||||
+ stn
|
||||
+ ", is already in your Monitoring Area or among your Additional Stations");
|
||||
+ "' is already in your Monitoring Area or among your Additional Stations.");
|
||||
return;
|
||||
}
|
||||
macDlg.addNewStationAction(stn);
|
||||
|
@ -325,13 +299,11 @@ public class AddNewStationDlg extends CaveSWTDialog {
|
|||
/**
|
||||
* Checks if station is valid.
|
||||
*
|
||||
* @param stnId
|
||||
*
|
||||
* @return boolean value
|
||||
*/
|
||||
private boolean isValidStation() {
|
||||
String stnId = stationTF.getText();
|
||||
if (stnId.contains("#") && !mesonetRdo.getSelection()) {
|
||||
return false;
|
||||
}
|
||||
private boolean isValidStation(String stnId) {
|
||||
String catalogtypePhrase = "";
|
||||
if (metarRdo.getSelection()) {
|
||||
catalogtypePhrase = "catalogtype = 1"; // METAR
|
||||
|
@ -339,7 +311,6 @@ public class AddNewStationDlg extends CaveSWTDialog {
|
|||
catalogtypePhrase = "catalogtype = 33 or catalogtype = 32"; // MARITIME
|
||||
} else {
|
||||
catalogtypePhrase = "catalogtype = 1000"; // MESONET
|
||||
stnId = stnId.substring(0, stnId.indexOf("#"));
|
||||
}
|
||||
try {
|
||||
String sql = "select stationid, catalogtype from common_obs_spatial where ( "
|
||||
|
@ -353,11 +324,9 @@ public class AddNewStationDlg extends CaveSWTDialog {
|
|||
return false;
|
||||
}
|
||||
return true;
|
||||
/**
|
||||
* TODO: need to add code for handling Mesonet station type
|
||||
*/
|
||||
} catch (Exception e) {
|
||||
statusHandler.handle(Priority.ERROR, e.getMessage());
|
||||
statusHandler.handle(Priority.ERROR, "Can not get " + stnId
|
||||
+ " station in the database. ", e);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -51,6 +51,7 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
|
|||
* ------------ ---------- ----------- --------------------------
|
||||
* Apr 2, 2009 lvenable Initial creation
|
||||
* Nov 20, 2012 1297 skorolev Changes for non-blocking dialog.
|
||||
* Apr 23, 2014 3054 skorolev Deleted unnecessary parameter in addArea method.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -225,7 +226,8 @@ public class AddNewZoneDlg extends CaveSWTDialog {
|
|||
gd = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
|
||||
gd.horizontalSpan = 2;
|
||||
Label useDecimalLbl = new Label(textComp, SWT.CENTER);
|
||||
useDecimalLbl.setText("Use Decimal Degrees, West Longitude negative");
|
||||
useDecimalLbl
|
||||
.setText("Use Decimal Degrees. West Longitude is negative.");
|
||||
useDecimalLbl.setLayoutData(gd);
|
||||
}
|
||||
|
||||
|
@ -283,23 +285,19 @@ public class AddNewZoneDlg extends CaveSWTDialog {
|
|||
String areaId = idTF.getText();
|
||||
if (areaId.equals("") || areaId.length() != 6
|
||||
|| (areaId.charAt(2) != 'C' && areaId.charAt(2) != 'Z')) {
|
||||
displayInputErrorMsg("Invalid Area ID entered. Please enter a correctly formatted Area ID");
|
||||
displayInputErrorMsg("Invalid Area ID = '" + areaId
|
||||
+ "' entered. Please enter a correctly formatted Area ID.");
|
||||
return;
|
||||
}
|
||||
if (macDlg.isExistingZone(areaId)) {
|
||||
displayInputErrorMsg("The Area ID, "
|
||||
+ areaId
|
||||
+ ", is already in your Monitoring Area or among your Additional Zones");
|
||||
+ ", is already in your Monitoring Area or among your Additional Zones.");
|
||||
return;
|
||||
}
|
||||
if (latString == null || latString.isEmpty() || lonString == null
|
||||
|| lonString.isEmpty()) {
|
||||
MessageBox messageBox = new MessageBox(shell, SWT.ICON_INFORMATION
|
||||
| SWT.OK);
|
||||
messageBox.setText("Invalid Lat/Lon");
|
||||
messageBox
|
||||
.setMessage("Invalid Lat/Lon entered. Please enter correctly formatted Lat and Lon values");
|
||||
messageBox.open();
|
||||
macDlg.latLonErrorMsg(latString, lonString);
|
||||
return;
|
||||
} else {
|
||||
try {
|
||||
|
@ -311,16 +309,15 @@ public class AddNewZoneDlg extends CaveSWTDialog {
|
|||
type = ZoneType.MARITIME;
|
||||
}
|
||||
}
|
||||
configMan.addArea(areaId, lat, lon, type, false);
|
||||
if (lat > 90.0 || lat < -90.0 || lon > 180.0 || lon < -180.0) {
|
||||
macDlg.latLonErrorMsg(latString, lonString);
|
||||
return;
|
||||
}
|
||||
configMan.addArea(areaId, lat, lon, type);
|
||||
macDlg.addNewZoneAction(areaId, centroidLatTF.getText(),
|
||||
centroidLonTF.getText());
|
||||
} catch (NumberFormatException e) {
|
||||
MessageBox messageBox = new MessageBox(shell,
|
||||
SWT.ICON_INFORMATION | SWT.OK);
|
||||
messageBox.setText("Invalid Lat/Lon");
|
||||
messageBox
|
||||
.setMessage("Invalid Lat/Lon entered. Please enter correctly formatted Lat and Lon values");
|
||||
messageBox.open();
|
||||
macDlg.latLonErrorMsg(latString, lonString);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,6 +30,7 @@ import org.eclipse.swt.widgets.Composite;
|
|||
import org.eclipse.swt.widgets.Label;
|
||||
import org.eclipse.swt.widgets.Layout;
|
||||
import org.eclipse.swt.widgets.List;
|
||||
import org.eclipse.swt.widgets.MessageBox;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
|
||||
import com.raytheon.uf.common.monitor.config.FogMonitorConfigurationManager;
|
||||
|
@ -50,6 +51,7 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
|
|||
* ------------ ---------- ----------- --------------------------
|
||||
* Apr 2, 2009 lvenable Initial creation
|
||||
* Nov 20, 2012 1297 skorolev Changes for non-blocking dialog.
|
||||
* Apr 23, 2014 3054 skorolev Fixed issue with deleting a new station.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -155,7 +157,8 @@ public class DeleteStationDlg extends CaveSWTDialog {
|
|||
deleteBtn.addSelectionListener(new SelectionAdapter() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent event) {
|
||||
deleteSelected();
|
||||
String delStn = deleteSelected();
|
||||
setReturnValue(delStn);
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -166,7 +169,6 @@ public class DeleteStationDlg extends CaveSWTDialog {
|
|||
closeBtn.addSelectionListener(new SelectionAdapter() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent event) {
|
||||
setReturnValue(true);
|
||||
close();
|
||||
}
|
||||
});
|
||||
|
@ -184,14 +186,26 @@ public class DeleteStationDlg extends CaveSWTDialog {
|
|||
/**
|
||||
* Delete stations from the list.
|
||||
*/
|
||||
private void deleteSelected() {
|
||||
private String deleteSelected() {
|
||||
String retval = null;
|
||||
if (stationList.getItemCount() != 0) {
|
||||
String selection = stationList.getItem(stationList
|
||||
.getSelectionIndex());
|
||||
configMan.removeStation(selection);
|
||||
stationList.remove(stationList.getSelectionIndex());
|
||||
populate();
|
||||
if (stationList.getSelectionIndex() != -1) {
|
||||
int idx = stationList.getSelectionIndex();
|
||||
String selection = stationList.getItem(idx);
|
||||
retval = configMan.getAddedStations().get(idx);
|
||||
configMan.getAddedStations().remove(idx);
|
||||
stationList.remove(selection);
|
||||
populate();
|
||||
} else {
|
||||
MessageBox messageBox = new MessageBox(shell,
|
||||
SWT.ICON_INFORMATION | SWT.NONE);
|
||||
messageBox.setText("Selection error.");
|
||||
messageBox.setMessage("Please select station to delete.");
|
||||
messageBox.open();
|
||||
stationList.select(0);
|
||||
}
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -53,6 +53,7 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
|
|||
* ------------ ---------- ----------- --------------------------
|
||||
* Apr 2, 2009 lvenable Initial creation
|
||||
* Nov 20, 2012 1297 skorolev Changes for non-blocking dialog.
|
||||
* Apr 23, 2014 3054 skorolev Fixed issues with removing a new zone from list.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -60,6 +61,12 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
|
|||
* @version 1.0
|
||||
*/
|
||||
public class EditNewZoneDlg extends CaveSWTDialog {
|
||||
|
||||
/**
|
||||
* Call back interface.
|
||||
*/
|
||||
private INewZoneStnAction macDlg;
|
||||
|
||||
/**
|
||||
* Zone list control.
|
||||
*/
|
||||
|
@ -115,6 +122,8 @@ public class EditNewZoneDlg extends CaveSWTDialog {
|
|||
*/
|
||||
private Label bottomLbl;
|
||||
|
||||
private String delZone;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
|
@ -122,10 +131,13 @@ public class EditNewZoneDlg extends CaveSWTDialog {
|
|||
* Parent shell.
|
||||
* @param appName
|
||||
* Application name.
|
||||
* @param monitoringAreaConfigDlg
|
||||
*/
|
||||
public EditNewZoneDlg(Shell parent, AppName appName) {
|
||||
public EditNewZoneDlg(Shell parent, AppName appName,
|
||||
INewZoneStnAction macDlg) {
|
||||
super(parent, SWT.DIALOG_TRIM, CAVE.DO_NOT_BLOCK);
|
||||
setText(appName.toString() + ": Edit a Newly Added Zone");
|
||||
this.macDlg = macDlg;
|
||||
configMan = this.getConfigManager(appName);
|
||||
}
|
||||
|
||||
|
@ -279,7 +291,7 @@ public class EditNewZoneDlg extends CaveSWTDialog {
|
|||
deleteBtn.addSelectionListener(new SelectionAdapter() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent event) {
|
||||
deleteSelected();
|
||||
delZone = deleteSelected();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -316,7 +328,7 @@ public class EditNewZoneDlg extends CaveSWTDialog {
|
|||
closeBtn.addSelectionListener(new SelectionAdapter() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent event) {
|
||||
setReturnValue(true);
|
||||
setReturnValue(delZone);
|
||||
close();
|
||||
}
|
||||
});
|
||||
|
@ -339,6 +351,7 @@ public class EditNewZoneDlg extends CaveSWTDialog {
|
|||
// DR #7343: a null areaXml causes an "Unhandled event loop exception"
|
||||
if (areaXml != null) {
|
||||
idTF.setText(areaXml.getAreaId());
|
||||
idTF.setEnabled(false);
|
||||
latTF.setText(String.valueOf(areaXml.getCLat()));
|
||||
lonTF.setText(String.valueOf(areaXml.getCLon()));
|
||||
if (areaXml.getType() == ZoneType.REGULAR) {
|
||||
|
@ -354,8 +367,7 @@ public class EditNewZoneDlg extends CaveSWTDialog {
|
|||
/**
|
||||
* Delete selected zones.
|
||||
*/
|
||||
// TODO: Delete zone from left list in the Area Configuration dialog.
|
||||
private void deleteSelected() {
|
||||
private String deleteSelected() {
|
||||
if (zoneList.getItemCount() != 0) {
|
||||
String area = zoneList.getItem(zoneList.getSelectionIndex());
|
||||
zoneList.remove(zoneList.getSelectionIndex());
|
||||
|
@ -363,9 +375,11 @@ public class EditNewZoneDlg extends CaveSWTDialog {
|
|||
idTF.setText("");
|
||||
latTF.setText("");
|
||||
lonTF.setText("");
|
||||
return area;
|
||||
} else {
|
||||
bottomLbl.setText("No zones have been added.");
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -375,28 +389,36 @@ public class EditNewZoneDlg extends CaveSWTDialog {
|
|||
|
||||
if (zoneList.getItemCount() != 0) {
|
||||
String area = zoneList.getItem(zoneList.getSelectionIndex());
|
||||
double lat;
|
||||
if (!latTF.getText().isEmpty()) {
|
||||
lat = Double.parseDouble(latTF.getText());
|
||||
String latStr = latTF.getText();
|
||||
String lontStr = lonTF.getText();
|
||||
if (latStr == null || latStr.isEmpty() || lontStr == null
|
||||
|| lontStr.isEmpty()) {
|
||||
macDlg.latLonErrorMsg(latStr, lontStr);
|
||||
return;
|
||||
} else {
|
||||
// wrong value will be filtered when save
|
||||
lat = 9999.0;
|
||||
try {
|
||||
double lat = Double.parseDouble(latStr);
|
||||
double lon = Double.parseDouble(lontStr);
|
||||
if (lat > 90.0 || lat < -90.0 || lon > 180.0
|
||||
|| lon < -180.0) {
|
||||
macDlg.latLonErrorMsg(latStr, lontStr);
|
||||
return;
|
||||
}
|
||||
ZoneType type = ZoneType.REGULAR;
|
||||
if (marineRdo.getSelection()) {
|
||||
type = ZoneType.MARITIME;
|
||||
}
|
||||
configMan.removeArea(area);
|
||||
configMan.removeAddedArea(area);
|
||||
configMan.addArea(area, lat, lon, type);
|
||||
populate();
|
||||
// Return cursor to the top of the list.
|
||||
zoneList.select(0);
|
||||
} catch (NumberFormatException e) {
|
||||
macDlg.latLonErrorMsg(latStr, lontStr);
|
||||
return;
|
||||
}
|
||||
}
|
||||
double lon;
|
||||
if (!lonTF.getText().isEmpty()) {
|
||||
lon = Double.parseDouble(lonTF.getText());
|
||||
} else {
|
||||
// wrong value will be filtered when save
|
||||
lon = 9999.0;
|
||||
}
|
||||
ZoneType type = ZoneType.REGULAR;
|
||||
if (marineRdo.getSelection()) {
|
||||
type = ZoneType.MARITIME;
|
||||
}
|
||||
configMan.removeArea(area);
|
||||
configMan.removeAddedArea(area);
|
||||
configMan.addArea(idTF.getText(), lat, lon, type, false);
|
||||
populate();
|
||||
} else {
|
||||
bottomLbl.setText("No zones have been added.");
|
||||
}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
package com.raytheon.uf.viz.monitor.ui.dialogs;
|
||||
|
||||
/**
|
||||
* Interface used for action callbacks for the Monitor Area
|
||||
* Configure Dlg
|
||||
* Interface used for action callbacks for the Monitor Area Configure Dlg
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Feb 9, 2011 7854, 7855 zhao Initial creation
|
||||
*
|
||||
* Feb 9, 2011 7854, 7855 zhao Initial creation
|
||||
* Apr 24, 2014 3054 skorolev Add an error message box action.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
*
|
||||
* @author zhao
|
||||
* @version 1.0
|
||||
*/
|
||||
|
@ -21,11 +22,19 @@ public interface INewZoneStnAction {
|
|||
* Action to add a new zone to Monitor Area.
|
||||
*/
|
||||
public void addNewZoneAction(String id, String lat, String log);
|
||||
|
||||
public boolean isExistingZone(String id);
|
||||
|
||||
|
||||
/**
|
||||
* Action to add a new station to Monitor Area
|
||||
*/
|
||||
public void addNewStationAction(String stnWithType);
|
||||
public void addNewStationAction(String stnWithType);
|
||||
|
||||
public boolean isExistingStation(String stnWithType);
|
||||
|
||||
/**
|
||||
* Action to show an error message box for invalid Latitude and Longitude
|
||||
* values.
|
||||
*/
|
||||
public void latLonErrorMsg(String latStr, String lonStr);
|
||||
}
|
||||
|
|
|
@ -72,6 +72,7 @@ import com.raytheon.viz.ui.dialogs.ICloseCallback;
|
|||
* Feb 06, 2013 1578 skorolev Fixed a cursor problem for checkboxes.
|
||||
* Oct 07, 2013 #2443 lvenable Fixed image memory leak.
|
||||
* Jan 29, 2014 2757 skorolev Added status variables.
|
||||
* Apr 23, 2014 3054 skorolev Fixed issue with removing from list a new zone and a new station.
|
||||
* </pre>
|
||||
*
|
||||
* @author lvenable
|
||||
|
@ -187,6 +188,9 @@ public abstract class MonitoringAreaConfigDlg extends CaveSWTDialog implements
|
|||
/** monitor area stations **/
|
||||
private java.util.List<String> maStations = null;
|
||||
|
||||
/** monitor area stations status. */
|
||||
protected boolean maStationsRemoved = false;
|
||||
|
||||
/** monitor area additional zones **/
|
||||
private java.util.List<String> additionalZones = null;
|
||||
|
||||
|
@ -287,6 +291,7 @@ public abstract class MonitoringAreaConfigDlg extends CaveSWTDialog implements
|
|||
" Error initiate Additional Zone/Stations list.", e);
|
||||
}
|
||||
Collections.sort(additionalStns);
|
||||
mode = Mode.Zone;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -565,6 +570,7 @@ public abstract class MonitoringAreaConfigDlg extends CaveSWTDialog implements
|
|||
@Override
|
||||
public void widgetSelected(SelectionEvent event) {
|
||||
removeAssociated();
|
||||
maStationsRemoved = true;
|
||||
}
|
||||
});
|
||||
/*
|
||||
|
@ -864,25 +870,32 @@ public abstract class MonitoringAreaConfigDlg extends CaveSWTDialog implements
|
|||
}
|
||||
addNewZoneDlg.open();
|
||||
} else {
|
||||
if (associatedList.getSelectionIndex() == -1) {
|
||||
associatedList.setSelection(0);
|
||||
}
|
||||
String area = associatedList.getItem(associatedList
|
||||
.getSelectionIndex());
|
||||
if (addNewStnDlg == null) {
|
||||
addNewStnDlg = new AddNewStationDlg(shell, appName, area, this);
|
||||
addNewStnDlg.setCloseCallback(new ICloseCallback() {
|
||||
@Override
|
||||
public void dialogClosed(Object returnValue) {
|
||||
if ((Boolean) returnValue) {
|
||||
// Update the dialog
|
||||
populateLeftLists();
|
||||
if (associatedList.getSelectionIndex() != -1) {
|
||||
String area = associatedList.getItem(associatedList
|
||||
.getSelectionIndex());
|
||||
if (addNewStnDlg == null) {
|
||||
addNewStnDlg = new AddNewStationDlg(shell, appName, area,
|
||||
this);
|
||||
addNewStnDlg.setCloseCallback(new ICloseCallback() {
|
||||
@Override
|
||||
public void dialogClosed(Object returnValue) {
|
||||
if ((Boolean) returnValue) {
|
||||
// Update the dialog
|
||||
populateLeftLists();
|
||||
}
|
||||
addNewStnDlg = null;
|
||||
}
|
||||
addNewStnDlg = null;
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
addNewStnDlg.open();
|
||||
} else {
|
||||
MessageBox messageBox = new MessageBox(shell,
|
||||
SWT.ICON_INFORMATION | SWT.NONE);
|
||||
messageBox.setText("Selection error.");
|
||||
messageBox.setMessage("Please select associated zone.");
|
||||
messageBox.open();
|
||||
associatedList.select(0);
|
||||
}
|
||||
addNewStnDlg.open();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -892,12 +905,14 @@ public abstract class MonitoringAreaConfigDlg extends CaveSWTDialog implements
|
|||
private void handleEditDeleteAction() {
|
||||
if (zoneRdo.getSelection() == true) {
|
||||
if (editDlg == null) {
|
||||
editDlg = new EditNewZoneDlg(shell, appName);
|
||||
editDlg = new EditNewZoneDlg(shell, appName, this);
|
||||
editDlg.setCloseCallback(new ICloseCallback() {
|
||||
@Override
|
||||
public void dialogClosed(Object returnValue) {
|
||||
if ((Boolean) returnValue) {
|
||||
// Update the dialog
|
||||
if (returnValue instanceof String) {
|
||||
// Update the edit dialog
|
||||
String selectedZone = returnValue.toString();
|
||||
maZones.remove(selectedZone);
|
||||
populateLeftLists();
|
||||
}
|
||||
editDlg = null;
|
||||
|
@ -911,8 +926,10 @@ public abstract class MonitoringAreaConfigDlg extends CaveSWTDialog implements
|
|||
deleteStnDlg.setCloseCallback(new ICloseCallback() {
|
||||
@Override
|
||||
public void dialogClosed(Object returnValue) {
|
||||
if ((Boolean) returnValue) {
|
||||
// Update the dialog
|
||||
if (returnValue instanceof String) {
|
||||
// Update the delete dialog
|
||||
String selectedStn = returnValue.toString();
|
||||
maStations.remove(selectedStn);
|
||||
populateLeftLists();
|
||||
}
|
||||
deleteStnDlg = null;
|
||||
|
@ -1385,4 +1402,68 @@ public abstract class MonitoringAreaConfigDlg extends CaveSWTDialog implements
|
|||
arrowUpImg.dispose();
|
||||
arrowDownImg.dispose();
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see
|
||||
* com.raytheon.uf.viz.monitor.ui.dialogs.INewZoneStnAction#latLonErrorMsg()
|
||||
*/
|
||||
public void latLonErrorMsg(String latStr, String lonStr) {
|
||||
MessageBox messageBox = new MessageBox(shell, SWT.ICON_INFORMATION
|
||||
| SWT.OK);
|
||||
messageBox.setText("Invalid Lat/Lon");
|
||||
StringBuilder errMsg = new StringBuilder("Invalid Lat/Lon entered:");
|
||||
errMsg.append("\nLatitude = ");
|
||||
errMsg.append(latStr);
|
||||
errMsg.append("\nLongitude = ");
|
||||
errMsg.append(lonStr);
|
||||
errMsg.append("\nPlease enter correctly formatted Lat and Lon values:");
|
||||
errMsg.append("\nLatitude should be between -90,90.");
|
||||
errMsg.append("\nLongitude should be between -180,180.");
|
||||
messageBox.setMessage(errMsg.toString());
|
||||
messageBox.open();
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset data status.
|
||||
*/
|
||||
protected void resetStatus() {
|
||||
this.timeWindowChanged = false;
|
||||
this.maZonesRemoved = false;
|
||||
this.maStationsRemoved = false;
|
||||
this.shipDistanceChanged = false;
|
||||
this.fogChkChanged = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if data and data states have been changed.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
protected boolean dataIsChanged() {
|
||||
if (!configMgr.getAddedZones().isEmpty()
|
||||
|| !configMgr.getAddedStations().isEmpty()
|
||||
|| this.timeWindowChanged || this.shipDistanceChanged
|
||||
|| this.fogChkChanged || this.maZonesRemoved
|
||||
|| this.maStationsRemoved) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
protected int editDialog() {
|
||||
showMessage(shell, SWT.ICON_INFORMATION | SWT.OK, appName
|
||||
+ " Config Change", "You're updating the " + appName
|
||||
+ " monitoring settings." + "\n\nIf " + appName
|
||||
+ " is running anywhere within "
|
||||
+ "the office, please clear it.\n");
|
||||
|
||||
String message2 = "New zones have been added, and their monitoring thresholds "
|
||||
+ "have been set to default values; would you like to modify "
|
||||
+ "their threshold values now?";
|
||||
int yesno = showMessage(shell, SWT.ICON_QUESTION | SWT.YES | SWT.NO,
|
||||
"Edit Thresholds Now?", message2);
|
||||
return yesno;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -61,6 +61,7 @@ import com.raytheon.viz.grid.util.RadarAdapter;
|
|||
* ------------ ---------- ----------- --------------------------
|
||||
* Dec 13, 2011 bsteffen Initial creation
|
||||
* Feb 21, 2014 DR 16744 D. Friedman Add radar/grid updates
|
||||
* Apr 1, 2014 DR 17220 D. Friedman Handle uninitialized grid inventory
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -138,6 +139,10 @@ public class ThinClientDataUpdateTree extends DataUpdateTree {
|
|||
Set<AlertMessage> radarMessages = new HashSet<AlertMessage>();
|
||||
Map<String, RequestConstraint> metadata = RadarAdapter.getInstance()
|
||||
.getUpdateConstraints();
|
||||
if (metadata == null) {
|
||||
// Can happen if grid inventory has not been initialized
|
||||
return;
|
||||
}
|
||||
metadata = new HashMap<String, RequestConstraint>(metadata);
|
||||
metadata.put("insertTime", new RequestConstraint(time,
|
||||
ConstraintType.GREATER_THAN));
|
||||
|
|
|
@ -28,7 +28,7 @@ import org.osgi.framework.BundleContext;
|
|||
import com.raytheon.uf.viz.core.localization.HierarchicalPreferenceStore;
|
||||
|
||||
/**
|
||||
* TODO Add Description
|
||||
* Activator class for the thinclient
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
|
@ -37,7 +37,8 @@ import com.raytheon.uf.viz.core.localization.HierarchicalPreferenceStore;
|
|||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Oct 20, 2011 mschenke Initial creation
|
||||
* Mar 3, 2014 2861 mschenke Create preference store immediately
|
||||
* Mar 03, 2014 2861 mschenke Create preference store immediately
|
||||
* Apr 25, 2014 2972 njensen Fixed prefs so thinclient can start
|
||||
*
|
||||
*
|
||||
* </pre>
|
||||
|
@ -56,12 +57,17 @@ public class Activator extends AbstractUIPlugin {
|
|||
|
||||
private BundleContext ctx;
|
||||
|
||||
// General preference store
|
||||
private IPersistentPreferenceStore prefs = new HierarchicalPreferenceStore(
|
||||
this);
|
||||
/**
|
||||
* General preference store. This must NOT be a HierarchicalPreferenceStore
|
||||
* as those store to the server and this preference store contains the
|
||||
* server addresses.
|
||||
*/
|
||||
private ScopedPreferenceStore prefs = new ScopedPreferenceStore(
|
||||
InstanceScope.INSTANCE, PLUGIN_ID);
|
||||
|
||||
// Preferences for UI
|
||||
private HierarchicalPreferenceStore uiPrefs;
|
||||
private HierarchicalPreferenceStore uiPrefs = new HierarchicalPreferenceStore(
|
||||
PLUGIN_ID);
|
||||
|
||||
private IThinClientComponent component;
|
||||
|
||||
|
@ -78,6 +84,7 @@ public class Activator extends AbstractUIPlugin {
|
|||
* org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext
|
||||
* )
|
||||
*/
|
||||
@Override
|
||||
public void start(BundleContext context) throws Exception {
|
||||
super.start(context);
|
||||
this.ctx = context;
|
||||
|
@ -95,6 +102,7 @@ public class Activator extends AbstractUIPlugin {
|
|||
* org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext
|
||||
* )
|
||||
*/
|
||||
@Override
|
||||
public void stop(BundleContext context) throws Exception {
|
||||
plugin = null;
|
||||
super.stop(context);
|
||||
|
@ -121,15 +129,12 @@ public class Activator extends AbstractUIPlugin {
|
|||
*/
|
||||
@Override
|
||||
public IPersistentPreferenceStore getPreferenceStore() {
|
||||
if (prefs == null) {
|
||||
prefs = new ScopedPreferenceStore(new InstanceScope(), PLUGIN_ID);
|
||||
}
|
||||
|
||||
return prefs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Ui preference store
|
||||
* Get the UI preference store. This only contains the options for the
|
||||
* refresh intervals that are shown on the preference page.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
|
|
|
@ -2,7 +2,7 @@ Manifest-Version: 1.0
|
|||
Bundle-ManifestVersion: 2
|
||||
Bundle-Name: Aviation Plug-in
|
||||
Bundle-SymbolicName: com.raytheon.viz.aviation;singleton:=true
|
||||
Bundle-Version: 1.14.0
|
||||
Bundle-Version: 1.14.0.qualifier
|
||||
Bundle-Activator: com.raytheon.viz.aviation.activator.Activator
|
||||
Bundle-Vendor: Raytheon
|
||||
Require-Bundle: org.eclipse.ui,
|
||||
|
|
|
@ -315,6 +315,10 @@
|
|||
# Status: TEST
|
||||
# Title: AvnFPS: OB9.2 installation breaks mtrs.cfg file
|
||||
#
|
||||
# Date Ticket# Engineer Description
|
||||
# ------------ ---------- ----------- --------------------------
|
||||
# 02APR2014 17211 zhao (code obtained from the listserver via Virgil that implements a new rule regarding CB, TS etc)
|
||||
#
|
||||
#
|
||||
#
|
||||
import exceptions, re, time, types
|
||||
|
@ -423,6 +427,8 @@ ddHH/ddHH)""",
|
|||
60: """NSW not needed""",
|
||||
61: """The period covered by a TAF shall not exceed 30
|
||||
hours""",
|
||||
81: """CB may only be mentioned when TS or VCTS mentioned
|
||||
(NWSI 10-813, Appendix B, 1.2.7.3)""",
|
||||
}
|
||||
|
||||
_Warnings = { \
|
||||
|
@ -1054,6 +1060,10 @@ class Decoder(tpg.VerboseParser):
|
|||
'TS' in g['vcnty']['str']:
|
||||
if 'sky' not in g or 'CB' not in g['sky']['str']:
|
||||
raise Error(_Errors[11])
|
||||
if 'sky' in g and 'CB' in g['sky']['str']:
|
||||
if ('pcp' not in g or 'TS' not in g['pcp']['str']) and \
|
||||
('vcnty' not in g or 'TS' not in g['vcnty']['str']):
|
||||
raise Error(_Errors[81])
|
||||
|
||||
def check_obv(self):
|
||||
# NWSI 10-813, 1.2.6
|
||||
|
|
|
@ -85,6 +85,7 @@ import com.vividsolutions.jts.geom.LineString;
|
|||
* 04-07-10 #4614 randerso Reworked to use localization files
|
||||
* 07-11-12 #875 rferrel Move points to PointsDataManager.
|
||||
* 01-29-14 DR 16351 D. Friedman Fix updates to storm track from preferences.
|
||||
* 04-02-14 DR 16351 D. Friedman Fix updates to storm track from preferences. (backport from 14.2.2)
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
|
|
@ -100,6 +100,7 @@ import com.vividsolutions.jts.geom.LineString;
|
|||
* 06-24-2013 DR 16317 D. Friedman Handle "motionless" track.
|
||||
* 01-28-2014 DR16465 mgamazaychikov Fixed the problem with anchor point when frame
|
||||
* count changes; made line width configurable.
|
||||
* 04-07-2014 DR 17232 D. Friedman Make sure pivot indexes are valid.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -212,9 +213,10 @@ public class StormTrackDisplay implements IRenderable {
|
|||
}
|
||||
|
||||
if (currentFrame == currentState.displayedPivotIndex) {
|
||||
if (currentState.displayedPivotIndex == currentState.pivotIndex) {
|
||||
if (currentState.displayedPivotIndex == currentState.pivotIndex &&
|
||||
currentState.otherPivotIndex >= 0) {
|
||||
currentState.displayedPivotIndex = currentState.otherPivotIndex;
|
||||
} else {
|
||||
} else if (currentState.pivotIndex >= 0){
|
||||
currentState.displayedPivotIndex = currentState.pivotIndex;
|
||||
}
|
||||
}
|
||||
|
@ -236,9 +238,10 @@ public class StormTrackDisplay implements IRenderable {
|
|||
currentState.displayedPivotIndex = currentState.pivotIndex;
|
||||
currentState.nextPivotIndex = -1;
|
||||
} else if (currentFrame == currentState.displayedPivotIndex) {
|
||||
if (currentState.displayedPivotIndex == currentState.pivotIndex) {
|
||||
if (currentState.displayedPivotIndex == currentState.pivotIndex &&
|
||||
currentState.otherPivotIndex >= 0) {
|
||||
currentState.displayedPivotIndex = currentState.otherPivotIndex;
|
||||
} else {
|
||||
} else if (currentState.pivotIndex >= 0){
|
||||
currentState.displayedPivotIndex = currentState.pivotIndex;
|
||||
}
|
||||
} else if (currentFrame != currentState.displayedPivotIndex) {
|
||||
|
@ -1413,4 +1416,5 @@ public class StormTrackDisplay implements IRenderable {
|
|||
data.setMotionSpeed((int) mpsToKts.convert(state.speed));
|
||||
dataManager.setStormTrackData(data);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -63,6 +63,7 @@ import com.vividsolutions.jts.geom.Point;
|
|||
* needs to update the track because
|
||||
* the point has been moved.
|
||||
* 08-12-2013 DR 16427 D. Friedman Prevent NPE.
|
||||
* 04-07-2014 DR 17232 D. Friedman Set displayedPivotIndex when needed.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -270,6 +271,17 @@ public class StormTrackUIManager extends InputAdapter {
|
|||
state.pointMoved = true;
|
||||
FramesInfo info = controller.getDescriptor().getFramesInfo();
|
||||
trackUtil.setPivotIndexes(info, state);
|
||||
|
||||
// This code is duplicated from StormTrackDisplay.paint().
|
||||
if (state.displayedPivotIndex == trackUtil.getCurrentFrame(info)) {
|
||||
if (state.displayedPivotIndex == state.pivotIndex &&
|
||||
state.otherPivotIndex >= 0) {
|
||||
state.displayedPivotIndex = state.otherPivotIndex;
|
||||
} else if (state.pivotIndex >= 0) {
|
||||
state.displayedPivotIndex = state.pivotIndex;
|
||||
}
|
||||
}
|
||||
|
||||
state.nextPivotIndex = trackUtil.getCurrentFrame(info);
|
||||
controller.issueRefresh();
|
||||
rval = true;
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
from com.raytheon.uf.viz.core import GraphicsFactory
|
||||
from com.raytheon.uf.viz.core.drawables import PaintProperties
|
||||
from com.raytheon.viz.core.gl import GLTargetProxy
|
||||
from com.raytheon.uf.viz.core.rsc import ResourceProperties
|
||||
|
||||
#
|
||||
# Base class for Viz painting from python
|
||||
|
@ -32,6 +33,7 @@ from com.raytheon.viz.core.gl import GLTargetProxy
|
|||
# ------------ ---------- ----------- --------------------------
|
||||
# 04/01/09 njensen Initial Creation.
|
||||
# 08/20/2012 #1077 randerso Fixed backgroundColor setting
|
||||
# Apr 16, 2014 3039 njensen Ensure correct ResourceList.add() is used
|
||||
#
|
||||
#
|
||||
#
|
||||
|
@ -83,7 +85,7 @@ class VizPainter():
|
|||
desc = self.getDescriptor()
|
||||
vizResource.setDescriptor(desc)
|
||||
vizResource.init(self.target)
|
||||
desc.getResourceList().add(vizResource)
|
||||
desc.getResourceList().add(vizResource, ResourceProperties())
|
||||
|
||||
def paint(self, time, canvas=None):
|
||||
if type(time) is str:
|
||||
|
@ -130,4 +132,4 @@ class VizPainter():
|
|||
if index > -1:
|
||||
self.getDescriptor().setFrame(index)
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -58,6 +58,10 @@ import com.raytheon.viz.ui.personalities.awips.AbstractCAVEComponent;
|
|||
* now that they're no longer in
|
||||
* localization store.
|
||||
* Dec 04, 2013 #2588 dgilling Add thread to force shutdown.
|
||||
* Mar 25, 2014 #2963 randerso Removed obsolete python_include support
|
||||
* which was adding an empty string into the
|
||||
* python path causing python to look in user's
|
||||
* current default directory for modules.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -104,11 +108,6 @@ public class GfeClient extends AbstractCAVEComponent {
|
|||
FileUtil.join("python", "pyViz")), null)).getPath())
|
||||
.getPath();
|
||||
|
||||
String pyInclude = System.getProperty("python_include");
|
||||
if (pyInclude == null) {
|
||||
pyInclude = "";
|
||||
}
|
||||
|
||||
String utilityDir = new File(FileLocator.resolve(
|
||||
FileLocator.find(Activator.getDefault().getBundle(), new Path(
|
||||
FileUtil.join("python", "utility")), null)).getPath())
|
||||
|
@ -116,8 +115,8 @@ public class GfeClient extends AbstractCAVEComponent {
|
|||
|
||||
boolean includeUser = (!VizApp.getWsId().getUserName().equals("SITE"));
|
||||
|
||||
String includePath = PyUtil.buildJepIncludePath(true, pyInclude,
|
||||
utilityDir, GfeCavePyIncludeUtil.getCommonPythonIncludePath(),
|
||||
String includePath = PyUtil.buildJepIncludePath(true, utilityDir,
|
||||
GfeCavePyIncludeUtil.getCommonPythonIncludePath(),
|
||||
GfeCavePyIncludeUtil.getCommonGfeIncludePath(),
|
||||
GfeCavePyIncludeUtil.getConfigIncludePath(includeUser),
|
||||
pyVizDir,
|
||||
|
|
|
@ -27,11 +27,15 @@ import org.eclipse.core.commands.ExecutionException;
|
|||
import org.eclipse.ui.commands.IElementUpdater;
|
||||
import org.eclipse.ui.menus.UIElement;
|
||||
|
||||
import com.raytheon.uf.common.dataplugin.gfe.db.objects.ParmID;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.viz.core.VizApp;
|
||||
import com.raytheon.viz.gfe.core.DataManager;
|
||||
import com.raytheon.viz.gfe.core.DataManagerUIFactory;
|
||||
import com.raytheon.viz.gfe.core.msgs.EnableDisableTopoMsg;
|
||||
import com.raytheon.viz.gfe.core.msgs.EnableDisableTopoMsg.Action;
|
||||
import com.raytheon.viz.gfe.core.msgs.Message;
|
||||
import com.raytheon.viz.gfe.core.parm.Parm;
|
||||
|
||||
/**
|
||||
* Handle the GFE Topography menu item
|
||||
|
@ -42,6 +46,7 @@ import com.raytheon.viz.gfe.core.msgs.Message;
|
|||
* ------------ ---------- ----------- --------------------------
|
||||
* Jul 2, 2008 #1160 randerso Initial creation
|
||||
* Nov 20, 2013 #2331 randerso Re-implemented using message
|
||||
* Apr 02, 2014 #2969 randerso Fix state of Topography menu item
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -53,6 +58,8 @@ public class TopoHandler extends AbstractHandler implements IElementUpdater {
|
|||
private IUFStatusHandler statusHandler = UFStatus
|
||||
.getHandler(TopoHandler.class);
|
||||
|
||||
public static String commandId = "com.raytheon.viz.gfe.actions.topo";
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
|
@ -62,11 +69,21 @@ public class TopoHandler extends AbstractHandler implements IElementUpdater {
|
|||
*/
|
||||
@Override
|
||||
public Object execute(ExecutionEvent arg0) throws ExecutionException {
|
||||
Action lastAction = Message.inquireLastMessage(
|
||||
EnableDisableTopoMsg.class).getAction();
|
||||
boolean topoDisplayed = false;
|
||||
DataManager dm = DataManagerUIFactory.getCurrentInstance();
|
||||
if (dm != null) {
|
||||
Parm[] parms = dm.getParmManager().getDisplayedParms();
|
||||
ParmID topoId = dm.getTopoManager().getCompositeParmID();
|
||||
for (Parm p : parms) {
|
||||
if (p.getParmID().equals(topoId)) {
|
||||
topoDisplayed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Action newAction;
|
||||
if (lastAction.equals(Action.ENABLE)) {
|
||||
if (topoDisplayed) {
|
||||
newAction = Action.DISABLE;
|
||||
} else {
|
||||
newAction = Action.ENABLE;
|
||||
|
@ -88,8 +105,25 @@ public class TopoHandler extends AbstractHandler implements IElementUpdater {
|
|||
@SuppressWarnings("rawtypes")
|
||||
@Override
|
||||
public void updateElement(final UIElement element, Map parameters) {
|
||||
element.setChecked(Message
|
||||
.inquireLastMessage(EnableDisableTopoMsg.class).getAction()
|
||||
.equals(EnableDisableTopoMsg.Action.ENABLE));
|
||||
boolean topoDisplayed = false;
|
||||
DataManager dm = DataManagerUIFactory.getCurrentInstance();
|
||||
if (dm != null) {
|
||||
Parm[] parms = dm.getParmManager().getDisplayedParms();
|
||||
ParmID topoId = dm.getTopoManager().getCompositeParmID();
|
||||
for (Parm p : parms) {
|
||||
if (p.getParmID().equals(topoId)) {
|
||||
topoDisplayed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
final boolean checked = topoDisplayed;
|
||||
VizApp.runAsync(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
element.setChecked(checked);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -68,6 +68,7 @@ import com.vividsolutions.jts.geom.MultiPolygon;
|
|||
* Jan 30, 2013 #15719 jdynina Allowed more than 128 chars in wx
|
||||
* strings
|
||||
* 02/19/2013 1637 randerso Added throws declarations to translateDataFrom
|
||||
* 04/01/2014 17187 randerso (code checked in by zhao) To allow over 128 wx lements
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -902,19 +903,19 @@ public class WeatherGridData extends AbstractGridData implements INumpyable {
|
|||
}
|
||||
}
|
||||
}
|
||||
// COMBINE mode is more difficult, have to do each one
|
||||
else {
|
||||
for (int i = 0; i < dim.x; i++) {
|
||||
for (int j = 0; j < dim.y; j++) {
|
||||
if (points.get(i, j) == 1) {
|
||||
WeatherKey combined = new WeatherKey(key.get(values
|
||||
.get(i, j)));
|
||||
combined.addAll(doGetWeatherValue(i, j));
|
||||
grid.set(i, j, lookupKeyValue(combined));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// COMBINE mode is more difficult, have to do each one
|
||||
else {
|
||||
for (int i = 0; i < dim.x; i++) {
|
||||
for (int j = 0; j < dim.y; j++) {
|
||||
if (points.get(i, j) == 1) {
|
||||
WeatherKey combined = new WeatherKey(
|
||||
key.get(0xFF & values.get(i, j)));
|
||||
combined.addAll(doGetWeatherValue(i, j));
|
||||
grid.set(i, j, lookupKeyValue(combined));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
setGrid(grid);
|
||||
}
|
||||
|
|
|
@ -26,6 +26,8 @@ import java.util.List;
|
|||
import java.util.Set;
|
||||
|
||||
import org.eclipse.swt.graphics.RGB;
|
||||
import org.eclipse.ui.PlatformUI;
|
||||
import org.eclipse.ui.commands.ICommandService;
|
||||
import org.geotools.coverage.grid.GridGeometry2D;
|
||||
import org.geotools.geometry.GeneralEnvelope;
|
||||
import org.opengis.geometry.Envelope;
|
||||
|
@ -48,6 +50,7 @@ import com.raytheon.uf.viz.core.rsc.capabilities.ColorableCapability;
|
|||
import com.raytheon.viz.core.ColorUtil;
|
||||
import com.raytheon.viz.gfe.Activator;
|
||||
import com.raytheon.viz.gfe.PythonPreferenceStore;
|
||||
import com.raytheon.viz.gfe.actions.TopoHandler;
|
||||
import com.raytheon.viz.gfe.core.DataManager;
|
||||
import com.raytheon.viz.gfe.core.IParmManager;
|
||||
import com.raytheon.viz.gfe.core.ISampleSetManager;
|
||||
|
@ -80,6 +83,7 @@ import com.raytheon.viz.ui.editor.AbstractEditor;
|
|||
* 08/20/2009 2310 njensen Separated most logic out into AbstractSpatialDisplayManager
|
||||
* 04/02/2014 2961 randerso Added a listener to redo time matching when ISC mode changes
|
||||
*
|
||||
* 04/02/2014 2969 randerso Fix state of Topography menu item
|
||||
* </pre>
|
||||
*
|
||||
* @author chammack
|
||||
|
@ -367,6 +371,11 @@ public class GFESpatialDisplayManager extends AbstractSpatialDisplayManager
|
|||
createResourceFromParm(desc, addParm, false);
|
||||
}
|
||||
}
|
||||
if (PlatformUI.isWorkbenchRunning()) {
|
||||
ICommandService service = (ICommandService) PlatformUI
|
||||
.getWorkbench().getService(ICommandService.class);
|
||||
service.refreshElements(TopoHandler.commandId, null);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -140,6 +140,7 @@ import com.raytheon.viz.gfe.types.MutableInteger;
|
|||
* 11/21/2013 #2331 randerso Merge with AbstractParmManager and deleted MockParmManager
|
||||
* to simplify maintenance of this class.
|
||||
* Changed handling of enabling/disabling Topo parm
|
||||
* 04/02/2014 #2969 randerso Fix error when Toop parm is unloaded.
|
||||
* </pre>
|
||||
*
|
||||
* @author chammack
|
||||
|
@ -780,7 +781,9 @@ public class ParmManager implements IParmManager, IMessageClient {
|
|||
parmIDs.addAll(Arrays.asList(vcParms));
|
||||
} else if ((cacheParmIDs == null)
|
||||
&& (!dbID.getDbType().equals("V"))) {
|
||||
uncachedDbs.add(dbID);
|
||||
if (this.availableServerDatabases.contains(dbID)) {
|
||||
uncachedDbs.add(dbID);
|
||||
}
|
||||
} else {
|
||||
parmIDs.addAll(cacheParmIDs);
|
||||
|
||||
|
|
|
@ -156,6 +156,7 @@ import com.raytheon.viz.ui.dialogs.ICloseCallback;
|
|||
* update VTEC lines on products that
|
||||
* aren't being corrected.
|
||||
* 02/05/2014 17022 ryu Modified loadDraft() to fix merging of WMO heading and AWIPS ID.
|
||||
* 03/25/2014 #2884 randerso Added xxxid to check for disabling editor
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -2728,20 +2729,31 @@ public class ProductEditorComp extends Composite implements
|
|||
&& !msg.getMode().equals(ActiveTableMode.PRACTICE)) {
|
||||
return;
|
||||
}
|
||||
List<String> pils = VTECTableChangeNotification.DisableTable.get(pil);
|
||||
String brained = null;
|
||||
boolean allFound = false;
|
||||
String sid = getDefString("fullStationID");
|
||||
String pil = getDefString("pil");
|
||||
if (pil != null) {
|
||||
pil = pil.substring(0, 3);
|
||||
String pilxxx = getDefString("pil");
|
||||
String pil = null;
|
||||
if (pilxxx != null) {
|
||||
pil = pilxxx.substring(0, 3);
|
||||
List<String> pils = VTECTableChangeNotification.DisableTable
|
||||
.get(pil);
|
||||
|
||||
// append xxxId to pil for matching
|
||||
if (pils != null) {
|
||||
String xxxId = pilxxx.substring(3, pilxxx.length());
|
||||
for (int i = 0; i < pils.size(); i++) {
|
||||
pils.set(i, pils.get(i) + xxxId);
|
||||
}
|
||||
}
|
||||
|
||||
for (VTECChange m : msg.getChanges()) {
|
||||
if (m.getSite().equals("*ALL") || m.getPil().equals("*ALL*")) {
|
||||
allFound = true;
|
||||
}
|
||||
String msgPilxxx = m.getPil() + m.getXxxid();
|
||||
if (m.getSite().equals(sid)) {
|
||||
if ((pils == null) && m.getPil().equals(pil)) {
|
||||
if ((pils == null) && msgPilxxx.equals(pilxxx)) {
|
||||
if (brain()) {
|
||||
brained = m.getPil();
|
||||
}
|
||||
|
|
|
@ -116,6 +116,7 @@ import com.raytheon.uf.common.time.TimeRange;
|
|||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* May 11, 2011 dgilling Initial creation
|
||||
* 04/08/2014 DR 17187 randerson (code checked in by zhao)
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -451,7 +452,7 @@ public class WeatherInterp extends Interp {
|
|||
// are already set to 0.
|
||||
|
||||
// get its value
|
||||
key = keys1[index];
|
||||
key = keys1[0xFF & index];
|
||||
|
||||
// find this key in the new list, and save the corresponding
|
||||
// index
|
||||
|
@ -466,7 +467,7 @@ public class WeatherInterp extends Interp {
|
|||
// bytes
|
||||
index = grid2.get(i, j);
|
||||
// get its key
|
||||
key = keys2[index];
|
||||
key = keys2[0xFF & index];
|
||||
// find this key in the new list, and save the corresponding
|
||||
// index
|
||||
for (int k = 0; k < _allKeys.size(); k++) {
|
||||
|
|
|
@ -74,12 +74,15 @@ import com.raytheon.viz.grid.record.RequestableDataRecord;
|
|||
* <pre>
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Mar 16, 2009 brockwoo Initial creation
|
||||
* Nov 21, 2009 3576 rjpeter Refactored use of DerivParamDesc.
|
||||
* Jun 04, 2013 2041 bsteffen Improve exception handing in grid
|
||||
* resources.
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------- -------- ----------- --------------------------
|
||||
* Mar 16, 2009 brockwoo Initial creation
|
||||
* Nov 21, 2009 3576 rjpeter Refactored use of DerivParamDesc.
|
||||
* Jun 04, 2013 2041 bsteffen Improve exception handing in grid
|
||||
* resources.
|
||||
* Apr 04, 2014 2973 bsteffen Use correct area for expanding subgrid
|
||||
* requests.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author brockwoo
|
||||
|
@ -295,7 +298,6 @@ public class GridDataCubeAdapter extends AbstractDataCubeAdapter {
|
|||
continue;
|
||||
}
|
||||
GridRecord record = data.getGridSource();
|
||||
area = record.getLocation();
|
||||
String file = HDF5Util.findHDF5Location(record).getPath();
|
||||
if (file != null) {
|
||||
List<GridRequestableData> list = fileMap.get(file);
|
||||
|
|
|
@ -83,6 +83,7 @@ import com.raytheon.viz.radar.util.StationUtils;
|
|||
* ------------ ---------- ----------- --------------------------
|
||||
* Mar 23, 2010 #4473 rjpeter Initial creation
|
||||
* Feb 21, 2014 DR 16744 D. Friedman Add getUpdateConstraints
|
||||
* Apr 1, 2014 DR 17220 D. Friedman Handle uninitialized grid inventory
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -404,6 +405,11 @@ public class RadarAdapter {
|
|||
}
|
||||
|
||||
public Map<String, RequestConstraint> getUpdateConstraints() {
|
||||
RadarStation radarStation = getConfiguredRadar();
|
||||
if (radarStation == null) {
|
||||
// Can happen if grid inventory has not been initialized
|
||||
return null;
|
||||
}
|
||||
RadarProductCodeMapping rpcMap = RadarProductCodeMapping.getInstance();
|
||||
HashSet<Integer> productCodes = new HashSet<Integer>();
|
||||
for (String abbrev : rpcMap.getParameterAbbrevs()) {
|
||||
|
@ -412,8 +418,8 @@ public class RadarAdapter {
|
|||
Map<String, RequestConstraint> rcMap = new HashMap<String, RequestConstraint>();
|
||||
rcMap.put(RadarAdapter.PLUGIN_NAME_QUERY, new RequestConstraint(
|
||||
RADAR_SOURCE));
|
||||
rcMap.put(ICAO_QUERY, new RequestConstraint(getConfiguredRadar()
|
||||
.getRdaId().toLowerCase()));
|
||||
rcMap.put(ICAO_QUERY, new RequestConstraint(radarStation.getRdaId()
|
||||
.toLowerCase()));
|
||||
rcMap.put(
|
||||
PRODUCT_CODE_QUERY,
|
||||
new RequestConstraint(Arrays.toString(new ArrayList<Integer>(
|
||||
|
|
|
@ -69,7 +69,9 @@ import com.raytheon.viz.mpe.ui.radartable.ReadBiasTableParam;
|
|||
* Jul 14, 2009 snaples Initial creation
|
||||
* Jun 18, 2013 16053 snaples Removed reference to setRadarEditFlag
|
||||
* Aug 06, 2013 16243 Changed the Gui to a ScrolledComposite.
|
||||
* Feb 2, 2014 16201 snaples Added saved data flag support
|
||||
* Feb 2, 2014 16201 snaples Added saved data flag support
|
||||
* Apr 4, 2014 17223 snaples Updated other_office_id and rfc_bias to object
|
||||
* array so that called procedure can update and return values properly.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -469,18 +471,22 @@ public class RadarBiasTableDialog extends Dialog {
|
|||
}
|
||||
bcoefLbl.setText(bbias);
|
||||
bcoefLbl.setLayoutData(gd);
|
||||
|
||||
|
||||
String[] oid = new String[1];
|
||||
String office_id = "";
|
||||
float other_bias_value = 0;
|
||||
oid[0] = office_id;
|
||||
Float[] obias_value = new Float[1];
|
||||
Float other_bias_value = 0.00f;
|
||||
obias_value[0] = other_bias_value;
|
||||
int bias_found = ReadBiasTableParam.get_rfc_bias_value(rid,
|
||||
office_id, other_bias_value);
|
||||
oid, obias_value);
|
||||
|
||||
if (bias_found == 0) {
|
||||
obias = "N/A";
|
||||
ooffice = "N/A";
|
||||
} else {
|
||||
obias = String.format("%-1.2f", other_bias_value);
|
||||
ooffice = office_id;
|
||||
obias = String.format("%-1.2f", obias_value[0]);
|
||||
ooffice = oid[0];
|
||||
}
|
||||
gd = new GridData(SWT.FILL, SWT.CENTER, true, true);
|
||||
Label obiasLbl = new Label(biasListComp, SWT.CENTER);
|
||||
|
|
|
@ -43,6 +43,7 @@ import com.raytheon.viz.mpe.ui.dialogs.RadarBiasTableDialog;
|
|||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Jul 15, 2009 snaples Initial creation
|
||||
* Apr 04, 2014 17223 snaples Updated get_rfc_bias to properly update and return values to calling procedure.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -161,8 +162,8 @@ public class ReadBiasTableParam {
|
|||
return coefs;
|
||||
}
|
||||
|
||||
public static int get_rfc_bias_value(String rid, String office_id,
|
||||
float pBias) {
|
||||
public static int get_rfc_bias_value(String rid, String[] oid,
|
||||
Float[] pBias) {
|
||||
String pFxaLocalSite = appsDefaults.getToken("fxa_local_site");
|
||||
String where = "";
|
||||
int bias_found = 0;
|
||||
|
@ -174,7 +175,6 @@ public class ReadBiasTableParam {
|
|||
String pRadarLoc = "";
|
||||
Rwbiasstat pRWBiasStat = new Rwbiasstat();
|
||||
Rwbiasdyn pRWBiasDynNode = new Rwbiasdyn();
|
||||
|
||||
length = pFxaLocalSite.length();
|
||||
|
||||
if (length > 0) {
|
||||
|
@ -219,8 +219,8 @@ public class ReadBiasTableParam {
|
|||
* this does not exist, then set the bias to 1.
|
||||
*/
|
||||
bias_found = 1;
|
||||
pBias = 1.00f;
|
||||
office_id = pRadarLoc;
|
||||
pBias[0] = 1.00f;
|
||||
oid[0] = pRadarLoc;
|
||||
|
||||
ListIterator<Rwbiasdyn> li = pRWBiasDynList
|
||||
.listIterator();
|
||||
|
@ -230,7 +230,7 @@ public class ReadBiasTableParam {
|
|||
|
||||
if (pRWBiasDynNode.getNumpairs() >= pRWBiasStat
|
||||
.getNpairBiasSelect()) {
|
||||
pBias = pRWBiasDynNode.getBias();
|
||||
pBias[0] = pRWBiasDynNode.getBias();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -311,9 +311,11 @@ public class ListSelectionDlg extends CaveSWTDialog {
|
|||
*/
|
||||
private void action() {
|
||||
|
||||
int choice = displayConfirmationBox();
|
||||
if (choice == SWT.CANCEL) {
|
||||
return;
|
||||
if (selectList.getSelectionCount() == 0) {
|
||||
int choice = displayConfirmationBox();
|
||||
if (choice == SWT.CANCEL) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (returnAsArray == ReturnArray.ARRAY_STRING_ITEMS) {
|
||||
|
|
|
@ -60,6 +60,8 @@
|
|||
<vbSource key="AKWAVE239" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="AKwave10" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="AKwave4" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="AKHwave10" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="AKHwave4" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="BHPE" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="CPCoutlook211" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="DHM" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
|
@ -70,6 +72,7 @@
|
|||
<vbSource key="GFSLAMPTstorm" name="GFSLAMP-Grid" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="GLERL" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="GlobalWave" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="GLOBHwave" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="GRLKwave" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="MOSGuide" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="HurWind175" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
|
@ -86,7 +89,13 @@
|
|||
<vbSource key="MSAS" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="NamDNG" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="ETA212" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="NAHwave15" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="NAHwave10" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="NAHwave4" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="NICICE" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="NPHwave15" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="NPHwave10" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="NPHwave4" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="OPCWave181" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="OPCWave182" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="OPCWave180" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
|
@ -97,21 +106,36 @@
|
|||
<vbSource key="RTGSST" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTGSSTHR" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTMA" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-GulfMexico" category="SfcGrid/RTOFS" subCategory="Atlantic" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-GulfStream" category="SfcGrid/RTOFS" subCategory="Atlantic" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-GulfMaine" category="SfcGrid/RTOFS" subCategory="Atlantic" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-Atlantic" category="SfcGrid/RTOFS" subCategory="Atlantic" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-Alaska" category="SfcGrid/RTOFS" subCategory="Global" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-Arctic" category="SfcGrid/RTOFS" subCategory="Global" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-Bering" category="SfcGrid/RTOFS" subCategory="Global" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-Guam" category="SfcGrid/RTOFS" subCategory="Global" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-GulfAlaska" category="SfcGrid/RTOFS" subCategory="Global" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-Honolulu" category="SfcGrid/RTOFS" subCategory="Global" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-HudsonBaffin" category="SfcGrid/RTOFS" subCategory="Global" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-Samoa" category="SfcGrid/RTOFS" subCategory="Global" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-TropPaciLowres" category="SfcGrid/RTOFS" subCategory="Global" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-WestAtl" category="SfcGrid/RTOFS" subCategory="Global" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-WestConus" category="SfcGrid/RTOFS" subCategory="Global" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-GulfMexico" category="SfcGrid/RTOFS/forecast" subCategory="Atlantic" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-GulfStream" category="SfcGrid/RTOFS/forecast" subCategory="Atlantic" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-GulfMaine" category="SfcGrid/RTOFS/forecast" subCategory="Atlantic" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-Atlantic" category="SfcGrid/RTOFS/forecast" subCategory="Atlantic" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-Alaska" category="SfcGrid/RTOFS/forecast" subCategory="Global" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-Arctic" category="SfcGrid/RTOFS/forecast" subCategory="Global" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-Bering" category="SfcGrid/RTOFS/forecast" subCategory="Global" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-Guam" category="SfcGrid/RTOFS/forecast" subCategory="Global" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-GulfAlaska" category="SfcGrid/RTOFS/forecast" subCategory="Global" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-Honolulu" category="SfcGrid/RTOFS/forecast" subCategory="Global" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-HudsonBaffin" category="SfcGrid/RTOFS/forecast" subCategory="Global" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-Samoa" category="SfcGrid/RTOFS/forecast" subCategory="Global" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-TropPaciLowres" category="SfcGrid/RTOFS/forecast" subCategory="Global" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-WestAtl" category="SfcGrid/RTOFS/forecast" subCategory="Global" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-WestConus" category="SfcGrid/RTOFS/forecast" subCategory="Global" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-Now-GulfMexico" category="SfcGrid/RTOFS/nowcast" subCategory="Atlantic" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-Now-GulfStream" category="SfcGrid/RTOFS/nowcast" subCategory="Atlantic" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-Now-GulfMaine" category="SfcGrid/RTOFS/nowcast" subCategory="Atlantic" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-Now-Atlantic" category="SfcGrid/RTOFS/nowcast" subCategory="Atlantic" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-Now-Alaska" category="SfcGrid/RTOFS/nowcast" subCategory="Global" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-Now-Arctic" category="SfcGrid/RTOFS/nowcast" subCategory="Global" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-Now-Bering" category="SfcGrid/RTOFS/nowcast" subCategory="Global" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-Now-Guam" category="SfcGrid/RTOFS/nowcast" subCategory="Global" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-Now-GulfAlaska" category="SfcGrid/RTOFS/nowcast" subCategory="Global" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-Now-Honolulu" category="SfcGrid/RTOFS/nowcast" subCategory="Global" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-Now-HudsonBaffin" category="SfcGrid/RTOFS/nowcast" subCategory="Global" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-Now-Samoa" category="SfcGrid/RTOFS/nowcast" subCategory="Global" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-Now-TropPaciLowres" category="SfcGrid/RTOFS/nowcast" subCategory="Global" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-Now-WestAtl" category="SfcGrid/RTOFS/nowcast" subCategory="Global" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="RTOFS-Now-WestConus" category="SfcGrid/RTOFS/nowcast" subCategory="Global" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="SeaIce" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="SPCGuide" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="HurWind226" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
|
@ -123,6 +147,7 @@
|
|||
<vbSource key="WNAWAVE238" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="WNAwave10" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="WNAwave4" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="WPHwave10" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="bufrmosLAMP" name="GFSLAMP-Stn" category="Point"
|
||||
views="TIMESERIES" />
|
||||
<vbSource key="Ldad" category="Point" views="TIMESERIES" />
|
||||
|
@ -149,4 +174,4 @@
|
|||
subCategory="Column" />
|
||||
<vbSource key="radarVWP" name="VWP" category="Point"
|
||||
subCategory="Column" views="CROSSSECTION TIMEHEIGHT VARVSHGT SOUNDING TIMESERIES" />
|
||||
</vbSourceList>
|
||||
</vbSourceList>
|
||||
|
|
|
@ -2,7 +2,7 @@ Manifest-Version: 1.0
|
|||
Bundle-ManifestVersion: 2
|
||||
Bundle-Name: JOGL Win64 Specific Fragment
|
||||
Bundle-SymbolicName: javax.media.opengl.win64
|
||||
Bundle-Version: 1.14.0
|
||||
Bundle-Version: 1.14.0.qualifier
|
||||
Fragment-Host: javax.media.opengl;bundle-version="1.1.1"
|
||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
|
||||
Eclipse-PlatformFilter: (& (osgi.os=win32) (osgi.arch=x86_64))
|
||||
|
|
|
@ -2,7 +2,7 @@ Manifest-Version: 1.0
|
|||
Bundle-ManifestVersion: 2
|
||||
Bundle-Name: Windows 64-bit Jep Library
|
||||
Bundle-SymbolicName: org.jep.win64
|
||||
Bundle-Version: 1.14.0
|
||||
Bundle-Version: 1.14.0.qualifier
|
||||
Fragment-Host: org.jep;bundle-version="2.3.0"
|
||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
|
||||
Eclipse-PlatformFilter: (& (osgi.os=win32) (osgi.arch=x86_64))
|
||||
|
|
|
@ -1,26 +1,66 @@
|
|||
delete from ebxml.taxonomyelementtype_classificationnode where classificationnode_id='urn:oasis:names:tc:ebxml-regrep:QueryLanguage:SPARQL';
|
||||
delete from ebxml.classificationnode where id= 'urn:oasis:names:tc:ebxml-regrep:QueryLanguage:SPARQL';
|
||||
CREATE FUNCTION taxonomyelementtype_classificationnode_update() RETURNS void AS $$
|
||||
DECLARE
|
||||
t bool;
|
||||
BEGIN
|
||||
SELECT EXISTS(
|
||||
SELECT * FROM information_schema.tables
|
||||
WHERE
|
||||
table_schema = 'ebxml' AND
|
||||
table_name = 'taxonomyelementtype_classificationnode'
|
||||
) into t;
|
||||
IF
|
||||
t ='t'
|
||||
THEN
|
||||
delete from ebxml.taxonomyelementtype_classificationnode where classificationnode_id='urn:oasis:names:tc:ebxml-regrep:QueryLanguage:SPARQL';
|
||||
delete from ebxml.taxonomyelementtype_classificationnode where classificationnode_id='urn:oasis:names:tc:ebxml-regrep:QueryLanguage:SQL-92';
|
||||
delete from ebxml.taxonomyelementtype_classificationnode where classificationnode_id='urn:oasis:names:tc:ebxml-regrep:QueryLanguage:XQuery';
|
||||
delete from ebxml.taxonomyelementtype_classificationnode where classificationnode_id='urn:oasis:names:tc:ebxml-regrep:QueryLanguage:EJBQL';
|
||||
delete from ebxml.taxonomyelementtype_classificationnode where classificationnode_id='urn:oasis:names:tc:ebxml-regrep:query:ExportObject';
|
||||
delete from ebxml.taxonomyelementtype_classificationnode where classificationnode_id='urn:oasis:names:tc:ebxml-regrep:query:FindAllMyObjects';
|
||||
delete from ebxml.taxonomyelementtype_classificationnode where classificationnode_id='urn:oasis:names:tc:ebxml-regrep:query:ExtrinsicObjectQuery';
|
||||
INSERT INTO ebxml.taxonomyelementtype_classificationnode(taxonomyelementtype_id,classificationnode_id)
|
||||
VALUES('urn:oasis:names:tc:ebxml-regrep:classificationScheme:QueryLanguage','urn:oasis:names:tc:ebxml-regrep:QueryLanguage:HQL');
|
||||
RAISE NOTICE 'updated ebxml.taxonomyelementtype_classificationnode table, success!';
|
||||
ELSE
|
||||
RAISE NOTICE 'Table ebxml.taxonomyelementtype_classificationnode does not exist, skipping!';
|
||||
END IF;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
delete from ebxml.taxonomyelementtype_classificationnode where classificationnode_id='urn:oasis:names:tc:ebxml-regrep:QueryLanguage:SQL-92';
|
||||
delete from ebxml.classificationnode where id= 'urn:oasis:names:tc:ebxml-regrep:QueryLanguage:SQL-92';
|
||||
CREATE FUNCTION classificationnode_update() RETURNS void AS $$
|
||||
DECLARE
|
||||
t bool;
|
||||
BEGIN
|
||||
SELECT EXISTS(
|
||||
SELECT * FROM information_schema.tables
|
||||
WHERE
|
||||
table_schema = 'ebxml' AND
|
||||
table_name = 'classificationnode'
|
||||
) into t;
|
||||
IF
|
||||
t ='t'
|
||||
THEN
|
||||
delete from where id= 'urn:oasis:names:tc:ebxml-regrep:QueryLanguage:SPARQL';
|
||||
delete from ebxml.classificationnode where id= 'urn:oasis:names:tc:ebxml-regrep:QueryLanguage:SQL-92';
|
||||
delete from ebxml.classificationnode where id= 'urn:oasis:names:tc:ebxml-regrep:QueryLanguage:XQuery';
|
||||
delete from ebxml.classificationnode where id= 'urn:oasis:names:tc:ebxml-regrep:QueryLanguage:EJBQL';
|
||||
delete from ebxml.classificationnode where id= 'urn:oasis:names:tc:ebxml-regrep:query:ExportObject';
|
||||
delete from ebxml.classificationnode where id= 'urn:oasis:names:tc:ebxml-regrep:query:FindAllMyObjects';
|
||||
delete from ebxml.classificationnode where id= 'urn:oasis:names:tc:ebxml-regrep:query:ExtrinsicObjectQuery';
|
||||
INSERT INTO ebxml.classificationnode (id,lid,objecttype,owner,versionname,code,parent,path)
|
||||
VALUES ('urn:oasis:names:tc:ebxml-regrep:QueryLanguage:HQL','urn:oasis:names:tc:ebxml-regrep:QueryLanguage:HQL',
|
||||
'urn:oasis:names:tc:ebxml-regrep:ObjectType:RegistryObject:ClassificationNode','NCF','1','HQL',
|
||||
'urn:oasis:names:tc:ebxml-regrep:classificationScheme:QueryLanguage','/urn:oasis:names:tc:ebxml-regrep:classificationScheme:QueryLanguage/HQL');
|
||||
RAISE NOTICE 'updated ebxml.classificationnode table, success!';
|
||||
ELSE
|
||||
RAISE NOTICE 'Table ebxml.classificationnode does not exist, skipping!';
|
||||
END IF;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
delete from ebxml.taxonomyelementtype_classificationnode where classificationnode_id='urn:oasis:names:tc:ebxml-regrep:QueryLanguage:XQuery';
|
||||
delete from ebxml.classificationnode where id= 'urn:oasis:names:tc:ebxml-regrep:QueryLanguage:XQuery';
|
||||
select taxonomyelementtype_classificationnode_update();
|
||||
select classificationnode_update();
|
||||
|
||||
delete from ebxml.taxonomyelementtype_classificationnode where classificationnode_id='urn:oasis:names:tc:ebxml-regrep:QueryLanguage:EJBQL';
|
||||
delete from ebxml.classificationnode where id= 'urn:oasis:names:tc:ebxml-regrep:QueryLanguage:EJBQL';
|
||||
DROP FUNCTION taxonomyelementtype_classificationnode_update();
|
||||
DROP FUNCTION classificationnode_update();
|
||||
|
||||
INSERT INTO ebxml.classificationnode (id,lid,objecttype,owner,versionname,code,parent,path) VALUES
|
||||
('urn:oasis:names:tc:ebxml-regrep:QueryLanguage:HQL','urn:oasis:names:tc:ebxml-regrep:QueryLanguage:HQL',
|
||||
'urn:oasis:names:tc:ebxml-regrep:ObjectType:RegistryObject:ClassificationNode','NCF','1','HQL',
|
||||
'urn:oasis:names:tc:ebxml-regrep:classificationScheme:QueryLanguage','/urn:oasis:names:tc:ebxml-regrep:classificationScheme:QueryLanguage/HQL');
|
||||
INSERT INTO ebxml.taxonomyelementtype_classificationnode(taxonomyelementtype_id,classificationnode_id) VALUES('urn:oasis:names:tc:ebxml-regrep:classificationScheme:QueryLanguage','urn:oasis:names:tc:ebxml-regrep:QueryLanguage:HQL');
|
||||
|
||||
delete from ebxml.taxonomyelementtype_classificationnode where classificationnode_id='urn:oasis:names:tc:ebxml-regrep:query:ExportObject';
|
||||
delete from ebxml.classificationnode where id= 'urn:oasis:names:tc:ebxml-regrep:query:ExportObject';
|
||||
|
||||
delete from ebxml.taxonomyelementtype_classificationnode where classificationnode_id='urn:oasis:names:tc:ebxml-regrep:query:FindAllMyObjects';
|
||||
delete from ebxml.classificationnode where id= 'urn:oasis:names:tc:ebxml-regrep:query:FindAllMyObjects';
|
||||
|
||||
delete from ebxml.taxonomyelementtype_classificationnode where classificationnode_id='urn:oasis:names:tc:ebxml-regrep:query:ExtrinsicObjectQuery';
|
||||
delete from ebxml.classificationnode where id= 'urn:oasis:names:tc:ebxml-regrep:query:ExtrinsicObjectQuery';
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
alter table madis drop constraint madis_location_reftime_provider_subprovider_restriction_key;
|
||||
alter table if exists madis drop constraint madis_location_reftime_provider_subprovider_restriction_key;
|
||||
alter table if exists madis add CONSTRAINT madis_latitude_longitude_stationid_reftime_provider_subprovider UNIQUE (latitude, longitude, stationid, reftime, provider, subprovider, restriction)
|
||||
|
||||
alter table madis add constraint madis_location_stationid_reftime_provider_subprovider_restr_key UNIQUE (location, stationid, reftime, provider, subprovider, restriction)
|
||||
|
|
|
@ -53,7 +53,6 @@ for f in $files; do
|
|||
fi
|
||||
else
|
||||
echo "ERROR: Problem updating file $f"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
|
|
|
@ -38,6 +38,22 @@
|
|||
<appender-ref ref="ProductSrvRequestLog" />
|
||||
</appender>
|
||||
|
||||
<!-- TextDBSrvRequest log -->
|
||||
<appender name="TextDBSrvRequestLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>${edex.home}/logs/edex-request-textdbSrvRequest-%d{yyyyMMdd}.log</fileNamePattern>
|
||||
<maxHistory>30</maxHistory>
|
||||
</rollingPolicy>
|
||||
|
||||
<encoder>
|
||||
<pattern>%-5p %d [%t] %c{0}: %m%n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<appender name="TextDBSrvRequestLogAsync" class="ch.qos.logback.classic.AsyncAppender">
|
||||
<appender-ref ref="TextDBSrvRequestLog" />
|
||||
</appender>
|
||||
|
||||
<!-- ThriftSrv (RemoteRequestRouteWrapper) request log -->
|
||||
<appender name="ThriftSrvRequestLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
|
@ -73,6 +89,11 @@
|
|||
<appender-ref ref="ProductSrvRequestLogAsync"/>
|
||||
</logger>
|
||||
|
||||
<logger name="TextDBSrvRequestLogger" additivity="false">
|
||||
<level value="DEBUG"/>
|
||||
<appender-ref ref="TextDBSrvRequestLogAsync"/>
|
||||
</logger>
|
||||
|
||||
<logger name="ThriftSrvRequestLogger" additivity="false">
|
||||
<level value="Info"/>
|
||||
<appender-ref ref="ThriftSrvRequestLogAsync" />
|
||||
|
|
|
@ -12,15 +12,8 @@
|
|||
<tx:annotation-driven transaction-manager="metadataTxManager"
|
||||
proxy-target-class="true" />
|
||||
|
||||
<!-- The db class finder will search the packages listed for classes with @Entity or @Embeddable -->
|
||||
<bean id="dbClassFinder" class="com.raytheon.uf.edex.database.DatabaseClassAnnotationFinder" >
|
||||
<constructor-arg>
|
||||
<list>
|
||||
<value>com.raytheon</value>
|
||||
<value>gov.noaa</value>
|
||||
</list>
|
||||
</constructor-arg>
|
||||
</bean>
|
||||
<!-- The db class finder will search the plugin dir for classes with @Entity or @Embeddable -->
|
||||
<bean id="dbClassFinder" class="com.raytheon.uf.edex.database.DatabaseClassAnnotationFinder" />
|
||||
|
||||
<bean id="metadataDbSessionConfig"
|
||||
class="com.raytheon.uf.edex.database.DatabaseSessionConfiguration">
|
||||
|
|
|
@ -20,21 +20,26 @@
|
|||
package com.raytheon.edex.plugin.gfe.server.notify;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import com.raytheon.uf.common.activetable.ActiveTableMode;
|
||||
import com.raytheon.uf.common.activetable.VTECChange;
|
||||
import com.raytheon.uf.common.activetable.VTECTableChangeNotification;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.textproduct.DraftProduct;
|
||||
import com.raytheon.uf.common.localization.FileUpdatedMessage;
|
||||
import com.raytheon.uf.common.localization.FileUpdatedMessage.FileChangeType;
|
||||
import com.raytheon.uf.common.localization.IPathManager;
|
||||
import com.raytheon.uf.common.localization.LocalizationContext;
|
||||
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationLevel;
|
||||
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationType;
|
||||
import com.raytheon.uf.common.localization.LocalizationFile;
|
||||
import com.raytheon.uf.common.localization.PathManagerFactory;
|
||||
import com.raytheon.uf.common.site.SiteMap;
|
||||
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.raytheon.uf.edex.core.EdexException;
|
||||
|
||||
/**
|
||||
* Listener to handle VTEC Table Change notifications
|
||||
|
@ -45,7 +50,11 @@ import com.raytheon.uf.common.util.FileUtil;
|
|||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Jun 5, 2012 randerso Initial creation
|
||||
* Jun 5, 2012 randerso Initial creation
|
||||
* Mar 25, 2014 #2884 randerso Added xxxid to check for disabling drafts
|
||||
* Fixed to work with sites other than the EDEX site
|
||||
* Added work around to Localization not sending
|
||||
* FileUpdatedMessages on EDEX
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -65,23 +74,32 @@ public class VTECTableChangeListener {
|
|||
}
|
||||
|
||||
private void checkDrafts(ActiveTableMode tableName, VTECChange change) {
|
||||
String siteid = change.getSite();
|
||||
String officeId = change.getSite();
|
||||
String pil = change.getPil();
|
||||
String xxxid = change.getXxxid();
|
||||
String awipspil = officeId + pil + xxxid; // the KKKKCCCXXX
|
||||
|
||||
statusHandler.handle(Priority.EVENTA, "checkDrafts: " + tableName + ":"
|
||||
+ siteid + ":" + pil);
|
||||
+ awipspil);
|
||||
String mode = "Standard";
|
||||
if (tableName.equals(ActiveTableMode.PRACTICE)) {
|
||||
mode = "PRACTICE";
|
||||
}
|
||||
String awipspil = siteid + pil; // only the KKKKCCC
|
||||
|
||||
Set<String> siteList = SiteMap.getInstance()
|
||||
.getSite3LetterIds(officeId);
|
||||
|
||||
IPathManager pathMgr = PathManagerFactory.getPathManager();
|
||||
LocalizationContext siteContext = pathMgr.getContext(
|
||||
LocalizationType.CAVE_STATIC, LocalizationLevel.SITE);
|
||||
LocalizationContext[] contexts = new LocalizationContext[siteList
|
||||
.size()];
|
||||
int i = 0;
|
||||
for (String siteId : siteList) {
|
||||
contexts[i++] = pathMgr.getContextForSite(
|
||||
LocalizationType.CAVE_STATIC, siteId);
|
||||
}
|
||||
String path = FileUtil.join("gfe", "drafts");
|
||||
LocalizationFile[] inv = pathMgr.listFiles(siteContext, path, null,
|
||||
false, true);
|
||||
LocalizationFile[] inv = pathMgr.listFiles(contexts, path, null, false,
|
||||
true);
|
||||
|
||||
for (LocalizationFile lf : inv) {
|
||||
String[] tokens = lf.getFile().getName().split("-");
|
||||
|
@ -98,19 +116,35 @@ public class VTECTableChangeListener {
|
|||
|
||||
boolean markit = false;
|
||||
|
||||
// attempt a match for the pil in the DisableTable of related pils
|
||||
// attempt a match for the pil in the DisableTable of related
|
||||
// pils
|
||||
List<String> pils = VTECTableChangeNotification.DisableTable
|
||||
.get(pil);
|
||||
if (pils != null) {
|
||||
markit = pils.contains(fpil.substring(4, 7));
|
||||
} else if (awipspil.equals(fpil.substring(0, 7))) {
|
||||
markit = pils.contains(fpil.substring(4, 7))
|
||||
&& xxxid.equals(fpil.substring(7, fpil.length()));
|
||||
} else if (awipspil.equals(fpil)) {
|
||||
markit = true;
|
||||
} else if (siteid.equals("*ALL*")) {
|
||||
} else if (officeId.equals("*ALL*")) {
|
||||
// This is for the clear hazards GUI.
|
||||
markit = true;
|
||||
}
|
||||
|
||||
if (markit) {
|
||||
markDraft(lf);
|
||||
|
||||
// TODO: remove sending of FileUpdateMessage after DR #2768 is
|
||||
// fixed
|
||||
try {
|
||||
EDEXUtil.getMessageProducer().sendAsync(
|
||||
"utilityNotify",
|
||||
new FileUpdatedMessage(lf.getContext(), lf
|
||||
.getName(), FileChangeType.UPDATED, lf
|
||||
.getTimeStamp().getTime()));
|
||||
} catch (EdexException e) {
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
e.getLocalizedMessage(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -38,6 +38,7 @@ import com.raytheon.uf.common.localization.PathManagerFactory;
|
|||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.util.FileUtil;
|
||||
import com.raytheon.uf.edex.core.EDEXUtil;
|
||||
import com.raytheon.uf.edex.core.EdexTimerBasedThread;
|
||||
|
||||
/**
|
||||
|
@ -88,7 +89,7 @@ public class SmartInitSrv extends EdexTimerBasedThread {
|
|||
if (record != null) {
|
||||
runSmartInit(record);
|
||||
}
|
||||
} while (record != null);
|
||||
} while ((record != null) && !EDEXUtil.isShuttingDown());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -195,4 +195,14 @@
|
|||
<alias base="RTOFS-TropPaciLowres">rtofsGlobal</alias>
|
||||
<alias base="RTOFS-WestAtl">rtofsGlobal</alias>
|
||||
<alias base="RTOFS-WestConus">rtofsGlobal</alias>
|
||||
<alias base="GLOBHwave">GLOBHwave</alias>
|
||||
<alias base="AKHwave10">AKHwave10</alias>
|
||||
<alias base="AKHwave4">AKHwave4</alias>
|
||||
<alias base="WPHwave10">WPHwave10</alias>
|
||||
<alias base="NPHwave15">NPHwave15</alias>
|
||||
<alias base="NPHwave10">NPHwave10</alias>
|
||||
<alias base="NPHwave4">NPHwave4</alias>
|
||||
<alias base="NAHwave15">NAHwave15</alias>
|
||||
<alias base="NAHwave10">NAHwave10</alias>
|
||||
<alias base="NAHwave4">NAHwave4</alias>
|
||||
</aliasList>
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
May 07, 2013 #1974 randerso Removed unnecessary TPCSG_ entries (should only need TPCSG-)
|
||||
Changed TP_XXX to tpXXX for RFC total precip
|
||||
Jul 03, 2013 #2044 randerso Removed mappings from tpXXX to tp_XXX for RFCQPF
|
||||
Mar 31, 2014 #2934 dgilling Updated params for pSurge2.0/PHISH data.
|
||||
-->
|
||||
<aliasList caseSensitive="true" namespace="gfeParamName">
|
||||
<alias base="AV">av</alias>
|
||||
|
@ -308,37 +309,6 @@
|
|||
<alias base="tp6c8">tp6c8</alias>
|
||||
<alias base="TP6mean">tpmean6</alias>
|
||||
<alias base="TP6sprd">tpsprd6</alias>
|
||||
<alias base="PSurge0ftRun">PSurge0Ft</alias>
|
||||
<alias base="PSurge1ftRun">PSurge1Ft</alias>
|
||||
<alias base="PSurge4ftRun">PSurge4Ft</alias>
|
||||
<alias base="PSurge5ftRun">PSurge5Ft</alias>
|
||||
<alias base="PSurge6ftRun">PSurge6Ft</alias>
|
||||
<alias base="Surge20pctRun">Surge20Pct</alias>
|
||||
<alias base="PSurge7ftRun">PSurge7Ft</alias>
|
||||
<alias base="PSurge8ftRun">PSurge8Ft</alias>
|
||||
<alias base="PSurge9ftRun">PSurge9Ft</alias>
|
||||
<alias base="PSurge10ftRun">PSurge10Ft</alias>
|
||||
<alias base="Surge30pctRun">Surge30Pct</alias>
|
||||
<alias base="PSurge11ftRun">PSurge11Ft</alias>
|
||||
<alias base="PSurge12ftRun">PSurge12Ft</alias>
|
||||
<alias base="PSurge13ftRun">PSurge13Ft</alias>
|
||||
<alias base="Surge40pctRun">Surge40Pct</alias>
|
||||
<alias base="PSurge14ftRun">PSurge14Ft</alias>
|
||||
<alias base="PSurge15ftRun">PSurge15Ft</alias>
|
||||
<alias base="PSurge16ftRun">PSurge16Ft</alias>
|
||||
<alias base="Surge50pctRun">Surge50Pct</alias>
|
||||
<alias base="PSurge17ftRun">PSurge17Ft</alias>
|
||||
<alias base="PSurge18ftRun">PSurge18Ft</alias>
|
||||
<alias base="PSurge19ftRun">PSurge19Ft</alias>
|
||||
<alias base="PSurge20ftRun">PSurge20Ft</alias>
|
||||
<alias base="PSurge2ftRun">PSurge2Ft</alias>
|
||||
<alias base="PSurge21ftRun">PSurge21Ft</alias>
|
||||
<alias base="PSurge22ftRun">PSurge22Ft</alias>
|
||||
<alias base="PSurge23ftRun">PSurge23Ft</alias>
|
||||
<alias base="PSurge24ftRun">PSurge24Ft</alias>
|
||||
<alias base="PSurge25ftRun">PSurge25Ft</alias>
|
||||
<alias base="PSurge3ftRun">PSurge3Ft</alias>
|
||||
<alias base="Surge10pctRun">Surge10Pct</alias>
|
||||
<alias base="TP-ECMWF">tpecmwf</alias>
|
||||
<alias base="TPW">tpw</alias>
|
||||
<alias base="Tsprd">tsprd</alias>
|
||||
|
@ -373,4 +343,61 @@
|
|||
<alias base="WSsprd">wssprd</alias>
|
||||
<alias base="wxType">wx</alias>
|
||||
<alias base="zAGL">zagl</alias>
|
||||
<alias base="Surge10pctCumul">Surge10Pct</alias>
|
||||
<alias base="Surge20pctCumul">Surge20Pct</alias>
|
||||
<alias base="Surge30pctCumul">Surge30Pct</alias>
|
||||
<alias base="Surge40pctCumul">Surge40Pct</alias>
|
||||
<alias base="Surge50pctCumul">Surge50Pct</alias>
|
||||
<alias base="PSurge0ftCumul">PSurge0Ft</alias>
|
||||
<alias base="PSurge1ftCumul">PSurge1Ft</alias>
|
||||
<alias base="PSurge2ftCumul">PSurge2Ft</alias>
|
||||
<alias base="PSurge3ftCumul">PSurge3Ft</alias>
|
||||
<alias base="PSurge4ftCumul">PSurge4Ft</alias>
|
||||
<alias base="PSurge5ftCumul">PSurge5Ft</alias>
|
||||
<alias base="PSurge6ftCumul">PSurge6Ft</alias>
|
||||
<alias base="PSurge7ftCumul">PSurge7Ft</alias>
|
||||
<alias base="PSurge8ftCumul">PSurge8Ft</alias>
|
||||
<alias base="PSurge9ftCumul">PSurge9Ft</alias>
|
||||
<alias base="PSurge10ftCumul">PSurge10Ft</alias>
|
||||
<alias base="PSurge11ftCumul">PSurge11Ft</alias>
|
||||
<alias base="PSurge12ftCumul">PSurge12Ft</alias>
|
||||
<alias base="PSurge13ftCumul">PSurge13Ft</alias>
|
||||
<alias base="PSurge14ftCumul">PSurge14Ft</alias>
|
||||
<alias base="PSurge15ftCumul">PSurge15Ft</alias>
|
||||
<alias base="PSurge16ftCumul">PSurge16Ft</alias>
|
||||
<alias base="PSurge17ftCumul">PSurge17Ft</alias>
|
||||
<alias base="PSurge18ftCumul">PSurge18Ft</alias>
|
||||
<alias base="PSurge19ftCumul">PSurge19Ft</alias>
|
||||
<alias base="PSurge20ftCumul">PSurge20Ft</alias>
|
||||
<alias base="PSurge21ftCumul">PSurge21Ft</alias>
|
||||
<alias base="PSurge22ftCumul">PSurge22Ft</alias>
|
||||
<alias base="PSurge23ftCumul">PSurge23Ft</alias>
|
||||
<alias base="PSurge24ftCumul">PSurge24Ft</alias>
|
||||
<alias base="PSurge25ftCumul">PSurge25Ft</alias>
|
||||
<alias base="Surge10pct6hr">Surge10Pctincr</alias>
|
||||
<alias base="Surge20pct6hr">Surge20Pctincr</alias>
|
||||
<alias base="Surge30pct6hr">Surge30Pctincr</alias>
|
||||
<alias base="Surge40pct6hr">Surge40Pctincr</alias>
|
||||
<alias base="Surge50pct6hr">Surge50Pctincr</alias>
|
||||
<alias base="PSurge0ft6hr">PSurge0Ftincr</alias>
|
||||
<alias base="PSurge1ft6hr">PSurge1Ftincr</alias>
|
||||
<alias base="PSurge2ft6hr">PSurge2Ftincr</alias>
|
||||
<alias base="PSurge3ft6hr">PSurge3Ftincr</alias>
|
||||
<alias base="PSurge4ft6hr">PSurge4Ftincr</alias>
|
||||
<alias base="PSurge5ft6hr">PSurge5Ftincr</alias>
|
||||
<alias base="PSurge6ft6hr">PSurge6Ftincr</alias>
|
||||
<alias base="PSurge7ft6hr">PSurge7Ftincr</alias>
|
||||
<alias base="PSurge8ft6hr">PSurge8Ftincr</alias>
|
||||
<alias base="PSurge9ft6hr">PSurge9Ftincr</alias>
|
||||
<alias base="PSurge10ft6hr">PSurge10Ftincr</alias>
|
||||
<alias base="PSurge11ft6hr">PSurge11Ftincr</alias>
|
||||
<alias base="PSurge12ft6hr">PSurge12Ftincr</alias>
|
||||
<alias base="PSurge13ft6hr">PSurge13Ftincr</alias>
|
||||
<alias base="PSurge14ft6hr">PSurge14Ftincr</alias>
|
||||
<alias base="PSurge15ft6hr">PSurge15Ftincr</alias>
|
||||
<alias base="PSurge16ft6hr">PSurge16Ftincr</alias>
|
||||
<alias base="PSurge17ft6hr">PSurge17Ftincr</alias>
|
||||
<alias base="PSurge18ft6hr">PSurge18Ftincr</alias>
|
||||
<alias base="PSurge19ft6hr">PSurge19Ftincr</alias>
|
||||
<alias base="PSurge20ft6hr">PSurge20Ftincr</alias>
|
||||
</aliasList>
|
||||
|
|
|
@ -37,6 +37,8 @@
|
|||
# to get correct offsets for Alaska
|
||||
# 01/17/2014 #2719 randerso Added NHA domain
|
||||
# 02/20/2014 #2824 randerso Added log message when local override files are not found
|
||||
# 03/11/2014 #2897 dgilling Add new MHWM databases to default configuration.
|
||||
# 03/20/2014 #2418 dgilling Remove unneeded D2D source PHISH.
|
||||
#
|
||||
########################################################################
|
||||
|
||||
|
@ -1023,7 +1025,6 @@ D2DDBVERSIONS = {
|
|||
"HPCERP": 5,
|
||||
"TPCProb": 30,
|
||||
"TPCStormSurge": 1,
|
||||
"PHISH": 1,
|
||||
"CRMTopo": 1,
|
||||
"NED": 1,
|
||||
}
|
||||
|
@ -1063,7 +1064,11 @@ if SID in ALASKA_SITES:
|
|||
'RTOFS-Arctic',
|
||||
'RTOFS-Bering',
|
||||
'RTOFS-GulfAlaska',
|
||||
'RTOFS-HudsonBaffin'
|
||||
'RTOFS-HudsonBaffin',
|
||||
'NPHwave15',
|
||||
'AKHwave10',
|
||||
'AKHwave4',
|
||||
'GLOBHwave',
|
||||
]
|
||||
|
||||
# Hawaii OCONUS
|
||||
|
@ -1082,6 +1087,10 @@ elif SID == "HFO":
|
|||
('TPCWindProb', 'TPCProb'),
|
||||
('ECMWF-HiRes','ECMWFHiRes'),
|
||||
'RTOFS-Honolulu',
|
||||
'NPHwave15',
|
||||
'WPHwave10',
|
||||
'NPHwave4',
|
||||
'GLOBHwave',
|
||||
]
|
||||
|
||||
# San Juan OCONUS
|
||||
|
@ -1105,6 +1114,10 @@ elif SID == "SJU":
|
|||
('TPCWindProb', 'TPCProb'),
|
||||
('ECMWF-HiRes','ECMWFHiRes'),
|
||||
'RTOFS-Atlantic',
|
||||
'NAHwave15',
|
||||
'NAHwave10',
|
||||
'NAHwave4',
|
||||
'GLOBHwave',
|
||||
]
|
||||
|
||||
# Guam OCONUS
|
||||
|
@ -1114,7 +1127,9 @@ elif SID == "GUM":
|
|||
'GWW233',
|
||||
'GlobalWave',
|
||||
('TPCWindProb', 'TPCProb'),
|
||||
'RTOFS-Guam'
|
||||
'RTOFS-Guam',
|
||||
'WPHwave10',
|
||||
'GLOBHwave',
|
||||
]
|
||||
|
||||
#CONUS sites
|
||||
|
@ -1138,7 +1153,6 @@ elif SID in CONUS_EAST_SITES:
|
|||
'GLERL',
|
||||
'WNAWAVE238',
|
||||
('TPCSurgeProb','TPCStormSurge'), # DCS3462
|
||||
'PHISH',
|
||||
'GlobalWave',
|
||||
'EPwave10',
|
||||
'AKwave10',
|
||||
|
@ -1165,6 +1179,14 @@ elif SID in CONUS_EAST_SITES:
|
|||
('SPCGuide', 'SPC'),
|
||||
('ECMWF-HiRes','ECMWFHiRes'),
|
||||
('ENPWAVE253', 'ENPwave'),
|
||||
'NAHwave15',
|
||||
'NAHwave10',
|
||||
'NAHwave4',
|
||||
'NPHwave15',
|
||||
'NPHwave10',
|
||||
'NPHwave4',
|
||||
'WPHwave10',
|
||||
'GLOBHwave',
|
||||
]
|
||||
|
||||
else: #######DCS3501 WEST_CONUS
|
||||
|
@ -1188,7 +1210,6 @@ else: #######DCS3501 WEST_CONUS
|
|||
'GLERL',
|
||||
'WNAWAVE238',
|
||||
('TPCSurgeProb','TPCStormSurge'), # DCS3462
|
||||
'PHISH',
|
||||
'GlobalWave',
|
||||
'EPwave10',
|
||||
'WCwave10',
|
||||
|
@ -1216,6 +1237,14 @@ else: #######DCS3501 WEST_CONUS
|
|||
('SPCGuide', 'SPC'),
|
||||
('ECMWF-HiRes','ECMWFHiRes'),
|
||||
('ENPWAVE253', 'ENPwave'),
|
||||
'NAHwave15',
|
||||
'NAHwave10',
|
||||
'NAHwave4',
|
||||
'NPHwave15',
|
||||
'NPHwave10',
|
||||
'NPHwave4',
|
||||
'WPHwave10',
|
||||
'GLOBHwave',
|
||||
]
|
||||
|
||||
if SID in GreatLake_SITES:
|
||||
|
|
|
@ -87,6 +87,7 @@ from com.raytheon.uf.edex.database.cluster import ClusterTask
|
|||
# 01/09/14 16952 randerso Fix regression made in #2517 which caused errors with overlapping grids
|
||||
# 02/04/14 17042 ryu Check in changes for randerso.
|
||||
# 04/03/2014 2737 randerso Allow iscMosaic to blankOtherPeriods even when no grids received
|
||||
# 04/11/2014 17242 David Gillingham (code checked in by zhao)
|
||||
#
|
||||
|
||||
BATCH_DELAY = 0.0
|
||||
|
@ -909,8 +910,7 @@ class IscMosaic:
|
|||
destGrid, history = grid
|
||||
self.__dbGrid = (destGrid, history, tr)
|
||||
else:
|
||||
self.logProblem("Unable to access grid for ",
|
||||
self.__printTR(tr), "for ", self.__parmName)
|
||||
logger.error("Unable to access grid for "+self.__printTR(tr) +" for " + self.__parmName)
|
||||
return None
|
||||
|
||||
return (self.__dbGrid[0], self.__dbGrid[1])
|
||||
|
|
|
@ -51,6 +51,7 @@ from com.raytheon.uf.common.localization import LocalizationContext_Localization
|
|||
# methods where it's needed.
|
||||
# 11/07/13 2517 randerso Allow getLogger to override logLevel
|
||||
# 01/22/14/ 2504 randerso Added hostname to log path
|
||||
# 04/10/2014 17241 David Gillingham (code checked in by zhao)
|
||||
#
|
||||
#
|
||||
|
||||
|
@ -297,8 +298,12 @@ def getLogger(scriptName, logName=None, logLevel=logging.INFO):
|
|||
|
||||
logFile = os.path.join(logPath, logName)
|
||||
|
||||
if not os.path.exists(logPath):
|
||||
try:
|
||||
os.makedirs(logPath)
|
||||
except OSError as e:
|
||||
import errno
|
||||
if e.errno != errno.EEXIST:
|
||||
raise e
|
||||
|
||||
theLog = logging.getLogger(scriptName)
|
||||
theLog.setLevel(logLevel)
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<!--
|
||||
Mar 31, 2014 #2934 dgilling Added new FHAG0 level needed for pSurge2.0.
|
||||
-->
|
||||
<LevelMappings>
|
||||
<Level key="BL030">
|
||||
<DatabaseLevel levelName="BL" levelOneValue="0.0" levelTwoValue="30.0" unit="hPa"/>
|
||||
|
@ -237,6 +240,9 @@
|
|||
<Level key="FH13716">
|
||||
<DatabaseLevel levelName="FH" levelOneValue="13716.0" unit="m"/>
|
||||
</Level>
|
||||
<Level key="FHAG0">
|
||||
<DatabaseLevel levelName="FHAG" levelOneValue="0.0" unit="m"/>
|
||||
</Level>
|
||||
<Level key="FHAG2">
|
||||
<DatabaseLevel levelName="FHAG" levelOneValue="2.0" unit="m"/>
|
||||
</Level>
|
||||
|
|
|
@ -0,0 +1,249 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<gridParamInfo xmlns:ns2="group">
|
||||
<valtimeMINUSreftime>
|
||||
<fcst>0</fcst>
|
||||
<fcst>10800</fcst>
|
||||
<fcst>21600</fcst>
|
||||
<fcst>32400</fcst>
|
||||
<fcst>43200</fcst>
|
||||
<fcst>54000</fcst>
|
||||
<fcst>64800</fcst>
|
||||
<fcst>75600</fcst>
|
||||
<fcst>86400</fcst>
|
||||
<fcst>97200</fcst>
|
||||
<fcst>108000</fcst>
|
||||
<fcst>118800</fcst>
|
||||
<fcst>129600</fcst>
|
||||
<fcst>140400</fcst>
|
||||
<fcst>151200</fcst>
|
||||
<fcst>162000</fcst>
|
||||
<fcst>172800</fcst>
|
||||
<fcst>183600</fcst>
|
||||
<fcst>194400</fcst>
|
||||
<fcst>205200</fcst>
|
||||
<fcst>216000</fcst>
|
||||
<fcst>226800</fcst>
|
||||
<fcst>237600</fcst>
|
||||
<fcst>248400</fcst>
|
||||
<fcst>259200</fcst>
|
||||
<fcst>280800</fcst>
|
||||
<fcst>302400</fcst>
|
||||
<fcst>324000</fcst>
|
||||
<fcst>345600</fcst>
|
||||
<fcst>367200</fcst>
|
||||
<fcst>388800</fcst>
|
||||
<fcst>410400</fcst>
|
||||
<fcst>432000</fcst>
|
||||
<fcst>453600</fcst>
|
||||
</valtimeMINUSreftime>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>perpw</short_name>
|
||||
<long_name>Primary wave period</long_name>
|
||||
<units>s</units>
|
||||
<udunits>seconds</udunits>
|
||||
<uiname>primaryWavePeriod</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wvhgt</short_name>
|
||||
<long_name>Wind wave height</long_name>
|
||||
<units>m</units>
|
||||
<udunits>meters</udunits>
|
||||
<uiname>heightWindWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>50.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>staticSpacing</short_name>
|
||||
<long_name>Grid spacing</long_name>
|
||||
<units>meters</units>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>vw</short_name>
|
||||
<long_name>v-component wind</long_name>
|
||||
<units>m/s</units>
|
||||
<udunits>meter/sec</udunits>
|
||||
<uiname>vWind</uiname>
|
||||
<valid_range>-150.0</valid_range>
|
||||
<valid_range>150.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>swdir</short_name>
|
||||
<long_name>Swell peak period direction</long_name>
|
||||
<units>degree true</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>swellWaveDir</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>OSEQD 1 2</levelsDesc>
|
||||
<levels>
|
||||
<level>OSEQD1</level>
|
||||
<level>OSEQD2</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<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>/s</units>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wd</short_name>
|
||||
<long_name>Wind Direction</long_name>
|
||||
<units>degreeTrue</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>windDir</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wvdir</short_name>
|
||||
<long_name>Direction of wind waves (from which)</long_name>
|
||||
<units>degree true</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>dirWindWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wvper</short_name>
|
||||
<long_name>Wind wave peak period</long_name>
|
||||
<units>s</units>
|
||||
<udunits>seconds</udunits>
|
||||
<uiname>peakPeriodWindWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>htsgw</short_name>
|
||||
<long_name>Sig height combined wind waves and swell</long_name>
|
||||
<units>m</units>
|
||||
<udunits>meters</udunits>
|
||||
<uiname>heightWindWavesandSwell</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>50.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>swper</short_name>
|
||||
<long_name>Swell wave peak period</long_name>
|
||||
<units>s</units>
|
||||
<udunits>seconds</udunits>
|
||||
<uiname>swellWavePeriod</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>OSEQD 1 2</levelsDesc>
|
||||
<levels>
|
||||
<level>OSEQD1</level>
|
||||
<level>OSEQD2</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>swell</short_name>
|
||||
<long_name>Significant swell wave height</long_name>
|
||||
<units>m</units>
|
||||
<udunits>meters</udunits>
|
||||
<uiname>heightSwellWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>50.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>OSEQD 1 2</levelsDesc>
|
||||
<levels>
|
||||
<level>OSEQD1</level>
|
||||
<level>OSEQD2</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>dirpw</short_name>
|
||||
<long_name>Primary wave direction</long_name>
|
||||
<units>degree true</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>primaryWaveDir</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>uw</short_name>
|
||||
<long_name>u-component wind</long_name>
|
||||
<units>m/s</units>
|
||||
<udunits>meter/sec</udunits>
|
||||
<uiname>uWind</uiname>
|
||||
<valid_range>-150.0</valid_range>
|
||||
<valid_range>150.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>ws</short_name>
|
||||
<long_name>Wind Speed</long_name>
|
||||
<units>m/s</units>
|
||||
<udunits>meter/sec</udunits>
|
||||
<uiname>windSpeed</uiname>
|
||||
<valid_range>-150.0</valid_range>
|
||||
<valid_range>150.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
</gridParamInfo>
|
|
@ -0,0 +1,249 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<gridParamInfo xmlns:ns2="group">
|
||||
<valtimeMINUSreftime>
|
||||
<fcst>0</fcst>
|
||||
<fcst>10800</fcst>
|
||||
<fcst>21600</fcst>
|
||||
<fcst>32400</fcst>
|
||||
<fcst>43200</fcst>
|
||||
<fcst>54000</fcst>
|
||||
<fcst>64800</fcst>
|
||||
<fcst>75600</fcst>
|
||||
<fcst>86400</fcst>
|
||||
<fcst>97200</fcst>
|
||||
<fcst>108000</fcst>
|
||||
<fcst>118800</fcst>
|
||||
<fcst>129600</fcst>
|
||||
<fcst>140400</fcst>
|
||||
<fcst>151200</fcst>
|
||||
<fcst>162000</fcst>
|
||||
<fcst>172800</fcst>
|
||||
<fcst>183600</fcst>
|
||||
<fcst>194400</fcst>
|
||||
<fcst>205200</fcst>
|
||||
<fcst>216000</fcst>
|
||||
<fcst>226800</fcst>
|
||||
<fcst>237600</fcst>
|
||||
<fcst>248400</fcst>
|
||||
<fcst>259200</fcst>
|
||||
<fcst>280800</fcst>
|
||||
<fcst>302400</fcst>
|
||||
<fcst>324000</fcst>
|
||||
<fcst>345600</fcst>
|
||||
<fcst>367200</fcst>
|
||||
<fcst>388800</fcst>
|
||||
<fcst>410400</fcst>
|
||||
<fcst>432000</fcst>
|
||||
<fcst>453600</fcst>
|
||||
</valtimeMINUSreftime>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>perpw</short_name>
|
||||
<long_name>Primary wave period</long_name>
|
||||
<units>s</units>
|
||||
<udunits>seconds</udunits>
|
||||
<uiname>primaryWavePeriod</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wvhgt</short_name>
|
||||
<long_name>Wind wave height</long_name>
|
||||
<units>m</units>
|
||||
<udunits>meters</udunits>
|
||||
<uiname>heightWindWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>50.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>staticSpacing</short_name>
|
||||
<long_name>Grid spacing</long_name>
|
||||
<units>meters</units>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>vw</short_name>
|
||||
<long_name>v-component wind</long_name>
|
||||
<units>m/s</units>
|
||||
<udunits>meter/sec</udunits>
|
||||
<uiname>vWind</uiname>
|
||||
<valid_range>-150.0</valid_range>
|
||||
<valid_range>150.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>swdir</short_name>
|
||||
<long_name>Swell peak period direction</long_name>
|
||||
<units>degree true</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>swellWaveDir</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>OSEQD 1 2</levelsDesc>
|
||||
<levels>
|
||||
<level>OSEQD1</level>
|
||||
<level>OSEQD2</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<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>/s</units>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wd</short_name>
|
||||
<long_name>Wind Direction</long_name>
|
||||
<units>degreeTrue</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>windDir</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wvdir</short_name>
|
||||
<long_name>Direction of wind waves (from which)</long_name>
|
||||
<units>degree true</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>dirWindWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wvper</short_name>
|
||||
<long_name>Wind wave peak period</long_name>
|
||||
<units>s</units>
|
||||
<udunits>seconds</udunits>
|
||||
<uiname>peakPeriodWindWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>htsgw</short_name>
|
||||
<long_name>Sig height combined wind waves and swell</long_name>
|
||||
<units>m</units>
|
||||
<udunits>meters</udunits>
|
||||
<uiname>heightWindWavesandSwell</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>50.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>swper</short_name>
|
||||
<long_name>Swell wave peak period</long_name>
|
||||
<units>s</units>
|
||||
<udunits>seconds</udunits>
|
||||
<uiname>swellWavePeriod</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>OSEQD 1 2</levelsDesc>
|
||||
<levels>
|
||||
<level>OSEQD1</level>
|
||||
<level>OSEQD2</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>swell</short_name>
|
||||
<long_name>Significant swell wave height</long_name>
|
||||
<units>m</units>
|
||||
<udunits>meters</udunits>
|
||||
<uiname>heightSwellWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>50.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>OSEQD 1 2</levelsDesc>
|
||||
<levels>
|
||||
<level>OSEQD1</level>
|
||||
<level>OSEQD2</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>dirpw</short_name>
|
||||
<long_name>Primary wave direction</long_name>
|
||||
<units>degree true</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>primaryWaveDir</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>uw</short_name>
|
||||
<long_name>u-component wind</long_name>
|
||||
<units>m/s</units>
|
||||
<udunits>meter/sec</udunits>
|
||||
<uiname>uWind</uiname>
|
||||
<valid_range>-150.0</valid_range>
|
||||
<valid_range>150.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>ws</short_name>
|
||||
<long_name>Wind Speed</long_name>
|
||||
<units>m/s</units>
|
||||
<udunits>meter/sec</udunits>
|
||||
<uiname>windSpeed</uiname>
|
||||
<valid_range>-150.0</valid_range>
|
||||
<valid_range>150.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
</gridParamInfo>
|
|
@ -0,0 +1,249 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<gridParamInfo xmlns:ns2="group">
|
||||
<valtimeMINUSreftime>
|
||||
<fcst>0</fcst>
|
||||
<fcst>10800</fcst>
|
||||
<fcst>21600</fcst>
|
||||
<fcst>32400</fcst>
|
||||
<fcst>43200</fcst>
|
||||
<fcst>54000</fcst>
|
||||
<fcst>64800</fcst>
|
||||
<fcst>75600</fcst>
|
||||
<fcst>86400</fcst>
|
||||
<fcst>97200</fcst>
|
||||
<fcst>108000</fcst>
|
||||
<fcst>118800</fcst>
|
||||
<fcst>129600</fcst>
|
||||
<fcst>140400</fcst>
|
||||
<fcst>151200</fcst>
|
||||
<fcst>162000</fcst>
|
||||
<fcst>172800</fcst>
|
||||
<fcst>183600</fcst>
|
||||
<fcst>194400</fcst>
|
||||
<fcst>205200</fcst>
|
||||
<fcst>216000</fcst>
|
||||
<fcst>226800</fcst>
|
||||
<fcst>237600</fcst>
|
||||
<fcst>248400</fcst>
|
||||
<fcst>259200</fcst>
|
||||
<fcst>280800</fcst>
|
||||
<fcst>302400</fcst>
|
||||
<fcst>324000</fcst>
|
||||
<fcst>345600</fcst>
|
||||
<fcst>367200</fcst>
|
||||
<fcst>388800</fcst>
|
||||
<fcst>410400</fcst>
|
||||
<fcst>432000</fcst>
|
||||
<fcst>453600</fcst>
|
||||
</valtimeMINUSreftime>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>perpw</short_name>
|
||||
<long_name>Primary wave period</long_name>
|
||||
<units>s</units>
|
||||
<udunits>seconds</udunits>
|
||||
<uiname>primaryWavePeriod</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wvhgt</short_name>
|
||||
<long_name>Wind wave height</long_name>
|
||||
<units>m</units>
|
||||
<udunits>meters</udunits>
|
||||
<uiname>heightWindWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>50.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>staticSpacing</short_name>
|
||||
<long_name>Grid spacing</long_name>
|
||||
<units>meters</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>vw</short_name>
|
||||
<long_name>v-component wind</long_name>
|
||||
<units>m/s</units>
|
||||
<udunits>meter/sec</udunits>
|
||||
<uiname>vWind</uiname>
|
||||
<valid_range>-150.0</valid_range>
|
||||
<valid_range>150.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>swdir</short_name>
|
||||
<long_name>Swell peak period direction</long_name>
|
||||
<units>degree true</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>swellWaveDir</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>OSEQD 1 2</levelsDesc>
|
||||
<levels>
|
||||
<level>OSEQD1</level>
|
||||
<level>OSEQD2</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<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>/s</units>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wd</short_name>
|
||||
<long_name>Wind Direction</long_name>
|
||||
<units>degreeTrue</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>windDir</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wvdir</short_name>
|
||||
<long_name>Direction of wind waves (from which)</long_name>
|
||||
<units>degree true</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>dirWindWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wvper</short_name>
|
||||
<long_name>Wind wave peak period</long_name>
|
||||
<units>s</units>
|
||||
<udunits>seconds</udunits>
|
||||
<uiname>peakPeriodWindWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>htsgw</short_name>
|
||||
<long_name>Sig height combined wind waves and swell</long_name>
|
||||
<units>m</units>
|
||||
<udunits>meters</udunits>
|
||||
<uiname>heightWindWavesandSwell</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>50.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>swper</short_name>
|
||||
<long_name>Swell wave peak period</long_name>
|
||||
<units>s</units>
|
||||
<udunits>seconds</udunits>
|
||||
<uiname>swellWavePeriod</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>OSEQD 1 2</levelsDesc>
|
||||
<levels>
|
||||
<level>OSEQD1</level>
|
||||
<level>OSEQD2</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>swell</short_name>
|
||||
<long_name>Significant swell wave height</long_name>
|
||||
<units>m</units>
|
||||
<udunits>meters</udunits>
|
||||
<uiname>heightSwellWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>50.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>OSEQD 1 2</levelsDesc>
|
||||
<levels>
|
||||
<level>OSEQD1</level>
|
||||
<level>OSEQD2</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>dirpw</short_name>
|
||||
<long_name>Primary wave direction</long_name>
|
||||
<units>degree true</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>primaryWaveDir</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>uw</short_name>
|
||||
<long_name>u-component wind</long_name>
|
||||
<units>m/s</units>
|
||||
<udunits>meter/sec</udunits>
|
||||
<uiname>uWind</uiname>
|
||||
<valid_range>-150.0</valid_range>
|
||||
<valid_range>150.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>ws</short_name>
|
||||
<long_name>Wind Speed</long_name>
|
||||
<units>m/s</units>
|
||||
<udunits>meter/sec</udunits>
|
||||
<uiname>windSpeed</uiname>
|
||||
<valid_range>-150.0</valid_range>
|
||||
<valid_range>150.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
</gridParamInfo>
|
|
@ -0,0 +1,249 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<gridParamInfo xmlns:ns2="group">
|
||||
<valtimeMINUSreftime>
|
||||
<fcst>0</fcst>
|
||||
<fcst>10800</fcst>
|
||||
<fcst>21600</fcst>
|
||||
<fcst>32400</fcst>
|
||||
<fcst>43200</fcst>
|
||||
<fcst>54000</fcst>
|
||||
<fcst>64800</fcst>
|
||||
<fcst>75600</fcst>
|
||||
<fcst>86400</fcst>
|
||||
<fcst>97200</fcst>
|
||||
<fcst>108000</fcst>
|
||||
<fcst>118800</fcst>
|
||||
<fcst>129600</fcst>
|
||||
<fcst>140400</fcst>
|
||||
<fcst>151200</fcst>
|
||||
<fcst>162000</fcst>
|
||||
<fcst>172800</fcst>
|
||||
<fcst>183600</fcst>
|
||||
<fcst>194400</fcst>
|
||||
<fcst>205200</fcst>
|
||||
<fcst>216000</fcst>
|
||||
<fcst>226800</fcst>
|
||||
<fcst>237600</fcst>
|
||||
<fcst>248400</fcst>
|
||||
<fcst>259200</fcst>
|
||||
<fcst>280800</fcst>
|
||||
<fcst>302400</fcst>
|
||||
<fcst>324000</fcst>
|
||||
<fcst>345600</fcst>
|
||||
<fcst>367200</fcst>
|
||||
<fcst>388800</fcst>
|
||||
<fcst>410400</fcst>
|
||||
<fcst>432000</fcst>
|
||||
<fcst>453600</fcst>
|
||||
</valtimeMINUSreftime>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>perpw</short_name>
|
||||
<long_name>Primary wave period</long_name>
|
||||
<units>s</units>
|
||||
<udunits>seconds</udunits>
|
||||
<uiname>primaryWavePeriod</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wvhgt</short_name>
|
||||
<long_name>Wind wave height</long_name>
|
||||
<units>m</units>
|
||||
<udunits>meters</udunits>
|
||||
<uiname>heightWindWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>50.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>staticSpacing</short_name>
|
||||
<long_name>Grid spacing</long_name>
|
||||
<units>meters</units>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>vw</short_name>
|
||||
<long_name>v-component wind</long_name>
|
||||
<units>m/s</units>
|
||||
<udunits>meter/sec</udunits>
|
||||
<uiname>vWind</uiname>
|
||||
<valid_range>-150.0</valid_range>
|
||||
<valid_range>150.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>swdir</short_name>
|
||||
<long_name>Swell peak period direction</long_name>
|
||||
<units>degree true</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>swellWaveDir</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>OSEQD 1 2</levelsDesc>
|
||||
<levels>
|
||||
<level>OSEQD1</level>
|
||||
<level>OSEQD2</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<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>/s</units>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wd</short_name>
|
||||
<long_name>Wind Direction</long_name>
|
||||
<units>degreeTrue</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>windDir</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wvdir</short_name>
|
||||
<long_name>Direction of wind waves (from which)</long_name>
|
||||
<units>degree true</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>dirWindWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wvper</short_name>
|
||||
<long_name>Wind wave peak period</long_name>
|
||||
<units>s</units>
|
||||
<udunits>seconds</udunits>
|
||||
<uiname>peakPeriodWindWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>htsgw</short_name>
|
||||
<long_name>Sig height combined wind waves and swell</long_name>
|
||||
<units>m</units>
|
||||
<udunits>meters</udunits>
|
||||
<uiname>heightWindWavesandSwell</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>50.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>swper</short_name>
|
||||
<long_name>Swell wave peak period</long_name>
|
||||
<units>s</units>
|
||||
<udunits>seconds</udunits>
|
||||
<uiname>swellWavePeriod</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>OSEQD 1 2</levelsDesc>
|
||||
<levels>
|
||||
<level>OSEQD1</level>
|
||||
<level>OSEQD2</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>swell</short_name>
|
||||
<long_name>Significant swell wave height</long_name>
|
||||
<units>m</units>
|
||||
<udunits>meters</udunits>
|
||||
<uiname>heightSwellWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>50.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>OSEQD 1 2</levelsDesc>
|
||||
<levels>
|
||||
<level>OSEQD1</level>
|
||||
<level>OSEQD2</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>dirpw</short_name>
|
||||
<long_name>Primary wave direction</long_name>
|
||||
<units>degree true</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>primaryWaveDir</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>uw</short_name>
|
||||
<long_name>u-component wind</long_name>
|
||||
<units>m/s</units>
|
||||
<udunits>meter/sec</udunits>
|
||||
<uiname>uWind</uiname>
|
||||
<valid_range>-150.0</valid_range>
|
||||
<valid_range>150.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>ws</short_name>
|
||||
<long_name>Wind Speed</long_name>
|
||||
<units>m/s</units>
|
||||
<udunits>meter/sec</udunits>
|
||||
<uiname>windSpeed</uiname>
|
||||
<valid_range>-150.0</valid_range>
|
||||
<valid_range>150.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
</gridParamInfo>
|
|
@ -0,0 +1,249 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<gridParamInfo xmlns:ns2="group">
|
||||
<valtimeMINUSreftime>
|
||||
<fcst>0</fcst>
|
||||
<fcst>10800</fcst>
|
||||
<fcst>21600</fcst>
|
||||
<fcst>32400</fcst>
|
||||
<fcst>43200</fcst>
|
||||
<fcst>54000</fcst>
|
||||
<fcst>64800</fcst>
|
||||
<fcst>75600</fcst>
|
||||
<fcst>86400</fcst>
|
||||
<fcst>97200</fcst>
|
||||
<fcst>108000</fcst>
|
||||
<fcst>118800</fcst>
|
||||
<fcst>129600</fcst>
|
||||
<fcst>140400</fcst>
|
||||
<fcst>151200</fcst>
|
||||
<fcst>162000</fcst>
|
||||
<fcst>172800</fcst>
|
||||
<fcst>183600</fcst>
|
||||
<fcst>194400</fcst>
|
||||
<fcst>205200</fcst>
|
||||
<fcst>216000</fcst>
|
||||
<fcst>226800</fcst>
|
||||
<fcst>237600</fcst>
|
||||
<fcst>248400</fcst>
|
||||
<fcst>259200</fcst>
|
||||
<fcst>280800</fcst>
|
||||
<fcst>302400</fcst>
|
||||
<fcst>324000</fcst>
|
||||
<fcst>345600</fcst>
|
||||
<fcst>367200</fcst>
|
||||
<fcst>388800</fcst>
|
||||
<fcst>410400</fcst>
|
||||
<fcst>432000</fcst>
|
||||
<fcst>453600</fcst>
|
||||
</valtimeMINUSreftime>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>perpw</short_name>
|
||||
<long_name>Primary wave period</long_name>
|
||||
<units>s</units>
|
||||
<udunits>seconds</udunits>
|
||||
<uiname>primaryWavePeriod</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wvhgt</short_name>
|
||||
<long_name>Wind wave height</long_name>
|
||||
<units>m</units>
|
||||
<udunits>meters</udunits>
|
||||
<uiname>heightWindWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>50.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>staticSpacing</short_name>
|
||||
<long_name>Grid spacing</long_name>
|
||||
<units>meters</units>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>vw</short_name>
|
||||
<long_name>v-component wind</long_name>
|
||||
<units>m/s</units>
|
||||
<udunits>meter/sec</udunits>
|
||||
<uiname>vWind</uiname>
|
||||
<valid_range>-150.0</valid_range>
|
||||
<valid_range>150.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>swdir</short_name>
|
||||
<long_name>Swell peak period direction</long_name>
|
||||
<units>degree true</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>swellWaveDir</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>OSEQD 1 2</levelsDesc>
|
||||
<levels>
|
||||
<level>OSEQD1</level>
|
||||
<level>OSEQD2</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<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>/s</units>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wd</short_name>
|
||||
<long_name>Wind Direction</long_name>
|
||||
<units>degreeTrue</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>windDir</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wvdir</short_name>
|
||||
<long_name>Direction of wind waves (from which)</long_name>
|
||||
<units>degree true</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>dirWindWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wvper</short_name>
|
||||
<long_name>Wind wave peak period</long_name>
|
||||
<units>s</units>
|
||||
<udunits>seconds</udunits>
|
||||
<uiname>peakPeriodWindWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>htsgw</short_name>
|
||||
<long_name>Sig height combined wind waves and swell</long_name>
|
||||
<units>m</units>
|
||||
<udunits>meters</udunits>
|
||||
<uiname>heightWindWavesandSwell</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>50.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>swper</short_name>
|
||||
<long_name>Swell wave peak period</long_name>
|
||||
<units>s</units>
|
||||
<udunits>seconds</udunits>
|
||||
<uiname>swellWavePeriod</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>OSEQD 1 2</levelsDesc>
|
||||
<levels>
|
||||
<level>OSEQD1</level>
|
||||
<level>OSEQD2</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>swell</short_name>
|
||||
<long_name>Significant swell wave height</long_name>
|
||||
<units>m</units>
|
||||
<udunits>meters</udunits>
|
||||
<uiname>heightSwellWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>50.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>OSEQD 1 2</levelsDesc>
|
||||
<levels>
|
||||
<level>OSEQD1</level>
|
||||
<level>OSEQD2</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>dirpw</short_name>
|
||||
<long_name>Primary wave direction</long_name>
|
||||
<units>degree true</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>primaryWaveDir</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>uw</short_name>
|
||||
<long_name>u-component wind</long_name>
|
||||
<units>m/s</units>
|
||||
<udunits>meter/sec</udunits>
|
||||
<uiname>uWind</uiname>
|
||||
<valid_range>-150.0</valid_range>
|
||||
<valid_range>150.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>ws</short_name>
|
||||
<long_name>Wind Speed</long_name>
|
||||
<units>m/s</units>
|
||||
<udunits>meter/sec</udunits>
|
||||
<uiname>windSpeed</uiname>
|
||||
<valid_range>-150.0</valid_range>
|
||||
<valid_range>150.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
</gridParamInfo>
|
|
@ -0,0 +1,249 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<gridParamInfo xmlns:ns2="group">
|
||||
<valtimeMINUSreftime>
|
||||
<fcst>0</fcst>
|
||||
<fcst>10800</fcst>
|
||||
<fcst>21600</fcst>
|
||||
<fcst>32400</fcst>
|
||||
<fcst>43200</fcst>
|
||||
<fcst>54000</fcst>
|
||||
<fcst>64800</fcst>
|
||||
<fcst>75600</fcst>
|
||||
<fcst>86400</fcst>
|
||||
<fcst>97200</fcst>
|
||||
<fcst>108000</fcst>
|
||||
<fcst>118800</fcst>
|
||||
<fcst>129600</fcst>
|
||||
<fcst>140400</fcst>
|
||||
<fcst>151200</fcst>
|
||||
<fcst>162000</fcst>
|
||||
<fcst>172800</fcst>
|
||||
<fcst>183600</fcst>
|
||||
<fcst>194400</fcst>
|
||||
<fcst>205200</fcst>
|
||||
<fcst>216000</fcst>
|
||||
<fcst>226800</fcst>
|
||||
<fcst>237600</fcst>
|
||||
<fcst>248400</fcst>
|
||||
<fcst>259200</fcst>
|
||||
<fcst>280800</fcst>
|
||||
<fcst>302400</fcst>
|
||||
<fcst>324000</fcst>
|
||||
<fcst>345600</fcst>
|
||||
<fcst>367200</fcst>
|
||||
<fcst>388800</fcst>
|
||||
<fcst>410400</fcst>
|
||||
<fcst>432000</fcst>
|
||||
<fcst>453600</fcst>
|
||||
</valtimeMINUSreftime>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>perpw</short_name>
|
||||
<long_name>Primary wave period</long_name>
|
||||
<units>s</units>
|
||||
<udunits>seconds</udunits>
|
||||
<uiname>primaryWavePeriod</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wvhgt</short_name>
|
||||
<long_name>Wind wave height</long_name>
|
||||
<units>m</units>
|
||||
<udunits>meters</udunits>
|
||||
<uiname>heightWindWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>50.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>staticSpacing</short_name>
|
||||
<long_name>Grid spacing</long_name>
|
||||
<units>meters</units>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>vw</short_name>
|
||||
<long_name>v-component wind</long_name>
|
||||
<units>m/s</units>
|
||||
<udunits>meter/sec</udunits>
|
||||
<uiname>vWind</uiname>
|
||||
<valid_range>-150.0</valid_range>
|
||||
<valid_range>150.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>swdir</short_name>
|
||||
<long_name>Swell peak period direction</long_name>
|
||||
<units>degree true</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>swellWaveDir</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>OSEQD 1 2</levelsDesc>
|
||||
<levels>
|
||||
<level>OSEQD1</level>
|
||||
<level>OSEQD2</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<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>/s</units>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wd</short_name>
|
||||
<long_name>Wind Direction</long_name>
|
||||
<units>degreeTrue</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>windDir</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wvdir</short_name>
|
||||
<long_name>Direction of wind waves (from which)</long_name>
|
||||
<units>degree true</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>dirWindWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wvper</short_name>
|
||||
<long_name>Wind wave peak period</long_name>
|
||||
<units>s</units>
|
||||
<udunits>seconds</udunits>
|
||||
<uiname>peakPeriodWindWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>htsgw</short_name>
|
||||
<long_name>Sig height combined wind waves and swell</long_name>
|
||||
<units>m</units>
|
||||
<udunits>meters</udunits>
|
||||
<uiname>heightWindWavesandSwell</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>50.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>swper</short_name>
|
||||
<long_name>Swell wave peak period</long_name>
|
||||
<units>s</units>
|
||||
<udunits>seconds</udunits>
|
||||
<uiname>swellWavePeriod</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>OSEQD 1 2</levelsDesc>
|
||||
<levels>
|
||||
<level>OSEQD1</level>
|
||||
<level>OSEQD2</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>swell</short_name>
|
||||
<long_name>Significant swell wave height</long_name>
|
||||
<units>m</units>
|
||||
<udunits>meters</udunits>
|
||||
<uiname>heightSwellWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>50.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>OSEQD 1 2</levelsDesc>
|
||||
<levels>
|
||||
<level>OSEQD1</level>
|
||||
<level>OSEQD2</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>dirpw</short_name>
|
||||
<long_name>Primary wave direction</long_name>
|
||||
<units>degree true</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>primaryWaveDir</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>uw</short_name>
|
||||
<long_name>u-component wind</long_name>
|
||||
<units>m/s</units>
|
||||
<udunits>meter/sec</udunits>
|
||||
<uiname>uWind</uiname>
|
||||
<valid_range>-150.0</valid_range>
|
||||
<valid_range>150.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>ws</short_name>
|
||||
<long_name>Wind Speed</long_name>
|
||||
<units>m/s</units>
|
||||
<udunits>meter/sec</udunits>
|
||||
<uiname>windSpeed</uiname>
|
||||
<valid_range>-150.0</valid_range>
|
||||
<valid_range>150.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
</gridParamInfo>
|
|
@ -0,0 +1,249 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<gridParamInfo xmlns:ns2="group">
|
||||
<valtimeMINUSreftime>
|
||||
<fcst>0</fcst>
|
||||
<fcst>10800</fcst>
|
||||
<fcst>21600</fcst>
|
||||
<fcst>32400</fcst>
|
||||
<fcst>43200</fcst>
|
||||
<fcst>54000</fcst>
|
||||
<fcst>64800</fcst>
|
||||
<fcst>75600</fcst>
|
||||
<fcst>86400</fcst>
|
||||
<fcst>97200</fcst>
|
||||
<fcst>108000</fcst>
|
||||
<fcst>118800</fcst>
|
||||
<fcst>129600</fcst>
|
||||
<fcst>140400</fcst>
|
||||
<fcst>151200</fcst>
|
||||
<fcst>162000</fcst>
|
||||
<fcst>172800</fcst>
|
||||
<fcst>183600</fcst>
|
||||
<fcst>194400</fcst>
|
||||
<fcst>205200</fcst>
|
||||
<fcst>216000</fcst>
|
||||
<fcst>226800</fcst>
|
||||
<fcst>237600</fcst>
|
||||
<fcst>248400</fcst>
|
||||
<fcst>259200</fcst>
|
||||
<fcst>280800</fcst>
|
||||
<fcst>302400</fcst>
|
||||
<fcst>324000</fcst>
|
||||
<fcst>345600</fcst>
|
||||
<fcst>367200</fcst>
|
||||
<fcst>388800</fcst>
|
||||
<fcst>410400</fcst>
|
||||
<fcst>432000</fcst>
|
||||
<fcst>453600</fcst>
|
||||
</valtimeMINUSreftime>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>perpw</short_name>
|
||||
<long_name>Primary wave period</long_name>
|
||||
<units>s</units>
|
||||
<udunits>seconds</udunits>
|
||||
<uiname>primaryWavePeriod</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wvhgt</short_name>
|
||||
<long_name>Wind wave height</long_name>
|
||||
<units>m</units>
|
||||
<udunits>meters</udunits>
|
||||
<uiname>heightWindWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>50.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>staticSpacing</short_name>
|
||||
<long_name>Grid spacing</long_name>
|
||||
<units>meters</units>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>vw</short_name>
|
||||
<long_name>v-component wind</long_name>
|
||||
<units>m/s</units>
|
||||
<udunits>meter/sec</udunits>
|
||||
<uiname>vWind</uiname>
|
||||
<valid_range>-150.0</valid_range>
|
||||
<valid_range>150.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>swdir</short_name>
|
||||
<long_name>Swell peak period direction</long_name>
|
||||
<units>degree true</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>swellWaveDir</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>OSEQD 1 2</levelsDesc>
|
||||
<levels>
|
||||
<level>OSEQD1</level>
|
||||
<level>OSEQD2</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<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>/s</units>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wd</short_name>
|
||||
<long_name>Wind Direction</long_name>
|
||||
<units>degreeTrue</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>windDir</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wvdir</short_name>
|
||||
<long_name>Direction of wind waves (from which)</long_name>
|
||||
<units>degree true</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>dirWindWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wvper</short_name>
|
||||
<long_name>Wind wave peak period</long_name>
|
||||
<units>s</units>
|
||||
<udunits>seconds</udunits>
|
||||
<uiname>peakPeriodWindWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>htsgw</short_name>
|
||||
<long_name>Sig height combined wind waves and swell</long_name>
|
||||
<units>m</units>
|
||||
<udunits>meters</udunits>
|
||||
<uiname>heightWindWavesandSwell</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>50.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>swper</short_name>
|
||||
<long_name>Swell wave peak period</long_name>
|
||||
<units>s</units>
|
||||
<udunits>seconds</udunits>
|
||||
<uiname>swellWavePeriod</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>OSEQD 1 2</levelsDesc>
|
||||
<levels>
|
||||
<level>OSEQD1</level>
|
||||
<level>OSEQD2</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>swell</short_name>
|
||||
<long_name>Significant swell wave height</long_name>
|
||||
<units>m</units>
|
||||
<udunits>meters</udunits>
|
||||
<uiname>heightSwellWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>50.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>OSEQD 1 2</levelsDesc>
|
||||
<levels>
|
||||
<level>OSEQD1</level>
|
||||
<level>OSEQD2</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>dirpw</short_name>
|
||||
<long_name>Primary wave direction</long_name>
|
||||
<units>degree true</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>primaryWaveDir</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>uw</short_name>
|
||||
<long_name>u-component wind</long_name>
|
||||
<units>m/s</units>
|
||||
<udunits>meter/sec</udunits>
|
||||
<uiname>uWind</uiname>
|
||||
<valid_range>-150.0</valid_range>
|
||||
<valid_range>150.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>ws</short_name>
|
||||
<long_name>Wind Speed</long_name>
|
||||
<units>m/s</units>
|
||||
<udunits>meter/sec</udunits>
|
||||
<uiname>windSpeed</uiname>
|
||||
<valid_range>-150.0</valid_range>
|
||||
<valid_range>150.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
</gridParamInfo>
|
|
@ -0,0 +1,249 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<gridParamInfo xmlns:ns2="group">
|
||||
<valtimeMINUSreftime>
|
||||
<fcst>0</fcst>
|
||||
<fcst>10800</fcst>
|
||||
<fcst>21600</fcst>
|
||||
<fcst>32400</fcst>
|
||||
<fcst>43200</fcst>
|
||||
<fcst>54000</fcst>
|
||||
<fcst>64800</fcst>
|
||||
<fcst>75600</fcst>
|
||||
<fcst>86400</fcst>
|
||||
<fcst>97200</fcst>
|
||||
<fcst>108000</fcst>
|
||||
<fcst>118800</fcst>
|
||||
<fcst>129600</fcst>
|
||||
<fcst>140400</fcst>
|
||||
<fcst>151200</fcst>
|
||||
<fcst>162000</fcst>
|
||||
<fcst>172800</fcst>
|
||||
<fcst>183600</fcst>
|
||||
<fcst>194400</fcst>
|
||||
<fcst>205200</fcst>
|
||||
<fcst>216000</fcst>
|
||||
<fcst>226800</fcst>
|
||||
<fcst>237600</fcst>
|
||||
<fcst>248400</fcst>
|
||||
<fcst>259200</fcst>
|
||||
<fcst>280800</fcst>
|
||||
<fcst>302400</fcst>
|
||||
<fcst>324000</fcst>
|
||||
<fcst>345600</fcst>
|
||||
<fcst>367200</fcst>
|
||||
<fcst>388800</fcst>
|
||||
<fcst>410400</fcst>
|
||||
<fcst>432000</fcst>
|
||||
<fcst>453600</fcst>
|
||||
</valtimeMINUSreftime>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>perpw</short_name>
|
||||
<long_name>Primary wave period</long_name>
|
||||
<units>s</units>
|
||||
<udunits>seconds</udunits>
|
||||
<uiname>primaryWavePeriod</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wvhgt</short_name>
|
||||
<long_name>Wind wave height</long_name>
|
||||
<units>m</units>
|
||||
<udunits>meters</udunits>
|
||||
<uiname>heightWindWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>50.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>staticSpacing</short_name>
|
||||
<long_name>Grid spacing</long_name>
|
||||
<units>meters</units>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>vw</short_name>
|
||||
<long_name>v-component wind</long_name>
|
||||
<units>m/s</units>
|
||||
<udunits>meter/sec</udunits>
|
||||
<uiname>vWind</uiname>
|
||||
<valid_range>-150.0</valid_range>
|
||||
<valid_range>150.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>swdir</short_name>
|
||||
<long_name>Swell peak period direction</long_name>
|
||||
<units>degree true</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>swellWaveDir</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>OSEQD 1 2</levelsDesc>
|
||||
<levels>
|
||||
<level>OSEQD1</level>
|
||||
<level>OSEQD2</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<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>/s</units>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wd</short_name>
|
||||
<long_name>Wind Direction</long_name>
|
||||
<units>degreeTrue</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>windDir</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wvdir</short_name>
|
||||
<long_name>Direction of wind waves (from which)</long_name>
|
||||
<units>degree true</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>dirWindWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wvper</short_name>
|
||||
<long_name>Wind wave peak period</long_name>
|
||||
<units>s</units>
|
||||
<udunits>seconds</udunits>
|
||||
<uiname>peakPeriodWindWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>htsgw</short_name>
|
||||
<long_name>Sig height combined wind waves and swell</long_name>
|
||||
<units>m</units>
|
||||
<udunits>meters</udunits>
|
||||
<uiname>heightWindWavesandSwell</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>50.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>swper</short_name>
|
||||
<long_name>Swell wave peak period</long_name>
|
||||
<units>s</units>
|
||||
<udunits>seconds</udunits>
|
||||
<uiname>swellWavePeriod</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>OSEQD 1 2</levelsDesc>
|
||||
<levels>
|
||||
<level>OSEQD1</level>
|
||||
<level>OSEQD2</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>swell</short_name>
|
||||
<long_name>Significant swell wave height</long_name>
|
||||
<units>m</units>
|
||||
<udunits>meters</udunits>
|
||||
<uiname>heightSwellWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>50.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>OSEQD 1 2</levelsDesc>
|
||||
<levels>
|
||||
<level>OSEQD1</level>
|
||||
<level>OSEQD2</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>dirpw</short_name>
|
||||
<long_name>Primary wave direction</long_name>
|
||||
<units>degree true</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>primaryWaveDir</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>uw</short_name>
|
||||
<long_name>u-component wind</long_name>
|
||||
<units>m/s</units>
|
||||
<udunits>meter/sec</udunits>
|
||||
<uiname>uWind</uiname>
|
||||
<valid_range>-150.0</valid_range>
|
||||
<valid_range>150.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>ws</short_name>
|
||||
<long_name>Wind Speed</long_name>
|
||||
<units>m/s</units>
|
||||
<udunits>meter/sec</udunits>
|
||||
<uiname>windSpeed</uiname>
|
||||
<valid_range>-150.0</valid_range>
|
||||
<valid_range>150.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
</gridParamInfo>
|
|
@ -0,0 +1,249 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<gridParamInfo xmlns:ns2="group">
|
||||
<valtimeMINUSreftime>
|
||||
<fcst>0</fcst>
|
||||
<fcst>10800</fcst>
|
||||
<fcst>21600</fcst>
|
||||
<fcst>32400</fcst>
|
||||
<fcst>43200</fcst>
|
||||
<fcst>54000</fcst>
|
||||
<fcst>64800</fcst>
|
||||
<fcst>75600</fcst>
|
||||
<fcst>86400</fcst>
|
||||
<fcst>97200</fcst>
|
||||
<fcst>108000</fcst>
|
||||
<fcst>118800</fcst>
|
||||
<fcst>129600</fcst>
|
||||
<fcst>140400</fcst>
|
||||
<fcst>151200</fcst>
|
||||
<fcst>162000</fcst>
|
||||
<fcst>172800</fcst>
|
||||
<fcst>183600</fcst>
|
||||
<fcst>194400</fcst>
|
||||
<fcst>205200</fcst>
|
||||
<fcst>216000</fcst>
|
||||
<fcst>226800</fcst>
|
||||
<fcst>237600</fcst>
|
||||
<fcst>248400</fcst>
|
||||
<fcst>259200</fcst>
|
||||
<fcst>280800</fcst>
|
||||
<fcst>302400</fcst>
|
||||
<fcst>324000</fcst>
|
||||
<fcst>345600</fcst>
|
||||
<fcst>367200</fcst>
|
||||
<fcst>388800</fcst>
|
||||
<fcst>410400</fcst>
|
||||
<fcst>432000</fcst>
|
||||
<fcst>453600</fcst>
|
||||
</valtimeMINUSreftime>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>perpw</short_name>
|
||||
<long_name>Primary wave period</long_name>
|
||||
<units>s</units>
|
||||
<udunits>seconds</udunits>
|
||||
<uiname>primaryWavePeriod</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wvhgt</short_name>
|
||||
<long_name>Wind wave height</long_name>
|
||||
<units>m</units>
|
||||
<udunits>meters</udunits>
|
||||
<uiname>heightWindWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>50.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>staticSpacing</short_name>
|
||||
<long_name>Grid spacing</long_name>
|
||||
<units>meters</units>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>vw</short_name>
|
||||
<long_name>v-component wind</long_name>
|
||||
<units>m/s</units>
|
||||
<udunits>meter/sec</udunits>
|
||||
<uiname>vWind</uiname>
|
||||
<valid_range>-150.0</valid_range>
|
||||
<valid_range>150.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>swdir</short_name>
|
||||
<long_name>Swell peak period direction</long_name>
|
||||
<units>degree true</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>swellWaveDir</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>OSEQD 1 2</levelsDesc>
|
||||
<levels>
|
||||
<level>OSEQD1</level>
|
||||
<level>OSEQD2</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<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>/s</units>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wd</short_name>
|
||||
<long_name>Wind Direction</long_name>
|
||||
<units>degreeTrue</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>windDir</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wvdir</short_name>
|
||||
<long_name>Direction of wind waves (from which)</long_name>
|
||||
<units>degree true</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>dirWindWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wvper</short_name>
|
||||
<long_name>Wind wave peak period</long_name>
|
||||
<units>s</units>
|
||||
<udunits>seconds</udunits>
|
||||
<uiname>peakPeriodWindWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>htsgw</short_name>
|
||||
<long_name>Sig height combined wind waves and swell</long_name>
|
||||
<units>m</units>
|
||||
<udunits>meters</udunits>
|
||||
<uiname>heightWindWavesandSwell</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>50.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>swper</short_name>
|
||||
<long_name>Swell wave peak period</long_name>
|
||||
<units>s</units>
|
||||
<udunits>seconds</udunits>
|
||||
<uiname>swellWavePeriod</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>OSEQD 1 2</levelsDesc>
|
||||
<levels>
|
||||
<level>OSEQD1</level>
|
||||
<level>OSEQD2</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>swell</short_name>
|
||||
<long_name>Significant swell wave height</long_name>
|
||||
<units>m</units>
|
||||
<udunits>meters</udunits>
|
||||
<uiname>heightSwellWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>50.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>OSEQD 1 2</levelsDesc>
|
||||
<levels>
|
||||
<level>OSEQD1</level>
|
||||
<level>OSEQD2</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>dirpw</short_name>
|
||||
<long_name>Primary wave direction</long_name>
|
||||
<units>degree true</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>primaryWaveDir</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>uw</short_name>
|
||||
<long_name>u-component wind</long_name>
|
||||
<units>m/s</units>
|
||||
<udunits>meter/sec</udunits>
|
||||
<uiname>uWind</uiname>
|
||||
<valid_range>-150.0</valid_range>
|
||||
<valid_range>150.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>ws</short_name>
|
||||
<long_name>Wind Speed</long_name>
|
||||
<units>m/s</units>
|
||||
<udunits>meter/sec</udunits>
|
||||
<uiname>windSpeed</uiname>
|
||||
<valid_range>-150.0</valid_range>
|
||||
<valid_range>150.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
</gridParamInfo>
|
|
@ -1,819 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Oct 03, 2013 #2418 dgilling Initial Creation.
|
||||
-->
|
||||
<gridParamInfo xmlns:ns2="group">
|
||||
<valtimeMINUSreftime>
|
||||
<fcst>21600</fcst>
|
||||
<fcst>43200</fcst>
|
||||
<fcst>64800</fcst>
|
||||
<fcst>86400</fcst>
|
||||
<fcst>108000</fcst>
|
||||
<fcst>129600</fcst>
|
||||
<fcst>151200</fcst>
|
||||
<fcst>172800</fcst>
|
||||
<fcst>194400</fcst>
|
||||
<fcst>216000</fcst>
|
||||
<fcst>237600</fcst>
|
||||
<fcst>259200</fcst>
|
||||
<fcst>280800</fcst>
|
||||
</valtimeMINUSreftime>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>Surge10Pct</short_name>
|
||||
<long_name>10% Exceedance Height</long_name>
|
||||
<units>feet</units>
|
||||
<udunits>feet</udunits>
|
||||
<uiname>SURGE10pct</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>25.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>Surge20Pct</short_name>
|
||||
<long_name>20% Exceedance Height</long_name>
|
||||
<units>feet</units>
|
||||
<udunits>feet</udunits>
|
||||
<uiname>SURGE20pct</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>25.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>Surge30Pct</short_name>
|
||||
<long_name>30% Exceedance Height</long_name>
|
||||
<units>feet</units>
|
||||
<udunits>feet</udunits>
|
||||
<uiname>SURGE30pct</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>25.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>Surge40Pct</short_name>
|
||||
<long_name>40% Exceedance Height</long_name>
|
||||
<units>feet</units>
|
||||
<udunits>feet</udunits>
|
||||
<uiname>SURGE40pct</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>25.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>Surge50Pct</short_name>
|
||||
<long_name>50% Exceedance Height</long_name>
|
||||
<units>feet</units>
|
||||
<udunits>feet</udunits>
|
||||
<uiname>SURGE50pct</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>25.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge0Ft</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 0 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge00c</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge1Ft</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 1 foot</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge01c</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge2Ft</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 2 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge02c</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge3Ft</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 3 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge03c</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge4Ft</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 4 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge04c</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge5Ft</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 5 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge05c</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge6Ft</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 6 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge06c</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge7Ft</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 7 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge07c</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge8Ft</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 8 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge08c</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge9Ft</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 9 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge09c</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge10Ft</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 10 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge10c</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge11Ft</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 11 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge11c</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge12Ft</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 12 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge12c</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge13Ft</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 13 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge13c</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge14Ft</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 14 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge14c</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge15Ft</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 15 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge15c</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge16Ft</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 16 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge16c</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge17Ft</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 17 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge17c</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge18Ft</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 18 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge18c</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge19Ft</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 19 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge19c</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge20Ft</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 20 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge20c</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>Surge10pct6hr</short_name>
|
||||
<long_name>10% Exceedance Height</long_name>
|
||||
<units>feet</units>
|
||||
<udunits>feet</udunits>
|
||||
<uiname>SURGE10pct6hr</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>25.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>Surge20pct6hr</short_name>
|
||||
<long_name>20% Exceedance Height</long_name>
|
||||
<units>feet</units>
|
||||
<udunits>feet</udunits>
|
||||
<uiname>SURGE20pct6hr</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>25.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>Surge30pct6hr</short_name>
|
||||
<long_name>30% Exceedance Height</long_name>
|
||||
<units>feet</units>
|
||||
<udunits>feet</udunits>
|
||||
<uiname>SURGE30pct6hr</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>25.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>Surge40pct6hr</short_name>
|
||||
<long_name>40% Exceedance Height</long_name>
|
||||
<units>feet</units>
|
||||
<udunits>feet</udunits>
|
||||
<uiname>SURGE40pct6hr</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>25.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>Surge50pct6hr</short_name>
|
||||
<long_name>50% Exceedance Height</long_name>
|
||||
<units>feet</units>
|
||||
<udunits>feet</udunits>
|
||||
<uiname>SURGE50pct6hr</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>25.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge0ft6hr</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 0 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge006hr</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge1ft6hr</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 1 foot</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge016hr</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge2ft6hr</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 2 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge026hr</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge3ft6hr</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 3 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge036hr</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge4ft6hr</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 4 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge046hr</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge5ft6hr</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 5 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge056hr</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge6ft6hr</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 6 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge066hr</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge7ft6hr</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 7 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge076hr</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge8ft6hr</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 8 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge086hr</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge9ft6hr</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 9 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge096hr</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge10ft6hr</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 10 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge106hr</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge11ft6hr</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 11 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge116hr</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge12ft6hr</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 12 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge126hr</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge13ft6hr</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 13 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge136hr</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge14ft6hr</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 14 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge146hr</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge15ft6hr</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 15 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge156hr</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge16ft6hr</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 16 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge166hr</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge17ft6hr</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 17 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge176hr</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge18ft6hr</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 18 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge186hr</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge19ft6hr</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 19 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge196hr</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>PSurge20ft6hr</short_name>
|
||||
<long_name>Prob of Hurricane Storm Surge > 20 feet</long_name>
|
||||
<units>%</units>
|
||||
<udunits>percent</udunits>
|
||||
<uiname>ProbSurge206hr</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-9999.0</fillValue>
|
||||
<n3D>0</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<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>/s</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>staticSpacing</short_name>
|
||||
<long_name>Grid spacing</long_name>
|
||||
<units>meters</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>staticTopo</short_name>
|
||||
<long_name>Topography</long_name>
|
||||
<units>meters</units>
|
||||
<fillValue>-99999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
</gridParamInfo>
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,249 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<gridParamInfo xmlns:ns2="group">
|
||||
<valtimeMINUSreftime>
|
||||
<fcst>0</fcst>
|
||||
<fcst>10800</fcst>
|
||||
<fcst>21600</fcst>
|
||||
<fcst>32400</fcst>
|
||||
<fcst>43200</fcst>
|
||||
<fcst>54000</fcst>
|
||||
<fcst>64800</fcst>
|
||||
<fcst>75600</fcst>
|
||||
<fcst>86400</fcst>
|
||||
<fcst>97200</fcst>
|
||||
<fcst>108000</fcst>
|
||||
<fcst>118800</fcst>
|
||||
<fcst>129600</fcst>
|
||||
<fcst>140400</fcst>
|
||||
<fcst>151200</fcst>
|
||||
<fcst>162000</fcst>
|
||||
<fcst>172800</fcst>
|
||||
<fcst>183600</fcst>
|
||||
<fcst>194400</fcst>
|
||||
<fcst>205200</fcst>
|
||||
<fcst>216000</fcst>
|
||||
<fcst>226800</fcst>
|
||||
<fcst>237600</fcst>
|
||||
<fcst>248400</fcst>
|
||||
<fcst>259200</fcst>
|
||||
<fcst>280800</fcst>
|
||||
<fcst>302400</fcst>
|
||||
<fcst>324000</fcst>
|
||||
<fcst>345600</fcst>
|
||||
<fcst>367200</fcst>
|
||||
<fcst>388800</fcst>
|
||||
<fcst>410400</fcst>
|
||||
<fcst>432000</fcst>
|
||||
<fcst>453600</fcst>
|
||||
</valtimeMINUSreftime>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>perpw</short_name>
|
||||
<long_name>Primary wave period</long_name>
|
||||
<units>s</units>
|
||||
<udunits>seconds</udunits>
|
||||
<uiname>primaryWavePeriod</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wvhgt</short_name>
|
||||
<long_name>Wind wave height</long_name>
|
||||
<units>m</units>
|
||||
<udunits>meters</udunits>
|
||||
<uiname>heightWindWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>50.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>staticSpacing</short_name>
|
||||
<long_name>Grid spacing</long_name>
|
||||
<units>meters</units>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>vw</short_name>
|
||||
<long_name>v-component wind</long_name>
|
||||
<units>m/s</units>
|
||||
<udunits>meter/sec</udunits>
|
||||
<uiname>vWind</uiname>
|
||||
<valid_range>-150.0</valid_range>
|
||||
<valid_range>150.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>swdir</short_name>
|
||||
<long_name>Swell peak period direction</long_name>
|
||||
<units>degree true</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>swellWaveDir</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>OSEQD 1 2</levelsDesc>
|
||||
<levels>
|
||||
<level>OSEQD1</level>
|
||||
<level>OSEQD2</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<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>/s</units>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wd</short_name>
|
||||
<long_name>Wind Direction</long_name>
|
||||
<units>degreeTrue</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>windDir</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wvdir</short_name>
|
||||
<long_name>Direction of wind waves (from which)</long_name>
|
||||
<units>degree true</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>dirWindWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>wvper</short_name>
|
||||
<long_name>Wind wave peak period</long_name>
|
||||
<units>s</units>
|
||||
<udunits>seconds</udunits>
|
||||
<uiname>peakPeriodWindWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>htsgw</short_name>
|
||||
<long_name>Sig height combined wind waves and swell</long_name>
|
||||
<units>m</units>
|
||||
<udunits>meters</udunits>
|
||||
<uiname>heightWindWavesandSwell</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>50.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>swper</short_name>
|
||||
<long_name>Swell wave peak period</long_name>
|
||||
<units>s</units>
|
||||
<udunits>seconds</udunits>
|
||||
<uiname>swellWavePeriod</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>100.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>OSEQD 1 2</levelsDesc>
|
||||
<levels>
|
||||
<level>OSEQD1</level>
|
||||
<level>OSEQD2</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>swell</short_name>
|
||||
<long_name>Significant swell wave height</long_name>
|
||||
<units>m</units>
|
||||
<udunits>meters</udunits>
|
||||
<uiname>heightSwellWaves</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>50.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>OSEQD 1 2</levelsDesc>
|
||||
<levels>
|
||||
<level>OSEQD1</level>
|
||||
<level>OSEQD2</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>dirpw</short_name>
|
||||
<long_name>Primary wave direction</long_name>
|
||||
<units>degree true</units>
|
||||
<udunits>degree_True</udunits>
|
||||
<uiname>primaryWaveDir</uiname>
|
||||
<valid_range>0.0</valid_range>
|
||||
<valid_range>360.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>uw</short_name>
|
||||
<long_name>u-component wind</long_name>
|
||||
<units>m/s</units>
|
||||
<udunits>meter/sec</udunits>
|
||||
<uiname>uWind</uiname>
|
||||
<valid_range>-150.0</valid_range>
|
||||
<valid_range>150.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
|
||||
<short_name>ws</short_name>
|
||||
<long_name>Wind Speed</long_name>
|
||||
<units>m/s</units>
|
||||
<udunits>meter/sec</udunits>
|
||||
<uiname>windSpeed</uiname>
|
||||
<valid_range>-150.0</valid_range>
|
||||
<valid_range>150.0</valid_range>
|
||||
<fillValue>-999999.0</fillValue>
|
||||
<n3D>1</n3D>
|
||||
<levelsDesc>SFC</levelsDesc>
|
||||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
</gridParamInfo>
|
|
@ -110,7 +110,7 @@
|
|||
<level>SFC</level>
|
||||
</levels>
|
||||
</gridParameterInfo>
|
||||
<gribParameterInfo xsi:type="parameterInfo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<gridParameterInfo xsi:type="parameterInfo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<short_name>hailprob</short_name>
|
||||
<long_name>Hail Probability</long_name>
|
||||
<units>%</units>
|
||||
|
@ -123,8 +123,8 @@
|
|||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gribParameterInfo>
|
||||
<gribParameterInfo xsi:type="parameterInfo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xsi:type="parameterInfo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<short_name>windprob</short_name>
|
||||
<long_name>Damaging Wind Probability</long_name>
|
||||
<units>%</units>
|
||||
|
@ -137,8 +137,8 @@
|
|||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gribParameterInfo>
|
||||
<gribParameterInfo xsi:type="parameterInfo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xsi:type="parameterInfo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<short_name>sigtrndprob</short_name>
|
||||
<long_name>Extreme Tornado Probability</long_name>
|
||||
<units>%</units>
|
||||
|
@ -151,8 +151,8 @@
|
|||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gribParameterInfo>
|
||||
<gribParameterInfo xsi:type="parameterInfo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xsi:type="parameterInfo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<short_name>sighailprob</short_name>
|
||||
<long_name>Extreme Hail Probability</long_name>
|
||||
<units>%</units>
|
||||
|
@ -165,8 +165,8 @@
|
|||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gribParameterInfo>
|
||||
<gribParameterInfo xsi:type="parameterInfo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xsi:type="parameterInfo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<short_name>sigwindprob</short_name>
|
||||
<long_name>Extreme Damaging Wind Probability</long_name>
|
||||
<units>%</units>
|
||||
|
@ -179,8 +179,8 @@
|
|||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gribParameterInfo>
|
||||
<gribParameterInfo xsi:type="parameterInfo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xsi:type="parameterInfo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<short_name>prsvr</short_name>
|
||||
<long_name>Combined Severe Probability</long_name>
|
||||
<units>%</units>
|
||||
|
@ -193,8 +193,8 @@
|
|||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gribParameterInfo>
|
||||
<gribParameterInfo xsi:type="parameterInfo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
</gridParameterInfo>
|
||||
<gridParameterInfo xsi:type="parameterInfo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<short_name>prsigsv</short_name>
|
||||
<long_name>Combined Extreme Severe Probability</long_name>
|
||||
<units>%</units>
|
||||
|
@ -208,5 +208,5 @@
|
|||
<levels>
|
||||
<level>SFC</level>
|
||||
</levels>
|
||||
</gribParameterInfo>
|
||||
</gridParameterInfo>
|
||||
</gridParamInfo>
|
||||
|
|
|
@ -59,7 +59,7 @@ from com.raytheon.uf.common.parameter.mapping import ParameterMapper;
|
|||
|
||||
# Static values for accessing parameter lookup tables
|
||||
PARAMETER_TABLE = "4.2"
|
||||
GENPROCESS_TABLE = "A"
|
||||
PROCESS_TYPE_TABLE = "4.3"
|
||||
LEVELS_TABLE = "4.5"
|
||||
DOT = "."
|
||||
MISSING = "Missing"
|
||||
|
@ -429,6 +429,9 @@ class GribDecoder():
|
|||
gribDict['parameterName'] = MISSING
|
||||
parameterAbbreviation = MISSING
|
||||
gribDict['parameterUnit'] = MISSING
|
||||
|
||||
processType = int(pdsTemplate[2])
|
||||
gribDict['processType'] = str(GribTableLookup.getInstance().getTableValue(centerID, subcenterID, PROCESS_TYPE_TABLE, processType))
|
||||
|
||||
levelName = None;
|
||||
levelUnit = None;
|
||||
|
@ -1157,7 +1160,8 @@ class GribDecoder():
|
|||
subcenter = gribDict['subcenter']
|
||||
|
||||
process = gribDict['genprocess']
|
||||
gridModel = GribModelLookup.getInstance().getModel(center, subcenter, grid, process)
|
||||
processType = gribDict['processType']
|
||||
gridModel = GribModelLookup.getInstance().getModel(center, subcenter, grid, process, processType)
|
||||
return gridModel
|
||||
|
||||
def _createModelName(self, gribDict, grid):
|
||||
|
@ -1165,7 +1169,8 @@ class GribDecoder():
|
|||
subcenter = gribDict['subcenter']
|
||||
|
||||
process = gribDict['genprocess']
|
||||
return GribModelLookup.getInstance().getModelName(center, subcenter, grid, process)
|
||||
processType = gribDict['processType']
|
||||
return GribModelLookup.getInstance().getModelName(center, subcenter, grid, process, processType)
|
||||
|
||||
def _checkForecastFlag(self, gribDict, grid, dataTime):
|
||||
gridModel = self._getGridModel(gribDict, grid)
|
||||
|
|
|
@ -899,7 +899,7 @@ public class Grib1Decoder extends AbstractDecoder {
|
|||
private String createModelName(int centerId, int subcenterId, int process,
|
||||
GridCoverage grid) {
|
||||
return GribModelLookup.getInstance().getModelName(centerId,
|
||||
subcenterId, grid, process);
|
||||
subcenterId, grid, process, null);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -915,7 +915,7 @@ public class Grib1Decoder extends AbstractDecoder {
|
|||
private void checkForecastFlag(DataTime time, int centerId,
|
||||
int subcenterId, int process, GridCoverage grid) {
|
||||
GridModel gridModel = GribModelLookup.getInstance().getModel(centerId,
|
||||
subcenterId, grid, process);
|
||||
subcenterId, grid, process, null);
|
||||
if ((gridModel != null) && gridModel.getAnalysisOnly()) {
|
||||
time.getUtilityFlags().remove(FLAG.FCST_USED);
|
||||
}
|
||||
|
|
|
@ -225,7 +225,7 @@ public class EnsembleGridAssembler implements IDecoderPostProcessor {
|
|||
updateExistingRecord(record, assembledRecord, thinned, dao);
|
||||
}
|
||||
EDEXUtil.getMessageProducer().sendAsync("notificationAggregation",
|
||||
new PluginDataObject[] { record });
|
||||
new PluginDataObject[] { assembledRecord });
|
||||
}
|
||||
|
||||
private GridRecord createAssembledRecord(GridRecord record,
|
||||
|
|
|
@ -25,7 +25,6 @@ import java.util.List;
|
|||
import com.raytheon.edex.plugin.grib.exception.GribException;
|
||||
import com.raytheon.uf.common.dataplugin.grid.GridConstants;
|
||||
import com.raytheon.uf.common.dataplugin.grid.GridRecord;
|
||||
import com.raytheon.uf.common.dataquery.db.QueryParam.QueryOperand;
|
||||
import com.raytheon.uf.edex.database.plugin.PluginFactory;
|
||||
import com.raytheon.uf.edex.database.query.DatabaseQuery;
|
||||
import com.raytheon.uf.edex.plugin.grid.dao.GridDao;
|
||||
|
@ -43,6 +42,7 @@ import com.raytheon.uf.edex.plugin.grid.dao.GridDao;
|
|||
* Aug 31, 2010 5875 bphillip Initial Creation
|
||||
* Mar 26, 2013 1821 bsteffen Optimize FFG version query.
|
||||
* Oct 15, 2013 2473 bsteffen Remove deprecated method calls.
|
||||
* Apr 25, 2014 2060 njensen Remove dependency on grid dataURI column
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -57,13 +57,14 @@ public class FFGGribPostProcessor implements IDecoderPostProcessor {
|
|||
try {
|
||||
GridDao gribDao = (GridDao) PluginFactory.getInstance()
|
||||
.getPluginDao(GridConstants.GRID);
|
||||
record.setSecondaryId("%");
|
||||
record.setDataURI(null);
|
||||
|
||||
/*
|
||||
* All we want to do is check for pre-existing records, and if some
|
||||
* are found, increment the version number in the secondaryId so
|
||||
* it's not identified as a duplicate
|
||||
*/
|
||||
DatabaseQuery query = new DatabaseQuery(GridRecord.class);
|
||||
query.addReturnedField(GridConstants.SECONDARY_ID);
|
||||
// The dataURI constraint does the final selection but the other
|
||||
// constraints help the db optimize efficiently.
|
||||
query.addQueryParam(GridConstants.DATASET_ID, record.getDatasetId());
|
||||
query.addQueryParam(GridConstants.PARAMETER_ABBREVIATION, record
|
||||
.getParameter().getAbbreviation());
|
||||
|
@ -71,9 +72,21 @@ public class FFGGribPostProcessor implements IDecoderPostProcessor {
|
|||
.getId());
|
||||
query.addQueryParam(GridConstants.LOCATION_ID, record.getLocation()
|
||||
.getId());
|
||||
query.addQueryParam("dataURI", record.getDataURI(),
|
||||
QueryOperand.LIKE);
|
||||
query.addQueryParam("dataTime.refTime", record.getDataTime()
|
||||
.getRefTime());
|
||||
query.addQueryParam("dataTime.fcstTime", record.getDataTime()
|
||||
.getFcstTime());
|
||||
query.addQueryParam(GridConstants.ENSEMBLE_ID,
|
||||
record.getEnsembleId());
|
||||
List<?> result = gribDao.queryByCriteria(query);
|
||||
|
||||
/*
|
||||
* TODO this does not appear to be cluster safe, but we probably
|
||||
* dodge it due to the low frequency of this data arriving for the
|
||||
* same parameters, time, etc
|
||||
*/
|
||||
|
||||
// find the highest version number
|
||||
int maxVersion = -1;
|
||||
for (Object row : result) {
|
||||
String secondaryId = (String) row;
|
||||
|
@ -90,6 +103,7 @@ public class FFGGribPostProcessor implements IDecoderPostProcessor {
|
|||
}
|
||||
record.setSecondaryId("Version" + (maxVersion + 1));
|
||||
record.getInfo().setId(null);
|
||||
// clear out dataURI in case it was cached
|
||||
record.setDataURI(null);
|
||||
} catch (Exception e) {
|
||||
throw new GribException("Error decoding FFG grid", e);
|
||||
|
|
|
@ -25,7 +25,7 @@ import java.util.Map;
|
|||
|
||||
import javax.measure.converter.UnitConverter;
|
||||
import javax.measure.unit.SI;
|
||||
import javax.xml.bind.JAXBException;
|
||||
import javax.xml.bind.JAXB;
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlAttribute;
|
||||
|
@ -39,9 +39,7 @@ import com.raytheon.uf.common.localization.ILocalizationFileObserver;
|
|||
import com.raytheon.uf.common.localization.IPathManager;
|
||||
import com.raytheon.uf.common.localization.LocalizationFile;
|
||||
import com.raytheon.uf.common.localization.PathManagerFactory;
|
||||
import com.raytheon.uf.common.localization.exception.LocalizationException;
|
||||
import com.raytheon.uf.common.parameter.Parameter;
|
||||
import com.raytheon.uf.common.serialization.JAXBManager;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
|
@ -62,6 +60,7 @@ import com.raytheon.uf.common.status.UFStatus.Priority;
|
|||
* Date Ticket# Engineer Description
|
||||
* ------------- -------- ----------- --------------------------
|
||||
* Mar 28, 2010 2874 bsteffen Initial creation
|
||||
* Apr 25, 2014 2060 njensen Use JAXB instead of JAXBManager
|
||||
*
|
||||
*
|
||||
* </pre>
|
||||
|
@ -93,31 +92,23 @@ public class TemperatureCorrectionPostProcessor implements
|
|||
}
|
||||
}
|
||||
|
||||
protected LocalizationFile readConfiguration() throws GribException {
|
||||
protected LocalizationFile readConfiguration() {
|
||||
LocalizationFile file = PathManagerFactory.getPathManager()
|
||||
.getStaticLocalizationFile(LOCALIZATON_LOCATION);
|
||||
Map<String, Double> paramThresholdMap = new HashMap<String, Double>(8);
|
||||
if (file != null && file.exists()) {
|
||||
JAXBManager manager = null;
|
||||
try {
|
||||
manager = new JAXBManager(TemperatureCorrectionParameters.class);
|
||||
|
||||
} catch (JAXBException e) {
|
||||
/* No hope of recovering */
|
||||
throw new GribException(
|
||||
"Error occured preparing to load temperate correction parameters.",
|
||||
e);
|
||||
}
|
||||
TemperatureCorrectionParameters params = null;
|
||||
try {
|
||||
params = file.jaxbUnmarshal(
|
||||
TemperatureCorrectionParameters.class, manager);
|
||||
} catch (LocalizationException e) {
|
||||
params = JAXB.unmarshal(file.getFile(),
|
||||
TemperatureCorrectionParameters.class);
|
||||
} catch (Exception e) {
|
||||
/* Some hope of recovering with a better file. */
|
||||
statusHandler
|
||||
.error("Error occured loading temperate correction parameters, verify the file is formatted correctly.",
|
||||
e);
|
||||
|
||||
}
|
||||
|
||||
if (params != null) {
|
||||
for (TemperatureCorrectionParameter param : params
|
||||
.getParameters()) {
|
||||
|
@ -134,7 +125,7 @@ public class TemperatureCorrectionPostProcessor implements
|
|||
public void fileUpdated(FileUpdatedMessage message) {
|
||||
try {
|
||||
readConfiguration();
|
||||
} catch (GribException e) {
|
||||
} catch (Exception e) {
|
||||
statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(), e);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -55,6 +55,8 @@ import com.raytheon.uf.common.util.mapping.MultipleMappingException;
|
|||
* reverse.
|
||||
* Apr 30, 2013 1961 bsteffen Add ability to disable grib tables.
|
||||
* Oct 14, 2013 2473 bsteffen Remove lookup of deprecated grib files.
|
||||
* Apr 25, 2014 2874 bsteffen Add processType
|
||||
*
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -94,42 +96,60 @@ public class GribModelLookup {
|
|||
initModelList();
|
||||
}
|
||||
|
||||
public GridModel getModel(int center, int subcenter, String grid,
|
||||
int process) {
|
||||
GridModel model = models.get(toKey(center, subcenter, grid, process));
|
||||
if (model == null) {
|
||||
// See if there is a version for all grids.
|
||||
model = models.get(toKey(center, subcenter, null, process));
|
||||
/**
|
||||
* Get a model based off some fields in the grib file.
|
||||
*
|
||||
* @param center
|
||||
* the id of the center
|
||||
* @param subcenter
|
||||
* the id of the subcenter
|
||||
* @param grid
|
||||
* gridcoverage as defined in the grib file(don't use subgrids)
|
||||
* @param process
|
||||
* the process id
|
||||
* @param processType
|
||||
* the process type, although this is a byte in the grib file
|
||||
* this method expects the byte to be resolved to a string by
|
||||
* looking up the type id in the grib tables(4.3). grib1 does not
|
||||
* include a value for process type so null is acceptable.
|
||||
* @return The grid model if one is find or null if no such model is defined
|
||||
* in the localization files..
|
||||
*/
|
||||
public GridModel getModel(int center, int subcenter, GridCoverage grid,
|
||||
int process, String processType) {
|
||||
/* Match all fields */
|
||||
GridModel model = getModelSimple(center, subcenter, grid, process,
|
||||
processType);
|
||||
if (model == null && processType != null) {
|
||||
/* Match with no processType specified */
|
||||
model = getModelSimple(center, subcenter, grid, process, null);
|
||||
}
|
||||
if (model == null && grid != null) {
|
||||
/* Match with no grid specified */
|
||||
model = getModelSimple(center, subcenter, null, process,
|
||||
processType);
|
||||
}
|
||||
if (model == null && grid != null && processType != null) {
|
||||
/* Match with no grid or processType */
|
||||
model = getModelSimple(center, subcenter, null, process, null);
|
||||
}
|
||||
return model;
|
||||
}
|
||||
|
||||
public GridModel getModel(int center, int subcenter, GridCoverage grid,
|
||||
int process) {
|
||||
GridModel model = null;
|
||||
if (grid.getName() != null) {
|
||||
models.get(toKey(center, subcenter, grid.getName(), process));
|
||||
}
|
||||
if (model == null) {
|
||||
private GridModel getModelSimple(int center, int subcenter,
|
||||
GridCoverage grid, int process, String processType) {
|
||||
if (grid != null) {
|
||||
for (String gribGridName : GribSpatialCache.getInstance()
|
||||
.getGribCoverageNames(grid)) {
|
||||
model = models.get(toKey(center, subcenter, gribGridName,
|
||||
process));
|
||||
String key = toKey(center, subcenter, gribGridName, process,
|
||||
processType);
|
||||
GridModel model = models.get(key);
|
||||
if (model != null) {
|
||||
break;
|
||||
return model;
|
||||
}
|
||||
}
|
||||
if (model == null) {
|
||||
// last step is to look for a matching center, subcenter, and
|
||||
// process with no grid.
|
||||
model = models.get(toKey(center, subcenter, null, process));
|
||||
}
|
||||
}
|
||||
return model;
|
||||
}
|
||||
|
||||
public GridModel getModel(int center, int subcenter, int gridid, int process) {
|
||||
return getModel(center, subcenter, String.valueOf(gridid), process);
|
||||
return null;
|
||||
}
|
||||
|
||||
public GridModel getModelByName(String name) {
|
||||
|
@ -141,8 +161,9 @@ public class GribModelLookup {
|
|||
}
|
||||
|
||||
public String getModelName(int center, int subcenter, GridCoverage grid,
|
||||
int process) {
|
||||
GridModel model = getModel(center, subcenter, grid, process);
|
||||
int process, String processType) {
|
||||
GridModel model = getModel(center, subcenter, grid, process,
|
||||
processType);
|
||||
if (model == null || model.getName() == null) {
|
||||
String cenSubProc = "GribModel:" + String.valueOf(center) + ":"
|
||||
+ String.valueOf(subcenter) + ":" + String.valueOf(process);
|
||||
|
@ -219,41 +240,32 @@ public class GribModelLookup {
|
|||
|
||||
private void addModels(GridModelSet modelSet) {
|
||||
for (GridModel model : modelSet.getModels()) {
|
||||
int subCenter = Integer.parseInt(model.getSubCenter());
|
||||
modelsByName.put(model.getName(), model);
|
||||
for (int process : model.getProcess()) {
|
||||
if (model.getAllGrids().isEmpty()) {
|
||||
models.put(
|
||||
toKey(model.getCenter(),
|
||||
Integer.parseInt(model.getSubCenter()),
|
||||
null, process), model);
|
||||
String key = toKey(model.getCenter(), subCenter, null,
|
||||
process, model.getProcessType());
|
||||
models.put(key, model);
|
||||
}
|
||||
for (String grid : model.getAllGrids()) {
|
||||
models.put(
|
||||
toKey(model.getCenter(),
|
||||
Integer.parseInt(model.getSubCenter()),
|
||||
grid, process), model);
|
||||
String key = toKey(model.getCenter(), subCenter, grid,
|
||||
process, model.getProcessType());
|
||||
models.put(key, model);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private String toKey(Integer center, Integer subcenter, String grid,
|
||||
Integer process) {
|
||||
Integer process, String processType) {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
builder.append(center);
|
||||
builder.append(subcenter);
|
||||
builder.append(grid);
|
||||
builder.append(process);
|
||||
builder.append(processType);
|
||||
return builder.toString();
|
||||
// final int PRIME = 31;
|
||||
// int result = 1;
|
||||
// result = PRIME * result + ((center == null) ? 0 : center.hashCode());
|
||||
// result = PRIME * result
|
||||
// + ((subcenter == null) ? 0 : subcenter.hashCode());
|
||||
// result = PRIME * result + ((grid == null) ? 0 : grid.hashCode());
|
||||
// result = PRIME * result + ((process == null) ? 0 :
|
||||
// process.hashCode());
|
||||
// return result;
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -76,6 +76,10 @@ public class GridModel {
|
|||
@XmlElement(name = "id")
|
||||
private ArrayList<Integer> process;
|
||||
|
||||
/** The generating processes associated with this model */
|
||||
@XmlElement
|
||||
private String processType;
|
||||
|
||||
@XmlElement
|
||||
private String alias;
|
||||
|
||||
|
@ -130,6 +134,14 @@ public class GridModel {
|
|||
public void setProcess(ArrayList<Integer> process) {
|
||||
this.process = process;
|
||||
}
|
||||
|
||||
public String getProcessType() {
|
||||
return processType;
|
||||
}
|
||||
|
||||
public void setProcessType(String processType) {
|
||||
this.processType = processType;
|
||||
}
|
||||
|
||||
public Integer getCenter() {
|
||||
return center;
|
||||
|
|
|
@ -23,10 +23,10 @@
|
|||
<description>HudsonBaffin Real Time Ocean Forecast System</description>
|
||||
<firstGridPointCorner>LowerLeft</firstGridPointCorner>
|
||||
<spacingUnit>degree</spacingUnit>
|
||||
<la1>45.0</la1>
|
||||
<la1>40.0</la1>
|
||||
<lo1>251.0</lo1>
|
||||
<nx>328</nx>
|
||||
<ny>132</ny>
|
||||
<ny>152</ny>
|
||||
<dx>0.25</dx>
|
||||
<dy>0.25</dy>
|
||||
</latLonGridCoverage>
|
||||
|
|
|
@ -27,10 +27,10 @@
|
|||
<id>RTOFS-Alaska</id>
|
||||
</grids>
|
||||
<process>
|
||||
<id>0</id>
|
||||
<id>85</id>
|
||||
</process>
|
||||
<processType>Forecast</processType>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<name>RTOFS-Arctic</name>
|
||||
<center>7</center>
|
||||
|
@ -39,10 +39,10 @@
|
|||
<id>RTOFS-Arctic</id>
|
||||
</grids>
|
||||
<process>
|
||||
<id>0</id>
|
||||
<id>85</id>
|
||||
</process>
|
||||
<processType>Forecast</processType>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<name>RTOFS-Bering</name>
|
||||
<center>7</center>
|
||||
|
@ -51,10 +51,10 @@
|
|||
<id>RTOFS-Bering</id>
|
||||
</grids>
|
||||
<process>
|
||||
<id>0</id>
|
||||
<id>85</id>
|
||||
</process>
|
||||
<processType>Forecast</processType>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<name>RTOFS-Guam</name>
|
||||
<center>7</center>
|
||||
|
@ -63,10 +63,10 @@
|
|||
<id>RTOFS-Guam</id>
|
||||
</grids>
|
||||
<process>
|
||||
<id>0</id>
|
||||
<id>85</id>
|
||||
</process>
|
||||
<processType>Forecast</processType>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<name>RTOFS-GulfAlaska</name>
|
||||
<center>7</center>
|
||||
|
@ -75,10 +75,10 @@
|
|||
<id>RTOFS-GulfAlaska</id>
|
||||
</grids>
|
||||
<process>
|
||||
<id>0</id>
|
||||
<id>85</id>
|
||||
</process>
|
||||
<processType>Forecast</processType>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<name>RTOFS-Honolulu</name>
|
||||
<center>7</center>
|
||||
|
@ -87,10 +87,10 @@
|
|||
<id>RTOFS-Honolulu</id>
|
||||
</grids>
|
||||
<process>
|
||||
<id>0</id>
|
||||
<id>85</id>
|
||||
</process>
|
||||
<processType>Forecast</processType>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<name>RTOFS-HudsonBaffin</name>
|
||||
<center>7</center>
|
||||
|
@ -99,10 +99,10 @@
|
|||
<id>RTOFS-HudsonBaffin</id>
|
||||
</grids>
|
||||
<process>
|
||||
<id>0</id>
|
||||
<id>85</id>
|
||||
</process>
|
||||
<processType>Forecast</processType>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<name>RTOFS-Samoa</name>
|
||||
<center>7</center>
|
||||
|
@ -111,10 +111,10 @@
|
|||
<id>RTOFS-Samoa</id>
|
||||
</grids>
|
||||
<process>
|
||||
<id>0</id>
|
||||
<id>85</id>
|
||||
</process>
|
||||
<processType>Forecast</processType>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<name>RTOFS-TropPaciLowres</name>
|
||||
<center>7</center>
|
||||
|
@ -123,10 +123,10 @@
|
|||
<id>RTOFS-TropPaciLowres</id>
|
||||
</grids>
|
||||
<process>
|
||||
<id>0</id>
|
||||
<id>85</id>
|
||||
</process>
|
||||
<processType>Forecast</processType>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<name>RTOFS-WestAtl</name>
|
||||
<center>7</center>
|
||||
|
@ -135,10 +135,10 @@
|
|||
<id>RTOFS-WestAtl</id>
|
||||
</grids>
|
||||
<process>
|
||||
<id>0</id>
|
||||
<id>85</id>
|
||||
</process>
|
||||
<processType>Forecast</processType>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<name>RTOFS-WestConus</name>
|
||||
<center>7</center>
|
||||
|
@ -147,10 +147,10 @@
|
|||
<id>RTOFS-WestConus</id>
|
||||
</grids>
|
||||
<process>
|
||||
<id>0</id>
|
||||
<id>85</id>
|
||||
</process>
|
||||
<processType>Forecast</processType>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<name>RTOFS-Atlantic</name>
|
||||
<center>7</center>
|
||||
|
@ -160,7 +160,6 @@
|
|||
<id>45</id>
|
||||
</process>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<name>RTOFS-Atlantic-HiRes</name>
|
||||
<center>7</center>
|
||||
|
@ -169,8 +168,8 @@
|
|||
<process>
|
||||
<id>45</id>
|
||||
</process>
|
||||
<processType>Forecast</processType>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<name>RTOFS-GulfMaine</name>
|
||||
<center>7</center>
|
||||
|
@ -179,8 +178,8 @@
|
|||
<process>
|
||||
<id>45</id>
|
||||
</process>
|
||||
<processType>Forecast</processType>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<name>RTOFS-GulfMexico</name>
|
||||
<center>7</center>
|
||||
|
@ -189,8 +188,8 @@
|
|||
<process>
|
||||
<id>45</id>
|
||||
</process>
|
||||
<processType>Forecast</processType>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<name>RTOFS-GulfStream</name>
|
||||
<center>7</center>
|
||||
|
@ -199,5 +198,187 @@
|
|||
<process>
|
||||
<id>45</id>
|
||||
</process>
|
||||
<processType>Forecast</processType>
|
||||
</model>
|
||||
<model>
|
||||
<name>RTOFS-Now-Alaska</name>
|
||||
<center>7</center>
|
||||
<subcenter>0</subcenter>
|
||||
<grids>
|
||||
<id>RTOFS-Alaska</id>
|
||||
</grids>
|
||||
<process>
|
||||
<id>85</id>
|
||||
</process>
|
||||
<processType>Nowcast</processType>
|
||||
</model>
|
||||
<model>
|
||||
<name>RTOFS-Now-Arctic</name>
|
||||
<center>7</center>
|
||||
<subcenter>0</subcenter>
|
||||
<grids>
|
||||
<id>RTOFS-Arctic</id>
|
||||
</grids>
|
||||
<process>
|
||||
<id>85</id>
|
||||
</process>
|
||||
<processType>Nowcast</processType>
|
||||
</model>
|
||||
<model>
|
||||
<name>RTOFS-Now-Bering</name>
|
||||
<center>7</center>
|
||||
<subcenter>0</subcenter>
|
||||
<grids>
|
||||
<id>RTOFS-Bering</id>
|
||||
</grids>
|
||||
<process>
|
||||
<id>85</id>
|
||||
</process>
|
||||
<processType>Nowcast</processType>
|
||||
</model>
|
||||
<model>
|
||||
<name>RTOFS-Now-Guam</name>
|
||||
<center>7</center>
|
||||
<subcenter>0</subcenter>
|
||||
<grids>
|
||||
<id>RTOFS-Guam</id>
|
||||
</grids>
|
||||
<process>
|
||||
<id>85</id>
|
||||
</process>
|
||||
<processType>Nowcast</processType>
|
||||
</model>
|
||||
<model>
|
||||
<name>RTOFS-Now-GulfAlaska</name>
|
||||
<center>7</center>
|
||||
<subcenter>0</subcenter>
|
||||
<grids>
|
||||
<id>RTOFS-GulfAlaska</id>
|
||||
</grids>
|
||||
<process>
|
||||
<id>85</id>
|
||||
</process>
|
||||
<processType>Nowcast</processType>
|
||||
</model>
|
||||
<model>
|
||||
<name>RTOFS-Now-Honolulu</name>
|
||||
<center>7</center>
|
||||
<subcenter>0</subcenter>
|
||||
<grids>
|
||||
<id>RTOFS-Honolulu</id>
|
||||
</grids>
|
||||
<process>
|
||||
<id>85</id>
|
||||
</process>
|
||||
<processType>Nowcast</processType>
|
||||
</model>
|
||||
<model>
|
||||
<name>RTOFS-Now-HudsonBaffin</name>
|
||||
<center>7</center>
|
||||
<subcenter>0</subcenter>
|
||||
<grids>
|
||||
<id>RTOFS-HudsonBaffin</id>
|
||||
</grids>
|
||||
<process>
|
||||
<id>85</id>
|
||||
</process>
|
||||
<processType>Nowcast</processType>
|
||||
</model>
|
||||
<model>
|
||||
<name>RTOFS-Now-Samoa</name>
|
||||
<center>7</center>
|
||||
<subcenter>0</subcenter>
|
||||
<grids>
|
||||
<id>RTOFS-Samoa</id>
|
||||
</grids>
|
||||
<process>
|
||||
<id>85</id>
|
||||
</process>
|
||||
<processType>Nowcast</processType>
|
||||
</model>
|
||||
<model>
|
||||
<name>RTOFS-Now-TropPaciLowres</name>
|
||||
<center>7</center>
|
||||
<subcenter>0</subcenter>
|
||||
<grids>
|
||||
<id>RTOFS-TropPaciLowres</id>
|
||||
</grids>
|
||||
<process>
|
||||
<id>85</id>
|
||||
</process>
|
||||
<processType>Nowcast</processType>
|
||||
</model>
|
||||
<model>
|
||||
<name>RTOFS-Now-WestAtl</name>
|
||||
<center>7</center>
|
||||
<subcenter>0</subcenter>
|
||||
<grids>
|
||||
<id>RTOFS-WestAtl</id>
|
||||
</grids>
|
||||
<process>
|
||||
<id>85</id>
|
||||
</process>
|
||||
<processType>Nowcast</processType>
|
||||
</model>
|
||||
<model>
|
||||
<name>RTOFS-Now-WestConus</name>
|
||||
<center>7</center>
|
||||
<subcenter>0</subcenter>
|
||||
<grids>
|
||||
<id>RTOFS-WestConus</id>
|
||||
</grids>
|
||||
<process>
|
||||
<id>85</id>
|
||||
</process>
|
||||
<processType>Nowcast</processType>
|
||||
</model>
|
||||
<model>
|
||||
<name>RTOFS-Now-Atlantic</name>
|
||||
<center>7</center>
|
||||
<subcenter>0</subcenter>
|
||||
<grid>RTOFS-Atlantic</grid>
|
||||
<process>
|
||||
<id>45</id>
|
||||
</process>
|
||||
</model>
|
||||
<model>
|
||||
<name>RTOFS-Now-Atlantic-HiRes</name>
|
||||
<center>7</center>
|
||||
<subcenter>0</subcenter>
|
||||
<grid>RTOFS-Atlantic-HiRes</grid>
|
||||
<process>
|
||||
<id>45</id>
|
||||
</process>
|
||||
<processType>Nowcast</processType>
|
||||
</model>
|
||||
<model>
|
||||
<name>RTOFS-Now-GulfMaine</name>
|
||||
<center>7</center>
|
||||
<subcenter>0</subcenter>
|
||||
<grid>RTOFS-GulfMaine</grid>
|
||||
<process>
|
||||
<id>45</id>
|
||||
</process>
|
||||
<processType>Nowcast</processType>
|
||||
</model>
|
||||
<model>
|
||||
<name>RTOFS-Now-GulfMexico</name>
|
||||
<center>7</center>
|
||||
<subcenter>0</subcenter>
|
||||
<grid>RTOFS-GulfMexico</grid>
|
||||
<process>
|
||||
<id>45</id>
|
||||
</process>
|
||||
<processType>Nowcast</processType>
|
||||
</model>
|
||||
<model>
|
||||
<name>RTOFS-Now-GulfStream</name>
|
||||
<center>7</center>
|
||||
<subcenter>0</subcenter>
|
||||
<grid>RTOFS-GulfStream</grid>
|
||||
<process>
|
||||
<id>45</id>
|
||||
</process>
|
||||
<processType>Nowcast</processType>
|
||||
</model>
|
||||
</gribModelSet>
|
|
@ -2095,6 +2095,106 @@
|
|||
<id>11</id>
|
||||
</process>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<name>GLOBHwave</name>
|
||||
<center>7</center>
|
||||
<subcenter>0</subcenter>
|
||||
<grid>720311001</grid>
|
||||
<process>
|
||||
<id>13</id>
|
||||
</process>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<name>AKHwave10</name>
|
||||
<center>7</center>
|
||||
<subcenter>0</subcenter>
|
||||
<grid>15</grid>
|
||||
<process>
|
||||
<id>13</id>
|
||||
</process>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<name>AKHwave4</name>
|
||||
<center>7</center>
|
||||
<subcenter>0</subcenter>
|
||||
<grid>16</grid>
|
||||
<process>
|
||||
<id>13</id>
|
||||
</process>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<name>NAHwave15</name>
|
||||
<center>7</center>
|
||||
<subcenter>0</subcenter>
|
||||
<grid>238</grid>
|
||||
<process>
|
||||
<id>13</id>
|
||||
</process>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<name>NAHwave10</name>
|
||||
<center>7</center>
|
||||
<subcenter>0</subcenter>
|
||||
<grid>12</grid>
|
||||
<process>
|
||||
<id>13</id>
|
||||
</process>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<name>NAHwave4</name>
|
||||
<center>7</center>
|
||||
<subcenter>0</subcenter>
|
||||
<grid>18</grid>
|
||||
<process>
|
||||
<id>13</id>
|
||||
</process>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<name>NPHwave15</name>
|
||||
<center>7</center>
|
||||
<subcenter>0</subcenter>
|
||||
<grid>253</grid>
|
||||
<process>
|
||||
<id>13</id>
|
||||
</process>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<name>NPHwave10</name>
|
||||
<center>7</center>
|
||||
<subcenter>0</subcenter>
|
||||
<grid>13</grid>
|
||||
<process>
|
||||
<id>13</id>
|
||||
</process>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<name>NPHwave4</name>
|
||||
<center>7</center>
|
||||
<subcenter>0</subcenter>
|
||||
<grid>17</grid>
|
||||
<process>
|
||||
<id>13</id>
|
||||
</process>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<name>WPHwave10</name>
|
||||
<center>7</center>
|
||||
<subcenter>0</subcenter>
|
||||
<grid>14</grid>
|
||||
<process>
|
||||
<id>13</id>
|
||||
</process>
|
||||
</model>
|
||||
|
||||
<!-- END SUBCENTER 0 -->
|
||||
|
||||
|
|
|
@ -8,6 +8,11 @@
|
|||
6:6:Forecast error
|
||||
7:7:Analysis error
|
||||
8:8:Observation
|
||||
# 9-191 Reserved
|
||||
9:9:Climatological
|
||||
10:10:Probability-Weighted Forecast
|
||||
11:11:Bias-Corrected Ensemble Forecast
|
||||
# 12-13 Reserved
|
||||
14:14:Nowcast
|
||||
# 15-191 Reserved
|
||||
# 192-254 Reserved for local use
|
||||
255:255:Missing
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue