Merge tag 'OB_14.4.1-20m' into omaha_15.1.1

14.4.1-20m

 Conflicts:
	cave/com.raytheon.uf.viz.monitor/src/com/raytheon/uf/viz/monitor/ui/dialogs/MonitoringAreaConfigDlg.java
	edexOsgi/build.edex/esb/conf/logback.xml (moved to build/deploy.edex.awips2/esb/conf/logback.xml; also removed edexOsgi/build.edex/esb/conf)
	rpms/awips2.core/Installer.ldm/patch/etc/pqact.conf.template


Former-commit-id: 165971a4f6 [formerly 0db97a3cefc6f709d336883202e51f1d5255ad75]
Former-commit-id: 25bd3ee930
This commit is contained in:
Steve Harris 2015-03-26 09:57:17 -05:00
commit 663bf8c2f9
281 changed files with 1825 additions and 73279 deletions

View file

@ -5,6 +5,31 @@
<include file="${edex.home}/conf/logback-edex-loggers.xml" />
<include file="${edex.home}/conf/logback-edex-hibernate-logger.xml" />
<!-- activeTableChange log -->
<!-- When migrating this change to 15.1.1 it will need to be split up properly.
See Roger Ferrel for instruction
-->
<appender name="activeTableChangeLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${edex.home}/logs/edex-${edex.run.mode}-activeTableChange-%d{yyyyMMdd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%-5p %d [%t] %c{0}: %m%n</pattern>
</encoder>
</appender>
<appender name="activeTableChangeLogAsync" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="activeTableChangeLog" />
</appender>
<logger name="ActiveTableChange" additivity="false">
<level value="DEBUG"/>
<appender-ref ref="activeTableChangeLogAsync" />
</logger>
<!-- default logging -->
<root>
<level value="INFO"/>

View file

@ -14,6 +14,7 @@ truststore=truststore.jks
keystorePw=
keyPw=
cn=
encryptionKey=encrypt
truststorePw=password
@ -96,21 +97,36 @@ do
fi
done
cn=$(hostname)
while [ -z $cn ];
do
echo -n "Enter canonical name/IP or blank for default [$(hostname)]: "
read cn
if [ -z $cn ];
then
echo "Canonical Name defaulting to [$(hostname)];"
cn=$(hostname)
fi
done
echo "Generating keystore..."
keytool -genkeypair -alias $keyAlias -keypass $keyPw -keystore $keystore -storepass $keystorePw -validity 360 -dname "CN=$cn, OU=AWIPS, O=Raytheon, L=Omaha, ST=NE, C=US" -keyalg RSA
# get rid of an existing key with same name
echo "Check to see if a key with this alias exists.....[$keyAlias]!"
keytool -delete -alias $keyAlias -keystore $securityDir/$keystore
# create and add key
keytool -genkeypair -alias $keyAlias -keypass $keyPw -keystore $keystore -storepass $keystorePw -validity 360 -dname "CN=$cn, OU=AWIPS, O=Raytheon, L=Silver Spring, ST=MD, C=US" -keyalg RSA
echo -n "Exporting public key..."
exportOutput=`keytool -exportcert -alias $keyAlias -keystore $keystore -file $keyAlias$publicKeyFile -storepass $keystorePw 2>&1`
echo "Done!"
obfuscatedKeystorePassword=`$JAVA_BIN -cp /awips2/edex/lib/dependencies/org.apache.commons.codec/commons-codec-1.4.jar:/awips2/edex/lib/plugins/com.raytheon.uf.common.security.jar com.raytheon.uf.common.security.encryption.AESEncryptor encrypt $encryptionKey $keystorePw 2>&1`
echo "Generating trust store..."
echo "Check to see if a trusted CA with this alias exists.....[$keyAlias]!"
keytool -delete -alias $keyAlias -keystore $securityDir/$truststore
keytool -genkey -alias tmp -keypass tempPass -dname CN=foo -keystore $truststore -storepass $truststorePw
keytool -delete -alias tmp -keystore $truststore -storepass $truststorePw
keytool -import -trustcacerts -file $keyAlias$publicKeyFile -alias $keyAlias -keystore $truststore -storepass $truststorePw
jettyObscuredPassword=`$JAVA_BIN -cp /awips2/edex/lib/dependencies/org.eclipse.jetty/jetty-http-7.6.14.v20131031.jar:/awips2/edex/lib/dependencies/org.eclipse.jetty/jetty-util-7.6.14.v20131031.jar org.eclipse.jetty.util.security.Password $keystorePw 2>&1 | grep OBF`
jettyObscuredPassword=`$JAVA_BIN -cp /awips2/edex/lib/dependencies/org.eclipse.jetty/jetty-http-8.1.15.v20140411.jar:/awips2/edex/lib/dependencies/org.eclipse.jetty/jetty-util-8.1.15.v20140411.jar org.eclipse.jetty.util.security.Password $keystorePw 2>&1 | grep OBF`
obfuscatedTruststorePassword=`$JAVA_BIN -cp /awips2/edex/lib/dependencies/org.apache.commons.codec/commons-codec-1.4.jar:/awips2/edex/lib/plugins/com.raytheon.uf.common.security.jar com.raytheon.uf.common.security.encryption.AESEncryptor encrypt $encryptionKey $truststorePw 2>&1`
@ -167,6 +183,11 @@ do
echo "Alias cannot be empty!"
fi
done
# delete any existing cert in the truststore for this alias
echo "Check to see if a certificate with this alias exists.....[$userAlias]!"
keytool -delete -alias $userAlias -keystore $securityDir/$truststore
# add the cert as a Self Signed CA to truststore
keytool -import -trustcacerts -file $keyfile -alias $userAlias -keystore $securityDir/$truststore
}

View file

