13.4.1-12 baseline
Former-commit-id:6a97b4325a
[formerly6a97b4325a
[formerly 398b25dee65cd6154c467b657ced5c9d2bada11a]] Former-commit-id:e53ada66b8
Former-commit-id:bd4f93e859
This commit is contained in:
parent
2767fd893c
commit
0d9e71aee2
30 changed files with 618 additions and 192 deletions
|
@ -104,6 +104,7 @@ import com.raytheon.viz.gfe.core.parm.vcparm.VCModuleJobPool;
|
||||||
* 04/11/2013 16028 ryu Fixed setParmsRemoveISCDeps() to not remove
|
* 04/11/2013 16028 ryu Fixed setParmsRemoveISCDeps() to not remove
|
||||||
* modified parms.
|
* modified parms.
|
||||||
* 05/02/2013 #1969 randerso Cleaned up and optimized processing of DBInvChangedNotification
|
* 05/02/2013 #1969 randerso Cleaned up and optimized processing of DBInvChangedNotification
|
||||||
|
* 05/14/2013 #2004 randerso Improved error handling
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -1073,9 +1074,9 @@ public abstract class AbstractParmManager implements IParmManager {
|
||||||
parmsToAdd.add(p);
|
parmsToAdd.add(p);
|
||||||
}
|
}
|
||||||
} catch (GFEServerException e) {
|
} catch (GFEServerException e) {
|
||||||
statusHandler.handle(Priority.EVENTA,
|
statusHandler.handle(Priority.PROBLEM,
|
||||||
"Failure to instantiate parm in createParmInternal: "
|
"Failure to instantiate parm in createParmInternal: "
|
||||||
+ addParm.getParmID().toString());
|
+ addParm.getParmID().toString(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -76,6 +76,7 @@ import com.raytheon.viz.gfe.types.MutableInteger;
|
||||||
* 05/02/13 #1969 randerso Added code to explicitly create the mutable database
|
* 05/02/13 #1969 randerso Added code to explicitly create the mutable database
|
||||||
* if it doesn't exist. Used to just happen by accident
|
* if it doesn't exist. Used to just happen by accident
|
||||||
* when getParmList was called.
|
* when getParmList was called.
|
||||||
|
* 05/14/13 #2004 randerso Corrected logging levels
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author bphillip
|
* @author bphillip
|
||||||
|
@ -185,7 +186,7 @@ public class ParmManager extends AbstractParmManager {
|
||||||
@Override
|
@Override
|
||||||
public Parm addParm(ParmID pid, boolean mutableParm, boolean displayable) {
|
public Parm addParm(ParmID pid, boolean mutableParm, boolean displayable) {
|
||||||
if (!isParmInDatabase(pid)) {
|
if (!isParmInDatabase(pid)) {
|
||||||
statusHandler.handle(Priority.EVENTA,
|
statusHandler.handle(Priority.PROBLEM,
|
||||||
"Attempt to load a nonexistent parm: " + pid);
|
"Attempt to load a nonexistent parm: " + pid);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -251,7 +252,7 @@ public class ParmManager extends AbstractParmManager {
|
||||||
for (int i = 0; i < parms.length; i++) {
|
for (int i = 0; i < parms.length; i++) {
|
||||||
if (!this.parms.contains(parms[i])) {
|
if (!this.parms.contains(parms[i])) {
|
||||||
statusHandler.handle(
|
statusHandler.handle(
|
||||||
Priority.EVENTA,
|
Priority.DEBUG,
|
||||||
"Attempt to delete unknown parm:"
|
"Attempt to delete unknown parm:"
|
||||||
+ parms[i].getParmID());
|
+ parms[i].getParmID());
|
||||||
continue;
|
continue;
|
||||||
|
@ -1170,7 +1171,7 @@ public class ParmManager extends AbstractParmManager {
|
||||||
return createParmInternal(pid, mutableParm, displayable);
|
return createParmInternal(pid, mutableParm, displayable);
|
||||||
} catch (GFEServerException e) {
|
} catch (GFEServerException e) {
|
||||||
statusHandler
|
statusHandler
|
||||||
.handle(Priority.EVENTA,
|
.handle(Priority.PROBLEM,
|
||||||
"Failure to instantiate parm in createParmInternal: "
|
"Failure to instantiate parm in createParmInternal: "
|
||||||
+ pid, e);
|
+ pid, e);
|
||||||
return null;
|
return null;
|
||||||
|
|
|
@ -49,6 +49,7 @@ import com.raytheon.uf.viz.core.IDisplayPaneContainer;
|
||||||
import com.raytheon.viz.mpe.core.MPEDataManager;
|
import com.raytheon.viz.mpe.core.MPEDataManager;
|
||||||
import com.raytheon.viz.mpe.core.MPEDataManager.MPEDateInfo;
|
import com.raytheon.viz.mpe.core.MPEDataManager.MPEDateInfo;
|
||||||
import com.raytheon.viz.mpe.ui.MPEDisplayManager;
|
import com.raytheon.viz.mpe.ui.MPEDisplayManager;
|
||||||
|
import com.raytheon.viz.mpe.ui.TransmitRFCBiasProvider;
|
||||||
import com.raytheon.viz.ui.EditorUtil;
|
import com.raytheon.viz.ui.EditorUtil;
|
||||||
import com.raytheon.viz.ui.dialogs.CaveJFACEDialog;
|
import com.raytheon.viz.ui.dialogs.CaveJFACEDialog;
|
||||||
import com.raytheon.viz.ui.editor.IMultiPaneEditor;
|
import com.raytheon.viz.ui.editor.IMultiPaneEditor;
|
||||||
|
@ -299,6 +300,7 @@ public class ChooseDataPeriodDialog extends CaveJFACEDialog {
|
||||||
} else {
|
} else {
|
||||||
restore();
|
restore();
|
||||||
}
|
}
|
||||||
|
TransmitRFCBiasProvider.setEnabled(true);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@ import com.raytheon.uf.common.dataquery.requests.RequestConstraint;
|
||||||
import com.raytheon.uf.common.geospatial.SpatialQueryResult;
|
import com.raytheon.uf.common.geospatial.SpatialQueryResult;
|
||||||
import com.raytheon.uf.viz.core.exception.VizException;
|
import com.raytheon.uf.viz.core.exception.VizException;
|
||||||
import com.raytheon.viz.warngen.PreferenceUtil;
|
import com.raytheon.viz.warngen.PreferenceUtil;
|
||||||
|
import com.raytheon.viz.warngen.gis.Area;
|
||||||
import com.raytheon.viz.warngen.gis.ClosestPoint;
|
import com.raytheon.viz.warngen.gis.ClosestPoint;
|
||||||
import com.raytheon.viz.warngen.gis.GisUtil;
|
import com.raytheon.viz.warngen.gis.GisUtil;
|
||||||
import com.raytheon.viz.warngen.gis.GisUtil.Direction;
|
import com.raytheon.viz.warngen.gis.GisUtil.Direction;
|
||||||
|
@ -38,7 +39,7 @@ import com.vividsolutions.jts.geom.prep.PreparedGeometryFactory;
|
||||||
* Mar 25, 2013 1810 jsanchez Allowed other values to be accepted as a true value for useDirs.
|
* Mar 25, 2013 1810 jsanchez Allowed other values to be accepted as a true value for useDirs.
|
||||||
* Mar 25, 2013 1605 jsanchez Set ClosestPoint's prepGeom.
|
* Mar 25, 2013 1605 jsanchez Set ClosestPoint's prepGeom.
|
||||||
* Apr 24, 2013 1944 jsanchez Updated calculateLocationPortion visibility to public.
|
* Apr 24, 2013 1944 jsanchez Updated calculateLocationPortion visibility to public.
|
||||||
* May 2, 2013 1963 jsanchez Referenced calculatePortion from GisUtil.
|
* May 2, 2013 1963 jsanchez Referenced calculatePortion from GisUtil if intersection less than DEFAULT_PORTION_TOLERANCE.
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -177,10 +178,17 @@ public class DbAreaSourceDataAdaptor extends AbstractDbSourceDataAdaptor {
|
||||||
PreparedGeometry prepGeom = PreparedGeometryFactory.prepare(geom);
|
PreparedGeometry prepGeom = PreparedGeometryFactory.prepare(geom);
|
||||||
if (prepGeom.intersects(searchArea) && !prepGeom.within(searchArea)) {
|
if (prepGeom.intersects(searchArea) && !prepGeom.within(searchArea)) {
|
||||||
Geometry intersection = searchArea.intersection(geom);
|
Geometry intersection = searchArea.intersection(geom);
|
||||||
partOfArea = GisUtil.asStringList(GisUtil.calculatePortion(
|
|
||||||
geom, intersection, false, false));
|
|
||||||
|
|
||||||
if (attributes.get(suppressedDirectionsField) != null) {
|
double areaIntersection = intersection.getArea();
|
||||||
|
double tolerCheck = geom.getArea()
|
||||||
|
* Area.DEFAULT_PORTION_TOLERANCE;
|
||||||
|
if (areaIntersection < tolerCheck) {
|
||||||
|
partOfArea = GisUtil.asStringList(GisUtil.calculatePortion(
|
||||||
|
geom, intersection, false, false));
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((partOfArea != null)
|
||||||
|
&& (attributes.get(suppressedDirectionsField) != null)) {
|
||||||
String suppressedDirections = String.valueOf(
|
String suppressedDirections = String.valueOf(
|
||||||
attributes.get(suppressedDirectionsField))
|
attributes.get(suppressedDirectionsField))
|
||||||
.toLowerCase();
|
.toLowerCase();
|
||||||
|
|
|
@ -50,7 +50,7 @@ import com.vividsolutions.jts.geom.Geometry;
|
||||||
* Feb 29, 2012 #13596 Qinglu Lin Added restoreAlaskaLon().
|
* Feb 29, 2012 #13596 Qinglu Lin Added restoreAlaskaLon().
|
||||||
* May 9, 2012 #14887 Qinglu Lin Change 0.1 to 0.16875f for PORTION_OF_CENTER;
|
* May 9, 2012 #14887 Qinglu Lin Change 0.1 to 0.16875f for PORTION_OF_CENTER;
|
||||||
* 0.10 to 0.0625 for EXTREME_DELTA; Added/modified code.
|
* 0.10 to 0.0625 for EXTREME_DELTA; Added/modified code.
|
||||||
* May 1, 2013 1963 jsanchez Refactored calculatePortion to match A1.
|
* May 1, 2013 1963 jsanchez Refactored calculatePortion to match A1. Do not allow 'Central' to be included if East and West is included.
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author chammack
|
* @author chammack
|
||||||
|
@ -100,7 +100,8 @@ public class GisUtil {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test for central by not being near adjacent borders.
|
// Test for central by not being near adjacent borders.
|
||||||
if (iQuad.centralGeom != null && iQuad.centralGeom.contains(warnedArea)) {
|
if (useCentral && iQuad.centralGeom != null
|
||||||
|
&& iQuad.centralGeom.contains(warnedArea)) {
|
||||||
portions.add(Direction.CENTRAL);
|
portions.add(Direction.CENTRAL);
|
||||||
return portions;
|
return portions;
|
||||||
}
|
}
|
||||||
|
@ -146,7 +147,7 @@ public class GisUtil {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Three typical quadrants in use.
|
// Three typical quadrants in use.
|
||||||
if (iQuad.q == 3 && iQuad.q != 3) {
|
if (iQuad.q == 3 && iQuad.qq != 3) {
|
||||||
if (iQuad.ne != 1 && (iQuad.ssw || iQuad.wsw)) {
|
if (iQuad.ne != 1 && (iQuad.ssw || iQuad.wsw)) {
|
||||||
portions.add(Direction.SOUTH);
|
portions.add(Direction.SOUTH);
|
||||||
portions.add(Direction.WEST);
|
portions.add(Direction.WEST);
|
||||||
|
@ -240,9 +241,7 @@ public class GisUtil {
|
||||||
portions.add(Direction.EAST);
|
portions.add(Direction.EAST);
|
||||||
} else if (iQuad.wnw || iQuad.wsw) {
|
} else if (iQuad.wnw || iQuad.wsw) {
|
||||||
portions.add(Direction.WEST);
|
portions.add(Direction.WEST);
|
||||||
}
|
} else if (iQuad.cc) {
|
||||||
|
|
||||||
if (iQuad.cc) {
|
|
||||||
portions.add(Direction.CENTRAL);
|
portions.add(Direction.CENTRAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -78,15 +78,34 @@ public class ImpactedQuadrants {
|
||||||
protected int sw;
|
protected int sw;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* q is the accumulation of the quadrants, qq is the accumulation of the sub
|
* q is the accumulation of the quadrants,
|
||||||
* quadrants
|
|
||||||
*/
|
*/
|
||||||
protected int q, qq;
|
protected int q;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extreme portions for north, south, east, and west.
|
* qq is the accumulation of the sub quadrants
|
||||||
*/
|
*/
|
||||||
protected int nnx, ssx, eex, wwx;
|
protected int qq;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extreme portions for north.
|
||||||
|
*/
|
||||||
|
protected int nnx;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extreme portions for south.
|
||||||
|
*/
|
||||||
|
protected int ssx;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extreme portions for east.
|
||||||
|
*/
|
||||||
|
protected int eex;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extreme portions for west.
|
||||||
|
*/
|
||||||
|
protected int wwx;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Accumulation of extreme portions.
|
* Accumulation of extreme portions.
|
||||||
|
|
|
@ -137,6 +137,8 @@ import com.vividsolutions.jts.geom.Polygon;
|
||||||
* Mar 28, 2013 DR 15974 D. Friedman Do not track removed GIDs.
|
* Mar 28, 2013 DR 15974 D. Friedman Do not track removed GIDs.
|
||||||
* Apr 11, 2013 1894 jsanchez Removed the ability to load/unload maps via bullet selection. This will be resolved in a follow on ticket.
|
* Apr 11, 2013 1894 jsanchez Removed the ability to load/unload maps via bullet selection. This will be resolved in a follow on ticket.
|
||||||
* Apr 30, 2013 DR 16118 Qinglu Lin For reissue (followup NEW), called redrawFromWarned() in okPressed().
|
* Apr 30, 2013 DR 16118 Qinglu Lin For reissue (followup NEW), called redrawFromWarned() in okPressed().
|
||||||
|
* May 17, 2013 DR 16118 Qinglu Lin Copied the fix from 13.4.1.
|
||||||
|
* May 17, 2013 2012 jsanchez Preserved the warned area if the hatched area source is the same when changing templates.
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author chammack
|
* @author chammack
|
||||||
|
@ -994,7 +996,7 @@ public class WarngenDialog extends CaveSWTDialog implements
|
||||||
.getAct()) == WarningAction.NEW) {
|
.getAct()) == WarningAction.NEW) {
|
||||||
redrawFromWarned();
|
redrawFromWarned();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((followupData == null || (WarningAction.valueOf(followupData
|
if ((followupData == null || (WarningAction.valueOf(followupData
|
||||||
.getAct()) == WarningAction.CON && warngenLayer
|
.getAct()) == WarningAction.CON && warngenLayer
|
||||||
.conWarnAreaChanged(followupData)))
|
.conWarnAreaChanged(followupData)))
|
||||||
|
@ -1406,7 +1408,7 @@ public class WarngenDialog extends CaveSWTDialog implements
|
||||||
return;
|
return;
|
||||||
|
|
||||||
String lastAreaSource = warngenLayer.getConfiguration()
|
String lastAreaSource = warngenLayer.getConfiguration()
|
||||||
.getGeospatialConfig().getAreaSource();
|
.getHatchedAreaSource().getAreaSource();
|
||||||
|
|
||||||
// reset values
|
// reset values
|
||||||
setPolygonLocked(false);
|
setPolygonLocked(false);
|
||||||
|
@ -1468,12 +1470,17 @@ public class WarngenDialog extends CaveSWTDialog implements
|
||||||
warngenLayer.clearWarningGeometries();
|
warngenLayer.clearWarningGeometries();
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean snapHatchedAreaToPolygon = !warngenLayer.getConfiguration()
|
boolean isDifferentAreaSources = !warngenLayer.getConfiguration()
|
||||||
.getGeospatialConfig().getAreaSource()
|
.getHatchedAreaSource().getAreaSource()
|
||||||
.equalsIgnoreCase(lastAreaSource);
|
.equalsIgnoreCase(lastAreaSource);
|
||||||
|
boolean snapHatchedAreaToPolygon = isDifferentAreaSources;
|
||||||
|
boolean preservedSelection = !isDifferentAreaSources;
|
||||||
|
// If template has a different hatched area source from the previous
|
||||||
|
// template, then the warned area would be based on the polygon and not
|
||||||
|
// preserved.
|
||||||
try {
|
try {
|
||||||
warngenLayer.updateWarnedAreas(snapHatchedAreaToPolygon);
|
warngenLayer.updateWarnedAreas(snapHatchedAreaToPolygon,
|
||||||
|
preservedSelection);
|
||||||
} catch (VizException e1) {
|
} catch (VizException e1) {
|
||||||
statusHandler.handle(Priority.PROBLEM, "WarnGen Error", e1);
|
statusHandler.handle(Priority.PROBLEM, "WarnGen Error", e1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -174,6 +174,8 @@ import com.vividsolutions.jts.io.WKTReader;
|
||||||
* 04/12/1013 DR 16045 Qinglu Lin Updated AreaHatcher's run() by calling removeDuplicateCoordinate().
|
* 04/12/1013 DR 16045 Qinglu Lin Updated AreaHatcher's run() by calling removeDuplicateCoordinate().
|
||||||
* 04/23/1013 DR 16064 Qinglu Lin Added removeDuplicateGid() and applies it in populateStrings().
|
* 04/23/1013 DR 16064 Qinglu Lin Added removeDuplicateGid() and applies it in populateStrings().
|
||||||
* 04/24/2013 1943 jsanchez Replaced used of areaConfig with areaSource.
|
* 04/24/2013 1943 jsanchez Replaced used of areaConfig with areaSource.
|
||||||
|
* 05/16/2013 2008 jsanchez Allowed warned areas for follow ups to be resized to less than 10%
|
||||||
|
* 05/17/2013 DR 16064 Qinglu Lin Merged the fix done in 13.4.1.
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author mschenke
|
* @author mschenke
|
||||||
|
@ -1505,11 +1507,12 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
||||||
// Snap back to polygon
|
// Snap back to polygon
|
||||||
state.setWarningPolygon(localToLatLon((Polygon) oldWarningPolygon));
|
state.setWarningPolygon(localToLatLon((Polygon) oldWarningPolygon));
|
||||||
newHatchedArea = (Geometry) oldWarningArea.clone();
|
newHatchedArea = (Geometry) oldWarningArea.clone();
|
||||||
} else if (areaPercent < 10 && state.isMarked()) {
|
} else if (oldWarningPolygon.intersects(warningPolygon) == false
|
||||||
|
&& areaPercent < 10 && state.isMarked()) {
|
||||||
// snap back to last valid user selected area
|
// snap back to last valid user selected area
|
||||||
state.setWarningPolygon((Polygon) state
|
state.setWarningPolygon((Polygon) state
|
||||||
.getMarkedWarningPolygon().clone());
|
.getMarkedWarningPolygon().clone());
|
||||||
newHatchedArea = latLonToLocal(state.getMarkedWarningArea());
|
newHatchedArea = state.getMarkedWarningArea();
|
||||||
state.resetMarked();
|
state.resetMarked();
|
||||||
} else if (warningPolygon != null) {
|
} else if (warningPolygon != null) {
|
||||||
// want intersection of warningPolygon and oldWarningArea
|
// want intersection of warningPolygon and oldWarningArea
|
||||||
|
@ -2957,13 +2960,14 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
||||||
}
|
}
|
||||||
return slope;
|
return slope;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Some counties/forecast zones have two GIDs, one is for the large portion of that
|
* Some counties/forecast zones have two GIDs, one is for the large portion
|
||||||
* county and the other is for the small portion, e.g., inlets of a bay. Prince William
|
* of that county and the other is for the small portion, e.g., inlets of a
|
||||||
* County, Virginia is such an example. As WarnGen needs to mark a hatched county with
|
* bay. Prince William County, Virginia is such an example. As WarnGen needs
|
||||||
* only one W, one of the GIDs needs to be filtered out. The approach in the method is
|
* to mark a hatched county with only one W, one of the GIDs needs to be
|
||||||
* to remove the GID for the area of smaller size.
|
* filtered out. The approach in the method is to remove the GID for the
|
||||||
|
* area of smaller size.
|
||||||
*/
|
*/
|
||||||
private Set<String> removeDuplicateGid(Set<String> prefixes) {
|
private Set<String> removeDuplicateGid(Set<String> prefixes) {
|
||||||
|
|
||||||
|
@ -2972,7 +2976,7 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
||||||
|
|
||||||
Map<String, Double> fipsSize = new HashMap<String, Double>();
|
Map<String, Double> fipsSize = new HashMap<String, Double>();
|
||||||
Map<String, String> namePrefix = new HashMap<String, String>();
|
Map<String, String> namePrefix = new HashMap<String, String>();
|
||||||
Iterator<String> iter = prefixes.iterator();
|
Iterator<String> iter = prefixes.iterator();
|
||||||
String fips = null;
|
String fips = null;
|
||||||
String prefix = null;
|
String prefix = null;
|
||||||
while (iter.hasNext()) {
|
while (iter.hasNext()) {
|
||||||
|
@ -2981,14 +2985,14 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
||||||
for (GeospatialData f : geoData.features) {
|
for (GeospatialData f : geoData.features) {
|
||||||
fips = getFips(f);
|
fips = getFips(f);
|
||||||
Geometry geom = f.geometry;
|
Geometry geom = f.geometry;
|
||||||
if(prefix.equals(GeometryUtil.getPrefix(geom.getUserData()))) {
|
if (prefix.equals(GeometryUtil.getPrefix(geom.getUserData()))) {
|
||||||
size = geom.getArea();
|
size = geom.getArea();
|
||||||
if (fipsSize.containsKey(fips)) {
|
if (fipsSize.containsKey(fips)) {
|
||||||
if (fipsSize.get(fips) < size) {
|
if (fipsSize.get(fips) < size) {
|
||||||
fipsSize.put(fips, size);
|
fipsSize.put(fips, size);
|
||||||
namePrefix.put(fips, prefix);
|
namePrefix.put(fips, prefix);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
fipsSize.put(fips, size);
|
fipsSize.put(fips, size);
|
||||||
namePrefix.put(fips, prefix);
|
namePrefix.put(fips, prefix);
|
||||||
|
@ -2998,5 +3002,4 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
||||||
}
|
}
|
||||||
return new HashSet<String>(namePrefix.values());
|
return new HashSet<String>(namePrefix.values());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,6 +49,9 @@
|
||||||
class="com.raytheon.edex.plugin.gfe.cache.d2dparms.D2DParmIdCache"
|
class="com.raytheon.edex.plugin.gfe.cache.d2dparms.D2DParmIdCache"
|
||||||
factory-method="getInstance" />
|
factory-method="getInstance" />
|
||||||
|
|
||||||
|
<bean id="gridParmManager"
|
||||||
|
class="com.raytheon.edex.plugin.gfe.server.GridParmManager" />
|
||||||
|
|
||||||
<camelContext id="gfe-common-camel" xmlns="http://camel.apache.org/schema/spring"
|
<camelContext id="gfe-common-camel" xmlns="http://camel.apache.org/schema/spring"
|
||||||
errorHandlerRef="errorHandler">
|
errorHandlerRef="errorHandler">
|
||||||
|
|
||||||
|
@ -94,5 +97,17 @@
|
||||||
</doCatch>
|
</doCatch>
|
||||||
</doTry>
|
</doTry>
|
||||||
</route>
|
</route>
|
||||||
|
|
||||||
|
<route id="notifyGridParmManager">
|
||||||
|
<from uri="jms-generic:topic:edex.alerts.gfe" />
|
||||||
|
<doTry>
|
||||||
|
<bean ref="serializationUtil" method="transformFromThrift" />
|
||||||
|
<bean ref="gridParmManager" method="processNotification" />
|
||||||
|
<doCatch>
|
||||||
|
<exception>java.lang.Throwable</exception>
|
||||||
|
<to uri="log:gridParmManager?level=ERROR&showBody=false&showCaughtException=true&showStackTrace=true"/>
|
||||||
|
</doCatch>
|
||||||
|
</doTry>
|
||||||
|
</route>
|
||||||
</camelContext>
|
</camelContext>
|
||||||
</beans>
|
</beans>
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
package com.raytheon.edex.plugin.gfe.cache.d2dparms;
|
package com.raytheon.edex.plugin.gfe.cache.d2dparms;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
@ -40,11 +41,13 @@ import com.raytheon.edex.plugin.gfe.server.database.D2DSatDatabase;
|
||||||
import com.raytheon.edex.plugin.gfe.server.database.D2DSatDatabaseManager;
|
import com.raytheon.edex.plugin.gfe.server.database.D2DSatDatabaseManager;
|
||||||
import com.raytheon.edex.plugin.gfe.server.database.GridDatabase;
|
import com.raytheon.edex.plugin.gfe.server.database.GridDatabase;
|
||||||
import com.raytheon.edex.plugin.gfe.server.notify.GfeIngestNotificationFilter;
|
import com.raytheon.edex.plugin.gfe.server.notify.GfeIngestNotificationFilter;
|
||||||
|
import com.raytheon.edex.plugin.gfe.util.SendNotifications;
|
||||||
import com.raytheon.uf.common.dataplugin.PluginException;
|
import com.raytheon.uf.common.dataplugin.PluginException;
|
||||||
import com.raytheon.uf.common.dataplugin.gfe.db.objects.DatabaseID;
|
import com.raytheon.uf.common.dataplugin.gfe.db.objects.DatabaseID;
|
||||||
import com.raytheon.uf.common.dataplugin.gfe.db.objects.ParmID;
|
import com.raytheon.uf.common.dataplugin.gfe.db.objects.ParmID;
|
||||||
import com.raytheon.uf.common.dataplugin.gfe.exception.GfeException;
|
import com.raytheon.uf.common.dataplugin.gfe.exception.GfeException;
|
||||||
import com.raytheon.uf.common.dataplugin.gfe.server.message.ServerResponse;
|
import com.raytheon.uf.common.dataplugin.gfe.server.message.ServerResponse;
|
||||||
|
import com.raytheon.uf.common.dataplugin.gfe.server.notify.DBInvChangeNotification;
|
||||||
import com.raytheon.uf.common.dataplugin.gfe.server.notify.GridUpdateNotification;
|
import com.raytheon.uf.common.dataplugin.gfe.server.notify.GridUpdateNotification;
|
||||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||||
import com.raytheon.uf.common.status.UFStatus;
|
import com.raytheon.uf.common.status.UFStatus;
|
||||||
|
@ -68,6 +71,7 @@ import com.raytheon.uf.edex.site.SiteAwareRegistry;
|
||||||
* GridUpdateNotifications.
|
* GridUpdateNotifications.
|
||||||
* Mar 20, 2013 #1774 randerso Changed to use GFDD2DDao
|
* Mar 20, 2013 #1774 randerso Changed to use GFDD2DDao
|
||||||
* Apr 01, 2013 #1774 randerso Moved wind component checking to GfeIngestNotificaionFilter
|
* Apr 01, 2013 #1774 randerso Moved wind component checking to GfeIngestNotificaionFilter
|
||||||
|
* May 14, 2013 #2004 randerso Added DBInvChangeNotifications when D2D data is purged
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -342,9 +346,13 @@ public class D2DParmIdCache {
|
||||||
putParmIDList(parmIds);
|
putParmIDList(parmIds);
|
||||||
List<DatabaseID> currentDbInventory = this.getDatabaseIDs();
|
List<DatabaseID> currentDbInventory = this.getDatabaseIDs();
|
||||||
dbsToRemove.removeAll(currentDbInventory);
|
dbsToRemove.removeAll(currentDbInventory);
|
||||||
|
List<DBInvChangeNotification> invChgList = new ArrayList<DBInvChangeNotification>(
|
||||||
|
dbsToRemove.size());
|
||||||
for (DatabaseID dbId : dbsToRemove) {
|
for (DatabaseID dbId : dbsToRemove) {
|
||||||
GridParmManager.removeDbFromMap(dbId);
|
invChgList.add(new DBInvChangeNotification(null, Arrays
|
||||||
|
.asList(dbId), siteID));
|
||||||
}
|
}
|
||||||
|
SendNotifications.send(invChgList);
|
||||||
|
|
||||||
// inform GfeIngestNotificationFilter of removed dbs
|
// inform GfeIngestNotificationFilter of removed dbs
|
||||||
GfeIngestNotificationFilter.purgeDbs(dbsToRemove);
|
GfeIngestNotificationFilter.purgeDbs(dbsToRemove);
|
||||||
|
|
|
@ -92,12 +92,13 @@ import com.raytheon.uf.edex.database.purge.PurgeLogger;
|
||||||
* smartInit hdf5 data
|
* smartInit hdf5 data
|
||||||
* 03/07/13 #1773 njensen Logged commitGrid() times
|
* 03/07/13 #1773 njensen Logged commitGrid() times
|
||||||
* 03/15/13 #1795 njensen Sped up commitGrid()
|
* 03/15/13 #1795 njensen Sped up commitGrid()
|
||||||
* 03/20/2013 #1774 randerso Removed dead method, changed to use new
|
* 03/20/13 #1774 randerso Removed dead method, changed to use new
|
||||||
* D2DGridDatabase constructor
|
* D2DGridDatabase constructor
|
||||||
* 04/23/2013 #1949 rjpeter Added inventory retrieval for a given time range.
|
* 04/23/13 #1949 rjpeter Added inventory retrieval for a given time range.
|
||||||
* 05/02/13 #1969 randerso Fixed possible null pointer in getParmList
|
* 05/02/13 #1969 randerso Fixed possible null pointer in getParmList
|
||||||
* Removed inventory from DBInvChangedNotification
|
* Removed inventory from DBInvChangedNotification
|
||||||
* 05/03/13 #1974 randerso Fixed error logging to include stack trace
|
* 05/03/13 #1974 randerso Fixed error logging to include stack trace
|
||||||
|
* 05/14/13 #2004 randerso Added methods to synch GridParmManager across JVMs
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author bphillip
|
* @author bphillip
|
||||||
|
@ -1189,7 +1190,7 @@ public class GridParmManager {
|
||||||
*
|
*
|
||||||
* @param dbId
|
* @param dbId
|
||||||
* The database ID of the database to retrieve
|
* The database ID of the database to retrieve
|
||||||
* @return The Grid Database
|
* @return The Grid Database or null if database not available
|
||||||
* @throws GfeException
|
* @throws GfeException
|
||||||
*/
|
*/
|
||||||
public static GridDatabase getDb(DatabaseID dbId) throws GfeException {
|
public static GridDatabase getDb(DatabaseID dbId) throws GfeException {
|
||||||
|
@ -1398,4 +1399,34 @@ public class GridParmManager {
|
||||||
dbMap.remove(id);
|
dbMap.remove(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void processNotification(Object msg) {
|
||||||
|
if (msg instanceof List) {
|
||||||
|
for (Object obj : (List<?>) msg) {
|
||||||
|
if (obj instanceof GfeNotification) {
|
||||||
|
handleGfeNotification((GfeNotification) obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (msg instanceof GfeNotification) {
|
||||||
|
handleGfeNotification((GfeNotification) msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void handleGfeNotification(GfeNotification notif) {
|
||||||
|
if (notif instanceof DBInvChangeNotification) {
|
||||||
|
DBInvChangeNotification invChanged = (DBInvChangeNotification) notif;
|
||||||
|
|
||||||
|
for (DatabaseID dbId : invChanged.getAdditions()) {
|
||||||
|
try {
|
||||||
|
getDb(dbId);
|
||||||
|
} catch (GfeException e) {
|
||||||
|
statusHandler.handle(Priority.PROBLEM,
|
||||||
|
e.getLocalizedMessage(), e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (DatabaseID dbId : invChanged.getDeletions()) {
|
||||||
|
removeDbFromMap(dbId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,7 @@ import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.locks.ReentrantReadWriteLock;
|
||||||
|
|
||||||
import javax.xml.bind.JAXB;
|
import javax.xml.bind.JAXB;
|
||||||
|
|
||||||
|
@ -50,8 +51,11 @@ import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||||
* 11/16/2009 #3120 rjpeter Initial version
|
* 11/16/2009 #3120 rjpeter Initial version
|
||||||
* 11/21/2009 #3576 rjpeter Added group capability
|
* 11/21/2009 #3576 rjpeter Added group capability
|
||||||
* 04/17/2013 #1913 randerso Moved to common
|
* 04/17/2013 #1913 randerso Moved to common
|
||||||
|
* 05/16/2013 #2010 randerso Added read/write locking to mutable maps
|
||||||
*
|
*
|
||||||
* @author rjpeter
|
* </pre>
|
||||||
|
*
|
||||||
|
* @author rjpeter
|
||||||
* @version 1.0
|
* @version 1.0
|
||||||
*/
|
*/
|
||||||
public class LevelMappingFactory {
|
public class LevelMappingFactory {
|
||||||
|
@ -65,11 +69,15 @@ public class LevelMappingFactory {
|
||||||
|
|
||||||
private Map<String, LevelMapping> keyToLevelMappings = new HashMap<String, LevelMapping>();
|
private Map<String, LevelMapping> keyToLevelMappings = new HashMap<String, LevelMapping>();
|
||||||
|
|
||||||
private boolean levelToLevelMappingsInitialized = false;
|
private volatile boolean levelToLevelMappingsInitialized = false;
|
||||||
|
|
||||||
|
private ReentrantReadWriteLock levelToLevelLock = new ReentrantReadWriteLock();
|
||||||
|
|
||||||
private Map<Level, LevelMapping> levelToLevelMappings = new HashMap<Level, LevelMapping>();
|
private Map<Level, LevelMapping> levelToLevelMappings = new HashMap<Level, LevelMapping>();
|
||||||
|
|
||||||
private boolean groupToMasterLevelsInitialized = false;
|
private volatile boolean groupToMasterLevelsInitialized = false;
|
||||||
|
|
||||||
|
private ReentrantReadWriteLock groupToMasterLevelsLock = new ReentrantReadWriteLock();
|
||||||
|
|
||||||
private Map<String, Map<MasterLevel, Set<Level>>> groupToMasterLevels = new HashMap<String, Map<MasterLevel, Set<Level>>>();
|
private Map<String, Map<MasterLevel, Set<Level>>> groupToMasterLevels = new HashMap<String, Map<MasterLevel, Set<Level>>>();
|
||||||
|
|
||||||
|
@ -110,6 +118,14 @@ public class LevelMappingFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
initializeLevelToLevelMappings();
|
||||||
|
initializeGroupToMasterLevels();
|
||||||
|
} catch (CommunicationException e) {
|
||||||
|
statusHandler.error("Error initializing LevelMappingFactory for: "
|
||||||
|
+ filePath, e);
|
||||||
|
}
|
||||||
long finish = System.currentTimeMillis();
|
long finish = System.currentTimeMillis();
|
||||||
System.out.println("LevelMappingFactory initialization took ["
|
System.out.println("LevelMappingFactory initialization took ["
|
||||||
+ (finish - start) + "] ms");
|
+ (finish - start) + "] ms");
|
||||||
|
@ -124,7 +140,14 @@ public class LevelMappingFactory {
|
||||||
if (!levelToLevelMappingsInitialized) {
|
if (!levelToLevelMappingsInitialized) {
|
||||||
initializeLevelToLevelMappings();
|
initializeLevelToLevelMappings();
|
||||||
}
|
}
|
||||||
return levelToLevelMappings.get(level);
|
|
||||||
|
levelToLevelLock.readLock().lock();
|
||||||
|
try {
|
||||||
|
LevelMapping retVal = levelToLevelMappings.get(level);
|
||||||
|
return retVal;
|
||||||
|
} finally {
|
||||||
|
levelToLevelLock.readLock().unlock();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<LevelMapping> getAllLevelMappings() {
|
public Collection<LevelMapping> getAllLevelMappings() {
|
||||||
|
@ -135,7 +158,14 @@ public class LevelMappingFactory {
|
||||||
if (!levelToLevelMappingsInitialized) {
|
if (!levelToLevelMappingsInitialized) {
|
||||||
initializeLevelToLevelMappings();
|
initializeLevelToLevelMappings();
|
||||||
}
|
}
|
||||||
return levelToLevelMappings.keySet();
|
|
||||||
|
levelToLevelLock.readLock().lock();
|
||||||
|
try {
|
||||||
|
Set<Level> retVal = levelToLevelMappings.keySet();
|
||||||
|
return retVal;
|
||||||
|
} finally {
|
||||||
|
levelToLevelLock.readLock().unlock();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<MasterLevel, Set<Level>> getLevelMapForGroup(String group)
|
public Map<MasterLevel, Set<Level>> getLevelMapForGroup(String group)
|
||||||
|
@ -143,61 +173,85 @@ public class LevelMappingFactory {
|
||||||
if (!groupToMasterLevelsInitialized) {
|
if (!groupToMasterLevelsInitialized) {
|
||||||
initializeGroupToMasterLevels();
|
initializeGroupToMasterLevels();
|
||||||
}
|
}
|
||||||
return groupToMasterLevels.get(group);
|
|
||||||
|
groupToMasterLevelsLock.readLock().lock();
|
||||||
|
try {
|
||||||
|
Map<MasterLevel, Set<Level>> retVal = groupToMasterLevels
|
||||||
|
.get(group);
|
||||||
|
return retVal;
|
||||||
|
} finally {
|
||||||
|
groupToMasterLevelsLock.readLock().unlock();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initializeLevelToLevelMappings() throws CommunicationException {
|
private void initializeLevelToLevelMappings() throws CommunicationException {
|
||||||
for (LevelMapping mapping : keyToLevelMappings.values()) {
|
// acquire the write lock
|
||||||
String group = mapping.getGroup();
|
levelToLevelLock.writeLock().lock();
|
||||||
|
try {
|
||||||
for (Level l : mapping.getLevels()) {
|
// verify some other thread hasn't already initialized
|
||||||
if (levelToLevelMappings.containsKey(l)) {
|
if (!levelToLevelMappingsInitialized) {
|
||||||
LevelMapping oldMapping = levelToLevelMappings.get(l);
|
for (LevelMapping mapping : keyToLevelMappings.values()) {
|
||||||
// Only replace the old level mapping if we have less
|
for (Level l : mapping.getLevels()) {
|
||||||
// levels than the old mapping
|
// Only replace the old level mapping if we have
|
||||||
// This should cause the most specific mapping to be
|
// less levels than the old mapping
|
||||||
// used
|
// This should cause the most specific mapping to be
|
||||||
if (mapping.getLevels().size() < oldMapping.getLevels()
|
// used
|
||||||
.size()) {
|
LevelMapping oldMapping = levelToLevelMappings.get(l);
|
||||||
levelToLevelMappings.put(l, mapping);
|
if (oldMapping == null
|
||||||
|
|| mapping.getLevels().size() < oldMapping
|
||||||
|
.getLevels().size()) {
|
||||||
|
levelToLevelMappings.put(l, mapping);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
levelToLevelMappings.put(l, mapping);
|
|
||||||
}
|
}
|
||||||
|
levelToLevelMappingsInitialized = true;
|
||||||
}
|
}
|
||||||
|
} finally {
|
||||||
|
// release the write lock
|
||||||
|
levelToLevelLock.writeLock().unlock();
|
||||||
}
|
}
|
||||||
levelToLevelMappingsInitialized = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initializeGroupToMasterLevels() throws CommunicationException {
|
private void initializeGroupToMasterLevels() throws CommunicationException {
|
||||||
for (LevelMapping mapping : keyToLevelMappings.values()) {
|
// acquire the write lock
|
||||||
String group = mapping.getGroup();
|
groupToMasterLevelsLock.writeLock().lock();
|
||||||
Map<MasterLevel, Set<Level>> masterLevels = null;
|
try {
|
||||||
|
// verify some other thread hasn't already initialized
|
||||||
|
if (!groupToMasterLevelsInitialized) {
|
||||||
|
for (LevelMapping mapping : keyToLevelMappings.values()) {
|
||||||
|
String group = mapping.getGroup();
|
||||||
|
Map<MasterLevel, Set<Level>> masterLevels = null;
|
||||||
|
|
||||||
if (group != null) {
|
if (group != null) {
|
||||||
masterLevels = groupToMasterLevels.get(mapping.getGroup());
|
masterLevels = groupToMasterLevels.get(mapping
|
||||||
if (masterLevels == null) {
|
.getGroup());
|
||||||
masterLevels = new HashMap<MasterLevel, Set<Level>>();
|
if (masterLevels == null) {
|
||||||
groupToMasterLevels.put(group, masterLevels);
|
masterLevels = new HashMap<MasterLevel, Set<Level>>();
|
||||||
}
|
groupToMasterLevels.put(group, masterLevels);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Level l : mapping.getLevels()) {
|
|
||||||
|
|
||||||
// populate grouping map
|
|
||||||
if (masterLevels != null) {
|
|
||||||
MasterLevel ml = l.getMasterLevel();
|
|
||||||
Set<Level> levels = masterLevels.get(ml);
|
|
||||||
|
|
||||||
if (levels == null) {
|
|
||||||
levels = new HashSet<Level>();
|
|
||||||
masterLevels.put(ml, levels);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
levels.add(l);
|
for (Level l : mapping.getLevels()) {
|
||||||
|
|
||||||
|
// populate grouping map
|
||||||
|
if (masterLevels != null) {
|
||||||
|
MasterLevel ml = l.getMasterLevel();
|
||||||
|
Set<Level> levels = masterLevels.get(ml);
|
||||||
|
|
||||||
|
if (levels == null) {
|
||||||
|
levels = new HashSet<Level>();
|
||||||
|
masterLevels.put(ml, levels);
|
||||||
|
}
|
||||||
|
|
||||||
|
levels.add(l);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
groupToMasterLevelsInitialized = true;
|
||||||
}
|
}
|
||||||
|
} finally {
|
||||||
|
// release the write lock
|
||||||
|
groupToMasterLevelsLock.writeLock().unlock();
|
||||||
}
|
}
|
||||||
groupToMasterLevelsInitialized = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,9 @@
|
||||||
package gov.noaa.nws.ncep.ui.nsharp.background;
|
package gov.noaa.nws.ncep.ui.nsharp.background;
|
||||||
|
|
||||||
import gov.noaa.nws.ncep.edex.common.sounding.NcSoundingLayer;
|
import gov.noaa.nws.ncep.edex.common.sounding.NcSoundingLayer;
|
||||||
|
import gov.noaa.nws.ncep.ui.nsharp.NsharpConfigManager;
|
||||||
import gov.noaa.nws.ncep.ui.nsharp.NsharpConstants;
|
import gov.noaa.nws.ncep.ui.nsharp.NsharpConstants;
|
||||||
|
import gov.noaa.nws.ncep.ui.nsharp.NsharpGraphProperty;
|
||||||
import gov.noaa.nws.ncep.ui.nsharp.NsharpLineProperty;
|
import gov.noaa.nws.ncep.ui.nsharp.NsharpLineProperty;
|
||||||
import gov.noaa.nws.ncep.ui.nsharp.display.NsharpSkewTPaneDescriptor;
|
import gov.noaa.nws.ncep.ui.nsharp.display.NsharpSkewTPaneDescriptor;
|
||||||
|
|
||||||
|
@ -58,6 +60,7 @@ public class NsharpIcingPaneBackground extends NsharpGenericPaneBackground {
|
||||||
private int paneHeight = NsharpConstants.SKEWT_HEIGHT;
|
private int paneHeight = NsharpConstants.SKEWT_HEIGHT;
|
||||||
private float yMagFactor=1;
|
private float yMagFactor=1;
|
||||||
private float xMagFactor=1;
|
private float xMagFactor=1;
|
||||||
|
private NsharpGraphProperty graphConfigProperty;
|
||||||
public NsharpIcingPaneBackground(NsharpSkewTPaneDescriptor desc) {
|
public NsharpIcingPaneBackground(NsharpSkewTPaneDescriptor desc) {
|
||||||
super();
|
super();
|
||||||
|
|
||||||
|
@ -66,7 +69,8 @@ public class NsharpIcingPaneBackground extends NsharpGenericPaneBackground {
|
||||||
pe = new PixelExtent(this.rectangle);
|
pe = new PixelExtent(this.rectangle);
|
||||||
world = new WGraphics(this.rectangle);
|
world = new WGraphics(this.rectangle);
|
||||||
|
|
||||||
|
NsharpConfigManager configMgr = NsharpConfigManager.getInstance();
|
||||||
|
graphConfigProperty = configMgr.retrieveNsharpConfigStoreFromFs().getGraphProperty();
|
||||||
//System.out.println("NsharpIcingPaneBackground created");
|
//System.out.println("NsharpIcingPaneBackground created");
|
||||||
this.desc = desc;
|
this.desc = desc;
|
||||||
}
|
}
|
||||||
|
@ -372,7 +376,11 @@ public class NsharpIcingPaneBackground extends NsharpGenericPaneBackground {
|
||||||
double pX= world.mapX( NsharpConstants.ICING_RELATIVE_HUMIDITY_RIGHT);
|
double pX= world.mapX( NsharpConstants.ICING_RELATIVE_HUMIDITY_RIGHT);
|
||||||
if(pX < xmax)
|
if(pX < xmax)
|
||||||
xmax = pX;
|
xmax = pX;
|
||||||
double dispX = xmax - 30 * currentZoomLevel * xMagFactor;
|
|
||||||
|
double windBarbSizfactor = graphConfigProperty.getWindBarbSize()/2.2f;
|
||||||
|
if(windBarbSizfactor < 1)
|
||||||
|
windBarbSizfactor=1;
|
||||||
|
double dispX = xmax - 50 * currentZoomLevel * xMagFactor* windBarbSizfactor;
|
||||||
|
|
||||||
Coordinate cumap = world.unMap(dispX,ymax);
|
Coordinate cumap = world.unMap(dispX,ymax);
|
||||||
|
|
||||||
|
|
|
@ -68,6 +68,8 @@ public class NsharpSkewTPaneBackground extends NsharpGenericPaneBackground {
|
||||||
private double currentZoomLevel=1;
|
private double currentZoomLevel=1;
|
||||||
private int skewtWidth=NsharpConstants.SKEWT_WIDTH;
|
private int skewtWidth=NsharpConstants.SKEWT_WIDTH;
|
||||||
private float xRatio=1;
|
private float xRatio=1;
|
||||||
|
private NsharpGraphProperty graphConfigProperty;
|
||||||
|
|
||||||
private Float[]mainMixingRatios =
|
private Float[]mainMixingRatios =
|
||||||
{ .5f, 1f, 2f, 5f, 10f, 20f};
|
{ .5f, 1f, 2f, 5f, 10f, 20f};
|
||||||
private float[]mixingRatios =
|
private float[]mixingRatios =
|
||||||
|
@ -80,7 +82,7 @@ public class NsharpSkewTPaneBackground extends NsharpGenericPaneBackground {
|
||||||
1000, 100, 10, -40, 273, 20);
|
1000, 100, 10, -40, 273, 20);
|
||||||
|
|
||||||
private static final double Rd = 0.2870586d;
|
private static final double Rd = 0.2870586d;
|
||||||
private NsharpGraphProperty graphConfigProperty;
|
|
||||||
private int tempOffset = 0;
|
private int tempOffset = 0;
|
||||||
public NsharpSkewTPaneBackground(NsharpSkewTPaneDescriptor desc) {
|
public NsharpSkewTPaneBackground(NsharpSkewTPaneDescriptor desc) {
|
||||||
super();
|
super();
|
||||||
|
@ -96,8 +98,9 @@ public class NsharpSkewTPaneBackground extends NsharpGenericPaneBackground {
|
||||||
NsharpConstants.right, NsharpConstants.bottom);
|
NsharpConstants.right, NsharpConstants.bottom);
|
||||||
//System.out.println("NsharpSkewTPaneBackground created");
|
//System.out.println("NsharpSkewTPaneBackground created");
|
||||||
this.desc = desc;
|
this.desc = desc;
|
||||||
|
|
||||||
NsharpConfigManager configMgr = NsharpConfigManager.getInstance();
|
NsharpConfigManager configMgr = NsharpConfigManager.getInstance();
|
||||||
graphConfigProperty = configMgr.retrieveNsharpConfigStoreFromFs().getGraphProperty();
|
graphConfigProperty = configMgr.retrieveNsharpConfigStoreFromFs().getGraphProperty();
|
||||||
pressureMainList = Arrays.asList(NsharpConstants.PRESSURE_MAIN_LEVELS);
|
pressureMainList = Arrays.asList(NsharpConstants.PRESSURE_MAIN_LEVELS);
|
||||||
mixRatioMainList = Arrays.asList(mainMixingRatios);
|
mixRatioMainList = Arrays.asList(mainMixingRatios);
|
||||||
}
|
}
|
||||||
|
@ -363,7 +366,7 @@ public class NsharpSkewTPaneBackground extends NsharpGenericPaneBackground {
|
||||||
VerticalAlignment.MIDDLE, null);
|
VerticalAlignment.MIDDLE, null);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
// only mark pressure line to a small length
|
// only mark pressure line to a small lengthprivate NsharpGraphProperty graphConfigProperty;
|
||||||
xend = xmin+15* currentZoomLevel*xRatio;
|
xend = xmin+15* currentZoomLevel*xRatio;
|
||||||
}
|
}
|
||||||
target.drawLine(xmin, world.mapY(coor.y), 0.0, xend,
|
target.drawLine(xmin, world.mapY(coor.y), 0.0, xend,
|
||||||
|
@ -825,7 +828,10 @@ public class NsharpSkewTPaneBackground extends NsharpGenericPaneBackground {
|
||||||
double pX= world.mapX( NsharpConstants.right);
|
double pX= world.mapX( NsharpConstants.right);
|
||||||
if(pX < xmax)
|
if(pX < xmax)
|
||||||
xmax = pX;
|
xmax = pX;
|
||||||
double dispX = xmax - 20 * currentZoomLevel * xRatio;
|
double windBarbSizfactor = graphConfigProperty.getWindBarbSize()/1.6f;
|
||||||
|
if(windBarbSizfactor < 1)
|
||||||
|
windBarbSizfactor=1;
|
||||||
|
double dispX = xmax - 40 * currentZoomLevel * xRatio * windBarbSizfactor;
|
||||||
Coordinate cumap = world.unMap(dispX,ymax);
|
Coordinate cumap = world.unMap(dispX,ymax);
|
||||||
|
|
||||||
return cumap.x;
|
return cumap.x;
|
||||||
|
|
|
@ -20,7 +20,9 @@
|
||||||
*/
|
*/
|
||||||
package gov.noaa.nws.ncep.ui.nsharp.background;
|
package gov.noaa.nws.ncep.ui.nsharp.background;
|
||||||
import gov.noaa.nws.ncep.edex.common.sounding.NcSoundingLayer;
|
import gov.noaa.nws.ncep.edex.common.sounding.NcSoundingLayer;
|
||||||
|
import gov.noaa.nws.ncep.ui.nsharp.NsharpConfigManager;
|
||||||
import gov.noaa.nws.ncep.ui.nsharp.NsharpConstants;
|
import gov.noaa.nws.ncep.ui.nsharp.NsharpConstants;
|
||||||
|
import gov.noaa.nws.ncep.ui.nsharp.NsharpGraphProperty;
|
||||||
import gov.noaa.nws.ncep.ui.nsharp.NsharpLineProperty;
|
import gov.noaa.nws.ncep.ui.nsharp.NsharpLineProperty;
|
||||||
import gov.noaa.nws.ncep.ui.nsharp.display.NsharpSkewTPaneDescriptor;
|
import gov.noaa.nws.ncep.ui.nsharp.display.NsharpSkewTPaneDescriptor;
|
||||||
|
|
||||||
|
@ -54,6 +56,7 @@ public class NsharpTurbulencePaneBackground extends NsharpGenericPaneBackground{
|
||||||
private int paneHeight = NsharpConstants.SKEWT_HEIGHT;
|
private int paneHeight = NsharpConstants.SKEWT_HEIGHT;
|
||||||
private float yMagFactor=1;
|
private float yMagFactor=1;
|
||||||
private float xMagFactor=1;
|
private float xMagFactor=1;
|
||||||
|
private NsharpGraphProperty graphConfigProperty;
|
||||||
public NsharpTurbulencePaneBackground(NsharpSkewTPaneDescriptor desc) {
|
public NsharpTurbulencePaneBackground(NsharpSkewTPaneDescriptor desc) {
|
||||||
super();
|
super();
|
||||||
|
|
||||||
|
@ -61,6 +64,8 @@ public class NsharpTurbulencePaneBackground extends NsharpGenericPaneBackground{
|
||||||
NsharpConstants.TURB_WIDTH, NsharpConstants.TURB_HEIGHT);
|
NsharpConstants.TURB_WIDTH, NsharpConstants.TURB_HEIGHT);
|
||||||
pe = new PixelExtent(this.rectangle);
|
pe = new PixelExtent(this.rectangle);
|
||||||
world = new WGraphics(this.rectangle);
|
world = new WGraphics(this.rectangle);
|
||||||
|
NsharpConfigManager configMgr = NsharpConfigManager.getInstance();
|
||||||
|
graphConfigProperty = configMgr.retrieveNsharpConfigStoreFromFs().getGraphProperty();
|
||||||
this.desc = desc;
|
this.desc = desc;
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
|
@ -347,7 +352,10 @@ public class NsharpTurbulencePaneBackground extends NsharpGenericPaneBackground{
|
||||||
double pX= world.mapX( NsharpConstants.TURBULENCE_LN_RICHARDSON_NUMBER_LEFT);
|
double pX= world.mapX( NsharpConstants.TURBULENCE_LN_RICHARDSON_NUMBER_LEFT);
|
||||||
if(pX < xmax)
|
if(pX < xmax)
|
||||||
xmax = pX;
|
xmax = pX;
|
||||||
double dispX = xmax - 50 * currentZoomLevel * xMagFactor;
|
double windBarbSizfactor = graphConfigProperty.getWindBarbSize()/2f;
|
||||||
|
if(windBarbSizfactor < 1)
|
||||||
|
windBarbSizfactor=1;
|
||||||
|
double dispX = xmax - 50 * currentZoomLevel * xMagFactor* windBarbSizfactor;
|
||||||
|
|
||||||
Coordinate cumap = world.unMap(dispX,ymax);
|
Coordinate cumap = world.unMap(dispX,ymax);
|
||||||
|
|
||||||
|
|
|
@ -784,7 +784,7 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource{
|
||||||
WGraphics world, RGB iicolor, List<NcSoundingLayer> sndLys, double xPosition, double botPress)throws VizException {
|
WGraphics world, RGB iicolor, List<NcSoundingLayer> sndLys, double xPosition, double botPress)throws VizException {
|
||||||
if(sndLys.size()< 4)
|
if(sndLys.size()< 4)
|
||||||
return;
|
return;
|
||||||
ArrayList<List<LineStroke>> windList = new ArrayList<List<LineStroke>>();
|
//ArrayList<List<LineStroke>> windList = new ArrayList<List<LineStroke>>();
|
||||||
List<windPickedElement> layerStateList = new ArrayList<windPickedElement>();
|
List<windPickedElement> layerStateList = new ArrayList<windPickedElement>();
|
||||||
float lastHeight = -9999;
|
float lastHeight = -9999;
|
||||||
RGB icolor = iicolor;//graphConfigProperty.getWindBarbColor();
|
RGB icolor = iicolor;//graphConfigProperty.getWindBarbColor();
|
||||||
|
@ -843,10 +843,10 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource{
|
||||||
}
|
}
|
||||||
double windX = xPosition;
|
double windX = xPosition;
|
||||||
double windY=0;
|
double windY=0;
|
||||||
double barbScaleFactorx, barbScaleFactory;
|
//double barbScaleFactorx, barbScaleFactory;
|
||||||
barbScaleFactorx = zoomLevel;
|
//barbScaleFactorx = zoomLevel;
|
||||||
barbScaleFactory = zoomLevel;
|
// barbScaleFactory = zoomLevel;
|
||||||
List<double[]> locations = new ArrayList<double[]>();
|
//List<double[]> locations = new ArrayList<double[]>();
|
||||||
//System.out.println("zoom="+zoomLevel +"world viewYmin="+world.getViewYmin()+" viewYmax="+world.getViewYmax()+" wolrdYmin="+ world.getWorldYmin()+" wolrdYmax="+ world.getWorldYmax()
|
//System.out.println("zoom="+zoomLevel +"world viewYmin="+world.getViewYmin()+" viewYmax="+world.getViewYmax()+" wolrdYmin="+ world.getWorldYmin()+" wolrdYmax="+ world.getWorldYmax()
|
||||||
// +"world viewXmin="+world.getViewXmin()+" viewXmax="+world.getViewXmax()+" wolrdXmin="+ world.getWorldXmin()+" wolrdXmax="+ world.getWorldXmax());
|
// +"world viewXmin="+world.getViewXmin()+" viewXmax="+world.getViewXmax()+" wolrdXmin="+ world.getWorldXmin()+" wolrdXmax="+ world.getWorldXmax());
|
||||||
//plot wind barbs
|
//plot wind barbs
|
||||||
|
@ -876,30 +876,30 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource{
|
||||||
// Get the vertical ordinate.
|
// Get the vertical ordinate.
|
||||||
if(currentGraphMode== NsharpConstants.GRAPH_SKEWT){
|
if(currentGraphMode== NsharpConstants.GRAPH_SKEWT){
|
||||||
windY = NsharpWxMath.getSkewTXY(pressure, 0).y;
|
windY = NsharpWxMath.getSkewTXY(pressure, 0).y;
|
||||||
barbScaleFactorx = 0.6*zoomLevel;
|
//barbScaleFactorx = 0.6*zoomLevel;
|
||||||
barbScaleFactory= zoomLevel;
|
//barbScaleFactory= zoomLevel;
|
||||||
}
|
}
|
||||||
else if(currentGraphMode== NsharpConstants.GRAPH_ICING ){
|
else if(currentGraphMode== NsharpConstants.GRAPH_ICING ){
|
||||||
//Chin:Y axis (pressure) is scaled using log scale and increaing downward
|
//Chin:Y axis (pressure) is scaled using log scale and increaing downward
|
||||||
//WorldYmin= at pressure 1000,its value actually is 1000 (max), wolrdYmax = at pressure 300, its value is 825 (min)
|
//WorldYmin= at pressure 1000,its value actually is 1000 (max), wolrdYmax = at pressure 300, its value is 825 (min)
|
||||||
windY = world.getWorldYmax() + (world.getWorldYmin()-icingBackground.toLogScale(pressure));
|
windY = world.getWorldYmax() + (world.getWorldYmin()-icingBackground.toLogScale(pressure));
|
||||||
barbScaleFactorx = 1.3*zoomLevel;
|
//barbScaleFactorx = 1.3*zoomLevel;
|
||||||
barbScaleFactory= 2.5*zoomLevel;//experimental value: depends on the world coordinate size set
|
//barbScaleFactory= 2.5*zoomLevel;//experimental value: depends on the world coordinate size set
|
||||||
}else if( currentGraphMode== NsharpConstants.GRAPH_TURB){
|
}else if( currentGraphMode== NsharpConstants.GRAPH_TURB){
|
||||||
//Chin:Y axis (pressure) is scaled using log scale and increaing downward
|
//Chin:Y axis (pressure) is scaled using log scale and increaing downward
|
||||||
//WorldYmin= at pressure 1000,its value actually is 1000 (max), wolrdYmax = at pressure 300, its value is 825 (min)
|
//WorldYmin= at pressure 1000,its value actually is 1000 (max), wolrdYmax = at pressure 300, its value is 825 (min)
|
||||||
windY = world.getWorldYmax() + (world.getWorldYmin()-turbBackground.toLogScale(pressure));
|
windY = world.getWorldYmax() + (world.getWorldYmin()-turbBackground.toLogScale(pressure));
|
||||||
barbScaleFactorx = .12*zoomLevel;//experimental value: depends on the world coordinate size set
|
//barbScaleFactorx = .12*zoomLevel;//experimental value: depends on the world coordinate size set
|
||||||
barbScaleFactory=3.8*zoomLevel;
|
//barbScaleFactory=3.8*zoomLevel;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if(ele.myState.equals(eleState.UNPICKED)){
|
if(ele.myState.equals(eleState.UNPICKED)){
|
||||||
double[] loc= {world.mapX(windX), world.mapY(windY)};
|
//double[] loc= {world.mapX(windX), world.mapY(windY)};
|
||||||
locations.add(loc);
|
//locations.add(loc);
|
||||||
continue;
|
continue;
|
||||||
//spd=0.1f;
|
//spd=0.1f;//Chin::if we want pgen to draw unpicked wind as a circle, then set this.
|
||||||
}
|
}
|
||||||
//System.out.println("spd="+spd+" dir="+dir);
|
//System.out.println("spd="+spd+" dir="+dir);
|
||||||
/*
|
/*
|
||||||
|
@ -1356,7 +1356,7 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource{
|
||||||
str.verticallAlignment = VerticalAlignment.TOP;
|
str.verticallAlignment = VerticalAlignment.TOP;
|
||||||
Rectangle2D rect = target.getStringsBounds(str);
|
Rectangle2D rect = target.getStringsBounds(str);
|
||||||
PixelExtent boxExt;
|
PixelExtent boxExt;
|
||||||
if(cursorInSkewT== true){
|
if(cursorInSkewT== true && currentGraphMode == NsharpConstants.GRAPH_SKEWT){
|
||||||
boxExt = new PixelExtent(dispX,dispX+(rect.getWidth()+1)*hRatio,dispY-1*vRatio, dispY+rect.getHeight()*vRatio*4);
|
boxExt = new PixelExtent(dispX,dispX+(rect.getWidth()+1)*hRatio,dispY-1*vRatio, dispY+rect.getHeight()*vRatio*4);
|
||||||
//blank out box, should draw this first and then draw data on top of it
|
//blank out box, should draw this first and then draw data on top of it
|
||||||
target.drawShadedRect(boxExt, NsharpConstants.color_black, 1f, null);
|
target.drawShadedRect(boxExt, NsharpConstants.color_black, 1f, null);
|
||||||
|
@ -1691,8 +1691,6 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource{
|
||||||
if(curseToggledFontLevel < CURSER_STRING_OFF)
|
if(curseToggledFontLevel < CURSER_STRING_OFF)
|
||||||
drawNsharpSkewtCursorData(target);
|
drawNsharpSkewtCursorData(target);
|
||||||
}
|
}
|
||||||
//}
|
|
||||||
|
|
||||||
}// end of currentGraphMode= NsharpConstants.GRAPH_SKEWT
|
}// end of currentGraphMode= NsharpConstants.GRAPH_SKEWT
|
||||||
else if(currentGraphMode == NsharpConstants.GRAPH_ICING){
|
else if(currentGraphMode == NsharpConstants.GRAPH_ICING){
|
||||||
paintIcing( currentZoomLevel, target);
|
paintIcing( currentZoomLevel, target);
|
||||||
|
|
|
@ -281,7 +281,7 @@ public class NsharpWitoPaneResource extends NsharpAbstractPaneResource{
|
||||||
shNcolor = new NsharpShapeAndLineProperty();
|
shNcolor = new NsharpShapeAndLineProperty();
|
||||||
shNcolor.setShape(target.createWireframeShape(false,descriptor) );
|
shNcolor.setShape(target.createWireframeShape(false,descriptor) );
|
||||||
IWireframeShape shapeG= shNcolor.getShape();
|
IWireframeShape shapeG= shNcolor.getShape();
|
||||||
shapeG.allocate(soundingLys.size()*2);
|
shapeG.allocate(soundingLys.size()*2);
|
||||||
shNcolor.getLp().setLineColor(NsharpConstants.color_green);
|
shNcolor.getLp().setLineColor(NsharpConstants.color_green);
|
||||||
windBoxWindRscShapeList.add(shNcolor);
|
windBoxWindRscShapeList.add(shNcolor);
|
||||||
shNcolor = new NsharpShapeAndLineProperty();
|
shNcolor = new NsharpShapeAndLineProperty();
|
||||||
|
@ -352,6 +352,7 @@ public class NsharpWitoPaneResource extends NsharpAbstractPaneResource{
|
||||||
shapeC.compile();
|
shapeC.compile();
|
||||||
shapePline.compile();
|
shapePline.compile();
|
||||||
}
|
}
|
||||||
|
private static int k=0;
|
||||||
/*
|
/*
|
||||||
* Chin:: NOTE:::
|
* Chin:: NOTE:::
|
||||||
* This plotting function is based on the algorithm of plot_advectionprofile() at xwvid5.c of Bignsharp source code
|
* This plotting function is based on the algorithm of plot_advectionprofile() at xwvid5.c of Bignsharp source code
|
||||||
|
@ -443,14 +444,23 @@ public class NsharpWitoPaneResource extends NsharpAbstractPaneResource{
|
||||||
* Should be used only when a new resource is becoming Current active resource to be displayed.
|
* Should be used only when a new resource is becoming Current active resource to be displayed.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public void createAllWireFrameShapes(){
|
public synchronized void createAllWireFrameShapes(){
|
||||||
if(target== null || rscHandler== null || inSidePane )
|
if(target== null || rscHandler== null || inSidePane )
|
||||||
return;
|
return;
|
||||||
//System.out.println("whitoPane="+this.toString()+" createAllWireFrameShapes called");
|
//System.out.println("whitoPane="+this.toString()+" createAllWireFrameShapes called");
|
||||||
rscHandler.repopulateSndgData();
|
rscHandler.repopulateSndgData();
|
||||||
|
|
||||||
disposeAllWireFrameShapes();
|
disposeAllWireFrameShapes();
|
||||||
createRscWireFrameShapes();;
|
if(soundingLys != null){
|
||||||
|
NsharpGenericPaneBackground skewtBgd = rscHandler.getSkewtPaneRsc().getActiveBackground();
|
||||||
|
if(skewtBgd!=null){
|
||||||
|
vpc = skewtBgd.getViewablePressureContainer(soundingLys);
|
||||||
|
vplc = skewtBgd.getViewablePressureLinesContainer();
|
||||||
|
}
|
||||||
|
createRscOmegaShape();
|
||||||
|
createRscWindBoxWindShape();
|
||||||
|
createRscVerticalWindShape();
|
||||||
|
}
|
||||||
//create static shape
|
//create static shape
|
||||||
createBkgOmegaShape();
|
createBkgOmegaShape();
|
||||||
createBkgWindBoxShape();
|
createBkgWindBoxShape();
|
||||||
|
@ -475,12 +485,15 @@ public class NsharpWitoPaneResource extends NsharpAbstractPaneResource{
|
||||||
public void disposeAllWireFrameShapes(){
|
public void disposeAllWireFrameShapes(){
|
||||||
disposeRscWireFrameShapes();
|
disposeRscWireFrameShapes();
|
||||||
//also dispose static background shpae
|
//also dispose static background shpae
|
||||||
if(omegaBkgShape!=null)
|
if(omegaBkgShape!=null){
|
||||||
omegaBkgShape.dispose();
|
omegaBkgShape.dispose();
|
||||||
|
omegaBkgShape=null;
|
||||||
|
}
|
||||||
|
|
||||||
if(windBoxBkgShape!=null)
|
if(windBoxBkgShape!=null){
|
||||||
windBoxBkgShape.dispose();
|
windBoxBkgShape.dispose();
|
||||||
|
windBoxBkgShape=null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
public void disposeRscWireFrameShapes(){
|
public void disposeRscWireFrameShapes(){
|
||||||
if(omegaRscShape!=null){
|
if(omegaRscShape!=null){
|
||||||
|
|
|
@ -113,7 +113,7 @@ public class NsharpPaneConfigDialog extends Dialog {
|
||||||
paneCfgCombo.add(NsharpConstants.PANE_CONFIGURATION_NAME[i]);
|
paneCfgCombo.add(NsharpConstants.PANE_CONFIGURATION_NAME[i]);
|
||||||
if(paneConfigurationName.equals(NsharpConstants.PANE_CONFIGURATION_NAME[i])){
|
if(paneConfigurationName.equals(NsharpConstants.PANE_CONFIGURATION_NAME[i])){
|
||||||
selectIndex = i;
|
selectIndex = i;
|
||||||
break;
|
//break;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -209,7 +209,7 @@ public class NsharpWindBarbConfigDialog extends Dialog {
|
||||||
mb = new MessageBox(shell, SWT.ICON_WARNING
|
mb = new MessageBox(shell, SWT.ICON_WARNING
|
||||||
| SWT.OK);
|
| SWT.OK);
|
||||||
|
|
||||||
mb.setMessage( "Input Error! Should be greater than 0");
|
mb.setMessage( "Input Error! ");
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public Control createDialogArea(Composite parent) {
|
public Control createDialogArea(Composite parent) {
|
||||||
|
@ -248,9 +248,15 @@ public class NsharpWindBarbConfigDialog extends Dialog {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
textStr = windBarbSizeText.getText();
|
textStr = windBarbSizeText.getText();
|
||||||
if((textStr != null) && !(textStr.isEmpty())){
|
if((textStr != null) && !(textStr.isEmpty()) ){
|
||||||
curSize = Float.parseFloat(textStr);
|
try{
|
||||||
if(curSize <= 0){
|
curSize = Float.parseFloat(textStr);
|
||||||
|
}
|
||||||
|
catch (NumberFormatException e){
|
||||||
|
mb.open();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if(curSize <= 0 || curSize > 15){
|
||||||
curSize=1;
|
curSize=1;
|
||||||
windBarbSizeText.setText(Float.toString(curSize));
|
windBarbSizeText.setText(Float.toString(curSize));
|
||||||
mb.open();
|
mb.open();
|
||||||
|
@ -259,8 +265,14 @@ public class NsharpWindBarbConfigDialog extends Dialog {
|
||||||
}
|
}
|
||||||
textStr = windBarbWidthText.getText();
|
textStr = windBarbWidthText.getText();
|
||||||
if((textStr != null) && !(textStr.isEmpty())){
|
if((textStr != null) && !(textStr.isEmpty())){
|
||||||
curLineWidth = Float.parseFloat(textStr);
|
try{
|
||||||
if(curLineWidth <=0){
|
curLineWidth = Float.parseFloat(textStr);
|
||||||
|
}
|
||||||
|
catch (NumberFormatException e){
|
||||||
|
mb.open();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if(curLineWidth <=0 || curLineWidth > 7){
|
||||||
curLineWidth=1;
|
curLineWidth=1;
|
||||||
windBarbWidthText.setText(Float.toString(curLineWidth));
|
windBarbWidthText.setText(Float.toString(curLineWidth));
|
||||||
mb.open();
|
mb.open();
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
%define _ldm_version 6.11.2
|
%define _ldm_version 6.11.5
|
||||||
%define _ldm_src_tar awips2-ldm.%{_ldm_version}.tar.gz
|
%define _ldm_src_tar ldm-%{_ldm_version}.tar.gz
|
||||||
|
# ldm-%{_ldm_version}.tar.gz is tarred up ldm-%{_ldm_version}/src dir after
|
||||||
|
# ISG makes retrans changes
|
||||||
#
|
#
|
||||||
# AWIPS II LDM Spec File
|
# AWIPS II LDM Spec File
|
||||||
#
|
#
|
||||||
|
@ -18,10 +20,8 @@ Vendor: Raytheon
|
||||||
Packager: Bryan Kowal
|
Packager: Bryan Kowal
|
||||||
|
|
||||||
AutoReq: no
|
AutoReq: no
|
||||||
Requires: qpid-cpp-client = 0.7.946106-28.el5.centos.1
|
Requires: awips2-notification
|
||||||
Requires: qpid-cpp-client-devel = 0.7.946106-28.el5.centos.1
|
|
||||||
Requires: zlib-devel
|
Requires: zlib-devel
|
||||||
Requires: /usr/lib/libz.a
|
|
||||||
provides: awips2-ldm
|
provides: awips2-ldm
|
||||||
provides: awips2-base-component
|
provides: awips2-base-component
|
||||||
|
|
||||||
|
@ -55,6 +55,21 @@ if [ $? -ne 0 ]; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
/bin/mkdir -p %{_build_root}/etc/ld.so.conf.d
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
/bin/mkdir -p %{_build_root}/etc/logrotate.d
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
/bin/mkdir -p %{_build_root}/etc/init.d
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
%build
|
%build
|
||||||
|
|
||||||
%install
|
%install
|
||||||
|
@ -118,6 +133,21 @@ if [ $? -ne 0 ]; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
/bin/cp ld.so.conf.d/* %{_build_root}/etc/ld.so.conf.d
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
/bin/cp logrotate.d/* %{_build_root}/etc/logrotate.d
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
/bin/cp init.d/* %{_build_root}/etc/init.d
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
%pre
|
%pre
|
||||||
if [ -d /tmp/ldm ]; then
|
if [ -d /tmp/ldm ]; then
|
||||||
rm -rf /tmp/ldm
|
rm -rf /tmp/ldm
|
||||||
|
@ -126,7 +156,7 @@ mkdir -p /tmp/ldm
|
||||||
for dir in etc .ssh;
|
for dir in etc .ssh;
|
||||||
do
|
do
|
||||||
if [ -d /usr/local/ldm/${dir} ]; then
|
if [ -d /usr/local/ldm/${dir} ]; then
|
||||||
scp -qrp /usr/local/${dir} /tmp/ldm
|
scp -qrp /usr/local/ldm/${dir} /tmp/ldm
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
@ -139,12 +169,12 @@ _myHost=`echo ${_myHost} | cut -f1 -d'-'`
|
||||||
pushd . > /dev/null 2>&1
|
pushd . > /dev/null 2>&1
|
||||||
cd ${_ldm_dir}/SOURCES
|
cd ${_ldm_dir}/SOURCES
|
||||||
# unpack the ldm source
|
# unpack the ldm source
|
||||||
/bin/tar -xf awips2-ldm.%{_ldm_version}.tar.gz \
|
/bin/tar -xf %{_ldm_src_tar} \
|
||||||
-C ${_ldm_dir}
|
-C ${_ldm_dir}
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
rm -f awips2-ldm.%{_ldm_version}.tar.gz
|
rm -f %{_ldm_src_tar}
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
@ -400,4 +430,7 @@ rm -rf ${RPM_BUILD_ROOT}
|
||||||
%dir /usr/local/ldm/SOURCES
|
%dir /usr/local/ldm/SOURCES
|
||||||
/usr/local/ldm/SOURCES/*
|
/usr/local/ldm/SOURCES/*
|
||||||
|
|
||||||
%attr(755,root,root) /etc/profile.d/awipsLDM.csh
|
%attr(755,root,root) /etc/profile.d/awipsLDM.csh
|
||||||
|
%attr(755,root,root) /etc/ld.so.conf.d/awips2-ldm-i386.conf
|
||||||
|
%attr(755,root,root) /etc/ld.so.conf.d/ldm.log
|
||||||
|
%attr(755,root,root) /etc/init.d/ldmcp
|
||||||
|
|
59
rpms/awips2.core/Installer.ldm/patch/bin/start_ldm
Normal file
59
rpms/awips2.core/Installer.ldm/patch/bin/start_ldm
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Check for necessary named pipes (FIFOs)
|
||||||
|
|
||||||
|
myhost=`hostname | awk -F'-' '{ print substr($1,1,length($1)-1)}'`
|
||||||
|
|
||||||
|
# Check for the host type nad perform operations accordingly
|
||||||
|
|
||||||
|
if [ "$myhost" = "cpsbn" ]; then
|
||||||
|
|
||||||
|
echo "Checking for availability of named pipes"
|
||||||
|
if [ -p /dev/p_LOG ];then
|
||||||
|
echo "Pipe /dev/p_LOG exists"
|
||||||
|
else
|
||||||
|
mknod /dev/p_LOG p
|
||||||
|
fi
|
||||||
|
chmod 664 /dev/p_LOG && chgrp fxalpha /dev/p_LOG
|
||||||
|
|
||||||
|
if [ -p /dev/p_LOST ];then
|
||||||
|
echo "Pipe /dev/p_LOST exists"
|
||||||
|
else
|
||||||
|
mknod /dev/p_LOST p
|
||||||
|
fi
|
||||||
|
chmod 664 /dev/p_LOST && chgrp fxalpha /dev/p_LOST
|
||||||
|
|
||||||
|
if [ -f /etc/rc.config.d/AWIPS ];then
|
||||||
|
. /etc/rc.config.d/AWIPS
|
||||||
|
else
|
||||||
|
echo "AWIPS file not found.Install AWIPS and proceed."
|
||||||
|
echo "Exiting."
|
||||||
|
exit $?
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Start AWIPS-I retransmission process
|
||||||
|
# Move to a2cp1apps to prevent duplicate retransmission request from both CPs
|
||||||
|
# $PROJECT/bin/start_sbn_retransmit
|
||||||
|
|
||||||
|
# Setup shared memory for LDM to store retransmission params
|
||||||
|
|
||||||
|
su - ldm -c "acq_ldm_getshm -m0"
|
||||||
|
|
||||||
|
else
|
||||||
|
echo "It seems like host(`hostname`) is NOT a downlink CP."
|
||||||
|
echo "Do you still want to start LDM (y/n) [default=n]?"
|
||||||
|
read ch
|
||||||
|
if [ $ch != 'y' -o $ch != 'Y' ];then
|
||||||
|
echo "Exiting."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# Start LDM
|
||||||
|
|
||||||
|
su - ldm -c "ldmadmin start"
|
||||||
|
|
||||||
|
|
||||||
|
echo "Done."
|
||||||
|
|
21
rpms/awips2.core/Installer.ldm/patch/bin/stop_ldm
Normal file
21
rpms/awips2.core/Installer.ldm/patch/bin/stop_ldm
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
|
||||||
|
if [ -f /etc/rc.config.d/AWIPS ];then
|
||||||
|
. /etc/rc.config.d/AWIPS
|
||||||
|
fi
|
||||||
|
|
||||||
|
#echo "Halting retransmission process"
|
||||||
|
#pid=`ps -ef |grep start_sbn_retransmit|grep -v grep | awk '{print $2}'`
|
||||||
|
#kill -s SIGKILL $pid
|
||||||
|
|
||||||
|
echo "Stopping ldm service"
|
||||||
|
|
||||||
|
su - ldm -c "ldmadmin stop"
|
||||||
|
|
||||||
|
echo "Releasing shared memory resources"
|
||||||
|
|
||||||
|
su - ldm -c "acq_ldm_freeshm -m0"
|
||||||
|
|
||||||
|
echo "Done."
|
||||||
|
|
|
@ -53,20 +53,11 @@
|
||||||
# are started by the "exec" command and are in the same process group.
|
# are started by the "exec" command and are in the same process group.
|
||||||
#
|
#
|
||||||
#EXEC "pqact"
|
#EXEC "pqact"
|
||||||
# dvbs shared memory ingest processes
|
EXEC "noaaportIngester -m 224.0.1.1 -n -u 3 -t mhs -r 1 -s NMC"
|
||||||
|
EXEC "noaaportIngester -m 224.0.1.2 -n -u 4 -t mhs -r 1 -s GOES"
|
||||||
EXEC "dvbs_multicast -b 40000 -m 224.0.1.1"
|
EXEC "noaaportIngester -m 224.0.1.3 -n -u 5 -t mhs -r 1 -s NMC2"
|
||||||
EXEC "dvbs_multicast -b 40000 -m 224.0.1.2"
|
EXEC "noaaportIngester -m 224.0.1.4 -n -u 6 -t mhs -r 1 -s NOAAPORT_OPT"
|
||||||
EXEC "dvbs_multicast -b 40000 -m 224.0.1.3"
|
EXEC "noaaportIngester -m 224.0.1.5 -n -u 7 -t mhs -r 1 -s NMC3"
|
||||||
EXEC "dvbs_multicast -b 40000 -m 224.0.1.4"
|
|
||||||
EXEC "dvbs_multicast -b 40000 -m 224.0.1.5"
|
|
||||||
#
|
|
||||||
# readnoaaport shared memory readers
|
|
||||||
EXEC "readnoaaport -m 224.0.1.1 -n -u 3 -t mhs -r 1"
|
|
||||||
EXEC "readnoaaport -m 224.0.1.2 -n -u 4 -t mhs -r 1"
|
|
||||||
EXEC "readnoaaport -m 224.0.1.3 -n -u 5 -t mhs -r 1"
|
|
||||||
EXEC "readnoaaport -m 224.0.1.4 -n -u 6 -t mhs -r 1"
|
|
||||||
EXEC "readnoaaport -m 224.0.1.5 -n -u 7 -t mhs -r 1"
|
|
||||||
#
|
#
|
||||||
# rtstats uses the LDM to send product latency statistics to the UPC.
|
# rtstats uses the LDM to send product latency statistics to the UPC.
|
||||||
# For more info on rtstats please see the man page.
|
# For more info on rtstats please see the man page.
|
||||||
|
|
|
@ -53,20 +53,11 @@
|
||||||
# are started by the "exec" command and are in the same process group.
|
# are started by the "exec" command and are in the same process group.
|
||||||
#
|
#
|
||||||
#EXEC "pqact"
|
#EXEC "pqact"
|
||||||
# dvbs shared memory ingest processes
|
EXEC "noaaportIngester -m 224.0.1.1 -n -u 3 -t mhs -r 1 -s NMC"
|
||||||
|
EXEC "noaaportIngester -m 224.0.1.2 -n -u 4 -t mhs -r 1 -s GOES"
|
||||||
EXEC "dvbs_multicast -b 40000 -m 224.0.1.1"
|
EXEC "noaaportIngester -m 224.0.1.3 -n -u 5 -t mhs -r 1 -s NMC2"
|
||||||
EXEC "dvbs_multicast -b 40000 -m 224.0.1.2"
|
EXEC "noaaportIngester -m 224.0.1.4 -n -u 6 -t mhs -r 1 -s NOAAPORT_OPT"
|
||||||
EXEC "dvbs_multicast -b 40000 -m 224.0.1.3"
|
EXEC "noaaportIngester -m 224.0.1.5 -n -u 7 -t mhs -r 1 -s NMC3"
|
||||||
EXEC "dvbs_multicast -b 40000 -m 224.0.1.4"
|
|
||||||
EXEC "dvbs_multicast -b 40000 -m 224.0.1.5"
|
|
||||||
#
|
|
||||||
# readnoaaport shared memory readers
|
|
||||||
EXEC "readnoaaport -m 224.0.1.1 -n -u 3 -t mhs -r 1"
|
|
||||||
EXEC "readnoaaport -m 224.0.1.2 -n -u 4 -t mhs -r 1"
|
|
||||||
EXEC "readnoaaport -m 224.0.1.3 -n -u 5 -t mhs -r 1"
|
|
||||||
EXEC "readnoaaport -m 224.0.1.4 -n -u 6 -t mhs -r 1"
|
|
||||||
EXEC "readnoaaport -m 224.0.1.5 -n -u 7 -t mhs -r 1"
|
|
||||||
#
|
#
|
||||||
# rtstats uses the LDM to send product latency statistics to the UPC.
|
# rtstats uses the LDM to send product latency statistics to the UPC.
|
||||||
# For more info on rtstats please see the man page.
|
# For more info on rtstats please see the man page.
|
||||||
|
|
|
@ -53,20 +53,11 @@
|
||||||
# are started by the "exec" command and are in the same process group.
|
# are started by the "exec" command and are in the same process group.
|
||||||
#
|
#
|
||||||
#EXEC "pqact"
|
#EXEC "pqact"
|
||||||
# dvbs shared memory ingest processes
|
EXEC "noaaportIngester -m 224.0.1.1 -n -u 3 -t mhs -r 1 -s NMC"
|
||||||
|
EXEC "noaaportIngester -m 224.0.1.2 -n -u 4 -t mhs -r 1 -s GOES"
|
||||||
EXEC "dvbs_multicast -b 40000 -m 224.0.1.1"
|
EXEC "noaaportIngester -m 224.0.1.3 -n -u 5 -t mhs -r 1 -s NMC2"
|
||||||
EXEC "dvbs_multicast -b 40000 -m 224.0.1.2"
|
EXEC "noaaportIngester -m 224.0.1.4 -n -u 6 -t mhs -r 1 -s NOAAPORT_OPT"
|
||||||
EXEC "dvbs_multicast -b 40000 -m 224.0.1.3"
|
EXEC "noaaportIngester -m 224.0.1.5 -n -u 7 -t mhs -r 1 -s NMC3"
|
||||||
EXEC "dvbs_multicast -b 40000 -m 224.0.1.4"
|
|
||||||
EXEC "dvbs_multicast -b 40000 -m 224.0.1.5"
|
|
||||||
#
|
|
||||||
# readnoaaport shared memory readers
|
|
||||||
EXEC "readnoaaport -m 224.0.1.1 -n -u 3 -t mhs -r 1"
|
|
||||||
EXEC "readnoaaport -m 224.0.1.2 -n -u 4 -t mhs -r 1"
|
|
||||||
EXEC "readnoaaport -m 224.0.1.3 -n -u 5 -t mhs -r 1"
|
|
||||||
EXEC "readnoaaport -m 224.0.1.4 -n -u 6 -t mhs -r 1"
|
|
||||||
EXEC "readnoaaport -m 224.0.1.5 -n -u 7 -t mhs -r 1"
|
|
||||||
#
|
#
|
||||||
# rtstats uses the LDM to send product latency statistics to the UPC.
|
# rtstats uses the LDM to send product latency statistics to the UPC.
|
||||||
# For more info on rtstats please see the man page.
|
# For more info on rtstats please see the man page.
|
||||||
|
|
|
@ -53,20 +53,11 @@
|
||||||
# are started by the "exec" command and are in the same process group.
|
# are started by the "exec" command and are in the same process group.
|
||||||
#
|
#
|
||||||
#EXEC "pqact"
|
#EXEC "pqact"
|
||||||
# dvbs shared memory ingest processes
|
EXEC "noaaportIngester -m 224.0.1.1 -n -u 3 -t mhs -r 1 -s NMC"
|
||||||
|
EXEC "noaaportIngester -m 224.0.1.2 -n -u 4 -t mhs -r 1 -s GOES"
|
||||||
EXEC "dvbs_multicast -b 40000 -m 224.0.1.1"
|
EXEC "noaaportIngester -m 224.0.1.3 -n -u 5 -t mhs -r 1 -s NMC2"
|
||||||
EXEC "dvbs_multicast -b 40000 -m 224.0.1.2"
|
EXEC "noaaportIngester -m 224.0.1.4 -n -u 6 -t mhs -r 1 -s NOAAPORT_OPT"
|
||||||
EXEC "dvbs_multicast -b 40000 -m 224.0.1.3"
|
EXEC "noaaportIngester -m 224.0.1.5 -n -u 7 -t mhs -r 1 -s NMC3"
|
||||||
EXEC "dvbs_multicast -b 40000 -m 224.0.1.4"
|
|
||||||
EXEC "dvbs_multicast -b 40000 -m 224.0.1.5"
|
|
||||||
#
|
|
||||||
# readnoaaport shared memory readers
|
|
||||||
EXEC "readnoaaport -m 224.0.1.1 -n -u 3 -t mhs -r 1"
|
|
||||||
EXEC "readnoaaport -m 224.0.1.2 -n -u 4 -t mhs -r 1"
|
|
||||||
EXEC "readnoaaport -m 224.0.1.3 -n -u 5 -t mhs -r 1"
|
|
||||||
EXEC "readnoaaport -m 224.0.1.4 -n -u 6 -t mhs -r 1"
|
|
||||||
EXEC "readnoaaport -m 224.0.1.5 -n -u 7 -t mhs -r 1"
|
|
||||||
#
|
#
|
||||||
# rtstats uses the LDM to send product latency statistics to the UPC.
|
# rtstats uses the LDM to send product latency statistics to the UPC.
|
||||||
# For more info on rtstats please see the man page.
|
# For more info on rtstats please see the man page.
|
||||||
|
|
143
rpms/awips2.core/Installer.ldm/patch/init.d/ldmcp
Normal file
143
rpms/awips2.core/Installer.ldm/patch/init.d/ldmcp
Normal file
|
@ -0,0 +1,143 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# ldmcp: This starts and stops the SBN LDMCP software at the sites
|
||||||
|
#
|
||||||
|
# chkconfig: 345 99 0
|
||||||
|
# description: ldmcp starts/stops SBN LDM software on the CP at the site
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
PATH=/sbin:/bin:/usr/bin:/usr/sbin
|
||||||
|
|
||||||
|
# Source function library.
|
||||||
|
. /etc/init.d/functions
|
||||||
|
|
||||||
|
RETVAL=0
|
||||||
|
LDM_PROJECT="/usr/local/ldm"
|
||||||
|
AWIPS_PROJECT="/awips"
|
||||||
|
LOGFILE=`basename $0`
|
||||||
|
|
||||||
|
if [ -f /etc/rc.config.d/AWIPS ];then
|
||||||
|
. /etc/rc.config.d/AWIPS
|
||||||
|
else
|
||||||
|
echo "AWIPS file not found. Exiting.."
|
||||||
|
exit -1
|
||||||
|
fi
|
||||||
|
|
||||||
|
function handle_ramdisk() {
|
||||||
|
|
||||||
|
# check if ramdisk is mounted:
|
||||||
|
if ! mount | grep ram0 > /dev/null
|
||||||
|
then
|
||||||
|
echo -ne "Creating RAMDISK:\t"
|
||||||
|
if mkfs -t ext2 -m 0 -q /dev/ramdisk 1500000 && success || failure
|
||||||
|
then
|
||||||
|
echo
|
||||||
|
# mount to /data/ldm/data
|
||||||
|
echo -ne "Mounting to /data/ldm/data:\t"
|
||||||
|
if ! mount /dev/ramdisk /data/ldm/data && failure
|
||||||
|
then
|
||||||
|
echo
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
success
|
||||||
|
fi
|
||||||
|
echo
|
||||||
|
sleep 2
|
||||||
|
else
|
||||||
|
echo
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
echo -ne "Fixing Permissions:\t"
|
||||||
|
if ! chown -R ldm:fxalpha /data/ldm/data && failure
|
||||||
|
then
|
||||||
|
echo
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
success
|
||||||
|
echo
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
function clean_ldm() {
|
||||||
|
|
||||||
|
echo -ne "Cleaning LDM:\t"
|
||||||
|
su ldm -lc "ldmadmin clean" > /dev/null 2>&1 && success || failure
|
||||||
|
myRetVal=$?
|
||||||
|
if [[ ${myRetVal} -ne 0 ]]
|
||||||
|
then
|
||||||
|
return ${myRetVal}
|
||||||
|
fi
|
||||||
|
echo
|
||||||
|
if [[ -f /data/ldm/data/ldm.pq ]]
|
||||||
|
then
|
||||||
|
echo -ne "\nDeleting the ldm queue:\t"
|
||||||
|
su ldm -lc "ldmadmin delqueue" > /dev/null 2>&1 && success || failure
|
||||||
|
echo
|
||||||
|
fi
|
||||||
|
echo -ne "\nCreating the ldm queue:\t"
|
||||||
|
su ldm -lc "ldmadmin mkqueue" > /dev/null 2>&1 && success || failure
|
||||||
|
myRetVal=$?
|
||||||
|
echo
|
||||||
|
return ${myRetVal}
|
||||||
|
}
|
||||||
|
|
||||||
|
case $1 in
|
||||||
|
|
||||||
|
'start')
|
||||||
|
if ! handle_ramdisk; then exit 1 ; fi
|
||||||
|
if ! clean_ldm; then exit 1 ; fi
|
||||||
|
|
||||||
|
echo -n "Starting AWIPS SBN CP (LDM) processes:"
|
||||||
|
|
||||||
|
$LDM_PROJECT/bin/start_ldm > /data/ldm/logs/$LOGFILE 2>&1
|
||||||
|
if [ $? -eq 0 ]
|
||||||
|
then
|
||||||
|
RETVAL=0
|
||||||
|
touch /var/lock/subsys/ldmcp
|
||||||
|
success && echo
|
||||||
|
$AWIPS_PROJECT/bin/ErrorLogADS -p ldmcp -t c -s ma -g 60 -n 2 -m "SBN CP (LDM) Start OK"
|
||||||
|
echo "$AWIPS_PROJECT/bin/ErrorLogADS -p ldmcp -t c -s ma -g 60 -n 2 -m 'SBN CP (LDM) Start OK' "
|
||||||
|
else
|
||||||
|
RETVAL=1
|
||||||
|
failure && echo
|
||||||
|
$AWIPS_PROJECT/bin/ErrorLogADS -p ldmcp -t c -s ma -g 60 -n 2 -m "SBN CP (LDM) Start FAIL"
|
||||||
|
echo "$AWIPS_PROJECT/bin/ErrorLogADS -p ldmcp -t c -s ma -g 60 -n 2 -m 'SBN CP (LDM) Start FAIL'"
|
||||||
|
fi
|
||||||
|
mc_sbn_S300_dvb
|
||||||
|
;;
|
||||||
|
|
||||||
|
'stop')
|
||||||
|
echo -n "Stopping AWIPS SBN CP (LDM) processes:"
|
||||||
|
|
||||||
|
$LDM_PROJECT/bin/stop_ldm >> /data/ldm/logs/$LOGFILE 2>&1
|
||||||
|
if [ $? -eq 0 ]
|
||||||
|
then
|
||||||
|
RETVAL=0
|
||||||
|
rm -f /var/lock/subsys/ldmcp
|
||||||
|
success && echo
|
||||||
|
$AWIPS_PROJECT/bin/ErrorLogADS -p ldmcp -t c -s ma -g 60 -n 2 -m "SBN CP (LDM) Stop OK"
|
||||||
|
echo "$AWIPS_PROJECT/bin/ErrorLogADS -p ldmcp -t c -s ma -g 60 -n 2 -m 'SBN CP (LDM) Stop OK'"
|
||||||
|
else
|
||||||
|
RETVAL=1
|
||||||
|
failure && echo
|
||||||
|
$AWIPS_PROJECT/bin/ErrorLogADS -p ldmcp -t c -s ma -g 60 -n 2 -m "SBN CP (LDM) Stop FAIL"
|
||||||
|
echo "$AWIPS_PROJECT/bin/ErrorLogADS -p ldmcp -t c -s ma -g 60 -n 2 -m 'SBN CP (LDM) Stop FAIL'"
|
||||||
|
fi
|
||||||
|
for pid in `ps -C mc_sbn_S300_dvb --no-headings -o pid`
|
||||||
|
do
|
||||||
|
echo "Sending SIGTERM to the mc_sbn_S300_dvb pid $pid"
|
||||||
|
kill -s SIGTERM $pid
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
echo "usage: $0 {start|stop}"
|
||||||
|
RETVAL=1
|
||||||
|
;;
|
||||||
|
|
||||||
|
esac
|
||||||
|
|
||||||
|
exit $RETVAL
|
|
@ -0,0 +1 @@
|
||||||
|
/usr/local/ldm/lib
|
12
rpms/awips2.core/Installer.ldm/patch/logrotate.d/ldm.log
Normal file
12
rpms/awips2.core/Installer.ldm/patch/logrotate.d/ldm.log
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
/data/ldm/logs/ldmd.log /data/ldm/logs/nwstg.log /data/ldm/logs/goes.log /data/ldm/logs/nwstg2.log /data/ldm/logs/oconus.log /data/ldm/logs/polarsat.log {
|
||||||
|
missingok
|
||||||
|
compress
|
||||||
|
notifempty
|
||||||
|
daily
|
||||||
|
rotate 5
|
||||||
|
create 0660 root fxalpha
|
||||||
|
postrotate
|
||||||
|
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
|
||||||
|
endscript
|
||||||
|
|
||||||
|
}
|
BIN
rpms/awips2.core/Installer.ldm/src/ldm-6.11.5.tar.gz
Normal file
BIN
rpms/awips2.core/Installer.ldm/src/ldm-6.11.5.tar.gz
Normal file
Binary file not shown.
Loading…
Add table
Reference in a new issue