Merge branch 'omaha_13.5.2' (omaha_13.5.2-6) into omaha_13.5.3

Conflicts:
	cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/dialogs/TextEditorDialog.java
	ncep/gov.noaa.nws.ncep.edex.plugin.stormtrack/res/spring/stormtrack-ingest.xml

Former-commit-id: 3a859792ae [formerly 4a32664d5e [formerly 8b80beb42d0a76cd158857df7f497c6eff874fe1]]
Former-commit-id: 4a32664d5e
Former-commit-id: 3d7af2ceb3
This commit is contained in:
Richard Peter 2013-09-24 12:57:48 -05:00
commit 7455465049
183 changed files with 2016 additions and 1348 deletions

View file

@ -28,24 +28,39 @@
# Date Ticket# Engineer Description
# ------------ ---------- ----------- --------------------------
# 07/25/08 njensen Initial Creation.
#
# 09/05/13 #2329 randerso Added error handling
#
#
import sys
import sys, traceback, os, time, LogStream
from java.util import ArrayList
def getCombinations(comboName):
outercombos = ArrayList()
cmd = "md = __import__(\"" + comboName + "\")"
exec cmd
comList = md.Combinations
for i in comList:
combos = ArrayList()
innerList = i[0]
for zone in innerList:
combos.add(zone)
outercombos.add(combos)
return outercombos
try:
outercombos = ArrayList()
md = __import__(comboName)
comList = md.Combinations
for i in comList:
combos = ArrayList()
innerList = i[0]
for zone in innerList:
combos.add(zone)
outercombos.add(combos)
return outercombos
except AttributeError as e:
filename = md.__file__
if filename.endswith("pyc") or filename.endswith("pyo"):
filename = filename[:-1]
with open(filename,'r') as fd:
filecontents = fd.read()
LogStream.logProblem("\nERROR loading combinations file: "+ comboName +
"\nmd.__file__: " + md.__file__ +
"\ndir(md): " + str(dir(md)) +
"\n" + md.__file__ + " last modified: " + time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime(os.path.getmtime(md.__file__))) +
"\n" + filename + " last modified: " + time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime(os.path.getmtime(filename))) +
"\nContents of " + filename + "\n" + filecontents)
raise e

View file

@ -13,7 +13,7 @@
<dfltGeogArea>BasicWX_US</dfltGeogArea>
<resourceParameters>
pluginName=grid
GDFILE=FFG-TIR-HiRes
GDFILE=FFG-TIR
</resourceParameters>
<inventoryEnabled>true</inventoryEnabled>

View file

@ -34,6 +34,8 @@ import java.util.List;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Jul 24, 2013 2189 mschenke Initial creation
* Sep 13, 2013 16581 kshrestha Variables scaleFont and smoothing
* initialized to true.
*
* </pre>
*
@ -45,9 +47,9 @@ public abstract class AbstractAWTFont implements IFont {
protected Font font;
protected boolean scaleFont;
protected boolean scaleFont = true;
protected boolean smoothing;
protected boolean smoothing = true;
protected AbstractAWTFont(String fontName, float fontSize, Style[] styles) {
this(new Font(fontName, toAwtStyle(styles), (int) fontSize));

View file

@ -68,6 +68,8 @@ import com.vividsolutions.jts.geom.Coordinate;
* Aug 27, 2013 #2287 randerso Replaced hard coded constant with densityFactor
* parameter to allow application specific density
* scaling to better match A1 displays
* Sep 10, 2013 DR 16257 MPorricelli Fix so that wind for global grids displays on
* mercator maps.
*
* </pre>
*
@ -215,14 +217,31 @@ public abstract class AbstractGriddedDisplay<T> implements IRenderable {
// space
// Linear distance(between (0,0) and (0,1) makes more sense but
// looks to sparse.
DirectPosition2D p1 = new DirectPosition2D(0, 0);
DirectPosition2D p2 = new DirectPosition2D(1, 1);
try {
grid2grid.transform(p1, p1);
grid2grid.transform(p2, p2);
} catch (TransformException e) {
throw new VizException(e);
}
DirectPosition2D p1 = new DirectPosition2D();
DirectPosition2D p2 = new DirectPosition2D();
boolean doneTryingCoords = false;
int i = -1;
// starting with coords (0,0), (1,1), try until tranform succeeds,
// or until have gone through a set of diagonal coords
do {
try {
i++;
if (i + 1 < gridDims[0] && i + 1 < gridDims[1]) {
p1.x = p1.y = i;
p2.x = p2.y = i + 1;
grid2grid.transform(p1, p1);
grid2grid.transform(p2, p2);
doneTryingCoords = true;
}
} catch (TransformException e) {
if (i + 1 >= gridDims[0] || i + 1 >= gridDims[1]) {
doneTryingCoords = true;
throw new VizException(e);
}
}
} while (!doneTryingCoords);
pixelSize = p1.distance(p2);
IExtent viewPixelExtent = paintProps.getView().getExtent();

View file

@ -61,6 +61,10 @@ import com.vividsolutions.jts.geom.Coordinate;
* adjustment of density.
* Added gridRelative flag to indicate whether direction
* data is relative to grid or true north
* Sep 9, 2013 DR16257 MPorricelli When setDestinationGeographicPoint fails (which can
* happen for global lat/lon grid winds displayed on
* Equidistant Cylindrical map) try again with different
* pixel location.
*
* </pre>
*
@ -157,7 +161,7 @@ public class GriddedVectorDisplay extends AbstractGriddedDisplay<Coordinate> {
if (Float.isNaN(spd) || Float.isNaN(dir)) {
return;
}
int tryDiffPixLoc = 0;
try {
ReferencedCoordinate rCoord = new ReferencedCoordinate(
gridGeometryOfGrid, ijcoord);
@ -169,12 +173,24 @@ public class GriddedVectorDisplay extends AbstractGriddedDisplay<Coordinate> {
if (stationPixelLocation != null) {
stationPixelLocation[1]--;
double[] newWorldLocation = this.descriptor
.pixelToWorld(stationPixelLocation);
this.gc.setStartingGeographicPoint(stationLocation[0],
stationLocation[1]);
this.gc.setDestinationGeographicPoint(newWorldLocation[0],
newWorldLocation[1]);
do {
try {
double[] newWorldLocation = this.descriptor
.pixelToWorld(stationPixelLocation);
this.gc.setStartingGeographicPoint(stationLocation[0],
stationLocation[1]);
this.gc.setDestinationGeographicPoint(
newWorldLocation[0], newWorldLocation[1]);
tryDiffPixLoc = 2; // setting of pts succeeded; do not need to try again
} catch (Exception e2) {
if (tryDiffPixLoc == 0) { // setting of points failed first time through
stationPixelLocation[1] += 2; // try pixel location in opposite dir of 1st try
tryDiffPixLoc++;
} else
throw new VizException(e2); // failed on second try; give up
}
} while (tryDiffPixLoc < 2);
}
if (gridRelative) {
@ -185,6 +201,7 @@ public class GriddedVectorDisplay extends AbstractGriddedDisplay<Coordinate> {
// rotate dir from true north to display up
dir -= this.gc.getAzimuth();
} catch (Exception e) {
throw new VizException(e);
}

View file

@ -44,6 +44,10 @@ import org.opengis.referencing.operation.TransformException;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Oct 13, 2011 bsteffen Initial creation
* Sep 10, 2013 DR 16257 MPorricelli Eliminate values that
* fail to be tranformed,e.g.
* when too close to pole for
* mercator projections
*
* </pre>
*
@ -146,7 +150,19 @@ public class PlotLocationCache {
ConcatenatedTransform.create(grid2crs, crs2crs),
crs2grid);
grid2grid.transform(result, 0, result, 0, xDim * yDim);
try {
grid2grid.transform(result, 0, result, 0, xDim * yDim);
} catch (TransformException e1) {
// Set values to NaN when fail transform
for (int i = 0; i < result.length; i += 2) {
try {
grid2grid.transform(result, i, result, i, 1);
} catch (TransformException e2) {
result[i] = Float.NaN;
result[i + 1] = Float.NaN;
}
}
}
} catch (FactoryException e) {
throw new RuntimeException(e);
} catch (InvalidGridGeometryException e) {

View file

@ -61,6 +61,8 @@ import com.raytheon.viz.gfe.textformatter.TextProductManager;
* 26 SEP 2012 15423 ryu Fix product correction in practice mode
* 15 MAY 2013 1842 dgilling Change constructor signature to accept a
* DataManager instance.
* 05 SEP 2013 2329 randerso Added call to ZoneCombinerComp.applyZoneCombo when
* when run formatter button is clicked.
*
* </pre>
*
@ -386,12 +388,12 @@ public class ProductAreaComp extends Composite implements
// use
// it, else use the default
String dbId = null;
// zoneCombinerComp.compactList();
zoneCombiner.applyZoneCombo();
dbId = ((FormatterLauncherDialog) productTabCB)
.getSelectedDataSource(productName);
FormatterUtil.runFormatterScript(textProductMgr,
productName, zoneCombiner.getZoneGroupings(),
dbId, vtecMode, ProductAreaComp.this);
productName, dbId, vtecMode,
ProductAreaComp.this);
}
}
});

View file

@ -22,16 +22,12 @@ package com.raytheon.viz.gfe.dialogs.formatterlauncher;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import java.util.regex.Matcher;
import org.eclipse.jface.preference.IPreferenceStore;
@ -61,6 +57,7 @@ import org.opengis.referencing.FactoryException;
import org.opengis.referencing.operation.TransformException;
import com.raytheon.uf.common.dataplugin.gfe.db.objects.GridLocation;
import com.raytheon.uf.common.dataplugin.gfe.exception.GfeException;
import com.raytheon.uf.common.localization.FileUpdatedMessage;
import com.raytheon.uf.common.localization.FileUpdatedMessage.FileChangeType;
import com.raytheon.uf.common.localization.ILocalizationFileObserver;
@ -70,21 +67,17 @@ 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.localization.exception.LocalizationOpFailedException;
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.common.util.file.FilenameFilters;
import com.raytheon.uf.viz.core.RGBColors;
import com.raytheon.uf.viz.core.VizApp;
import com.raytheon.uf.viz.core.exception.VizException;
import com.raytheon.viz.gfe.Activator;
import com.raytheon.viz.gfe.core.DataManagerUIFactory;
import com.raytheon.viz.gfe.textformatter.CombinationsFileGenerator;
import com.raytheon.viz.gfe.textformatter.CombinationsFileUtil;
import com.raytheon.viz.gfe.textformatter.TextProductManager;
import com.raytheon.viz.gfe.ui.AccessMgr;
import com.raytheon.viz.gfe.ui.zoneselector.ZoneSelector;
/**
@ -100,8 +93,9 @@ import com.raytheon.viz.gfe.ui.zoneselector.ZoneSelector;
* Changes for non-blocking SaveDeleteComboDlg.
* Changes for non-blocking ShuffleZoneGroupsDialog.
* Changes for non-blocking ZoneColorEditorDlg.
*
* Mar 14, 2013 1794 djohnson Consolidate common FilenameFilter implementations.
* Sep 05, 2013 2329 randerso Removed obsolete methods, added ApplyZoneCombo method
*
* </pre>
*
* @author lvenable
@ -307,6 +301,8 @@ public class ZoneCombinerComp extends Composite implements
createMapArea(theSaved);
createBottomControls();
applyButtonState(false);
}
/**
@ -455,6 +451,7 @@ public class ZoneCombinerComp extends Composite implements
@Override
public void widgetSelected(SelectionEvent e) {
zoneSelector.updateCombos(new HashMap<String, Integer>());
applyButtonState(false);
}
});
clearMI.setText("Clear");
@ -731,14 +728,7 @@ public class ZoneCombinerComp extends Composite implements
applyZoneComboBtn.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event) {
try {
CombinationsFileGenerator.generateAutoCombinationsFile(
zoneSelector.getZoneGroupings(),
getCombinationsFileName() + ".py");
} catch (Exception e) {
statusHandler.handle(Priority.PROBLEM, "Unable to save "
+ getCombinationsFileName(), e);
}
applyZoneCombo();
}
});
Label label = new Label(controlComp, SWT.CENTER);
@ -754,6 +744,25 @@ public class ZoneCombinerComp extends Composite implements
label.setAlignment(SWT.CENTER);
}
/**
* Save zone combo
*/
public void applyZoneCombo() {
if (!buttonState()) {
return;
}
try {
CombinationsFileUtil.generateAutoCombinationsFile(
zoneSelector.getZoneGroupings(), getCombinationsFileName()
+ ".py");
applyButtonState(false);
} catch (Exception e) {
statusHandler.handle(Priority.PROBLEM, "Unable to save "
+ getCombinationsFileName(), e);
}
}
/**
* Display the Color Editor dialog.
*/
@ -845,93 +854,6 @@ public class ZoneCombinerComp extends Composite implements
return file;
}
/**
* Get the names of the combo files at the given level. If level is null,
* get the names of the combo files at all levels. Otherwise, only get the
* names of the files at the given level.
*
* @param level
* @return the save combo files at the given level
*/
public String[] getSavedCombos(LocalizationLevel level) {
String comboDirName = "saved";
String[] combos;
File localFile;
// Accept any file whose name ends with ".py".
FilenameFilter filter = FilenameFilters.byFileExtension(".py");
if (level == null) {
// Aggregate the filenames for all levels.
// Use a set to keep names unique.
Set<String> comboSet = new TreeSet<String>();
LocalizationLevel[] levels = PathManagerFactory.getPathManager()
.getAvailableLevels();
for (int i = levels.length - 1; i >= 0; --i) {
localFile = getLocalization(comboDirName, levels[i]);
if ((localFile != null) && localFile.exists()) {
comboSet.addAll(Arrays.asList(localFile.list(filter)));
}
}
combos = comboSet.toArray(new String[0]);
} else {
// Get only the filenames for USER level.
localFile = getLocalization(comboDirName);
combos = localFile.list(filter);
}
return combos;
}
/**
* Load the combinations file called filename if it is in list or
* filename.py is in list, and return the loaded file as a List of Lists of
* Strings.
*
* @param list
* The list of valid filenames
* @param filename
* The filename to load
* @return the contents of the file, as a List of Lists of Strings.
*/
// public List<List<String>> findCombos(String[] list, String filename) {
// List<List<String>> listOfCombos = null;
// for (int i = 0; i < list.length; i++) {
// if (list[i].equals(filename) || list[i].equals(filename + ".py")) {
// listOfCombos = loadCombinationsFile(filename);
// }
// }
// return listOfCombos;
// }
/**
* Deletes the saved file chosen
*
* @param name
* the combo file name
* @throws LocalizationOpFailedException
* if the server copy of the file cannot be deleted
*/
public void deleteSavedCombos(String name)
throws LocalizationOpFailedException {
String searchName = FileUtil.join(CombinationsFileUtil.COMBO_DIR_PATH,
"saved", name + ".py");
IPathManager pm = PathManagerFactory.getPathManager();
LocalizationContext userContext = pm.getContext(
LocalizationType.CAVE_STATIC, LocalizationLevel.USER);
LocalizationFile userFile = pm.getLocalizationFile(userContext,
searchName);
if (AccessMgr.verifyDelete(userFile.getName(),
LocalizationType.CAVE_STATIC, false)) {
if (userFile.isAvailableOnServer()) {
userFile.delete();
} else if (userFile.exists()) {
File localFile = userFile.getFile();
localFile.delete();
}
}
}
/**
* Returns the localization for the save and delete functions. This is a
* wrapper around getLocalization(String, level).
@ -987,34 +909,40 @@ public class ZoneCombinerComp extends Composite implements
}
public Map<String, Integer> loadCombinationsFile(String comboName) {
List<List<String>> combolist = new ArrayList<List<String>>();
File localFile = PathManagerFactory.getPathManager().getStaticFile(
FileUtil.join(CombinationsFileUtil.COMBO_DIR_PATH, comboName
+ ".py"));
if (localFile != null) {
combolist = CombinationsFileUtil.init(comboName);
}
// reformat combinations into combo dictionary
Map<String, Integer> d = new HashMap<String, Integer>();
Map<String, Integer> dict = new HashMap<String, Integer>();
try {
IPathManager pm = PathManagerFactory.getPathManager();
LocalizationContext ctx = pm.getContext(
LocalizationType.CAVE_STATIC, LocalizationLevel.SITE);
File localFile = pm.getFile(ctx, FileUtil.join(
CombinationsFileUtil.COMBO_DIR_PATH, comboName + ".py"));
List<List<String>> combolist = new ArrayList<List<String>>();
if (localFile != null && localFile.exists()) {
combolist = CombinationsFileUtil.init(comboName);
} else {
statusHandler.error("Combinations file does not found: "
+ comboName);
}
// reformat combinations into combo dictionary
int group = 1;
for (List<String> zonelist : combolist) {
for (String z : zonelist) {
d.put(z, group);
dict.put(z, group);
}
group += 1;
}
} catch (Exception e) {
statusHandler.handle(Priority.SIGNIFICANT,
"Combo file is not in combo format: " + comboName);
} catch (GfeException e) {
statusHandler.handle(Priority.SIGNIFICANT, e.getLocalizedMessage(),
e);
return new HashMap<String, Integer>();
}
currentComboFile = FileUtil.join(CombinationsFileUtil.COMBO_DIR_PATH,
comboName + ".py");
return d;
return dict;
}
/**
@ -1060,11 +988,12 @@ public class ZoneCombinerComp extends Composite implements
&& message.getFileName().equalsIgnoreCase(currentComboFile)) {
File file = new File(message.getFileName());
String comboName = file.getName().replace(".py", "");
if (file.getParent().endsWith("saved")) {
comboName = FileUtil.join("saved", comboName);
}
statusHandler
.info("Received FileUpdatedMessage for combinations file: "
+ comboName);
Map<String, Integer> comboDict = loadCombinationsFile(comboName);
this.zoneSelector.updateCombos(comboDict);
applyButtonState(false);
}
}
@ -1085,4 +1014,20 @@ public class ZoneCombinerComp extends Composite implements
});
}
}
private boolean buttonState() {
final boolean[] state = { false };
if (this.applyZoneComboBtn != null
&& !this.applyZoneComboBtn.isDisposed()) {
VizApp.runSync(new Runnable() {
@Override
public void run() {
state[0] = ZoneCombinerComp.this.applyZoneComboBtn
.isEnabled();
}
});
}
return state[0];
}
}

View file

@ -1,108 +0,0 @@
/**
* 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.
**/
/**
* Creating the combinations file for the TextFormatter
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
*6/12/2008 mnash Initial creation
*
* </pre>
*
* @author mnash
* @version 1
*/
package com.raytheon.viz.gfe.textformatter;
import java.io.File;
import java.io.IOException;
import java.util.List;
import com.raytheon.uf.common.dataplugin.gfe.request.SaveCombinationsFileRequest;
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.PathManagerFactory;
import com.raytheon.uf.common.util.FileUtil;
import com.raytheon.viz.gfe.core.DataManager;
import com.raytheon.viz.gfe.core.internal.IFPClient;
public class CombinationsFileGenerator {
/**
* Generates combinations files based on just running the formatter
*
* @param zoneGroupList
* @param filename
* @throws IOException
*/
public static void generateAutoCombinationsFile(
List<List<String>> zoneGroupList, String filename) throws Exception {
generateCombinationsFile(zoneGroupList, filename, "");
}
/**
* Generates combinations files based on user wanting to save
*
* @param zoneGroupList
* @param filename
* @throws IOException
*/
public static void generateSavedCombinationsFile(
List<List<String>> zoneGroupList, String filename) throws Exception {
if (filename.endsWith(".py")) {
generateCombinationsFile(zoneGroupList, filename, "saved"
+ File.separator);
} else {
generateCombinationsFile(zoneGroupList, filename + ".py", "saved"
+ File.separator);
}
}
/**
* Called by both auto and saved functions to actually write file
*
* @param zoneGroupList
* @param filename
* @param loc
* @throws Exception
*/
public static void generateCombinationsFile(
List<List<String>> zoneGroupList, String filename, String loc)
throws Exception {
IFPClient ifpc = DataManager.getCurrentInstance().getClient();
SaveCombinationsFileRequest req = new SaveCombinationsFileRequest();
req.setFileName(FileUtil.join(loc, filename));
req.setCombos(zoneGroupList);
ifpc.makeRequest(req);
IPathManager pm = PathManagerFactory.getPathManager();
LocalizationContext ctx = pm.getContext(LocalizationType.CAVE_STATIC,
LocalizationLevel.SITE);
pm.getFile(ctx, FileUtil.join("gfe", "combinations", filename));
}
}

View file

@ -20,6 +20,7 @@
package com.raytheon.viz.gfe.textformatter;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@ -33,7 +34,9 @@ import javax.xml.bind.annotation.XmlRootElement;
import jep.JepException;
import com.raytheon.uf.common.dataplugin.gfe.exception.GfeException;
import com.raytheon.uf.common.dataplugin.gfe.python.GfePyIncludeUtil;
import com.raytheon.uf.common.dataplugin.gfe.request.SaveCombinationsFileRequest;
import com.raytheon.uf.common.localization.IPathManager;
import com.raytheon.uf.common.localization.LocalizationContext;
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationLevel;
@ -49,8 +52,9 @@ import com.raytheon.uf.common.serialization.SerializationException;
import com.raytheon.uf.common.serialization.SerializationUtil;
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.viz.gfe.core.DataManagerUIFactory;
import com.raytheon.viz.gfe.core.internal.IFPClient;
import com.raytheon.viz.gfe.textformatter.CombinationsFileUtil.ComboData.Entry;
/**
@ -60,7 +64,10 @@ import com.raytheon.viz.gfe.textformatter.CombinationsFileUtil.ComboData.Entry;
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Jul 25, 2008 mnash Initial creation
* Jul 25, 2008 mnash Initial creation
* Sep 05, 2013 #2329 randerso Moved genereateAutoCombinationsFile here
* Cleaned up error handling
*
* </pre>
*
* @author mnash
@ -200,7 +207,7 @@ public class CombinationsFileUtil {
}
@SuppressWarnings("unchecked")
public static List<List<String>> init(String comboName) {
public static List<List<String>> init(String comboName) throws GfeException {
IPathManager pm = PathManagerFactory.getPathManager();
@ -211,7 +218,6 @@ public class CombinationsFileUtil {
File comboFile = new File(comboName);
comboName = comboFile.getName();
String comboPath = GfePyIncludeUtil.getCombinationsIncludePath();
String scriptPath = FileUtil.join(
GfePyIncludeUtil.getUtilitiesLF(baseContext).getFile()
.getPath(), "CombinationsInterface.py");
@ -221,13 +227,15 @@ public class CombinationsFileUtil {
map.put("comboName", comboName);
PythonScript python = null;
try {
python = new PythonScript(scriptPath,
PyUtil.buildJepIncludePath(comboPath));
python = new PythonScript(scriptPath, PyUtil.buildJepIncludePath(
GfePyIncludeUtil.getCombinationsIncludePath(),
GfePyIncludeUtil.getCommonPythonIncludePath()),
CombinationsFileUtil.class.getClassLoader());
Object com = python.execute("getCombinations", map);
combos = (List<List<String>>) com;
} catch (JepException e) {
statusHandler.handle(Priority.CRITICAL,
"Could not get combinations", e);
throw new GfeException("Error loading combinations file: "
+ comboName, e);
} finally {
if (python != null) {
python.dispose();
@ -235,4 +243,30 @@ public class CombinationsFileUtil {
}
return combos;
}
/**
* Generates combinations files based on just running the formatter
*
* @param zoneGroupList
* @param filename
* @throws Exception
* @throws IOException
*/
public static void generateAutoCombinationsFile(
List<List<String>> zoneGroupList, String filename) throws Exception {
IFPClient ifpc = DataManagerUIFactory.getCurrentInstance().getClient();
SaveCombinationsFileRequest req = new SaveCombinationsFileRequest();
req.setFileName(filename);
req.setCombos(zoneGroupList);
try {
statusHandler.info("Saving combinations file: " + filename);
ifpc.makeRequest(req);
statusHandler.info("Successfully saved combinations file: "
+ filename);
} catch (Exception e) {
statusHandler.error("Error saving combinations file: " + filename,
e);
throw e;
}
}
}