@ -72,6 +72,7 @@ import com.raytheon.viz.ui.views.CaveWorkbenchPageManager;
* to display messages.
* Jun 16, 2014 3288 bclement feed venue configuration changes
* Oct 08, 2014 3705 bclement moved venue joining code to CollaborationConnection
* Mar 10, 2015 4238 njensen null check in getSessionId()
*
* </pre>
*
@ -109,12 +110,15 @@ public class DisplayFeedAction extends Action {
CollaborationConnection connection = CollaborationConnection
.getConnection();
String sessionId = null;
for (ISession session : connection.getSessions()) {
if (session instanceof IVenueSession) {
FeedVenueConfig config = FeedVenueConfigManager.getConfig();
if (((IVenueSession) session).getVenueName().equalsIgnoreCase(
config.getName())) {
sessionId = session.getSessionId();
// connection can be null in rare cases
if (connection != null) {
for (ISession session : connection.getSessions()) {
if (session instanceof IVenueSession) {
FeedVenueConfig config = FeedVenueConfigManager.getConfig();
if (((IVenueSession) session).getVenueName()
.equalsIgnoreCase(config.getName())) {
sessionId = session.getSessionId();
}
}
}
}

View file

@ -90,6 +90,7 @@ import com.vividsolutions.jts.geom.Geometry;
* Apr 28, 2014 3086 skorolev Removed local getMonitorAreaConfig method.
* Sep 04, 2014 3220 skorolev Updated configUpdate method and added updateMonitoringArea.
* Sep 23, 2014 3356 njensen Remove unnecessary import
* Mar 09, 2014 3888 dhladky Stopped processing when dialogs are null or disposed.
*
*
* </pre>
@ -366,14 +367,20 @@ public class FogMonitor extends ObsMonitor implements IFogResourceListener {
*/
@Override
protected void process(ObReport result) throws Exception {
obData.addReport(result);
String zone = findZone(result.getPlatformId());
if (zone != null) {
AreaContainer ac = getTableData().getArea(zone);
if (ac != null) {
ac.addReport(result.getObservationTime(), result);
fireMonitorEvent(this);
if (zoneDialog != null && !zoneDialog.isDisposed()) {
obData.addReport(result);
String zone = findZone(result.getPlatformId());
if (zone != null) {
AreaContainer ac = getTableData().getArea(zone);
if (ac != null) {
ac.addReport(result.getObservationTime(), result);
fireMonitorEvent(this);
}
}
} else {
monitor.nullifyMonitor();
}
}

View file

@ -23,7 +23,6 @@ import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArrayList;
import com.raytheon.uf.common.monitor.data.CommonConfig;
@ -47,6 +46,7 @@ import com.raytheon.uf.viz.monitor.thresholds.AbstractThresholdMgr;
* Oct.29, 2012 1297 skorolev Changed HashMap to Map
* Oct.31 2012 1297 skorolev Cleaned code.
* Sep 04 2014 3220 skorolev Added updateZones method.
* Mar 17 2015 3888 dhladky check for nulls
*
* </pre>
*
@ -227,8 +227,11 @@ public class ObHourReports {
List<String> stations = new CopyOnWriteArrayList<String>(
hourReports.get(zone).getZoneHourReports().keySet());
for (String stn : stations) {
if (!zoneStationMap.get(zone).contains(stn)) {
hourReports.get(zone).getZoneHourReports().remove(stn);
if (zoneStationMap.get(zone) != null) {
if (!zoneStationMap.get(zone).contains(stn)) {
hourReports.get(zone).getZoneHourReports()
.remove(stn);
}
}
}
if (!zoneStationMap.keySet().contains(zone)) {
@ -241,14 +244,16 @@ public class ObHourReports {
List<String> stations = new CopyOnWriteArrayList<String>(
zoneStationMap.get(zone));
for (String stn : stations) {
if (!hourReports.get(zone).getZoneHourReports()
.containsKey(stn)) {
hourReports
.get(zone)
.getZoneHourReports()
.put(stn,
new ObStnHourReports(nominalTime, zone,
stn, appName, thresholdMgr));
if (hourReports.get(zone) != null) {
if (!hourReports.get(zone).getZoneHourReports()
.containsKey(stn)) {
hourReports
.get(zone)
.getZoneHourReports()
.put(stn,
new ObStnHourReports(nominalTime, zone,
stn, appName, thresholdMgr));
}
}
}
if (!hourReports.containsKey(zone)) {

View file

@ -78,6 +78,7 @@ import com.raytheon.viz.ui.dialogs.ICloseCallback;
* Sep 24, 2014 2757 skorolev Fixed problem with adding and removing zones.
* Oct 27, 2014 3667 skorolev Corrected functionality of dialog. Cleaned code.
* Nov 12, 2014 3650 skorolev Added confirmation box for unsaved changes in the dialog.
* Mar 08, 2015 3888 dhladky Restored threshold pop-up when adding new stations/zones.
*
* </pre>
*
@ -1481,12 +1482,7 @@ public abstract class MonitoringAreaConfigDlg extends CaveSWTDialog implements
* Reset data status.
*/
protected void resetStatus() {
if (!configMgr.getAddedZones().isEmpty()) {
configMgr.getAddedZones().clear();
}
if (!configMgr.getAddedStations().isEmpty()) {
configMgr.getAddedStations().clear();
}
this.timeWindowChanged = false;
this.maZonesRemoved = false;
this.maStationsRemoved = false;

View file

@ -55,6 +55,7 @@ Definition = {
## General Set-Up
"fullStationID": "KXXX",
"type": "table",
"displayName": "${itemName}", # for Product Generation Menu
# if displayName == None or "None", this product will NOT

View file

@ -53,6 +53,7 @@ import com.raytheon.viz.ui.dialogs.CaveJFACEDialog;
* ------------ ---------- ----------- --------------------------
* Sept 25, 2008 1562 askripsky Initial creation.
* Nov 12, 2012 1298 rferrel Changes for non-blocking dialog.
* Mar 17, 2015 17217 ryu Set smart product as the default type.
* </pre>
*
* @author askripsky
@ -267,13 +268,13 @@ public class NewTextProductDialog extends CaveJFACEDialog {
buttonComp.setLayout(new GridLayout());
buttonComp.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true));
tableTypeButton = new Button(buttonComp, SWT.RADIO);
tableTypeButton.setText("Table");
smartTypeButton = new Button(buttonComp, SWT.RADIO);
smartTypeButton.setText("Smart");
tableTypeButton = new Button(buttonComp, SWT.RADIO);
tableTypeButton.setText("Table");
// Default to table type
tableTypeButton.setSelection(true);
// Default to smart type
smartTypeButton.setSelection(true);
}
private void initNameSelection() {

View file

@ -42,48 +42,6 @@
</metadataMap>
</resourceData>
</resource>
<resource>
<loadProperties loadWithoutData="true">
</loadProperties>
<properties isSystemResource="false"
isBlinking="false" isMapLayer="false" isHoverOn="false"
isVisible="true" />
<resourceData xsi:type="lightningResourceData"
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
handlingCloudFlashes="true">
<binOffset posOffset="0" negOffset="900" virtualOffset="0"/>
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="binlightning" constraintType="EQUALS" />
</mapping>
<mapping key="source">
<constraint constraintValue="${source}" constraintType="EQUALS" />
</mapping>
</metadataMap>
</resourceData>
</resource>
<resource>
<loadProperties loadWithoutData="true">
</loadProperties>
<properties isSystemResource="false"
isBlinking="false" isMapLayer="false" isHoverOn="false"
isVisible="false" />
<resourceData xsi:type="lightningResourceData"
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
handlingPulses="true">
<binOffset posOffset="0" negOffset="900" virtualOffset="0"/>
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="binlightning" constraintType="EQUALS" />
</mapping>
<mapping key="source">
<constraint constraintValue="${source}" constraintType="EQUALS" />
</mapping>
</metadataMap>
</resourceData>
</resource>
</descriptor>
</displays>
</displayList>

View file

@ -64,48 +64,6 @@
</metadataMap>
</resourceData>
</resource>
<resource>
<loadProperties loadWithoutData="true"/>
<properties isSystemResource="false" isBlinking="false"
isMapLayer="false" isHoverOn="false"
isVisible="true" />
<resourceData xsi:type="lightningResourceData"
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
handlingCloudFlashes="true">
<binOffset posOffset="0" negOffset="900" virtualOffset="0" />
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="binlightning"
constraintType="EQUALS" />
</mapping>
<mapping key="source">
<constraint constraintValue="${source}" constraintType="EQUALS" />
</mapping>
</metadataMap>
</resourceData>
</resource>
<resource>
<loadProperties loadWithoutData="true">
</loadProperties>
<properties isSystemResource="false"
isBlinking="false" isMapLayer="false" isHoverOn="false"
isVisible="false" />
<resourceData xsi:type="lightningResourceData"
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
handlingPulses="true">
<binOffset posOffset="0" negOffset="900" virtualOffset="0"/>
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="binlightning" constraintType="EQUALS" />
</mapping>
<mapping key="source">
<constraint constraintValue="${source}" constraintType="EQUALS" />
</mapping>
</metadataMap>
</resourceData>
</resource>
</descriptor>
</displays>
</displayList>

View file

@ -42,48 +42,6 @@
</metadataMap>
</resourceData>
</resource>
<resource>
<loadProperties loadWithoutData="true">
</loadProperties>
<properties isSystemResource="false"
isBlinking="false" isMapLayer="false" isHoverOn="false"
isVisible="true" />
<resourceData xsi:type="lightningResourceData"
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
handlingCloudFlashes="true">
<binOffset posOffset="0" negOffset="300" virtualOffset="0"/>
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="binlightning" constraintType="EQUALS" />
</mapping>
<mapping key="source">
<constraint constraintValue="${source}" constraintType="EQUALS" />
</mapping>
</metadataMap>
</resourceData>
</resource>
<resource>
<loadProperties loadWithoutData="true">
</loadProperties>
<properties isSystemResource="false"
isBlinking="false" isMapLayer="false" isHoverOn="false"
isVisible="false" />
<resourceData xsi:type="lightningResourceData"
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
handlingPulses="true">
<binOffset posOffset="0" negOffset="300" virtualOffset="0"/>
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="binlightning" constraintType="EQUALS" />
</mapping>
<mapping key="source">
<constraint constraintValue="${source}" constraintType="EQUALS" />
</mapping>
</metadataMap>
</resourceData>
</resource>
</descriptor>
</displays>
</displayList>

View file

@ -41,48 +41,6 @@
</mapping>
</metadataMap>
</resourceData>
</resource>
<resource>
<loadProperties loadWithoutData="true">
</loadProperties>
<properties isSystemResource="false"
isBlinking="false" isMapLayer="false" isHoverOn="false"
isVisible="true" />
<resourceData xsi:type="lightningResourceData"
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
handlingCloudFlashes="true">
<binOffset posOffset="0" negOffset="3600" virtualOffset="0"/>
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="binlightning" constraintType="EQUALS" />
</mapping>
<mapping key="source">
<constraint constraintValue="${source}" constraintType="EQUALS" />
</mapping>
</metadataMap>
</resourceData>
</resource>
<resource>
<loadProperties loadWithoutData="true">
</loadProperties>
<properties isSystemResource="false"
isBlinking="false" isMapLayer="false" isHoverOn="false"
isVisible="false" />
<resourceData xsi:type="lightningResourceData"
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
handlingPulses="true">
<binOffset posOffset="0" negOffset="3600" virtualOffset="0"/>
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="binlightning" constraintType="EQUALS" />
</mapping>
<mapping key="source">
<constraint constraintValue="${source}" constraintType="EQUALS" />
</mapping>
</metadataMap>
</resourceData>
</resource>
</descriptor>
</displays>

View file

@ -0,0 +1,90 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<bundle>
<displayList>
<displays xsi:type="d2DMapRenderableDisplay" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<descriptor xsi:type="mapDescriptor">
<resource>
<loadProperties loadWithoutData="true">
</loadProperties>
<properties isSystemResource="false"
isBlinking="false" isMapLayer="false" isHoverOn="false"
isVisible="true" />
<resourceData xsi:type="lightningResourceData"
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
handlingPositiveStrikes="true" handlingNegativeStrikes="true">
<binOffset posOffset="0" negOffset="900" virtualOffset="0"/>
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="binlightning" constraintType="EQUALS" />
</mapping>
<mapping key="source">
<constraint constraintValue="${source}" constraintType="EQUALS" />
</mapping>
</metadataMap>
</resourceData>
</resource>
<resource>
<loadProperties loadWithoutData="true">
</loadProperties>
<properties isSystemResource="false"
isBlinking="false" isMapLayer="false" isHoverOn="false"
isVisible="true" />
<resourceData xsi:type="lightningResourceData"
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
handlingCloudFlashes="true">
<binOffset posOffset="0" negOffset="900" virtualOffset="0"/>
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="binlightning" constraintType="EQUALS" />
</mapping>
<mapping key="source">
<constraint constraintValue="${source}" constraintType="EQUALS" />
</mapping>
</metadataMap>
</resourceData>
</resource>
<resource>
<loadProperties loadWithoutData="true">
</loadProperties>
<properties isSystemResource="false"
isBlinking="false" isMapLayer="false" isHoverOn="false"
isVisible="false" />
<resourceData xsi:type="lightningResourceData"
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
handlingPulses="true">
<binOffset posOffset="0" negOffset="900" virtualOffset="0"/>
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="binlightning" constraintType="EQUALS" />
</mapping>
<mapping key="source">
<constraint constraintValue="${source}" constraintType="EQUALS" />
</mapping>
</metadataMap>
</resourceData>
</resource>
</descriptor>
</displays>
</displayList>
</bundle>

View file

@ -0,0 +1,112 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<bundle>
<displayList>
<displays xsi:type="d2DMapRenderableDisplay"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<descriptor xsi:type="mapDescriptor">
<resource>
<loadProperties loadWithoutData="true">
</loadProperties>
<properties isSystemResource="false" isBlinking="false"
isMapLayer="false" isHoverOn="false"
isVisible="true" />
<resourceData xsi:type="lightningResourceData"
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
handlingPositiveStrikes="true" handlingNegativeStrikes="false">
<binOffset posOffset="0" negOffset="900" virtualOffset="0" />
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="binlightning"
constraintType="EQUALS" />
</mapping>
<mapping key="source">
<constraint constraintValue="${source}" constraintType="EQUALS" />
</mapping>
</metadataMap>
</resourceData>
</resource>
<resource>
<loadProperties loadWithoutData="true"/>
<properties isSystemResource="false" isBlinking="false"
isMapLayer="false" isHoverOn="false"
isVisible="true" />
<resourceData xsi:type="lightningResourceData"
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
handlingPositiveStrikes="false" handlingNegativeStrikes="true">
<binOffset posOffset="0" negOffset="900" virtualOffset="0" />
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="binlightning"
constraintType="EQUALS" />
</mapping>
<mapping key="source">
<constraint constraintValue="${source}" constraintType="EQUALS" />
</mapping>
</metadataMap>
</resourceData>
</resource>
<resource>
<loadProperties loadWithoutData="true"/>
<properties isSystemResource="false" isBlinking="false"
isMapLayer="false" isHoverOn="false"
isVisible="true" />
<resourceData xsi:type="lightningResourceData"
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
handlingCloudFlashes="true">
<binOffset posOffset="0" negOffset="900" virtualOffset="0" />
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="binlightning"
constraintType="EQUALS" />
</mapping>
<mapping key="source">
<constraint constraintValue="${source}" constraintType="EQUALS" />
</mapping>
</metadataMap>
</resourceData>
</resource>
<resource>
<loadProperties loadWithoutData="true">
</loadProperties>
<properties isSystemResource="false"
isBlinking="false" isMapLayer="false" isHoverOn="false"
isVisible="false" />
<resourceData xsi:type="lightningResourceData"
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
handlingPulses="true">
<binOffset posOffset="0" negOffset="900" virtualOffset="0"/>
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="binlightning" constraintType="EQUALS" />
</mapping>
<mapping key="source">
<constraint constraintValue="${source}" constraintType="EQUALS" />
</mapping>
</metadataMap>
</resourceData>
</resource>
</descriptor>
</displays>
</displayList>
</bundle>

View file

@ -0,0 +1,90 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<bundle>
<displayList>
<displays xsi:type="d2DMapRenderableDisplay" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<descriptor xsi:type="mapDescriptor">
<resource>
<loadProperties loadWithoutData="true">
</loadProperties>
<properties isSystemResource="false"
isBlinking="false" isMapLayer="false" isHoverOn="false"
isVisible="true" />
<resourceData xsi:type="lightningResourceData"
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
handlingPositiveStrikes="true" handlingNegativeStrikes="true">
<binOffset posOffset="0" negOffset="300" virtualOffset="0"/>
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="binlightning" constraintType="EQUALS" />
</mapping>
<mapping key="source">
<constraint constraintValue="${source}" constraintType="EQUALS" />
</mapping>
</metadataMap>
</resourceData>
</resource>
<resource>
<loadProperties loadWithoutData="true">
</loadProperties>
<properties isSystemResource="false"
isBlinking="false" isMapLayer="false" isHoverOn="false"
isVisible="true" />
<resourceData xsi:type="lightningResourceData"
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
handlingCloudFlashes="true">
<binOffset posOffset="0" negOffset="300" virtualOffset="0"/>
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="binlightning" constraintType="EQUALS" />
</mapping>
<mapping key="source">
<constraint constraintValue="${source}" constraintType="EQUALS" />
</mapping>
</metadataMap>
</resourceData>
</resource>
<resource>
<loadProperties loadWithoutData="true">
</loadProperties>
<properties isSystemResource="false"
isBlinking="false" isMapLayer="false" isHoverOn="false"
isVisible="false" />
<resourceData xsi:type="lightningResourceData"
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
handlingPulses="true">
<binOffset posOffset="0" negOffset="300" virtualOffset="0"/>
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="binlightning" constraintType="EQUALS" />
</mapping>
<mapping key="source">
<constraint constraintValue="${source}" constraintType="EQUALS" />
</mapping>
</metadataMap>
</resourceData>
</resource>
</descriptor>
</displays>
</displayList>
</bundle>

View file

@ -0,0 +1,90 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<bundle>
<displayList>
<displays xsi:type="d2DMapRenderableDisplay" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<descriptor xsi:type="mapDescriptor">
<resource>
<loadProperties loadWithoutData="true">
</loadProperties>
<properties isSystemResource="false"
isBlinking="false" isMapLayer="false" isHoverOn="false"
isVisible="true" />
<resourceData xsi:type="lightningResourceData"
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
handlingPositiveStrikes="true" handlingNegativeStrikes="true">
<binOffset posOffset="0" negOffset="3600" virtualOffset="0"/>
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="binlightning" constraintType="EQUALS" />
</mapping>
<mapping key="source">
<constraint constraintValue="${source}" constraintType="EQUALS" />
</mapping>
</metadataMap>
</resourceData>
</resource>
<resource>
<loadProperties loadWithoutData="true">
</loadProperties>
<properties isSystemResource="false"
isBlinking="false" isMapLayer="false" isHoverOn="false"
isVisible="true" />
<resourceData xsi:type="lightningResourceData"
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
handlingCloudFlashes="true">
<binOffset posOffset="0" negOffset="3600" virtualOffset="0"/>
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="binlightning" constraintType="EQUALS" />
</mapping>
<mapping key="source">
<constraint constraintValue="${source}" constraintType="EQUALS" />
</mapping>
</metadataMap>
</resourceData>
</resource>
<resource>
<loadProperties loadWithoutData="true">
</loadProperties>
<properties isSystemResource="false"
isBlinking="false" isMapLayer="false" isHoverOn="false"
isVisible="false" />
<resourceData xsi:type="lightningResourceData"
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
handlingPositiveStrikes="false" handlingNegativeStrikes="false"
handlingPulses="true">
<binOffset posOffset="0" negOffset="3600" virtualOffset="0"/>
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="binlightning" constraintType="EQUALS" />
</mapping>
<mapping key="source">
<constraint constraintValue="${source}" constraintType="EQUALS" />
</mapping>
</metadataMap>
</resourceData>
</resource>
</descriptor>
</displays>
</displayList>
</bundle>

View file

@ -19,16 +19,16 @@
further_licensing_information.
-->
<menuTemplate xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<contribute xsi:type="bundleItem" file="bundles/LightningPlot60Min.xml"
<contribute xsi:type="bundleItem" file="bundles/TotalLightningPlot60Min.xml"
menuText="1hr plot" id="1HrLightningFlashPlot">
</contribute>
<contribute xsi:type="bundleItem" file="bundles/LightningPlot15Min.xml"
<contribute xsi:type="bundleItem" file="bundles/TotalLightningPlot15Min.xml"
menuText="15min plot" id="15MinLightningFlashPlot">
</contribute>
<contribute xsi:type="bundleItem" file="bundles/LightningPlot15MinPN.xml"
<contribute xsi:type="bundleItem" file="bundles/TotalLightningPlot15MinPN.xml"
menuText="15min Pos/Neg plot" id="15MinPNLightningFlashPlot">
</contribute>
<contribute xsi:type="bundleItem" file="bundles/LightningPlot5Min.xml"
<contribute xsi:type="bundleItem" file="bundles/TotalLightningPlot5Min.xml"
menuText="5min plot" id="5MinLightningFlashPlot">
</contribute>
<contribute xsi:type="bundleItem" file="bundles/LightningSeq.xml"

View file

@ -24,51 +24,13 @@
menuText="60min cloud to ground density" id="1HrGridLightningCGPlot">
<substitute key="negOffset" value="3600"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/GridLightningCloudFlashPlot.xml"
menuText="60min cloud flash density" id="1HrGridLightningCloudFlashPlot">
<substitute key="negOffset" value="3600"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/GridLightningTotalFlashPlot.xml"
menuText="60min total flash density" id="1HrGridLightningFlashPlot">
<substitute key="negOffset" value="3600"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/GridLightningPulsePlot.xml"
menuText="60min pulse density" id="1HrGridLightningPulsePlot">
<substitute key="negOffset" value="3600"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/GridLightningCGPlot.xml"
menuText="15min cloud to ground density" id="1HrGridLightningCGPlot">
<substitute key="negOffset" value="900"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/GridLightningCloudFlashPlot.xml"
menuText="15min cloud flash density" id="1HrGridLightningCloudFlashPlot">
<substitute key="negOffset" value="900"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/GridLightningTotalFlashPlot.xml"
menuText="15min total flash density" id="1HrGridLightningFlashPlot">
<substitute key="negOffset" value="900"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/GridLightningPulsePlot.xml"
menuText="15min pulse density" id="1HrGridLightningPulsePlot">
<substitute key="negOffset" value="900"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/GridLightningCGPlot.xml"
menuText="5min cloud to ground density" id="1HrGridLightningCGPlot">
<substitute key="negOffset" value="300"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/GridLightningCloudFlashPlot.xml"
menuText="5min cloud flash density" id="1HrGridLightningCloudFlashPlot">
<substitute key="negOffset" value="300"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/GridLightningTotalFlashPlot.xml"
menuText="5min total flash density" id="1HrGridLightningFlashPlot">
<substitute key="negOffset" value="300"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/GridLightningPulsePlot.xml"
menuText="5min pulse density" id="1HrGridLightningPulsePlot">
<substitute key="negOffset" value="300"/>
</contribute>
</menuTemplate>

View file

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<menuTemplate xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<contribute xsi:type="bundleItem" file="bundles/GridLightningCGPlot.xml"
menuText="60min cloud to ground density" id="1HrGridLightningCGPlot">
<substitute key="negOffset" value="3600"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/GridLightningCloudFlashPlot.xml"
menuText="60min cloud flash density" id="1HrGridLightningCloudFlashPlot">
<substitute key="negOffset" value="3600"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/GridLightningTotalFlashPlot.xml"
menuText="60min total flash density" id="1HrGridLightningFlashPlot">
<substitute key="negOffset" value="3600"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/GridLightningPulsePlot.xml"
menuText="60min pulse density" id="1HrGridLightningPulsePlot">
<substitute key="negOffset" value="3600"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/GridLightningCGPlot.xml"
menuText="15min cloud to ground density" id="1HrGridLightningCGPlot">
<substitute key="negOffset" value="900"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/GridLightningCloudFlashPlot.xml"
menuText="15min cloud flash density" id="1HrGridLightningCloudFlashPlot">
<substitute key="negOffset" value="900"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/GridLightningTotalFlashPlot.xml"
menuText="15min total flash density" id="1HrGridLightningFlashPlot">
<substitute key="negOffset" value="900"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/GridLightningPulsePlot.xml"
menuText="15min pulse density" id="1HrGridLightningPulsePlot">
<substitute key="negOffset" value="900"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/GridLightningCGPlot.xml"
menuText="5min cloud to ground density" id="1HrGridLightningCGPlot">
<substitute key="negOffset" value="300"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/GridLightningCloudFlashPlot.xml"
menuText="5min cloud flash density" id="1HrGridLightningCloudFlashPlot">
<substitute key="negOffset" value="300"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/GridLightningTotalFlashPlot.xml"
menuText="5min total flash density" id="1HrGridLightningFlashPlot">
<substitute key="negOffset" value="300"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/GridLightningPulsePlot.xml"
menuText="5min pulse density" id="1HrGridLightningPulsePlot">
<substitute key="negOffset" value="300"/>
</contribute>
</menuTemplate>

View file

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<menuTemplate xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<contribute xsi:type="subMenu" menuText="1km" id="${source}1kmLightningGridSubmenu">
<contribute xsi:type="subinclude" fileName="menus/lightning/gridTotalLightningBundleItems.xml">
<substitute key="resolution" value="1" />
</contribute>
</contribute>
<contribute xsi:type="subMenu" menuText="3km" id="${source}3kmLightningGridSubmenu">
<contribute xsi:type="subinclude" fileName="menus/lightning/gridTotalLightningBundleItems.xml">
<substitute key="resolution" value="3" />
</contribute>
</contribute>
<contribute xsi:type="subMenu" menuText="5km" id="${source}5kmLightningGridSubmenu">
<contribute xsi:type="subinclude" fileName="menus/lightning/gridTotalLightningBundleItems.xml">
<substitute key="resolution" value="5" />
</contribute>
</contribute>
<contribute xsi:type="subMenu" menuText="8km" id="${source}8kmLightningGridSubmenu">
<contribute xsi:type="subinclude" fileName="menus/lightning/gridTotalLightningBundleItems.xml">
<substitute key="resolution" value="8" />
</contribute>
</contribute>
<contribute xsi:type="subMenu" menuText="20km" id="${source}20kmLightningGridSubmenu">
<contribute xsi:type="subinclude" fileName="menus/lightning/gridTotalLightningBundleItems.xml">
<substitute key="resolution" value="20" />
</contribute>
</contribute>
<contribute xsi:type="subMenu" menuText="40km" id="${source}40kmLightningGridSubmenu">
<contribute xsi:type="subinclude" fileName="menus/lightning/gridTotalLightningBundleItems.xml">
<substitute key="resolution" value="40" />
</contribute>
</contribute>
</menuTemplate>

View file

@ -45,8 +45,9 @@
</contribute>
</contribute>
<contribute xsi:type="subMenu" menuText="Total Lightning Grid" id="entlnGridSubmenu">
<contribute xsi:type="subinclude" fileName="menus/lightning/gridLightningMenuItems.xml">
<contribute xsi:type="subinclude" fileName="menus/lightning/gridTotalLightningMenuItems.xml">
<substitute key="source" value="ENTLN"/>
</contribute>
</contribute>
<contribute xsi:type="separator" id="LMATotalLightning" visible="false" />
</menuTemplate>

View file

@ -34,7 +34,4 @@
<contribute xsi:type="bundleItem" file="bundles/LightningSeq.xml"
menuText="1min Lgtng Seq Plot" id="1MinLightningFlashSeq">
</contribute>
<contribute xsi:type="bundleItem" file="bundles/LightningCloudSeq.xml"
menuText="1min Cloud Flash Seq Plot" id="1MinLightningCloudFlashSeq">
</contribute>
</menuTemplate>

View file

@ -75,6 +75,7 @@ import com.raytheon.viz.lightning.cache.LightningFrameRetriever;
* Jul 22, 2014 3333 bclement ignores strikes that aren't on map
* Jul 28, 2014 3451 bclement uses intended range min
* Jul 29, 2014 3463 bclement uses sparse data source
* Mar 05, 2015 4233 bsteffen include source in cache key.
*
* </pre>
*
@ -274,7 +275,8 @@ public class GridLightningResource extends
* no local reference to cache object, create key and get cache
* object which may be new or from another resource
*/
LightningFrameMetadata key = new LightningFrameMetadata(time,
LightningFrameMetadata key = new LightningFrameMetadata(
resourceData.getSource(), time,
resourceData.getBinOffset());
co = CacheObject.newCacheObject(key, retriever);
cacheObjectMap.put(time, co);

View file

@ -32,8 +32,6 @@ import org.opengis.referencing.crs.CoordinateReferenceSystem;
import com.raytheon.uf.common.dataplugin.PluginDataObject;
import com.raytheon.uf.common.dataplugin.binlightning.BinLightningRecord;
import com.raytheon.uf.common.dataplugin.binlightning.LightningConstants;
import com.raytheon.uf.common.dataquery.requests.RequestConstraint;
import com.raytheon.uf.common.time.DataTime;
import com.raytheon.uf.common.time.TimeRange;
import com.raytheon.uf.common.time.util.TimeUtil;
@ -92,6 +90,7 @@ import com.raytheon.viz.lightning.cache.LightningFrameRetriever;
* moved name formatting to static method
* Aug 04, 2014 3488 bclement added sanity check for record bin range
* Aug 19, 2014 3542 bclement fixed strike count clipping issue
* Mar 05, 2015 4233 bsteffen include source in cache key.
*
* </pre>
*
@ -111,7 +110,7 @@ public class LightningResource extends
private boolean needsUpdate;
private String resourceName;
private int posAdj;
private IFont font;
@ -222,11 +221,9 @@ public class LightningResource extends
rval += modifier;
}
HashMap<String, RequestConstraint> metadata = resourceData
.getMetadataMap();
if (metadata != null && metadata.containsKey(LightningConstants.SOURCE)) {
rval += metadata.get(LightningConstants.SOURCE)
.getConstraintValue() + " ";
String source = resourceData.getSource();
if (source != null) {
rval += source + " ";
}
return rval;
}
@ -283,9 +280,10 @@ public class LightningResource extends
int negCount = 0;
int cloudCount = 0;
int pulseCount = 0;
if (magnification == 0.0) magnification=(float) 0.01;
if (magnification == 0.0)
magnification = (float) 0.01;
/*
* we only want strikes that are visible so we have to filter any
* strikes that aren't in both the clipping pane and the view
@ -448,7 +446,8 @@ public class LightningResource extends
* we know about, return without removing the time.
*/
if (dataTimes.indexOf(dataTime) == dataTimes.size() - 1) {
CacheObject<LightningFrameMetadata, LightningFrame> co = cacheObjectMap.get(dataTime);
CacheObject<LightningFrameMetadata, LightningFrame> co = cacheObjectMap
.get(dataTime);
if (co != null) {
LightningFrameMetadata metadata = co.getMetadata();
synchronized (metadata) {
@ -468,13 +467,12 @@ public class LightningResource extends
Map<DataTime, List<BinLightningRecord>> recordMap = new HashMap<DataTime, List<BinLightningRecord>>();
for (BinLightningRecord obj : objs) {
long duration = obj.getDataTime().getValidPeriod()
.getDuration();
if (duration > MAX_RECORD_BIN_MILLIS) {
statusHandler.error("Record bin time larger than maximum "
+ "supported period. Skipping record: " + obj);
continue;
}
long duration = obj.getDataTime().getValidPeriod().getDuration();
if (duration > MAX_RECORD_BIN_MILLIS) {
statusHandler.error("Record bin time larger than maximum "
+ "supported period. Skipping record: " + obj);
continue;
}
DataTime time = new DataTime(obj.getStartTime());
DataTime end = new DataTime(obj.getStopTime());
time = this.getResourceData().getBinOffset()
@ -518,7 +516,8 @@ public class LightningResource extends
* no local reference to cache object, create key and get
* cache object which may be new or from another resource
*/
LightningFrameMetadata key = new LightningFrameMetadata(dt,
LightningFrameMetadata key = new LightningFrameMetadata(
resourceData.getSource(), dt,
resourceData.getBinOffset());
co = CacheObject.newCacheObject(key, retriever);
cacheObjectMap.put(dt, co);

View file

@ -28,6 +28,7 @@ import javax.xml.bind.annotation.XmlAttribute;
import com.raytheon.uf.common.dataplugin.PluginDataObject;
import com.raytheon.uf.common.dataplugin.binlightning.BinLightningRecord;
import com.raytheon.uf.common.dataplugin.binlightning.LightningConstants;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.status.UFStatus.Priority;
@ -47,7 +48,7 @@ import com.raytheon.uf.viz.core.rsc.LoadProperties;
* Feb 27, 2013 DCS 152 jgerth Support for WWLLN and multiple sources
* Jun 19, 2014 3214 bclement added pulse and cloud flash support
* Jul 07, 2014 3333 bclement removed plotLightSource field
*
* Mar 05, 2015 4233 bsteffen include source in cache key.
* </pre>
*
* @author chammack
@ -208,6 +209,15 @@ public class LightningResourceData extends AbstractRequestableResourceData {
this.countPosition = countPosition;
}
public String getSource() {
if (metadataMap != null
&& metadataMap.containsKey(LightningConstants.SOURCE)) {
return metadataMap.get(LightningConstants.SOURCE)
.getConstraintValue();
}
return null;
}
/*
* (non-Javadoc)
*

View file

@ -36,6 +36,7 @@ import com.raytheon.uf.common.time.DataTime;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Jul 9, 2014 3333 bclement moved from LightningResource
* Mar 05, 2015 4233 bsteffen include source in cache key.
*
* </pre>
*
@ -44,6 +45,8 @@ import com.raytheon.uf.common.time.DataTime;
*/
public class LightningFrameMetadata {
private final String source;
private final BinOffset offset;
private final DataTime frameTime;
@ -52,7 +55,9 @@ public class LightningFrameMetadata {
private final List<BinLightningRecord> processed = new ArrayList<BinLightningRecord>();
public LightningFrameMetadata(DataTime frameTime, BinOffset offset) {
public LightningFrameMetadata(String source, DataTime frameTime,
BinOffset offset) {
this.source = source;
this.frameTime = frameTime;
this.offset = offset;
}
@ -92,6 +97,7 @@ public class LightningFrameMetadata {
result = prime * result
+ ((frameTime == null) ? 0 : frameTime.hashCode());
result = prime * result + ((offset == null) ? 0 : offset.hashCode());
result = prime * result + ((source == null) ? 0 : source.hashCode());
return result;
}
@ -114,6 +120,11 @@ public class LightningFrameMetadata {
return false;
} else if (!offset.equals(other.offset))
return false;
if (source == null) {
if (other.source != null)
return false;
} else if (!source.equals(other.source))
return false;
return true;
}
}

View file

@ -65,7 +65,7 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
* Feb 2, 2014 16201 snaples Added saved data flag support
* Apr 28, 2014 16707 snaples Added code to save and set location of dialog box when moved.
* Jan 12, 2015 16993 snaples Restored code for Substitute Field Combo box.
*
* Feb 26, 2015 17209 cgobs Ensured that there is an initial selection of Substitution field, prevents empty selection.
*
* </pre>
*
@ -387,16 +387,22 @@ public class DrawPolygonDlg extends CaveSWTDialog {
// spaceLabel.setText("***** ");
int selectedFieldIndex = 0;
boolean found = false;
//find the index of the selected field
for (selectedFieldIndex = 0; selectedFieldIndex < displayFieldDataArray.length; selectedFieldIndex++)
{
if (displayFieldDataArray[selectedFieldIndex] == subType)
{
found = true;
break;
}
}
if (!found)
{
selectedFieldIndex = 0;
}
//create and initialize the display field type name array
displayTypeNameArray = new String[displayFieldDataArray.length];
@ -411,27 +417,42 @@ public class DrawPolygonDlg extends CaveSWTDialog {
fieldTypeCombo.setTextLimit(35);
fieldTypeCombo.setLayoutData(gd);
fieldTypeCombo.setItems(displayTypeNameArray);
fieldTypeCombo.select(selectedFieldIndex);
// fieldTypeCombo.select(selectedFieldIndex);
fieldTypeCombo.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event) {
String selectedFieldString = fieldTypeCombo.getText();
setSubstitutionField();
// String selectedFieldString = fieldTypeCombo.getText();
// System.out.println("DrawPolygon.createFieldCombo(): selectedFieldString = " +
// selectedFieldString);
subType = DisplayFieldData.fromDisplayNameString(selectedFieldString);
// subType = DisplayFieldData.fromDisplayNameString(selectedFieldString);
// if (subType != null)
// {
// System.out.println("DrawPolygon.createFieldCombo(): subType = " +
// subType.toString());
// }
// {
// System.out.println("DrawPolygon.createFieldCombo(): subType = " +
// subType.toString());
// }
}
});
//select the substitution field
fieldTypeCombo.select(selectedFieldIndex);
setSubstitutionField();
}
private void setSubstitutionField()
{
String selectedFieldString = fieldTypeCombo.getText();
subType = DisplayFieldData.fromDisplayNameString(selectedFieldString);
}
/**

View file

@ -160,7 +160,7 @@ public class BestEstimate1HrQpeDlg extends BasePostAnalysisDlg {
applyGridAdjustments(adjustedGrid, biasRatioGrid, disaggGrid);
float[] dataArray = paMgr.convertToSingleArray(adjustedGrid, false, true);
short[] shortArray= paMgr.convertToShortArray(dataArray, 100.0f);
short[] shortArray= paMgr.convertToShortArray(dataArray, 1.0f);
XmrgFile file = new XmrgFile();

View file

@ -43,7 +43,7 @@ import com.vividsolutions.jts.geom.Coordinate;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* December 2013 DCS 167 C. Gobs Initial version
*
* February 2015 C. Gobs Fixed issue with parsing unexpected file name formats in xmrg directory
* </pre>
*
*
@ -156,6 +156,7 @@ public class PostAnalysisManager
try
{
shiftedDate = utcSdf2.parse(timeString);
longTime = shiftedDate.getTime();
}
catch(ParseException e)
{
@ -164,7 +165,7 @@ public class PostAnalysisManager
}
longTime = shiftedDate.getTime();
return longTime;
}

View file

@ -0,0 +1,22 @@
#!/bin/bash
# DR #4209 - this update script will convert the satellite_spatial dx and dy columns to double precision
# This is only necessary on sites installed before 14.2 but there is no harm running it everywhere.
PSQL="/awips2/psql/bin/psql"
echo "INFO: Updating satellite spatial table"
${PSQL} -U awips -d metadata -c "ALTER TABLE satellite_spatial ALTER COLUMN dx SET DATA TYPE double precision;"
if [ $? -ne 0 ]; then
echo "ERROR: Failed to update column type for dx column of satellite_spatial table"
echo "FATAL: The update has failed."
exit 1
fi
${PSQL} -U awips -d metadata -c "ALTER TABLE satellite_spatial ALTER COLUMN dy SET DATA TYPE double precision;"
if [ $? -ne 0 ]; then
echo "ERROR: Failed to update column type for dy column of satellite_spatial table"
echo "FATAL: The update has failed."
exit 1
fi
echo "INFO: Satellite spatial table successfully updated."

View file

@ -5,7 +5,7 @@
<bean id="gfeSiteActivation" class="com.raytheon.edex.plugin.gfe.config.GFESiteActivation"
depends-on="commonTimeRegistered, gfeDbRegistered, levelFactoryInitialized">
<constructor-arg ref="fetchATSrv" />
<constructor-arg ref="iscProvider" />
</bean>
<bean id="gfeSitesActiveRequest" factory-bean="siteAwareRegistry" factory-method="register"
@ -572,22 +572,32 @@
<constructor-arg ref="clusteredGfeIscRoutes"/>
</bean>
<!-- Active Table Sharing Definitions -->
<bean id="fetchATSrv" class="com.raytheon.edex.plugin.gfe.isc.FetchActiveTableSrv" />
<!-- ISC Services Beans -->
<bean id="iscProvider" class="com.raytheon.edex.plugin.gfe.isc.IscServiceProvider" />
<bean factory-bean="contextManager" factory-method="registerContextStateProcessor">
<constructor-arg ref="activeTableSharingRoutes"/>
<bean id="fetchATSrv" class="com.raytheon.edex.plugin.gfe.isc.FetchActiveTableSrv" />
<bean factory-bean="iscProvider" factory-method="addISCService">
<constructor-arg ref="fetchATSrv"/>
</bean>
<camelContext id="activeTableSharingRoutes" xmlns="http://camel.apache.org/schema/spring"
<bean id="requestTCVSrv" class="com.raytheon.edex.plugin.gfe.isc.RequestTCVSrv" />
<bean factory-bean="iscProvider" factory-method="addISCService">
<constructor-arg ref="requestTCVSrv"/>
</bean>
<bean factory-bean="contextManager" factory-method="registerContextStateProcessor">
<constructor-arg ref="clusteredIscBeans" />
<constructor-arg ref="iscProvider" />
</bean>
<camelContext id="clusteredIscBeans" xmlns="http://camel.apache.org/schema/spring"
errorHandlerRef="errorHandler">
<route id="activateFetchATSrv">
<from uri="timer://activateActiveTableSharing?repeatCount=1"/>
<bean ref="fetchATSrv" method="activateService"/>
<route id="activateISC">
<from uri="timer://activateISCServices?repeatCount=1"/>
<bean ref="iscProvider" method="activateInstance"/>
</route>
</camelContext>
<bean factory-bean="contextManager" factory-method="registerClusteredContext">
<constructor-arg ref="activeTableSharingRoutes"/>
<constructor-arg ref="clusteredIscBeans"/>
</bean>
</beans>

View file

@ -21,41 +21,22 @@ package com.raytheon.edex.plugin.gfe.config;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import jep.JepException;
import com.google.common.util.concurrent.MoreExecutors;
import com.raytheon.edex.plugin.gfe.exception.GfeConfigurationException;
import com.raytheon.edex.plugin.gfe.exception.GfeMissingConfigurationException;
import com.raytheon.edex.plugin.gfe.isc.FetchActiveTableSrv;
import com.raytheon.edex.plugin.gfe.isc.IRTManager;
import com.raytheon.edex.plugin.gfe.isc.IscServiceProvider;
import com.raytheon.edex.plugin.gfe.server.IFPServer;
import com.raytheon.edex.site.SiteUtil;
import com.raytheon.uf.common.dataplugin.PluginException;
import com.raytheon.uf.common.dataplugin.gfe.exception.GfeException;
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.python.PyUtil;
import com.raytheon.uf.common.python.PythonScript;
import com.raytheon.uf.common.site.notify.SiteActivationNotification;
import com.raytheon.uf.common.site.notify.SiteActivationNotification.ACTIVATIONSTATUS;
import com.raytheon.uf.common.site.notify.SiteActivationNotification.ACTIVATIONTYPE;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.status.UFStatus.Priority;
import com.raytheon.uf.common.util.FileUtil;
import com.raytheon.uf.edex.activetable.ActiveTablePyIncludeUtil;
import com.raytheon.uf.edex.core.EDEXUtil;
import com.raytheon.uf.edex.core.EdexException;
import com.raytheon.uf.edex.database.DataAccessLayerException;
@ -94,6 +75,7 @@ import com.raytheon.uf.edex.site.notify.SendSiteActivationNotifications;
* Oct 07, 2014 #3684 randerso Restructured IFPServer start up
* Dec 10, 2014 #4953 randerso Added requestTCVFiles call at site activation
* Feb 25, 2015 #4128 dgilling Simplify activation of active table sharing.
* Mar 11, 2015 #4128 dgilling Refactor activation and management of ISC services.
*
* </pre>
*
@ -113,9 +95,7 @@ public class GFESiteActivation implements ISiteActivationListener {
private boolean intialized;
private final ExecutorService postActivationTaskExecutor;
private final FetchActiveTableSrv fetchAtSrv;
private final IscServiceProvider iscServices;
/**
* Default constructor. Builds a GFESiteActivation instance with no
@ -127,17 +107,14 @@ public class GFESiteActivation implements ISiteActivationListener {
/**
* Builds a GFESiteActivation instance with an associated
* {@code FetchActiveTableSrv} instance. Should only be used on request JVM.
* {@code IscServiceProvider} instance. Should only be used on request JVM.
*
* @param fetchAtSrv
* {@code FetchActiveTableSrv} instance
* @param iscServices
* {@code IscServiceProvider} instance
*/
public GFESiteActivation(final FetchActiveTableSrv fetchAtSrv) {
public GFESiteActivation(final IscServiceProvider iscServices) {
this.intialized = false;
this.postActivationTaskExecutor = MoreExecutors
.getExitingExecutorService((ThreadPoolExecutor) Executors
.newCachedThreadPool());
this.fetchAtSrv = fetchAtSrv;
this.iscServices = iscServices;
}
@Override
@ -330,63 +307,8 @@ public class GFESiteActivation implements ISiteActivationListener {
ClusterLockUtils.unlock(ct, false);
}
// Doesn't need to be cluster locked
statusHandler.info("Checking ISC configuration...");
if (config.requestISC()) {
String host = InetAddress.getLocalHost().getCanonicalHostName();
String gfeHost = config.getServerHost();
String hostNameToCompare = gfeHost;
if (gfeHost.endsWith("f")) {
hostNameToCompare = gfeHost.substring(0, gfeHost.length() - 1);
}
// TODO: specific to a host and jvm type, register it independently,
// but don't hard code request
if (host.contains(hostNameToCompare)
&& System.getProperty("edex.run.mode").equals("request")) {
statusHandler.info("Enabling ISC...");
try {
IRTManager.getInstance().enableISC(siteID, config);
final IFPServerConfig configRef = config;
if (configRef.tableFetchTime() > 0) {
Runnable activateTableSharing = new Runnable() {
@Override
public void run() {
EDEXUtil.waitForRunning();
fetchAtSrv.activateSite(siteID, configRef);
}
};
postActivationTaskExecutor.submit(activateTableSharing);
}
Runnable requestTCV = new Runnable() {
@Override
public void run() {
// wait until EDEX is up and running to request TCV
// files
EDEXUtil.waitForRunning();
requestTCVFiles(siteID, configRef);
}
};
postActivationTaskExecutor.submit(requestTCV);
} catch (Exception e) {
statusHandler
.error("Error starting GFE ISC. ISC functionality will be unavailable!!",
e);
}
} else {
statusHandler
.info("ISC Enabled but will use another EDEX instance");
}
} else {
statusHandler.info("ISC is not enabled.");
if (iscServices != null) {
iscServices.activateSite(siteID, config);
}
statusHandler.info("Adding " + siteID + " to active sites list.");
@ -423,6 +345,10 @@ public class GFESiteActivation implements ISiteActivationListener {
}
if (iscServices != null) {
iscServices.deactivateSite(siteID);
}
IFPServer.deactivateServer(siteID);
statusHandler.info(siteID + " successfully deactivated");
@ -488,46 +414,4 @@ public class GFESiteActivation implements ISiteActivationListener {
}
return retVal;
}
private void requestTCVFiles(String siteId, IFPServerConfig config) {
IPathManager pathMgr = PathManagerFactory.getPathManager();
LocalizationContext commonBaseCx = pathMgr.getContext(
LocalizationType.COMMON_STATIC, LocalizationLevel.BASE);
String scriptPath = pathMgr.getFile(commonBaseCx,
FileUtil.join(ActiveTablePyIncludeUtil.VTEC, "requestTCV.py"))
.getPath();
String pythonIncludePath = PyUtil.buildJepIncludePath(
ActiveTablePyIncludeUtil.getCommonPythonIncludePath(),
ActiveTablePyIncludeUtil.getCommonGfeIncludePath(),
ActiveTablePyIncludeUtil.getVtecIncludePath(siteId),
ActiveTablePyIncludeUtil.getGfeConfigIncludePath(siteId),
ActiveTablePyIncludeUtil.getIscScriptsIncludePath());
PythonScript script = null;
try {
script = new PythonScript(scriptPath, pythonIncludePath, this
.getClass().getClassLoader());
try {
Map<String, Object> argMap = new HashMap<String, Object>();
argMap.put("siteID", siteId);
argMap.put("config", config);
script.execute("runFromJava", argMap);
} catch (JepException e) {
statusHandler.handle(Priority.PROBLEM,
"Error executing requestTCV.", e);
}
} catch (JepException e) {
statusHandler
.handle(Priority.PROBLEM,
"Unable to instantiate requestTCV python script object.",
e);
} finally {
if (script != null) {
script.dispose();
}
}
}
}

View file

@ -30,12 +30,11 @@ import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import com.raytheon.edex.plugin.gfe.config.IFPServerConfig;
import com.raytheon.edex.plugin.gfe.server.IFPServer;
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.RunProcess;
import com.raytheon.uf.edex.core.IContextStateProcessor;
import com.raytheon.uf.edex.core.EDEXUtil;
/**
* Service that fetches neighboring sites' active table entries that are
@ -53,6 +52,8 @@ import com.raytheon.uf.edex.core.IContextStateProcessor;
* fetching when site is deactivated.
* Feb 26, 2015 #4128 dgilling Moved to edex.gfe plugin, rewritten as
* IContextStateProcessor.
* Mar 11, 2015 #4128 dgilling Ensure this service runs on same cluster
* node as was registered with IRT.
*
* </pre>
*
@ -60,7 +61,7 @@ import com.raytheon.uf.edex.core.IContextStateProcessor;
* @version 1.0
*/
public final class FetchActiveTableSrv implements IContextStateProcessor {
public final class FetchActiveTableSrv implements IISCServiceBean {
private static final class FetchATJobConfig {
@ -165,31 +166,21 @@ public final class FetchActiveTableSrv implements IContextStateProcessor {
private ScheduledExecutorService jobExecutor;
private volatile boolean activeServiceInstance;
/**
* Default constructor.
*/
public FetchActiveTableSrv() {
this.activeServiceInstance = false;
this.siteJobInstanceMap = new ConcurrentHashMap<String, ScheduledFuture<?>>();
}
/**
* Dummy trigger method for the timer in the camel context this bean
* monitors. Ensures this bean properly fails over between cluster members
* as needed.
*/
public void activateService() {
activeServiceInstance = true;
}
/**
* Removes a site's active table sharing job from the job pool.
/*
* (non-Javadoc)
*
* @param siteID
* Site identifier for the site's job to stop.
* @see
* com.raytheon.edex.plugin.gfe.isc.IISCServiceBean#deactivateSite(java.
* lang.String)
*/
@Override
public void deactivateSite(final String siteID) {
ScheduledFuture<?> siteJob = siteJobInstanceMap.remove(siteID);
if (siteJob != null) {
@ -198,17 +189,19 @@ public final class FetchActiveTableSrv implements IContextStateProcessor {
}
}
/**
* Adds a site's active table sharing job to the job pool.
/*
* (non-Javadoc)
*
* @param siteID
* Site identifier for the site's job to add to job pool.
* @param gfeConfig
* {@code IFPServerConfig} for the site.
* @see
* com.raytheon.edex.plugin.gfe.isc.IISCServiceBean#activateSite(java.lang
* .String, com.raytheon.edex.plugin.gfe.config.IFPServerConfig)
*/
@Override
public void activateSite(final String siteID,
final IFPServerConfig gfeConfig) {
if (activeServiceInstance && (!siteJobInstanceMap.containsKey(siteID))) {
EDEXUtil.waitForRunning();
if ((gfeConfig.tableFetchTime() > 0)
&& (!siteJobInstanceMap.containsKey(siteID))) {
FetchATJobConfig jobConfig = new FetchATJobConfig(siteID, gfeConfig);
statusHandler.info("Activating FetchAT for " + siteID);
@ -226,6 +219,10 @@ public final class FetchActiveTableSrv implements IContextStateProcessor {
"Unable to submit fetchAT job for execution:", e);
siteJobInstanceMap.remove(siteID);
}
} else {
statusHandler
.info("Skipping activation of active table sharing for site "
+ siteID);
}
}
@ -282,53 +279,35 @@ public final class FetchActiveTableSrv implements IContextStateProcessor {
/*
* (non-Javadoc)
*
* @see com.raytheon.uf.edex.core.IContextStateProcessor#preStart()
* @see com.raytheon.edex.plugin.gfe.isc.IISCServiceBean#startup()
*/
@Override
public void preStart() {
public void startup() {
statusHandler.info("Initializing FetchATSrv...");
activeServiceInstance = true;
jobExecutor = Executors.newScheduledThreadPool(1);
}
for (IFPServer ifpServer : IFPServer.getActiveServers()) {
IFPServerConfig config = ifpServer.getConfig();
if ((config.requestISC()) && (config.tableFetchTime() > 0)) {
activateSite(ifpServer.getSiteId(), config);
}
/*
* (non-Javadoc)
*
* @see com.raytheon.edex.plugin.gfe.isc.IISCServiceBean#preShutdown()
*/
@Override
public void preShutdown() {
statusHandler.info("Shutting down FetchATSrv...");
if (jobExecutor != null) {
jobExecutor.shutdown();
}
}
/*
* (non-Javadoc)
*
* @see com.raytheon.uf.edex.core.IContextStateProcessor#postStart()
* @see com.raytheon.edex.plugin.gfe.isc.IISCServiceBean#postShutdown()
*/
@Override
public void postStart() {
// no op
}
/*
* (non-Javadoc)
*
* @see com.raytheon.uf.edex.core.IContextStateProcessor#preStop()
*/
@Override
public void preStop() {
statusHandler.info("Shutting down FetchATSrv...");
activeServiceInstance = false;
jobExecutor.shutdown();
}
/*
* (non-Javadoc)
*
* @see com.raytheon.uf.edex.core.IContextStateProcessor#postStop()
*/
@Override
public void postStop() {
public void postShutdown() {
jobExecutor = null;
siteJobInstanceMap.clear();
}

View file

@ -26,15 +26,12 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import jep.JepException;
import com.raytheon.edex.plugin.gfe.config.GridDbConfig;
import com.raytheon.edex.plugin.gfe.config.IFPServerConfig;
import com.raytheon.edex.plugin.gfe.config.IFPServerConfigManager;
import com.raytheon.edex.plugin.gfe.server.IFPServer;
import com.raytheon.edex.plugin.gfe.exception.GfeConfigurationException;
import com.raytheon.uf.common.dataplugin.gfe.db.objects.DatabaseID;
import com.raytheon.uf.common.dataplugin.gfe.db.objects.GridLocation;
import com.raytheon.uf.common.dataplugin.gfe.python.GfePyIncludeUtil;
@ -57,23 +54,25 @@ import com.raytheon.uf.common.util.FileUtil;
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 07/14/09 1995 bphillip Initial creation
* Mar 14, 2013 1794 djohnson FileUtil.listFiles now returns List.
* 06/13/13 2044 randerso Refactored to use IFPServer
* Sep 05, 2013 2307 dgilling Use better PythonScript constructor.
* Oct 16, 2013 2475 dgilling Move logic previously in IrtServer.py
* into this class to avoid Jep memory leak.
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Jul 14, 2009 1995 bphillip Initial creation
* Mar 14, 2013 1794 djohnson FileUtil.listFiles now returns List.
* Jun 13, 2013 2044 randerso Refactored to use IFPServer
* Sep 05, 2013 2307 dgilling Use better PythonScript constructor.
* Oct 16, 2013 2475 dgilling Move logic previously in IrtServer.py
* into this class to avoid Jep memory leak.
* Mar 11, 2015 4128 dgilling Refactored to match refactored IRTManager.
*
* </pre>
*
* @author bphillip
* @version 1
* @version 1.0
*/
public class GfeIRT extends Thread {
public final class GfeIRT implements Runnable {
/** The logger */
private static final transient IUFStatusHandler statusHandler = UFStatus
private static final IUFStatusHandler statusHandler = UFStatus
.getHandler(GfeIRT.class);
private static final String PYTHON_INSTANCE = "irt";
@ -103,30 +102,33 @@ public class GfeIRT extends Thread {
/** The Python script object */
private PythonScript script;
/**
* Map of threads used to unregister sites from the IRT server upon shutdown
*/
private static Map<String, Thread> shutdownHooks = new ConcurrentHashMap<String, Thread>();
private final IRTManager irtMgr;
private final String ancfUrl;
private final String bncfUrl;
/**
* Creates a new GfeIRT object for the provided site ID
*
* @param siteID
* @param siteid
* The site ID to create the GfeIRT object for
* @throws GfeConfigurationException
* If the GFE configuration for the specified site could not be
* loaded.
* @param config
* @param irtMgr
*/
public GfeIRT(String siteid, IFPServerConfig config)
throws GfeConfigurationException {
this.setDaemon(true);
public GfeIRT(String siteid, IFPServerConfig config, IRTManager irtMgr) {
this.siteID = siteid;
this.mhsID = config.getMhsid();
this.irtMgr = irtMgr;
this.serverHost = config.getServerHost();
this.serverPort = config.getRpcPort();
this.serverProtocol = config.getProtocolVersion();
this.ancfUrl = config.iscRoutingTableAddress().get("ANCF");
this.bncfUrl = config.iscRoutingTableAddress().get("BNCF");
GridLocation domain = config.dbDomain();
this.gridProj = domain.getProjection().getProjectionID().toString();
@ -188,23 +190,10 @@ public class GfeIRT extends Thread {
}
config.setRequestedISCsites(this.iscWfosWanted);
}
Thread hook = new Thread() {
@Override
public void run() {
statusHandler.info("Unregistering site [" + siteID
+ "] from IRT server...");
IRTManager.getInstance().disableISC(mhsID, siteID);
statusHandler.info("Site [" + siteID + "] unregistered!");
}
};
java.lang.Runtime.getRuntime().addShutdownHook(hook);
shutdownHooks.put(mhsID + siteID, hook);
}
@Override
public void run() {
try {
IPathManager pathMgr = PathManagerFactory.getPathManager();
LocalizationContext cx = pathMgr.getContext(
@ -215,30 +204,29 @@ public class GfeIRT extends Thread {
String includePath = PyUtil.buildJepIncludePath(
GfePyIncludeUtil.getCommonPythonIncludePath(),
GfePyIncludeUtil.getIscScriptsIncludePath(),
GfePyIncludeUtil.getGfeConfigIncludePath(this.siteID));
this.script = new PythonScript(scriptPath, includePath, getClass()
GfePyIncludeUtil.getGfeConfigIncludePath(siteID));
script = new PythonScript(scriptPath, includePath, getClass()
.getClassLoader());
IFPServerConfig config = IFPServerConfigManager
.getServerConfig(siteID);
Map<String, Object> initArgs = new HashMap<String, Object>(2, 1f);
initArgs.put("ancfURL", config.iscRoutingTableAddress().get("ANCF"));
initArgs.put("bncfURL", config.iscRoutingTableAddress().get("BNCF"));
this.script.instantiatePythonClass(PYTHON_INSTANCE, "IrtAccess",
initArgs.put("ancfURL", ancfUrl);
initArgs.put("bncfURL", bncfUrl);
script.instantiatePythonClass(PYTHON_INSTANCE, "IrtAccess",
initArgs);
} catch (GfeConfigurationException e) {
throw new RuntimeException("Could not load GFE configuration", e);
} catch (JepException e) {
throw new RuntimeException(
"Could not instantiate IRT python script instance", e);
statusHandler.error(
"Could not instantiate IRT python script instance for site "
+ siteID, e);
statusHandler.error("ISC is disabled for site " + siteID);
return;
}
try {
// upon any overall failure, start thread over
while (IRTManager.getInstance().isRegistered(mhsID, siteID)) {
while (irtMgr.shouldRegister(siteID)) {
try {
// do initial registration, keep trying until successful
while (IRTManager.getInstance().isRegistered(mhsID, siteID)) {
while (irtMgr.shouldRegister(siteID)) {
statusHandler
.info("performing initial IRT registration.");
@ -259,11 +247,10 @@ public class GfeIRT extends Thread {
if (okay) {
break;
} else if (!IRTManager.getInstance().isRegistered(
mhsID, siteID)) {
} else if (!irtMgr.shouldRegister(siteID)) {
break; // exit processing loop
} else {
sleep(3 * TimeUtil.MILLIS_PER_SECOND);
Thread.sleep(3 * TimeUtil.MILLIS_PER_SECOND);
}
}
@ -271,8 +258,9 @@ public class GfeIRT extends Thread {
// for re-register every few seconds, check the StopIRT flag
// every few seconds
statusHandler.info("initial IRT registration complete.");
while (IRTManager.getInstance().isRegistered(mhsID, siteID)) {
sleep(3 * TimeUtil.MILLIS_PER_SECOND); // wait 3 seconds
while (irtMgr.shouldRegister(siteID)) {
Thread.sleep(3 * TimeUtil.MILLIS_PER_SECOND); // wait 3
// seconds
Boolean status1 = (Boolean) script.execute(
"checkForReregister", PYTHON_INSTANCE, null);
@ -302,23 +290,4 @@ public class GfeIRT extends Thread {
}
}
}
/**
* Removes the site's entry from the shutdown hook map
*
* @param mhsid
* The MHS ID of the site
* @param siteid
* The Site ID of the site
*/
public void removeShutdownHook(String mhsid, String siteid) {
if (shutdownHooks.containsKey(mhsid + siteid)) {
Thread hook = shutdownHooks.get(mhsid + siteid);
try {
Runtime.getRuntime().removeShutdownHook(hook);
} catch (IllegalStateException e) {
// Ignore. Shutdown in progress
}
}
}
}

View file

@ -0,0 +1,94 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
*
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
*
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8
* Omaha, NE 68106
* 402.291.0100
*
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
package com.raytheon.edex.plugin.gfe.isc;
import com.raytheon.edex.plugin.gfe.config.IFPServerConfig;
/**
* An interface for beans that provide ISC services for
* {@code IscServiceProvider}. This bean, once registered with
* {@code IscServiceProvider} will run on only one of the available EDEX cluster
* nodes. The {@code IscServiceProvider} ensures that dependent services all run
* together on the same node.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Mar 11, 2015 dgilling Initial creation
*
* </pre>
*
* @author dgilling
* @version 1.0
*/
public interface IISCServiceBean {
/**
* Called upon activation of a new GFE site. Will only trigger on the
* cluster node currently hosting ISC services and if
* {@code gfeConfig.requestISC()} returns {@code true}.
*
* @param siteID
* Site identifier to activate ISC services for.
* @param gfeConfig
* Configuration data for this site.
*/
void activateSite(final String siteID, final IFPServerConfig gfeConfig);
/**
* Called upon deactivation of a GFE site. Will only trigger on the cluster
* node currently hosting ISC services.
*
* @param siteID
* Site identifier to deactivate ISC services for.
*/
void deactivateSite(final String siteID);
/**
* The startup method for this bean. Should be used to initialize heavy
* objects that shouldn't be allowed to run on both cluster nodes to
* conserve system resources.
*/
void startup();
/**
* Called to begin the shutdown process for this bean. Recommend using this
* method to cancel any asynchronous tasks this bean may be running.
* <p>
* Note that this method does not require that the startup method has
* previously been called so ensure this code does not rely on any behaviors
* of that method.
*/
void preShutdown();
/**
* Called after {@code IscServiceProvider} has completed its shutdown. One
* last chance to cleanup any resources in use by this bean.
* <p>
* Note that this method does not require that the startup method has
* previously been called so ensure this code does not rely on any behaviors
* of that method.
*/
void postShutdown();
}

View file

@ -20,15 +20,21 @@
package com.raytheon.edex.plugin.gfe.isc;
import java.lang.Thread.State;
import java.util.Map;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.CopyOnWriteArraySet;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.RejectedExecutionException;
import com.raytheon.edex.plugin.gfe.config.IFPServerConfig;
import com.raytheon.uf.common.dataplugin.gfe.exception.GfeException;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.status.UFStatus.Priority;
/**
* Manages interactions for the IRT server used with the GFE ISC capability
@ -41,89 +47,138 @@ import com.raytheon.uf.common.dataplugin.gfe.exception.GfeException;
* ------------ ---------- ----------- --------------------------
* 08/10/09 1995 bphillip Initial creation
* 06/13/13 2044 randerso Refactored to use IFPServer
* 03/11/15 4128 dgilling Refactored to use ISCServiceProvider.
*
* </pre>
*
* @author bphillip
* @version 1
*/
public class IRTManager {
public final class IRTManager {
/** The logger */
protected transient Log logger = LogFactory.getLog(getClass());
/** The singleton instance */
private static IRTManager instance;
private final IUFStatusHandler statusHandler = UFStatus
.getHandler(IRTManager.class);
/** Map of active IRT connections keyed by site */
private Map<String, GfeIRT> irtMap;
private final ConcurrentMap<String, Future<?>> irtMap;
/**
* Gets the singleton instance of the IRTManager
*
* @return The singleton instance of the IRTManager
*/
public static synchronized IRTManager getInstance() {
if (instance == null) {
instance = new IRTManager();
}
/** List of valid ISC sites. */
private final Set<String> registeredSiteIDs;
return instance;
}
private ExecutorService jobExecutor;
/**
* Constructs the singleton instance of the IRT Manager
*/
private IRTManager() {
irtMap = new ConcurrentHashMap<String, GfeIRT>();
public IRTManager() {
this.irtMap = new ConcurrentHashMap<>();
this.registeredSiteIDs = new CopyOnWriteArraySet<>();
}
/**
* Enables ISC functionality for a site
* Determines whether the specified site should continue to (re-) register
* with IRT.
*
* @param siteID
* The site to activate ISC functionality for
* @param config
* server configuration
* @throws GfeException
* If the ISC functionality cannot be activated
* Site identifier to check for.
* @return {@code true} if the site should continue registration with IRT.
* {@code false} if not.
*/
public void enableISC(String siteID, IFPServerConfig config)
throws GfeException {
String mhsID = config.getMhsid();
if (!irtMap.containsKey(mhsID + "--" + siteID)) {
irtMap.put(mhsID + "--" + siteID, new GfeIRT(siteID, config));
}
logger.info("Starting IRT registration thread for site [" + siteID
+ "]");
irtMap.get(mhsID + "--" + siteID).start();
public boolean shouldRegister(final String siteID) {
/*
* We use this separate Set to hold site IDs to avoid a race condition.
* While it would be more convenient to use the keys of the irtMap to
* maintain the list of sites that should be attempting to register with
* IRT, this will cause a race condition when the Runnable's attempt to
* call this method. It's likely the job will hit the shouldRegister()
* check before the Future has been added to the Map and thus fail to
* ever attempt registration with IRT.
*/
return registeredSiteIDs.contains(siteID);
}
/**
* Disables ISC functionality for a site
* Register the given site with the IRT server.
*
* @param siteID
* The site to disable ISC functionality for
* Site identifier for the site to register with the IRT server.
* @param gfeConfig
* The {@code IFPServerConfig} configuration data for the site.
*/
public void disableISC(String mhsID, String siteID) {
GfeIRT gfeIrt = null;
String irtKey = mhsID + "--" + siteID;
gfeIrt = irtMap.remove(irtKey);
if (gfeIrt != null) {
if (gfeIrt.getState() != null) {
while (!gfeIrt.getState().equals(State.TERMINATED)) {
}
public void activateSite(String siteID, IFPServerConfig gfeConfig) {
if (!irtMap.containsKey(siteID)) {
statusHandler.info("Starting IRT registration thread for site ["
+ siteID + "]");
registeredSiteIDs.add(siteID);
Runnable job = constructJob(siteID, gfeConfig);
try {
Future<?> future = jobExecutor.submit(job);
irtMap.put(siteID, future);
} catch (RejectedExecutionException e) {
statusHandler.handle(Priority.PROBLEM,
"Unable to submit fetchAT job for execution:", e);
irtMap.remove(siteID);
}
// Remove the shutdown hook so an unregister is not attempted upon
// shutdown
gfeIrt.removeShutdownHook(mhsID, siteID);
}
}
public boolean isRegistered(String mhsID, String siteID) {
boolean registered = irtMap.containsKey(mhsID + "--" + siteID);
return registered;
private GfeIRT constructJob(final String siteID,
final IFPServerConfig config) {
return new GfeIRT(siteID, config, this);
}
/**
* Unregisters the given site with the IRT server.
*
* @param siteID
* Site identifier of the site to unregister.
*/
public void deactivateSite(String siteID) {
registeredSiteIDs.remove(siteID);
Future<?> job = irtMap.remove(siteID);
if (job != null) {
statusHandler.info("Deactivating IRT registration thread for "
+ siteID);
job.cancel(false);
}
}
/**
* Startup hook for this bean. Initializes job pool.
*/
public void preStart() {
statusHandler.info("Initializing IRTManager...");
jobExecutor = Executors.newCachedThreadPool();
}
/**
* Preliminary shutdown hook for this bean. Stops all running IRT
* registration jobs and initiates shutdown of the job pool.
*/
public void preStop() {
statusHandler.info("Shutting down IRTManager...");
Collection<String> siteIds = new ArrayList<>(registeredSiteIDs);
for (String siteId : siteIds) {
deactivateSite(siteId);
}
if (jobExecutor != null) {
jobExecutor.shutdown();
}
}
/**
* Shutdown completion hook for this bean. Clears all saved state for this
* bean.
*/
public void postStop() {
jobExecutor = null;
irtMap.clear();
registeredSiteIDs.clear();
}
}

View file

@ -0,0 +1,230 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
*
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
*
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8
* Omaha, NE 68106
* 402.291.0100
*
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
package com.raytheon.edex.plugin.gfe.isc;
import java.util.ArrayList;
import java.util.Collection;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import com.raytheon.edex.plugin.gfe.config.IFPServerConfig;
import com.raytheon.edex.plugin.gfe.server.IFPServer;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.edex.core.IContextStateProcessor;
/**
* An {@code IContextStateProcessor} implementation for ISC beans. Ensures that
* all ISC services are running on the same cluster node together.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Mar 11, 2015 #4128 dgilling Initial creation
*
* </pre>
*
* @author dgilling
* @version 1.0
*/
public final class IscServiceProvider implements IContextStateProcessor {
private final IUFStatusHandler statusHandler = UFStatus
.getHandler(IscServiceProvider.class);
private volatile boolean activeInstance;
private final Collection<IISCServiceBean> iscBeans;
private final ExecutorService jobThreads;
private final IRTManager irtManager;
/**
* Default constructor.
*/
public IscServiceProvider() {
this.iscBeans = new ArrayList<>();
this.activeInstance = false;
this.jobThreads = Executors.newCachedThreadPool();
this.irtManager = new IRTManager();
}
/**
* Register a new {@code IISCServiceBean} instance with this class. Beans
* can only be added and never removed.
*
* @param iscServiceBean
* The bean to register.
* @return The bean that was registered.
*/
public IISCServiceBean addISCService(final IISCServiceBean iscServiceBean) {
iscBeans.add(iscServiceBean);
return iscServiceBean;
}
/*
* (non-Javadoc)
*
* @see com.raytheon.uf.edex.core.IContextStateProcessor#preStart()
*/
@Override
public void preStart() {
activeInstance = true;
irtManager.preStart();
for (IISCServiceBean iscBean : iscBeans) {
iscBean.startup();
}
for (IFPServer ifpServer : IFPServer.getActiveServers()) {
activateSite(ifpServer.getSiteId(), ifpServer.getConfig());
}
}
/*
* (non-Javadoc)
*
* @see com.raytheon.uf.edex.core.IContextStateProcessor#postStart()
*/
@Override
public void postStart() {
// no-op
}
/*
* (non-Javadoc)
*
* @see com.raytheon.uf.edex.core.IContextStateProcessor#preStop()
*/
@Override
public void preStop() {
irtManager.preStop();
for (IISCServiceBean iscBean : iscBeans) {
iscBean.preShutdown();
}
}
/*
* (non-Javadoc)
*
* @see com.raytheon.uf.edex.core.IContextStateProcessor#postStop()
*/
@Override
public void postStop() {
irtManager.postStop();
for (IISCServiceBean iscBean : iscBeans) {
iscBean.postShutdown();
}
}
/**
* Dummy trigger method for the timer in the camel context this bean
* monitors. Ensures this bean properly fails over between cluster members
* as needed.
*/
public void activateInstance() {
activeInstance = true;
}
/**
* Activate the ISC services for the given site. All registered beans will
* have their {@code activateSite} method called if this instance is running
* on the designated ISC cluster node.
*
* @param siteID
* Site identifier to activate ISC services for.
* @param config
* Configuration data for this site.
*/
public void activateSite(final String siteID, final IFPServerConfig config) {
statusHandler.info("Checking ISC configuration for site " + siteID);
if (config.requestISC()) {
if (activeInstance) {
statusHandler.info("Enabling ISC for site " + siteID);
irtManager.activateSite(siteID, config);
for (final IISCServiceBean bean : iscBeans) {
Runnable activationJob = new Runnable() {
@Override
public void run() {
try {
bean.activateSite(siteID, config);
} catch (Throwable t) {
statusHandler.error(
"Unhandled RuntimeException thrown while activating service "
+ bean.getClass()
+ " for site " + siteID, t);
}
}
};
jobThreads.submit(activationJob);
}
} else {
statusHandler
.info("ISC Enabled but will use another EDEX instance");
}
} else {
statusHandler.info("ISC is not enabled.");
}
}
/**
* Deactivates the ISC services for the given site. All registered beans
* will have their {@code deactivateSite} method called if this instance is
* running on the designated ISC cluster node.
*
* @param siteID
* Site identifier to deactivate ISC services for.
*/
public void deactivateSite(final String siteID) {
if (activeInstance) {
irtManager.deactivateSite(siteID);
for (final IISCServiceBean bean : iscBeans) {
Runnable deactivationJob = new Runnable() {
@Override
public void run() {
try {
bean.deactivateSite(siteID);
} catch (Throwable t) {
statusHandler.error(
"Unhandled RuntimeException thrown while deactivating service "
+ bean.getClass() + " for site "
+ siteID, t);
}
}
};
jobThreads.submit(deactivationJob);
}
}
}
}

View file

@ -0,0 +1,158 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
*
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
*
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8
* Omaha, NE 68106
* 402.291.0100
*
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
package com.raytheon.edex.plugin.gfe.isc;
import java.util.HashMap;
import java.util.Map;
import jep.JepException;
import com.raytheon.edex.plugin.gfe.config.IFPServerConfig;
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.python.PyUtil;
import com.raytheon.uf.common.python.PythonScript;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.util.FileUtil;
import com.raytheon.uf.edex.activetable.ActiveTablePyIncludeUtil;
import com.raytheon.uf.edex.core.EDEXUtil;
/**
* Bean to run requestTCV at GFE site activation time.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Mar 11, 2015 #4128 dgilling Initial creation
*
* </pre>
*
* @author dgilling
* @version 1.0
*/
public final class RequestTCVSrv implements IISCServiceBean {
private final IUFStatusHandler statusHandler = UFStatus
.getHandler(RequestTCVSrv.class);
/*
* (non-Javadoc)
*
* @see
* com.raytheon.edex.plugin.gfe.isc.IISCServiceBean#activateSite(java.lang
* .String, com.raytheon.edex.plugin.gfe.config.IFPServerConfig)
*/
@Override
public void activateSite(String siteID, IFPServerConfig gfeConfig) {
EDEXUtil.waitForRunning();
requestTCVFiles(siteID, gfeConfig);
}
private void requestTCVFiles(String siteId, IFPServerConfig config) {
statusHandler.info("Running requestTCV for site " + siteId);
IPathManager pathMgr = PathManagerFactory.getPathManager();
LocalizationContext commonBaseCx = pathMgr.getContext(
LocalizationType.COMMON_STATIC, LocalizationLevel.BASE);
String scriptPath = pathMgr.getFile(commonBaseCx,
FileUtil.join(ActiveTablePyIncludeUtil.VTEC, "requestTCV.py"))
.getPath();
String pythonIncludePath = PyUtil.buildJepIncludePath(
ActiveTablePyIncludeUtil.getCommonPythonIncludePath(),
ActiveTablePyIncludeUtil.getCommonGfeIncludePath(),
ActiveTablePyIncludeUtil.getVtecIncludePath(siteId),
ActiveTablePyIncludeUtil.getGfeConfigIncludePath(siteId),
ActiveTablePyIncludeUtil.getIscScriptsIncludePath());
PythonScript script = null;
try {
script = new PythonScript(scriptPath, pythonIncludePath, this
.getClass().getClassLoader());
try {
Map<String, Object> argMap = new HashMap<String, Object>();
argMap.put("siteID", siteId);
argMap.put("config", config);
script.execute("runFromJava", argMap);
} catch (JepException e) {
statusHandler.error("Error executing requestTCV.", e);
}
} catch (JepException e) {
statusHandler
.error("Unable to instantiate requestTCV python script object.",
e);
} finally {
if (script != null) {
script.dispose();
}
}
}
/*
* (non-Javadoc)
*
* @see
* com.raytheon.edex.plugin.gfe.isc.IISCServiceBean#deactivateSite(java.
* lang.String)
*/
@Override
public void deactivateSite(String siteID) {
// no-op
}
/*
* (non-Javadoc)
*
* @see com.raytheon.edex.plugin.gfe.isc.IISCServiceBean#startup()
*/
@Override
public void startup() {
// no-op
}
/*
* (non-Javadoc)
*
* @see com.raytheon.edex.plugin.gfe.isc.IISCServiceBean#preShutdown()
*/
@Override
public void preShutdown() {
// no-op
}
/*
* (non-Javadoc)
*
* @see com.raytheon.edex.plugin.gfe.isc.IISCServiceBean#postShutdown()
*/
@Override
public void postShutdown() {
// no-op
}
}

View file

@ -30,7 +30,6 @@ import java.util.Set;
import com.raytheon.edex.plugin.gfe.cache.gridlocations.GridLocationCache;
import com.raytheon.edex.plugin.gfe.config.IFPServerConfig;
import com.raytheon.edex.plugin.gfe.db.dao.IscSendRecordDao;
import com.raytheon.edex.plugin.gfe.isc.IRTManager;
import com.raytheon.edex.plugin.gfe.reference.MapManager;
import com.raytheon.edex.plugin.gfe.server.database.NetCDFDatabaseManager;
import com.raytheon.edex.plugin.gfe.server.database.TopoDatabaseManager;
@ -46,7 +45,6 @@ import com.raytheon.uf.common.dataplugin.message.DataURINotificationMessage;
import com.raytheon.uf.common.dataplugin.satellite.SatelliteRecord;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.status.UFStatus.Priority;
import com.raytheon.uf.edex.database.DataAccessLayerException;
/**
@ -63,6 +61,7 @@ import com.raytheon.uf.edex.database.DataAccessLayerException;
* May 30, 2013 #2044 randerso Initial creation
* Nov 20, 2013 #2331 randerso Added getTopoData method
* Oct 07, 2014 #3684 randerso Restructured IFPServer start up
* Mar 11, 2015 #4128 dgilling Remove unregister from IRT to IRTManager.
*
* </pre>
*
@ -210,16 +209,11 @@ public class IFPServer {
}
private void dispose() {
if (config.requestISC()) {
IRTManager.getInstance().disableISC(config.getMhsid(), siteId);
}
try {
new IscSendRecordDao().deleteForSite(siteId);
} catch (DataAccessLayerException e) {
statusHandler.handle(Priority.PROBLEM,
"Could not clear IscSendRecords for site " + siteId
+ " from queue.", e);
statusHandler.error("Could not clear IscSendRecords for site "
+ siteId + " from queue.", e);
}
// TODO necessary?

View file

@ -26,6 +26,7 @@
# Date Ticket# Engineer Description
# ------------ ---------- ----------- --------------------------
# 12/05/14 4953 randerso Changed to use LocalizationSupport
# 03/10/2015 #4129 randerso Fixed error logging
#
##
@ -225,7 +226,7 @@ def createAreaDictionary(outputDir, mapDict):
if areadict.has_key(ean) and d != areadict[ean]:
LogStream.logDiag("Mismatch of definitions in " +\
LogStream.logProblem("Mismatch of definitions in " +\
"AreaDictionary creation. EditAreaName=", ean,
"AreaDict=\n", areadict[ean], "\nIgnored=\n", d)
else:

View file

@ -35,6 +35,7 @@
# ------------ ---------- ----------- --------------------------
# 12/10/14 #4953 randerso Cleaned up imports,
# improved spawning of shell cmd
# 03/10/2015 #4129 randerso Refactored server selection code into a reusable method
#
##
@ -49,12 +50,15 @@ import iscUtil
class IrtAccess():
#Constructor taking the web URL for the ISC Routing Table
def __init__(self, ancfURL=None, bncfURL=None):
def __init__(self, ancfURL=None, bncfURL=None, logger=None):
self.__addrs = {}
self.__addrs['ANCF'] = ancfURL
self.__addrs['BNCF'] = bncfURL
self.__registered = None #flag to indicate whether we registered
self.__logger=iscUtil.getLogger("irtAccess","irtServer.log")
if logger is not None:
self.__logger=logger
else:
self.__logger=iscUtil.getLogger("irtAccess","irtServer.log")
def logEvent(self,*msg):
self.__logger.info(iscUtil.tupleToString(*msg))
@ -527,3 +531,118 @@ class IrtAccess():
s = "mhs=" + mhsid + ",host=" + host + ",port=" + port +\
",proto=" + protocol + ",site=" + site
return s
def createDestinationXML(self, destSites, requestingServer):
#--------------------------------------------------------------------
# Assemble XML source/destination document
#--------------------------------------------------------------------
iscE = ElementTree.Element('isc')
self.addSourceXML(iscE, requestingServer)
self.logEvent("Requesting Server:", self.printServerInfo(requestingServer))
# who is running the domains requested?
status, xml = self.getServers(destSites)
if not status:
raise Exception('Failure to getServers from IRT')
# decode the XML
try:
serverTree = ElementTree.ElementTree(ElementTree.XML(xml))
serversE = serverTree.getroot()
except:
self.logException("Malformed XML from getServers()")
raise
if serversE.tag != "servers":
raise Exception("Servers packet missing from web server")
# process each requested domain returned to us
msgSendDest = []
chosenServers = []
matchingServers = []
for domainE in serversE:
if domainE.tag != "domain":
continue
domain = domainE.get('site')
servers = [] #list of servers for this domain
# decode each server in the domain
for addressE in domainE.getchildren():
info = self.decodeXMLAddress(addressE)
if info is None:
continue #not address tag
servers.append(info)
matchingServers.append(info)
# server search list in priority. The px3 entries are used for
# dual domain for AFC.
hp = [('dx4','98000000'),('px3', '98000000'), ('dx4','98000001'),
('px3', '98000001')]
# choose one server from this domain, find first dx4, 98000000
# try to use one with the same mhsidDest as the site, which
# would be the primary operational GFE. Note that the px3 entries
# are for AFC.
found = False
for matchServer, matchPort in hp:
if found:
break
for server in servers:
if server['host'][0:3] == matchServer and \
server['port'] == matchPort and server['mhsid'] == domain:
chosenServers.append(server)
if server['mhsid'] not in msgSendDest:
msgSendDest.append(server['mhsid'])
found = True
break
# find first dx4, 98000000, but perhaps a different mhsid
# this is probably not the primary operational GFE
for matchServer, matchPort in hp:
if found:
break
for server in servers:
if server['host'][0:3] == matchServer and \
server['port'] == matchPort:
chosenServers.append(server)
if server['mhsid'] not in msgSendDest:
msgSendDest.append(server['mhsid'])
found = True
break
# if didn't find standard one, then take the first one, but don't
# take ourselves unless we are the only one.
if not found and servers:
for server in servers:
if server['mhsid'] != requestingServer['mhsid'] \
and server['host'] != requestingServer['host'] \
and server['port'] != requestingServer['port'] \
and server['site'] != requestingServer['site']:
chosenServers.append(server)
if server['mhsid'] not in msgSendDest:
msgSendDest.append(server['mhsid'])
found = True
break;
if not found:
chosenServers.append(servers[0])
if servers[0]['mhsid'] not in msgSendDest:
msgSendDest.append(servers[0]['mhsid'])
# Display the set of matching servers
s = "Matching Servers:"
for x in matchingServers:
s += "\n" + self.printServerInfo(x)
self.logEvent(s)
# Display the chosen set of servers
s = "Chosen Servers:"
for x in chosenServers:
s += "\n" + self.printServerInfo(x)
self.logEvent(s)
self.addDestinationXML(iscE, chosenServers)
return msgSendDest, iscE

View file

@ -24,6 +24,7 @@ import LogStream, tempfile, os, sys, JUtil, subprocess, traceback, errno
import time, copy, string, iscUtil
from com.raytheon.edex.plugin.gfe.isc import IRTManager
from subprocess import CalledProcessError
#
@ -47,6 +48,8 @@ from com.raytheon.edex.plugin.gfe.isc import IRTManager
# registration with IRT.
# 12/08/2014 4953 randerso Added support for sending/receiving TCV files
# Additional code clean up
# 03/05/2015 4129 randerso Fix exception handling on subprocess calls
# Fixed error when no TCV files were found
#
##
PURGE_AGE = 30 * 24 * 60 * 60 # 30 days in seconds
@ -157,9 +160,11 @@ def getVTECActiveTable(dataFile, xmlPacket):
args.append(fnameXML)
try:
output = subprocess.check_output(args, stderr=subprocess.STDOUT)
logEvent("sendAT command output: ", output)
except subprocess.CalledProcessError as e:
logProblem("sendAT returned error code: ", e.returncode, e.output)
except:
logProblem("Error executing sendAT: ", traceback.format_exc())
logEvent("sendAT command output: ", output)
#when we receive a requested active table from another site, this function
#is called from iscDataRec
@ -191,9 +196,11 @@ def putVTECActiveTable(dataFile, xmlPacket):
args.append(fnameXML)
try:
output = subprocess.check_output(args, stderr=subprocess.STDOUT)
logEvent("ingestAT command output: ", output)
except subprocess.CalledProcessError as e:
logProblem("ingestAT returned error code: ", e.returncode, e.output)
except:
logProblem("Error executing ingestAT: ", traceback.format_exc())
logEvent("ingesAT command output: ", output)
def putTCVFiles(siteID, tarFile):
import LocalizationSupport
@ -313,21 +320,24 @@ def getTCVFiles(ourMhsID, srcServer, destE):
fname = fp.name
try:
TCVUtil.packageTCVFiles(localSites, fname, getLogger())
if TCVUtil.packageTCVFiles(localSites, fname, getLogger()):
from xml.etree import ElementTree
from xml.etree.ElementTree import Element, SubElement
iscE = ElementTree.Element('isc')
irt.addSourceXML(iscE, destServer)
irt.addDestinationXML(iscE, [srcServer])
# create the XML file
with tempfile.NamedTemporaryFile(suffix='.xml', dir=tcvProductsDir, delete=False) as fd:
fnameXML = fd.name
fd.write(ElementTree.tostring(iscE))
# send the files to srcServer
sendMHSMessage("PUT_TCV_FILES", srcServer['mhsid'], [fname, fnameXML])
from xml.etree import ElementTree
from xml.etree.ElementTree import Element, SubElement
iscE = ElementTree.Element('isc')
irt.addSourceXML(iscE, destServer)
irt.addDestinationXML(iscE, [srcServer])
# create the XML file
with tempfile.NamedTemporaryFile(suffix='.xml', dir=tcvProductsDir, delete=False) as fd:
fnameXML = fd.name
fd.write(ElementTree.tostring(iscE))
# send the files to srcServer
sendMHSMessage("PUT_TCV_FILES", srcServer['mhsid'], [fname, fnameXML])
else:
logEvent('No TCV files to send')
except:
logException('Error sending TCV files for ' + str(localSites))
@ -502,14 +512,6 @@ def serviceISCRequest(dataFile):
ServiceISCRequest.serviceRequest(JUtil.pyValToJavaObj(info['parms']),xmlDestinations,siteConfig.GFESUITE_SITEID)
# ifpServer.serviceISCRequest(info['parms'], xmlDestinations)
# get servers direct call for IRT
def irtGetServers(ancfURL, bncfURL, iscWfosWanted):
import IrtAccess
irt = IrtAccess.IrtAccess(ancfURL, bncfURL)
xml = None
status, xml = irt.getServers(iscWfosWanted)
return xml
def sendMHSMessage(subject, adressees, attachments, xmtScript=None):
# Transmit the request -- do string substitution
import siteConfig

View file

@ -1,275 +0,0 @@
#!/usr/bin/env python
##
# 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.
##
from __future__ import with_statement
import getopt, sys, os, time, socket, threading, SocketServer, LogStream, select
import cPickle, stat, tempfile
import iscDataRec
from com.raytheon.edex.plugin.gfe.isc import IRTManager
#
# Port of msg_send script
#
# SOFTWARE HISTORY
#
# Date Ticket# Engineer Description
# ------------ ---------- ----------- --------------------------
# 07/06/09 1995 bphillip Initial Creation.
#
#
#
ISC_DATA_REC = "iscDataRec" # Assume it is on the PATH
class Server(object):
class Handler(SocketServer.StreamRequestHandler):
def handle(self):
func = cPickle.load(self.rfile)
print "func: ", func
if func == 'gettable':
with self.server.tlock:
msg = cPickle.dumps(self.server.table)
self.wfile.write(msg)
self.wfile.flush()
elif func == 'msg_send':
meta = cPickle.load(self.rfile)
print "meta: ", meta
nfiles = cPickle.load(self.rfile)
print "nfiles: ", nfiles
fnames = []
while nfiles > 0:
size = cPickle.load(self.rfile)
print "reading: ", size
fname = tempfile.mktemp()
fnames.append(fname)
fpout = open(fname, 'wb')
while size > 0:
buf = self.rfile.read(min(4096, size))
fpout.write(buf)
size = size - len(buf)
sys.stdout.write('.')
print "done size: ", size
fpout.close()
nfiles = nfiles - 1
iscDataRec.execIscDataRec(os.path.basename(fname), meta['subject'], fnames)
fnames.append(fname)
def __init__(self, wanid):
self.__shutdown = False
self.wanid = wanid
self.table = {}
self.tlock = threading.Lock()
self.tscan = time.time()
def discover(self):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(("0.0.0.0", 10000))
poll_interval = 1.0
while not self.__shutdown:
r, w, e = select.select([s], [], [], poll_interval)
if r:
data, addr = s.recvfrom(1024, socket.MSG_WAITALL)
if not data:
break
data = cPickle.loads(data)
if data[0] == "tcpaddr":
with self.tlock:
self.table[data[1]] = (addr[0], data[2], data[3])
now = time.time()
if now - self.tscan > 15:
dlist = []
for k, v in self.table.iteritems():
if now - v[2] > 15:
dlist.append(k)
for k in dlist:
del self.table[k]
self.tscan = now
#print "received packet: ", self.table
def broadcast(self):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.bind(("<broadcast>", 10000))
while not self.__shutdown:
# msg type, wanid, host, port, time of update.
msg = cPickle.dumps(("tcpaddr", self.wanid, self.addr[1],
time.time()))
s.sendto(msg, socket.MSG_WAITALL,
("<broadcast>", 10000))
time.sleep(5)
def startThreads(self):
LogStream.logEvent("Starting Threads")
self.t1 = threading.Thread(target=self.broadcast)
self.t1.setDaemon(True)
self.t1.start()
self.t2 = threading.Thread(target=self.discover)
self.t2.setDaemon(True)
self.t2.start()
def run(self):
LogStream.logEvent("Running with ShutDown Value:", self.__shutdown)
tcps = SocketServer.TCPServer(('', 0), self.Handler)
tcps.table = self.table
tcps.tlock = self.tlock
self.addr = tcps.server_address
self.startThreads()
poll_interval = 2.0
while not self.__shutdown:
r, w, e = select.select([tcps], [], [], poll_interval)
if r:
tcps.handle_request()
if IRTManager.getInstance().isRegistered(self.wanid) == False:
LogStream.logEvent("Shutting Down GFE Socket Server for site [", self.wanid, "]...")
self.__shutdown = True
LogStream.logEvent("Stopping Broadcast thread for site [", self.wanid, "]...")
self.t1.join()
LogStream.logEvent("Stopping Discovery thread for site [", self.wanid, "]...")
self.t2.join()
LogStream.logEvent("GFE Socket Server for site [", self.wanid, "] shut down")
def serve(wanid):
s = Server(wanid)
s.run()
def gettable():
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(("<broadcast>", 10000))
data, addr = s.recvfrom(1024, socket.MSG_WAITALL)
if not data:
pass # something bad happened.
data = cPickle.loads(data)
s.close()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((addr[0], data[2]))
s.sendall(cPickle.dumps("gettable"), socket.MSG_WAITALL)
data = s.recv(1024, socket.MSG_WAITALL)
data = cPickle.loads(data)
return data
def msg_send(addrs, files, meta):
table = gettable()
for addr in addrs:
if table.has_key(addr):
host, port, time = table[addr]
print "send to: ", host, port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
s.sendall(cPickle.dumps("msg_send"), socket.MSG_WAITALL)
s.sendall(cPickle.dumps(meta), socket.MSG_WAITALL)
s.sendall(cPickle.dumps(len(files)), socket.MSG_WAITALL)
fp = s.makefile('rw')
for f in files:
size = os.stat(f)[stat.ST_SIZE]
print "sending: ", f, size, "(bytes)"
s.sendall(cPickle.dumps(size), socket.MSG_WAITALL)
fpin = open(f, 'rb')
buf = fpin.read(4096)
while buf != "":
fp.write(buf)
buf = fpin.read(4096)
fpin.close()
fp.flush()
else:
print "No table entry for", addr,"in table"
print table
# typical args /awips/ops/bin/msg_send -s %SUBJECT -a %ADDRESSES -i %WMOID -c 11 -p 0 -e %ATTACHMENTS
def msg_send_main(args):
optlist, args = getopt.getopt(args, 'a:e:s:i:c:p:')
addrs = []
files = []
meta = {}
for opt in optlist:
k, v = opt
if k == '-a':
addrs = v.split(',')
elif k == '-e':
files = v.split(',')
elif k == '-s':
meta['subject'] = v
elif k == '-i':
meta['wmoid'] = v
msg_send(addrs, files, meta)
def usage(status=0):
print """Usage:
mmhs --help (This message)
mmhs --server=WANID --iscdr=/path/to/iscDataRec
(Start server mode where WANID is awips wan id)
msg_send [args] (run in msg_send mode [args are just like msg_send])
"""
sys.exit(status)
def main():
global ISC_DATA_REC
mode = os.path.basename(sys.argv[0])
if mode == 'msg_send':
msg_send_main(sys.argv[1:])
sys.exit(0)
# server mode
try:
optlist, args = getopt.getopt(sys.argv[1:], '',
['server=', 'iscdr='])
except (getopt.GetoptError, getopt.error):
usage(1)
mhid = ""
msg_args = []
for opt in optlist:
k, v = opt
if k == '--server':
mhid = v
elif k == '--iscdr':
ISC_DATA_REC = v
elif k == '--help':
usage()
else:
usage(1)
serve(mhid)
#if __name__ == "__main__":
# main()

View file

@ -107,6 +107,7 @@ import com.raytheon.uf.edex.database.query.DatabaseQuery;
* Feb 05, 2015 4099 randerso Fixed latest ETN query for year-end
* Feb 23, 2015 4127 dgilling Use cluster locking to only allow 1 active
* table write at a time.
* Mar 04, 2015 4129 randerso Pass active table change logger to ingestAt and/or MergeVTEC
*
* </pre>
*
@ -648,6 +649,7 @@ public class ActiveTable {
args.put("newRecords", newRecords);
args.put("drt", timeOffset);
args.put("makeBackups", makeBackup);
args.put("atChangeLog", changeLog);
if (runIngestAT) {
args.put("xmlIncoming", xmlSource);
}

View file

@ -35,8 +35,10 @@
# 01/24/14 #2504 randerso change to use iscUtil.getLogger for consistency
# 03/25/14 #2884 randerso Added xxxid to VTECChange
# 05/15/14 #3157 dgilling Support multiple TPC and SPC sites.
# 03/04/2015 #4129 randerso Log the active table changes at info level
# in the active table change log
#
##
import copy
import cPickle
@ -64,7 +66,7 @@ from com.raytheon.uf.common.activetable import VTECPartners as JavaVTECPartners
class MergeVTEC(VTECTableUtil.VTECTableUtil):
def __init__(self, activeTable, activeTableMode, newRecords, offsetSecs=0.0,
makeBackups=True, logger=None):
makeBackups=True, logger=None, atChangeLog=None):
# activeTable - current activeTable records
# activeTableMode - which table is being modified--OPERATIONAL or PRACTICE
# newRecords - records to merge in to activeTable
@ -125,7 +127,7 @@ class MergeVTEC(VTECTableUtil.VTECTableUtil):
self._log.info("Other Table squeezed size: %d", len(otherTable))
#merge the tables
updatedTable, toDelete, changes = self._mergeTable(activeTable, otherTable)
updatedTable, toDelete, changes = self._mergeTable(activeTable, otherTable, atChangeLog)
self._log.info("Updated Active Table size: %d", len(updatedTable))
updatedTable, tossRecordsMerged = vts.squeeze(updatedTable)
self._log.info("Updated Active Table squeeze size: %d",
@ -161,7 +163,7 @@ class MergeVTEC(VTECTableUtil.VTECTableUtil):
# merges the active and other table together and returns the merged
# table along with the list of changes that occurred.
def _mergeTable(self, activeTable, otherTable):
def _mergeTable(self, activeTable, otherTable, atChangeLog):
changes = []
purges = []
compare = ['id', 'phen', 'sig', 'officeid', 'etn', 'pil']
@ -342,30 +344,31 @@ class MergeVTEC(VTECTableUtil.VTECTableUtil):
changes.append(chgRec)
# log the changes
if len(missingEntriesAct):
self._log.debug("Active Missing entries added: %s",
self.printActiveTable(missingEntriesAct, 1))
if len(newReplaceEntriesAct):
self._log.debug("Active Replacement entries (new): %s",
self.printActiveTable(newReplaceEntriesAct, 1))
if len(oldReplaceEntriesAct):
self._log.debug("Active Entries Replaced (old): %s",
self.printActiveTable(oldReplaceEntriesAct, 1))
if len(missingEntriesPast):
self._log.debug("Past Missing entries added %s",
self.printActiveTable(missingEntriesPast, 1))
if len(newReplaceEntriesPast):
self._log.debug("Past Replacement entries (new): %s",
self.printActiveTable(newReplaceEntriesPast, 1))
if len(oldReplaceEntriesPast):
self._log.debug("Past Entries Replaced (old): %s",
self.printActiveTable(oldReplaceEntriesPast, 1))
if len(ignoredNewReplaceAct):
self._log.debug("Ignored Different Year Issuance (new): %s",
self.printActiveTable(ignoredNewReplaceAct, 1))
self._log.debug("Ignored Different Year Issuance (old): %s",
self.printActiveTable(ignoredOldReplaceAct, 1))
self._log.debug("Table Changes: %s", changes)
if atChangeLog is not None:
if len(missingEntriesAct):
atChangeLog.info("Active Missing entries added: " +
self.printActiveTable(missingEntriesAct, 1))
if len(newReplaceEntriesAct):
atChangeLog.info("Active Replacement entries (new): " +
self.printActiveTable(newReplaceEntriesAct, 1))
if len(oldReplaceEntriesAct):
atChangeLog.info("Active Entries Replaced (old): " +
self.printActiveTable(oldReplaceEntriesAct, 1))
if len(missingEntriesPast):
atChangeLog.info("Past Missing entries added " +
self.printActiveTable(missingEntriesPast, 1))
if len(newReplaceEntriesPast):
atChangeLog.info("Past Replacement entries (new): " +
self.printActiveTable(newReplaceEntriesPast, 1))
if len(oldReplaceEntriesPast):
atChangeLog.info("Past Entries Replaced (old): " +
self.printActiveTable(oldReplaceEntriesPast, 1))
if len(ignoredNewReplaceAct):
atChangeLog.info("Ignored Different Year Issuance (new): " +
self.printActiveTable(ignoredNewReplaceAct, 1))
atChangeLog.info("Ignored Different Year Issuance (old): " +
self.printActiveTable(ignoredOldReplaceAct, 1))
atChangeLog.info("Table Changes: " + str(changes))
purges.extend(oldReplaceEntriesAct)
purges.extend(oldReplaceEntriesPast)
@ -411,7 +414,7 @@ class MergeVTEC(VTECTableUtil.VTECTableUtil):
return iscUtil.getLogger("MergeVTEC", logLevel=logging.INFO)
def merge(activeTable, activeTableMode, newRecords, drt=0.0, makeBackups=True,
logger=None):
logger=None, atChangeLog=None):
pyActive = []
for i in range(activeTable.size()):
pyActive.append(ActiveTableRecord.ActiveTableRecord(activeTable.get(i)))
@ -420,7 +423,7 @@ def merge(activeTable, activeTableMode, newRecords, drt=0.0, makeBackups=True,
for i in range(newRecords.size()):
pyNew.append(ActiveTableRecord.ActiveTableRecord(newRecords.get(i)))
decoder = MergeVTEC(pyActive, activeTableMode, pyNew, drt, makeBackups, logger)
decoder = MergeVTEC(pyActive, activeTableMode, pyNew, drt, makeBackups, logger, atChangeLog)
mergeResults = decoder.getMergeResults()
decoder = None

View file

@ -26,6 +26,7 @@
# Date Ticket# Engineer Description
# ------------ ---------- ----------- --------------------------
# 12/12/14 4953 randerso Initial Creation.
# 03/10/2015 #4129 randerso Fixed error when no TCV files were found
#
##
import glob, os, subprocess, time
@ -69,11 +70,20 @@ def packageTCVFiles(siteList, fileName, logger):
for siteID in siteList:
tcvDir = os.path.join(siteID, "gfe", "tcvAdvisories")
found = False
for fileType in ["*.json", "*.allCAN"]:
path = os.path.join(tcvDir, fileType)
if len(glob.glob(os.path.join(siteDir, path))) > 0:
cmd += " " + path
logger.debug("cmd: '" + cmd + "'")
subprocess.check_call([cmd], shell=True)
found = True
if found:
logger.info("cmd: '" + cmd + "'")
try:
subprocess.check_call([cmd], shell=True)
except subprocess.CalledProcessError as e:
logger.error("cmd returned error code: ", e.returncode, e.output)
except:
loggger.exception("cmd threw exception")
return found

View file

@ -28,7 +28,9 @@
# ------------ ---------- ----------- --------------------------
# 02/13/13 1447 dgilling Initial Creation.
# 01/24/14 2504 randerso change to use iscUtil.getLogger for consistency
# 03/04/2015 4129 randerso Pass active table change logger through to MergeVtec.merge
#
##
import os
@ -48,7 +50,7 @@ def init_logging():
logger = iscUtil.getLogger("ingestAT", logLevel=logging.INFO)
def execute_ingest_at(incomingRecords, activeTable, atName, ztime, makeBackups, xmlIncoming):
def execute_ingest_at(incomingRecords, activeTable, atName, ztime, makeBackups, xmlIncoming, atChangeLog):
# log the source of this data
if xmlIncoming is not None:
irt = IrtAccess.IrtAccess("")
@ -63,20 +65,20 @@ def execute_ingest_at(incomingRecords, activeTable, atName, ztime, makeBackups,
results = None
try:
results = MergeVTEC.merge(activeTable, atName, incomingRecords, ztime, makeBackups,
logger)
logger, atChangeLog)
except:
logger.exception("MergeVTEC fail:")
return results
def runFromJava(activeTable, activeTableMode, newRecords, drt, makeBackups,
xmlIncoming):
xmlIncoming, atChangeLog=None):
init_logging()
logger.info('************* ingestAT ************************')
startT = time.time()
results = execute_ingest_at(newRecords, activeTable, activeTableMode, drt,
makeBackups, xmlIncoming)
makeBackups, xmlIncoming, atChangeLog=atChangeLog)
#--------------------------------------------------------------------
# Finish

View file

@ -29,6 +29,7 @@
# 02/06/13 1447 dgilling Initial Creation.
# 01/24/14 2504 randerso change to use iscUtil.getLogger for consistency
# 05/15/14 #3157 dgilling Support multiple TPC and SPC sites.
# 03/10/2015 #4129 randerso Refactored server selection code into a reusable method
#
#
@ -37,7 +38,7 @@ import os
import sys
import tempfile
import time
import xml.etree.ElementTree as ET
from xml.etree import ElementTree
import IrtAccess
import siteConfig
@ -115,125 +116,23 @@ def execute_request_at(serverHost, serverPort, serverProtocol, mhsid, siteID, an
buf = cPickle.dumps(data)
fp.write(buf)
#--------------------------------------------------------------------
# Assemble XML source/destination document
#--------------------------------------------------------------------
msgSendDest = [] #list of mhs sites to send request
sourceServer = {'mhsid' : mhsid,
'host' : serverHost,
'port' : serverPort,
'protocol': serverProtocol,
'site' : siteID}
irt = IrtAccess.IrtAccess(ancf, bncf)
iscE = ET.Element('isc')
# this is the requestor of the data
sourceServer = {'mhsid': mhsid, 'host': serverHost, 'port': serverPort,
'protocol': serverProtocol, 'site': siteID}
irt.addSourceXML(iscE, sourceServer)
logger.info("Requesting Server: " + irt.printServerInfo(sourceServer))
# who is running the domains requested?
sites = VTECPartners.VTEC_TABLE_REQUEST_SITES
if not sites:
logger.error('No sites defined for VTEC_TABLE_REQUEST_SITES')
sys.exit(1)
status, xml = irt.getServers(sites)
if not status:
logger.error('Failure to getServers from IRT')
sys.exit(1)
# decode the XML
try:
serverTree = ET.ElementTree(ET.XML(xml))
serversE = serverTree.getroot()
except:
logger.exception("Malformed XML on getServers()")
sys.exit(1)
if serversE.tag != "servers":
logger.error("Servers packet missing from web server")
sys.exit(1)
# process each requested domain returned to us
chosenServers = []
matchingServers = []
for domainE in serversE:
if domainE.tag != "domain":
continue
servers = [] #list of servers for this domain
# decode each server in the domain
for addressE in domainE.getchildren():
info = irt.decodeXMLAddress(addressE)
if info is None:
continue #not address tag
servers.append(info)
matchingServers.append(info)
# server search list in priority. The px3 entries are used for
# dual domain for AFC.
hp = [('dx4','98000000'),('px3', '98000000'), ('dx4','98000001'),
('px3', '98000001')]
# choose one server from this domain, find first dx4, 98000000
# try to use one with the same mhsidDest as the site, which
# would be the primary operational GFE. Note that the px3 entries
# are for AFC.
found = False
for matchServer, matchPort in hp:
for server in servers:
if server['host'][0:3] == matchServer and \
server['port'] == matchPort and server['mhsid'] == siteID:
chosenServers.append(server)
if server['mhsid'] not in msgSendDest:
msgSendDest.append(server['mhsid'])
found = True
break
# find first dx4, 98000000, but perhaps a different mhsid
# this is probably not the primary operational GFE
if not found:
for matchServer, matchPort in hp:
for server in servers:
if server['host'][0:3] == matchServer and \
server['port'] == matchPort:
chosenServers.append(server)
if server['mhsid'] not in msgSendDest:
msgSendDest.append(server['mhsid'])
found = True
break
# if didn't find standard one, then take the first one, but don't
# take ourselves unless we are the only one.
if not found and servers:
for server in servers:
if server['mhsid'] != mhsid and server['host'] != serverHost \
and server['port'] != serverPort and \
server['mhsid'] != siteID:
chosenServers.append(server)
if server['mhsid'] not in msgSendDest:
msgSendDest.append(server['mhsid'])
found = True
if not found:
chosenServers.append(servers[0])
if servers[0]['mhsid'] not in msgSendDest:
msgSendDest.append(servers[0]['mhsid'])
# Display the set of matching servers
s = "Matching Servers:"
for x in matchingServers:
s += "\n" + irt.printServerInfo(x)
logger.info(s)
# Display the chosen set of servers
s = "Chosen Servers:"
for x in chosenServers:
s += "\n" + irt.printServerInfo(x)
logger.info(s)
irt.addDestinationXML(iscE, chosenServers)
destSites = VTECPartners.VTEC_TABLE_REQUEST_SITES
if not destSites:
raise Exception('No destSites defined for VTEC_TABLE_REQUEST_SITES')
irt = IrtAccess.IrtAccess(ancf, bncf, logger=logger)
msgSendDest, xml = irt.createDestinationXML(destSites, sourceServer)
# create the XML file
with tempfile.NamedTemporaryFile(suffix='.xml', dir=tempdir, delete=False) as fd:
fnameXML = fd.name
fd.write(ET.tostring(iscE))
fd.write(ElementTree.tostring(xml))
#--------------------------------------------------------------------
# Now send the message

View file

@ -26,6 +26,7 @@
# Date Ticket# Engineer Description
# ------------ ---------- ----------- --------------------------
# 12/05/14 4953 randerso Initial Creation.
# 03/10/2015 #4129 randerso Refactored server selection code into a reusable method
#
##
import os, errno, tempfile
@ -43,134 +44,7 @@ def init_logging():
import iscUtil
import logging
global logger
logger = iscUtil.getLogger("requestTCV", logLevel=logging.DEBUG)
def createDestinationXML(siteID, host, port, protocol, mhsid, ancf, bncf, logger):
#--------------------------------------------------------------------
# Assemble XML source/destination document
#--------------------------------------------------------------------
msgSendDest = [] #list of mhs sites to send request
irt = IrtAccess.IrtAccess(ancf, bncf)
iscE = ElementTree.Element('isc')
# this is the requestor of the data
sourceServer = {'mhsid' : mhsid,
'host' : host,
'port' : port,
'protocol': protocol,
'site' : siteID}
irt.addSourceXML(iscE, sourceServer)
logger.info("Requesting Server: " + irt.printServerInfo(sourceServer))
# who is running the domains requested?
sites = VTECPartners.VTEC_TABLE_REQUEST_SITES
if not sites:
logger.error('No sites defined for VTEC_TABLE_REQUEST_SITES')
sys.exit(1)
status, xml = irt.getServers(sites)
if not status:
logger.error('Failure to getServers from IRT')
sys.exit(1)
# decode the XML
try:
serverTree = ElementTree.ElementTree(ElementTree.XML(xml))
serversE = serverTree.getroot()
except:
logger.exception("Malformed XML on getServers()")
sys.exit(1)
if serversE.tag != "servers":
logger.error("Servers packet missing from web server")
sys.exit(1)
# process each requested domain returned to us
chosenServers = []
matchingServers = []
for domainE in serversE:
if domainE.tag != "domain":
continue
servers = [] #list of servers for this domain
# decode each server in the domain
for addressE in domainE.getchildren():
info = irt.decodeXMLAddress(addressE)
if info is None:
continue #not address tag
# remove unneeded keys
for key in ['parms', 'area', 'domain']:
if info.has_key(key):
del info[key]
servers.append(info)
matchingServers.append(info)
# server search list in priority. The px3 entries are used for
# dual domain for AFC.
hp = [('dx4','98000000'),('px3', '98000000'), ('dx4','98000001'),
('px3', '98000001')]
# choose one server from this domain, find first dx4, 98000000
# try to use one with the same mhsidDest as the site, which
# would be the primary operational GFE. Note that the px3 entries
# are for AFC.
found = False
for matchServer, matchPort in hp:
for server in servers:
if server['host'][0:3] == matchServer and \
server['port'] == matchPort and server['mhsid'] == siteID:
chosenServers.append(server)
if server['mhsid'] not in msgSendDest:
msgSendDest.append(server['mhsid'])
found = True
break
# find first dx4, 98000000, but perhaps a different mhsid
# this is probably not the primary operational GFE
if not found:
for matchServer, matchPort in hp:
for server in servers:
if server['host'][0:3] == matchServer and \
server['port'] == matchPort:
chosenServers.append(server)
if server['mhsid'] not in msgSendDest:
msgSendDest.append(server['mhsid'])
found = True
break
# if didn't find standard one, then take the first one, but don't
# take ourselves unless we are the only one.
if not found and servers:
for server in servers:
if server['mhsid'] != mhsid and server['host'] != host \
and server['port'] != port and \
server['mhsid'] != siteID:
chosenServers.append(server)
if server['mhsid'] not in msgSendDest:
msgSendDest.append(server['mhsid'])
found = True
if not found:
chosenServers.append(server)
if servers[0]['mhsid'] not in msgSendDest:
msgSendDest.append(servers[0]['mhsid'])
# Display the set of matching servers
s = "Matching Servers:"
for x in matchingServers:
s += "\n" + irt.printServerInfo(x)
logger.info(s)
# Display the chosen set of servers
s = "Chosen Servers:"
for x in chosenServers:
s += "\n" + irt.printServerInfo(x)
logger.info(s)
irt.addDestinationXML(iscE, chosenServers)
return msgSendDest, iscE
logger = iscUtil.getLogger("requestTCV", logLevel=logging.INFO)
def runFromJava(siteID, config):
import siteConfig
@ -191,8 +65,19 @@ def runFromJava(siteID, config):
if e.errno != errno.EEXIST:
logger.warn("%s: '%s'" % (e.strerror,e.filename))
sourceServer = {'mhsid' : mhsid,
'host' : host,
'port' : port,
'protocol': protocol,
'site' : siteID}
try:
msgSendDest, xml = createDestinationXML(siteID, host, port, protocol, mhsid, ancf, bncf, logger)
destSites = VTECPartners.VTEC_TABLE_REQUEST_SITES
if not destSites:
raise Exception('No destSites defined for VTEC_TABLE_REQUEST_SITES')
irt = IrtAccess.IrtAccess(ancf, bncf, logger=logger)
msgSendDest, xml = irt.createDestinationXML(destSites, sourceServer)
# create the XML file
with tempfile.NamedTemporaryFile(suffix='.xml', dir=tempdir, delete=False) as fd:
fnameXML = fd.name
@ -204,7 +89,6 @@ def runFromJava(siteID, config):
if len(msgSendDest) > 0:
# Now send the message
irt = IrtAccess.IrtAccess(ancf, bncf)
irt.transmitFiles("GET_TCV_FILES", msgSendDest, mhsid, [fnameXML], xmtScript)
except:
logger.exception('Error requesting TCV files for site: ' + siteID)

View file

@ -29,6 +29,7 @@
# 02/08/13 1447 dgilling Initial Creation.
# 01/24/14 2504 randerso change to use iscUtil.getLogger for consistency
# 05/15/14 #3157 dgilling Support multiple TPC and SPC sites.
# 03/10/2015 #4129 randerso Removed sys.exit() call
#
#
@ -36,11 +37,10 @@
import cPickle
import gzip
import os
import sys
import time
import tempfile
import stat
import xml.etree.ElementTree as ET
from xml.etree import ElementTree
import IrtAccess
import JUtil
@ -170,7 +170,7 @@ def execute_send_at(myServerHost, myServerPort, myServerProtocol,
#--------------------------------------------------------------------
# Create the destination XML file
#--------------------------------------------------------------------
iscOut = ET.Element('isc')
iscOut = ElementTree.Element('isc')
irt.addSourceXML(iscOut, myServer)
destServers = []
@ -179,7 +179,7 @@ def execute_send_at(myServerHost, myServerPort, myServerProtocol,
with open(xmlIncoming,'rb') as fd:
xml = fd.read()
os.remove(xmlIncoming)
reqTree = ET.ElementTree(ET.XML(xml))
reqTree = ElementTree.ElementTree(ElementTree.XML(xml))
sourceE = reqTree.find('source')
for addressE in sourceE.getchildren():
destServer = irt.decodeXMLAddress(addressE)
@ -214,7 +214,7 @@ def execute_send_at(myServerHost, myServerPort, myServerProtocol,
tempdir = os.path.join(siteConfig.GFESUITE_HOME, "products", "ATBL")
with tempfile.NamedTemporaryFile(suffix='.xml', dir=tempdir, delete=False) as fd:
fnameXML = fd.name
fd.write(ET.tostring(iscOut))
fd.write(ElementTree.tostring(iscOut))
#--------------------------------------------------------------------
# Send it
@ -285,7 +285,7 @@ def runFromJava(myServerHost, myServerPort, myServerProtocol, myServerMHSID,
xmtScript)
except:
logger.exception('Error in sendAT:')
sys.exit(1)
raise
#--------------------------------------------------------------------
# Finish

View file

@ -26,6 +26,7 @@
# Date Ticket# Engineer Description
# ------------ ---------- ----------- --------------------------
# 12/05/14 4953 randerso Initial Creation.
# 03/10/2015 #4129 randerso Refactored server selection code into a reusable method
#
##
import os, errno, tempfile
@ -44,136 +45,9 @@ def init_logging():
import iscUtil
import logging
global logger
logger = iscUtil.getLogger("sendTCV", logLevel=logging.DEBUG)
logger = iscUtil.getLogger("sendTCV", logLevel=logging.INFO)
def createDestinationXML(siteID, host, port, protocol, mhsid, ancf, bncf, logger):
#--------------------------------------------------------------------
# Assemble XML source/destination document
#--------------------------------------------------------------------
msgSendDest = [] #list of mhs sites to send request
irt = IrtAccess.IrtAccess(ancf, bncf)
iscE = ElementTree.Element('isc')
# this is the requestor of the data
sourceServer = {'mhsid' : mhsid,
'host' : host,
'port' : port,
'protocol': protocol,
'site' : siteID}
irt.addSourceXML(iscE, sourceServer)
logger.info("Requesting Server: " + irt.printServerInfo(sourceServer))
# who is running the domains requested?
sites = VTECPartners.VTEC_TABLE_REQUEST_SITES
if not sites:
logger.error('No sites defined for VTEC_TABLE_REQUEST_SITES')
sys.exit(1)
status, xml = irt.getServers(sites)
if not status:
logger.error('Failure to getServers from IRT')
sys.exit(1)
# decode the XML
try:
serverTree = ElementTree.ElementTree(ElementTree.XML(xml))
serversE = serverTree.getroot()
except:
logger.exception("Malformed XML on getServers()")
sys.exit(1)
if serversE.tag != "servers":
logger.error("Servers packet missing from web server")
sys.exit(1)
# process each requested domain returned to us
chosenServers = []
matchingServers = []
for domainE in serversE:
if domainE.tag != "domain":
continue
servers = [] #list of servers for this domain
# decode each server in the domain
for addressE in domainE.getchildren():
info = irt.decodeXMLAddress(addressE)
if info is None:
continue #not address tag
# remove unneeded keys
for key in ['parms', 'area', 'domain']:
if info.has_key(key):
del info[key]
servers.append(info)
matchingServers.append(info)
# server search list in priority. The px3 entries are used for
# dual domain for AFC.
hp = [('dx4','98000000'),('px3', '98000000'), ('dx4','98000001'),
('px3', '98000001')]
# choose one server from this domain, find first dx4, 98000000
# try to use one with the same mhsidDest as the site, which
# would be the primary operational GFE. Note that the px3 entries
# are for AFC.
found = False
for matchServer, matchPort in hp:
for server in servers:
if server['host'][0:3] == matchServer and \
server['port'] == matchPort and server['mhsid'] == siteID:
if server['mhsid'] not in msgSendDest:
chosenServers.append(server)
msgSendDest.append(server['mhsid'])
found = True
break
# find first dx4, 98000000, but perhaps a different mhsid
# this is probably not the primary operational GFE
if not found:
for matchServer, matchPort in hp:
for server in servers:
if server['host'][0:3] == matchServer and \
server['port'] == matchPort:
if server['mhsid'] not in msgSendDest:
chosenServers.append(server)
msgSendDest.append(server['mhsid'])
found = True
break
# if didn't find standard one, then take the first one, but don't
# take ourselves unless we are the only one.
if not found and servers:
for server in servers:
if server['mhsid'] != mhsid and server['host'] != host \
and server['port'] != port and \
server['mhsid'] != siteID:
if server['mhsid'] not in msgSendDest:
chosenServers.append(server)
msgSendDest.append(server['mhsid'])
found = True
if not found:
if servers[0]['mhsid'] not in msgSendDest:
chosenServers.append(servers[0])
msgSendDest.append(servers[0]['mhsid'])
# Display the set of matching servers
s = "Matching Servers:"
for x in matchingServers:
s += "\n" + irt.printServerInfo(x)
logger.info(s)
# Display the chosen set of servers
s = "Chosen Servers:"
for x in chosenServers:
s += "\n" + irt.printServerInfo(x)
logger.info(s)
irt.addDestinationXML(iscE, chosenServers)
return msgSendDest, iscE
def runFromJava(siteID, config):
import siteConfig
host = str(config.getServerHost())
@ -201,25 +75,37 @@ def runFromJava(siteID, config):
with tempfile.NamedTemporaryFile(suffix='.sendtcv', dir=tcvProductsDir, delete=False) as fp:
fname = fp.name
try:
TCVUtil.packageTCVFiles([siteID], fname, logger)
sourceServer = {'mhsid' : mhsid,
'host' : host,
'port' : port,
'protocol': protocol,
'site' : siteID}
msgSendDest, xml = createDestinationXML(siteID, host, port, protocol, mhsid, ancf, bncf, logger)
# create the XML file
with tempfile.NamedTemporaryFile(suffix='.xml', dir=tcvProductsDir, delete=False) as fd:
fnameXML = fd.name
fd.write(ElementTree.tostring(xml))
# don't send to ourselves
if mhsid in msgSendDest:
msgSendDest.remove(mhsid)
try:
if TCVUtil.packageTCVFiles([siteID], fname, logger):
destSites = VTECPartners.VTEC_TABLE_REQUEST_SITES
if not destSites:
raise Exception('No destSites defined for VTEC_TABLE_REQUEST_SITES')
irt = IrtAccess.IrtAccess(ancf, bncf, logger=logger)
msgSendDest, xml = irt.createDestinationXML(destSites, sourceServer)
if len(msgSendDest) > 0:
# Now send the message
irt = IrtAccess.IrtAccess(ancf, bncf)
logger.debug("msgSendDest: "+ str(msgSendDest))
irt.transmitFiles("PUT_TCV_FILES", msgSendDest, mhsid, [fname, fnameXML], xmtScript)
# create the XML file
with tempfile.NamedTemporaryFile(suffix='.xml', dir=tcvProductsDir, delete=False) as fd:
fnameXML = fd.name
fd.write(ElementTree.tostring(xml))
# don't send to ourselves
if mhsid in msgSendDest:
msgSendDest.remove(mhsid)
if len(msgSendDest) > 0:
# Now send the message
logger.debug("msgSendDest: "+ str(msgSendDest))
irt.transmitFiles("PUT_TCV_FILES", msgSendDest, mhsid, [fname, fnameXML], xmtScript)
else:
logger.info('No TCV files to send')
except:
logger.exception('Error sending TCV files for site: ' + siteID)

View file

@ -9,11 +9,15 @@ ebxml-federation-sync-threads=3
ebxml-email.enabled=false
# The maximum number of events that will be batched and send
# in a registry replication notification
ebxml-notification-batch-size=200
ebxml-notification-batch-size=50
# The maximum number of threads that the ebxml registry will use for processing web requests
# This number must be >=5. As a general rule, the maximum number of connections should be:
# 5+{registries this registry is replicating to/from}=max-threads
ebxml-webserver-max-threads=8
# There is a bug in Jetty 8.1.15 that causes this to throw SSL_NOT_HANDSHAKE exceptions constantly
# This effectively freezes the webservices portion of the registry app if you do not give it enough connections.
# A suggestions from the Jetty community was to set this param using the following math.
# This number must be > number of CPU cores. As a general rule, the maximum number of connections should be:
# CPU's+{registries this registry is replicating to/from}=max-threads
# 20 is a pretty good starting point for a default.
ebxml-webserver-max-threads=20
# EBXML thrift service port
ebxml.thrift.service.port=9588
ebxml.thrift.service.disableStreamCache=true

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<menuContributionFile>
<include installTo="menu:obs?after=LIGHTNINGPLACEHOLDER"
<include installTo="menu:IncludeSubMenuContributionId_Lightning?after=LmaTotalLightning"
fileName="menus/lma/lma.xml"/>
</menuContributionFile>

View file

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menuTemplate xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<contribute xsi:type="subMenu" menuText="Total Lightning">
<contribute xsi:type="titleItem" id="LMATitle" titleText="------ LMA Total Lightning ------"/>
<contribute xsi:type="subMenu" menuText="Standard Products">
<contribute xsi:type="subMenu" menuText="NALMA">
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Source Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Source Density" id="lma">
<dataURI>/grid/NALMA/%/%/lmasd</dataURI>
<substitute key="network" value="NALMA"/>
<substitute key="level" value="0"/>
@ -11,7 +11,7 @@
<substitute key="productType" value="lmasd"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Maximum Source Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Maximum Source Density" id="lma">
<dataURI>/grid/NALMA/%/%/lmamsd</dataURI>
<substitute key="network" value="NALMA"/>
<substitute key="level" value="0"/>
@ -19,7 +19,7 @@
<substitute key="productType" value="lmamsd"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
<dataURI>/grid/NALMA/%/%/lmafed</dataURI>
<substitute key="network" value="NALMA"/>
<substitute key="level" value="0"/>
@ -27,7 +27,7 @@
<substitute key="productType" value="lmafed"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/NALMA/%/%/lmafid</dataURI>
<substitute key="network" value="NALMA"/>
<substitute key="level" value="0"/>
@ -35,7 +35,7 @@
<substitute key="productType" value="lmafid"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/NALMA/%/%/lmamfd</dataURI>
<substitute key="network" value="NALMA"/>
<substitute key="level" value="0"/>
@ -43,7 +43,7 @@
<substitute key="productType" value="lmamfd"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Rate of Change" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Rate of Change" id="lma">
<dataURI>/grid/NALMA/%/%/lmaroc</dataURI>
<substitute key="network" value="NALMA"/>
<substitute key="level" value="0"/>
@ -53,7 +53,7 @@
</contribute>
</contribute>
<contribute xsi:type="subMenu" menuText="DCLMA">
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Source Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Source Density" id="lma">
<dataURI>/grid/DCLMA/%/%/lmasd</dataURI>
<substitute key="network" value="DCLMA"/>
<substitute key="level" value="0"/>
@ -61,7 +61,7 @@
<substitute key="productType" value="lmasd"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
<dataURI>/grid/DCLMA/%/%/lmafed</dataURI>
<substitute key="network" value="DCLMA"/>
<substitute key="level" value="0"/>
@ -69,7 +69,7 @@
<substitute key="productType" value="lmafed"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/DCLMA/%/%/lmafid</dataURI>
<substitute key="network" value="DCLMA"/>
<substitute key="level" value="0"/>
@ -77,7 +77,7 @@
<substitute key="productType" value="lmafid"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/DCLMA/%/%/lmamfd</dataURI>
<substitute key="network" value="DCLMA"/>
<substitute key="level" value="0"/>
@ -88,7 +88,7 @@
</contribute>
<contribute xsi:type="subMenu" menuText="KLDAR">
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Source Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Source Density" id="lma">
<dataURI>/grid/KLDAR/%/%/lmasd</dataURI>
<substitute key="network" value="KLDAR"/>
<substitute key="level" value="0"/>
@ -96,7 +96,7 @@
<substitute key="productType" value="lmasd"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
<dataURI>/grid/KLDAR/%/%/lmafed</dataURI>
<substitute key="network" value="KLDAR"/>
<substitute key="level" value="0"/>
@ -104,7 +104,7 @@
<substitute key="productType" value="lmafed"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/KLDAR/%/%/lmafid</dataURI>
<substitute key="network" value="KLDAR"/>
<substitute key="level" value="0"/>
@ -112,7 +112,7 @@
<substitute key="productType" value="lmafid"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/KLDAR/%/%/lmamfd</dataURI>
<substitute key="network" value="KLDAR"/>
<substitute key="level" value="0"/>
@ -123,7 +123,7 @@
</contribute>
<contribute xsi:type="subMenu" menuText="OKLMA">
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Source Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Source Density" id="lma">
<dataURI>/grid/OKLMA/%/%/lmasd</dataURI>
<substitute key="network" value="OKLMA"/>
<substitute key="level" value="0"/>
@ -131,7 +131,7 @@
<substitute key="productType" value="lmasd"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
<dataURI>/grid/OKLMA/%/%/lmafed</dataURI>
<substitute key="network" value="OKLMA"/>
<substitute key="level" value="0"/>
@ -139,7 +139,7 @@
<substitute key="productType" value="lmafed"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/OKLMA/%/%/lmafid</dataURI>
<substitute key="network" value="OKLMA"/>
<substitute key="level" value="0"/>
@ -147,7 +147,7 @@
<substitute key="productType" value="lmafid"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/OKLMA/%/%/lmamfd</dataURI>
<substitute key="network" value="OKLMA"/>
<substitute key="level" value="0"/>
@ -158,7 +158,7 @@
</contribute>
<contribute xsi:type="subMenu" menuText="COLMA">
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Source Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Source Density" id="lma">
<dataURI>/grid/COLMA/%/%/lmasd</dataURI>
<substitute key="network" value="COLMA"/>
<substitute key="level" value="0"/>
@ -166,7 +166,7 @@
<substitute key="productType" value="lmasd"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
<dataURI>/grid/COLMA/%/%/lmafed</dataURI>
<substitute key="network" value="COLMA"/>
<substitute key="level" value="0"/>
@ -174,7 +174,7 @@
<substitute key="productType" value="lmafed"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/COLMA/%/%/lmafid</dataURI>
<substitute key="network" value="COLMA"/>
<substitute key="level" value="0"/>
@ -182,7 +182,7 @@
<substitute key="productType" value="lmafid"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/COLMA/%/%/lmamfd</dataURI>
<substitute key="network" value="COLMA"/>
<substitute key="level" value="0"/>
@ -193,7 +193,7 @@
</contribute>
<contribute xsi:type="subMenu" menuText="HGLMA">
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Source Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Source Density" id="lma">
<dataURI>/grid/HGLMA/%/%/lmasd</dataURI>
<substitute key="network" value="HGLMA"/>
<substitute key="level" value="0"/>
@ -201,7 +201,7 @@
<substitute key="productType" value="lmasd"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
<dataURI>/grid/HGLMA/%/%/lmafed</dataURI>
<substitute key="network" value="HGLMA"/>
<substitute key="level" value="0"/>
@ -209,7 +209,7 @@
<substitute key="productType" value="lmafed"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/HGLMA/%/%/lmafid</dataURI>
<substitute key="network" value="HGLMA"/>
<substitute key="level" value="0"/>
@ -217,7 +217,7 @@
<substitute key="productType" value="lmafid"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/HGLMA/%/%/lmamfd</dataURI>
<substitute key="network" value="HGLMA"/>
<substitute key="level" value="0"/>
@ -228,7 +228,7 @@
</contribute>
<contribute xsi:type="subMenu" menuText="WTLMA">
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Source Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Source Density" id="lma">
<dataURI>/grid/WTLMA/%/%/lmasd</dataURI>
<substitute key="network" value="HGLMA"/>
<substitute key="level" value="0"/>
@ -236,7 +236,7 @@
<substitute key="productType" value="lmasd"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
<dataURI>/grid/WTLMA/%/%/lmafed</dataURI>
<substitute key="network" value="WTLMA"/>
<substitute key="level" value="0"/>
@ -244,7 +244,7 @@
<substitute key="productType" value="lmafed"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/WTLMA/%/%/lmafid</dataURI>
<substitute key="network" value="WTLMA"/>
<substitute key="level" value="0"/>
@ -252,7 +252,7 @@
<substitute key="productType" value="lmafid"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/WTLMA/%/%/lmamfd</dataURI>
<substitute key="network" value="WTLMA"/>
<substitute key="level" value="0"/>
@ -263,7 +263,7 @@
</contribute>
<contribute xsi:type="subMenu" menuText="CFLMA">
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Source Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Source Density" id="lma">
<dataURI>/grid/CFLMA/%/%/lmasd</dataURI>
<substitute key="network" value="HGLMA"/>
<substitute key="level" value="0"/>
@ -271,7 +271,7 @@
<substitute key="productType" value="lmasd"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
<dataURI>/grid/CFLMA/%/%/lmafed</dataURI>
<substitute key="network" value="CFLMA"/>
<substitute key="level" value="0"/>
@ -279,7 +279,7 @@
<substitute key="productType" value="lmafed"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/CFLMA/%/%/lmafid</dataURI>
<substitute key="network" value="CFLMA"/>
<substitute key="level" value="0"/>
@ -287,7 +287,7 @@
<substitute key="productType" value="lmafid"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/CFLMA/%/%/lmamfd</dataURI>
<substitute key="network" value="CFLMA"/>
<substitute key="level" value="0"/>
@ -298,7 +298,7 @@
</contribute>
<contribute xsi:type="subMenu" menuText="LLLMA">
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Source Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Source Density" id="lma">
<dataURI>/grid/LLLMA/%/%/lmasd</dataURI>
<substitute key="network" value="LLLMA"/>
<substitute key="level" value="0"/>
@ -306,7 +306,7 @@
<substitute key="productType" value="lmasd"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
<dataURI>/grid/LLLMA/%/%/lmafed</dataURI>
<substitute key="network" value="LLLMA"/>
<substitute key="level" value="0"/>
@ -314,7 +314,7 @@
<substitute key="productType" value="lmafed"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/LLLMA/%/%/lmafid</dataURI>
<substitute key="network" value="LLLMA"/>
<substitute key="level" value="0"/>
@ -322,7 +322,7 @@
<substitute key="productType" value="lmafid"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/LLLMA/%/%/lmamfd</dataURI>
<substitute key="network" value="LLLMA"/>
<substitute key="level" value="0"/>
@ -334,7 +334,7 @@
<contribute xsi:type="subMenu" menuText="KSCLMA">
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Source Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Source Density" id="lma">
<dataURI>/grid/KSCLMA/%/%/lmasd</dataURI>
<substitute key="network" value="KSCLMA"/>
<substitute key="level" value="0"/>
@ -342,7 +342,7 @@
<substitute key="productType" value="lmasd"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
<dataURI>/grid/KSCLMA/%/%/lmafed</dataURI>
<substitute key="network" value="KSCLMA"/>
<substitute key="level" value="0"/>
@ -350,7 +350,7 @@
<substitute key="productType" value="lmafed"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/KSCLMA/%/%/lmafid</dataURI>
<substitute key="network" value="KSCLMA"/>
<substitute key="level" value="0"/>
@ -358,7 +358,7 @@
<substitute key="productType" value="lmafid"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/KSCLMA/%/%/lmamfd</dataURI>
<substitute key="network" value="KSCLMA"/>
<substitute key="level" value="0"/>
@ -369,7 +369,7 @@
</contribute>
<contribute xsi:type="subMenu" menuText="NGLMA">
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Source Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Source Density" id="lma">
<dataURI>/grid/NGLMA/%/%/lmasd</dataURI>
<substitute key="network" value="NGLMA"/>
<substitute key="level" value="0"/>
@ -377,7 +377,7 @@
<substitute key="productType" value="lmasd"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
<dataURI>/grid/NGLMA/%/%/lmafed</dataURI>
<substitute key="network" value="NGLMA"/>
<substitute key="level" value="0"/>
@ -385,7 +385,7 @@
<substitute key="productType" value="lmafed"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/NGLMA/%/%/lmafid</dataURI>
<substitute key="network" value="NGLMA"/>
<substitute key="level" value="0"/>
@ -393,7 +393,7 @@
<substitute key="productType" value="lmafid"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/NGLMA/%/%/lmamfd</dataURI>
<substitute key="network" value="NGLMA"/>
<substitute key="level" value="0"/>
@ -404,7 +404,7 @@
</contribute>
<contribute xsi:type="subMenu" menuText="ONLMA">
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Source Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Source Density" id="lma">
<dataURI>/grid/ONLMA/%/%/lmasd</dataURI>
<substitute key="network" value="ONLMA"/>
<substitute key="level" value="0"/>
@ -412,7 +412,7 @@
<substitute key="productType" value="lmasd"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
<dataURI>/grid/ONLMA/%/%/lmafed</dataURI>
<substitute key="network" value="ONLMA"/>
<substitute key="level" value="0"/>
@ -420,7 +420,7 @@
<substitute key="productType" value="lmafed"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/ONLMA/%/%/lmafid</dataURI>
<substitute key="network" value="ONLMA"/>
<substitute key="level" value="0"/>
@ -428,7 +428,7 @@
<substitute key="productType" value="lmafid"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/ONLMA/%/%/lmamfd</dataURI>
<substitute key="network" value="ONLMA"/>
<substitute key="level" value="0"/>
@ -439,7 +439,7 @@
</contribute>
<contribute xsi:type="subMenu" menuText="WILMA">
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Source Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Source Density" id="lma">
<dataURI>/grid/WILMA/%/%/lmasd</dataURI>
<substitute key="network" value="WILMA"/>
<substitute key="level" value="0"/>
@ -447,7 +447,7 @@
<substitute key="productType" value="lmasd"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
<dataURI>/grid/WILMA/%/%/lmafed</dataURI>
<substitute key="network" value="WILMA"/>
<substitute key="level" value="0"/>
@ -455,7 +455,7 @@
<substitute key="productType" value="lmafed"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/WILMA/%/%/lmafid</dataURI>
<substitute key="network" value="WILMA"/>
<substitute key="level" value="0"/>
@ -463,7 +463,7 @@
<substitute key="productType" value="lmafid"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/WILMA/%/%/lmamfd</dataURI>
<substitute key="network" value="WILMA"/>
<substitute key="level" value="0"/>
@ -474,7 +474,7 @@
</contribute>
<contribute xsi:type="subMenu" menuText="WSLMA">
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Source Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Source Density" id="lma">
<dataURI>/grid/WSLMA/%/%/lmasd</dataURI>
<substitute key="network" value="WSLMA"/>
<substitute key="level" value="0"/>
@ -482,7 +482,7 @@
<substitute key="productType" value="lmasd"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
<dataURI>/grid/WSLMA/%/%/lmafed</dataURI>
<substitute key="network" value="WSLMA"/>
<substitute key="level" value="0"/>
@ -490,7 +490,7 @@
<substitute key="productType" value="lmafed"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/WSLMA/%/%/lmafid</dataURI>
<substitute key="network" value="WSLMA"/>
<substitute key="level" value="0"/>
@ -498,7 +498,7 @@
<substitute key="productType" value="lmafid"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/WSLMA/%/%/lmamfd</dataURI>
<substitute key="network" value="WSLMA"/>
<substitute key="level" value="0"/>
@ -509,9 +509,9 @@
</contribute>
</contribute>
<contribute xsi:type="subMenu" menuText="Psuedo-GLM Products">
<contribute xsi:type="subMenu" menuText="Pseudo-GLM Products">
<contribute xsi:type="subMenu" menuText="PGNA (North Alabama)">
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
<dataURI>/grid/PGNA/%/%/lmafed</dataURI>
<substitute key="network" value="PGNA"/>
<substitute key="level" value="0"/>
@ -519,7 +519,7 @@
<substitute key="productType" value="lmafed"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/PGNA/%/%/lmafid</dataURI>
<substitute key="network" value="PGNA"/>
<substitute key="level" value="0"/>
@ -527,7 +527,7 @@
<substitute key="productType" value="lmafid"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Maximum Flash Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Maximum Flash Density" id="lma">
<dataURI>/grid/PGNA/%/%/lmamfd</dataURI>
<substitute key="network" value="PGNA"/>
<substitute key="level" value="0"/>
@ -535,7 +535,7 @@
<substitute key="productType" value="lmamfd"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="30 minute Sum" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="30 minute Sum" id="lma">
<dataURI>/grid/PGNA/%/%/lmasum</dataURI>
<substitute key="network" value="PGNA"/>
<substitute key="level" value="0"/>
@ -546,7 +546,7 @@
</contribute>
<contribute xsi:type="subMenu" menuText="PGDC (Washington D.C.)">
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
<dataURI>/grid/PGDC/%/%/lmafed</dataURI>
<substitute key="network" value="PGDC"/>
<substitute key="level" value="0"/>
@ -554,7 +554,7 @@
<substitute key="productType" value="lmafed"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/PGDC/%/%/lmafid</dataURI>
<substitute key="network" value="PGDC"/>
<substitute key="level" value="0"/>
@ -562,7 +562,7 @@
<substitute key="productType" value="lmafid"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Maximum Flash Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Maximum Flash Density" id="lma">
<dataURI>/grid/PGDC/%/%/lmamfd</dataURI>
<substitute key="network" value="PGDC"/>
<substitute key="level" value="0"/>
@ -570,7 +570,7 @@
<substitute key="productType" value="lmamfd"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="30 minute Sum" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="30 minute Sum" id="lma">
<dataURI>/grid/PGDC/%/%/lmasum</dataURI>
<substitute key="network" value="PGDC"/>
<substitute key="level" value="0"/>
@ -581,7 +581,7 @@
</contribute>
<contribute xsi:type="subMenu" menuText="PGSC (Kennedy Space Center)">
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
<dataURI>/grid/PGSC/%/%/lmafed</dataURI>
<substitute key="network" value="PGSC"/>
<substitute key="level" value="0"/>
@ -589,7 +589,7 @@
<substitute key="productType" value="lmafed"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/PGSC/%/%/lmafid</dataURI>
<substitute key="network" value="PGSC"/>
<substitute key="level" value="0"/>
@ -597,7 +597,7 @@
<substitute key="productType" value="lmafid"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Maximum Flash Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Maximum Flash Density" id="lma">
<dataURI>/grid/PGSC/%/%/lmamfd</dataURI>
<substitute key="network" value="PGSC"/>
<substitute key="level" value="0"/>
@ -605,7 +605,7 @@
<substitute key="productType" value="lmamfd"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="30 minute Sum" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="30 minute Sum" id="lma">
<dataURI>/grid/PGSC/%/%/lmasum</dataURI>
<substitute key="network" value="PGSC"/>
<substitute key="level" value="0"/>
@ -616,7 +616,7 @@
</contribute>
<contribute xsi:type="subMenu" menuText="PGOK (Oklahoma)">
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
<dataURI>/grid/PGOK/%/%/lmafed</dataURI>
<substitute key="network" value="PGOK"/>
<substitute key="level" value="0"/>
@ -624,7 +624,7 @@
<substitute key="productType" value="lmafed"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/PGOK/%/%/lmafid</dataURI>
<substitute key="network" value="PGOK"/>
<substitute key="level" value="0"/>
@ -632,7 +632,7 @@
<substitute key="productType" value="lmafid"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Maximum Flash Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Maximum Flash Density" id="lma">
<dataURI>/grid/PGOK/%/%/lmamfd</dataURI>
<substitute key="network" value="PGOK"/>
<substitute key="level" value="0"/>
@ -640,7 +640,7 @@
<substitute key="productType" value="lmamfd"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="30 minute Sum" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="30 minute Sum" id="lma">
<dataURI>/grid/PGOK/%/%/lmasum</dataURI>
<substitute key="network" value="PGOK"/>
<substitute key="level" value="0"/>
@ -651,7 +651,7 @@
</contribute>
<contribute xsi:type="subMenu" menuText="PGCO (Colorado)">
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
<dataURI>/grid/PGCO/%/%/lmafed</dataURI>
<substitute key="network" value="PGCO"/>
<substitute key="level" value="0"/>
@ -659,7 +659,7 @@
<substitute key="productType" value="lmafed"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/PGCO/%/%/lmafid</dataURI>
<substitute key="network" value="PGCO"/>
<substitute key="level" value="0"/>
@ -667,7 +667,7 @@
<substitute key="productType" value="lmafid"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Maximum Flash Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Maximum Flash Density" id="lma">
<dataURI>/grid/PGCO/%/%/lmamfd</dataURI>
<substitute key="network" value="PGCO"/>
<substitute key="level" value="0"/>
@ -675,7 +675,7 @@
<substitute key="productType" value="lmamfd"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="30 minute Sum" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="30 minute Sum" id="lma">
<dataURI>/grid/PGCO/%/%/lmasum</dataURI>
<substitute key="network" value="PGCO"/>
<substitute key="level" value="0"/>
@ -686,7 +686,7 @@
</contribute>
<contribute xsi:type="subMenu" menuText="PGHG (Houston)">
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
<dataURI>/grid/PGHG/%/%/lmafed</dataURI>
<substitute key="network" value="PGHG"/>
<substitute key="level" value="0"/>
@ -694,7 +694,7 @@
<substitute key="productType" value="lmafed"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/PGHG/%/%/lmafid</dataURI>
<substitute key="network" value="PGHG"/>
<substitute key="level" value="0"/>
@ -702,7 +702,7 @@
<substitute key="productType" value="lmafid"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Maximum Flash Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Maximum Flash Density" id="lma">
<dataURI>/grid/PGHG/%/%/lmamfd</dataURI>
<substitute key="network" value="PGHG"/>
<substitute key="level" value="0"/>
@ -710,7 +710,7 @@
<substitute key="productType" value="lmamfd"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="30 minute Sum" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="30 minute Sum" id="lma">
<dataURI>/grid/PGHG/%/%/lmasum</dataURI>
<substitute key="network" value="PGHG"/>
<substitute key="level" value="0"/>
@ -721,7 +721,7 @@
</contribute>
<contribute xsi:type="subMenu" menuText="PGWT (West Texas)">
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
<dataURI>/grid/PGWT/%/%/lmafed</dataURI>
<substitute key="network" value="PGWT"/>
<substitute key="level" value="0"/>
@ -729,7 +729,7 @@
<substitute key="productType" value="lmafed"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/PGWT/%/%/lmafid</dataURI>
<substitute key="network" value="PGWT"/>
<substitute key="level" value="0"/>
@ -737,7 +737,7 @@
<substitute key="productType" value="lmafid"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Maximum Flash Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Maximum Flash Density" id="lma">
<dataURI>/grid/PGWT/%/%/lmamfd</dataURI>
<substitute key="network" value="PGWT"/>
<substitute key="level" value="0"/>
@ -745,7 +745,7 @@
<substitute key="productType" value="lmamfd"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="30 minute Sum" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="30 minute Sum" id="lma">
<dataURI>/grid/PGWT/%/%/lmasum</dataURI>
<substitute key="network" value="PGWT"/>
<substitute key="level" value="0"/>
@ -756,7 +756,7 @@
</contribute>
<contribute xsi:type="subMenu" menuText="PGCF (Central Florida)">
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
<dataURI>/grid/PGCF/%/%/lmafed</dataURI>
<substitute key="network" value="PGCF"/>
<substitute key="level" value="0"/>
@ -764,7 +764,7 @@
<substitute key="productType" value="lmafed"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/PGCF/%/%/lmafid</dataURI>
<substitute key="network" value="PGCF"/>
<substitute key="level" value="0"/>
@ -772,7 +772,7 @@
<substitute key="productType" value="lmafid"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Maximum Flash Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Maximum Flash Density" id="lma">
<dataURI>/grid/PGCF/%/%/lmamfd</dataURI>
<substitute key="network" value="PGCF"/>
<substitute key="level" value="0"/>
@ -780,7 +780,7 @@
<substitute key="productType" value="lmamfd"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="30 minute Sum" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="30 minute Sum" id="lma">
<dataURI>/grid/PGCF/%/%/lmasum</dataURI>
<substitute key="network" value="PGCF"/>
<substitute key="level" value="0"/>
@ -791,7 +791,7 @@
</contribute>
<contribute xsi:type="subMenu" menuText="PGLL (Langmuir Laboratory)">
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Extent Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Extent Density" id="lma">
<dataURI>/grid/PGLL/%/%/lmafed</dataURI>
<substitute key="network" value="PGLL"/>
<substitute key="level" value="0"/>
@ -799,7 +799,7 @@
<substitute key="productType" value="lmafed"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Flash Initiation Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Flash Initiation Density" id="lma">
<dataURI>/grid/PGLL/%/%/lmafid</dataURI>
<substitute key="network" value="PGLL"/>
<substitute key="level" value="0"/>
@ -807,7 +807,7 @@
<substitute key="productType" value="lmafid"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="Maximum Flash Density" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="Maximum Flash Density" id="lma">
<dataURI>/grid/PGLL/%/%/lmamfd</dataURI>
<substitute key="network" value="PGLL"/>
<substitute key="level" value="0"/>
@ -815,7 +815,7 @@
<substitute key="productType" value="lmamfd"/>
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/lma.xml" menuText="30 minute Sum" id="lma">
<contribute xsi:type="bundleItem" file="bundles/Lma.xml" menuText="30 minute Sum" id="lma">
<dataURI>/grid/PGLL/%/%/lmasum</dataURI>
<substitute key="network" value="PGLL"/>
<substitute key="level" value="0"/>
@ -824,8 +824,5 @@
<substitute key="colorMapName" value="lma/nalma"/>
</contribute>
</contribute>
</contribute>
</contribute>
</menuTemplate>

View file

@ -1,20 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual C# Express 2010
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AWIPSII.CAVE", "AWIPSII.CAVE\AWIPSII.CAVE.csproj", "{1F23042E-FD8D-496D-969C-3693FF0664A6}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x86 = Debug|x86
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{1F23042E-FD8D-496D-969C-3693FF0664A6}.Debug|x86.ActiveCfg = Debug|x86
{1F23042E-FD8D-496D-969C-3693FF0664A6}.Debug|x86.Build.0 = Debug|x86
{1F23042E-FD8D-496D-969C-3693FF0664A6}.Release|x86.ActiveCfg = Release|x86
{1F23042E-FD8D-496D-969C-3693FF0664A6}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

Binary file not shown.

View file

@ -1,52 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{1F23042E-FD8D-496D-969C-3693FF0664A6}</ProjectGuid>
<OutputType>Exe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>AWIPSII.CAVE</RootNamespace>
<AssemblyName>AWIPSII.CAVE</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<None Include="AWIPSII.wixproj">
<SubType>Designer</SubType>
</None>
<None Include="AWIPSII.wxs">
<SubType>Designer</SubType>
</None>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View file

@ -1,3 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
</Project>

View file

@ -1,35 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
<Platform Condition="'$(Platform)' == ''">x86</Platform>
<Version Condition=" '$(Version)' == '' ">1.0.0.0</Version>
<StagingDirectory Condition=" '${StagingDirectory}' == '' ">C:\A2Staging\AWIPS II\</StagingDirectory>
<ProductVersion>3.5</ProductVersion>
<ProjectGuid>9F9450DE-A24F-412D-8E34-69BEEA3043DA</ProjectGuid>
<SchemaVersion>2.0</SchemaVersion>
<OutputType>Package</OutputType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<OutputPath>bin\$(Configuration)</OutputPath>
<DefineConstants>Debug;ProductVersion=$(Version)</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\$(Configuration)</OutputPath>
<DefineConstants>ProductVersion=$(Version)</DefineConstants>
</PropertyGroup>
<ItemGroup>
<Compile Include="AWIPSII.wxs" />
<Compile Include="AWIPSII_CAVE.wxs" />
<Compile Include="AWIPSII_ALERTVIZ.wxs" />
</ItemGroup>
<PropertyGroup>
<OutputName>AWIPS II CAVE</OutputName>
<LinkerAdditionalOptions>-ext WixUIExtension -b "$(StagingDirectory)" -dWixUIBannerBmp=cave_msi_banner.bmp -dWixUIDialogBmp=cave_msi_dialog.bmp</LinkerAdditionalOptions>
<WixToolPath>C:\Users\Public\Documents\wix35-binaries\</WixToolPath>
<WixTargetsPath>$(WixToolPath)Wix.targets</WixTargetsPath>
<WixTasksPath>$(WixToolPath)wixtasks.dll</WixTasksPath>
<DefineSolutionProperties>false</DefineSolutionProperties>
</PropertyGroup>
<Import Project="$(WixTargetsPath)"/>
</Project>

View file

@ -1,95 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="8A1F2DCB-5527-4D32-BC7A-E4295EA72942" Name="AWIPS II CAVE"
Language="1033" Version="$(var.ProductVersion)" Manufacturer="Raytheon"
UpgradeCode="8924277C-5B6A-4EEB-AE9F-5471481F92A5">
<Package Manufacturer="Raytheon" InstallerVersion="200"
Compressed="yes" InstallScope="perMachine" />
<Media Id="1" Cabinet="product.cab" EmbedCab="yes" />
<Property Id="RUNTIMEENVIRONMENT">
<RegistrySearch Id="RuntimeEnvironment"
Root="HKLM"
Key="Software\Raytheon\Runtime Environment"
Type="raw"
Name="Name" />
</Property>
<Condition Message="The AWIPS II Runtime Environment must be installed before AWIPS II CAVE can be installed.">
<![CDATA[Installed OR RUNTIMEENVIRONMENT]]>
</Condition>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder" Name="PFiles">
<Directory Id="INSTALLDIR" Name="Raytheon">
<Directory Id="AwipsII" Name="AWIPS II">
<Directory Id="CaveDir" Name="CAVE">
<Component Id="caveBatch" Guid="8924277C-5B6A-4EEB-AE9F-5471481F92A6">
<File Id="caveBAT" Name="cave.bat"
DiskId="1" Source="SourceDir\CAVE\cave.bat" />
<Shortcut Id="caveDesktopShortcut" Directory="DesktopFolder" Name="CAVE"
WorkingDirectory="CaveDir" Advertise="yes" Icon="cave.exe" IconIndex="0"
Arguments="-component thinclient" />
<Shortcut Id="caveStartMenu" Directory="ProgramMenuDir" Name="CAVE"
WorkingDirectory="CaveDir" Advertise="yes" Icon="cave.exe" IconIndex="0"
Arguments="-component thinclient" />
</Component>
</Directory>
<Directory Id="AlertvizDir" Name="AlertViz">
<Component Id="alertvizBatch" Guid="8924277C-5B6A-4EEB-AE9F-5471481F92B4">
<File Id="alertvizBAT" Name="alertviz.bat"
DiskId="1" Source="SourceDir\AlertViz\alertviz.bat" />
<Shortcut Id="alertvizDesktopShortcut" Directory="DesktopFolder" Name="AlertViz"
WorkingDirectory="AlertvizDir" Advertise="yes" Icon="alertviz.exe" IconIndex="0"
Arguments="-component thinalertviz" />
<Shortcut Id="alertvizStartMenu" Directory="ProgramMenuDir" Name="AlertViz"
WorkingDirectory="AlertvizDir" Advertise="yes" Icon="alertviz.exe" IconIndex="0"
Arguments="-component thinalertviz" />
</Component>
</Directory>
</Directory>
</Directory>
<Directory Id="ProgramMenuFolder" Name="Programs">
<Directory Id="ProgramMenuDir" Name="AWIPS II">
<Component Id="ProgramMenuDir" Guid="62D7CF96-A3A5-4DCE-86A5-751D698B5CA3">
<RemoveFolder Id="ProgramMenuDir" On="uninstall" />
<RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]"
Type="string" Value="" KeyPath="yes" />
<Shortcut Id="UninstallProduct" Name="Uninstall CAVE" Description="Uninstalls AWIPS II CAVE"
Target="[SystemFolder]msiexec.exe" Arguments="/x [ProductCode]" />
</Component>
</Directory>
</Directory>
</Directory>
<Directory Id="DesktopFolder" Name="Desktop" />
</Directory>
<Feature Id="AWIPS_II_CAVE" Title="AWIPS II CAVE" Level="1"
Display="expand" Description="AWIPS II Common AWIPS Visualization Environment (CAVE)"
ConfigurableDirectory="INSTALLDIR">
<ComponentRef Id="caveBatch" />
<ComponentRef Id="ProgramMenuDir" />
<ComponentGroupRef Id="AWIPSII_CAVE" />
</Feature>
<Feature Id="AWIPS_II_ALERTVIZ" Title="AWIPS II AlertViz" Level="1"
Display="expand" Description="AWIPS II AlertViz"
ConfigurableDirectory="INSTALLDIR">
<ComponentRef Id="alertvizBatch" />
<ComponentGroupRef Id="AWIPSII_ALERTVIZ" />
</Feature>
<UIRef Id="WixUI_FeatureTree" />
<UIRef Id="WixUI_ErrorProgressText" />
<Icon Id="cave.exe" SourceFile="SourceDir\CAVE\cave.exe" />
<Icon Id="alertviz.exe" SourceFile="SourceDir\AlertViz\alertviz.exe" />
</Product>
</Wix>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 451 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

View file

@ -1,52 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{1F23042E-FD8D-496D-969C-3693FF0664A6}</ProjectGuid>
<OutputType>Exe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>AWIPSII.CAVE</RootNamespace>
<AssemblyName>AWIPSII.CAVE</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<None Include="AWIPSII.wixproj">
<SubType>Designer</SubType>
</None>
<None Include="AWIPSII.wxs">
<SubType>Designer</SubType>
</None>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View file

@ -1,3 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
</Project>

View file

@ -1,35 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
<Platform Condition="'$(Platform)' == ''">x64</Platform>
<Version Condition=" '$(Version)' == '' ">1.0.0.0</Version>
<StagingDirectory Condition=" '${StagingDirectory}' == '' ">C:\A2Staging\AWIPS II\</StagingDirectory>
<ProductVersion>3.5</ProductVersion>
<ProjectGuid>9F9450DE-A24F-412D-8E34-69BEEA3043DA</ProjectGuid>
<SchemaVersion>2.0</SchemaVersion>
<OutputType>Package</OutputType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<OutputPath>bin\$(Configuration)</OutputPath>
<DefineConstants>Debug;ProductVersion=$(Version)</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<OutputPath>bin\$(Configuration)</OutputPath>
<DefineConstants>ProductVersion=$(Version)</DefineConstants>
</PropertyGroup>
<ItemGroup>
<Compile Include="AWIPSII.wxs" />
<Compile Include="AWIPSII_CAVE.wxs" />
<Compile Include="AWIPSII_ALERTVIZ.wxs" />
</ItemGroup>
<PropertyGroup>
<OutputName>AWIPS II CAVE</OutputName>
<LinkerAdditionalOptions>-ext WixUIExtension -b "$(StagingDirectory)" -dWixUIBannerBmp=cave_msi_banner.bmp -dWixUIDialogBmp=cave_msi_dialog.bmp</LinkerAdditionalOptions>
<WixToolPath>C:\Users\Public\Documents\wix35-binaries\</WixToolPath>
<WixTargetsPath>$(WixToolPath)Wix.targets</WixTargetsPath>
<WixTasksPath>$(WixToolPath)wixtasks.dll</WixTasksPath>
<DefineSolutionProperties>false</DefineSolutionProperties>
</PropertyGroup>
<Import Project="$(WixTargetsPath)"/>
</Project>

View file

@ -1,98 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="8A1F2DCB-5527-4D32-BC7A-E4295EA72942" Name="AWIPS II CAVE x64"
Language="1033" Version="$(var.ProductVersion)" Manufacturer="Raytheon"
UpgradeCode="8924277C-5B6A-4EEB-AE9F-5471481F92A5">
<Package Manufacturer="Raytheon" InstallerVersion="200"
Compressed="yes" InstallScope="perMachine" />
<Property Id="MSIFASTINSTALL" Value="3" />
<Media Id="1" Cabinet="product.cab" EmbedCab="yes" />
<Property Id="RUNTIMEENVIRONMENT">
<RegistrySearch Id="RuntimeEnvironment"
Root="HKLM"
Key="Software\Raytheon\Runtime Environment"
Type="raw"
Name="Name"
Win64="yes" />
</Property>
<Condition Message="The AWIPS II Runtime Environment (x64) must be installed before AWIPS II CAVE can be installed.">
<![CDATA[Installed OR RUNTIMEENVIRONMENT]]>
</Condition>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFiles64Folder" Name="PFiles">
<Directory Id="INSTALLDIR" Name="Raytheon">
<Directory Id="AwipsII" Name="AWIPS II">
<Directory Id="CaveDir" Name="CAVE">
<Component Id="caveBatch" Guid="8924277C-5B6A-4EEB-AE9F-5471481F92A6" Win64="yes">
<File Id="caveBAT" Name="cave.bat"
DiskId="1" Source="SourceDir\CAVE\cave.bat" />
<Shortcut Id="caveDesktopShortcut" Directory="DesktopFolder" Name="CAVE"
WorkingDirectory="CaveDir" Advertise="yes" Icon="cave.exe" IconIndex="0"
Arguments="-component thinclient" />
<Shortcut Id="caveStartMenu" Directory="ProgramMenuDir" Name="CAVE"
WorkingDirectory="CaveDir" Advertise="yes" Icon="cave.exe" IconIndex="0"
Arguments="-component thinclient" />
</Component>
</Directory>
<Directory Id="AlertvizDir" Name="AlertViz">
<Component Id="alertvizBatch" Guid="8924277C-5B6A-4EEB-AE9F-5471481F92B4" Win64="yes">
<File Id="alertvizBAT" Name="alertviz.bat"
DiskId="1" Source="SourceDir\AlertViz\alertviz.bat" />
<Shortcut Id="alertvizDesktopShortcut" Directory="DesktopFolder" Name="AlertViz"
WorkingDirectory="AlertvizDir" Advertise="yes" Icon="alertviz.exe" IconIndex="0"
Arguments="-component thinalertviz" />
<Shortcut Id="alertvizStartMenu" Directory="ProgramMenuDir" Name="AlertViz"
WorkingDirectory="AlertvizDir" Advertise="yes" Icon="alertviz.exe" IconIndex="0"
Arguments="-component thinalertviz" />
</Component>
</Directory>
</Directory>
</Directory>
<Directory Id="ProgramMenuFolder" Name="Programs">
<Directory Id="ProgramMenuDir" Name="AWIPS II">
<Component Id="ProgramMenuDir" Guid="62D7CF96-A3A5-4DCE-86A5-751D698B5CA3">
<RemoveFolder Id="ProgramMenuDir" On="uninstall" />
<RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]"
Type="string" Value="" KeyPath="yes" />
<Shortcut Id="UninstallProduct" Name="Uninstall CAVE" Description="Uninstalls AWIPS II CAVE"
Target="[SystemFolder]msiexec.exe" Arguments="/x [ProductCode]" />
</Component>
</Directory>
</Directory>
</Directory>
<Directory Id="DesktopFolder" Name="Desktop" />
</Directory>
<Feature Id="AWIPS_II_CAVE" Title="AWIPS II CAVE" Level="1"
Display="expand" Description="AWIPS II Common AWIPS Visualization Environment (CAVE)"
ConfigurableDirectory="INSTALLDIR">
<ComponentRef Id="caveBatch" />
<ComponentRef Id="ProgramMenuDir" />
<ComponentGroupRef Id="AWIPSII_CAVE" />
</Feature>
<Feature Id="AWIPS_II_ALERTVIZ" Title="AWIPS II AlertViz" Level="1"
Display="expand" Description="AWIPS II AlertViz"
ConfigurableDirectory="INSTALLDIR">
<ComponentRef Id="alertvizBatch" />
<ComponentGroupRef Id="AWIPSII_ALERTVIZ" />
</Feature>
<UIRef Id="WixUI_FeatureTree" />
<UIRef Id="WixUI_ErrorProgressText" />
<Icon Id="cave.exe" SourceFile="SourceDir\CAVE\cave.exe" />
<Icon Id="alertviz.exe" SourceFile="SourceDir\AlertViz\alertviz.exe" />
</Product>
</Wix>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 451 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

View file

@ -1,20 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual C# Express 2010
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AWIPSII.CAVE", "AWIPSII.CAVE\AWIPSII.CAVE.csproj", "{1F23042E-FD8D-496D-969C-3693FF0664A6}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x86 = Debug|x86
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{1F23042E-FD8D-496D-969C-3693FF0664A6}.Debug|x86.ActiveCfg = Debug|x86
{1F23042E-FD8D-496D-969C-3693FF0664A6}.Debug|x86.Build.0 = Debug|x86
{1F23042E-FD8D-496D-969C-3693FF0664A6}.Release|x86.ActiveCfg = Release|x86
{1F23042E-FD8D-496D-969C-3693FF0664A6}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View file

@ -1,20 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual C# Express 2010
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AWIPSII.Environment", "AWIPSII.Environment\AWIPSII.Environment.csproj", "{9033F84D-9AB7-4D08-B634-603205FFE73A}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x86 = Debug|x86
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{9033F84D-9AB7-4D08-B634-603205FFE73A}.Debug|x86.ActiveCfg = Debug|x86
{9033F84D-9AB7-4D08-B634-603205FFE73A}.Debug|x86.Build.0 = Debug|x86
{9033F84D-9AB7-4D08-B634-603205FFE73A}.Release|x86.ActiveCfg = Release|x86
{9033F84D-9AB7-4D08-B634-603205FFE73A}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View file

@ -1,56 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{9033F84D-9AB7-4D08-B634-603205FFE73A}</ProjectGuid>
<OutputType>Exe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>AWIPSII.Environment</RootNamespace>
<AssemblyName>AWIPSII.Environment</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<None Include="AWIPSII.wixproj">
<SubType>Designer</SubType>
</None>
<None Include="AWIPSII.wxs">
<SubType>Designer</SubType>
</None>
<None Include="AWIPSII_JAVA.wxs" />
<None Include="AWIPSII_PYTHON.wxs">
<SubType>Designer</SubType>
</None>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View file

@ -1,3 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
</Project>

View file

@ -1,32 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
<Platform Condition="'$(Platform)' == ''">x86</Platform>
<ProductVersion>3.5</ProductVersion>
<ProjectGuid>9F9450DE-A24F-412D-8E34-69BEEA3049DF</ProjectGuid>
<SchemaVersion>2.0</SchemaVersion>
<OutputType>Package</OutputType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<OutputPath>bin\$(Configuration)</OutputPath>
<DefineConstants>Debug</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\$(Configuration)</OutputPath>
</PropertyGroup>
<ItemGroup>
<Compile Include="AWIPSII.wxs" />
<Compile Include="AWIPSII_JAVA.wxs" />
<Compile Include="AWIPSII_PYTHON.wxs" />
</ItemGroup>
<PropertyGroup>
<OutputName>AWIPS II Runtime Environment</OutputName>
<LinkerAdditionalOptions>-ext WixUIExtension -b "$(StagingDirectory)"</LinkerAdditionalOptions>
<WixToolPath>C:\Users\Public\Documents\wix35-binaries\</WixToolPath>
<WixTargetsPath>$(WixToolPath)Wix.targets</WixTargetsPath>
<WixTasksPath>$(WixToolPath)wixtasks.dll</WixTasksPath>
<DefineSolutionProperties>false</DefineSolutionProperties>
</PropertyGroup>
<Import Project="$(WixTargetsPath)"/>
</Project>

View file

@ -1,138 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="8A1F2DCB-5527-4D32-BC7A-E4295EA72940" Name="AWIPS II Runtime Environment"
Language="1033" Version="1.0.3.0" Manufacturer="Raytheon"
UpgradeCode="8924277C-5B6A-4EEB-AE9F-5471481F92A6">
<Package Manufacturer="Raytheon" InstallerVersion="200"
Compressed="yes" InstallScope="perMachine" />
<Media Id="1" Cabinet="product.cab" EmbedCab="yes" />
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder" Name="PFiles">
<Directory Id="INSTALLDIR" Name="Raytheon">
<Directory Id="AwipsII" Name="AWIPS II">
</Directory>
</Directory>
</Directory>
<Component Id="A2RE" Guid="2934162A-C503-441D-81F6-284AEE160F65">
<RegistryKey Root="HKMU" Key="Software\Raytheon\Runtime Environment"
Action="createAndRemoveOnUninstall">
<RegistryValue Type="string" Name="Name"
Value="AWIPS II Runtime Environment" KeyPath="yes" />
</RegistryKey>
</Component>
<Component Id="A2JavaRegistryEntries" Guid="2934162A-C503-441D-81F6-284AEE160F84">
<RegistryKey Root="HKMU" Key="Software\Raytheon\Runtime Environment\AWIPS II Java"
Action="createAndRemoveOnUninstall">
<RegistryValue Type="string" Name="JavaInstallDirectory"
Value="[INSTALLDIR]AWIPS II\Java" KeyPath="yes" />
<RegistryValue Type="string" Name="JavaJdkDirectory"
Value="[INSTALLDIR]AWIPS II\Java" />
<RegistryValue Type="string" Name="JavaJreDirectory"
Value="[INSTALLDIR]AWIPS II\Java\jre" />
<RegistryValue Type="string" Name="JavaVersion"
Value="7.0.40" />
<RegistryValue Type="string" Name="JAIVersion"
Value="1.1.3" />
<RegistryValue Type="string" Name="JAIImageIOVersion"
Value="1.1" />
</RegistryKey>
</Component>
<Component Id="A2PythonRegistryEntries" Guid="2D26E381-FD7B-4FD7-9CDE-A78A93BA8CA8">
<RegistryKey Root="HKMU" Key="Software\Raytheon\Runtime Environment\AWIPS II Python"
Action="createAndRemoveOnUninstall">
<RegistryValue Type="string" Name="PythonInstallDirectory"
Value="[INSTALLDIR]AWIPS II\Python" KeyPath="yes" />
<RegistryValue Type="string" Name="PythonVersion"
Value="2.7.2150" />
<RegistryValue Type="integer" Name="SitePackageCount"
Value="10" />
</RegistryKey>
<RegistryKey Root="HKMU" Key="Software\Raytheon\Runtime Environment\AWIPS II Python\SitePackages"
Action="createAndRemoveOnUninstall">
<RegistryValue Type="string" Name="PythonPackage1-Name"
Value="h5py" />
<RegistryValue Type="string" Name="PythonPackage1-Version"
Value="1.3.1" />
<RegistryValue Type="string" Name="PythonPackage2-Name"
Value="matplotlib" />
<RegistryValue Type="string" Name="PythonPackage2-Version"
Value="0.99.1.1" />
<RegistryValue Type="string" Name="PythonPackage3-Name"
Value="nose" />
<RegistryValue Type="string" Name="PythonPackage3-Version"
Value="0.11.1" />
<RegistryValue Type="string" Name="PythonPackage4-Name"
Value="numpy" />
<RegistryValue Type="string" Name="PythonPackage4-Version"
Value="1.5.0" />
<RegistryValue Type="string" Name="PythonPackage5-Name"
Value="pmw" />
<RegistryValue Type="string" Name="PythonPackage5-Version"
Value="1.3.2" />
<RegistryValue Type="string" Name="PythonPackage6-Name"
Value="scientific" />
<RegistryValue Type="string" Name="PythonPackage6-Version"
Value="2.8" />
<RegistryValue Type="string" Name="PythonPackage7-Name"
Value="scipy" />
<RegistryValue Type="string" Name="PythonPackage7-Version"
Value="0.9.0" />
<RegistryValue Type="string" Name="PythonPackage8-Name"
Value="setuptools" />
<RegistryValue Type="string" Name="PythonPackage8-Version"
Value="0.6c11" />
<RegistryValue Type="string" Name="PythonPackage9-Name"
Value="tables" />
<RegistryValue Type="string" Name="PythonPackage9-Version"
Value="2.1.2" />
<RegistryValue Type="string" Name="PythonPackage10-Name"
Value="tpg" />
<RegistryValue Type="string" Name="PythonPackage10-Version"
Value="3.1.2" />
<RegistryValue Type="string" Name="PythonPackage11-Name"
Value="shapely" />
<RegistryValue Type="string" Name="PythonPackage11-Version"
Value="1.2.16" />
</RegistryKey>
</Component>
</Directory>
<Feature Id="AWIPS_II_JAVA" Title="AWIPS II Java" Level="1"
Display="expand" Description="AWIPS II Java"
ConfigurableDirectory="INSTALLDIR">
<ComponentGroupRef Id="AWIPSII_JAVA"/>
<ComponentRef Id="A2JavaRegistryEntries"/>
</Feature>
<Feature Id="AWIPS_II_PYTHON" Title="AWIPS II Python" Level="1"
Display="expand" Description="AWIPS II Python"
ConfigurableDirectory="INSTALLDIR">
<ComponentGroupRef Id="AWIPSII_PYTHON" />
<ComponentRef Id="A2PythonRegistryEntries"/>
</Feature>
<Feature Id="_Hidden_RegKeys" Display="hidden" Level="1">
<ComponentRef Id="A2RE" />
</Feature>
<UIRef Id="WixUI_FeatureTree" />
<UIRef Id="WixUI_ErrorProgressText" />
</Product>
</Wix>

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,37 +0,0 @@
[Version]
Class=IEXPRESS
SEDVersion=3
[Options]
PackagePurpose=InstallApp
ShowInstallProgramWindow=0
HideExtractAnimation=0
UseLongFileName=1
InsideCompressed=0
CAB_FixedSize=0
CAB_ResvCodeSigning=0
RebootMode=I
InstallPrompt=%InstallPrompt%
DisplayLicense=%DisplayLicense%
FinishMessage=%FinishMessage%
TargetName=%TargetName%
FriendlyName=%FriendlyName%
AppLaunched=%AppLaunched%
PostInstallCmd=%PostInstallCmd%
AdminQuietInstCmd=%AdminQuietInstCmd%
UserQuietInstCmd=%UserQuietInstCmd%
SourceFiles=SourceFiles
[Strings]
InstallPrompt=
DisplayLicense=
FinishMessage=
TargetName=C:\A2Staging\AWIPS II CAVE.EXE
FriendlyName=AWIPS II CAVE
AppLaunched=msiexec /i AWIPS_II_CAVE.msi DISABLEADVTSHORTCUTS=1
PostInstallCmd=<None>
AdminQuietInstCmd=
UserQuietInstCmd=
FILE0="AWIPS_II_CAVE.msi"
[SourceFiles]
SourceFiles0=C:\A2Staging
[SourceFiles0]
%FILE0%=

View file

@ -1,62 +0,0 @@
function installCAVERepository([string]$feature_group, [string]$repo)
{
$repo_zip = $repo + ".zip"
New-Item -path ${A2_PREPARE_CAVE_DIR} `
-name $repo -type directory | Out-Null
if ($? -ne $true) { EXIT 1; }
pushd .
cd ${A2_PREPARE_CAVE_DIR}/$repo
jar xvf ${A2_PREPARE_CAVE_DIR}/$repo_zip
popd
.\cave.exe -nosplash -application org.eclipse.equinox.p2.director `
-i $feature_group -repository "file:${A2_PREPARE_CAVE_DIR}/$repo" | Out-Host
if ($? -ne $true) { echo "ERROR: Unable to install feature: $feature_group."; echo "FATAL: Build Failed!"; EXIT 1; }
Remove-Item -recurse -force ${A2_PREPARE_CAVE_DIR}/$repo
if ($? -ne $true) { EXIT 1; }
pushd .
cd plugins
dir -rec | where { if (($_.fullname.split("\")).count -eq 7 -and `
$_.name.equals("localization")){$_}} | ForEach-Object -process `
{ $localizationDirectory = $_.fullname; `
echo $localizationDirectory; `
Copy-Item -force -recurse -path "${localizationDirectory}\*" -destination ${A2_PREPARE_CAVE_DIR}\cave\etc; `
if ($? -ne $true) { EXIT 1; }; `
Remove-Item -force -recurse ${localizationDirectory}; `
if ($? -ne $true) { EXIT 1; } }
if ($? -ne $true) { EXIT 1; }
popd
echo "`n"
}
pushd .
cd ${A2_PREPARE_CAVE_DIR}\cave
New-Item -path ${A2_PREPARE_CAVE_DIR}\cave `
-name etc -type directory | Out-Null
if ($? -ne $true) { EXIT 1; }
$repo_suffix = "-repo-win32.x86"
if ("${AWIPS2_BUILD_ARCHITECTURE}" -eq "x64")
{
$repo_suffix = "-repo-win32.x86_64"
}
echo "`n"
$feature_list = Get-Content "${A2_PREPARE_CAVE_DIR}\features.txt"
Write-Host Feature Count = $feature_list.count
foreach ($feature in $feature_list)
{
Write-Host Installing Feature: $feature
$feature_group = $feature + ".feature.group"
$repo = $feature + $repo_suffix
installCAVERepository -feature_group "$feature_group" `
-repo "$repo"
}
popd
EXIT 0

View file

@ -1,94 +0,0 @@
Common Public License Version 1.0
THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
1. DEFINITIONS
"Contribution" means:
a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
b) in the case of each subsequent Contributor:
i) changes to the Program, and
ii) additions to the Program;
where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.
"Contributor" means any person or entity that distributes the Program.
"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
"Program" means the Contributions distributed in accordance with this Agreement.
"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
2. GRANT OF RIGHTS
a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.
b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.
d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
3. REQUIREMENTS
A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
a) it complies with the terms and conditions of this Agreement; and
b) its license agreement:
i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and
iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.
When the Program is made available in source code form:
a) it must be made available under this Agreement; and
b) a copy of this Agreement must be included with each copy of the Program.
Contributors may not remove or alter any copyright notices contained within the Program.
Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.
4. COMMERCIAL DISTRIBUTION
Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.
For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.
5. NO WARRANTY
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
6. DISCLAIMER OF LIABILITY
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
7. GENERAL
If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
If Recipient institutes patent litigation against a Contributor with respect to a patent applicable to software (including a cross-claim or counterclaim in a lawsuit), then any patent licenses granted by that Contributor to such Recipient under this Agreement shall terminate as of the date such litigation is filed. In addition, if Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.
Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. IBM is the initial Agreement Steward. IBM may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.

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