diff --git a/cave/com.raytheon.uf.viz.d2d.core/src/com/raytheon/uf/viz/d2d/core/time/D2DTimeMatcher.java b/cave/com.raytheon.uf.viz.d2d.core/src/com/raytheon/uf/viz/d2d/core/time/D2DTimeMatcher.java
index e139669a35..4047e9f945 100644
--- a/cave/com.raytheon.uf.viz.d2d.core/src/com/raytheon/uf/viz/d2d/core/time/D2DTimeMatcher.java
+++ b/cave/com.raytheon.uf.viz.d2d.core/src/com/raytheon/uf/viz/d2d/core/time/D2DTimeMatcher.java
@@ -1061,7 +1061,8 @@ public class D2DTimeMatcher extends AbstractTimeMatcher {
} else if (rp.getProperties().isMapLayer()
|| rp.getProperties().isSystemResource()) {
continue;
- } else if (rsc.getResourceData() instanceof IResourceGroup) {
+ } else if (rsc != null
+ && rsc.getResourceData() instanceof IResourceGroup) {
if (validateTimeMatchBasis(((IResourceGroup) rsc.getResourceData())
.getResourceList())) {
return true;
diff --git a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/FollowupData.java b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/FollowupData.java
index ea894bda8b..12b5db47ca 100644
--- a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/FollowupData.java
+++ b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/FollowupData.java
@@ -37,7 +37,7 @@ import com.raytheon.uf.common.time.util.TimeUtil;
* May 7, 2013 1973 rferrel Changes to properly display Issue Time.
* Jul 22, 2013 2176 jsanchez Added EMER to the display string in the update list.
* Aug 7, 2013 2243 jsanchez Set all the attributes of an AbstractWarningRecord and added an expiration string. Removed calendar object.
- *
+ * Aug 15,2013 2243 jsanchez Improved the expiration string off by one minute.
*
*
* @author rferrel
@@ -143,9 +143,11 @@ public class FollowupData extends WarningRecord {
StringBuilder rval = new StringBuilder();
long timeInMillis = SimulatedTime.getSystemTime().getMillis();
if (status != WarningAction.COR) {
- // Positive means not yet expired
- long diffMins = (record.getEndTime().getTimeInMillis() - timeInMillis)
- / TimeUtil.MILLIS_PER_MINUTE;
+ // use double to keep precision until it's casted to an integer
+ double diffMillis = record.getEndTime().getTimeInMillis()
+ - timeInMillis;
+ int diffMins = (int) Math.round(diffMillis
+ / TimeUtil.MILLIS_PER_MINUTE);
if (diffMins == 0) {
rval.append(" Expired");
} else if (diffMins > 0) {
@@ -154,8 +156,12 @@ public class FollowupData extends WarningRecord {
rval.append(" Exp ").append(-diffMins).append(" min ago");
}
} else {
- long diffMins = (timeInMillis - record.getIssueTime()
- .getTimeInMillis()) / TimeUtil.MILLIS_PER_MINUTE;
+ // use double to keep precision until it's casted to an integer
+ double diffMillis = timeInMillis
+ - record.getIssueTime().getTimeInMillis();
+ int diffMins = (int) Math.round(diffMillis
+ / TimeUtil.MILLIS_PER_MINUTE);
+
if (diffMins == 0) {
rval.append(" Just Issued");
} else {
diff --git a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenDialog.java b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenDialog.java
index 60ccbee24d..02b319c787 100644
--- a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenDialog.java
+++ b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenDialog.java
@@ -936,6 +936,7 @@ public class WarngenDialog extends CaveSWTDialog implements
// Select the previously selected item.
invalidFollowUpAction = false;
if (currentSelection != null) {
+ // isValid checks if the current selection is still in the list
boolean isValid = false;
for (int i = 0; i < updateListCbo.getItemCount(); i++) {
if (updateListCbo.getItem(i).startsWith(
@@ -954,7 +955,9 @@ public class WarngenDialog extends CaveSWTDialog implements
// up option could be removed due to an action such as a CAN or an
// EXP. If an action removes the follow up, then no warning message
// should be displayed.
- if (!timeRange.contains(SimulatedTime.getSystemTime().getTime())) {
+ if (!isValid
+ && !timeRange.contains(SimulatedTime.getSystemTime()
+ .getTime())) {
invalidFollowUpAction = true;
preventFollowUpAction(currentSelection);
}
diff --git a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/util/CurrentWarnings.java b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/util/CurrentWarnings.java
index 8f1a7cb716..611154a8c5 100644
--- a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/util/CurrentWarnings.java
+++ b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/util/CurrentWarnings.java
@@ -74,6 +74,8 @@ import com.vividsolutions.jts.geom.Geometry;
* May 31, 2013 DR 16264 D. Friedman Fix query in prepare method.
* Jun 05, 2013 DR 16279 D. Friedman Fix updating of issuance time for followups.
* Jul 22, 2013 2176 jsanchez Set the raw message for an EXT.
+ * Aug 14, 2013 DR 16483 Qinglu Lin Fixed no option issue in WarnGen dropdown menu after
+ * issuance of an CANCON and restart of CAVE.
*
*
* @author mschenke
@@ -344,7 +346,7 @@ public class CurrentWarnings {
|| (action == WarningAction.EXP)) {
if ((rval != null)
&& (warning.getCountyheader().equals(
- rval.getCountyheader()) || !warning
+ rval.getCountyheader()) || warning
.getUgcZones().containsAll(
rval.getUgcZones()))) {
rval = null;
diff --git a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/util/FollowUpUtil.java b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/util/FollowUpUtil.java
index ff94f45f3b..04b3dca957 100644
--- a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/util/FollowUpUtil.java
+++ b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/util/FollowUpUtil.java
@@ -32,6 +32,7 @@ import com.raytheon.viz.warngen.text.ICommonPatterns;
* Mar 13, 2013 DR 15892 D. Friedman Handle SMW format in canceledAreasFromText
* Aug 6, 2013 2243 jsanchez Updated the time ranges to be removed from the follow up list correctly.
* Aug 13, 2013 2243 jsanchez Removed calendar object.
+ * Aug 15, 2013 2243 jsanchez Reset the time ranges to the correct values.
*
*
*
@@ -314,45 +315,40 @@ public class FollowUpUtil {
TimeRange rval = null;
- // The time ranges are offset by 1 minute so that after a refresh and on
- // the final minute of the time range the follow up data will be
- // removed. For example, if a CON is only a available until 5 minutes
- // before a warnings expiration, when the time reaches 5 minutes the
- // follow up data for a CON is correctly removed.
if (action == WarningAction.NEW) {
/* Calculate NEW Time Range */
start.setTime(record.getEndTime().getTime());
- start.add(Calendar.MINUTE, -21);
+ start.add(Calendar.MINUTE, -20);
end.setTime(record.getEndTime().getTime());
- end.add(Calendar.MINUTE, 29);
+ end.add(Calendar.MINUTE, 30);
rval = new TimeRange(start, end);
} else if (action == WarningAction.COR) {
/* Calculate COR Time Range */
end.setTime(record.getIssueTime().getTime());
- end.add(Calendar.MINUTE, 9);
+ end.add(Calendar.MINUTE, 10);
rval = new TimeRange(record.getStartTime(), end);
} else if (action == WarningAction.CAN) {
/* Calculate CAN Time Range */
end.setTime(record.getEndTime().getTime());
- end.add(Calendar.MINUTE, -11);
+ end.add(Calendar.MINUTE, -10);
rval = new TimeRange(record.getStartTime(), end);
} else if (action == WarningAction.CON) {
/* Calculate CON Time Range */
end.setTime(record.getEndTime().getTime());
- end.add(Calendar.MINUTE, -6);
+ end.add(Calendar.MINUTE, -5);
rval = new TimeRange(record.getStartTime(), end);
} else if (action == WarningAction.EXP) {
/* Calculate EXP Time Range */
start.setTime(record.getEndTime().getTime());
- start.add(Calendar.MINUTE, -11);
+ start.add(Calendar.MINUTE, -10);
end.setTime(record.getEndTime().getTime());
- end.add(Calendar.MINUTE, 9);
+ end.add(Calendar.MINUTE, 10);
rval = new TimeRange(start, end);
} else if (action == WarningAction.EXT) {
/* Calculate EXT Time Range */
start.setTime(record.getStartTime().getTime());
end.setTime(record.getEndTime().getTime());
- end.add(Calendar.MINUTE, -6);
+ end.add(Calendar.MINUTE, -5);
rval = new TimeRange(start, end);
}
diff --git a/nativeLib/build.native/build-notification.sh b/nativeLib/build.native/build-notification.sh
index 2bb5a68c36..4517812a8e 100644
--- a/nativeLib/build.native/build-notification.sh
+++ b/nativeLib/build.native/build-notification.sh
@@ -197,12 +197,5 @@ if [ $? -ne 0 ]; then
echo "ERROR: Failed to copy the org.apache.thrift lib to its destination."
exit 1
fi
-# org.apache.qpid lib -> notification/lib
-cp -vPf ${BUILD_ROOT}/workspace_/org.apache.qpid/${FOSS_LIB_DIR}/* \
- ${BUILD_ROOT}/awips2/notification/${FOSS_LIB_DIR}
-if [ $? -ne 0 ]; then
- echo "ERROR: Failed to copy the org.apache.qpid lib to its destination."
- exit 1
-fi
exit 0
diff --git a/nativeLib/edex_com/.cproject b/nativeLib/edex_com/.cproject
index fd620de1cd..250a367700 100644
--- a/nativeLib/edex_com/.cproject
+++ b/nativeLib/edex_com/.cproject
@@ -39,7 +39,7 @@
@@ -202,6 +201,9 @@
+
+
+
diff --git a/nativeLib/edex_com/.gitignore b/nativeLib/edex_com/.gitignore
index 2d69fdad40..3da133aacc 100644
--- a/nativeLib/edex_com/.gitignore
+++ b/nativeLib/edex_com/.gitignore
@@ -1 +1,2 @@
/Build x86
+/Build x86_64
diff --git a/nativeLib/edex_com/src/EdexNotification.cpp b/nativeLib/edex_com/src/EdexNotification.cpp
index fb2b56313c..4176190ab2 100644
--- a/nativeLib/edex_com/src/EdexNotification.cpp
+++ b/nativeLib/edex_com/src/EdexNotification.cpp
@@ -28,6 +28,7 @@
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 11/2/09 3375 brockwoo Initial Creation
+ * 08/13/13 2257 bkowal Update for qpid 0.18.
*
*
*
@@ -35,14 +36,18 @@
* @version 1
*/
-#include
-#include
+#include
+#include
+#include
+#include
+#include
#include
#include "EdexNotification.h"
using qpid::Url;
-EdexNotification::EdexNotification(const string & brokerURI) {
+EdexNotification::EdexNotification(const string & brokerURI) :
+ duration(Duration(1000 * 120)) {
this->sessionTransacted = false;
this->brokerURI = brokerURI;
this->isConnected = false;
@@ -50,8 +55,6 @@ EdexNotification::EdexNotification(const string & brokerURI) {
this->mess = new com_raytheon_uf_common_dataplugin_message_DataURINotificationMessage();
this->timeout = false;
this->timeoutLength = 999999;
- this->subman = NULL;
- this->localQueue = NULL;
}
EdexNotification::~EdexNotification() {
@@ -92,24 +95,14 @@ void EdexNotification::listen() {
Message message;
bool result;
try {
- result = localQueue->get(message, 120 * qpid::sys::TIME_SEC);
+ result = this->receiver.fetch(message, this->duration);
} catch(...) {
cleanup();
throw;
}
if (result) {
- std::string output = message.getData();
- /* Message * message;
- if(timeout) {
- message = this->consumer->receive();
- }
- else {
- message = this->consumer->receive(timeoutLength);
- }
- if (message == NULL) {
- listSize = 0;
- } else {
- */
+ this->session.acknowledge(message);
+ std::string output = message.getContent();
uint8_t * data = (uint8_t *) output.c_str();
TMemoryBuffer * buffer = new TMemoryBuffer(data,
output.length(),
@@ -136,16 +129,52 @@ void EdexNotification::listen() {
void EdexNotification::cleanup() {
// Destroy resources.
- try {
- delete subman;
- subman = NULL;
- delete localQueue;
- localQueue = NULL;
- session.close();
- connection.close();
- } catch (const std::exception& error) {
- this->isConnected = false;
+
+ // attempt to close the receiver
+ if (this->receiver != 0)
+ {
+ try
+ {
+ this->receiver.close();
+ this->receiver = 0;
+ }
+ catch (const std::exception& error)
+ {
+ std::cout << "WARNING: Failed to close the receiver -"
+ << error.what() << std::endl;
+ }
}
+
+ // attempt to close the session
+ if (this->session != 0)
+ {
+ try
+ {
+ this->session.close();
+ this->session = 0;
+ }
+ catch (const std::exception& error)
+ {
+ std::cout << "WARNING: Failed to close the session -"
+ << error.what() << std::endl;
+ }
+ }
+
+ // attempt to close the connection
+ if (this->connection != 0)
+ {
+ try
+ {
+ this->connection.close();
+ this->connection = 0;
+ }
+ catch (const std::exception& error)
+ {
+ std::cout << "WARNING: Failed to close the connection -"
+ << error.what() << std::endl;
+ }
+ }
+
this->isConnected = false;
}
@@ -154,23 +183,38 @@ bool EdexNotification::connect() {
return this->isConnected;
}
try {
- this->connection.open(Url(brokerURI));
- this->session = this->connection.newSession();
+ // initialize
+ this->connection = 0;
+ this->session = 0;
+ this->receiver = 0;
+
+ char uuidBuff[37];
+ uuid_t uuidGenerated;
+ uuid_generate_random(uuidGenerated);
+ uuid_unparse(uuidGenerated, uuidBuff);
+
+ std::string connectionOptions = "{sasl-mechanism:PLAIN,"
+ "username:guest,password:guest}";
+
+ this->connection = Connection(this->brokerURI, connectionOptions);
+ this->connection.open();
queue = "_edex.alert-edex_com@amq.topic_";
- queue += session.getId().getName();
- QueueOptions qo;
- qo.setSizePolicy(RING, 100 * 1024 * 1024, 5000);
- session.queueDeclare(arg::queue = queue, arg::exclusive = true,
- arg::autoDelete = true, arg::arguments=qo);
- session.exchangeBind(arg::exchange = "amq.topic", arg::queue = queue,
- arg::bindingKey = "edex.alerts");
- subman = new SubscriptionManager(session);
- localQueue = new LocalQueue();
- subman->subscribe(*localQueue, queue);
+ queue += std::string(uuidBuff);
+
+ std::stringstream addressBuilder;
+ addressBuilder << queue;
+ addressBuilder << "; {create:always,delete:always,node:{type:queue,";
+ addressBuilder << "x-bindings:[{exchange:amq.topic,queue:";
+ addressBuilder << queue;
+ addressBuilder << ",key:edex.alerts}]}}";
+ const std::string address = addressBuilder.str();
+
+ this->session = this->connection.createSession();
+ this->receiver = this->session.createReceiver(address);
+
this->isConnected = true;
} catch (const std::exception& error) {
- this->isConnected = false;
- cleanup();
+ this->cleanup();
throw;
}
return this->isConnected;
diff --git a/nativeLib/edex_com/src/EdexNotification.h b/nativeLib/edex_com/src/EdexNotification.h
index bccc3fe145..c842c1dc9c 100644
--- a/nativeLib/edex_com/src/EdexNotification.h
+++ b/nativeLib/edex_com/src/EdexNotification.h
@@ -29,6 +29,7 @@
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 11/2/09 3375 brockwoo Initial Creation
+ * 08/13/13 2257 bkowal Update for qpid 0.18.
*
*
*
@@ -43,18 +44,18 @@ typedef void CEdexNotification;
#ifdef __cplusplus
-#include
-#include
-#include
-#include
-#include
+#include
+#include
+#include
+#include
+#include
#include
#include
#include
#include "Notification_types.h"
#include "NotificationProtocol.h"
-using namespace qpid::client;
+using namespace qpid::messaging;
using namespace qpid::framing;
using namespace std;
using apache::thrift::transport::TMemoryBuffer;
@@ -65,16 +66,16 @@ private:
Connection connection;
Session session;
+ Receiver receiver;
+ const Duration duration;
bool useTopic;
bool sessionTransacted;
bool isConnected;
int listSize;
com_raytheon_uf_common_dataplugin_message_DataURINotificationMessage * mess;
- SubscriptionManager * subman;
vector::iterator myStringIterator;
std::string brokerURI;
std::string queue;
- LocalQueue * localQueue;
bool timeout;
int timeoutLength;
diff --git a/nativeLib/edex_notify/.cproject b/nativeLib/edex_notify/.cproject
index ce16672252..a0a2fc7b03 100644
--- a/nativeLib/edex_notify/.cproject
+++ b/nativeLib/edex_notify/.cproject
@@ -45,14 +45,14 @@
@@ -82,255 +82,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -378,24 +129,24 @@
@@ -415,255 +166,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -673,4 +175,254 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/nativeLib/edex_notify/.gitignore b/nativeLib/edex_notify/.gitignore
index 2d69fdad40..3da133aacc 100644
--- a/nativeLib/edex_notify/.gitignore
+++ b/nativeLib/edex_notify/.gitignore
@@ -1 +1,2 @@
/Build x86
+/Build x86_64
diff --git a/rpms/awips2.core/Installer.ldm/component.spec b/rpms/awips2.core/Installer.ldm/component.spec
index ad2578f5b1..ddc8f8ad40 100644
--- a/rpms/awips2.core/Installer.ldm/component.spec
+++ b/rpms/awips2.core/Installer.ldm/component.spec
@@ -9,7 +9,7 @@
Name: awips2-ldm
Summary: AWIPS II LDM Distribution
Version: %{_ldm_version}
-Release: 6
+Release: 7
Group: AWIPSII
BuildRoot: /tmp
BuildArch: noarch
@@ -20,7 +20,6 @@ Vendor: Raytheon
Packager: Bryan Kowal
AutoReq: no
-Requires: awips2-notification
Requires: qpid-cpp-client-devel
Requires: zlib-devel
provides: awips2-ldm
@@ -77,7 +76,7 @@ fi
_ldm_destination=%{_build_root}/usr/local/ldm
_ldm_destination_source=${_ldm_destination}/SOURCES
-_NATIVELIB_PROJECTS=( 'edexBridge' 'decrypt_file' )
+_NATIVELIB_PROJECTS=( 'edexBridge' 'decrypt_file' 'org.apache.qpid' )
_RPM_directory=%{_baseline_workspace}/rpms
_Installer_ldm=${_RPM_directory}/awips2.core/Installer.ldm
@@ -272,9 +271,28 @@ if [ ${_myHost} != "cpsbn1" -a ${_myHost} != "cpsbn2" -a ${_myHost} != "dx1" -a
fi
popd > /dev/null 2>&1
-# build decrypt_file & edexBridge
+# extract qpid libraries; build decrypt_file & edexBridge
pushd . > /dev/null 2>&1
cd ${_ldm_dir}/SOURCES
+
+# determine which lib directory to use
+_arch=`uname -i`
+_qpid_lib_dir="lib"
+if [ "${_arch}" = "x86_64" ]; then
+ _qpid_lib_dir="lib64"
+fi
+
+/bin/tar -xvf org.apache.qpid.tar org.apache.qpid/${_qpid_lib_dir}/*
+if [ $? -ne 0 ]; then
+ echo "FATAL: failed to extract the qpid libraries!"
+ exit 1
+fi
+cp -Pf org.apache.qpid/${_qpid_lib_dir}/* ${_ldm_root_dir}/lib
+if [ $? -ne 0 ]; then
+ echo "FATAL: failed to copy the qpid libraries to the ldm lib directory."
+ exit 1
+fi
+
/bin/tar -xf decrypt_file.tar
if [ $? -ne 0 ]; then
echo "FATAL: failed to untar decrypt_file.tar!"
diff --git a/rpms/awips2.core/Installer.notification/component.spec b/rpms/awips2.core/Installer.notification/component.spec
index 413a16c6db..1d0cc14937 100644
--- a/rpms/awips2.core/Installer.notification/component.spec
+++ b/rpms/awips2.core/Installer.notification/component.spec
@@ -28,6 +28,7 @@ Packager: Bryan Kowal
AutoReq: no
requires: boost >= 1.33.1
+requires: awips2-qpid-lib
provides: awips2-notification
%description
diff --git a/rpms/awips2.core/Installer.notification/scripts/profile.d/awips2Notification.csh b/rpms/awips2.core/Installer.notification/scripts/profile.d/awips2Notification.csh
index efdeb76069..0dd2281d7d 100644
--- a/rpms/awips2.core/Installer.notification/scripts/profile.d/awips2Notification.csh
+++ b/rpms/awips2.core/Installer.notification/scripts/profile.d/awips2Notification.csh
@@ -2,11 +2,12 @@
# Determine where notification has been installed.
set NOTIFICATION_INSTALL="/awips2/notification"
+set QPID_LIB_DIR="/awips2/qpid/lib"
if $?LD_LIBRARY_PATH then
- setenv LD_LIBRARY_PATH ${NOTIFICATION_INSTALL}/lib:$LD_LIBRARY_PATH
+ setenv LD_LIBRARY_PATH ${NOTIFICATION_INSTALL}/lib:${QPID_LIB_DIR}:$LD_LIBRARY_PATH
else
- setenv LD_LIBRARY_PATH ${NOTIFICATION_INSTALL}/lib
+ setenv LD_LIBRARY_PATH ${NOTIFICATION_INSTALL}/lib:${QPID_LIB_DIR}
endif
if $?PATH then
diff --git a/rpms/awips2.core/Installer.notification/scripts/profile.d/awips2Notification.sh b/rpms/awips2.core/Installer.notification/scripts/profile.d/awips2Notification.sh
index 332c059a6f..767b0a58bc 100644
--- a/rpms/awips2.core/Installer.notification/scripts/profile.d/awips2Notification.sh
+++ b/rpms/awips2.core/Installer.notification/scripts/profile.d/awips2Notification.sh
@@ -2,23 +2,30 @@
# Is awips2-notification Installed?
rpm -q awips2-notification > /dev/null 2>&1
-RC=$?
-if [ ${RC} -ne 0 ]; then
+if [ $? -ne 0 ]; then
return
fi
# Determine Where awips2-notification Has Been Installed.
NOTIFICATION_INSTALL="/awips2/notification"
-if [ "${NOTIFICATION_INSTALL}" = "" ]; then
- return
-fi
+QPID_LIB_DIR="/awips2/qpid/lib"
# Update The Environment.
# Determine if awips2-notification is Already On LD_LIBRARY_PATH
CHECK_PATH=`echo ${LD_LIBRARY_PATH} | grep ${NOTIFICATION_INSTALL}`
if [ "${CHECK_PATH}" = "" ]; then
# awips2-notification Is Not On LD_LIBRARY_PATH; Add It.
- export LD_LIBRARY_PATH=${NOTIFICATION_INSTALL}/lib:${LD_LIBRARY_PATH}
+ _lib_dir=${NOTIFICATION_INSTALL}/lib
+ if [ -d ${NOTIFICATION_INSTALL}/lib64 ]; then
+ _lib_dir=${NOTIFICATION_INSTALL}/lib64
+ fi
+ export LD_LIBRARY_PATH=${_lib_dir}:${LD_LIBRARY_PATH}
+fi
+
+# Determine if the qpid lib directory is already on LD_LIBRARY_PATH
+CHECK_PATH=`echo ${LD_LIBRARY_PATH} | grep ${QPID_LIB_DIR}`
+if [ "${CHECK_PATH}" = "" ]; then
+ export LD_LIBRARY_PATH=${QPID_LIB_DIR}:$LD_LIBRARY_PATH
fi
# Determine if awips2-notification Is Already Part Of The Path.
diff --git a/rpms/awips2.qpid/0.18/SPECS/qpid-lib.spec b/rpms/awips2.qpid/0.18/SPECS/qpid-lib.spec
new file mode 100644
index 0000000000..897f542bd4
--- /dev/null
+++ b/rpms/awips2.qpid/0.18/SPECS/qpid-lib.spec
@@ -0,0 +1,122 @@
+%define _build_arch %(uname -i)
+%define _qpid_version 0.18
+%define _qpid_build_loc %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+%global qpid_src_dir qpid-%{version}
+#
+# AWIPS II QPID native Spec File
+#
+
+Name: awips2-qpid-lib
+Summary: AWIPS II QPID Native Library Distribution
+Version: %{_qpid_version}
+Release: 1.el6
+Group: AWIPSII
+BuildRoot: %{_build_root}
+BuildArch: %{_build_arch}
+URL: N/A
+License: N/A
+Distribution: N/A
+Vendor: Raytheon
+Packager: Bryan Kowal
+
+Source0: %{qpid_src_dir}.tar.gz
+
+AutoReq: no
+BuildRequires: awips2-python
+provides: awips2-qpid-lib
+
+%description
+AWIPS II QPID Lib Distribution - Contains the qpid shared libraries and
+header files for qpid %{_qpid_version}.
+
+%prep
+# Ensure that a "buildroot" has been specified.
+if [ "%{_build_root}" = "" ]; then
+ echo "ERROR: A BuildRoot has not been specified."
+ echo "FATAL: Unable to Continue ... Terminating."
+ exit 1
+fi
+
+if [ -d %{_build_root} ]; then
+ rm -rf %{_build_root}
+fi
+if [ -d %{_qpid_build_loc} ]; then
+ rm -rf %{_qpid_build_loc}
+fi
+mkdir -p %{_qpid_build_loc}
+if [ $? -ne 0 ]; then
+ exit 1
+fi
+
+cp -v %SOURCE0 %{_qpid_build_loc}
+if [ $? -ne 0 ]; then
+ exit 1
+fi
+
+pushd . > /dev/null 2>&1
+cd %{_qpid_build_loc}
+tar -xvf %SOURCE0
+if [ $? -ne 0 ]; then
+ exit 1
+fi
+popd > /dev/null 2>&1
+
+%build
+pushd . > /dev/null 2>&1
+cd %{_qpid_build_loc}/%{qpid_src_dir}/cpp
+./bootstrap
+if [ $? -ne 0 ]; then
+ exit 1
+fi
+
+./configure --prefix=%{_qpid_build_loc}/awips2/qpid
+if [ $? -ne 0 ]; then
+ exit 1
+fi
+make
+if [ $? -ne 0 ]; then
+ exit 1
+fi
+popd > /dev/null 2>&1
+
+%install
+/bin/mkdir -p %{_qpid_build_loc}/awips2/qpid
+if [ $? -ne 0 ]; then
+ exit 1
+fi
+
+pushd . > /dev/null 2>&1
+cd %{_qpid_build_loc}/%{qpid_src_dir}/cpp
+make install
+if [ $? -ne 0 ]; then
+ exit 1
+fi
+popd > /dev/null 2>&1
+
+/bin/mkdir -p %{_build_root}/awips2/qpid
+if [ $? -ne 0 ]; then
+ exit 1
+fi
+
+# copy qpid lib and include directories.
+/bin/cp -rv %{_qpid_build_loc}/awips2/qpid/lib \
+ %{_build_root}/awips2/qpid
+/bin/cp -rv %{_qpid_build_loc}/awips2/qpid/include \
+ %{_build_root}/awips2/qpid
+
+%pre
+%post
+%preun
+%postun
+
+%clean
+rm -rf ${RPM_BUILD_ROOT}
+rm -rf %{_qpid_build_loc}
+
+%files
+%defattr(644,awips,fxalpha,755)
+%dir /awips2/qpid
+%dir /awips2/qpid/lib
+/awips2/qpid/lib/*
+%dir /awips2/qpid/include
+/awips2/qpid/include/*
\ No newline at end of file
diff --git a/rpms/awips2.qpid/0.18/deploy.builder/build.sh b/rpms/awips2.qpid/0.18/deploy.builder/build.sh
index fb0865b907..47e5aa48e6 100644
--- a/rpms/awips2.qpid/0.18/deploy.builder/build.sh
+++ b/rpms/awips2.qpid/0.18/deploy.builder/build.sh
@@ -54,6 +54,15 @@ rpmbuild -ba \
if [ $? -ne 0 ]; then
exit 1
fi
+rpmbuild -ba \
+ --define "_topdir ${TOPDIR}" \
+ --define "_baseline_workspace ${WORKSPACE}" \
+ --define "_build_root ${AWIPSII_BUILD_ROOT}" \
+ --buildroot ${AWIPSII_BUILD_ROOT} \
+ SPECS/qpid-lib.spec
+if [ $? -ne 0 ]; then
+ exit 1
+fi
popd > /dev/null
exit 0
diff --git a/rpms/build/common/rpms.sh b/rpms/build/common/rpms.sh
index 1ac1a4cd02..588d40a0cd 100644
--- a/rpms/build/common/rpms.sh
+++ b/rpms/build/common/rpms.sh
@@ -57,6 +57,22 @@ function buildQPID()
if [ $? -ne 0 ]; then
return 1
fi
+ cd ../x86_64
+ if [ $? -ne 0 ]; then
+ echo "ERROR: Failed to build Qpid v0.18 lib."
+ return 1
+ fi
+ if [ ! -d ${AWIPSII_TOP_DIR}/RPMS/x86_64 ]; then
+ mkdir -p ${AWIPSII_TOP_DIR}/RPMS/x86_64
+ if [ $? -ne 0 ]; then
+ exit 1
+ fi
+ fi
+ /bin/cp -v *.rpm ${AWIPSII_TOP_DIR}/RPMS/x86_64
+ if [ $? -ne 0 ]; then
+ echo "ERROR: Failed to build Qpid v0.18 lib."
+ return 1
+ fi
popd > /dev/null 2>&1
pushd . > /dev/null 2>&1