View file

@ -20,7 +20,6 @@
package com.raytheon.viz.gfe.textformatter;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.TimeZone;
import com.raytheon.uf.common.status.IUFStatusHandler;
@ -40,8 +39,9 @@ import com.raytheon.viz.gfe.tasks.TaskManager;
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Sep 8, 2008 njensen Initial creation
* Jan 15, 2010 3395 ryu Fix &quot;issued by&quot; functionality
* Sep 8, 2008 njensen Initial creation
* Jan 15, 2010 3395 ryu Fix &quot;issued by&quot; functionality
* Sep 05, 2013 2329 randerso Removed save of combinations file
*
* </pre>
*
@ -63,21 +63,20 @@ public class FormatterUtil {
* the formatter instance to use
* @param productName
* the name of the text product
* @param zoneList
* the list of zones to produce the product for
* @param dbId
* source database
* @param vtecMode
* VTEC mode
* @param finish
* listener to fire when formatter finishes generating product
*/
public static void runFormatterScript(TextProductManager productMgr,
String productName, List<List<String>> zoneList, String dbId,
String vtecMode, TextProductFinishListener finish) {
String productName, String dbId, String vtecMode,
TextProductFinishListener finish) {
try {
String filename = productMgr.getCombinationsFileName(productName);
boolean mapRequired = productMgr.mapRequired(productName);
if (filename != null && mapRequired) {
String filenameExt = filename + ".py";
CombinationsFileGenerator.generateAutoCombinationsFile(
zoneList, filenameExt);
productMgr.reloadModule(filename);
}
} catch (Exception e) {

View file

@ -47,7 +47,7 @@
<constraint constraintValue="grid" constraintType="EQUALS"/>
</mapping>
<mapping key="info.datasetId">
<constraint constraintValue="FFG-TUA,FFG-ACR,FFG-STR,FFG-RSA,FFG-ORN,FFG-RHA,FFG-KRF,FFG-MSR,FFG-TAR,FFG-PTR,FFG-TIR-HiRes,FFG-ALR,FFG-FWR"
<constraint constraintValue="FFG-TUA,FFG-ACR,FFG-STR,FFG-RSA,FFG-ORN,FFG-RHA,FFG-KRF,FFG-MSR,FFG-TAR,FFG-PTR,FFG-TIR,FFG-ALR,FFG-FWR"
constraintType="IN" />
</mapping>
</metadataMap>
@ -321,7 +321,7 @@
<constraint constraintValue="grid" constraintType="EQUALS"/>
</mapping>
<mapping key="info.datasetId">
<constraint constraintValue="FFG-TIR-HiRes" constraintType="EQUALS"/>
<constraint constraintValue="FFG-TIR" constraintType="EQUALS"/>
</mapping>
</metadataMap>
</resourceData>

View file

@ -246,19 +246,19 @@
menuText="1hr FFG" id="OH1hrFFG">
<dataURI>/grib/%/FFG-TIR/FFG0124hr/%</dataURI>
<substitute key="timespan" value="FFG0124hr"/>
<substitute key="model" value="FFG-TIR-HiRes"/>
<substitute key="model" value="FFG-TIR"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/hydro/FFGmosaic.xml"
menuText="3hr FFG" id="OH3hrFFG">
<dataURI>/grib/%/FFG-TIR-HiRes/FFG0324hr/%</dataURI>
<dataURI>/grib/%/FFG-TIR/FFG0324hr/%</dataURI>
<substitute key="timespan" value="FFG0324hr"/>
<substitute key="model" value="FFG-TIR-HiRes"/>
<substitute key="model" value="FFG-TIR"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/hydro/FFGmosaic.xml"
menuText="6hr FFG" id="OH6hrFFG">
<dataURI>/grib/%/FFG-TIR-HiRes/FFG0624hr/%</dataURI>
<dataURI>/grib/%/FFG-TIR/FFG0624hr/%</dataURI>
<substitute key="timespan" value="FFG0624hr"/>
<substitute key="model" value="FFG-TIR-HiRes"/>
<substitute key="model" value="FFG-TIR"/>
</contribute>
</contribute>
<contribute xsi:type="subMenu" menuText="SERFC" id="SERFCMenu">

View file

@ -76,7 +76,9 @@ import com.raytheon.viz.mpe.ui.rsc.MPEFieldResourceData.MPEFieldFrame;
* Nov 29, 2012 mschenke Initial creation
* May 28, 2013 15971 lbousaidi change the reading hour for SATPRE
* since the start time in the file is one
* hour less than the file time stamp.
* hour less than the file time stamp.
* Sep 17, 2013 16563 snaples Updated createFrameImage to handle trace precip
* properly when mapping to screen.
*
* </pre>
*
@ -148,6 +150,7 @@ public class MPEFieldResource extends
* @param frame
* @return
*/
@SuppressWarnings("incomplete-switch")
private short[] getEditedData(MPEFieldFrame frame) {
short[] editedData = frame.getEditedData();
if (editedData != null) {
@ -413,16 +416,42 @@ public class MPEFieldResource extends
.getColorMapParameters();
UnitConverter dataToImage = params.getDataToImageConverter();
short[] data = getEditedData(frame);
DisplayFieldData cvuse = resourceData.getFieldData();
int length = data.length;
short[] imageData = new short[length];
for (int i = 0; i < length; ++i) {
short value = data[i];
if (value == MISSING_VALUE) {
imageData[i] = 0;
} else {
imageData[i] = (short) dataToImage.convert(value);
switch (cvuse) {
case Locbias:
case Height:
case Index:
case Locspan:
case mintempPrism:
case maxtempPrism:
for (int i = 0; i < length; ++i) {
short value = data[i];
if (value == MISSING_VALUE) {
imageData[i] = 0;
} else {
imageData[i] = (short) dataToImage.convert(value);
}
}
break;
default :
for (int i = 0; i < length; ++i) {
short value = data[i];
if (value == MISSING_VALUE) {
imageData[i] = 0;
} else if(value <= 0){
imageData[i] = 1;
} else if(value > 0 && value < 25){
value = 10;
imageData[i] = (short) dataToImage.convert(value);
} else {
imageData[i] = (short) dataToImage.convert(value);
}
}
break;
}
}
return new GriddedImageDisplay2(ShortBuffer.wrap(imageData),
gridGeometry, this);
}

View file

@ -275,8 +275,9 @@ public class MPEFieldResourceData extends AbstractMPEGriddedResourceData {
case mintempPrism:
case maxtempPrism:
return NonSI.FAHRENHEIT;
default:
return NonSI.INCH;
}
return NonSI.INCH;
}
public static Unit<?> getDataUnitsForField(DisplayFieldData fieldData) {
@ -293,7 +294,9 @@ public class MPEFieldResourceData extends AbstractMPEGriddedResourceData {
case mintempPrism:
case maxtempPrism:
return NonSI.FAHRENHEIT.divide(10);
default :
return SI.MILLIMETER.divide(100);
}
return SI.MILLIMETER.divide(100);
}
}

View file

@ -27,6 +27,7 @@ import com.raytheon.uf.common.activetable.ActiveTableMode;
import com.raytheon.uf.common.activetable.ActiveTableRecord;
import com.raytheon.uf.common.activetable.GetActiveTableRequest;
import com.raytheon.uf.common.activetable.GetActiveTableResponse;
import com.raytheon.uf.common.dataplugin.warning.EmergencyType;
import com.raytheon.uf.common.dataplugin.warning.WarningRecord.WarningAction;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
@ -48,6 +49,7 @@ import com.raytheon.viz.texteditor.util.VtecUtil;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Jul 23, 2013 2176 jsanchez Initial creation
* Sep 4, 2013 2176 jsanchez Moved EmergencyType to a public class.
*
* </pre>
*
@ -62,38 +64,6 @@ public class EmergencyConfirmationMsg implements IWarnGenConfirmationable {
private String productMessage;
private static class EmergencyType {
private static final EmergencyType TORNADO = new EmergencyType(
"TORNADO EMERGENCY", "TO.W");
private static final EmergencyType FLASH_FLOOD = new EmergencyType(
"FLASH FLOOD EMERGENCY", "FF.W");
private final String value;
private final String phensig;
private final static EmergencyType[] values = new EmergencyType[] {
TORNADO, FLASH_FLOOD };
private EmergencyType(String type, String phensig) {
this.value = type;
this.phensig = phensig;
}
public static EmergencyType valueOf(String phensig) {
EmergencyType type = null;
for (EmergencyType t : values) {
if (t.phensig.equals(phensig)) {
type = t;
break;
}
}
return type;
}
};
/**
* Orders the ActiveTableRecord based on the issue time (ascending)
*/
@ -126,11 +96,11 @@ public class EmergencyConfirmationMsg implements IWarnGenConfirmationable {
// Check if the warning product is a valid EmergencyType.
if (type != null) {
boolean currentEmergency = body.contains("EMERGENCY");
boolean currentEmergency = EmergencyType.isEmergency(body);
if (action == WarningAction.NEW && currentEmergency) {
// Only occurs when the warning is first issued and not any
// other action
productMessage = "This is a " + type.value;
productMessage = "This is a " + type.getValue();
} else if (action == WarningAction.CON
|| action == WarningAction.EXT
|| action == WarningAction.CANCON) {
@ -159,14 +129,14 @@ public class EmergencyConfirmationMsg implements IWarnGenConfirmationable {
new ActiveTableRecordComparator());
ActiveTableRecord record = records
.get(records.size() - 1);
boolean wasEmergency = record.getRawmessage().contains(
"EMERGENCY");
boolean wasEmergency = EmergencyType.isEmergency(record
.getRawmessage());
if (!wasEmergency && currentEmergency) {
productMessage = "This is an upgrade of a "
+ type.value;
+ type.getValue();
} else if (wasEmergency && !currentEmergency) {
productMessage = "This is a downgrade of a "
+ type.value;
+ type.getValue();
}
}
} catch (VizException e) {

View file

@ -328,9 +328,9 @@ import com.raytheon.viz.ui.dialogs.SWTMessageBox;
* 25July2013 15733 GHull Read font and color prefs from TextEditorCfg.
* 23Aug2013 DR 16514 D. Friedman Fix handling of completed product requests. Do not change
* command history or close browser window for "update obs".
* 04Sep2013 2176 jsanchez Changed the order of the QC check dialogs.
* 12Sep2013 DR 2249 rferrel Change Time stamp in file name created by warngen to use
* simulated time.
*
* </pre>
*
* @author lvenable
@ -4822,14 +4822,14 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
@Override
public void dialogClosed(Object returnValue) {
if (Boolean.TRUE.equals(returnValue)) {
checkEmergencyProduct(resend);
finishSendProduct(resend);
}
}
});
wgcd.open();
} else {
checkEmergencyProduct(resend);
finishSendProduct(resend);
}
} else {
finishSendProduct(resend);
@ -4879,7 +4879,7 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
@Override
public void dialogClosed(Object returnValue) {
if (Boolean.TRUE.equals(returnValue)) {
warngenCloseCallback(resend);
checkEmergencyProduct(resend);
}
}
});
@ -4907,14 +4907,14 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
@Override
public void dialogClosed(Object returnValue) {
if (Boolean.TRUE.equals(returnValue)) {
finishSendProduct(resend);
warngenCloseCallback(resend);
}
}
});
wgcd.open();
} else {
finishSendProduct(resend);
warngenCloseCallback(resend);
}
}

View file

@ -48,7 +48,7 @@
<extension
point="org.eclipse.ui.menus">
<menuContribution
locationURI="toolbar:org.eclipse.ui.main.toolbar?after=additions">
locationURI="toolbar:org.eclipse.ui.main.toolbar?after=d2d-3">
<toolbar
id="plugins">
<command

View file

@ -28,6 +28,7 @@ import java.util.regex.Pattern;
import javax.jms.BytesMessage;
import javax.jms.Connection;
import javax.jms.DeliveryMode;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
@ -47,7 +48,7 @@ import com.raytheon.viz.texteditor.msgs.IWarngenObserver;
import com.raytheon.viz.texteditor.util.SiteAbbreviationUtil;
/**
* TODO Add Description
* Sends warning products to text workstation and text database.
*
* <pre>
*
@ -58,6 +59,7 @@ import com.raytheon.viz.texteditor.util.SiteAbbreviationUtil;
* 01Jun2010 2187 cjeanbap Added operational mode functionality
* 02Aug2010 2187 cjeanbap Update variable/method signature to be consistent.
* 04Oct2010 7193 cjeanbap Add time-to-live value to MessageProducer.
* Sep 13, 2013 2368 rjpeter Set delivery mode to PERSISTENT.
* </pre>
*
* @author mschenke
@ -65,209 +67,208 @@ import com.raytheon.viz.texteditor.util.SiteAbbreviationUtil;
*/
public class WarningSender implements IWarngenObserver {
private static final transient IUFStatusHandler statusHandler = UFStatus
.getHandler(WarningSender.class);
private static final transient IUFStatusHandler statusHandler = UFStatus
.getHandler(WarningSender.class);
private String hostName = null;
private final String hostName = null;
private boolean notifyError;
private boolean notifyError;
private static final long MILLISECONDS_PER_SECOND = 1000;
private static final long MILLISECONDS_PER_SECOND = 1000;
private static final long SECONDS_PER_MINUTE = 60;
private static final long SECONDS_PER_MINUTE = 60;
private static final long TTL_MINUTES = 5;
private static final long TTL_MINUTES = 5;
private static Pattern PATTERN = Pattern.compile("(\\d{1,1})");
private static Pattern PATTERN = Pattern.compile("(\\d{1,1})");
private static final SimpleDateFormat sdf;
private static final SimpleDateFormat sdf;
static {
sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
}
static {
sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
}
/*
* (non-Javadoc) Incoming message was not a binary
*
* @see
* com.raytheon.viz.texteditor.msgs.IWarngenObserver#setTextWarngenDisplay
* (java.lang.String)
*/
@Override
public void setTextWarngenDisplay(String warning, boolean ne) {
this.notifyError = ne;
/*
* (non-Javadoc) Incoming message was not a binary
*
* @see
* com.raytheon.viz.texteditor.msgs.IWarngenObserver#setTextWarngenDisplay
* (java.lang.String)
*/
@Override
public void setTextWarngenDisplay(String warning, boolean ne) {
this.notifyError = ne;
String number = "0";
String host = TextWorkstationConstants.getId();
long t0 = System.currentTimeMillis();
String siteNode = SiteAbbreviationUtil.getSiteNode(LocalizationManager
.getInstance().getCurrentSite());
System.out.println("Get site node time: "
+ (System.currentTimeMillis() - t0));
if (host == null) {
statusHandler.handle(Priority.ERROR,
"Text Workstation host not set in preferences.");
} else {
Matcher m = PATTERN.matcher(host);
if (m.find()) {
number = m.group();
}
}
String number = "0";
String host = TextWorkstationConstants.getId();
long t0 = System.currentTimeMillis();
String siteNode = SiteAbbreviationUtil.getSiteNode(LocalizationManager
.getInstance().getCurrentSite());
statusHandler.debug("Get site node time: "
+ (System.currentTimeMillis() - t0));
if (host == null) {
statusHandler.handle(Priority.ERROR,
"Text Workstation host not set in preferences.");
} else {
Matcher m = PATTERN.matcher(host);
if (m.find()) {
number = m.group();
}
}
String id = siteNode + "WRKWG" + number;
boolean sentToTextDatabase = false;
String id = siteNode + "WRKWG" + number;
boolean sentToTextDatabase = false;
try {
boolean messageNotSent = true;
int connectCount = 0;
t0 = System.currentTimeMillis();
byte[] data = SerializationUtil.transformToThrift(id + ":"
+ warning);
while (messageNotSent && connectCount < 4) {
Session s = null;
MessageProducer mp = null;
Connection conn = null;
try {
conn = JMSConnection.getInstance().getFactory()
.createConnection();
s = conn.createSession(false, Session.CLIENT_ACKNOWLEDGE);
mp = s.createProducer(s
.createQueue(TextWorkstationConstants
.getDestinationTextWorkstationQueueName()));
mp.setTimeToLive(TTL_MINUTES * SECONDS_PER_MINUTE
* MILLISECONDS_PER_SECOND);
BytesMessage m = s.createBytesMessage();
m.writeBytes(data);
mp.send(m);
long t1 = System.currentTimeMillis();
System.out.println(WarningSender.getCurTimeString() + ": "
+ id + " sent to text workstation in " + (t1 - t0)
+ "ms in " + (connectCount + 1)
+ (connectCount > 0 ? " tries" : " try"));
messageNotSent = false;
} catch (JMSException e) {
if (notifyError) {
statusHandler
.handle(Priority.PROBLEM,
"Error trying to send product ["
+ id
+ "] to Text Workstation. Attempting to reconnect. ",
e);
notifyError = false;
}
} finally {
if (mp != null) {
try {
mp.close();
mp = null;
} catch (Exception e) {
mp = null;
}
}
if (s != null) {
try {
s.close();
s = null;
} catch (Exception e) {
s = null;
}
}
if (conn != null) {
try {
conn.close();
conn = null;
} catch (Exception e) {
conn = null;
}
}
}
if (messageNotSent) {
if (!sentToTextDatabase) {
try {
sendToTextDatabase(id, warning);
sentToTextDatabase = true;
} catch (Exception e) {
statusHandler.handle(Priority.PROBLEM,
"Error trying to save product [" + id
+ "] to Text Database: ", e);
}
}
try {
boolean messageNotSent = true;
int connectCount = 0;
t0 = System.currentTimeMillis();
byte[] data = SerializationUtil.transformToThrift(id + ":"
+ warning);
while (messageNotSent && (connectCount < 4)) {
Session s = null;
MessageProducer mp = null;
Connection conn = null;
try {
conn = JMSConnection.getInstance().getFactory()
.createConnection();
s = conn.createSession(false, Session.CLIENT_ACKNOWLEDGE);
mp = s.createProducer(s
.createQueue(TextWorkstationConstants
.getDestinationTextWorkstationQueueName()));
mp.setTimeToLive(TTL_MINUTES * SECONDS_PER_MINUTE
* MILLISECONDS_PER_SECOND);
BytesMessage m = s.createBytesMessage();
m.writeBytes(data);
m.setJMSDeliveryMode(DeliveryMode.PERSISTENT);
mp.send(m);
long t1 = System.currentTimeMillis();
statusHandler.debug(id + " sent to text workstation in "
+ (t1 - t0) + "ms in " + (connectCount + 1)
+ (connectCount > 0 ? " tries" : " try"));
messageNotSent = false;
} catch (JMSException e) {
if (notifyError) {
statusHandler
.handle(Priority.PROBLEM,
"Error trying to send product ["
+ id
+ "] to Text Workstation. Attempting to reconnect. ",
e);
notifyError = false;
}
} finally {
if (mp != null) {
try {
mp.close();
mp = null;
} catch (Exception e) {
mp = null;
}
}
if (s != null) {
try {
s.close();
s = null;
} catch (Exception e) {
s = null;
}
}
if (conn != null) {
try {
conn.close();
conn = null;
} catch (Exception e) {
conn = null;
}
}
}
if (messageNotSent) {
if (!sentToTextDatabase) {
try {
sendToTextDatabase(id, warning);
sentToTextDatabase = true;
} catch (Exception e) {
statusHandler.handle(Priority.PROBLEM,
"Error trying to save product [" + id
+ "] to Text Database: ", e);
}
}
connectCount++;
switch (connectCount) {
case 1:
Thread.sleep(1000);
break;
case 2:
Thread.sleep(5 * 1000);
break;
case 3:
Thread.sleep(30 * 1000);
break;
case 4:
statusHandler.handle(Priority.PROBLEM,
"Could not reconnect (" + id
+ ") after 3 tries: ");
break;
}
}
}
connectCount++;
switch (connectCount) {
case 1:
Thread.sleep(1000);
break;
case 2:
Thread.sleep(5 * 1000);
break;
case 3:
Thread.sleep(30 * 1000);
break;
case 4:
statusHandler.handle(Priority.PROBLEM,
"Could not reconnect (" + id
+ ") after 3 tries: ");
break;
}
}
}
if (!sentToTextDatabase) {
try {
sendToTextDatabase(id, warning);
sentToTextDatabase = true;
} catch (Exception e) {
statusHandler.handle(Priority.PROBLEM,
"Error trying to save product [" + id
+ "] to Text Database: ", e);
}
}
} catch (UnknownHostException uhe) {
if (notifyError) {
statusHandler.handle(Priority.PROBLEM,
"unable to map hostname, " + hostName
+ ", to an ip address", uhe);
notifyError = false;
}
if (!sentToTextDatabase) {
try {
sendToTextDatabase(id, warning);
sentToTextDatabase = true;
} catch (Exception e) {
statusHandler.handle(Priority.PROBLEM,
"Error trying to save product [" + id
+ "] to Text Database: ", e);
}
}
} catch (UnknownHostException uhe) {
if (notifyError) {
statusHandler.handle(Priority.PROBLEM,
"unable to map hostname, " + hostName
+ ", to an ip address", uhe);
notifyError = false;
}
} catch (Exception e) {
statusHandler.handle(Priority.PROBLEM,
"Error trying to send product [" + id
+ "] to Text Workstation: ", e);
}
} catch (Exception e) {
statusHandler.handle(Priority.PROBLEM,
"Error trying to send product [" + id
+ "] to Text Workstation: ", e);
}
}
}
/**
* Saves a product to the text database.
*
* @param id
* @param warning
* @throws VizException
*/
public static void sendToTextDatabase(String id, String warning)
throws VizException {
CAVEMode mode = CAVEMode.getMode();
boolean operationalMode = (CAVEMode.OPERATIONAL.equals(mode)
|| CAVEMode.TEST.equals(mode) ? true : false);
/**
* Saves a product to the text database.
*
* @param id
* @param warning
* @throws VizException
*/
public static void sendToTextDatabase(String id, String warning)
throws VizException {
CAVEMode mode = CAVEMode.getMode();
boolean operationalMode = (CAVEMode.OPERATIONAL.equals(mode)
|| CAVEMode.TEST.equals(mode) ? true : false);
// Generate StdTextProduct and insert into db
long t0 = System.currentTimeMillis();
ThriftClient.sendRequest(new InsertStdTextProductRequest(id, warning,
operationalMode));
// Generate StdTextProduct and insert into db
long t0 = System.currentTimeMillis();
ThriftClient.sendRequest(new InsertStdTextProductRequest(id, warning,
operationalMode));
System.out.println(WarningSender.getCurTimeString() + ": " + id
+ " saved to textdb in " + (System.currentTimeMillis() - t0)
+ "ms");
}
statusHandler.debug(id + " saved to textdb in "
+ (System.currentTimeMillis() - t0) + "ms");
}
public static String getCurTimeString() {
String rval = null;
synchronized (sdf) {
rval = sdf.format(new Date());
}
return rval;
}
public static String getCurTimeString() {
String rval = null;
synchronized (sdf) {
rval = sdf.format(new Date());
}
return rval;
}
}

View file

@ -40,6 +40,7 @@ import com.vividsolutions.jts.geom.prep.PreparedGeometryFactory;
* Mar 25, 2013 1605 jsanchez Set ClosestPoint's prepGeom.
* Apr 24, 2013 1944 jsanchez Updated calculateLocationPortion visibility to public.
* May 2, 2013 1963 jsanchez Referenced calculatePortion from GisUtil if intersection less than DEFAULT_PORTION_TOLERANCE.
* Sep 13, 2013 DR 16601 D. Friedman Fix from jsanchez: Allow cities outside the CWA.
*
* </pre>
*
@ -156,8 +157,6 @@ public class DbAreaSourceDataAdaptor extends AbstractDbSourceDataAdaptor {
filter = new HashMap<String, RequestConstraint>();
}
filter.put(cwaField, new RequestConstraint(localizedSite));
return filter;
}

View file

@ -29,6 +29,7 @@ package com.raytheon.viz.warngen.gis;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Aug 5, 2013 2177 jsanchez Initial creation
* Sep 22, 2013 2177 jsanchez Updated EW_MASK.
*
* </pre>
*
@ -156,7 +157,7 @@ public class CoverageConstants {
EW_MASK[i] = XEAST | EAST;
} else if (i < 106) {
EW_MASK[i] = WEST;
} else if (i > 145) {
} else if (i > 148) {
EW_MASK[i] = EAST;
} else if (i < 118) {
EW_MASK[i] = CENTRAL_EW | WEST;

View file

@ -38,6 +38,7 @@ import com.vividsolutions.jts.geom.Geometry;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Aug 5, 2013 2177 jsanchez Initial creation
* Sep 22, 2013 2177 jsanchez Updated logic.
*
* </pre>
*
@ -71,9 +72,16 @@ public class PortionsUtil {
countyOrZone.getUserData();
EntityData entityData = gridUtil.calculateGrids(countyOrZone,
warnedArea);
EnumSet<Direction> portions = getAreaDesc(entityData.getMeanMask(),
entityData.getCoverageMask(), entityData.getOctants(),
useExtreme);
EnumSet<Direction> portions = null;
if (warnedArea.getArea() < countyOrZone.getArea() * .01) {
// this is for the case when only a "sliver" of the county or zone
// is warned
portions = getPointDesc(entityData.getMeanMask(), true);
} else {
portions = getAreaDesc(entityData.getMeanMask(),
entityData.getCoverageMask(), entityData.getOctants(),
useExtreme);
}
return suppressPortions(entityID, portions);
}
@ -127,6 +135,7 @@ public class PortionsUtil {
// }
// Test for central by not being near adjacent borders.
// Another possible case of a stripe across the middle.
if (octants == 0
|| ((octants & CoverageConstants.EXTREME_YES) == 0)
&& (meanMask & CoverageConstants.CENTER) == CoverageConstants.CENTER) {
@ -144,28 +153,28 @@ public class PortionsUtil {
int nn, ss, ee, ww, ne, nw, se, sw;
nn = ss = ee = ww = ne = nw = se = sw = 0;
int omerge = xxoctant | xoctant | octants;
if ((omerge & (CoverageConstants.NNE | CoverageConstants.ENE)) > 0) {
if ((omerge & (CoverageConstants.NNE | CoverageConstants.ENE)) != 0) {
ne = 1;
}
if ((omerge & (CoverageConstants.SSE | CoverageConstants.ESE)) > 0) {
if ((omerge & (CoverageConstants.SSE | CoverageConstants.ESE)) != 0) {
se = 1;
}
if ((omerge & (CoverageConstants.NNW | CoverageConstants.WNW)) > 0) {
if ((omerge & (CoverageConstants.NNW | CoverageConstants.WNW)) != 0) {
nw = 1;
}
if ((omerge & (CoverageConstants.SSW | CoverageConstants.WSW)) > 0) {
if ((omerge & (CoverageConstants.SSW | CoverageConstants.WSW)) != 0) {
sw = 1;
}
if ((omerge & (CoverageConstants.NNE | CoverageConstants.NNW)) > 0) {
if ((omerge & (CoverageConstants.NNE | CoverageConstants.NNW)) != 0) {
nn = 1;
}
if ((omerge & (CoverageConstants.SSE | CoverageConstants.SSW)) > 0) {
if ((omerge & (CoverageConstants.SSE | CoverageConstants.SSW)) != 0) {
ss = 1;
}
if ((omerge & (CoverageConstants.WNW | CoverageConstants.WSW)) > 0) {
if ((omerge & (CoverageConstants.WNW | CoverageConstants.WSW)) != 0) {
ww = 1;
}
if ((omerge & (CoverageConstants.ENE | CoverageConstants.ESE)) > 0) {
if ((omerge & (CoverageConstants.ENE | CoverageConstants.ESE)) != 0) {
ee = 1;
}
if ((areaMask & CoverageConstants.NORTH_SOUTH) == 0) {
@ -180,23 +189,23 @@ public class PortionsUtil {
// Identify extremes in use.
int nnx, ssx, eex, wwx;
nnx = ssx = eex = wwx = 0;
if ((areaMask & CoverageConstants.XNORTH) > 0) {
if ((areaMask & CoverageConstants.XNORTH) != 0) {
nnx = 1;
}
if ((areaMask & CoverageConstants.XSOUTH) > 0) {
if ((areaMask & CoverageConstants.XSOUTH) != 0) {
ssx = 1;
}
if ((areaMask & CoverageConstants.XWEST) > 0) {
if ((areaMask & CoverageConstants.XWEST) != 0) {
wwx = 1;
}
if ((areaMask & CoverageConstants.XEAST) > 0) {
if ((areaMask & CoverageConstants.XEAST) != 0) {
eex = 1;
}
int xxx = nnx + ssx + eex + wwx;
// Modify masks based on whether we can use extreme.
if ((octants & CoverageConstants.EXTREME_NO) > 0
&& (areaMask & CoverageConstants.EXTREME) > 0) {
if ((octants & CoverageConstants.EXTREME_NO) != 0
&& (areaMask & CoverageConstants.EXTREME) != 0) {
areaMask &= CoverageConstants.NOT_EXTREME;
meanMask &= CoverageConstants.NOT_EXTREME;
}
@ -220,12 +229,6 @@ public class PortionsUtil {
meanMask &= CoverageConstants.NOT_CENTRAL;
}
// Another possible case of a stripe across the middle.
if (q == 4 && (meanMask & CoverageConstants.CENTER) > 0) {
portions.add(Direction.CENTRAL);
return portions;
}
// All quadrants in use.
if (q == 4 && qq == 4) {
return EnumSet.noneOf(Direction.class);
@ -233,20 +236,6 @@ public class PortionsUtil {
// Only one typical quadrant in use.
if (q == 1) {
// if (ne == 1) {
// portions.add(Direction.NORTH);
// portions.add(Direction.EAST);
// } else if (nw == 1) {
// portions.add(Direction.NORTH);
// portions.add(Direction.WEST);
// } else if (se == 1) {
// portions.add(Direction.SOUTH);
// portions.add(Direction.EAST);
// } else if (sw == 1) {
// portions.add(Direction.SOUTH);
// portions.add(Direction.WEST);
// }
// return portions;
return getPointDesc2(meanMask, exYes, nn, ss, ee, ww);
}
@ -259,7 +248,7 @@ public class PortionsUtil {
// No more than two quadrants of any kind in use, or all quadrants.
if (q < 3 && qq < 3) {
if (nnx != ssx && wwx != eex
|| (meanMask & CoverageConstants.CENTRAL) > 0) {
|| (meanMask & CoverageConstants.CENTRAL) != 0) {
return getPointDesc2(meanMask, exYes, nn, ss, ee, ww);
} else {
@ -273,28 +262,28 @@ public class PortionsUtil {
if (ne == 0) {
// The next line is the original port of A1 code but prevented
// producing the correct result:
// if (ne == 0 && (xxoctant & (SSW | WSW)) > 0) {
// if (ne == 0 && (xxoctant & (SSW | WSW)) != 0) {
portions.add(Direction.SOUTH);
portions.add(Direction.WEST);
} else if (se == 0) {
// The next line is the original port of A1 code but prevented
// producing the correct result:
// } else if (se == 0 && (xxoctant & (NNW | WNW)) > 0) {
// } else if (se == 0 && (xxoctant & (NNW | WNW)) != 0) {
portions.add(Direction.NORTH);
portions.add(Direction.WEST);
} else if (nw == 0) {
// The next line is the original port of A1 code but prevented
// producing the correct result:
// } else if (nw == 0 && (xxoctant & (SSE | ESE)) > 0) {
// } else if (nw == 0 && (xxoctant & (SSE | ESE)) != 0) {
portions.add(Direction.SOUTH);
portions.add(Direction.EAST);
} else if (sw == 0) {
// The next line is the original port of A1 code but prevented
// producing the correct result:
// } else if (sw == 0 && (xxoctant & (NNE | ENE)) > 0) {
// } else if (sw == 0 && (xxoctant & (NNE | ENE)) != 0) {
portions.add(Direction.NORTH);
portions.add(Direction.EAST);
}
@ -318,7 +307,7 @@ public class PortionsUtil {
// add extreme for three quadrant case.
if (!portions.isEmpty()) {
if (exYes && ((areaMask & CoverageConstants.EXTREME)) > 0) {
if (exYes && ((areaMask & CoverageConstants.EXTREME)) != 0) {
portions.add(Direction.EXTREME);
}
return portions;
@ -334,25 +323,25 @@ public class PortionsUtil {
ss = areaMask & CoverageConstants.SOUTHERN;
ee = areaMask & CoverageConstants.EASTERN;
ww = areaMask & CoverageConstants.WESTERN;
if (ss > 0 && nn > 0 || q == 0) {
if (ee == 0 && ww > 0) {
if (ss != 0 && nn != 0 || q == 0) {
if (ee == 0 && ww != 0) {
portions.add(Direction.WEST);
}
if (ww == 0 && ee > 0) {
if (ww == 0 && ee != 0) {
portions.add(Direction.EAST);
}
} else if (ee > 0 && ww > 0 || q == 0) {
if (nn == 0 && ss > 0) {
} else if (ee != 0 && ww != 0 || q == 0) {
if (nn == 0 && ss != 0) {
portions.add(Direction.SOUTH);
}
if (ss == 0 && nn > 0) {
if (ss == 0 && nn != 0) {
portions.add(Direction.NORTH);
}
}
// add extreme for simple direction case.
if (!portions.isEmpty()) {
if (exYes && ((areaMask & CoverageConstants.EXTREME)) > 0) {
if (exYes && ((areaMask & CoverageConstants.EXTREME)) != 0) {
portions.add(Direction.EXTREME);
}
return portions;
@ -372,9 +361,6 @@ public class PortionsUtil {
private static EnumSet<Direction> getPointDesc(int mask, boolean exYes) {
EnumSet<Direction> portions = EnumSet.noneOf(Direction.class);
if (mask == 0) {
return portions;
}
int cc = mask & CoverageConstants.CENTRAL;
if (cc == CoverageConstants.CENTRAL) {
@ -406,7 +392,7 @@ public class PortionsUtil {
portions.add(Direction.CENTRAL);
}
if (exYes && ((int) (mask & CoverageConstants.EXTREME) > 0)) {
if (exYes && ((int) (mask & CoverageConstants.EXTREME) != 0)) {
portions.add(Direction.EXTREME);
}
@ -432,22 +418,22 @@ public class PortionsUtil {
}
int counter = 0;
if (nn > 0 && ss > 0) {
if (nn != 0 && ss != 0) {
;
} else if (ss > 0) {
} else if (ss != 0) {
portions.add(Direction.SOUTH);
counter++;
} else if (nn > 0) {
} else if (nn != 0) {
portions.add(Direction.NORTH);
counter++;
}
if (ee > 0 && ww > 0) {
if (ee != 0 && ww != 0) {
;
} else if (ww > 0) {
} else if (ww != 0) {
portions.add(Direction.WEST);
counter++;
} else if (ee > 0) {
} else if (ee != 0) {
portions.add(Direction.EAST);
counter++;
}
@ -462,7 +448,7 @@ public class PortionsUtil {
portions.add(Direction.CENTRAL);
}
if (exYes && ((int) (mask & CoverageConstants.EXTREME) > 0)) {
if (exYes && ((int) (mask & CoverageConstants.EXTREME) != 0)) {
portions.add(Direction.EXTREME);
}

View file

@ -20,6 +20,7 @@
package com.raytheon.viz.warngen.gui;
import com.raytheon.uf.common.dataplugin.warning.AbstractWarningRecord;
import com.raytheon.uf.common.dataplugin.warning.EmergencyType;
import com.raytheon.uf.common.dataplugin.warning.WarningRecord.WarningAction;
import com.raytheon.uf.common.time.SimulatedTime;
import com.raytheon.uf.common.time.util.TimeUtil;
@ -39,6 +40,7 @@ import com.raytheon.uf.common.time.util.TimeUtil;
* Aug 7, 2013 2243 jsanchez Set all the attributes of an AbstractWarningRecord and added an expiration string. Removed calendar object.
* Aug 15,2013 2243 jsanchez Improved the expiration string off by one minute. Fixed for practice mode.
* Aug 15,2013 2243 jsanchez Improved the expiration string off by one minute.
* Sep 4,2013 2176 jsanchez Used EmergencyType class to identify emergency products.
* </pre>
*
* @author rferrel
@ -96,8 +98,8 @@ public class FollowupData extends AbstractWarningRecord {
rval.append(buildExpStr(status, record));
}
if (record.getRawmessage().contains("EMERGENCY")) {
rval.append(" EMER");
if (EmergencyType.isEmergency(record.getRawmessage())) {
rval.append(" " + EmergencyType.EMER);
}
equvialentString = rval.substring(0,
record.getProductClass().equals("T") ? 20 : 18);

View file

@ -148,6 +148,7 @@ import com.vividsolutions.jts.geom.Polygon;
* Jul 29, 2013 DR 16352 D. Friedman Move 'result' to okPressed().
* Aug 6, 2013 2243 jsanchez Refreshed the follow up list every minute.
* Aug 15, 2013 DR 16418 D. Friedman Make dialog visibility match editable state.
* Sep 17, 2013 DR 16496 D. Friedman Make editable state more consistent.
* </pre>
*
* @author chammack
@ -1334,11 +1335,9 @@ public class WarngenDialog extends CaveSWTDialog implements
* Box was selected, allow editing of box only
*/
private void boxSelected() {
boxEditable = !polygonLocked;
trackEditable = true;
warngenLayer.getStormTrackState().editable = trackEditable;
warngenLayer.setBoxEditable(boxEditable);
warngenLayer.issueRefresh();
boxEditable = true;
trackEditable = false;
realizeEditableState();
}
/**
@ -1347,20 +1346,16 @@ public class WarngenDialog extends CaveSWTDialog implements
private void trackSelected() {
boxEditable = false;
trackEditable = true;
warngenLayer.getStormTrackState().editable = trackEditable;
warngenLayer.setBoxEditable(boxEditable);
warngenLayer.issueRefresh();
realizeEditableState();
}
/**
* Box and track was selected, allow editing of both
*/
private void boxAndTrackSelected() {
boxEditable = !polygonLocked;
boxEditable = true;
trackEditable = true;
warngenLayer.getStormTrackState().editable = trackEditable;
warngenLayer.setBoxEditable(boxEditable);
warngenLayer.issueRefresh();
realizeEditableState();
}
/**
@ -1615,7 +1610,6 @@ public class WarngenDialog extends CaveSWTDialog implements
* item from update list selected
*/
public void updateListSelected() {
warngenLayer.setOldWarningPolygon(null);
if (updateListCbo.getSelectionIndex() >= 0) {
AbstractWarningRecord oldWarning = null;
FollowupData data = (FollowupData) updateListCbo
@ -1666,6 +1660,7 @@ public class WarngenDialog extends CaveSWTDialog implements
return;
}
warngenLayer.setOldWarningPolygon(null);
bulletList.setEnabled(true);
durationList.setEnabled(true);
totalSegments = 0;
@ -2461,4 +2456,12 @@ public class WarngenDialog extends CaveSWTDialog implements
}
}
public void realizeEditableState() {
boolean layerEditable = warngenLayer.isEditable();
// TODO: Note there is no 'is track editing allowed' state yet.
warngenLayer.getStormTrackState().editable = layerEditable && trackEditable;
warngenLayer.setBoxEditable(layerEditable && boxEditable && !polygonLocked);
warngenLayer.issueRefresh();
}
}

View file

@ -188,6 +188,7 @@ import com.vividsolutions.jts.io.WKTReader;
* updated AreaHatcher's run().
* 07/26/2013 DR 16450 D. Friedman Fix logic errors when frame count is one.
* 08/19/2013 2177 jsanchez Set a GeneralGridGeometry object in the GeospatialDataList.
* 09/17/2013 DR 16496 D. Friedman Make editable state more consistent.
* </pre>
*
* @author mschenke
@ -3010,10 +3011,7 @@ public class WarngenLayer extends AbstractStormTrackResource {
final boolean editable = isEditable();
boxEditable = editable;
displayState.editable = editable;
if (editable) {
boxEditable = dialog.boxEditable();
displayState.editable = dialog.trackEditable();
}
dialog.realizeEditableState();
final WarngenDialog dlg = dialog;
dialog.getDisplay().asyncExec(new Runnable() {
@Override

View file

@ -15,6 +15,7 @@ import org.opengis.referencing.crs.CoordinateReferenceSystem;
import com.raytheon.uf.common.dataplugin.PluginDataObject;
import com.raytheon.uf.common.dataplugin.warning.AbstractWarningRecord;
import com.raytheon.uf.common.dataplugin.warning.EmergencyType;
import com.raytheon.uf.common.dataplugin.warning.PracticeWarningRecord;
import com.raytheon.uf.common.dataplugin.warning.WarningRecord.WarningAction;
import com.raytheon.uf.common.dataquery.requests.RequestConstraint;
@ -80,6 +81,7 @@ import com.vividsolutions.jts.geom.prep.PreparedGeometryFactory;
* Remove frameAltered condition in matchesFrame. It prevented entries from being displayed.
* Check if geometry is null when inspecting.
* Jul 22, 2013 2176 jsanchez Updated the wire frame and text for EMERGENCY warnings.
* Sep 4, 2013 2176 jsanchez Made the polygon line width thicker and made regular text not bold.
* </pre>
*
* @author jsanchez
@ -133,7 +135,9 @@ public abstract class AbstractWWAResource extends
/** map of dataURI to a warning entry **/
protected Map<String, WarningEntry> entryMap;
protected IFont warningsFont;
protected IFont warningsFont = null;
protected IFont emergencyFont = null;
protected RGB color;
@ -368,8 +372,8 @@ public abstract class AbstractWWAResource extends
int outlineWidth = getCapability(OutlineCapability.class)
.getOutlineWidth();
// Make wire frame outline thicker for EMERGENCY warnings
if (record.getRawmessage().contains("EMERGENCY")) {
outlineWidth *= 2;
if (EmergencyType.isEmergency(record.getRawmessage())) {
outlineWidth *= 3;
}
target.drawWireframeShape(
@ -398,7 +402,10 @@ public abstract class AbstractWWAResource extends
* paintProps.getZoomLevel() / 1000;
String[] textToPrint = getText(record, mapWidth);
if (warningsFont == null) {
warningsFont = target.getDefaultFont().deriveWithSize(
warningsFont = target.initializeFont(target
.getDefaultFont().getFontName(), 11,
new IFont.Style[0]);
emergencyFont = target.getDefaultFont().deriveWithSize(
11);
}
// DR14992: reverse the textToPrint array to plot the
@ -418,15 +425,24 @@ public abstract class AbstractWWAResource extends
params.verticallAlignment = VerticalAlignment.BOTTOM;
params.magnification = getCapability(
MagnificationCapability.class).getMagnification();
target.drawStrings(params);
// Draws the string again to have it appear bolder
if (textToPrintReversed[2].endsWith("EMER")) {
params.setText(new String[] { "", "", "EMER", "" },
color);
target.drawStrings(params);
if (EmergencyType.isEmergency(record.getRawmessage())) {
// moves over text to add EMER in a different font
textToPrintReversed[2] = String.format("%1$-21" + "s",
textToPrintReversed[2]);
params.setText(textToPrintReversed, color);
DrawableString emergencyString = new DrawableString(
params);
emergencyString.font = emergencyFont;
emergencyString.setText(new String[] { "", "",
" " + EmergencyType.EMER, "" }, color);
target.drawStrings(emergencyString);
}
target.drawStrings(params);
}
}
}
@ -598,12 +614,7 @@ public abstract class AbstractWWAResource extends
textToPrint[0] += "." + vid;
}
textToPrint[0] += "." + record.getEtn();
if (record.getRawmessage().contains("EMERGENCY")) {
textToPrint[1] = record.getPil() + " EMER";
} else {
textToPrint[1] = record.getPil();
}
textToPrint[1] = record.getPil();
SimpleDateFormat startFormat = DEFAULT_FORMAT;
SimpleDateFormat endFormat = DEFAULT_FORMAT;

View file

@ -60,7 +60,8 @@ import com.vividsolutions.jts.geom.Geometry;
* Sep 27, 2012 1149 jsanchez Refactored methods from AbstractWarningsResource into this class.
* Apr 18, 2013 1877 jsanchez Ordered the records the same for update and initial load.
* Removed no longer needed frameAltered. Do not set wire frame for a CAN.
* Jul 24, 2013 DR16350 mgamazaychikov Fix the problem with plotting EXP warning
* Jul 24, 2013 DR16350 mgamazaychikov Fix the problem with plotting EXP warning
* Sep 5, 2013 2176 jsanchez Disposed the emergency font.
* </pre>
*
* @author jsanchez
@ -143,6 +144,10 @@ public class WarningsResource extends AbstractWWAResource {
if (warningsFont != null) {
warningsFont.dispose();
}
if (emergencyFont != null) {
emergencyFont.dispose();
}
}
@Override
@ -234,7 +239,7 @@ public class WarningsResource extends AbstractWWAResource {
for (AbstractWarningRecord warnrec : recordsToLoad) {
WarningAction act = WarningAction.valueOf(warnrec.getAct());
if (act == WarningAction.CON || act == WarningAction.CAN
|| act == WarningAction.EXT) {
|| act == WarningAction.EXT) {
AbstractWarningRecord createShape = null;
for (String key : entryMap.keySet()) {
WarningEntry entry = entryMap.get(key);

View file

@ -49,6 +49,7 @@ import com.vividsolutions.jts.geom.GeometryFactory;
* Sep 27, 2012 1149 jsanchez Refactored methods from AbstractWarningsResource into this class.
* May 06, 2013 1930 bsteffen Check for null in WatchesResource.
* May 10, 2013 1951 rjpeter Updated ugcZones references
* Sep 5, 2013 2176 jsanchez Disposed the emergency font.
* </pre>
*
* @author jsanchez
@ -140,6 +141,10 @@ public class WatchesResource extends AbstractWWAResource {
if (warningsFont != null) {
warningsFont.dispose();
}
if (emergencyFont != null) {
emergencyFont.dispose();
}
}
@Override

View file

@ -12,8 +12,8 @@ export IH_DB_NAME=hd_ob92oax
### flag to control grib deprecation ###
if [ -z "$gribMode" ]; then
# uncomment only one of the following two lines
export gribMode=deprecated
#export gribMode=future
#export gribMode=deprecated
export gribMode=future
fi
## end of grib deprecation flag ###

View file

@ -40,8 +40,19 @@
<property name="taskExecutor" ref="genericThreadPool" />
</bean>
<bean id="jms-durable" class="org.apache.camel.component.jms.JmsComponent">
<constructor-arg ref="jmsDurableConfig" />
<property name="taskExecutor" ref="genericThreadPool" />
</bean>
<bean id="jmsGenericConfig" class="org.apache.camel.component.jms.JmsConfiguration"
factory-bean="jmsConfig" factory-method="copy" />
factory-bean="jmsConfig" factory-method="copy"/>
<bean id="jmsDurableConfig" class="org.apache.camel.component.jms.JmsConfiguration"
factory-bean="jmsConfig" factory-method="copy">
<property name="destinationResolver" ref="qpidDurableResolver" />
<property name="deliveryPersistent" value="true"/>
</bean>
<bean id="qpidNoDurableResolver" class="com.raytheon.uf.edex.esb.camel.spring.QpidDestinationNameResolver">
<property name="queueNamePrefix" value="direct://amq.direct/"/>
@ -71,6 +82,7 @@
<property name="templateConnectionFactory" ref="jmsPooledConnectionFactory" />
<property name="destinationResolver" ref="qpidNoDurableResolver" />
<property name="disableReplyTo" value="true" />
<property name="deliveryPersistent" value="false"/>
<!--
<property name="transacted" value="true" />
<property name="acknowledgementModeName" value="TRANSACTED"/>
@ -253,14 +265,14 @@
<route id="alertVizNotify">
<from uri="vm:edex.alertVizNotification" />
<bean ref="serializationUtil" method="transformToThrift" />
<to uri="jms-generic:topic:edex.alerts.msg?deliveryPersistent=false" />
<to uri="jms-generic:topic:edex.alerts.msg" />
</route>
<!-- Route to send text products to alarm/alert -->
<route id="alarmAlertNotify">
<from uri="vm:edex.alarmAlertNotification" />
<bean ref="serializationUtil" method="transformToThrift" />
<to uri="jms-generic:topic:edex.alarms.msg?deliveryPersistent=false" />
<to uri="jms-generic:topic:edex.alarms.msg" />
</route>
<!-- Route to periodically close any unused jms resources that have been pooled -->

View file

@ -140,10 +140,14 @@ class MasterInterface(object):
def reloadModule(self, moduleName):
if sys.modules.has_key(moduleName):
# because the user might have added or removed items
# from the module's dictionary, we cannot trust reload() here.
sys.modules.__delitem__(moduleName)
__import__(moduleName)
# Because the user might have removed items
# from the module's dictionary, we cannot trust reload() to
# remove old items. We will manually remove everything
# but built-ins to ensure everything gets re-initialized when
# reload() is called.
mod = sys.modules[moduleName]
modGlobalsToRemove = [k for k in mod.__dict__ if not k.startswith('_')]
for k in modGlobalsToRemove:
mod.__dict__.pop(k)
reload(mod)

View file

@ -1,75 +1,73 @@
#*
CREATED 1-25-2012 BY MIKE DANGELO AND EVAN BOOKBINDER
UPDATED 9-16-2013 BY MIKE DANGELO AND EVAN BOOKBINDER
Here are some examples of very simple INTERSTATE output
(one line/sentence per interstate):
### THIS PLUG-IN VM FILE ALLOWS YOU TO CONSOLIDATE ALL YOUR MILEMARKER/EXIT/ROUTE
### OUTPUT INTO A SINGLE FUNCTION CALL
#mmarkers(${i70momm},${i70mommid},"INTERSTATE 70 IN MISSOURI","MILE MARKER",false)
#mmarkers(${i70momm},${i70mommid},"INTERSTATE 70 IN MISSOURI","MILE MARKER",true)
#mmarkers(${i70momm},${i70mommid},"INTERSTATE 70 IN MISSOURI","",false)
#mmarkers(${i70momm},${i70mommid},"INTERSTATE 70 IN MISSOURI","",true)
#mmarkers(${i435mm},${i435mmid},"INTERSTATE 435 IN MISSOURI","",false)
#mmarkers(${i435mm},${i435mmid},"INTERSTATE 435 IN MISSOURI","",true)
#mmarkers(${i435mm},${i435mmid},"INTERSTATE 435 IN MISSOURI","MILE MARKER",false)
#mmarkers(${i435mm},${i435mmid},"INTERSTATE 435 IN MISSOURI","MILE MARKER",true)
Mile Marker Test Code
Mile Marker Macro
macro "mmarkers" use (called out of VM_global_library.vm):
#mmarkers($name, $id, $type, $markers, $simplify)
#macro(mmarkers $markers $id $name $type $simplify)
where the argument:
$markers is a string, and is the exact "variable" set in the XML "pointSource" tag for this road
- <pointSource variable="i70momm">
$id is the sequential ID database field to determine logical breaks in the mile markers
set in the XML "pointSource" tag for this road
- <pointSource variable="i70mommid">
$name is a string "OUTPUT TEXT" of the road name
$id is the sequential ID database field to determine logical breaks in the mile markers
$type is a string which describes the type of "marker"
- may be "MILE MARKER" or something similar, or blank ""
- "" is for use when town names (CHARLESTON) or exit names (THE SUNSET EXIT)
$markers is a string, and is the exact "variable" set in the XML "pointSource" tag for this road
- <pointSource variable="i70momm">
$simplify is a boolean value (true or false)
- true concatenates (FROM MM 2 to 4),
- false is a big list (MM 2...3...AND 4)
From mileMarkers.xml
$databaseName is an array of pointSource objects containing the milemarker names
$databaseId is an array of pointSource objects containing the milemarker IDs
$specificName is an array of plain English names for the Interstates, Routes, etc..
e.g.
#set ($databaseName = [${i435mm},${i70momm},${i35momm}])
#set ($databaseId = [${i435mmid},${i70mommid},${i35mommid}])
#set ($specificName = ['INTERSTATE 435','INTERSTATE 70','INTERSTATE 35'])
CONFIGURATION:
#COMMENT OUT LINES 59-62 BELOW AS NEEDED, REPLACING THE EXAMPLE WITH YOUR MILE MARKER/ROUTE ENTRIES
#EACH LINE CONTAINS A VARIABLE MM1,MM2,MM3,etc... REFERENCING AN ARRAY (LIST) OF DATA THAT
#WILL BE PASSED TO THE MMARKERS ROUTINE.
The following code makes upkeep of the mile marker files easier, and is
reccomended for use.
Substitute all your "INTERSTATE NAME(s)" into the array: $specificName
Likewise,
Substitute all your corresponding database table names (${tablename}) for those
interstates into the array: $databaseName
You may also use town names or exit names
in the "name" field of your database tables.
The items in the array are as follows:
1.) java Object - A pointSource object from mileMarkers.xml containing the milemarker names
2.) java Object - A pointSource object from mileMarkers.xml containing the milemarker IDs or index
3.) String - A plain English name for the Interstates, Routes, etc..
4.) String - A plain English name describing the output (mile marker, exit, etc...)
Can be blank ''. Make sure the singular phrase is used (an "S" will be auto-applied for
plural values. e.g. MILE MARKERS 3 AND 10
5.) Boolean - A true/false value telling the function whether to group the milemarkers where
possible, or list them individually. For mile markers that are text (such as exits or
intersections, false might be a better option)
NOTE: PLEASE ENSURE PROPER SYNTAX. Java Objects are ${variable}, Text Strings are 'TEXT', and
Booleans are true/false (no quote)
ALSO ENSURE THAT EACH LINE CONTAINS A UNIQUE VARIABLE NAME: MM1, MM2, MM3, etc..
HERE IS AN EXAMPLE:
e.g.
#set ($mm1 = [${i435mm},${i435mmid},'INTERSTATE 435','MILE MARKER',true])
#set ($mm2 = [${i70momm},${i70mommid},'INTERSTATE 70 IN MISSOURI','MILE MARKER',true])
#set ($mm3 = [${i35momm},${i35mommid},'INTERSTATE 70 IN KANSAS','MILE MARKER',true])
After creating these, we must create a list containing all of our variable names
e.g.
#set ($varList = [$mm1,$mm2,$mm3])
*#
#set($hits = 0)
#set($bigList = '')
##set ($databaseName = [${i435mm},${i70momm},${i35momm}])
##set ($databaseId = [${i435mmid},${i70mommid},${i35mommid}])
##set ($specificName = ['INTERSTATE 435','INTERSTATE 70','INTERSTATE 35'])
#set ($itemCount = 0)
#foreach($specName in $specificName)
#set ($itemCount = $itemCount + 1)
#set ($itemCount2 = 0)
#foreach($dbName in $databaseName)
#set ($itemCount2 = $itemCount2 + 1)
#set ($itemCount3 = 0)
#foreach($dbId in $databaseId)
#set ($itemCount3 = $itemCount3 + 1)
#if ($itemCount3 == $itemCount2 && $itemCount2 == $itemCount)
#set ($checker = "#mmarkers(${dbName},${dbId},${specName},'MILE MARKER',true)")
##set ($mm1 = [${i435mm},${i435mmid},'INTERSTATE 435','MILE MARKER',true])
##set ($mm2 = [${i70momm},${i70mommid},'INTERSTATE 70 IN MISSOURI','MILE MARKER',true])
##set ($mm3 = [${i35momm},${i35mommid},'INTERSTATE 70 IN KANSAS','MILE MARKER',true])
##set ($varList = [$mm1,$mm2,$mm3])
#foreach ($var in $varList)
#set ($checker = "#mmarkers(${list.get(${var},0)},${list.get(${var},1)},${list.get(${var},2)},${list.get(${var},3)},${list.get(${var},4)})")
#if ($checker.length() > 0)
#set ($hits = $hits + 1)
#set ($bigList = "$bigList $checker")
#end
#end
#end
#end
#end
#if ($hits == 1)
THIS INCLUDES$bigList
#end

View file

@ -8,22 +8,52 @@
SHOULD BE MODIFIED.
EXAMPLE FOR INTERSTATE 435 in the Kansas City Metro follows:
<pointSource variable="i435mm">
<pointSource>i435mm</pointSource>
<pointSource>i435</pointSource>
<pointField>NAME</pointField>
<searchMethod>POINTS</searchMethod>
<withinPolygon>true</withinPolygon>
<maxResults>1000</maxResults>
<distanceThreshold>100</distanceThreshold>
<sortBy>
<sort>gid</sort>
</sortBy>
</pointSource>
<pointSource variable="i435mmid">
<pointSource>i435mm</pointSource>
<pointSource>i435</pointSource>
<pointField>GID</pointField>
<searchMethod>POINTS</searchMethod>
<withinPolygon>true</withinPolygon>
<maxResults>1000</maxResults>
<distanceThreshold>100</distanceThreshold>
<sortBy>
<sort>gid</sort>
</sortBy>
</pointSource>
-->
<pointSource variable="i35momm">
<pointSource>i35mo</pointSource>
<pointField>NAME</pointField>
<searchMethod>POINTS</searchMethod>
<withinPolygon>true</withinPolygon>
<maxResults>1000</maxResults>
<distanceThreshold>100</distanceThreshold>
<sortBy>
<sort>gid</sort>
</sortBy>
</pointSource>
<pointSource variable="i35mommid">
<pointSource>i35mo</pointSource>
<pointField>GID</pointField>
<searchMethod>POINTS</searchMethod>
<withinPolygon>true</withinPolygon>
<maxResults>1000</maxResults>
<distanceThreshold>100</distanceThreshold>
<sortBy>
<sort>gid</sort>
</sortBy>
</pointSource>
-->

View file

@ -50,7 +50,7 @@
<!-- LDAD (watch/warn) triggered script runner -->
<route id="ldadWatchWarn">
<from uri="jms-generic:queue:watchwarn?destinationResolver=#qpidDurableResolver"/>
<from uri="jms-durable:queue:watchwarn"/>
<doTry>
<bean ref="ldadScriptRunner" method="runScripts" />
<doCatch>

View file

@ -76,7 +76,7 @@
<method bean="uriAggregator" method="hasUris" />
<bean ref="uriAggregator" method="sendQueuedUris" />
<bean ref="serializationUtil" method="transformToThrift" />
<to uri="jms-generic:topic:edex.alerts?timeToLive=60000&amp;deliveryPersistent=false"/>
<to uri="jms-generic:topic:edex.alerts?timeToLive=60000"/>
</filter>
</route>
</camelContext>

View file

@ -12,7 +12,7 @@
<bean id="airepDistRegistry" factory-bean="distributionSrv"
factory-method="register">
<constructor-arg value="airep" />
<constructor-arg value="jms-dist:queue:Ingest.airep" />
<constructor-arg value="jms-dist:queue:Ingest.airep"/>
</bean>
<bean id="airepCamelRegistered" factory-bean="contextManager"
@ -33,13 +33,13 @@
<setHeader headerName="pluginName">
<constant>airep</constant>
</setHeader>
<to uri="jms-generic:queue:Ingest.airep" />
<to uri="jms-durable:queue:Ingest.airep" />
</route>
-->
<!-- Begin airep routes -->
<route id="airepIngestRoute">
<from uri="jms-generic:queue:Ingest.airep?destinationResolver=#qpidDurableResolver" />
<from uri="jms-durable:queue:Ingest.airep"/>
<setHeader headerName="pluginName">
<constant>airep</constant>
</setHeader>

View file

@ -9,7 +9,7 @@
<bean id="binlightningDistRegistry" factory-bean="distributionSrv"
factory-method="register">
<constructor-arg value="binlightning" />
<constructor-arg value="jms-dist:queue:Ingest.binlightning?destinationResolver=#qpidDurableResolver" />
<constructor-arg value="jms-dist:queue:Ingest.binlightning" />
</bean>
<bean id="binlightningCamelRegistered" factory-bean="clusteredCamelContextMgr"
@ -31,13 +31,13 @@
<setHeader headerName="pluginName">
<constant>binlightning</constant>
</setHeader>
<to uri="jms-generic:queue:Ingest.binlightning" />
<to uri="jms-durable:queue:Ingest.binlightning" />
</route>
-->
<!-- Begin binlightning routes -->
<route id="binlightningIngestRoute">
<from uri="jms-generic:queue:Ingest.binlightning?destinationResolver=#qpidDurableResolver" />
<from uri="jms-durable:queue:Ingest.binlightning"/>
<setHeader headerName="pluginName">
<constant>binlightning</constant>
</setHeader>

View file

@ -8,7 +8,7 @@
<bean id="bufrmosDistRegistry" factory-bean="distributionSrv"
factory-method="register">
<constructor-arg value="bufrmos" />
<constructor-arg value="jms-dist:queue:Ingest.bufrmos?destinationResolver=#qpidDurableResolver" />
<constructor-arg value="jms-dist:queue:Ingest.bufrmos" />
</bean>
<bean id="bufrmosCamelRegistered" factory-bean="contextManager"
@ -30,13 +30,13 @@
<setHeader headerName="pluginName">
<constant>bufrmos</constant>
</setHeader>
<to uri="jms-generic:queue:Ingest.bufrmos" />
<to uri="jms-durable:queue:Ingest.bufrmos" />
</route>
-->
<!-- Begin bufrmos routes -->
<route id="bufrmosIngestRoute">
<from uri="jms-generic:queue:Ingest.bufrmos?destinationResolver=#qpidDurableResolver" />
<from uri="jms-durable:queue:Ingest.bufrmos" />
<setHeader headerName="pluginName">
<constant>bufrmos</constant>
</setHeader>

View file

@ -32,13 +32,13 @@
<setHeader headerName="pluginName">
<constant>bufrua</constant>
</setHeader>
<to uri="jms-generic:queue:Ingest.bufrua"/>
<to uri="jms-durable:queue:Ingest.bufrua"/>
</route>
-->
<!-- Begin BUFRUA routes -->
<route id="bufruaIngestRoute">
<from uri="jms-generic:queue:Ingest.bufrua?destinationResolver=#qpidDurableResolver"/>
<from uri="jms-durable:queue:Ingest.bufrua"/>
<setHeader headerName="pluginName">
<constant>bufrua</constant>
</setHeader>

View file

@ -29,13 +29,13 @@
<setHeader headerName="pluginName">
<constant>ccfp</constant>
</setHeader>
<to uri="jms-generic:queue:Ingest.ccfp" />
<to uri="jms-durable:queue:Ingest.ccfp" />
</route>
-->
<!-- Begin ccfp routes -->
<route id="ccfpIngestRoute">
<from uri="jms-generic:queue:Ingest.ccfp?destinationResolver=#qpidDurableResolver" />
<from uri="jms-durable:queue:Ingest.ccfp"/>
<setHeader headerName="pluginName">
<constant>ccfp</constant>
</setHeader>

View file

@ -55,7 +55,7 @@
errorHandlerRef="errorHandler">
<route id="gfeParmIdCacheListenerEndpoint">
<from uri="jms-generic:topic:gfeGribNotification?concurrentConsumers=1" />
<from uri="jms-generic:topic:gfeGribNotification"/>
<doTry>
<bean ref="serializationUtil" method="transformFromThrift" />
<bean ref="parmIdFilter" method="updateParmIdCache" />
@ -87,7 +87,7 @@
</route>
<route id="rebuildD2DCacheAfterPurge">
<from uri="jms-generic:topic:pluginPurged" />
<from uri="jms-durable:topic:pluginPurged" />
<doTry>
<bean ref="d2dParmIdCache" method="pluginPurged" />
<doCatch>

View file

@ -464,9 +464,9 @@
<constructor-arg ref="jmsIscSendConfig" />
<property name="taskExecutor" ref="iscSendThreadPool" />
</bean>
<bean id="jmsIscSendConfig" class="org.apache.camel.component.jms.JmsConfiguration"
factory-bean="jmsConfig" factory-method="copy" />
<bean id="iscSendThreadPool"
<bean id="jmsIscSendConfig" class="org.apache.camel.component.jms.JmsConfiguration"
factory-bean="jmsDurableConfig" factory-method="copy"/>
<bean id="iscSendThreadPool"
class="com.raytheon.uf.edex.esb.camel.spring.JmsThreadPoolTaskExecutor">
<property name="corePoolSize" value="2" />
<property name="maxPoolSize" value="2" />
@ -487,11 +487,11 @@
<!-- ISC Receive Beans -->
<bean id="jms-iscrec" class="org.apache.camel.component.jms.JmsComponent">
<constructor-arg ref="jmsIscReceiveConfig" />
<constructor-arg ref="jmsIscRecConfig" />
<property name="taskExecutor" ref="iscReceiveThreadPool" />
</bean>
<bean id="jmsIscReceiveConfig" class="org.apache.camel.component.jms.JmsConfiguration"
factory-bean="jmsConfig" factory-method="copy" />
<bean id="jmsIscRecConfig" class="org.apache.camel.component.jms.JmsConfiguration"
factory-bean="jmsDurableConfig" factory-method="copy"/>
<bean id="iscReceiveThreadPool"
class="com.raytheon.uf.edex.esb.camel.spring.JmsThreadPoolTaskExecutor">
<property name="corePoolSize" value="2" />
@ -623,7 +623,7 @@
<!-- ISC Data Receive route -->
<route id="iscReceiveRoute">
<from uri="jms-iscrec:queue:gfeIscDataReceive?concurrentConsumers=2&amp;destinationResolver=#qpidDurableResolver" />
<from uri="jms-iscrec:queue:gfeIscDataReceive?concurrentConsumers=2"/>
<doTry>
<pipeline>
<bean ref="serializationUtil" method="transformFromThrift" />
@ -643,7 +643,7 @@
errorHandlerRef="errorHandler" autoStartup="false">
<route id="iscSendJobQueueAggr">
<from uri="jms-iscsend:queue:iscSendNotification?destinationResolver=#qpidDurableResolver" />
<from uri="jms-iscsend:queue:iscSendNotification" />
<doTry>
<bean ref="serializationUtil" method="transformFromThrift" />
<bean ref="iscSendQueue" method="addSendJobs" />

View file

@ -8,8 +8,8 @@
<constructor-arg ref="jmsSmartInitConfig" />
<property name="taskExecutor" ref="smartInitThreadPool" />
</bean>
<bean id="jmsSmartInitConfig" class="org.apache.camel.component.jms.JmsConfiguration"
factory-bean="jmsConfig" factory-method="copy" />
<bean id="jmsSmartInitConfig" class="org.apache.camel.component.jms.JmsConfiguration" factory-bean="jmsDurableConfig"
factory-method="copy"/>
<bean id="smartInitThreadPool"
class="com.raytheon.uf.edex.esb.camel.spring.JmsThreadPoolTaskExecutor">
<property name="corePoolSize" value="${smartinit.threadpoolsize}" />
@ -40,7 +40,7 @@
xmlns="http://camel.apache.org/schema/spring"
errorHandlerRef="errorHandler">
<route id="SPCWatch">
<from uri="jms-generic:queue:edex.spcWatch?destinationResolver=#qpidDurableResolver" />
<from uri="jms-durable:queue:edex.spcWatch"/>
<doTry>
<bean ref="spcWatch" method="handleSpcWatch" />
<doCatch>
@ -51,7 +51,7 @@
</route>
<route id="TPCWatch">
<from uri="jms-generic:queue:edex.tpcWatch?destinationResolver=#qpidDurableResolver" />
<from uri="jms-durable:queue:edex.tpcWatch"/>
<doTry>
<bean ref="tpcWatch" method="handleTpcWatch" />
<doCatch>
@ -78,7 +78,7 @@
<!-- gfeIngestNotification must be a singleton and has 4 threads to read due to throughput of messages during model run times -->
<route id="gfeIngestNotification">
<from uri="jms-generic:queue:gfeDataURINotification?destinationResolver=#qpidDurableResolver&amp;concurrentConsumers=4" />
<from uri="jms-durable:queue:gfeDataURINotification?concurrentConsumers=4" />
<doTry>
<bean ref="serializationUtil" method="transformFromThrift" />
<bean ref="gfeIngestFilter" method="filterDataURINotifications" />
@ -117,9 +117,9 @@
<!-- Convert the topic into a queue so only one consumer gets each message and we still have competing consumers. -->
<route id="gfeDataURINotificationQueueRoute">
<from uri="jms-gfe-notify:topic:edex.alerts" />
<from uri="jms-generic:topic:edex.alerts" />
<doTry>
<to uri="jms-generic:queue:gfeDataURINotification"/>
<to uri="jms-durable:queue:gfeDataURINotification"/>
<doCatch>
<exception>java.lang.Throwable</exception>
<to
@ -128,40 +128,6 @@
</doTry>
</route>
</camelContext>
<!-- Beans to define a custom jms connection which will allow a durable subscription -->
<bean id="gfeNotifyConnectionFactory" class="org.apache.qpid.client.AMQConnectionFactory">
<constructor-arg type="java.lang.String" value="amqp://guest:guest@gfeNotify/edex?brokerlist='tcp://${BROKER_ADDR}?retries='9999'&amp;connecttimeout='5000'&amp;connectdelay='5000''&amp;maxprefetch='0'&amp;sync_publish='all'&amp;sync_ack='true'"/>
</bean>
<bean id="gfeNotifyPooledConnectionFactory" class="com.raytheon.uf.common.jms.JmsPooledConnectionFactory">
<constructor-arg ref="gfeNotifyConnectionFactory"/>
<property name="provider" value="QPID"/>
<property name="reconnectInterval" value="5000"/>
<!-- After connection has been closed by thread keep it allocated for another 90 seconds in case thread needs it again -->
<property name="connectionHoldTime" value="90000"/>
<!-- Any resource that has been available in the pool for more than 1 minute will be closed -->
<property name="resourceRetention" value="60000"/>
<property name="maxSpareConnections" value="1"/>
</bean>
<bean id="gfeNotifyJmsConfig" class="org.apache.camel.component.jms.JmsConfiguration"
factory-bean="jmsConfig" factory-method="copy">
<property name="listenerConnectionFactory" ref="gfeNotifyPooledConnectionFactory" />
<property name="templateConnectionFactory" ref="gfeNotifyPooledConnectionFactory" />
</bean>
<bean id="gfeNotifyThreadPool"
class="com.raytheon.uf.edex.esb.camel.spring.JmsThreadPoolTaskExecutor">
<property name="corePoolSize" value="1" />
<property name="maxPoolSize" value="1" />
</bean>
<bean id="jms-gfe-notify" class="org.apache.camel.component.jms.JmsComponent">
<constructor-arg ref="gfeNotifyJmsConfig" />
<property name="taskExecutor" ref="gfeNotifyThreadPool" />
</bean>
<!-- end of custom JMS beans -->
<bean factory-bean="clusteredCamelContextMgr"
factory-method="register">

View file

@ -21,7 +21,6 @@
package com.raytheon.edex.plugin.gfe.cache.d2dparms;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
@ -72,6 +71,8 @@ import com.raytheon.uf.edex.site.SiteAwareRegistry;
* Mar 20, 2013 #1774 randerso Changed to use GFDD2DDao
* Apr 01, 2013 #1774 randerso Moved wind component checking to GfeIngestNotificaionFilter
* May 14, 2013 #2004 randerso Added DBInvChangeNotifications when D2D data is purged
* Sep 12, 2013 #2348 randerso Changed to send DBInvChangeNotifications in a batch instead
* of one at a time.
*
* </pre>
*
@ -346,13 +347,8 @@ public class D2DParmIdCache {
putParmIDList(parmIds);
List<DatabaseID> currentDbInventory = this.getDatabaseIDs();
dbsToRemove.removeAll(currentDbInventory);
List<DBInvChangeNotification> invChgList = new ArrayList<DBInvChangeNotification>(
dbsToRemove.size());
for (DatabaseID dbId : dbsToRemove) {
invChgList.add(new DBInvChangeNotification(null, Arrays
.asList(dbId), siteID));
}
SendNotifications.send(invChgList);
SendNotifications.send(new DBInvChangeNotification(null,
dbsToRemove, siteID));
// inform GfeIngestNotificationFilter of removed dbs
GfeIngestNotificationFilter.purgeDbs(dbsToRemove);

View file

@ -88,7 +88,7 @@ import com.raytheon.uf.edex.site.notify.SendSiteActivationNotifications;
* activation.
* Mar 20, 2013 #1774 randerso Changed to use GFED2DDao
* May 02, 2013 #1969 randerso Moved updateDbs method into IFPGridDatabase
*
* Sep 13, 2013 2368 rjpeter Used durable jms settings.
* </pre>
*
* @author njensen
@ -115,7 +115,7 @@ public class GFESiteActivation implements ISiteActivationListener {
private boolean intialized = false;
private ExecutorService postActivationTaskExecutor = MoreExecutors
private final ExecutorService postActivationTaskExecutor = MoreExecutors
.getExitingExecutorService((ThreadPoolExecutor) Executors
.newCachedThreadPool());
@ -356,7 +356,7 @@ public class GFESiteActivation implements ISiteActivationListener {
GridDatabase db = GridParmManager.getDb(dbid);
// cluster locked since IFPGridDatabase can modify the grids
// based on changes to grid size, etc
if (db instanceof IFPGridDatabase && db.databaseIsValid()) {
if ((db instanceof IFPGridDatabase) && db.databaseIsValid()) {
((IFPGridDatabase) db).updateDbs();
}
}
@ -410,7 +410,7 @@ public class GFESiteActivation implements ISiteActivationListener {
long startTime = System.currentTimeMillis();
// wait for system startup or at least 3 minutes
while (!EDEXUtil.isRunning()
|| System.currentTimeMillis() > startTime + 180000) {
|| (System.currentTimeMillis() > (startTime + 180000))) {
try {
Thread.sleep(15000);
} catch (InterruptedException e) {
@ -420,7 +420,7 @@ public class GFESiteActivation implements ISiteActivationListener {
ClusterTask ct = ClusterLockUtils.lookupLock(TASK_NAME,
SMART_INIT_TASK_DETAILS + siteID);
if (ct.getLastExecution() + SMART_INIT_TIMEOUT < System
if ((ct.getLastExecution() + SMART_INIT_TIMEOUT) < System
.currentTimeMillis()) {
ct = ClusterLockUtils.lock(TASK_NAME,
SMART_INIT_TASK_DETAILS + siteID,
@ -467,7 +467,7 @@ public class GFESiteActivation implements ISiteActivationListener {
"Firing smartinit for " + id);
try {
producer.sendAsyncUri(
"jms-generic:queue:manualSmartInit",
"jms-durable:queue:manualSmartInit",
id
+ ":0::"
+ SmartInitRecord.SITE_ACTIVATION_INIT_PRIORITY);
@ -499,7 +499,7 @@ public class GFESiteActivation implements ISiteActivationListener {
long startTime = System.currentTimeMillis();
// wait for system startup or at least 3 minutes
while (!EDEXUtil.isRunning()
|| System.currentTimeMillis() > startTime + 180000) {
|| (System.currentTimeMillis() > (startTime + 180000))) {
try {
Thread.sleep(15000);
} catch (InterruptedException e) {

View file

@ -100,6 +100,12 @@ import com.raytheon.uf.edex.database.purge.PurgeLogger;
* Removed inventory from DBInvChangedNotification
* 05/03/13 #1974 randerso Fixed error logging to include stack trace
* 05/14/13 #2004 randerso Added methods to synch GridParmManager across JVMs
* 09/12/13 #2348 randerso Added logging when database are added/removed from dbMap
* Fixed the synchronization of dbMap with the database inventory
* Changed to call D2DGridDatabase.getDatabase instead of calling
* the constructor directly to ensure the data exists before creating
* the D2DGridDatabase object
*
* </pre>
*
* @author bphillip
@ -1016,10 +1022,10 @@ public class GridParmManager {
sr.addMessage("VersionPurge failed - couldn't get inventory");
return sr;
}
List<DatabaseID> databases = sr.getPayload();
List<DatabaseID> currentInv = sr.getPayload();
// sort the inventory by site, type, model, time (most recent first)
Collections.sort(databases);
Collections.sort(currentInv);
// process the inventory looking for "old" unwanted databases
String model = null;
@ -1027,7 +1033,7 @@ public class GridParmManager {
String type = null;
int count = 0;
int desiredVersions = 0;
for (DatabaseID dbId : databases) {
for (DatabaseID dbId : currentInv) {
// new series?
if (!dbId.getSiteId().equals(site)
|| !dbId.getDbType().equals(type)
@ -1055,11 +1061,31 @@ public class GridParmManager {
}
}
List<DatabaseID> newInv = getDbInventory(siteID).getPayload();
List<DatabaseID> additions = new ArrayList<DatabaseID>(newInv);
additions.removeAll(currentInv);
List<DatabaseID> deletions = new ArrayList<DatabaseID>(currentInv);
deletions.removeAll(newInv);
// kludge to keep dbMap in synch until GridParmManager/D2DParmICache
// merge/refactor
dbMap.keySet().retainAll(databases);
List<DatabaseID> toRemove = new ArrayList<DatabaseID>(dbMap.keySet());
toRemove.removeAll(newInv);
for (DatabaseID dbId : toRemove) {
statusHandler
.info("Synching GridParmManager with database inventory, removing "
+ dbId);
dbMap.remove(dbId);
createDbNotification(siteID, databases);
// add any removals to the deletions list
// so notifications go to the other JVMs
if (!deletions.contains(dbId)) {
deletions.add(dbId);
}
}
createDbNotification(siteID, additions, deletions);
return sr;
}
@ -1220,8 +1246,8 @@ public class GridParmManager {
// ingested
String d2dModelName = serverConfig
.d2dModelNameMapping(modelName);
db = new D2DGridDatabase(serverConfig, d2dModelName,
dbId.getModelTimeAsDate());
db = D2DGridDatabase.getDatabase(serverConfig,
d2dModelName, dbId.getModelTimeAsDate());
} catch (Exception e) {
statusHandler.handle(Priority.PROBLEM,
e.getLocalizedMessage(), e);
@ -1244,6 +1270,7 @@ public class GridParmManager {
}
if ((db != null) && db.databaseIsValid()) {
statusHandler.info("getDb called, adding " + dbId);
dbMap.put(dbId, db);
}
}
@ -1255,6 +1282,8 @@ public class GridParmManager {
while (iter.hasNext()) {
DatabaseID dbId = iter.next();
if (dbId.getSiteId().equals(siteID)) {
statusHandler.info("purgeDbCache(" + siteID + "), removing "
+ dbId);
iter.remove();
}
}
@ -1370,18 +1399,6 @@ public class GridParmManager {
return sr;
}
private static void createDbNotification(String siteID,
List<DatabaseID> prevInventory) {
List<DatabaseID> newInventory = getDbInventory(siteID).getPayload();
List<DatabaseID> additions = new ArrayList<DatabaseID>(newInventory);
additions.removeAll(prevInventory);
List<DatabaseID> deletions = new ArrayList<DatabaseID>(prevInventory);
deletions.removeAll(newInventory);
createDbNotification(siteID, additions, deletions);
}
private static void createDbNotification(String siteID,
List<DatabaseID> additions, List<DatabaseID> deletions) {
if (!additions.isEmpty() || !deletions.isEmpty()) {
@ -1400,6 +1417,7 @@ public class GridParmManager {
"Unable to purge model database: " + id, e);
}
}
statusHandler.info("deallocateDb called, removing " + id);
dbMap.remove(id);
}
@ -1429,6 +1447,9 @@ public class GridParmManager {
}
for (DatabaseID dbId : invChanged.getDeletions()) {
statusHandler
.info("DBInvChangeNotification deletion received, removing "
+ dbId);
dbMap.remove(dbId);
}
}

View file

@ -43,7 +43,6 @@ import com.raytheon.edex.plugin.gfe.db.dao.GFED2DDao;
import com.raytheon.edex.plugin.gfe.paraminfo.GridParamInfo;
import com.raytheon.edex.plugin.gfe.paraminfo.GridParamInfoLookup;
import com.raytheon.edex.plugin.gfe.paraminfo.ParameterInfo;
import com.raytheon.edex.plugin.gfe.server.GridParmManager;
import com.raytheon.uf.common.comm.CommunicationException;
import com.raytheon.uf.common.dataplugin.PluginException;
import com.raytheon.uf.common.dataplugin.gfe.GridDataHistory;
@ -107,6 +106,9 @@ import com.raytheon.uf.edex.database.DataAccessLayerException;
* 04/17/2013 #1913 randerso Added GFE level mapping to replace GridTranslator
* 05/02/2013 #1969 randerso Removed unnecessary updateDbs method
* 05/03/2013 #1974 randerso Fixed error handling when no D2D level mapping found
* 09/12/2013 #2348 randerso Removed code that called getDb from getD2DDatabaseIdsFromDb
* Added function to create a D2DGridDatabase object only if there is
* data in postgres for the desired model/reftime
*
* </pre>
*
@ -135,6 +137,33 @@ public class D2DGridDatabase extends VGridDatabase {
gfeModelName, modelTime);
}
/**
* Get a D2DGridDatabase if it is available
*
* @param config
* configuration for site
* @param dbId
* DatabaseID of desired database
* @return D2DGridDatabase or null if not available
*/
public static D2DGridDatabase getDatabase(IFPServerConfig config,
String d2dModelName, Date refTime) {
try {
GFED2DDao dao = new GFED2DDao();
List<Date> result = dao.getModelRunTimes(d2dModelName, -1);
if (result.contains(refTime)) {
D2DGridDatabase db = new D2DGridDatabase(config, d2dModelName,
refTime);
return db;
}
return null;
} catch (Exception e) {
statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(), e);
return null;
}
}
/**
* Retrieves DatabaseIDs for all model runs of a given d2dModelName
*
@ -178,15 +207,7 @@ public class D2DGridDatabase extends VGridDatabase {
for (Date date : result) {
DatabaseID dbId = null;
dbId = getDbId(d2dModelName, date, config);
try {
GridDatabase db = GridParmManager.getDb(dbId);
if ((db != null) && !dbInventory.contains(dbId)) {
dbInventory.add(dbId);
}
} catch (GfeException e) {
statusHandler.handle(Priority.PROBLEM,
e.getLocalizedMessage(), e);
}
dbInventory.add(dbId);
}
return dbInventory;
} catch (PluginException e) {
@ -285,10 +306,14 @@ public class D2DGridDatabase extends VGridDatabase {
/**
* Constructs a new D2DGridDatabase
*
* For internal use only. External code should call
* D2DGridDatabase.getDatabase(IFPServerConfig, String, Date) to ensure
* objects are only created if data is present
*
* @param dbId
* The database ID of this database
*/
public D2DGridDatabase(IFPServerConfig config, String d2dModelName,
private D2DGridDatabase(IFPServerConfig config, String d2dModelName,
Date refTime) throws GfeException {
super(config);

View file

@ -35,7 +35,7 @@ import com.raytheon.uf.common.serialization.comm.IRequestHandler;
import com.raytheon.uf.edex.core.EDEXUtil;
/**
* TODO Add Description
* Handler for SmartInitRequest.
*
* <pre>
*
@ -43,7 +43,7 @@ import com.raytheon.uf.edex.core.EDEXUtil;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Oct 12, 2010 dgilling Initial creation
*
* Sep 13, 2013 2368 rjpeter Used durable jms settings.
* </pre>
*
* @author dgilling
@ -93,7 +93,7 @@ public class SmartInitRequestHandler implements
.append(SmartInitRecord.MANUAL_SMART_INIT_PRIORITY);
EDEXUtil.getMessageProducer().sendAsyncUri(
"jms-generic:queue:manualSmartInit",
"jms-durable:queue:manualSmartInit",
manualInitString.toString());
} else {
sr.addMessage("No valid model data could be retrieved for model "

View file

@ -12,7 +12,7 @@
<bean id="goessoundingDistRegistry" factory-bean="distributionSrv"
factory-method="register">
<constructor-arg ref="goessoundingPluginName" />
<constructor-arg value="jms-dist:queue:Ingest.goessounding?destinationResolver=#qpidDurableResolver" />
<constructor-arg value="jms-dist:queue:Ingest.goessounding"/>
</bean>
<bean id="goessoundingCamelRegistered" factory-bean="contextManager"
@ -35,13 +35,13 @@
<setHeader headerName="pluginName">
<constant>goessounding</constant>
</setHeader>
<to uri="jms-generic:queue:Ingest.goessounding" />
<to uri="jms-durable:queue:Ingest.goessounding" />
</route>
-->
<!-- Begin GOES Sounding routes -->
<route id="goessndgIngestRoute">
<from uri="jms-generic:queue:Ingest.goessounding?destinationResolver=#qpidDurableResolver" />
<from uri="jms-durable:queue:Ingest.goessounding"/>
<setHeader headerName="pluginName">
<constant>goessounding</constant>
</setHeader>

View file

@ -6,14 +6,11 @@
<bean id="gribDecoder" class="com.raytheon.edex.plugin.grib.GribDecoder" />
<bean id="ingest-grib" class="org.apache.camel.component.jms.JmsComponent">
<constructor-arg ref="jmsIngestGribConfig" />
<constructor-arg ref="jmsGribConfig" />
<property name="taskExecutor" ref="gribThreadPool" />
</bean>
<bean id="jmsIngestGribConfig" class="org.apache.camel.component.jms.JmsConfiguration"
factory-bean="jmsConfig" factory-method="copy">
</bean>
<bean id="jmsGribConfig" class="org.apache.camel.component.jms.JmsConfiguration"
factory-bean="jmsDurableConfig" factory-method="copy"/>
<bean id="gribThreadPool"
class="com.raytheon.uf.edex.esb.camel.spring.JmsThreadPoolTaskExecutor">
<property name="corePoolSize" value="${grib-decode.count.threads}" />
@ -61,7 +58,7 @@
autoStartup="false">
<endpoint id="gribFileEndpoint" uri="file:${edex.home}/data/sbn/grib?noop=true&amp;idempotent=false" />
<endpoint id="gribJmsEndpoint" uri="ingest-grib:queue:Ingest.Grib?concurrentConsumers=${grib-decode.count.threads}&amp;destinationResolver=#qpidDurableResolver" />
<endpoint id="gribJmsEndpoint" uri="ingest-grib:queue:Ingest.Grib?concurrentConsumers=${grib-decode.count.threads}"/>
<route id="gribFileConsumerRoute">
<from ref="gribFileEndpoint" />

View file

@ -6,14 +6,11 @@
<bean id="gribDecoder" class="com.raytheon.edex.plugin.grib.GribDecoder" />
<bean id="ingest-grib" class="org.apache.camel.component.jms.JmsComponent">
<constructor-arg ref="jmsIngestGribConfig" />
<constructor-arg ref="jmsGribConfig" />
<property name="taskExecutor" ref="gribThreadPool" />
</bean>
<bean id="jmsIngestGribConfig" class="org.apache.camel.component.jms.JmsConfiguration"
factory-bean="jmsConfig" factory-method="copy">
</bean>
<bean id="jmsGribConfig" class="org.apache.camel.component.jms.JmsConfiguration"
factory-bean="jmsDurableConfig" factory-method="copy"/>
<bean id="gribThreadPool"
class="com.raytheon.uf.edex.esb.camel.spring.JmsThreadPoolTaskExecutor">
<property name="corePoolSize" value="${grib-decode.count.threads}" />
@ -57,7 +54,7 @@
autoStartup="false">
<endpoint id="gribFileEndpoint" uri="file:${edex.home}/data/sbn/grib?noop=true&amp;idempotent=false" />
<endpoint id="gribJmsEndpoint" uri="ingest-grib:queue:Ingest.Grib?concurrentConsumers=${grib-decode.count.threads}&amp;destinationResolver=#qpidDurableResolver" />
<endpoint id="gribJmsEndpoint" uri="ingest-grib:queue:Ingest.Grib?concurrentConsumers=${grib-decode.count.threads}"/>
<route id="gribFileConsumerRoute">
<from ref="gribFileEndpoint" />

View file

@ -515,11 +515,6 @@
<datasetId>FFG-TIR</datasetId>
<dt>1</dt>
</info>
<info>
<title>FFG-TIR-HiRes</title>
<datasetId>FFG-TIR-HiRes</datasetId>
<dt>1</dt>
</info>
<info>
<title>QPE-TIR</title>
<datasetId>QPE-TIR</datasetId>

View file

@ -1079,19 +1079,9 @@
<id>180</id>
</process>
</model>
<model>
<name>FFG-TIR</name>
<center>9</center>
<subcenter>160</subcenter>
<grid>240160</grid>
<process>
<id>151</id>
</process>
</model>
<model>
<name>FFG-TIR-HiRes</name>
<name>FFG-TIR</name>
<center>9</center>
<subcenter>160</subcenter>
<grid>250160</grid>

View file

@ -21,11 +21,11 @@
<setHeader headerName="pluginName">
<constant>ldad</constant>
</setHeader>
<to uri="jms-generic:queue:Ingest.ldad" />
<to uri="jms-durable:queue:Ingest.ldad" />
</route>
<route id="ldadIngestRoute">
<from uri="jms-generic:queue:Ingest.ldad" />
<from uri="jms-durable:queue:Ingest.ldad" />
<multicast>
<try>
<to uri="direct-vm:ldadmesonetIngest" />

View file

@ -13,7 +13,7 @@
<bean id="ldadhydroDistRegistry" factory-bean="distributionSrv"
factory-method="register">
<constructor-arg value="ldadhydro" />
<constructor-arg value="jms-dist:queue:Ingest.ldadhydro?destinationResolver=#qpidDurableResolver" />
<constructor-arg value="jms-dist:queue:Ingest.ldadhydro" />
</bean>
<bean id="ldadhydroPointData" class="com.raytheon.edex.plugin.ldadhydro.dao.LdadhydroPointDataTransform"/>
@ -28,7 +28,7 @@
errorHandlerRef="errorHandler"
autoStartup="false">
<route id="ldadhydroIngestRoute">
<from uri="jms-generic:queue:Ingest.ldadhydro?destinationResolver=#qpidDurableResolver" />
<from uri="jms-durable:queue:Ingest.ldadhydro"/>
<doTry>
<pipeline>
<bean ref="stringToFile" />

View file

@ -12,7 +12,7 @@
<bean id="ldadmanualDistRegistry" factory-bean="distributionSrv"
factory-method="register">
<constructor-arg value="ldadmanual" />
<constructor-arg value="jms-dist:queue:Ingest.ldadmanual?destinationResolver=#qpidDurableResolver" />
<constructor-arg value="jms-dist:queue:Ingest.ldadmanual"/>
</bean>
<bean id="ldadmanualCamelRegistered" factory-bean="contextManager"
@ -26,7 +26,7 @@
autoStartup="false">
<route id="ldadmanualIngestRoute">
<from uri="jms-generic:queue:Ingest.ldadmanual?destinationResolver=#qpidDurableResolver" />
<from uri="jms-durable:queue:Ingest.ldadmanual"/>
<doTry>
<pipeline>
<bean ref="stringToFile" />

View file

@ -16,7 +16,7 @@
<bean id="ldadprofilerDistRegistry" factory-bean="distributionSrv"
factory-method="register">
<constructor-arg value="ldadprofiler" />
<constructor-arg value="jms-dist:queue:Ingest.ldadprofiler?destinationResolver=#qpidDurableResolver" />
<constructor-arg value="jms-dist:queue:Ingest.ldadprofiler"/>
</bean>
<bean id="ldadprofilerCamelRegistered" factory-bean="contextManager"
@ -37,13 +37,13 @@
<setHeader headerName="pluginName">
<constant>ldadprofiler</constant>
</setHeader>
<to uri="jms-generic:queue:Ingest.ldadprofiler" />
<to uri="jms-durable:queue:Ingest.ldadprofiler" />
</route>
-->
<!-- Begin ldadprofiler routes -->
<route id="ldadprofilerIngestRoute">
<from uri="jms-generic:queue:Ingest.ldadprofiler?destinationResolver=#qpidDurableResolver" />
<from uri="jms-durable:queue:Ingest.ldadprofiler"/>
<doTry>
<pipeline>
<bean ref="stringToFile" />

View file

@ -22,7 +22,7 @@
<bean id="mdlsndgDistRegistry" factory-bean="distributionSrv"
factory-method="register">
<constructor-arg ref="modelsoundingPluginName" />
<constructor-arg value="jms-dist:queue:Ingest.modelsounding?destinationResolver=#qpidDurableResolver" />
<constructor-arg value="jms-dist:queue:Ingest.modelsounding"/>
</bean>
<bean id="modelsoundingCamelRegistered" factory-bean="contextManager"
@ -45,13 +45,13 @@
<setHeader headerName="pluginName">
<constant>modelsounding</constant>
</setHeader>
<to uri="jms-generic:queue:Ingest.modelsounding" />
<to uri="jms-durable:queue:Ingest.modelsounding" />
</route>
-->
<!-- Begin Model Sounding routes -->
<route id="modelsndgIngestRoute">
<from uri="jms-generic:queue:Ingest.modelsounding?destinationResolver=#qpidDurableResolver" />
<from uri="jms-durable:queue:Ingest.modelsounding"/>
<setHeader headerName="pluginName">
<constant>modelsounding</constant>
</setHeader>

View file

@ -12,7 +12,7 @@
<bean id="obsDistRegistry" factory-bean="distributionSrv"
factory-method="register">
<constructor-arg value="obs" />
<constructor-arg value="jms-dist:queue:Ingest.obs?destinationResolver=#qpidDurableResolver" />
<constructor-arg value="jms-dist:queue:Ingest.obs"/>
</bean>
<bean id="obsCamelRegistered" factory-bean="contextManager"
@ -36,13 +36,13 @@
<setHeader headerName="pluginName">
<constant>obs</constant>
</setHeader>
<to uri="jms-generic:queue:Ingest.obs" />
<to uri="jms-durable:queue:Ingest.obs" />
</route>
-->
<!-- Begin METAR routes -->
<route id="metarIngestRoute">
<from uri="jms-generic:queue:Ingest.obs?destinationResolver=#qpidDurableResolver" />
<from uri="jms-durable:queue:Ingest.obs"/>
<setHeader headerName="pluginName">
<constant>obs</constant>
</setHeader>

View file

@ -34,12 +34,12 @@
<setHeader headerName="pluginName">
<constant>pirep</constant>
</setHeader>
<to uri="jms-generic:queue:Ingest.pirep"/>
<to uri="jms-durable:queue:Ingest.pirep"/>
</route>
-->
<!-- Begin Pirep routes -->
<route id="pirepIngestRoute">
<from uri="jms-generic:queue:Ingest.pirep?destinationResolver=#qpidDurableResolver"/>
<from uri="jms-durable:queue:Ingest.pirep"/>
<setHeader headerName="pluginName">
<constant>pirep</constant>
</setHeader>

View file

@ -9,7 +9,7 @@
<bean id="poessoundingDistRegistry" factory-bean="distributionSrv"
factory-method="register">
<constructor-arg ref="poessoundingPluginName" />
<constructor-arg value="jms-dist:queue:Ingest.poessounding?destinationResolver=#qpidDurableResolver" />
<constructor-arg value="jms-dist:queue:Ingest.poessounding"/>
</bean>
<bean id="poessoundingCamelRegistered" factory-bean="contextManager"
@ -30,13 +30,13 @@
<setHeader headerName="pluginName">
<constant>poessounding</constant>
</setHeader>
<to uri="jms-generic:queue:Ingest.poessounding"/>
<to uri="jms-durable:queue:Ingest.poessounding"/>
</route>
-->
<!-- Begin poes Sounding routes -->
<route id="poessndgIngestRoute">
<from uri="jms-generic:queue:Ingest.poessounding?destinationResolver=#qpidDurableResolver"/>
<from uri="jms-durable:queue:Ingest.poessounding"/>
<setHeader headerName="pluginName">
<constant>poessounding</constant>
</setHeader>

View file

@ -9,7 +9,7 @@
<bean id="profilerDistRegistry" factory-bean="distributionSrv"
factory-method="register">
<constructor-arg ref="profilerPluginName" />
<constructor-arg value="jms-dist:queue:Ingest.profiler?destinationResolver=#qpidDurableResolver" />
<constructor-arg value="jms-dist:queue:Ingest.profiler"/>
</bean>
<bean id="profilerCamelRegistered" factory-bean="contextManager"
@ -30,13 +30,13 @@
<setHeader headerName="pluginName">
<constant>profiler</constant>
</setHeader>
<to uri="jms-generic:queue:Ingest.profiler"/>
<to uri="jms-durable:queue:Ingest.profiler"/>
</route>
-->
<!-- Begin Profiler routes -->
<route id="profilerIngestRoute">
<from uri="jms-generic:queue:Ingest.profiler?destinationResolver=#qpidDurableResolver"/>
<from uri="jms-durable:queue:Ingest.profiler"/>
<setHeader headerName="pluginName">
<constant>profiler</constant>
</setHeader>

View file

@ -6,12 +6,11 @@
<bean id="radarDecompressor" class="com.raytheon.edex.plugin.radar.RadarDecompressor"/>
<bean id="radarDecoder" class="com.raytheon.edex.plugin.radar.RadarDecoder"/>
<bean id="jms-radar" class="org.apache.camel.component.jms.JmsComponent">
<constructor-arg ref="jmsIngestRadarConfig" />
<constructor-arg ref="jmsRadarConfig" />
<property name="taskExecutor" ref="radarThreadPool" />
</bean>
<bean id="jmsIngestRadarConfig" class="org.apache.camel.component.jms.JmsConfiguration"
factory-bean="jmsConfig" factory-method="copy">
</bean>
<bean id="jmsRadarConfig" class="org.apache.camel.component.jms.JmsConfiguration"
factory-bean="jmsDurableConfig" factory-method="copy"/>
<bean id="radarThreadPool"
class="com.raytheon.uf.edex.esb.camel.spring.JmsThreadPoolTaskExecutor">
<property name="corePoolSize" value="2" />
@ -54,7 +53,7 @@
<!-- Begin Radar routes -->
<route id="radarIngestRoute">
<from uri="jms-radar:queue:Ingest.Radar?destinationResolver=#qpidDurableResolver" />
<from uri="jms-radar:queue:Ingest.Radar"/>
<setHeader headerName="dataType">
<constant>radar-sbn</constant>
</setHeader>
@ -62,7 +61,7 @@
</route>
<route id="radarRadarServerIngestRoute">
<from uri="jms-radar:queue:Ingest.RadarRadarServer?destinationResolver=#qpidDurableResolver" />
<from uri="jms-radar:queue:Ingest.RadarRadarServer"/>
<setHeader headerName="dataType">
<constant>radar-local</constant>
</setHeader>

View file

@ -33,13 +33,13 @@
<setHeader headerName="pluginName">
<constant>recco</constant>
</setHeader>
<to uri="jms-generic:queue:Ingest.recco" />
<to uri="jms-durable:queue:Ingest.recco" />
</route>
-->
<!-- Begin RECCO routes -->
<route id="reccoIngestRoute">
<from uri="jms-generic:queue:Ingest.recco?destinationResolver=#qpidDurableResolver" />
<from uri="jms-durable:queue:Ingest.recco"/>
<setHeader headerName="pluginName">
<constant>recco</constant>
</setHeader>

View file

@ -10,7 +10,7 @@
<bean id="redbookDistRegistry" factory-bean="distributionSrv"
factory-method="register">
<constructor-arg value="redbook" />
<constructor-arg value="jms-dist:queue:Ingest.redbook?destinationResolver=#qpidDurableResolver" />
<constructor-arg value="jms-dist:queue:Ingest.redbook"/>
</bean>
<!--
@ -38,13 +38,13 @@
<setHeader headerName="pluginName">
<constant>redbook</constant>
</setHeader>
<to uri="jms-generic:queue:Ingest.redbook" />
<to uri="jms-durable:queue:Ingest.redbook" />
</route>
-->
<!-- Begin Redbook routes -->
<route id="redbookIngestRoute">
<from uri="jms-generic:queue:Ingest.redbook?destinationResolver=#qpidDurableResolver" />
<from uri="jms-durable:queue:Ingest.redbook"/>
<setHeader headerName="pluginName">
<constant>redbook</constant>
</setHeader>

View file

@ -4,11 +4,11 @@
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
<bean id="jms-satellite" class="org.apache.camel.component.jms.JmsComponent">
<constructor-arg ref="jmsIngestSatelliteConfig" />
<constructor-arg ref="jmsSatelliteConfig" />
<property name="taskExecutor" ref="satelliteThreadPool" />
</bean>
<bean id="jmsIngestSatelliteConfig" class="org.apache.camel.component.jms.JmsConfiguration"
factory-bean="jmsConfig" factory-method="copy" />
<bean id="jmsSatelliteConfig" class="org.apache.camel.component.jms.JmsConfiguration"
factory-bean="jmsDurableConfig" factory-method="copy"/>
<bean id="satelliteThreadPool"
class="com.raytheon.uf.edex.esb.camel.spring.JmsThreadPoolTaskExecutor">
<property name="corePoolSize" value="1" />
@ -47,13 +47,13 @@
<setHeader headerName="pluginName">
<constant>satellite</constant>
</setHeader>
<to uri="jms-generic:queue:Ingest.Satellite" />
<to uri="jms-durable:queue:Ingest.Satellite" />
</route>
-->
<!-- Begin Sat routes -->
<route id="satIngestRoute">
<from uri="jms-satellite:queue:Ingest.Satellite?destinationResolver=#qpidDurableResolver" />
<from uri="jms-satellite:queue:Ingest.Satellite"/>
<setHeader headerName="pluginName">
<constant>satellite</constant>
</setHeader>

View file

@ -13,7 +13,7 @@
<bean id="sfcobsDistRegistry" factory-bean="distributionSrv"
factory-method="register">
<constructor-arg value="sfcobs" />
<constructor-arg value="jms-dist:queue:Ingest.sfcobs?destinationResolver=#qpidDurableResolver" />
<constructor-arg value="jms-dist:queue:Ingest.sfcobs"/>
</bean>
<bean id="sfcobsCamelRegistered" factory-bean="contextManager"
@ -37,13 +37,13 @@
<setHeader headerName="pluginName">
<constant>sfcobs</constant>
</setHeader>
<to uri="jms-generic:queue:Ingest.sfcobs" />
<to uri="jms-durable:queue:Ingest.sfcobs" />
</route>
-->
<!-- Begin sfcobs routes -->
<route id="sfcobsIngestRoute">
<from uri="jms-generic:queue:Ingest.sfcobs?destinationResolver=#qpidDurableResolver" />
<from uri="jms-durable:queue:Ingest.sfcobs"/>
<setHeader headerName="pluginName">
<constant>sfcobs</constant>
</setHeader>

View file

@ -4,11 +4,11 @@
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
<bean id="jms-shef" class="org.apache.camel.component.jms.JmsComponent">
<constructor-arg ref="jmsIngestShefConfig" />
<constructor-arg ref="jmsShefConfig" />
<property name="taskExecutor" ref="shefThreadPool" />
</bean>
<bean id="jmsIngestShefConfig" class="org.apache.camel.component.jms.JmsConfiguration"
factory-bean="jmsConfig" factory-method="copy" />
<bean id="jmsShefConfig" class="org.apache.camel.component.jms.JmsConfiguration"
factory-bean="jmsDurableConfig" factory-method="copy"/>
<bean id="shefThreadPool"
class="com.raytheon.uf.edex.esb.camel.spring.JmsThreadPoolTaskExecutor">
<property name="corePoolSize" value="3" />
@ -47,13 +47,13 @@
factory-method="register">
<constructor-arg value="shef" />
<constructor-arg
value="jms-dist:queue:Ingest.Shef?destinationResolver=#qpidDurableResolver" />
value="jms-dist:queue:Ingest.Shef"/>
</bean>
<bean id="shefHandleoupDistRegistry" factory-bean="handleoupDistributionSrv"
factory-method="register">
<constructor-arg value="shef" />
<constructor-arg value="jms-dist:queue:Ingest.Shef?destinationResolver=#qpidDurableResolver" />
<constructor-arg value="jms-dist:queue:Ingest.Shef"/>
</bean>
<bean id="shefCamelRegistered" factory-bean="contextManager"
@ -80,7 +80,7 @@
<bean ref="manualProc" method="copyFileToArchive" />
<bean ref="manualProc" />
<to
uri="jms-generic:queue:Ingest.ShefManual?destinationResolver=#qpidDurableResolver" />
uri="jms-durable:queue:Ingest.ShefManual"/>
</route>
</camelContext>
@ -92,7 +92,7 @@
<!-- Begin shef routes -->
<route id="shefIngestRoute">
<from
uri="jms-shef:queue:Ingest.Shef?destinationResolver=#qpidDurableResolver" />
uri="jms-shef:queue:Ingest.Shef"/>
<setHeader headerName="pluginName">
<constant>shef</constant>
</setHeader>
@ -103,7 +103,7 @@
</route>
<route id="shefStagedRoute">
<from
uri="jms-shef:queue:Ingest.ShefStaged?destinationResolver=#qpidDurableResolver" />
uri="jms-shef:queue:Ingest.ShefStaged"/>
<setHeader headerName="pluginName">
<constant>shef</constant>
</setHeader>
@ -119,7 +119,7 @@
<split streaming="true">
<method bean="synopticToShef" method="iterate" />
<bean ref="synopticToShef" method="transform" />
<to uri="jms-generic:queue:Ingest.ShefStaged" />
<to uri="jms-durable:queue:Ingest.ShefStaged" />
</split>
</pipeline>
</route>
@ -134,7 +134,7 @@
<method bean="metarToShef" method="iterate" />
<bean ref="metarToShef" method="transformMetar" />
<to
uri="jms-generic:queue:Ingest.ShefStaged?destinationResolver=#qpidDurableResolver" />
uri="jms-durable:queue:Ingest.ShefStaged"/>
</split>
</pipeline>
</route>
@ -155,7 +155,7 @@
<route id="shefManualIngestRoute">
<from
uri="jms-shef:queue:Ingest.ShefManual?destinationResolver=#qpidDurableResolver" />
uri="jms-shef:queue:Ingest.ShefManual"/>
<setHeader headerName="pluginName">
<constant>shef</constant>
</setHeader>

View file

@ -80,6 +80,7 @@ import com.raytheon.uf.edex.database.dao.DaoConfig;
* 02/24/2012 14535 W. Kwock Correct the duration value.
* 11/29/2012 15530 lbousaidi corrected posting and production time for
* latestobsvalue table.
* 09/19/2013 16515 w. Kwock Fix the excessive digits in rawpp,lake,height...tables
*
* </pre>
*
@ -1065,7 +1066,7 @@ public class PostTables {
cs.setString(5, shefData.getExtremum().getCode());
cs.setTimestamp(6, new Timestamp(shefData.getObservationTimeObj()
.getTime()));
cs.setFloat(7, Float.parseFloat(dataValue));
cs.setDouble(7, Double.parseDouble(dataValue));
cs.setString(8, qualifier);
cs.setInt(9, (int) qualityCode);
@ -1184,7 +1185,7 @@ public class PostTables {
cs.setString(5, shefData.getExtremum().getCode());
cs.setTimestamp(6, new java.sql.Timestamp(shefData
.getObservationTimeObj().getTime()));
cs.setFloat(7, Float.parseFloat(dataValue));
cs.setDouble(7, Double.parseDouble(dataValue));
cs.setString(8, qualifier);
cs.setInt(9, (int) qualityCode);
@ -1316,7 +1317,7 @@ public class PostTables {
timeStamp = new java.sql.Timestamp(basisDate.getTime());
cs.setTimestamp(8, timeStamp);
cs.setFloat(9, Float.parseFloat(dataValue));
cs.setDouble(9, Double.parseDouble(dataValue));
cs.setString(10, qualifier);
@ -1534,7 +1535,7 @@ public class PostTables {
ps.setTimestamp(8, timeStamp2);
// ps.setFloat(9, Float.parseFloat(shefDataValue.getStringValue()));
ps.setFloat(9, shefDataValue.getValue().floatValue());
ps.setDouble(9, shefDataValue.getValue().floatValue());
if (updateFlag) {
ps.setString(10, lid);

View file

@ -9,13 +9,13 @@
<bean id="tafDistRegistry" factory-bean="distributionSrv"
factory-method="register">
<constructor-arg value="taf" />
<constructor-arg value="jms-dist:queue:Ingest.taf?destinationResolver=#qpidDurableResolver" />
<constructor-arg value="jms-dist:queue:Ingest.taf"/>
</bean>
<bean id="tafHandleoupDistRegistry" factory-bean="handleoupDistributionSrv"
factory-method="register">
<constructor-arg value="taf" />
<constructor-arg value="jms-dist:queue:Ingest.taf?destinationResolver=#qpidDurableResolver" />
<constructor-arg value="jms-dist:queue:Ingest.taf"/>
</bean>
<bean id="tafCamelRegistered" factory-bean="contextManager"
@ -36,13 +36,13 @@
<setHeader headerName="pluginName">
<constant>taf</constant>
</setHeader>
<to uri="jms-generic:queue:Ingest.taf" />
<to uri="jms-durable:queue:Ingest.taf" />
</route>
-->
<!-- Begin TAF routes -->
<route id="tafIngestRoute">
<from uri="jms-generic:queue:Ingest.taf?destinationResolver=#qpidDurableResolver" />
<from uri="jms-durable:queue:Ingest.taf"/>
<setHeader headerName="pluginName">
<constant>taf</constant>
</setHeader>
@ -69,7 +69,5 @@
</doCatch>
</doTry>
</route>
</camelContext>
</beans>

View file

@ -11,7 +11,7 @@
<bean id="textDistRegistry" factory-bean="distributionSrv"
factory-method="register">
<constructor-arg value="text" />
<constructor-arg value="jms-dist:queue:Ingest.Text?destinationResolver=#qpidDurableResolver" />
<constructor-arg value="jms-dist:queue:Ingest.Text"/>
</bean>
<bean factory-bean="manualProc"
@ -22,7 +22,7 @@
<bean id="textHandleoupDistRegistry" factory-bean="handleoupDistributionSrv"
factory-method="register">
<constructor-arg value="text" />
<constructor-arg value="jms-dist:queue:Ingest.Text?destinationResolver=#qpidDurableResolver" />
<constructor-arg value="jms-dist:queue:Ingest.Text"/>
</bean>
<!-- define the bean that handles automatic faxing of products. -->
@ -33,12 +33,11 @@
<bean id="textVersionPurge" class="com.raytheon.edex.plugin.text.TextVersionPurge" depends-on="textRegistered"/>
<bean id="jms-text" class="org.apache.camel.component.jms.JmsComponent">
<constructor-arg ref="jmsIngestTextConfig" />
<constructor-arg ref="jmsTextConfig" />
<property name="taskExecutor" ref="textThreadPool" />
</bean>
<bean id="jmsIngestTextConfig" class="org.apache.camel.component.jms.JmsConfiguration"
factory-bean="jmsConfig" factory-method="copy">
</bean>
<bean id="jmsTextConfig" class="org.apache.camel.component.jms.JmsConfiguration"
factory-bean="jmsDurableConfig" factory-method="copy"/>
<bean id="textThreadPool"
class="com.raytheon.uf.edex.esb.camel.spring.JmsThreadPoolTaskExecutor">
<property name="corePoolSize" value="2" />
@ -66,7 +65,7 @@
<setHeader headerName="pluginName">
<constant>text</constant>
</setHeader>
<to uri="jms-generic:queue:Ingest.Text" />
<to uri="jms-durable:queue:Ingest.Text" />
</route>
-->
@ -120,7 +119,7 @@
</route>
<route id="textUndecodedIngestRoute">
<from uri="jms-text:queue:Ingest.Text?destinationResolver=#qpidDurableResolver&amp;concurrentConsumers=2" />
<from uri="jms-text:queue:Ingest.Text?concurrentConsumers=2" />
<setHeader headerName="pluginName">
<constant>text</constant>
</setHeader>
@ -147,7 +146,7 @@
<route id="textToWatchWarnRoute">
<from uri="direct:textToWatchWarn" />
<bean ref="textDecoder" method="transformToProductIds" />
<to uri="jms-text:queue:watchwarn?destinationResolver=#qpidDurableResolver" />
<to uri="jms-text:queue:watchwarn" />
</route>
<route id="textSerializationRoute">
@ -156,7 +155,7 @@
<method bean="textDecoder" method="separator" />
<bean ref="textDecoder" method="transformToSimpleString" />
<bean ref="serializationUtil" method="transformToThrift"/>
<to uri="jms-text:topic:edex.alarms.msg?timeToLive=60000" />
<to uri="jms-generic:topic:edex.alarms.msg?timeToLive=60000" />
</split>
</route>

View file

@ -9,7 +9,7 @@
<bean id="textlightningDistRegistry" factory-bean="distributionSrv"
factory-method="register">
<constructor-arg value="textlightning" />
<constructor-arg value="jms-dist:queue:Ingest.textlightning?destinationResolver=#qpidDurableResolver" />
<constructor-arg value="jms-dist:queue:Ingest.textlightning"/>
</bean>
<bean id="textlightningCamelRegistered" factory-bean="contextManager"
@ -31,13 +31,13 @@
<setHeader headerName="pluginName">
<constant>textlightning</constant>
</setHeader>
<to uri="jms-generic:queue:Ingest.textlightning" />
<to uri="jms-durable:queue:Ingest.textlightning" />
</route>
-->
<!-- Begin textlightning routes -->
<route id="textlightningIngestRoute">
<from uri="jms-generic:queue:Ingest.textlightning?destinationResolver=#qpidDurableResolver" />
<from uri="jms-durable:queue:Ingest.textlightning"/>
<setHeader headerName="pluginName">
<constant>textlightning</constant>
</setHeader>

View file

@ -8,13 +8,13 @@
<bean id="warningDistRegistry" factory-bean="distributionSrv"
factory-method="register">
<constructor-arg value="warning" />
<constructor-arg value="jms-dist:queue:Ingest.Warning?destinationResolver=#qpidDurableResolver" />
<constructor-arg value="jms-dist:queue:Ingest.Warning"/>
</bean>
<bean id="warningHandleoupDistRegistry" factory-bean="handleoupDistributionSrv"
factory-method="register">
<constructor-arg value="warning" />
<constructor-arg value="jms-dist:queue:Ingest.Warning?destinationResolver=#qpidDurableResolver" />
<constructor-arg value="jms-dist:queue:Ingest.Warning"/>
</bean>
<bean id="warningCamelRegistered" factory-bean="contextManager"
@ -23,12 +23,11 @@
</bean>
<bean id="jms-warning" class="org.apache.camel.component.jms.JmsComponent">
<constructor-arg ref="jmsIngestWarningConfig" />
<constructor-arg ref="jmsWarningConfig" />
<property name="taskExecutor" ref="warningThreadPool" />
</bean>
<bean id="jmsIngestWarningConfig" class="org.apache.camel.component.jms.JmsConfiguration"
factory-bean="jmsConfig" factory-method="copy">
</bean>
<bean id="jmsWarningConfig" class="org.apache.camel.component.jms.JmsConfiguration"
factory-bean="jmsDurableConfig" factory-method="copy"/>
<bean id="warningThreadPool"
class="com.raytheon.uf.edex.esb.camel.spring.JmsThreadPoolTaskExecutor">
<property name="corePoolSize" value="1" />
@ -49,7 +48,7 @@
<setHeader headerName="pluginName">
<constant>warning</constant>
</setHeader>
<to uri="jms-generic:queue:Ingest.Warning" />
<to uri="jms-durable:queue:Ingest.Warning" />
</route>
-->
@ -57,7 +56,7 @@
Warning routes
-->
<route id="warningIngestRoute">
<from uri="jms-warning:queue:Ingest.Warning?destinationResolver=#qpidDurableResolver" />
<from uri="jms-warning:queue:Ingest.Warning"/>
<setHeader headerName="pluginName">
<constant>warning</constant>
</setHeader>
@ -72,7 +71,7 @@
<to uri="jms-warning:queue:edex.tpcWatch" />
<filter>
<method bean="vtecFilter" method="hasVTEC" />
<to uri="jms-warning:queue:activeTablePending?destinationResolver=#qpidDurableResolver" />
<to uri="jms-warning:queue:activeTablePending"/>
</filter>
</multicast>
</pipeline>
@ -89,6 +88,5 @@
<bean ref="processUtil" method="log" />
<to uri="vm:stageNotification" />
</route>
</camelContext>
</beans>

View file

@ -0,0 +1,91 @@
/**
* 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.common.dataplugin.warning;
/**
* Helps manage and identify emergency products.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Sep 4, 2013 2176 jsanchez Initial creation
*
* </pre>
*
* @author jsanchez
* @version 1.0
*/
public class EmergencyType {
public static final String EMER = "EMER";
private static final EmergencyType TORNADO = new EmergencyType(
"TORNADO EMERGENCY", "TO.W");
private static final EmergencyType FLASH_FLOOD = new EmergencyType(
"FLASH FLOOD EMERGENCY", "FF.W");
private final String value;
private final String phensig;
private final static EmergencyType[] values = new EmergencyType[] {
TORNADO, FLASH_FLOOD };
private EmergencyType(String type, String phensig) {
this.value = type;
this.phensig = phensig;
}
public static EmergencyType valueOf(String phensig) {
EmergencyType type = null;
for (EmergencyType t : values) {
if (t.phensig.equals(phensig)) {
type = t;
break;
}
}
return type;
}
/**
* Checks to see if the text product is an emergency product.
*
* @param rawmessage
* @return
*/
public static boolean isEmergency(String rawmessage) {
for (EmergencyType type : values) {
if (rawmessage != null && rawmessage.contains(type.getValue())) {
return true;
}
}
return false;
}
public String getValue() {
return value;
}
}

View file

@ -11,7 +11,7 @@
autoStartup="false">
<route id="activeTablePendingRoute">
<from uri="jms-generic:queue:activeTablePending?destinationResolver=#qpidDurableResolver" />
<from uri="jms-durable:queue:activeTablePending"/>
<doTry>
<bean ref="activeTableSrv" method="vtecArrived" />
<doCatch>

View file

@ -19,6 +19,8 @@
**/
package com.raytheon.uf.edex.auth;
import java.io.InputStream;
import com.raytheon.uf.common.auth.AuthException;
import com.raytheon.uf.common.auth.resp.AuthServerErrorResponse;
import com.raytheon.uf.common.serialization.ExceptionWrapper;
@ -41,13 +43,15 @@ import com.raytheon.uf.common.util.SizeUtil;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Aug 10, 2009 mschenke Initial creation
* Jul 24, 2012 njensen Enhanced logging
*
* Jul 24, 2012 njensen Enhanced logging
* Jun 24, 2013 2136 rjpeter Switched to accepting InputStream to reduce garbage
* objected generated by camel doing the auto conversion.
* </pre>
*
* @author mschenke
* @version 1.0
*/
public class RemoteRequestRouteWrapper {
private static final IUFStatusHandler thriftSrvLogger = UFStatus
@ -55,10 +59,11 @@ public class RemoteRequestRouteWrapper {
private RemoteRequestServer server;
public byte[] executeThrift(byte[] data) {
public byte[] executeThrift(InputStream data) {
try {
long startTime = System.currentTimeMillis();
Object obj = SerializationUtil.transformFromThrift(data);
Object obj = SerializationUtil.transformFromThrift(Object.class,
data);
IServerRequest request = null;
if (obj instanceof RequestWrapper) {
request = ((RequestWrapper) obj).getRequest();
@ -70,9 +75,7 @@ public class RemoteRequestRouteWrapper {
long endTime = System.currentTimeMillis();
StringBuilder sb = new StringBuilder(300);
sb.append("Handled ").append(obj.toString()).append(" in ")
.append((endTime - startTime)).append("ms, ");
sb.append("request was size ").append(
SizeUtil.prettyByteSize(data.length));
.append((endTime - startTime)).append("ms");
sb.append(", response was size ").append(
SizeUtil.prettyByteSize(rval.length));
thriftSrvLogger.info(sb.toString());
@ -84,7 +87,8 @@ public class RemoteRequestRouteWrapper {
try {
return SerializationUtil.transformToThrift(resp);
} catch (SerializationException e1) {
e1.printStackTrace();
thriftSrvLogger.error(
"Failed to serialize AuthException to client", e1);
return new byte[] {};
}
} catch (Throwable t) {
@ -93,7 +97,8 @@ public class RemoteRequestRouteWrapper {
resp.setException(ExceptionWrapper.wrapThrowable(t));
return SerializationUtil.transformToThrift(resp);
} catch (SerializationException e) {
e.printStackTrace();
thriftSrvLogger.error(
"Failed to serialize throwable to client", e);
return new byte[] {};
}
}

View file

@ -30,9 +30,9 @@
<!-- technically with qpid should be able to make this a durable subscription and not need to forward to another queue -->
<doTry>
<multicast>
<to uri="jms-generic:queue:cpgsrvFiltering"/>
<to uri="jms-generic:queue:scanCpgsrvFiltering"/>
<to uri="jms-generic:queue:ffmpCpgsrvFiltering"/>
<to uri="jms-durable:queue:cpgsrvFiltering"/>
<to uri="jms-durable:queue:scanCpgsrvFiltering"/>
<to uri="jms-durable:queue:ffmpCpgsrvFiltering"/>
</multicast>
<doCatch>
<exception>java.lang.Throwable</exception>
@ -42,7 +42,7 @@
</route>
<route id="cpgsrvListenerRoute">
<!-- technically with qpid should be able to make this a durable subscription and not need to forward to another queue -->
<from uri="jms-generic:queue:cpgsrvFiltering?concurrentConsumers=5&amp;destinationResolver=#qpidDurableResolver"/>
<from uri="jms-durable:queue:cpgsrvFiltering?concurrentConsumers=5"/>
<doTry>
<pipeline>
<bean ref="serializationUtil" method="transformFromThrift" />

View file

@ -54,7 +54,7 @@
<route id="bandwidthManagerProcessWork">
<from
uri="jms-generic:queue:matureSubscriptions?destinationResolver=#qpidDurableResolver" />
uri="jms-durable:queue:matureSubscriptions"/>
<doTry>
<pipeline>
<bean ref="serializationUtil" method="transformFromThrift" />

View file

@ -6,7 +6,7 @@
<bean id="notificationHandler"
class="com.raytheon.uf.edex.datadelivery.event.handler.NotificationHandler">
<constructor-arg type="java.lang.String"
value="jms-generic:topic:notify.msg?destinationResolver=#qpidDurableResolver" />
value="jms-generic:topic:notify.msg"/>
<property name="notificationDao" ref="notificationDao" />
</bean>

View file

@ -2,13 +2,8 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
<bean id="jmsIngestHarvesterConfig" class="org.apache.camel.component.jms.JmsConfiguration"
factory-bean="jmsConfig" factory-method="copy">
</bean>
<bean id="jms-harvester" class="org.apache.camel.component.jms.JmsComponent">
<constructor-arg ref="jmsIngestHarvesterConfig" />
<constructor-arg ref="jmsGenericConfig" />
<property name="taskExecutor" ref="harvesterThreadPool" />
</bean>
@ -29,11 +24,11 @@
errorHandlerRef="errorHandler">
<endpoint id="metaDataCron" uri="quartz://datadelivery/harvester/?cron=${metadata-process.cron}"/>
<endpoint id="harvesterProcessWorkEndpoint" uri="jms-harvester:queue:metaDataProcessWork?concurrentConsumers=${metadata-process.threads}&amp;destinationResolver=#qpidDurableResolver" />
<endpoint id="harvesterProcessWorkEndpoint" uri="jms-harvester:queue:metaDataProcessWork?concurrentConsumers=${metadata-process.threads}"/>
<route id="metaDataProcess">
<from uri="metaDataCron" />
<to uri="jms-harvester:queue:metaDataProcessWork?destinationResolver=#qpidDurableResolver" />
<to uri="jms-harvester:queue:metaDataProcessWork" />
</route>
<route id="metaDataProcessWork">

View file

@ -34,12 +34,12 @@
a new route and use moveFileToArchive -->
<route id="handleoupFilePush">
<from
uri="jms-generic:queue:Ingest.handleoup?destinationResolver=#qpidDurableResolver" />
uri="jms-durable:queue:Ingest.handleoup"/>
<doTry>
<bean ref="stringToFile" />
<bean ref="manualProc" />
<to
uri="jms-generic:queue:handleoup.dropbox?destinationResolver=#qpidDurableResolver" />
uri="jms-durable:queue:handleoup.dropbox"/>
<doCatch>
<exception>java.lang.Throwable</exception>
<to

View file

@ -9,13 +9,12 @@
<bean id="radarserverDistributionSrv" class="com.raytheon.uf.edex.distribution.DistributionSrv" />
<bean id="jms-dist" class="org.apache.camel.component.jms.JmsComponent">
<constructor-arg ref="jmsIngestDistConfig" />
<!-- All initial distribution queues are durable -->
<constructor-arg ref="jmsDistConfig" />
<property name="taskExecutor" ref="distributionThreadPool" />
</bean>
<bean id="jmsIngestDistConfig" class="org.apache.camel.component.jms.JmsConfiguration"
factory-bean="jmsConfig" factory-method="copy">
</bean>
<bean id="jmsDistConfig" class="org.apache.camel.component.jms.JmsConfiguration"
factory-bean="jmsDurableConfig" factory-method="copy"/>
<bean id="distributionThreadPool"
class="com.raytheon.uf.edex.esb.camel.spring.JmsThreadPoolTaskExecutor">
<property name="corePoolSize" value="7" />
@ -30,7 +29,7 @@
<endpoint id="refreshDistributionCron" uri="quartz://refreshDist/refreshDistRoute/?cron=${distribution.cron}"/>
<route id="distribution">
<from uri="jms-dist:queue:external.dropbox?concurrentConsumers=5&amp;maxConcurrentConsumers=5&amp;destinationResolver=#qpidDurableResolver" />
<from uri="jms-dist:queue:external.dropbox?concurrentConsumers=5&amp;maxConcurrentConsumers=5"/>
<doTry>
<bean ref="distributionSrv" method="route" />
<doCatch>
@ -41,7 +40,7 @@
</route>
<route id="handleoupDistribution">
<from uri="jms-dist:queue:handleoup.dropbox?destinationResolver=#qpidDurableResolver" />
<from uri="jms-dist:queue:handleoup.dropbox"/>
<doTry>
<bean ref="handleoupDistributionSrv" method="route" />
<doCatch>
@ -52,7 +51,7 @@
</route>
<route id="radarserverDistribution">
<from uri="jms-dist:queue:radarserver.dropbox?destinationResolver=#qpidDurableResolver" />
<from uri="jms-dist:queue:radarserver.dropbox" />
<doTry>
<bean ref="radarserverDistributionSrv" method="route" />
<doCatch>

View file

@ -9,13 +9,13 @@
<bean id="dpaDistRegistry" factory-bean="distributionSrv"
factory-method="register">
<constructor-arg value="dpa" />
<constructor-arg value="jms-dist:queue:Ingest.dpa?destinationResolver=#qpidDurableResolver"/>
<constructor-arg value="jms-dist:queue:Ingest.dpa"/>
</bean>
<bean id="dpaRadarServerDistRegistry" factory-bean="radarserverDistributionSrv"
factory-method="register">
<constructor-arg value="dpa" />
<constructor-arg value="jms-dist:queue:Ingest.dpa?destinationResolver=#qpidDurableResolver"/>
<constructor-arg value="jms-dist:queue:Ingest.dpa"/>
</bean>
<bean factory-bean="manualProc"
@ -35,13 +35,13 @@
<setHeader headerName="pluginName">
<constant>dpa</constant>
</setHeader>
<to uri="jms-generic:queue:Ingest.dpa"/>
<to uri="jms-durable:queue:Ingest.dpa"/>
</route>
-->
<!-- Begin dpa Routes -->
<route id="dpaIngestRoute">
<from uri="jms-generic:queue:Ingest.dpa?destinationResolver=#qpidDurableResolver"/>
<from uri="jms-durable:queue:Ingest.dpa"/>
<setHeader headerName="pluginName">
<constant>dpa</constant>
</setHeader>
@ -60,6 +60,5 @@
</doCatch>
</doTry>
</route>
</camelContext>
</beans>

View file

@ -31,14 +31,14 @@
<setHeader headerName="pluginName">
<constant>arealffg</constant>
</setHeader>
<to uri="jms-generic:queue:Ingest.arealffg" />
<to uri="jms-durable:queue:Ingest.arealffg" />
</route>
-->
<!-- Begin arealffg Routes -->
<!--
<route id="arealffgIngestRoute">
<from uri="jms-generic:queue:Ingest.arealffg" />
<from uri="jms-durable:queue:Ingest.arealffg" />
<doTry>
<pipeline>
<bean ref="stringToFile" />

View file

@ -9,13 +9,13 @@
<bean id="dhrDistRegistry" factory-bean="distributionSrv"
factory-method="register">
<constructor-arg value="dhr" />
<constructor-arg value="jms-dist:queue:Ingest.dhr?destinationResolver=#qpidDurableResolver" />
<constructor-arg value="jms-dist:queue:Ingest.dhr"/>
</bean>
<bean id="dhrRadarServerDistRegistry" factory-bean="radarserverDistributionSrv"
factory-method="register">
<constructor-arg value="dhr" />
<constructor-arg value="jms-dist:queue:Ingest.dhr?destinationResolver=#qpidDurableResolver" />
<constructor-arg value="jms-dist:queue:Ingest.dhr"/>
</bean>
<bean factory-bean="manualProc"
@ -27,7 +27,7 @@
errorHandlerRef="errorHandler">
<!-- Begin non-clustered dhr Routes -->
<route id="dhrIngestFilter">
<from uri="jms-generic:queue:Ingest.dhr?destinationResolver=#qpidDurableResolver" />
<from uri="jms-durable:queue:Ingest.dhr"/>
<setHeader headerName="pluginName">
<constant>dhr</constant>
</setHeader>
@ -52,7 +52,7 @@
errorHandlerRef="errorHandler">
<!-- Begin dhr Routes -->
<route id="dhrIngestRoute">
<from uri="jms-generic:queue:dhrProcess?destinationResolver=#qpidDurableResolver" />
<from uri="jms-durable:queue:dhrProcess" />
<doTry>
<pipeline>
<bean ref="serializationUtil" method="transformFromThrift" />

View file

@ -8,7 +8,7 @@
<bean id="q2DistRegistry" factory-bean="distributionSrv"
factory-method="register">
<constructor-arg value="q2" />
<constructor-arg value="jms-dist:queue:Ingest.q2?destinationResolver=#qpidDurableResolver" />
<constructor-arg value="jms-dist:queue:Ingest.q2"/>
</bean>
<camelContext id="q2Proc-context"
@ -17,7 +17,7 @@
<!-- Run the Q2 File Processor on new files -->
<route id="q2File">
<from uri="jms-generic:queue:Ingest.q2?destinationResolver=#qpidDurableResolver" />
<from uri="jms-durable:queue:Ingest.q2"/>
<doTry>
<pipeline>
<bean ref="q2Proc" method="unzip" />

View file

@ -49,12 +49,12 @@ import com.raytheon.uf.edex.ohd.MainMethod;
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Jan 20, 2010 4200 snaples Initial creation
* Mar 09, 2012 417 dgilling Refactor to use two-stage queue
* Jan 20, 2010 4200 snaples Initial creation
* Mar 09, 2012 417 dgilling Refactor to use two-stage queue
* process.
* Mar 20, 2013 1804 bsteffen Switch all radar decompressing to be in
* memory.
*
* Sep 13, 2013 2368 rjpeter Updated to use durable jms settings.
* </pre>
*
* @author snaples
@ -92,9 +92,9 @@ public class HPEDhrSrv {
private static final int DT_IDX = 2;
private static final String JMS_QUEUE_URI = "jms-generic:queue:dhrProcess";
private static final String JMS_QUEUE_URI = "jms-durable:queue:dhrProcess";
private AppsDefaults appsDefaults = AppsDefaults.getInstance();
private final AppsDefaults appsDefaults = AppsDefaults.getInstance();
/**
* Route endpoint for "dhrIngestRoute". Takes a message, writes the file to

View file

@ -10,7 +10,7 @@
<bean id="acarsDistRegistry" factory-bean="distributionSrv"
factory-method="register">
<constructor-arg ref="acarsPluginName" />
<constructor-arg value="jms-dist:queue:Ingest.acars?destinationResolver=#qpidDurableResolver" />
<constructor-arg value="jms-dist:queue:Ingest.acars"/>
</bean>
<bean id="acarsCamelRegistered" factory-bean="contextManager"
@ -33,13 +33,13 @@
<setHeader headerName="pluginName">
<constant>acars</constant>
</setHeader>
<to uri="jms-generic:queue:Ingest.acars" />
<to uri="jms-durable:queue:Ingest.acars" />
</route>
-->
<!-- Begin ACARS routes -->
<route id="acarsIngestRoute">
<from uri="jms-generic:queue:Ingest.acars?destinationResolver=#qpidDurableResolver" />
<from uri="jms-durable:queue:Ingest.acars"/>
<setHeader headerName="pluginName">
<constant>acars</constant>
</setHeader>

View file

@ -37,13 +37,13 @@
<setHeader headerName="pluginName">
<constant>bufrascat</constant>
</setHeader>
<to uri="jms-generic:queue:Ingest.bufrascat" />
<to uri="jms-durable:queue:Ingest.bufrascat" />
</route>
-->
<!-- Begin bufrascat routes -->
<route id="bufrascatIngestRoute">
<from uri="jms-generic:queue:Ingest.bufrascat?destinationResolver=#qpidDurableResolver" />
<from uri="jms-durable:queue:Ingest.bufrascat"/>
<setHeader headerName="pluginName">
<constant>bufrascat</constant>
</setHeader>

View file

@ -10,7 +10,7 @@
<bean id="bufrhdwDistRegistry" factory-bean="distributionSrv"
factory-method="register">
<constructor-arg ref="bufrhdwPluginName" />
<constructor-arg value="jms-dist:queue:Ingest.bufrhdw?destinationResolver=#qpidDurableResolver" />
<constructor-arg value="jms-dist:queue:Ingest.bufrhdw"/>
</bean>
<bean id="bufrhdwCamelRegistered" factory-bean="contextManager"
@ -31,13 +31,13 @@
<setHeader headerName="pluginName">
<constant>bufrhdw</constant>
</setHeader>
<to uri="jms-generic:queue:Ingest.bufrhdw" />
<to uri="jms-durable:queue:Ingest.bufrhdw" />
</route>
-->
<!-- Begin bufrhdw routes -->
<route id="bufrhdwIngestRoute">
<from uri="jms-generic:queue:Ingest.bufrhdw?destinationResolver=#qpidDurableResolver" />
<from uri="jms-durable:queue:Ingest.bufrhdw"/>
<setHeader headerName="pluginName">
<constant>bufrhdw</constant>
</setHeader>

View file

@ -10,7 +10,7 @@
<bean id="bufrmthdwDistRegistry" factory-bean="distributionSrv"
factory-method="register">
<constructor-arg ref="bufrmthdwPluginName" />
<constructor-arg value="jms-dist:queue:Ingest.bufrmthdw?destinationResolver=#qpidDurableResolver" />
<constructor-arg value="jms-dist:queue:Ingest.bufrmthdw"/>
</bean>
<bean id="bufrmthdwCamelRegistered" factory-bean="contextManager"
@ -31,13 +31,13 @@
<setHeader headerName="pluginName">
<constant>bufrmthdw</constant>
</setHeader>
<to uri="jms-generic:queue:Ingest.bufrmthdw" />
<to uri="jms-durable:queue:Ingest.bufrmthdw" />
</route>
-->
<!-- Begin bufrmthdw routes -->
<route id="bufrhdwIngestRoute">
<from uri="jms-generic:queue:Ingest.bufrmthdw?destinationResolver=#qpidDurableResolver" />
<from uri="jms-durable:queue:Ingest.bufrmthdw"/>
<setHeader headerName="pluginName">
<constant>bufrmthdw</constant>
</setHeader>

View file

@ -9,7 +9,7 @@
<bean id="bufrncwfDistRegistry" factory-bean="distributionSrv"
factory-method="register">
<constructor-arg ref="bufrncwfPluginName" />
<constructor-arg value="jms-dist:queue:Ingest.bufrncwf?destinationResolver=#qpidDurableResolver" />
<constructor-arg value="jms-dist:queue:Ingest.bufrncwf"/>
</bean>
<bean id="bufrncwfCamelRegistered" factory-bean="contextManager"
@ -30,13 +30,13 @@
<setHeader headerName="pluginName">
<constant>bufrncwf</constant>
</setHeader>
<to uri="jms-generic:queue:Ingest.bufrncwf" />
<to uri="jms-durable:queue:Ingest.bufrncwf" />
</route>
-->
<!-- Begin bufrncwf routes -->
<route id="bufrncwfIngestRoute">
<from uri="jms-generic:queue:Ingest.bufrncwf?destinationResolver=#qpidDurableResolver" />
<from uri="jms-durable:queue:Ingest.bufrncwf"/>
<setHeader headerName="pluginName">
<constant>bufrncwf</constant>
</setHeader>

View file

@ -16,7 +16,7 @@
<bean id="bufrquikscatDistRegistry" factory-bean="distributionSrv"
factory-method="register">
<constructor-arg ref="bufrquikscatPluginName" />
<constructor-arg value="jms-dist:queue:Ingest.bufrquikscat?destinationResolver=#qpidDurableResolver" />
<constructor-arg value="jms-dist:queue:Ingest.bufrquikscat"/>
</bean>
<bean id="bufrquikscatCamelRegistered" factory-bean="contextManager"
@ -37,13 +37,13 @@
<setHeader headerName="pluginName">
<constant>bufrquikscat</constant>
</setHeader>
<to uri="jms-generic:queue:Ingest.bufrquikscat" />
<to uri="jms-durable:queue:Ingest.bufrquikscat" />
</route>
-->
<!-- Begin bufrquikscat routes -->
<route id="bufrquikscatIngestRoute">
<from uri="jms-generic:queue:Ingest.bufrquikscat?destinationResolver=#qpidDurableResolver" />
<from uri="jms-durable:queue:Ingest.bufrquikscat"/>
<setHeader headerName="pluginName">
<constant>bufrquikscat</constant>
</setHeader>

View file

@ -32,13 +32,13 @@
<setHeader headerName="pluginName">
<constant>bufrsigwx</constant>
</setHeader>
<to uri="jms-generic:queue:Ingest.bufrsigwx" />
<to uri="jms-durable:queue:Ingest.bufrsigwx" />
</route>
-->
<!-- Begin bufrsigwx routes -->
<route id="bufrsigwxIngestRoute">
<from uri="jms-generic:queue:Ingest.bufrsigwx?destinationResolver=#qpidDurableResolver" />
<from uri="jms-durable:queue:Ingest.bufrsigwx"/>
<setHeader headerName="pluginName">
<constant>bufrsigwx</constant>
</setHeader>

View file

@ -16,7 +16,7 @@
<bean id="bufrssmiDistRegistry" factory-bean="distributionSrv"
factory-method="register">
<constructor-arg ref="bufrssmiPluginName" />
<constructor-arg value="jms-dist:queue:Ingest.bufrssmi?destinationResolver=#qpidDurableResolver" />
<constructor-arg value="jms-dist:queue:Ingest.bufrssmi"/>
</bean>
<bean id="bufrssmiCamelRegistered" factory-bean="contextManager"
@ -37,13 +37,13 @@
<setHeader headerName="pluginName">
<constant>bufrssmi</constant>
</setHeader>
<to uri="jms-generic:queue:Ingest.bufrssmi" />
<to uri="jms-durable:queue:Ingest.bufrssmi" />
</route>
-->
<!-- Begin bufrssmi routes -->
<route id="bufrssmiIngestRoute">
<from uri="jms-generic:queue:Ingest.bufrssmi?destinationResolver=#qpidDurableResolver" />
<from uri="jms-durable:queue:Ingest.bufrssmi" />
<setHeader headerName="pluginName">
<constant>bufrssmi</constant>
</setHeader>

View file

@ -24,7 +24,7 @@
autoStartup="false">
<route id="cwaIngestRoute">
<from uri="jms-generic:queue:Ingest.cwa?destinationResolver=#qpidDurableResolver" />
<from uri="jms-durable:queue:Ingest.cwa"/>
<setHeader headerName="pluginName">
<constant>cwa</constant>
</setHeader>

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