Merge branch 'development' into development_on_RHEL6
Conflicts: rpms/awips2.core/Installer.cli/scripts/profile.d/awips2CLI.csh rpms/awips2.core/Installer.cli/scripts/profile.d/awips2CLI.sh rpms/awips2.core/Installer.tools/component.spec rpms/awips2.core/Installer.tools/scripts/profile.d/awips2HDF5Tools.csh rpms/awips2.core/Installer.tools/scripts/profile.d/awips2HDF5Tools.sh Former-commit-id:d73aaf9753
[formerly4bad21e6cd
] [formerly3255bf3861
[formerly 4ad10d4cc3b189c65352f0c205fe8664a52bf407]] Former-commit-id:3255bf3861
Former-commit-id:76726372e5
This commit is contained in:
commit
400b4a1328
101 changed files with 1966 additions and 1928 deletions
|
@ -121,13 +121,6 @@
|
||||||
version="0.0.0"
|
version="0.0.0"
|
||||||
unpack="false"/>
|
unpack="false"/>
|
||||||
|
|
||||||
<plugin
|
|
||||||
id="gov.noaa.nws.ncep.common.dataplugin.ncccfp"
|
|
||||||
download-size="0"
|
|
||||||
install-size="0"
|
|
||||||
version="0.0.0"
|
|
||||||
unpack="false"/>
|
|
||||||
|
|
||||||
<plugin
|
<plugin
|
||||||
id="gov.noaa.nws.ncep.common.dataplugin.ncscat"
|
id="gov.noaa.nws.ncep.common.dataplugin.ncscat"
|
||||||
download-size="0"
|
download-size="0"
|
||||||
|
|
11
deltaScripts/14.2.1/dropNcccfp.sh
Normal file
11
deltaScripts/14.2.1/dropNcccfp.sh
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# DR #2485 remove ncccfp from the database
|
||||||
|
|
||||||
|
PSQL="/awips2/psql/bin/psql"
|
||||||
|
|
||||||
|
SQL_COMMAND="
|
||||||
|
delete from plugin_info where name = 'ncccfp';
|
||||||
|
drop table if exists ncccfp;
|
||||||
|
drop sequence if exists ncccfpseq;
|
||||||
|
"
|
||||||
|
${PSQL} -U awips -d metadata -c "${SQL_COMMAND}"
|
|
@ -31,6 +31,6 @@ if [ ${RC} -ne 0 ]; then
|
||||||
echo "Unable To Continue ... Terminating."
|
echo "Unable To Continue ... Terminating."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
JAVA_INSTALL=`rpm -q --queryformat '%{INSTALLPREFIX}' awips2-java`
|
JAVA_INSTALL=`rpm -q --queryformat '%{INSTPREFIXES}' awips2-java`
|
||||||
|
|
||||||
${JAVA_INSTALL}/bin/java -classpath $awips_home/edex/lib/plugins/plugin-warning.jar:$awips_home/edex/lib/dependencies/org.geotools/jts-1.9.jar com.raytheon.edex.plugin.warning.tools.DamInfoTranslator $@
|
${JAVA_INSTALL}/bin/java -classpath $awips_home/edex/lib/plugins/plugin-warning.jar:$awips_home/edex/lib/dependencies/org.geotools/jts-1.9.jar com.raytheon.edex.plugin.warning.tools.DamInfoTranslator $@
|
||||||
|
|
|
@ -52,6 +52,30 @@
|
||||||
<pattern>%-5p %d [%t] %c{0}: %m%n</pattern>
|
<pattern>%-5p %d [%t] %c{0}: %m%n</pattern>
|
||||||
</encoder>
|
</encoder>
|
||||||
</appender>
|
</appender>
|
||||||
|
|
||||||
|
<!-- data delivery Notification log -->
|
||||||
|
<appender name="NotificationLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||||
|
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||||
|
<fileNamePattern>${edex.home}/logs/edex-${edex.run.mode}-notification-%d{yyyyMMdd}.log</fileNamePattern>
|
||||||
|
<maxHistory>30</maxHistory>
|
||||||
|
</rollingPolicy>
|
||||||
|
|
||||||
|
<encoder>
|
||||||
|
<pattern>%-5p %d [%t] %c{0}: %m%n</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<!-- data delivery Retrieval log -->
|
||||||
|
<appender name="RetrievalLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||||
|
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||||
|
<fileNamePattern>${edex.home}/logs/edex-${edex.run.mode}-retrieval-%d{yyyyMMdd}.log</fileNamePattern>
|
||||||
|
<maxHistory>30</maxHistory>
|
||||||
|
</rollingPolicy>
|
||||||
|
|
||||||
|
<encoder>
|
||||||
|
<pattern>%-5p %d [%t] %c{0}: %m%n</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
<!-- Purge log -->
|
<!-- Purge log -->
|
||||||
<appender name="PurgeLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
<appender name="PurgeLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||||
|
@ -131,12 +155,61 @@
|
||||||
<level value="INFO"/>
|
<level value="INFO"/>
|
||||||
<appender-ref ref="DataDeliveryLog"/>
|
<appender-ref ref="DataDeliveryLog"/>
|
||||||
</logger>
|
</logger>
|
||||||
|
|
||||||
|
<logger name="com.raytheon.uf.edex.datadelivery.service" additivity="false">
|
||||||
|
<level value="INFO"/>
|
||||||
|
<appender-ref ref="DataDeliveryLog"/>
|
||||||
|
</logger>
|
||||||
|
|
||||||
|
<logger name="com.raytheon.uf.edex.datadelivery.request" additivity="false">
|
||||||
|
<level value="INFO"/>
|
||||||
|
<appender-ref ref="DataDeliveryLog"/>
|
||||||
|
</logger>
|
||||||
|
|
||||||
|
<logger name="com.raytheon.uf.common.datadelivery.event" additivity="false">
|
||||||
|
<level value="INFO"/>
|
||||||
|
<appender-ref ref="NotificationLog"/>
|
||||||
|
</logger>
|
||||||
|
|
||||||
|
<logger name="com.raytheon.uf.edex.datadelivery.event" additivity="false">
|
||||||
|
<level value="INFO"/>
|
||||||
|
<appender-ref ref="NotificationLog"/>
|
||||||
|
</logger>
|
||||||
|
|
||||||
|
<logger name="com.raytheon.uf.edex.registry.ebxml.services.notification" additivity="false">
|
||||||
|
<level value="INFO"/>
|
||||||
|
<appender-ref ref="NotificationLog"/>
|
||||||
|
</logger>
|
||||||
|
|
||||||
|
<logger name="com.raytheon.uf.edex.datadelivery.registry.federation" additivity="false">
|
||||||
|
<level value="INFO"/>
|
||||||
|
<appender-ref ref="NotificationLog"/>
|
||||||
|
</logger>
|
||||||
|
|
||||||
|
<logger name="com.raytheon.uf.edex.datadelivery.registry.replication" additivity="false">
|
||||||
|
<level value="INFO"/>
|
||||||
|
<appender-ref ref="NotificationLog"/>
|
||||||
|
</logger>
|
||||||
|
|
||||||
|
<logger name="com.raytheon.uf.common.datadelivery.retrieval" additivity="false">
|
||||||
|
<level value="INFO"/>
|
||||||
|
<appender-ref ref="RetrievalLog"/>
|
||||||
|
</logger>
|
||||||
|
|
||||||
|
<logger name="com.raytheon.uf.edex.datadelivery.retrieval" additivity="false">
|
||||||
|
<level value="INFO"/>
|
||||||
|
<appender-ref ref="RetrievalLog"/>
|
||||||
|
</logger>
|
||||||
|
|
||||||
<!-- Registry events to go to main registry log -->
|
|
||||||
<logger name="com.raytheon.uf.common.datadelivery.registry" additivity="false">
|
<logger name="com.raytheon.uf.common.datadelivery.registry" additivity="false">
|
||||||
<level value="INFO"/>
|
<level value="INFO"/>
|
||||||
<appender-ref ref="console"/>
|
<appender-ref ref="console"/>
|
||||||
</logger>
|
</logger>
|
||||||
|
|
||||||
|
<logger name="com.raytheon.uf.edex.datadelivery.registry" additivity="false">
|
||||||
|
<level value="INFO"/>
|
||||||
|
<appender-ref ref="console"/>
|
||||||
|
</logger>
|
||||||
|
|
||||||
<logger name="com.raytheon.uf.common.datadelivery.bandwidth" additivity="false">
|
<logger name="com.raytheon.uf.common.datadelivery.bandwidth" additivity="false">
|
||||||
<level value="INFO"/>
|
<level value="INFO"/>
|
||||||
|
|
|
@ -88,7 +88,6 @@
|
||||||
<includeMode>excludeDpaAndOgc</includeMode>
|
<includeMode>excludeDpaAndOgc</includeMode>
|
||||||
<!-- ncep excludes until tested -->
|
<!-- ncep excludes until tested -->
|
||||||
<exclude>aww-ingest.xml</exclude>
|
<exclude>aww-ingest.xml</exclude>
|
||||||
<exclude>ncccfp-ingest.xml</exclude>
|
|
||||||
<exclude>ncep-util-on-edex-ingest</exclude>
|
<exclude>ncep-util-on-edex-ingest</exclude>
|
||||||
<exclude>ncep-util-on-edex-ingestGrib</exclude>
|
<exclude>ncep-util-on-edex-ingestGrib</exclude>
|
||||||
<exclude>ncscd-ingest.xml</exclude>
|
<exclude>ncscd-ingest.xml</exclude>
|
||||||
|
|
|
@ -73,7 +73,7 @@ public class DefaultGeometryData implements IGeometryData {
|
||||||
|
|
||||||
protected String locationName;
|
protected String locationName;
|
||||||
|
|
||||||
protected Map<String, Object> attributes;
|
protected Map<String, Object> attributes = new HashMap<String, Object>();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object getAttribute(String key) {
|
public Object getAttribute(String key) {
|
||||||
|
@ -277,6 +277,10 @@ public class DefaultGeometryData implements IGeometryData {
|
||||||
this.dataMap.put(parameter, data);
|
this.dataMap.put(parameter, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void addAttribute(String key, Object value) {
|
||||||
|
attributes.put(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
public void setGeometry(Geometry geom) {
|
public void setGeometry(Geometry geom) {
|
||||||
this.geometry = geom;
|
this.geometry = geom;
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,9 +24,11 @@ Require-Bundle: com.raytheon.uf.common.registry.schemas.ebxml;bundle-version="1.
|
||||||
com.raytheon.uf.common.geospatial;bundle-version="1.12.1174",
|
com.raytheon.uf.common.geospatial;bundle-version="1.12.1174",
|
||||||
javax.measure;bundle-version="1.0.0",
|
javax.measure;bundle-version="1.0.0",
|
||||||
com.raytheon.uf.common.datadelivery.request;bundle-version="1.0.0",
|
com.raytheon.uf.common.datadelivery.request;bundle-version="1.0.0",
|
||||||
org.apache.commons.codec;bundle-version="1.4.0"
|
org.apache.commons.codec;bundle-version="1.4.0",
|
||||||
|
org.apache.commons.cxf;bundle-version="1.0.0"
|
||||||
Export-Package: com.raytheon.uf.common.datadelivery.registry,
|
Export-Package: com.raytheon.uf.common.datadelivery.registry,
|
||||||
com.raytheon.uf.common.datadelivery.registry.ebxml,
|
com.raytheon.uf.common.datadelivery.registry.ebxml,
|
||||||
com.raytheon.uf.common.datadelivery.registry.handlers
|
com.raytheon.uf.common.datadelivery.registry.handlers,
|
||||||
|
com.raytheon.uf.common.datadelivery.registry.web
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||||
* further licensing information.
|
* further licensing information.
|
||||||
**/
|
**/
|
||||||
package com.raytheon.uf.common.registry.services.rest;
|
package com.raytheon.uf.common.datadelivery.registry.web;
|
||||||
|
|
||||||
import javax.ws.rs.GET;
|
import javax.ws.rs.GET;
|
||||||
import javax.ws.rs.Path;
|
import javax.ws.rs.Path;
|
||||||
|
@ -34,14 +34,17 @@ import javax.ws.rs.Produces;
|
||||||
* Date Ticket# Engineer Description
|
* Date Ticket# Engineer Description
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* 5/21/2013 2022 bphillip Initial implementation
|
* 5/21/2013 2022 bphillip Initial implementation
|
||||||
|
* 10/30/2013 1538 bphillip Moved data delivery specific servics out of registry plugin
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author bphillip
|
* @author bphillip
|
||||||
* @version 1
|
* @version 1
|
||||||
*/
|
*/
|
||||||
@Path("/rest/registryAvailable")
|
@Path(IRegistryAvailableRestService.REGISTRY_AVAILABILITY_PATH_PREFIX)
|
||||||
public interface IRegistryAvailableRestService {
|
public interface IRegistryAvailableRestService {
|
||||||
|
|
||||||
|
public static final String REGISTRY_AVAILABILITY_PATH_PREFIX = "/registryAvailable";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Method that simply returns a string. This method is called to see if
|
* Method that simply returns a string. This method is called to see if
|
||||||
* registry services are available for a registry
|
* registry services are available for a registry
|
|
@ -17,7 +17,7 @@
|
||||||
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||||
* further licensing information.
|
* further licensing information.
|
||||||
**/
|
**/
|
||||||
package com.raytheon.uf.common.registry.services.rest;
|
package com.raytheon.uf.common.datadelivery.registry.web;
|
||||||
|
|
||||||
import javax.ws.rs.GET;
|
import javax.ws.rs.GET;
|
||||||
import javax.ws.rs.Path;
|
import javax.ws.rs.Path;
|
||||||
|
@ -40,14 +40,17 @@ import com.raytheon.uf.common.registry.services.rest.response.RestCollectionResp
|
||||||
* 9/20/2013 2385 bphillip Added subscription backup functions
|
* 9/20/2013 2385 bphillip Added subscription backup functions
|
||||||
* 10/8/2013 1682 bphillip Added rest functions for use with the query web interface
|
* 10/8/2013 1682 bphillip Added rest functions for use with the query web interface
|
||||||
* 10/23/2013 2385 bphillip restoreSubscriptions throws JAXBException
|
* 10/23/2013 2385 bphillip restoreSubscriptions throws JAXBException
|
||||||
|
* 10/30/2013 1538 bphillip Moved data delivery specific servics out of registry plugin
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author bphillip
|
* @author bphillip
|
||||||
* @version 1
|
* @version 1
|
||||||
*/
|
*/
|
||||||
|
@Path(IRegistryDataAccessService.DATA_ACCESS_PATH_PREFIX)
|
||||||
public interface IRegistryDataAccessService {
|
public interface IRegistryDataAccessService {
|
||||||
|
|
||||||
public static final String DATA_ACCESS_PATH_PREFIX = "/rest/dataAccess/";
|
/** Root path to this set of services */
|
||||||
|
public static final String DATA_ACCESS_PATH_PREFIX = "/dataAccess";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the ids of registry objects of the given object type
|
* Gets the ids of registry objects of the given object type
|
||||||
|
@ -57,7 +60,7 @@ public interface IRegistryDataAccessService {
|
||||||
* @return List of ids for registry objects of the given type
|
* @return List of ids for registry objects of the given type
|
||||||
*/
|
*/
|
||||||
@GET
|
@GET
|
||||||
@Path(DATA_ACCESS_PATH_PREFIX + "getRegistryObjectIds/{objectType}")
|
@Path("getRegistryObjectIds/{objectType}")
|
||||||
public RestCollectionResponse<String> getRegistryObjectIdsOfType(
|
public RestCollectionResponse<String> getRegistryObjectIdsOfType(
|
||||||
@PathParam("objectType") String objectType);
|
@PathParam("objectType") String objectType);
|
||||||
|
|
||||||
|
@ -67,7 +70,7 @@ public interface IRegistryDataAccessService {
|
||||||
* @return The query definitions currently contained in the registry
|
* @return The query definitions currently contained in the registry
|
||||||
*/
|
*/
|
||||||
@GET
|
@GET
|
||||||
@Path(DATA_ACCESS_PATH_PREFIX + "getQueries")
|
@Path("getQueries")
|
||||||
public String getValidQueries();
|
public String getValidQueries();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -78,7 +81,7 @@ public interface IRegistryDataAccessService {
|
||||||
* @return The parameters for a given query definition
|
* @return The parameters for a given query definition
|
||||||
*/
|
*/
|
||||||
@GET
|
@GET
|
||||||
@Path(DATA_ACCESS_PATH_PREFIX + "getParametersForQuery/{queryId}")
|
@Path("getParametersForQuery/{queryId}")
|
||||||
public String getParametersForQuery(@PathParam("queryId") String queryId);
|
public String getParametersForQuery(@PathParam("queryId") String queryId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -90,7 +93,7 @@ public interface IRegistryDataAccessService {
|
||||||
* If errors occur while removing the subscriptions
|
* If errors occur while removing the subscriptions
|
||||||
*/
|
*/
|
||||||
@GET
|
@GET
|
||||||
@Path(DATA_ACCESS_PATH_PREFIX + "removeSubscriptionsFor/{siteId}")
|
@Path("removeSubscriptionsFor/{siteId}")
|
||||||
public void removeSubscriptionsForSite(@PathParam("siteId") String siteId)
|
public void removeSubscriptionsForSite(@PathParam("siteId") String siteId)
|
||||||
throws RegistryException;
|
throws RegistryException;
|
||||||
|
|
||||||
|
@ -101,7 +104,7 @@ public interface IRegistryDataAccessService {
|
||||||
* @return The page containing the subscriptions
|
* @return The page containing the subscriptions
|
||||||
*/
|
*/
|
||||||
@GET
|
@GET
|
||||||
@Path(DATA_ACCESS_PATH_PREFIX + "getSubscriptions")
|
@Path("getSubscriptions")
|
||||||
public String getSubscriptions();
|
public String getSubscriptions();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -113,7 +116,7 @@ public interface IRegistryDataAccessService {
|
||||||
* @return Status message about whether the backup was successful
|
* @return Status message about whether the backup was successful
|
||||||
*/
|
*/
|
||||||
@GET
|
@GET
|
||||||
@Path(DATA_ACCESS_PATH_PREFIX + "backupSubscription/{subscriptionName}")
|
@Path("backupSubscription/{subscriptionName}")
|
||||||
public String backupSubscription(
|
public String backupSubscription(
|
||||||
@PathParam("subscriptionName") String subscriptionName);
|
@PathParam("subscriptionName") String subscriptionName);
|
||||||
|
|
||||||
|
@ -123,7 +126,7 @@ public interface IRegistryDataAccessService {
|
||||||
* @return Status message about whether the backup was successful
|
* @return Status message about whether the backup was successful
|
||||||
*/
|
*/
|
||||||
@GET
|
@GET
|
||||||
@Path(DATA_ACCESS_PATH_PREFIX + "backupAllSubscriptions/")
|
@Path("backupAllSubscriptions/")
|
||||||
public String backupAllSubscriptions();
|
public String backupAllSubscriptions();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -134,7 +137,7 @@ public interface IRegistryDataAccessService {
|
||||||
* @return Status message about whether the backup was successful
|
* @return Status message about whether the backup was successful
|
||||||
*/
|
*/
|
||||||
@GET
|
@GET
|
||||||
@Path(DATA_ACCESS_PATH_PREFIX + "restoreSubscription/{subscriptionName}")
|
@Path("restoreSubscription/{subscriptionName}")
|
||||||
public String restoreSubscription(
|
public String restoreSubscription(
|
||||||
@PathParam("subscriptionName") String subscriptionName);
|
@PathParam("subscriptionName") String subscriptionName);
|
||||||
|
|
||||||
|
@ -144,7 +147,7 @@ public interface IRegistryDataAccessService {
|
||||||
* @return Status messages relating to the success or failure of the restore
|
* @return Status messages relating to the success or failure of the restore
|
||||||
*/
|
*/
|
||||||
@GET
|
@GET
|
||||||
@Path(DATA_ACCESS_PATH_PREFIX + "restoreSubscriptions/")
|
@Path("restoreSubscriptions/")
|
||||||
public String restoreSubscriptions();
|
public String restoreSubscriptions();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -153,7 +156,7 @@ public interface IRegistryDataAccessService {
|
||||||
* @return Status message
|
* @return Status message
|
||||||
*/
|
*/
|
||||||
@GET
|
@GET
|
||||||
@Path(DATA_ACCESS_PATH_PREFIX + "clearSubscriptionBackupFiles/")
|
@Path("clearSubscriptionBackupFiles/")
|
||||||
public String clearSubscriptionBackupFiles();
|
public String clearSubscriptionBackupFiles();
|
||||||
|
|
||||||
}
|
}
|
|
@ -43,6 +43,7 @@ import com.vividsolutions.jts.geom.Envelope;
|
||||||
* Jan 28, 2013 bkowal Initial creation
|
* Jan 28, 2013 bkowal Initial creation
|
||||||
* Feb 14, 2013 1614 bsteffen Refactor data access framework to use
|
* Feb 14, 2013 1614 bsteffen Refactor data access framework to use
|
||||||
* single request.
|
* single request.
|
||||||
|
* Oct 30, 2013 mnash Allow for no parameters to be set.
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -152,8 +153,7 @@ public class MapsQueryAssembler {
|
||||||
* the original request that we are processing
|
* the original request that we are processing
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
public static String assembleGetAvailableLocationNames(
|
public static String assembleGetAvailableLocationNames(IDataRequest request) {
|
||||||
IDataRequest request) {
|
|
||||||
return assembleQuery(request, Boolean.TRUE);
|
return assembleQuery(request, Boolean.TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -190,8 +190,10 @@ IDataRequest request) {
|
||||||
// add any additional database columns the user has specified as
|
// add any additional database columns the user has specified as
|
||||||
// parameters
|
// parameters
|
||||||
// for additional information, refer to: http://tinyurl.com/arnayco
|
// for additional information, refer to: http://tinyurl.com/arnayco
|
||||||
for (String parameter : request.getParameters()) {
|
if (request.getParameters() != null) {
|
||||||
columns.add(parameter);
|
for (String parameter : request.getParameters()) {
|
||||||
|
columns.add(parameter);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
List<String> constraints = new ArrayList<String>();
|
List<String> constraints = new ArrayList<String>();
|
||||||
|
|
|
@ -30,6 +30,7 @@ package com.raytheon.uf.common.python;
|
||||||
* Date Ticket# Engineer Description
|
* Date Ticket# Engineer Description
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* Aug 22, 2013 mnash Initial creation
|
* Aug 22, 2013 mnash Initial creation
|
||||||
|
* Oct 30, 2013 mnash Add method for searching for subclasses
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -42,4 +43,8 @@ public class PyJavaUtil {
|
||||||
public static boolean isArray(Object obj) {
|
public static boolean isArray(Object obj) {
|
||||||
return obj.getClass().isArray();
|
return obj.getClass().isArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isSubclass(Object obj, Class<?> clazz) {
|
||||||
|
return clazz.isAssignableFrom(obj.getClass());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
# #
|
||||||
|
# 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 com.vividsolutions.jts.io import WKTReader
|
||||||
|
from com.vividsolutions.jts.geom import Geometry
|
||||||
|
from shapely.geometry.base import BaseGeometry
|
||||||
|
from shapely import wkt
|
||||||
|
|
||||||
|
from com.raytheon.uf.common.python import PyJavaUtil
|
||||||
|
|
||||||
|
#
|
||||||
|
# Handler for geometries from Python to Java and back.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# SOFTWARE HISTORY
|
||||||
|
#
|
||||||
|
# Date Ticket# Engineer Description
|
||||||
|
# ------------ ---------- ----------- --------------------------
|
||||||
|
# 10/14/13 2250 mnash Initial creation of JUtil handler
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
def shapelyToJTS(val):
|
||||||
|
valtype = type(val)
|
||||||
|
if issubclass(valtype, BaseGeometry):
|
||||||
|
reader = WKTReader()
|
||||||
|
retObj = reader.read(val.to_wkt())
|
||||||
|
return True, retObj
|
||||||
|
return False, val
|
||||||
|
|
||||||
|
def jtsToShapely(obj, customConverter=None):
|
||||||
|
if PyJavaUtil.isSubclass(obj, Geometry):
|
||||||
|
return True, _toShapely(obj)
|
||||||
|
return False, obj
|
||||||
|
|
||||||
|
def _toShapely(obj):
|
||||||
|
return wkt.loads(obj.toText())
|
|
@ -18,25 +18,29 @@
|
||||||
# further licensing information.
|
# further licensing information.
|
||||||
# #
|
# #
|
||||||
|
|
||||||
|
|
||||||
from java.lang import Integer, Float, Long, Boolean, String, Object, Double
|
|
||||||
from java.util import HashMap, LinkedHashMap, ArrayList
|
|
||||||
from java.util import Collections
|
|
||||||
from java.util import Date
|
|
||||||
from java.lang.reflect import Array
|
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
|
from java.util import HashMap, LinkedHashMap, ArrayList
|
||||||
from shapely.geometry.base import BaseGeometry
|
from java.lang import String
|
||||||
from shapely import wkt
|
|
||||||
|
|
||||||
import jep
|
|
||||||
import datetime
|
|
||||||
from com.raytheon.uf.common.python import PyJavaUtil
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Provides convenience methods for Java-Python bridging
|
# Provides convenience methods for Java-Python bridging
|
||||||
#
|
#
|
||||||
|
# For utilization of the basics, doing the following will work just fine :
|
||||||
#
|
#
|
||||||
|
# import JUtil
|
||||||
|
# JUtil.pyValToJavaObj(val)
|
||||||
|
#
|
||||||
|
# However, to do more advanced conversion, you can register a handler and it will then be
|
||||||
|
# available to do the necessary conversion.
|
||||||
|
#
|
||||||
|
# For example, Geometry objects are not currently handled. The GeometryHandler module will
|
||||||
|
# handle them however. Code would be written as follows :
|
||||||
|
#
|
||||||
|
# import JUtil
|
||||||
|
# from GeometryHandler import jtsToShapely, shapelyToJTS
|
||||||
|
# JUtil.registerJavaToPython(jtsToShapely)
|
||||||
|
# JUtil.registerPythonToJava(shapelyToJTS)
|
||||||
|
# JUtil.pyValToJavaObj(val)
|
||||||
#
|
#
|
||||||
# SOFTWARE HISTORY
|
# SOFTWARE HISTORY
|
||||||
#
|
#
|
||||||
|
@ -46,12 +50,58 @@ from com.raytheon.uf.common.python import PyJavaUtil
|
||||||
# 03/12/13 1759 dgilling Extend Java List types handled
|
# 03/12/13 1759 dgilling Extend Java List types handled
|
||||||
# by javaObjToPyVal().
|
# by javaObjToPyVal().
|
||||||
# 08/20/13 2250 mnash Handle Dates, doubles, and arrays
|
# 08/20/13 2250 mnash Handle Dates, doubles, and arrays
|
||||||
|
# 10/15/13 mnash Refactor to reduce dependencies and clean up
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
|
||||||
JEP_ARRAY_TYPE = type(jep.jarray(0,Object))
|
|
||||||
|
|
||||||
|
def registerPythonToJava(method):
|
||||||
|
'''
|
||||||
|
We want to register new handlers per PythonInterpreter.
|
||||||
|
This allows us to utilize different conversions that may not
|
||||||
|
be needed for some PythonInterpreters, but to use them in others
|
||||||
|
where they are required.
|
||||||
|
'''
|
||||||
|
pythonHandlers.append(method)
|
||||||
|
|
||||||
|
def registerJavaToPython(method):
|
||||||
|
javaHandlers.append(method)
|
||||||
|
|
||||||
|
def pyValToJavaObj(val):
|
||||||
|
'''
|
||||||
|
The main method for Python to Java conversion in JUtil. If no conversion
|
||||||
|
method can be found, a string representation of the python value will be
|
||||||
|
returned as we do not want to crash the JVM.
|
||||||
|
'''
|
||||||
|
retVal = val
|
||||||
|
if retVal is not None :
|
||||||
|
for handleMethod in pythonHandlers:
|
||||||
|
success, obj = handleMethod(val)
|
||||||
|
if success:
|
||||||
|
retVal = obj
|
||||||
|
break
|
||||||
|
return retVal
|
||||||
|
|
||||||
|
def javaObjToPyVal(obj, customConverter=None):
|
||||||
|
'''
|
||||||
|
The main method for Java to Python conversion in JUtil. If no conversion
|
||||||
|
method can be found, the PyJObject will be returned and may still be able
|
||||||
|
to be used that way from within Python.
|
||||||
|
'''
|
||||||
|
retVal = obj
|
||||||
|
if retVal is not None :
|
||||||
|
for handleMethod in javaHandlers:
|
||||||
|
success, val = handleMethod(obj, customConverter)
|
||||||
|
if success:
|
||||||
|
retVal = val
|
||||||
|
break
|
||||||
|
return retVal
|
||||||
|
|
||||||
def javaStringListToPylist(jlist):
|
def javaStringListToPylist(jlist):
|
||||||
|
'''
|
||||||
|
Going forward should use javaObjToPyVal instead.
|
||||||
|
'''
|
||||||
pylist = []
|
pylist = []
|
||||||
size = jlist.size()
|
size = jlist.size()
|
||||||
for i in range(size):
|
for i in range(size):
|
||||||
|
@ -59,30 +109,19 @@ def javaStringListToPylist(jlist):
|
||||||
return pylist
|
return pylist
|
||||||
|
|
||||||
def pylistToJavaStringList(pylist):
|
def pylistToJavaStringList(pylist):
|
||||||
|
'''
|
||||||
|
Going forward should use pyValToJavaObj instead.
|
||||||
|
'''
|
||||||
jlist = ArrayList();
|
jlist = ArrayList();
|
||||||
for i in pylist:
|
for i in pylist:
|
||||||
jlist.add(String(i))
|
jlist.add(String(i))
|
||||||
return jlist
|
return jlist
|
||||||
|
|
||||||
def javaStringMapToPyDict(javaMap):
|
|
||||||
keys = javaMap.keySet()
|
|
||||||
itr = keys.iterator()
|
|
||||||
pyDict = {}
|
|
||||||
while itr.hasNext():
|
|
||||||
key = itr.next()
|
|
||||||
val = javaMap.get(key)
|
|
||||||
fval = str(val)
|
|
||||||
if fval.find('[') > -1:
|
|
||||||
exec "fval = " + fval
|
|
||||||
else:
|
|
||||||
try:
|
|
||||||
fval = float(fval)
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
pyDict[str(key)] = fval
|
|
||||||
return pyDict
|
|
||||||
|
|
||||||
def javaMapToPyDict(javaMap, customConverter=None):
|
def javaMapToPyDict(javaMap, customConverter=None):
|
||||||
|
'''
|
||||||
|
Going forward should use javaObjToPyVal instead.
|
||||||
|
'''
|
||||||
keys = javaMap.keySet()
|
keys = javaMap.keySet()
|
||||||
itr = keys.iterator()
|
itr = keys.iterator()
|
||||||
if javaMap.jclassname == "java.util.LinkedHashMap":
|
if javaMap.jclassname == "java.util.LinkedHashMap":
|
||||||
|
@ -96,6 +135,9 @@ def javaMapToPyDict(javaMap, customConverter=None):
|
||||||
return pyDict
|
return pyDict
|
||||||
|
|
||||||
def pyDictToJavaMap(pyDict):
|
def pyDictToJavaMap(pyDict):
|
||||||
|
'''
|
||||||
|
Going forward should use pyValToJavaObj instead.
|
||||||
|
'''
|
||||||
if pyDict is None :
|
if pyDict is None :
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -108,98 +150,13 @@ def pyDictToJavaMap(pyDict):
|
||||||
jmap.put(pyValToJavaObj(key), pyValToJavaObj(pyDict[key]))
|
jmap.put(pyValToJavaObj(key), pyValToJavaObj(pyDict[key]))
|
||||||
return jmap
|
return jmap
|
||||||
|
|
||||||
def pyValToJavaObj(val):
|
|
||||||
retObj = val
|
|
||||||
valtype = type(val)
|
|
||||||
# since Python on 64 bit has larger ints, we need to do a check
|
|
||||||
# for compatibility with Java Integers
|
|
||||||
if valtype is int and val <= Integer.MAX_VALUE and val >= Integer.MIN_VALUE :
|
|
||||||
retObj = Integer(val)
|
|
||||||
elif valtype is float:
|
|
||||||
retObj = Float(val)
|
|
||||||
elif valtype is long or valtype is int:
|
|
||||||
retObj = Long(val)
|
|
||||||
elif valtype is bool:
|
|
||||||
retObj = Boolean(val)
|
|
||||||
elif valtype is list:
|
|
||||||
retObj = ArrayList()
|
|
||||||
for i in val:
|
|
||||||
retObj.add(pyValToJavaObj(i))
|
|
||||||
elif valtype is tuple:
|
|
||||||
tempList = ArrayList()
|
|
||||||
for i in val:
|
|
||||||
tempList.add(pyValToJavaObj(i))
|
|
||||||
retObj = Collections.unmodifiableList(tempList)
|
|
||||||
elif valtype is datetime.datetime:
|
|
||||||
epoch = datetime.datetime.utcfromtimestamp(0)
|
|
||||||
delta = val - epoch
|
|
||||||
retObj = Date(long(delta.total_seconds()) * 1000)
|
|
||||||
elif issubclass(valtype, dict):
|
|
||||||
retObj = pyDictToJavaMap(val)
|
|
||||||
elif issubclass(valtype, JavaWrapperClass):
|
|
||||||
retObj = val.toJavaObj()
|
|
||||||
elif issubclass(valtype, BaseGeometry):
|
|
||||||
from com.vividsolutions.jts.io import WKTReader
|
|
||||||
reader = WKTReader()
|
|
||||||
retObj = reader.read(val.to_wkt())
|
|
||||||
return retObj
|
|
||||||
|
|
||||||
def javaObjToPyVal(obj, customConverter=None):
|
|
||||||
retVal = None
|
|
||||||
if obj is None:
|
|
||||||
return retVal
|
|
||||||
# handle pyjobjects
|
|
||||||
if hasattr(obj, 'jclassname'):
|
|
||||||
objtype = obj.jclassname
|
|
||||||
if objtype == "java.lang.Integer":
|
|
||||||
retVal = obj.intValue()
|
|
||||||
elif objtype == "java.lang.Float":
|
|
||||||
retVal = obj.floatValue()
|
|
||||||
elif objtype == "java.lang.Long":
|
|
||||||
retVal = obj.longValue()
|
|
||||||
elif objtype == "java.lang.Boolean":
|
|
||||||
retVal = bool(obj.booleanValue())
|
|
||||||
elif objtype == "java.lang.Double":
|
|
||||||
retVal = obj.doubleValue()
|
|
||||||
elif objtype == "java.util.Date":
|
|
||||||
retVal = datetime.datetime.fromtimestamp(obj.getTime() / 1000)
|
|
||||||
elif objtype in ["com.vividsolutions.jts.geom.Geometry", "com.vividsolutions.jts.geom.GeometryCollection",
|
|
||||||
"com.vividsolutions.jts.geom.Polygon", "com.vividsolutions.jts.geom.MultiPolygon",
|
|
||||||
"com.vividsolutions.jts.geom.LineString", "com.vividsolutions.jts.geom.MultiLineString",
|
|
||||||
"com.vividsolutions.jts.geom.Point", "com.vividsolutions.jts.geom.MultiPoint",
|
|
||||||
"com.vividsolutions.jts.geom.LinearRing"] :
|
|
||||||
retVal = wkt.loads(obj.toText())
|
|
||||||
elif objtype in ["java.util.ArrayList", "java.util.Arrays$ArrayList"]:
|
|
||||||
retVal = []
|
|
||||||
size = obj.size()
|
|
||||||
for i in range(size):
|
|
||||||
retVal.append(javaObjToPyVal(obj.get(i), customConverter))
|
|
||||||
elif objtype == "java.util.Collections$UnmodifiableRandomAccessList":
|
|
||||||
tempList = []
|
|
||||||
size = obj.size()
|
|
||||||
for i in range(size):
|
|
||||||
tempList.append(javaObjToPyVal(obj.get(i), customConverter))
|
|
||||||
retVal = tuple(tempList)
|
|
||||||
elif objtype == "java.util.HashMap":
|
|
||||||
retVal = javaMapToPyDict(obj, customConverter)
|
|
||||||
elif PyJavaUtil.isArray(obj):
|
|
||||||
retVal = []
|
|
||||||
size = Array.getLength(obj)
|
|
||||||
for i in range(size):
|
|
||||||
retVal.append(javaObjToPyVal(Array.get(obj, i), customConverter))
|
|
||||||
elif customConverter is not None:
|
|
||||||
retVal = customConverter(obj)
|
|
||||||
if retVal is None:
|
|
||||||
retVal = str(obj)
|
|
||||||
# test for jep array type
|
|
||||||
elif isinstance(obj, JEP_ARRAY_TYPE):
|
|
||||||
retVal = []
|
|
||||||
size = len(obj)
|
|
||||||
for i in range(size):
|
|
||||||
retVal.append(javaObjToPyVal(obj[i], customConverter))
|
|
||||||
return retVal
|
|
||||||
|
|
||||||
class JavaWrapperClass(object):
|
class JavaWrapperClass(object):
|
||||||
def toJavaObj(self):
|
def toJavaObj(self):
|
||||||
raise NotImplementedError, "Subclasses must override this method."
|
raise NotImplementedError, "Subclasses must override this method."
|
||||||
|
|
||||||
|
# this initializes the basic handlers for Java->Python conversion and Python->Java conversion
|
||||||
|
|
||||||
|
from JUtilHandler import javaBasicsToPyBasics, pyBasicsToJavaBasics, javaCollectionToPyCollection, pyCollectionToJavaCollection, javaClassToPyClass, pyClassToJavaClass
|
||||||
|
|
||||||
|
pythonHandlers = [pyBasicsToJavaBasics, pyCollectionToJavaCollection, pyClassToJavaClass]
|
||||||
|
javaHandlers = [javaBasicsToPyBasics, javaCollectionToPyCollection, javaClassToPyClass]
|
||||||
|
|
|
@ -0,0 +1,362 @@
|
||||||
|
# #
|
||||||
|
# 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.
|
||||||
|
# #
|
||||||
|
|
||||||
|
import JUtil
|
||||||
|
|
||||||
|
#
|
||||||
|
# Basic handler for Python to Java and back (this handles all the main things
|
||||||
|
# that JUtil needs to do, but none of the special ones that should and can be
|
||||||
|
# added if the code wants to be more powerful.
|
||||||
|
#
|
||||||
|
# Note : All methods that convert from Java to Python should take a custom converter, even if it is not used.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# SOFTWARE HISTORY
|
||||||
|
#
|
||||||
|
# Date Ticket# Engineer Description
|
||||||
|
# ------------ ---------- ----------- --------------------------
|
||||||
|
# 10/14/13 2250 mnash Initial creation of JUtil handler
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
from java.lang import Integer, Float, Long, Boolean, String, Double, Number
|
||||||
|
from java.util import Date
|
||||||
|
from com.raytheon.uf.common.python import PyJavaUtil
|
||||||
|
import datetime
|
||||||
|
|
||||||
|
# Java -> Python conversion
|
||||||
|
|
||||||
|
def javaBasicsToPyBasics(obj, customConverter=None):
|
||||||
|
'''
|
||||||
|
Determines the correct method to call out of the dict to convert Java basic
|
||||||
|
objects to Python
|
||||||
|
'''
|
||||||
|
if hasattr(obj, 'jclassname'):
|
||||||
|
classname = obj.jclassname
|
||||||
|
if classname in javaBasics :
|
||||||
|
return True, javaBasics[classname](obj)
|
||||||
|
else :
|
||||||
|
for javaClass in fallbackBasics :
|
||||||
|
if PyJavaUtil.isSubclass(obj, javaClass) :
|
||||||
|
return True, fallbackBasics[javaClass](obj, customConverter)
|
||||||
|
return False, obj
|
||||||
|
|
||||||
|
def _toPythonInt(obj, customConverter=None):
|
||||||
|
'''
|
||||||
|
Turns a Java Integer to a Python int
|
||||||
|
'''
|
||||||
|
return obj.intValue()
|
||||||
|
|
||||||
|
def _toPythonLong(obj, customConverter=None):
|
||||||
|
'''
|
||||||
|
Turns a Java Long to a Python long, or int,
|
||||||
|
depending on the architecture
|
||||||
|
'''
|
||||||
|
return obj.longValue()
|
||||||
|
|
||||||
|
def _toPythonFloat(obj, customConverter=None):
|
||||||
|
'''
|
||||||
|
Turns a Java Float to a Python float
|
||||||
|
'''
|
||||||
|
return obj.floatValue()
|
||||||
|
|
||||||
|
def _toPythonDouble(obj, customConverter=None):
|
||||||
|
'''
|
||||||
|
Turns a Java Double to a Python float
|
||||||
|
'''
|
||||||
|
return obj.doubleValue()
|
||||||
|
|
||||||
|
def _toPythonBool(obj, customConverter=None):
|
||||||
|
'''
|
||||||
|
Turns a Java Boolean to a Python bool
|
||||||
|
'''
|
||||||
|
return bool(obj.booleanValue())
|
||||||
|
|
||||||
|
def _toPythonString(obj, customConverter=None):
|
||||||
|
'''
|
||||||
|
Turns a Java String to a Python str
|
||||||
|
'''
|
||||||
|
return obj.toString()
|
||||||
|
|
||||||
|
def _toPythonDatetime(obj, customConverter=None):
|
||||||
|
'''
|
||||||
|
Turns a Java Date to a Python datetime
|
||||||
|
'''
|
||||||
|
return datetime.datetime.fromtimestamp(obj.getTime() / 1000)
|
||||||
|
|
||||||
|
# Python -> Java conversion
|
||||||
|
|
||||||
|
def pyBasicsToJavaBasics(val):
|
||||||
|
'''
|
||||||
|
Method registered with JUtil to figure out any conversion of Python to Java.
|
||||||
|
Returns a default of String of that value if nothing else can be found.
|
||||||
|
'''
|
||||||
|
valtype = type(val)
|
||||||
|
if valtype in pythonBasics :
|
||||||
|
return True, pythonBasics[valtype](val)
|
||||||
|
return False, str(val)
|
||||||
|
|
||||||
|
def _toJavaInt(val):
|
||||||
|
'''
|
||||||
|
Turns a Python int to a Java Integer, or a Long, depending the range
|
||||||
|
of the value.
|
||||||
|
'''
|
||||||
|
# since Python on 64 bit has larger ints, we need to do a check
|
||||||
|
# for compatibility with Java Integers
|
||||||
|
if val <= Integer.MAX_VALUE and val >= Integer.MIN_VALUE :
|
||||||
|
return Integer(val)
|
||||||
|
# outside the Java bounds for Integer, so make it a Java Long
|
||||||
|
return Long(val)
|
||||||
|
|
||||||
|
def _toJavaFloat(val):
|
||||||
|
'''
|
||||||
|
Turns a Python float to a Java Float
|
||||||
|
'''
|
||||||
|
return Float(val)
|
||||||
|
|
||||||
|
def _toJavaLong(val):
|
||||||
|
'''
|
||||||
|
Turns a Python long to a Java Long
|
||||||
|
'''
|
||||||
|
return Long(val)
|
||||||
|
|
||||||
|
def _toJavaBoolean(val):
|
||||||
|
'''
|
||||||
|
Turns a Python bool to a Java Boolean
|
||||||
|
'''
|
||||||
|
return Boolean(val)
|
||||||
|
|
||||||
|
def _toJavaString(val):
|
||||||
|
'''
|
||||||
|
Turns a Python str to a Java String
|
||||||
|
'''
|
||||||
|
return String(str(val))
|
||||||
|
|
||||||
|
def _toJavaDate(val):
|
||||||
|
'''
|
||||||
|
Turns a Python datetime to a Java Date
|
||||||
|
'''
|
||||||
|
epoch = datetime.datetime.utcfromtimestamp(0)
|
||||||
|
delta = val - epoch
|
||||||
|
return Date(long(delta.total_seconds()) * 1000)
|
||||||
|
|
||||||
|
# the dict that registers the Python data type to the method for conversion
|
||||||
|
pythonBasics = {int:_toJavaInt, float:_toJavaFloat, long:_toJavaLong, bool:_toJavaBoolean, str:_toJavaString, unicode:_toJavaString, datetime.datetime:_toJavaDate}
|
||||||
|
# the dict that registers the Java String of type to the method for conversion
|
||||||
|
javaBasics = {'java.lang.Integer':_toPythonInt, 'java.lang.Float':_toPythonFloat, 'java.lang.Double':_toPythonDouble, 'java.lang.Long':_toPythonLong, 'java.lang.Boolean':_toPythonBool, 'java.lang.String':_toPythonString, 'java.util.Date':_toPythonDatetime}
|
||||||
|
fallbackBasics = {Number:_toPythonFloat}
|
||||||
|
'''
|
||||||
|
The following methods will handle Python and Java collection conversion.
|
||||||
|
'''
|
||||||
|
from java.lang import Object
|
||||||
|
from java.util import Collections, HashMap, LinkedHashMap, ArrayList
|
||||||
|
from java.util import Date
|
||||||
|
from java.lang.reflect import Array
|
||||||
|
from java.util import List, Set, Map
|
||||||
|
|
||||||
|
from collections import OrderedDict
|
||||||
|
import jep
|
||||||
|
|
||||||
|
# make a jarray to find out if we have that
|
||||||
|
JEP_ARRAY_TYPE = type(jep.jarray(0, Object))
|
||||||
|
|
||||||
|
# Java -> Python conversion
|
||||||
|
|
||||||
|
def javaCollectionToPyCollection(obj, customConverter=None):
|
||||||
|
'''
|
||||||
|
Main method to register with JUtil for conversion of Java
|
||||||
|
collections to Python collections.
|
||||||
|
'''
|
||||||
|
if hasattr(obj, 'jclassname'):
|
||||||
|
classname = obj.jclassname
|
||||||
|
if classname in javaCollections :
|
||||||
|
return True, javaCollections[classname](obj, customConverter)
|
||||||
|
elif PyJavaUtil.isArray(obj):
|
||||||
|
return True, _fromJavaArray(obj, customConverter)
|
||||||
|
else :
|
||||||
|
# we have some fallback capability, if we don't specifically handle a class, we
|
||||||
|
# want to try some of the more common types and see if those are available for
|
||||||
|
# conversion
|
||||||
|
for javaClass in fallbackCollections :
|
||||||
|
if PyJavaUtil.isSubclass(obj, javaClass):
|
||||||
|
return True, fallbackCollections[javaClass](obj, customConverter)
|
||||||
|
elif isinstance(obj, JEP_ARRAY_TYPE):
|
||||||
|
return True, _fromJepArray(obj, customConverter)
|
||||||
|
return False, obj
|
||||||
|
|
||||||
|
|
||||||
|
def _toPythonList(obj, customConverter=None):
|
||||||
|
'''
|
||||||
|
Converts to a Python list.
|
||||||
|
'''
|
||||||
|
retVal = []
|
||||||
|
size = obj.size()
|
||||||
|
for i in range(size):
|
||||||
|
retVal.append(JUtil.javaObjToPyVal(obj.get(i), customConverter))
|
||||||
|
return retVal
|
||||||
|
|
||||||
|
def _toPythonTuple(obj, customConverter=None):
|
||||||
|
'''
|
||||||
|
Converts to a Python tuple.
|
||||||
|
'''
|
||||||
|
return tuple(_toPythonList(obj, customConverter))
|
||||||
|
|
||||||
|
def _toPythonDict(obj, customConverter=None):
|
||||||
|
'''
|
||||||
|
Converts to a Python dict.
|
||||||
|
'''
|
||||||
|
return __toPythonDict(obj, {}, customConverter)
|
||||||
|
|
||||||
|
def _toPythonSet(obj, customConverter=None):
|
||||||
|
'''
|
||||||
|
Converts to a Python set.
|
||||||
|
'''
|
||||||
|
retVal = set()
|
||||||
|
size = obj.size()
|
||||||
|
for i in range(size):
|
||||||
|
retVal.add(JUtil.javaObjToPyVal(obj.get(i), customConverter))
|
||||||
|
return retVal
|
||||||
|
|
||||||
|
def _toPythonOrderedDict(obj, customConverter=None):
|
||||||
|
'''
|
||||||
|
Converts to a Python OrderedDict.
|
||||||
|
'''
|
||||||
|
return __toPythonDict(obj, OrderedDict(), customConverter)
|
||||||
|
|
||||||
|
def _fromJavaArray(obj, customConverter=None):
|
||||||
|
'''
|
||||||
|
Converts from a Java array to a Python list.
|
||||||
|
'''
|
||||||
|
retVal = []
|
||||||
|
for i in range(size):
|
||||||
|
retVal.append(JUtil.javaObjToPyVal(Array.get(obj, i), customConverter))
|
||||||
|
return retVal
|
||||||
|
|
||||||
|
def _fromJepArray(obj, customConverter=None):
|
||||||
|
'''
|
||||||
|
Converts from a Jep array to a Python list.
|
||||||
|
'''
|
||||||
|
retVal = []
|
||||||
|
size = len(obj)
|
||||||
|
for i in range(size):
|
||||||
|
retVal.append(JUtil.javaObjToPyVal(obj[i], customConverter))
|
||||||
|
return retVal
|
||||||
|
|
||||||
|
def __toPythonDict(javaMap, pyDict, customConverter=None):
|
||||||
|
'''
|
||||||
|
Converts to a Python dict. Passed in the dict type, and then handles the key conversion.
|
||||||
|
'''
|
||||||
|
keys = javaMap.keySet()
|
||||||
|
itr = keys.iterator()
|
||||||
|
while itr.hasNext() :
|
||||||
|
key = itr.next()
|
||||||
|
obj = javaMap.get(key)
|
||||||
|
pyDict[JUtil.javaObjToPyVal(key)] = JUtil.javaObjToPyVal(obj, customConverter)
|
||||||
|
return pyDict
|
||||||
|
|
||||||
|
# Python -> Java conversion
|
||||||
|
|
||||||
|
def pyCollectionToJavaCollection(val):
|
||||||
|
'''
|
||||||
|
Main method registered with JUtil for conversion of collections in Python
|
||||||
|
to Java collections.
|
||||||
|
'''
|
||||||
|
valtype = type(val)
|
||||||
|
if valtype in pythonCollections :
|
||||||
|
return True, pythonCollections[valtype](val)
|
||||||
|
# not directly in the dict, so lets check whether they are subclasses
|
||||||
|
for pytype in pythonCollections :
|
||||||
|
if issubclass(pytype, valtype):
|
||||||
|
return True, pythonCollections[valtype](val)
|
||||||
|
return False, str(val)
|
||||||
|
|
||||||
|
def _toJavaList(val):
|
||||||
|
'''
|
||||||
|
Turns a Python list to a Java List
|
||||||
|
'''
|
||||||
|
retObj = ArrayList()
|
||||||
|
for i in val :
|
||||||
|
retObj.add(JUtil.pyValToJavaObj(i))
|
||||||
|
return retObj
|
||||||
|
|
||||||
|
def _toJavaUnmodifiableList(val):
|
||||||
|
'''
|
||||||
|
Turns a Python tuple to a Java UnmodifiableList
|
||||||
|
'''
|
||||||
|
return Collections.unmodifiableList(_toJavaList(val))
|
||||||
|
|
||||||
|
def _toJavaLinkedMap(val):
|
||||||
|
'''
|
||||||
|
Turns a Python OrderedDict to a Java LinkedHashMap
|
||||||
|
'''
|
||||||
|
return __toJavaMap(val, LinkedHashMap())
|
||||||
|
|
||||||
|
def _toJavaMap(val):
|
||||||
|
'''
|
||||||
|
Turns a Python dict to a Java HashMap
|
||||||
|
'''
|
||||||
|
return __toJavaMap(val, HashMap())
|
||||||
|
|
||||||
|
def __toJavaMap(pyDict, jmap):
|
||||||
|
'''
|
||||||
|
Does the actual conversion of the elements inside of the dict to Map
|
||||||
|
'''
|
||||||
|
for key in pyDict:
|
||||||
|
jmap.put(JUtil.pyValToJavaObj(key), JUtil.pyValToJavaObj(pyDict[key]))
|
||||||
|
return jmap
|
||||||
|
|
||||||
|
javaCollections = {'java.util.ArrayList':_toPythonList, 'java.util.Arrays$ArrayList':_toPythonList, 'java.util.Collections$UnmodifiableRandomAccessList':_toPythonTuple, 'java.util.HashMap':_toPythonDict, 'java.util.LinkedHashMap':_toPythonOrderedDict}
|
||||||
|
pythonCollections = { list:_toJavaList, tuple:_toJavaUnmodifiableList, OrderedDict:_toJavaLinkedMap, dict:_toJavaMap }
|
||||||
|
fallbackCollections = { List:_toPythonList, Map:_toPythonDict, Set:_toPythonSet }
|
||||||
|
|
||||||
|
'''
|
||||||
|
Handles other types of Java to Python conversion and back.
|
||||||
|
'''
|
||||||
|
|
||||||
|
def javaClassToPyClass(obj, customConverter=None):
|
||||||
|
'''
|
||||||
|
Main method to convert Java classes to Python classes that aren't already defined above.
|
||||||
|
Registers with JUtil
|
||||||
|
'''
|
||||||
|
if customConverter is not None :
|
||||||
|
return True, customConverter(obj)
|
||||||
|
return False, obj
|
||||||
|
|
||||||
|
def pyClassToJavaClass(val):
|
||||||
|
'''
|
||||||
|
Main method that registers with JUtil to convert Python classes to Java classes.
|
||||||
|
'''
|
||||||
|
valtype = type(val)
|
||||||
|
for pyType in pythonClasses :
|
||||||
|
if issubclass(valtype, pyType):
|
||||||
|
return True, pythonClasses[pyType](val)
|
||||||
|
return False, str(val)
|
||||||
|
|
||||||
|
def _toJavaClass(val):
|
||||||
|
'''
|
||||||
|
Utilizes the JUtil.JavaWrapperClass object and its corresponding
|
||||||
|
toJavaObj() method that returns a Java object.
|
||||||
|
'''
|
||||||
|
return val.toJavaObj()
|
||||||
|
|
||||||
|
# registers the data type for conversion to a Java class.
|
||||||
|
pythonClasses = {JUtil.JavaWrapperClass:_toJavaClass}
|
|
@ -1,57 +0,0 @@
|
||||||
/**
|
|
||||||
* This software was developed and / or modified by Raytheon Company,
|
|
||||||
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
*
|
|
||||||
* U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
* This software product contains export-restricted data whose
|
|
||||||
* export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
* to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
* an export license or other authorization.
|
|
||||||
*
|
|
||||||
* Contractor Name: Raytheon Company
|
|
||||||
* Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
* Mail Stop B8
|
|
||||||
* Omaha, NE 68106
|
|
||||||
* 402.291.0100
|
|
||||||
*
|
|
||||||
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
* further licensing information.
|
|
||||||
**/
|
|
||||||
package com.raytheon.uf.common.registry;
|
|
||||||
|
|
||||||
import javax.jws.WebMethod;
|
|
||||||
import javax.jws.WebService;
|
|
||||||
import javax.jws.soap.SOAPBinding;
|
|
||||||
import javax.jws.soap.SOAPBinding.Style;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* Web service interface accessible to process Thrift serialized server requests
|
|
||||||
*
|
|
||||||
* <pre>
|
|
||||||
*
|
|
||||||
* SOFTWARE HISTORY
|
|
||||||
*
|
|
||||||
* Date Ticket# Engineer Description
|
|
||||||
* ------------ ---------- ----------- --------------------------
|
|
||||||
* 5/3/2013 1948 bphillip Initial implementation
|
|
||||||
* </pre>
|
|
||||||
*
|
|
||||||
* @author bphillip
|
|
||||||
* @version 1
|
|
||||||
*/
|
|
||||||
@WebService(serviceName = "RegistryRequestService")
|
|
||||||
@SOAPBinding(style = Style.RPC)
|
|
||||||
public interface IRegistryRequestService {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Process the Thrift serialized request and return the Thrift serialized
|
|
||||||
* response
|
|
||||||
*
|
|
||||||
* @param data
|
|
||||||
* The Thrift serialized request
|
|
||||||
* @return The Thrift serialized response
|
|
||||||
*/
|
|
||||||
@WebMethod
|
|
||||||
public byte[] request(byte[] data);
|
|
||||||
}
|
|
|
@ -1,80 +0,0 @@
|
||||||
/**
|
|
||||||
* This software was developed and / or modified by Raytheon Company,
|
|
||||||
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
|
||||||
*
|
|
||||||
* U.S. EXPORT CONTROLLED TECHNICAL DATA
|
|
||||||
* This software product contains export-restricted data whose
|
|
||||||
* export/transfer/disclosure is restricted by U.S. law. Dissemination
|
|
||||||
* to non-U.S. persons whether in the United States or abroad requires
|
|
||||||
* an export license or other authorization.
|
|
||||||
*
|
|
||||||
* Contractor Name: Raytheon Company
|
|
||||||
* Contractor Address: 6825 Pine Street, Suite 340
|
|
||||||
* Mail Stop B8
|
|
||||||
* Omaha, NE 68106
|
|
||||||
* 402.291.0100
|
|
||||||
*
|
|
||||||
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
|
||||||
* further licensing information.
|
|
||||||
**/
|
|
||||||
package com.raytheon.uf.common.registry;
|
|
||||||
|
|
||||||
import java.net.MalformedURLException;
|
|
||||||
import java.net.URL;
|
|
||||||
|
|
||||||
import javax.xml.namespace.QName;
|
|
||||||
import javax.xml.ws.Service;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* Service class for submitting registry requests to the EDEX ebxml registry via
|
|
||||||
* JAX-WS
|
|
||||||
*
|
|
||||||
* <pre>
|
|
||||||
*
|
|
||||||
* SOFTWARE HISTORY
|
|
||||||
*
|
|
||||||
* Date Ticket# Engineer Description
|
|
||||||
* ------------ ---------- ----------- --------------------------
|
|
||||||
* 5/3/2013 1948 bphillip Initial implementation
|
|
||||||
* </pre>
|
|
||||||
*
|
|
||||||
* @author bphillip
|
|
||||||
* @version 1
|
|
||||||
*/
|
|
||||||
public class RegistryRequestService extends Service {
|
|
||||||
|
|
||||||
/** The service name */
|
|
||||||
private static final QName SERVICE_NAME = new QName(
|
|
||||||
"http://registry.common.uf.raytheon.com/", "RegistryRequestService");
|
|
||||||
|
|
||||||
/** The location of the wsdl */
|
|
||||||
private static final String WSDL_LOCATION = "/registryRequest?wsdl";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new RegistryRequestService service residing on the given server
|
|
||||||
* on the given port
|
|
||||||
*
|
|
||||||
* @param server
|
|
||||||
* The server
|
|
||||||
* @param port
|
|
||||||
* The port number
|
|
||||||
* @throws MalformedURLException
|
|
||||||
* If errors occur constructing the service URL
|
|
||||||
*/
|
|
||||||
public RegistryRequestService(String server, String port)
|
|
||||||
throws MalformedURLException {
|
|
||||||
super(new URL("http://" + server + ":" + port + WSDL_LOCATION),
|
|
||||||
SERVICE_NAME);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the IRegistryRequestService port
|
|
||||||
*
|
|
||||||
* @return The IRegistryRequestService port
|
|
||||||
*/
|
|
||||||
public IRegistryRequestService getService() {
|
|
||||||
return super.getPort(IRegistryRequestService.class);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -30,7 +30,6 @@ import javax.xml.bind.JAXBException;
|
||||||
|
|
||||||
import oasis.names.tc.ebxml.regrep.xsd.rim.v4.RegistryObjectType;
|
import oasis.names.tc.ebxml.regrep.xsd.rim.v4.RegistryObjectType;
|
||||||
|
|
||||||
import org.apache.commons.lang.exception.ExceptionUtils;
|
|
||||||
import org.apache.cxf.jaxrs.client.Client;
|
import org.apache.cxf.jaxrs.client.Client;
|
||||||
import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
|
import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
|
||||||
|
|
||||||
|
@ -40,14 +39,9 @@ import com.google.common.cache.LoadingCache;
|
||||||
import com.google.common.io.Resources;
|
import com.google.common.io.Resources;
|
||||||
import com.raytheon.uf.common.registry.RegistryJaxbManager;
|
import com.raytheon.uf.common.registry.RegistryJaxbManager;
|
||||||
import com.raytheon.uf.common.registry.RegistryNamespaceMapper;
|
import com.raytheon.uf.common.registry.RegistryNamespaceMapper;
|
||||||
import com.raytheon.uf.common.registry.constants.RegistryAvailability;
|
|
||||||
import com.raytheon.uf.common.registry.ebxml.RegistryUtil;
|
import com.raytheon.uf.common.registry.ebxml.RegistryUtil;
|
||||||
import com.raytheon.uf.common.registry.services.rest.IRegistryAvailableRestService;
|
|
||||||
import com.raytheon.uf.common.registry.services.rest.IRegistryDataAccessService;
|
|
||||||
import com.raytheon.uf.common.registry.services.rest.IRegistryObjectsRestService;
|
import com.raytheon.uf.common.registry.services.rest.IRegistryObjectsRestService;
|
||||||
import com.raytheon.uf.common.registry.services.rest.IRepositoryItemsRestService;
|
import com.raytheon.uf.common.registry.services.rest.IRepositoryItemsRestService;
|
||||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
|
||||||
import com.raytheon.uf.common.status.UFStatus;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
@ -63,6 +57,7 @@ import com.raytheon.uf.common.status.UFStatus;
|
||||||
* 7/29/2013 2191 bphillip Implemented registry data access service
|
* 7/29/2013 2191 bphillip Implemented registry data access service
|
||||||
* 8/1/2013 1693 bphillip Modified getregistry objects method to correctly handle response
|
* 8/1/2013 1693 bphillip Modified getregistry objects method to correctly handle response
|
||||||
* 9/5/2013 1538 bphillip Changed cache expiration timeout and added http header
|
* 9/5/2013 1538 bphillip Changed cache expiration timeout and added http header
|
||||||
|
* 10/30/2013 1538 bphillip Moved data delivery services out of registry plugin
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author bphillip
|
* @author bphillip
|
||||||
|
@ -70,56 +65,32 @@ import com.raytheon.uf.common.status.UFStatus;
|
||||||
*/
|
*/
|
||||||
public class RegistryRESTServices {
|
public class RegistryRESTServices {
|
||||||
|
|
||||||
|
private static final String REGISTRY_REST_SERVICE_PATH = "/rest";
|
||||||
|
|
||||||
/** Map of known registry object request services */
|
/** Map of known registry object request services */
|
||||||
private static LoadingCache<String, IRegistryObjectsRestService> registryObjectServiceMap = CacheBuilder
|
private LoadingCache<String, IRegistryObjectsRestService> registryObjectServiceMap = CacheBuilder
|
||||||
.newBuilder().expireAfterAccess(5, TimeUnit.MINUTES)
|
.newBuilder().expireAfterAccess(5, TimeUnit.MINUTES)
|
||||||
.build(new CacheLoader<String, IRegistryObjectsRestService>() {
|
.build(new CacheLoader<String, IRegistryObjectsRestService>() {
|
||||||
public IRegistryObjectsRestService load(String url) {
|
public IRegistryObjectsRestService load(String url) {
|
||||||
return getPort(url, IRegistryObjectsRestService.class);
|
return getPort(url + REGISTRY_REST_SERVICE_PATH,
|
||||||
|
IRegistryObjectsRestService.class);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/** Map of known repository item request services */
|
/** Map of known repository item request services */
|
||||||
private static LoadingCache<String, IRepositoryItemsRestService> repositoryItemServiceMap = CacheBuilder
|
private LoadingCache<String, IRepositoryItemsRestService> repositoryItemServiceMap = CacheBuilder
|
||||||
.newBuilder().expireAfterAccess(5, TimeUnit.MINUTES)
|
.newBuilder().expireAfterAccess(5, TimeUnit.MINUTES)
|
||||||
.build(new CacheLoader<String, IRepositoryItemsRestService>() {
|
.build(new CacheLoader<String, IRepositoryItemsRestService>() {
|
||||||
public IRepositoryItemsRestService load(String url) {
|
public IRepositoryItemsRestService load(String url) {
|
||||||
return getPort(url, IRepositoryItemsRestService.class);
|
return getPort(url + REGISTRY_REST_SERVICE_PATH,
|
||||||
|
IRepositoryItemsRestService.class);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/** Map of known registry availability services */
|
private RegistryJaxbManager jaxbManager;
|
||||||
private static LoadingCache<String, IRegistryAvailableRestService> registryAvailabilityServiceMap = CacheBuilder
|
|
||||||
.newBuilder().expireAfterAccess(5, TimeUnit.MINUTES)
|
|
||||||
.build(new CacheLoader<String, IRegistryAvailableRestService>() {
|
|
||||||
public IRegistryAvailableRestService load(String url) {
|
|
||||||
return getPort(url, IRegistryAvailableRestService.class);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
/** Map of known registry data access services */
|
public RegistryRESTServices() throws JAXBException {
|
||||||
private static LoadingCache<String, IRegistryDataAccessService> registryDataAccessServiceMap = CacheBuilder
|
jaxbManager = new RegistryJaxbManager(new RegistryNamespaceMapper());
|
||||||
.newBuilder().expireAfterAccess(5, TimeUnit.MINUTES)
|
|
||||||
.build(new CacheLoader<String, IRegistryDataAccessService>() {
|
|
||||||
public IRegistryDataAccessService load(String url) {
|
|
||||||
return getPort(url, IRegistryDataAccessService.class);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The logger
|
|
||||||
*/
|
|
||||||
private static final IUFStatusHandler statusHandler = UFStatus
|
|
||||||
.getHandler(RegistryRESTServices.class);
|
|
||||||
|
|
||||||
private static RegistryJaxbManager jaxbManager;
|
|
||||||
|
|
||||||
static {
|
|
||||||
try {
|
|
||||||
jaxbManager = new RegistryJaxbManager(new RegistryNamespaceMapper());
|
|
||||||
} catch (JAXBException e) {
|
|
||||||
statusHandler.error("Error creating Registry jaxb manager!", e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -129,8 +100,7 @@ public class RegistryRESTServices {
|
||||||
* The base URL of the registry
|
* The base URL of the registry
|
||||||
* @return The service implementation
|
* @return The service implementation
|
||||||
*/
|
*/
|
||||||
public static IRegistryObjectsRestService getRegistryObjectService(
|
public IRegistryObjectsRestService getRegistryObjectService(String baseURL) {
|
||||||
String baseURL) {
|
|
||||||
try {
|
try {
|
||||||
return registryObjectServiceMap.get(baseURL);
|
return registryObjectServiceMap.get(baseURL);
|
||||||
} catch (ExecutionException e) {
|
} catch (ExecutionException e) {
|
||||||
|
@ -153,7 +123,7 @@ public class RegistryRESTServices {
|
||||||
* If errors occur while serializing the object
|
* If errors occur while serializing the object
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public static <T extends RegistryObjectType> T getRegistryObject(
|
public <T extends RegistryObjectType> T getRegistryObject(
|
||||||
Class<T> expectedType, String baseURL, String objectId)
|
Class<T> expectedType, String baseURL, String objectId)
|
||||||
throws JAXBException, RegistryServiceException {
|
throws JAXBException, RegistryServiceException {
|
||||||
String objStr = getRegistryObjectService(baseURL).getRegistryObject(
|
String objStr = getRegistryObjectService(baseURL).getRegistryObject(
|
||||||
|
@ -172,8 +142,7 @@ public class RegistryRESTServices {
|
||||||
* The base URL of the registry
|
* The base URL of the registry
|
||||||
* @return The service implementation
|
* @return The service implementation
|
||||||
*/
|
*/
|
||||||
public static IRepositoryItemsRestService getRepositoryItemService(
|
public IRepositoryItemsRestService getRepositoryItemService(String baseURL) {
|
||||||
String baseURL) {
|
|
||||||
try {
|
try {
|
||||||
return repositoryItemServiceMap.get(baseURL);
|
return repositoryItemServiceMap.get(baseURL);
|
||||||
} catch (ExecutionException e) {
|
} catch (ExecutionException e) {
|
||||||
|
@ -191,75 +160,11 @@ public class RegistryRESTServices {
|
||||||
* The id of the object
|
* The id of the object
|
||||||
* @return The repository item
|
* @return The repository item
|
||||||
*/
|
*/
|
||||||
public static byte[] getRepositoryItem(String baseURL,
|
public byte[] getRepositoryItem(String baseURL, String repositoryItemId) {
|
||||||
String repositoryItemId) {
|
|
||||||
return getRepositoryItemService(baseURL).getRepositoryItem(
|
return getRepositoryItemService(baseURL).getRepositoryItem(
|
||||||
repositoryItemId);
|
repositoryItemId);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the registry available service implementation
|
|
||||||
*
|
|
||||||
* @param baseURL
|
|
||||||
* The base URL of the registry
|
|
||||||
* @return THe registry available service implementation
|
|
||||||
*/
|
|
||||||
public static IRegistryAvailableRestService getRegistryAvailableService(
|
|
||||||
String baseURL) {
|
|
||||||
try {
|
|
||||||
return registryAvailabilityServiceMap.get(baseURL);
|
|
||||||
} catch (ExecutionException e) {
|
|
||||||
throw new RegistryServiceException(
|
|
||||||
"Error getting Registry Availability Rest Service", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if the registry at the given URL is available
|
|
||||||
*
|
|
||||||
* @param baseURL
|
|
||||||
* The base URL of the registry
|
|
||||||
* @return True if the registry services are available
|
|
||||||
*/
|
|
||||||
public static boolean isRegistryAvailable(String baseURL) {
|
|
||||||
String response = null;
|
|
||||||
try {
|
|
||||||
response = getRegistryAvailableService(baseURL)
|
|
||||||
.isRegistryAvailable();
|
|
||||||
if (RegistryAvailability.AVAILABLE.equals(response)) {
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
statusHandler.info("Registry at [" + baseURL
|
|
||||||
+ "] not available: " + response);
|
|
||||||
}
|
|
||||||
return RegistryAvailability.AVAILABLE.equals(response);
|
|
||||||
} catch (Throwable t) {
|
|
||||||
if (response == null) {
|
|
||||||
response = ExceptionUtils.getRootCauseMessage(t);
|
|
||||||
}
|
|
||||||
statusHandler.error("Registry at [" + baseURL + "] not available: "
|
|
||||||
+ response);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the data access service for the specified registry URL
|
|
||||||
*
|
|
||||||
* @param baseURL
|
|
||||||
* The baseURL of the registry
|
|
||||||
* @return The data access service for the specified registry URL
|
|
||||||
*/
|
|
||||||
public static IRegistryDataAccessService getRegistryDataAccessService(
|
|
||||||
String baseURL) {
|
|
||||||
try {
|
|
||||||
return registryDataAccessServiceMap.get(baseURL);
|
|
||||||
} catch (ExecutionException e) {
|
|
||||||
throw new RegistryServiceException(
|
|
||||||
"Error getting Registry Availability Rest Service", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Accesses a rest service at the provided URL. This method is primarily
|
* Accesses a rest service at the provided URL. This method is primarily
|
||||||
* used for resolving remote object references which use a REST service
|
* used for resolving remote object references which use a REST service
|
||||||
|
@ -268,7 +173,7 @@ public class RegistryRESTServices {
|
||||||
* The URL of the rest service
|
* The URL of the rest service
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static Object accessXMLRestService(String url) {
|
public Object accessXMLRestService(String url) {
|
||||||
String response = null;
|
String response = null;
|
||||||
try {
|
try {
|
||||||
response = Resources
|
response = Resources
|
||||||
|
@ -286,8 +191,7 @@ public class RegistryRESTServices {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static <T extends Object> T getPort(String url,
|
protected <T extends Object> T getPort(String url, Class<T> serviceClass) {
|
||||||
Class<T> serviceClass) {
|
|
||||||
T service = JAXRSClientFactory.create(url, serviceClass);
|
T service = JAXRSClientFactory.create(url, serviceClass);
|
||||||
Client client = (Client) Proxy.getInvocationHandler((Proxy) service);
|
Client client = (Client) Proxy.getInvocationHandler((Proxy) service);
|
||||||
// Create HTTP header containing the calling registry
|
// Create HTTP header containing the calling registry
|
||||||
|
|
|
@ -75,6 +75,7 @@ import com.raytheon.uf.common.status.UFStatus;
|
||||||
* Apr 24, 2013 1910 djohnson RegistryResponseStatus is now an enum.
|
* Apr 24, 2013 1910 djohnson RegistryResponseStatus is now an enum.
|
||||||
* 8/28/2013 1538 bphillip Removed caches, add http client preferences
|
* 8/28/2013 1538 bphillip Removed caches, add http client preferences
|
||||||
* 9/5/2013 1538 bphillip Add HTTP header information
|
* 9/5/2013 1538 bphillip Add HTTP header information
|
||||||
|
* 10/30/2013 1538 bphillip Made methods in this class non-static
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -143,7 +144,7 @@ public class RegistrySOAPServices {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Cache of known notification services */
|
/** Cache of known notification services */
|
||||||
private static LoadingCache<String, NotificationListener> notificationManagerServices = CacheBuilder
|
private LoadingCache<String, NotificationListener> notificationManagerServices = CacheBuilder
|
||||||
.newBuilder().expireAfterAccess(5, TimeUnit.MINUTES)
|
.newBuilder().expireAfterAccess(5, TimeUnit.MINUTES)
|
||||||
.build(new CacheLoader<String, NotificationListener>() {
|
.build(new CacheLoader<String, NotificationListener>() {
|
||||||
public NotificationListener load(String key) {
|
public NotificationListener load(String key) {
|
||||||
|
@ -152,7 +153,7 @@ public class RegistrySOAPServices {
|
||||||
});
|
});
|
||||||
|
|
||||||
/** Cache of known lifecycle manager services */
|
/** Cache of known lifecycle manager services */
|
||||||
private static LoadingCache<String, LifecycleManager> lifecycleManagerServices = CacheBuilder
|
private LoadingCache<String, LifecycleManager> lifecycleManagerServices = CacheBuilder
|
||||||
.newBuilder().expireAfterAccess(5, TimeUnit.MINUTES)
|
.newBuilder().expireAfterAccess(5, TimeUnit.MINUTES)
|
||||||
.build(new CacheLoader<String, LifecycleManager>() {
|
.build(new CacheLoader<String, LifecycleManager>() {
|
||||||
public LifecycleManager load(String key) {
|
public LifecycleManager load(String key) {
|
||||||
|
@ -161,7 +162,7 @@ public class RegistrySOAPServices {
|
||||||
});
|
});
|
||||||
|
|
||||||
/** Cache of known cataloger services */
|
/** Cache of known cataloger services */
|
||||||
private static LoadingCache<String, Cataloger> catalogerServices = CacheBuilder
|
private LoadingCache<String, Cataloger> catalogerServices = CacheBuilder
|
||||||
.newBuilder().expireAfterAccess(5, TimeUnit.MINUTES)
|
.newBuilder().expireAfterAccess(5, TimeUnit.MINUTES)
|
||||||
.build(new CacheLoader<String, Cataloger>() {
|
.build(new CacheLoader<String, Cataloger>() {
|
||||||
public Cataloger load(String key) {
|
public Cataloger load(String key) {
|
||||||
|
@ -170,7 +171,7 @@ public class RegistrySOAPServices {
|
||||||
});
|
});
|
||||||
|
|
||||||
/** Cache of known query services */
|
/** Cache of known query services */
|
||||||
private static LoadingCache<String, QueryManager> queryServices = CacheBuilder
|
private LoadingCache<String, QueryManager> queryServices = CacheBuilder
|
||||||
.newBuilder().expireAfterAccess(5, TimeUnit.MINUTES)
|
.newBuilder().expireAfterAccess(5, TimeUnit.MINUTES)
|
||||||
.build(new CacheLoader<String, QueryManager>() {
|
.build(new CacheLoader<String, QueryManager>() {
|
||||||
public QueryManager load(String key) {
|
public QueryManager load(String key) {
|
||||||
|
@ -179,7 +180,7 @@ public class RegistrySOAPServices {
|
||||||
});
|
});
|
||||||
|
|
||||||
/** Cache of known validator services */
|
/** Cache of known validator services */
|
||||||
private static LoadingCache<String, Validator> validatorServices = CacheBuilder
|
private LoadingCache<String, Validator> validatorServices = CacheBuilder
|
||||||
.newBuilder().expireAfterAccess(5, TimeUnit.MINUTES)
|
.newBuilder().expireAfterAccess(5, TimeUnit.MINUTES)
|
||||||
.build(new CacheLoader<String, Validator>() {
|
.build(new CacheLoader<String, Validator>() {
|
||||||
public Validator load(String key) {
|
public Validator load(String key) {
|
||||||
|
@ -196,7 +197,7 @@ public class RegistrySOAPServices {
|
||||||
* @throws MalformedURLException
|
* @throws MalformedURLException
|
||||||
* If errors occur creating the URL object
|
* If errors occur creating the URL object
|
||||||
*/
|
*/
|
||||||
public static String getNotificationListenerServiceUrl(final String baseURL)
|
public String getNotificationListenerServiceUrl(final String baseURL)
|
||||||
throws MalformedURLException {
|
throws MalformedURLException {
|
||||||
return new URL(baseURL + PATH_SEPARATOR + NOTIFICATION_SERVICE_NAME)
|
return new URL(baseURL + PATH_SEPARATOR + NOTIFICATION_SERVICE_NAME)
|
||||||
.toString();
|
.toString();
|
||||||
|
@ -211,7 +212,7 @@ public class RegistrySOAPServices {
|
||||||
* @throws RegistryServiceException
|
* @throws RegistryServiceException
|
||||||
* If errors occur creating the URL object
|
* If errors occur creating the URL object
|
||||||
*/
|
*/
|
||||||
public static NotificationListener getNotificationListenerServiceForHost(
|
public NotificationListener getNotificationListenerServiceForHost(
|
||||||
final String host) throws RegistryServiceException {
|
final String host) throws RegistryServiceException {
|
||||||
return getNotificationListenerServiceForUrl(host + PATH_SEPARATOR
|
return getNotificationListenerServiceForUrl(host + PATH_SEPARATOR
|
||||||
+ NOTIFICATION_SERVICE_NAME);
|
+ NOTIFICATION_SERVICE_NAME);
|
||||||
|
@ -226,7 +227,7 @@ public class RegistrySOAPServices {
|
||||||
* @throws RegistryServiceException
|
* @throws RegistryServiceException
|
||||||
* If errors occur creating the URL object
|
* If errors occur creating the URL object
|
||||||
*/
|
*/
|
||||||
public static NotificationListener getNotificationListenerServiceForUrl(
|
public NotificationListener getNotificationListenerServiceForUrl(
|
||||||
final String url) throws RegistryServiceException {
|
final String url) throws RegistryServiceException {
|
||||||
try {
|
try {
|
||||||
return notificationManagerServices.get(url);
|
return notificationManagerServices.get(url);
|
||||||
|
@ -245,8 +246,8 @@ public class RegistrySOAPServices {
|
||||||
* @throws RegistryServiceException
|
* @throws RegistryServiceException
|
||||||
* If errors occur creating the URL object
|
* If errors occur creating the URL object
|
||||||
*/
|
*/
|
||||||
public static LifecycleManager getLifecycleManagerServiceForHost(
|
public LifecycleManager getLifecycleManagerServiceForHost(final String host)
|
||||||
final String host) throws RegistryServiceException {
|
throws RegistryServiceException {
|
||||||
return getLifecycleManagerServiceForUrl(host + PATH_SEPARATOR
|
return getLifecycleManagerServiceForUrl(host + PATH_SEPARATOR
|
||||||
+ LIFECYCLE_MANAGER_SERVICE_NAME);
|
+ LIFECYCLE_MANAGER_SERVICE_NAME);
|
||||||
}
|
}
|
||||||
|
@ -260,8 +261,8 @@ public class RegistrySOAPServices {
|
||||||
* @throws RegistryServiceException
|
* @throws RegistryServiceException
|
||||||
* If errors occur creating the URL object
|
* If errors occur creating the URL object
|
||||||
*/
|
*/
|
||||||
public static LifecycleManager getLifecycleManagerServiceForUrl(
|
public LifecycleManager getLifecycleManagerServiceForUrl(final String url)
|
||||||
final String url) throws RegistryServiceException {
|
throws RegistryServiceException {
|
||||||
try {
|
try {
|
||||||
return lifecycleManagerServices.get(url);
|
return lifecycleManagerServices.get(url);
|
||||||
} catch (ExecutionException e) {
|
} catch (ExecutionException e) {
|
||||||
|
@ -279,7 +280,7 @@ public class RegistrySOAPServices {
|
||||||
* @throws RegistryServiceException
|
* @throws RegistryServiceException
|
||||||
* If errors occur creating the URL object
|
* If errors occur creating the URL object
|
||||||
*/
|
*/
|
||||||
public static Cataloger getCatalogerServiceForHost(final String host)
|
public Cataloger getCatalogerServiceForHost(final String host)
|
||||||
throws RegistryServiceException {
|
throws RegistryServiceException {
|
||||||
return getCatalogerServiceForUrl(host + PATH_SEPARATOR
|
return getCatalogerServiceForUrl(host + PATH_SEPARATOR
|
||||||
+ CATALOGER_SERVICE_NAME);
|
+ CATALOGER_SERVICE_NAME);
|
||||||
|
@ -294,7 +295,7 @@ public class RegistrySOAPServices {
|
||||||
* @throws RegistryServiceException
|
* @throws RegistryServiceException
|
||||||
* If errors occur creating the URL object
|
* If errors occur creating the URL object
|
||||||
*/
|
*/
|
||||||
public static Cataloger getCatalogerServiceForUrl(final String url)
|
public Cataloger getCatalogerServiceForUrl(final String url)
|
||||||
throws RegistryServiceException {
|
throws RegistryServiceException {
|
||||||
try {
|
try {
|
||||||
return catalogerServices.get(url);
|
return catalogerServices.get(url);
|
||||||
|
@ -313,7 +314,7 @@ public class RegistrySOAPServices {
|
||||||
* @throws RegistryServiceException
|
* @throws RegistryServiceException
|
||||||
* If errors occur creating the URL object
|
* If errors occur creating the URL object
|
||||||
*/
|
*/
|
||||||
public static QueryManager getQueryServiceForHost(final String host)
|
public QueryManager getQueryServiceForHost(final String host)
|
||||||
throws RegistryServiceException {
|
throws RegistryServiceException {
|
||||||
return getQueryServiceForUrl(host + PATH_SEPARATOR + QUERY_SERVICE_NAME);
|
return getQueryServiceForUrl(host + PATH_SEPARATOR + QUERY_SERVICE_NAME);
|
||||||
}
|
}
|
||||||
|
@ -327,7 +328,7 @@ public class RegistrySOAPServices {
|
||||||
* @throws RegistryServiceException
|
* @throws RegistryServiceException
|
||||||
* If errors occur creating the URL object
|
* If errors occur creating the URL object
|
||||||
*/
|
*/
|
||||||
public static QueryManager getQueryServiceForUrl(final String url)
|
public QueryManager getQueryServiceForUrl(final String url)
|
||||||
throws RegistryServiceException {
|
throws RegistryServiceException {
|
||||||
try {
|
try {
|
||||||
return queryServices.get(url);
|
return queryServices.get(url);
|
||||||
|
@ -346,7 +347,7 @@ public class RegistrySOAPServices {
|
||||||
* @throws RegistryServiceException
|
* @throws RegistryServiceException
|
||||||
* If errors occur creating the URL object
|
* If errors occur creating the URL object
|
||||||
*/
|
*/
|
||||||
public static Validator getValidatorServiceForHost(final String host)
|
public Validator getValidatorServiceForHost(final String host)
|
||||||
throws RegistryServiceException {
|
throws RegistryServiceException {
|
||||||
return getValidatorServiceForUrl(host + PATH_SEPARATOR
|
return getValidatorServiceForUrl(host + PATH_SEPARATOR
|
||||||
+ VALIDATOR_SERVICE_NAME);
|
+ VALIDATOR_SERVICE_NAME);
|
||||||
|
@ -361,7 +362,7 @@ public class RegistrySOAPServices {
|
||||||
* @throws RegistryServiceException
|
* @throws RegistryServiceException
|
||||||
* If errors occur creating the URL object
|
* If errors occur creating the URL object
|
||||||
*/
|
*/
|
||||||
public static Validator getValidatorServiceForUrl(final String url)
|
public Validator getValidatorServiceForUrl(final String url)
|
||||||
throws RegistryServiceException {
|
throws RegistryServiceException {
|
||||||
try {
|
try {
|
||||||
return validatorServices.get(url);
|
return validatorServices.get(url);
|
||||||
|
@ -383,7 +384,7 @@ public class RegistrySOAPServices {
|
||||||
* @throws RegistryServiceException
|
* @throws RegistryServiceException
|
||||||
* If errors occur during request submission
|
* If errors occur during request submission
|
||||||
*/
|
*/
|
||||||
public static void sendSubmitObjectsRequest(SubmitObjectsRequest request,
|
public void sendSubmitObjectsRequest(SubmitObjectsRequest request,
|
||||||
String host) throws RegistryServiceException {
|
String host) throws RegistryServiceException {
|
||||||
|
|
||||||
LifecycleManager lcm;
|
LifecycleManager lcm;
|
||||||
|
@ -423,7 +424,7 @@ public class RegistrySOAPServices {
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
private static <T extends Object> T getPort(String serviceUrl,
|
private <T extends Object> T getPort(String serviceUrl,
|
||||||
Class<?> serviceInterface) throws RegistryServiceException {
|
Class<?> serviceInterface) throws RegistryServiceException {
|
||||||
W3CEndpointReferenceBuilder endpointBuilder = new W3CEndpointReferenceBuilder();
|
W3CEndpointReferenceBuilder endpointBuilder = new W3CEndpointReferenceBuilder();
|
||||||
endpointBuilder.wsdlDocumentLocation(serviceUrl.toString() + WSDL);
|
endpointBuilder.wsdlDocumentLocation(serviceUrl.toString() + WSDL);
|
||||||
|
|
|
@ -39,12 +39,13 @@ import oasis.names.tc.ebxml.regrep.wsdl.registry.services.v4.MsgRegistryExceptio
|
||||||
* Date Ticket# Engineer Description
|
* Date Ticket# Engineer Description
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* 5/21/2013 2022 bphillip Initial implementation
|
* 5/21/2013 2022 bphillip Initial implementation
|
||||||
|
* 10/30/2013 1538 bphillip Changed REST path
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author bphillip
|
* @author bphillip
|
||||||
* @version 1
|
* @version 1
|
||||||
*/
|
*/
|
||||||
@Path("/rest/search")
|
@Path("/search")
|
||||||
public interface IQueryProtocolRestService {
|
public interface IQueryProtocolRestService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -36,12 +36,13 @@ import javax.xml.bind.JAXBException;
|
||||||
* Date Ticket# Engineer Description
|
* Date Ticket# Engineer Description
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* 5/21/2013 2022 bphillip Initial implementation
|
* 5/21/2013 2022 bphillip Initial implementation
|
||||||
|
* 10/30/2013 1538 bphillip Changed REST service paths
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author bphillip
|
* @author bphillip
|
||||||
* @version 1
|
* @version 1
|
||||||
*/
|
*/
|
||||||
@Path("/rest/registryObjects/{objectId}")
|
@Path("/registryObjects/{objectId}")
|
||||||
public interface IRegistryObjectsRestService {
|
public interface IRegistryObjectsRestService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -35,12 +35,13 @@ import javax.ws.rs.Produces;
|
||||||
* Date Ticket# Engineer Description
|
* Date Ticket# Engineer Description
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* 5/21/2013 2022 bphillip Initial implementation
|
* 5/21/2013 2022 bphillip Initial implementation
|
||||||
|
* 10/30/2013 1538 bphillip Changed REST service paths
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author bphillip
|
* @author bphillip
|
||||||
* @version 1
|
* @version 1
|
||||||
*/
|
*/
|
||||||
@Path("/rest/repositoryItems/{repositoryItemId}")
|
@Path("/repositoryItems/{repositoryItemId}")
|
||||||
public interface IRepositoryItemsRestService {
|
public interface IRepositoryItemsRestService {
|
||||||
|
|
||||||
@GET
|
@GET
|
||||||
|
|
|
@ -33,6 +33,7 @@ import com.raytheon.uf.common.datadelivery.registry.Coverage;
|
||||||
import com.raytheon.uf.common.datadelivery.registry.DataSetMetaData;
|
import com.raytheon.uf.common.datadelivery.registry.DataSetMetaData;
|
||||||
import com.raytheon.uf.common.datadelivery.registry.DataType;
|
import com.raytheon.uf.common.datadelivery.registry.DataType;
|
||||||
import com.raytheon.uf.common.datadelivery.registry.GriddedTime;
|
import com.raytheon.uf.common.datadelivery.registry.GriddedTime;
|
||||||
|
import com.raytheon.uf.common.datadelivery.registry.PointTime;
|
||||||
import com.raytheon.uf.common.datadelivery.registry.Subscription;
|
import com.raytheon.uf.common.datadelivery.registry.Subscription;
|
||||||
import com.raytheon.uf.common.datadelivery.registry.Time;
|
import com.raytheon.uf.common.datadelivery.registry.Time;
|
||||||
import com.raytheon.uf.common.datadelivery.registry.handlers.DataDeliveryHandlers;
|
import com.raytheon.uf.common.datadelivery.registry.handlers.DataDeliveryHandlers;
|
||||||
|
@ -70,6 +71,7 @@ import com.raytheon.uf.edex.datadelivery.bandwidth.retrieval.RetrievalStatus;
|
||||||
* Sept 24, 2013 1797 dhladky separated time from GriddedTime
|
* Sept 24, 2013 1797 dhladky separated time from GriddedTime
|
||||||
* Oct 10, 2013 1797 bgonzale Refactored registry Time objects.
|
* Oct 10, 2013 1797 bgonzale Refactored registry Time objects.
|
||||||
* Oct 30, 2013 2448 dhladky Fixed pulling data before and after activePeriod starting and ending.
|
* Oct 30, 2013 2448 dhladky Fixed pulling data before and after activePeriod starting and ending.
|
||||||
|
* Nov 5, 2013 2521 dhladky Fixed DataSetMetaData update failures for URL's in pointdata.
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -325,6 +327,7 @@ public class BandwidthDaoUtil<T extends Time, C extends Coverage> {
|
||||||
* @return the adhoc subscription, or null if no matching metadata could be
|
* @return the adhoc subscription, or null if no matching metadata could be
|
||||||
* found
|
* found
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("rawtypes")
|
||||||
public AdhocSubscription<T,C> setAdhocMostRecentUrlAndTime(
|
public AdhocSubscription<T,C> setAdhocMostRecentUrlAndTime(
|
||||||
AdhocSubscription<T,C> adhoc, boolean mostRecent) {
|
AdhocSubscription<T,C> adhoc, boolean mostRecent) {
|
||||||
AdhocSubscription<T,C> retVal = null;
|
AdhocSubscription<T,C> retVal = null;
|
||||||
|
@ -344,8 +347,19 @@ public class BandwidthDaoUtil<T extends Time, C extends Coverage> {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dataSetMetaDatas != null && !dataSetMetaDatas.isEmpty()) {
|
if (dataSetMetaDatas != null && !dataSetMetaDatas.isEmpty()) {
|
||||||
// just grab the most recent one, all we need is the URL
|
// No guarantee on ordering, have to find most recent time
|
||||||
adhoc.setUrl(dataSetMetaDatas.get(0).getUrl());
|
@SuppressWarnings("unchecked")
|
||||||
|
DataSetMetaData<PointTime> selectedDataSet = dataSetMetaDatas.get(0);
|
||||||
|
Date checkDate = selectedDataSet.getDate();
|
||||||
|
|
||||||
|
for (DataSetMetaData<PointTime> dsmd: dataSetMetaDatas) {
|
||||||
|
if (dsmd.getDate().after(checkDate)) {
|
||||||
|
checkDate = dsmd.getDate();
|
||||||
|
selectedDataSet = dsmd;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
adhoc.setUrl(selectedDataSet.getUrl());
|
||||||
retVal = adhoc;
|
retVal = adhoc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,4 +17,8 @@ Require-Bundle: com.raytheon.uf.common.registry.schemas.ebxml;bundle-version="1.
|
||||||
org.springframework;bundle-version="2.5.6",
|
org.springframework;bundle-version="2.5.6",
|
||||||
com.raytheon.uf.common.time;bundle-version="1.12.1174",
|
com.raytheon.uf.common.time;bundle-version="1.12.1174",
|
||||||
com.raytheon.uf.edex.core;bundle-version="1.12.1174",
|
com.raytheon.uf.edex.core;bundle-version="1.12.1174",
|
||||||
com.google.guava;bundle-version="1.0.0"
|
com.google.guava;bundle-version="1.0.0",
|
||||||
|
org.apache.commons.cxf;bundle-version="1.0.0",
|
||||||
|
org.reflections;bundle-version="0.9.9",
|
||||||
|
com.raytheon.uf.common.datadelivery.registry;bundle-version="1.0.0",
|
||||||
|
org.apache.commons.lang;bundle-version="2.3.0"
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
|
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
|
||||||
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
|
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
|
||||||
|
|
||||||
<bean name="replicationConfigFileName" class="java.lang.String">
|
<bean id="dataDeliveryRestClient" class="com.raytheon.uf.edex.datadelivery.registry.web.DataDeliveryRESTServices"/>
|
||||||
<constructor-arg value="ebxml/notification/notificationServers_NCF.xml" />
|
|
||||||
</bean>
|
|
||||||
</beans>
|
</beans>
|
|
@ -11,5 +11,6 @@
|
||||||
<constructor-arg ref="RegistryReplicationManager"/>
|
<constructor-arg ref="RegistryReplicationManager"/>
|
||||||
<property name="registryObjectDao" ref="registryObjectDao"/>
|
<property name="registryObjectDao" ref="registryObjectDao"/>
|
||||||
<property name="registryDao" ref="registryDao"/>
|
<property name="registryDao" ref="registryDao"/>
|
||||||
|
<property name="registrySoapServices" ref="registryWebServiceClient"/>
|
||||||
</bean>
|
</bean>
|
||||||
</beans>
|
</beans>
|
|
@ -9,9 +9,10 @@
|
||||||
<constructor-arg ref="lcmServiceImpl" />
|
<constructor-arg ref="lcmServiceImpl" />
|
||||||
<constructor-arg value="ebxml/federation/federationConfig.xml"/>
|
<constructor-arg value="ebxml/federation/federationConfig.xml"/>
|
||||||
<constructor-arg ref="RegistryReplicationManager"/>
|
<constructor-arg ref="RegistryReplicationManager"/>
|
||||||
<constructor-arg value="${NCF_ADDRESS}" />
|
|
||||||
<property name="registryObjectDao" ref="registryObjectDao"/>
|
<property name="registryObjectDao" ref="registryObjectDao"/>
|
||||||
<property name="registryDao" ref="registryDao"/>
|
<property name="registryDao" ref="registryDao"/>
|
||||||
<property name="txTemplate" ref="metadataTxTemplate"/>
|
<property name="txTemplate" ref="metadataTxTemplate"/>
|
||||||
|
<property name="dataDeliveryRestClient" ref="dataDeliveryRestClient"/>
|
||||||
|
<property name="registrySoapServices" ref="registryWebServiceClient"/>
|
||||||
</bean>
|
</bean>
|
||||||
</beans>
|
</beans>
|
|
@ -1,9 +0,0 @@
|
||||||
<beans xmlns="http://www.springframework.org/schema/beans"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
|
|
||||||
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
|
|
||||||
|
|
||||||
<bean name="replicationConfigFileName" class="java.lang.String">
|
|
||||||
<constructor-arg value="ebxml/notification/notificationServers_WFO.xml" />
|
|
||||||
</bean>
|
|
||||||
</beans>
|
|
|
@ -10,11 +10,11 @@
|
||||||
|
|
||||||
<bean id="RegistryReplicationManager" class="com.raytheon.uf.edex.datadelivery.registry.replication.RegistryReplicationManager">
|
<bean id="RegistryReplicationManager" class="com.raytheon.uf.edex.datadelivery.registry.replication.RegistryReplicationManager">
|
||||||
<constructor-arg ref="ebxmlSubscriptionsEnabled"/>
|
<constructor-arg ref="ebxmlSubscriptionsEnabled"/>
|
||||||
<constructor-arg ref="replicationConfigFileName"/>
|
|
||||||
<constructor-arg ref="registryObjectDao"/>
|
<constructor-arg ref="registryObjectDao"/>
|
||||||
<constructor-arg ref="FederatedRegistryMonitor"/>
|
<constructor-arg ref="FederatedRegistryMonitor"/>
|
||||||
<constructor-arg ref="metadataTxTemplate"/>
|
<constructor-arg ref="metadataTxTemplate"/>
|
||||||
<constructor-arg value="${ebxml-federation-sync-threads}"/>
|
<property name="dataDeliveryRestClient" ref="dataDeliveryRestClient"/>
|
||||||
|
<property name="registrySoapClient" ref="registryWebServiceClient"/>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
|
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
|
||||||
|
xmlns:jaxrs="http://cxf.apache.org/jaxrs"
|
||||||
|
xsi:schemaLocation="http://www.springframework.org/schema/beans
|
||||||
|
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
|
||||||
|
http://cxf.apache.org/jaxws
|
||||||
|
http://cxf.apache.org/schemas/jaxws.xsd
|
||||||
|
http://cxf.apache.org/jaxrs
|
||||||
|
http://cxf.apache.org/schemas/jaxrs.xsd">
|
||||||
|
|
||||||
|
<import resource="classpath:META-INF/cxf/cxf.xml" />
|
||||||
|
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
|
||||||
|
|
||||||
|
<import resource="classpath:res/spring/registry-datadelivery.xml" />
|
||||||
|
<import resource="classpath:res/spring/registry-replication-datadelivery.xml"/>
|
||||||
|
|
||||||
|
<bean id="registryDataAccessService"
|
||||||
|
class="com.raytheon.uf.edex.datadelivery.registry.web.RegistryDataAccessService">
|
||||||
|
<property name="registryObjectDao" ref="registryObjectDao" />
|
||||||
|
<property name="lcm" ref="lcmServiceImpl" />
|
||||||
|
<property name="queryDefinitionDao" ref="queryDefinitionDao" />
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<bean id="registryAvailabilityService"
|
||||||
|
class="com.raytheon.uf.edex.datadelivery.registry.web.RegistryAvailableRestService" />
|
||||||
|
|
||||||
|
<bean id="registryStatus" class="com.raytheon.uf.edex.datadelivery.registry.web.RegistryFederationStatus">
|
||||||
|
<property name="registryDao" ref="registryDao"/>
|
||||||
|
<property name="subscriptionDao" ref="subscriptionTypeDao"/>
|
||||||
|
<property name="replicationManager" ref="RegistryReplicationManager"/>
|
||||||
|
<property name="dataDeliveryRestClient" ref="dataDeliveryRestClient"/>
|
||||||
|
<property name="registrySoapServices" ref="registryWebServiceClient"/>
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- REST Service Definitions -->
|
||||||
|
<jaxrs:server id="dataDeliveryRestServices" address="/dataDelivery">
|
||||||
|
<jaxrs:inInterceptors>
|
||||||
|
<ref bean="webServiceInInterceptor" />
|
||||||
|
</jaxrs:inInterceptors>
|
||||||
|
<jaxrs:serviceBeans>
|
||||||
|
<ref bean="registryDataAccessService" />
|
||||||
|
<ref bean="registryAvailabilityService" />
|
||||||
|
<ref bean="registryStatus"/>
|
||||||
|
</jaxrs:serviceBeans>
|
||||||
|
</jaxrs:server>
|
||||||
|
</beans>
|
|
@ -26,10 +26,14 @@ import java.util.List;
|
||||||
import javax.xml.bind.JAXBException;
|
import javax.xml.bind.JAXBException;
|
||||||
|
|
||||||
import oasis.names.tc.ebxml.regrep.wsdl.registry.services.v4.LifecycleManager;
|
import oasis.names.tc.ebxml.regrep.wsdl.registry.services.v4.LifecycleManager;
|
||||||
|
import oasis.names.tc.ebxml.regrep.wsdl.registry.services.v4.MsgRegistryException;
|
||||||
|
import oasis.names.tc.ebxml.regrep.xsd.lcm.v4.Mode;
|
||||||
|
import oasis.names.tc.ebxml.regrep.xsd.lcm.v4.SubmitObjectsRequest;
|
||||||
import oasis.names.tc.ebxml.regrep.xsd.rim.v4.AssociationType;
|
import oasis.names.tc.ebxml.regrep.xsd.rim.v4.AssociationType;
|
||||||
import oasis.names.tc.ebxml.regrep.xsd.rim.v4.FederationType;
|
import oasis.names.tc.ebxml.regrep.xsd.rim.v4.FederationType;
|
||||||
import oasis.names.tc.ebxml.regrep.xsd.rim.v4.OrganizationType;
|
import oasis.names.tc.ebxml.regrep.xsd.rim.v4.OrganizationType;
|
||||||
import oasis.names.tc.ebxml.regrep.xsd.rim.v4.PersonType;
|
import oasis.names.tc.ebxml.regrep.xsd.rim.v4.PersonType;
|
||||||
|
import oasis.names.tc.ebxml.regrep.xsd.rim.v4.RegistryObjectListType;
|
||||||
import oasis.names.tc.ebxml.regrep.xsd.rim.v4.RegistryObjectType;
|
import oasis.names.tc.ebxml.regrep.xsd.rim.v4.RegistryObjectType;
|
||||||
import oasis.names.tc.ebxml.regrep.xsd.rim.v4.RegistryType;
|
import oasis.names.tc.ebxml.regrep.xsd.rim.v4.RegistryType;
|
||||||
|
|
||||||
|
@ -54,6 +58,7 @@ import com.raytheon.uf.edex.registry.ebxml.init.RegistryInitializedListener;
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* 5/22/2013 1707 bphillip Initial implementation
|
* 5/22/2013 1707 bphillip Initial implementation
|
||||||
* 7/29/2013 2191 bphillip Implemented registry sync for registries that have been down for an extended period of time
|
* 7/29/2013 2191 bphillip Implemented registry sync for registries that have been down for an extended period of time
|
||||||
|
* 10/30/2013 1538 bphillip Override submitObjects method
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author bphillip
|
* @author bphillip
|
||||||
|
@ -124,6 +129,21 @@ public class NcfRegistryFederationManager extends RegistryFederationManager
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void submitObjects(List<RegistryObjectType> objects)
|
||||||
|
throws EbxmlRegistryException {
|
||||||
|
SubmitObjectsRequest submitObjectsRequest2 = new SubmitObjectsRequest(
|
||||||
|
"Federation Objects submission",
|
||||||
|
"Submitting federation related objects", null,
|
||||||
|
new RegistryObjectListType(objects), false,
|
||||||
|
Mode.CREATE_OR_REPLACE);
|
||||||
|
try {
|
||||||
|
lcm.submitObjects(submitObjectsRequest2);
|
||||||
|
} catch (MsgRegistryException e) {
|
||||||
|
throw new EbxmlRegistryException(
|
||||||
|
"Error submitting federation objects to registry", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected FederationType getFederation() throws EbxmlRegistryException {
|
protected FederationType getFederation() throws EbxmlRegistryException {
|
||||||
FederationType federation = new FederationType();
|
FederationType federation = new FederationType();
|
||||||
federation.setId(FEDERATION_ID);
|
federation.setId(FEDERATION_ID);
|
||||||
|
|
|
@ -44,6 +44,7 @@ import com.raytheon.uf.common.registry.constants.AssociationTypes;
|
||||||
import com.raytheon.uf.common.registry.constants.RegistryObjectTypes;
|
import com.raytheon.uf.common.registry.constants.RegistryObjectTypes;
|
||||||
import com.raytheon.uf.common.registry.constants.StatusTypes;
|
import com.raytheon.uf.common.registry.constants.StatusTypes;
|
||||||
import com.raytheon.uf.common.registry.ebxml.RegistryUtil;
|
import com.raytheon.uf.common.registry.ebxml.RegistryUtil;
|
||||||
|
import com.raytheon.uf.common.registry.services.RegistrySOAPServices;
|
||||||
import com.raytheon.uf.common.serialization.JAXBManager;
|
import com.raytheon.uf.common.serialization.JAXBManager;
|
||||||
import com.raytheon.uf.common.serialization.SerializationException;
|
import com.raytheon.uf.common.serialization.SerializationException;
|
||||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||||
|
@ -66,6 +67,7 @@ import com.raytheon.uf.edex.registry.ebxml.exception.EbxmlRegistryException;
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* 5/22/2013 1707 bphillip Initial implementation
|
* 5/22/2013 1707 bphillip Initial implementation
|
||||||
* 7/29/2013 2191 bphillip Implemented registry sync for registries that have been down for an extended period of time
|
* 7/29/2013 2191 bphillip Implemented registry sync for registries that have been down for an extended period of time
|
||||||
|
* 10/30/2013 1538 bphillip Changed submitObjects method to submit objects to NCF by default
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author bphillip
|
* @author bphillip
|
||||||
|
@ -79,6 +81,9 @@ public abstract class RegistryFederationManager {
|
||||||
protected static final IUFStatusHandler statusHandler = UFStatus
|
protected static final IUFStatusHandler statusHandler = UFStatus
|
||||||
.getHandler(RegistryFederationManager.class);
|
.getHandler(RegistryFederationManager.class);
|
||||||
|
|
||||||
|
/** The address of the NCF */
|
||||||
|
protected String ncfAddress = System.getenv("NCF_ADDRESS");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The scheduler service used for registering this registry with the
|
* The scheduler service used for registering this registry with the
|
||||||
* federation
|
* federation
|
||||||
|
@ -109,6 +114,9 @@ public abstract class RegistryFederationManager {
|
||||||
/** Data Access object for RegistryType objects */
|
/** Data Access object for RegistryType objects */
|
||||||
protected RegistryDao registryDao;
|
protected RegistryDao registryDao;
|
||||||
|
|
||||||
|
/** Registry SOAP Service Client */
|
||||||
|
protected RegistrySOAPServices registrySoapServices;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the federation object for this federation
|
* Gets the federation object for this federation
|
||||||
*
|
*
|
||||||
|
@ -195,6 +203,16 @@ public abstract class RegistryFederationManager {
|
||||||
return association;
|
return association;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Submits objects necessary for the registry/federation to operate properly
|
||||||
|
* to the registry. This method first submits it locally, then submits the
|
||||||
|
* objects to the NCF
|
||||||
|
*
|
||||||
|
* @param objects
|
||||||
|
* The objects to submit
|
||||||
|
* @throws EbxmlRegistryException
|
||||||
|
* If object submission fails
|
||||||
|
*/
|
||||||
protected void submitObjects(List<RegistryObjectType> objects)
|
protected void submitObjects(List<RegistryObjectType> objects)
|
||||||
throws EbxmlRegistryException {
|
throws EbxmlRegistryException {
|
||||||
SubmitObjectsRequest submitObjectsRequest2 = new SubmitObjectsRequest(
|
SubmitObjectsRequest submitObjectsRequest2 = new SubmitObjectsRequest(
|
||||||
|
@ -209,6 +227,14 @@ public abstract class RegistryFederationManager {
|
||||||
"Error submitting federation objects to registry", e);
|
"Error submitting federation objects to registry", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
registrySoapServices.getLifecycleManagerServiceForHost(ncfAddress)
|
||||||
|
.submitObjects(submitObjectsRequest2);
|
||||||
|
} catch (MsgRegistryException e) {
|
||||||
|
throw new EbxmlRegistryException(
|
||||||
|
"Error submitting federation objects to registry", e);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setRegistryObjectDao(RegistryObjectDao registryObjectDao) {
|
public void setRegistryObjectDao(RegistryObjectDao registryObjectDao) {
|
||||||
|
@ -219,4 +245,9 @@ public abstract class RegistryFederationManager {
|
||||||
this.registryDao = registryDao;
|
this.registryDao = registryDao;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setRegistrySoapServices(
|
||||||
|
RegistrySOAPServices registrySoapServices) {
|
||||||
|
this.registrySoapServices = registrySoapServices;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,12 +47,11 @@ import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.transaction.support.TransactionTemplate;
|
import org.springframework.transaction.support.TransactionTemplate;
|
||||||
|
|
||||||
import com.raytheon.uf.common.registry.constants.CanonicalQueryTypes;
|
import com.raytheon.uf.common.registry.constants.CanonicalQueryTypes;
|
||||||
import com.raytheon.uf.common.registry.services.RegistryRESTServices;
|
|
||||||
import com.raytheon.uf.common.registry.services.RegistrySOAPServices;
|
|
||||||
import com.raytheon.uf.common.serialization.SerializationException;
|
import com.raytheon.uf.common.serialization.SerializationException;
|
||||||
import com.raytheon.uf.common.util.CollectionUtil;
|
import com.raytheon.uf.common.util.CollectionUtil;
|
||||||
import com.raytheon.uf.edex.database.RunnableWithTransaction;
|
import com.raytheon.uf.edex.database.RunnableWithTransaction;
|
||||||
import com.raytheon.uf.edex.datadelivery.registry.replication.RegistryReplicationManager;
|
import com.raytheon.uf.edex.datadelivery.registry.replication.RegistryReplicationManager;
|
||||||
|
import com.raytheon.uf.edex.datadelivery.registry.web.DataDeliveryRESTServices;
|
||||||
import com.raytheon.uf.edex.registry.ebxml.exception.EbxmlRegistryException;
|
import com.raytheon.uf.edex.registry.ebxml.exception.EbxmlRegistryException;
|
||||||
import com.raytheon.uf.edex.registry.ebxml.init.RegistryInitializedListener;
|
import com.raytheon.uf.edex.registry.ebxml.init.RegistryInitializedListener;
|
||||||
import com.raytheon.uf.edex.registry.ebxml.services.query.QueryConstants;
|
import com.raytheon.uf.edex.registry.ebxml.services.query.QueryConstants;
|
||||||
|
@ -70,6 +69,7 @@ import com.raytheon.uf.edex.registry.ebxml.services.query.QueryConstants;
|
||||||
* 5/22/2013 1707 bphillip Initial implementation
|
* 5/22/2013 1707 bphillip Initial implementation
|
||||||
* 7/29/2013 2191 bphillip Implemented registry sync for registries that have been down for an extended period of time
|
* 7/29/2013 2191 bphillip Implemented registry sync for registries that have been down for an extended period of time
|
||||||
* 10/20/2013 1682 bphillip Fixed query invocation
|
* 10/20/2013 1682 bphillip Fixed query invocation
|
||||||
|
* 10/30/2013 1538 bphillip This class now uses non-static rest/soap clients
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author bphillip
|
* @author bphillip
|
||||||
|
@ -80,12 +80,12 @@ import com.raytheon.uf.edex.registry.ebxml.services.query.QueryConstants;
|
||||||
public class WfoRegistryFederationManager extends RegistryFederationManager
|
public class WfoRegistryFederationManager extends RegistryFederationManager
|
||||||
implements RegistryInitializedListener {
|
implements RegistryInitializedListener {
|
||||||
|
|
||||||
/** The address of the NCF */
|
|
||||||
private String ncfAddress;
|
|
||||||
|
|
||||||
/** The transaction template used to manually handle transactions */
|
/** The transaction template used to manually handle transactions */
|
||||||
private TransactionTemplate txTemplate;
|
private TransactionTemplate txTemplate;
|
||||||
|
|
||||||
|
/** Data Delivery rest client services */
|
||||||
|
private DataDeliveryRESTServices dataDeliveryRestClient;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new WfoRegistryFederationManager
|
* Creates a new WfoRegistryFederationManager
|
||||||
*/
|
*/
|
||||||
|
@ -112,11 +112,10 @@ public class WfoRegistryFederationManager extends RegistryFederationManager
|
||||||
*/
|
*/
|
||||||
protected WfoRegistryFederationManager(boolean federationEnabled,
|
protected WfoRegistryFederationManager(boolean federationEnabled,
|
||||||
LifecycleManager lcm, String federationPropertiesFileName,
|
LifecycleManager lcm, String federationPropertiesFileName,
|
||||||
RegistryReplicationManager replicationManager, String ncfAddress)
|
RegistryReplicationManager replicationManager)
|
||||||
throws JAXBException, IOException, SerializationException {
|
throws JAXBException, IOException, SerializationException {
|
||||||
super(federationEnabled, lcm, federationPropertiesFileName,
|
super(federationEnabled, lcm, federationPropertiesFileName,
|
||||||
replicationManager);
|
replicationManager);
|
||||||
this.ncfAddress = ncfAddress;
|
|
||||||
if (this.replicationManager.getServers() == null
|
if (this.replicationManager.getServers() == null
|
||||||
|| CollectionUtil.isNullOrEmpty(replicationManager.getServers()
|
|| CollectionUtil.isNullOrEmpty(replicationManager.getServers()
|
||||||
.getRegistryReplicationServers())) {
|
.getRegistryReplicationServers())) {
|
||||||
|
@ -198,7 +197,7 @@ public class WfoRegistryFederationManager extends RegistryFederationManager
|
||||||
request.setQuery(query);
|
request.setQuery(query);
|
||||||
QueryResponse response = null;
|
QueryResponse response = null;
|
||||||
try {
|
try {
|
||||||
response = RegistrySOAPServices.getQueryServiceForHost(ncfAddress)
|
response = registrySoapServices.getQueryServiceForHost(ncfAddress)
|
||||||
.executeQuery(request);
|
.executeQuery(request);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new EbxmlRegistryException(
|
throw new EbxmlRegistryException(
|
||||||
|
@ -253,7 +252,7 @@ public class WfoRegistryFederationManager extends RegistryFederationManager
|
||||||
if (!success) {
|
if (!success) {
|
||||||
try {
|
try {
|
||||||
try {
|
try {
|
||||||
if (RegistryRESTServices
|
if (dataDeliveryRestClient
|
||||||
.isRegistryAvailable(ncfAddress)) {
|
.isRegistryAvailable(ncfAddress)) {
|
||||||
statusHandler
|
statusHandler
|
||||||
.info("NCF Registry is available. Attempting to join federation...");
|
.info("NCF Registry is available. Attempting to join federation...");
|
||||||
|
@ -285,4 +284,9 @@ public class WfoRegistryFederationManager extends RegistryFederationManager
|
||||||
this.txTemplate = txTemplate;
|
this.txTemplate = txTemplate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setDataDeliveryRestClient(
|
||||||
|
DataDeliveryRESTServices dataDeliveryRestClient) {
|
||||||
|
this.dataDeliveryRestClient = dataDeliveryRestClient;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
**/
|
**/
|
||||||
package com.raytheon.uf.edex.datadelivery.registry.replication;
|
package com.raytheon.uf.edex.datadelivery.registry.replication;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import javax.xml.bind.annotation.XmlAccessType;
|
import javax.xml.bind.annotation.XmlAccessType;
|
||||||
|
@ -41,6 +42,7 @@ import javax.xml.bind.annotation.XmlRootElement;
|
||||||
* 4/9/2013 1802 bphillip Initial implementation
|
* 4/9/2013 1802 bphillip Initial implementation
|
||||||
* 5/21/2013 1707 bphillip Removed unused fields
|
* 5/21/2013 1707 bphillip Removed unused fields
|
||||||
* 6/4/2013 1707 bphillip Renamed and changed fields for clarity
|
* 6/4/2013 1707 bphillip Renamed and changed fields for clarity
|
||||||
|
* 10/30/2013 1538 bphillip getRegistryReplicationServers returns empty list if no servers are specified
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author bphillip
|
* @author bphillip
|
||||||
|
@ -55,6 +57,9 @@ public class NotificationServers {
|
||||||
private List<NotificationHostConfiguration> registryReplicationServers;
|
private List<NotificationHostConfiguration> registryReplicationServers;
|
||||||
|
|
||||||
public List<NotificationHostConfiguration> getRegistryReplicationServers() {
|
public List<NotificationHostConfiguration> getRegistryReplicationServers() {
|
||||||
|
if (registryReplicationServers == null) {
|
||||||
|
registryReplicationServers = new ArrayList<NotificationHostConfiguration>();
|
||||||
|
}
|
||||||
return registryReplicationServers;
|
return registryReplicationServers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,7 @@ import java.io.File;
|
||||||
import java.net.MalformedURLException;
|
import java.net.MalformedURLException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -41,7 +42,6 @@ import javax.xml.transform.dom.DOMSource;
|
||||||
import javax.xml.ws.wsaddressing.W3CEndpointReference;
|
import javax.xml.ws.wsaddressing.W3CEndpointReference;
|
||||||
import javax.xml.ws.wsaddressing.W3CEndpointReferenceBuilder;
|
import javax.xml.ws.wsaddressing.W3CEndpointReferenceBuilder;
|
||||||
|
|
||||||
import oasis.names.tc.ebxml.regrep.wsdl.registry.services.v4.MsgRegistryException;
|
|
||||||
import oasis.names.tc.ebxml.regrep.xsd.lcm.v4.Mode;
|
import oasis.names.tc.ebxml.regrep.xsd.lcm.v4.Mode;
|
||||||
import oasis.names.tc.ebxml.regrep.xsd.lcm.v4.SubmitObjectsRequest;
|
import oasis.names.tc.ebxml.regrep.xsd.lcm.v4.SubmitObjectsRequest;
|
||||||
import oasis.names.tc.ebxml.regrep.xsd.rim.v4.DeliveryInfoType;
|
import oasis.names.tc.ebxml.regrep.xsd.rim.v4.DeliveryInfoType;
|
||||||
|
@ -60,7 +60,13 @@ import org.w3c.dom.Document;
|
||||||
import org.w3c.dom.Node;
|
import org.w3c.dom.Node;
|
||||||
import org.w3c.dom.NodeList;
|
import org.w3c.dom.NodeList;
|
||||||
|
|
||||||
|
import com.raytheon.uf.common.localization.IPathManager;
|
||||||
|
import com.raytheon.uf.common.localization.LocalizationContext;
|
||||||
|
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationLevel;
|
||||||
|
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationType;
|
||||||
|
import com.raytheon.uf.common.localization.LocalizationFile;
|
||||||
import com.raytheon.uf.common.localization.PathManagerFactory;
|
import com.raytheon.uf.common.localization.PathManagerFactory;
|
||||||
|
import com.raytheon.uf.common.localization.exception.LocalizationOpFailedException;
|
||||||
import com.raytheon.uf.common.registry.EbxmlNamespaces;
|
import com.raytheon.uf.common.registry.EbxmlNamespaces;
|
||||||
import com.raytheon.uf.common.registry.RegistryException;
|
import com.raytheon.uf.common.registry.RegistryException;
|
||||||
import com.raytheon.uf.common.registry.constants.CanonicalQueryTypes;
|
import com.raytheon.uf.common.registry.constants.CanonicalQueryTypes;
|
||||||
|
@ -70,15 +76,16 @@ import com.raytheon.uf.common.registry.constants.QueryLanguages;
|
||||||
import com.raytheon.uf.common.registry.constants.RegistryObjectTypes;
|
import com.raytheon.uf.common.registry.constants.RegistryObjectTypes;
|
||||||
import com.raytheon.uf.common.registry.constants.StatusTypes;
|
import com.raytheon.uf.common.registry.constants.StatusTypes;
|
||||||
import com.raytheon.uf.common.registry.ebxml.RegistryUtil;
|
import com.raytheon.uf.common.registry.ebxml.RegistryUtil;
|
||||||
import com.raytheon.uf.common.registry.services.RegistryRESTServices;
|
|
||||||
import com.raytheon.uf.common.registry.services.RegistrySOAPServices;
|
import com.raytheon.uf.common.registry.services.RegistrySOAPServices;
|
||||||
import com.raytheon.uf.common.serialization.JAXBManager;
|
import com.raytheon.uf.common.serialization.JAXBManager;
|
||||||
import com.raytheon.uf.common.serialization.SerializationException;
|
import com.raytheon.uf.common.serialization.SerializationException;
|
||||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||||
import com.raytheon.uf.common.status.UFStatus;
|
import com.raytheon.uf.common.status.UFStatus;
|
||||||
|
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||||
import com.raytheon.uf.common.time.util.TimeUtil;
|
import com.raytheon.uf.common.time.util.TimeUtil;
|
||||||
import com.raytheon.uf.common.util.CollectionUtil;
|
import com.raytheon.uf.common.util.CollectionUtil;
|
||||||
import com.raytheon.uf.edex.datadelivery.registry.availability.FederatedRegistryMonitor;
|
import com.raytheon.uf.edex.datadelivery.registry.availability.FederatedRegistryMonitor;
|
||||||
|
import com.raytheon.uf.edex.datadelivery.registry.web.DataDeliveryRESTServices;
|
||||||
import com.raytheon.uf.edex.registry.ebxml.dao.RegistryObjectDao;
|
import com.raytheon.uf.edex.registry.ebxml.dao.RegistryObjectDao;
|
||||||
import com.raytheon.uf.edex.registry.ebxml.exception.EbxmlRegistryException;
|
import com.raytheon.uf.edex.registry.ebxml.exception.EbxmlRegistryException;
|
||||||
import com.raytheon.uf.edex.registry.ebxml.exception.NoReplicationServersAvailableException;
|
import com.raytheon.uf.edex.registry.ebxml.exception.NoReplicationServersAvailableException;
|
||||||
|
@ -101,6 +108,7 @@ import com.raytheon.uf.edex.registry.ebxml.util.EbxmlObjectUtil;
|
||||||
* 8/1/2013 1693 bphillip Switch to use rest service instead of query manager for federation synchronization
|
* 8/1/2013 1693 bphillip Switch to use rest service instead of query manager for federation synchronization
|
||||||
* 9/5/2013 1538 bphillip Changed when the registry availability monitor is started
|
* 9/5/2013 1538 bphillip Changed when the registry availability monitor is started
|
||||||
* 10/20/2013 1682 bphillip Fixed query invocation
|
* 10/20/2013 1682 bphillip Fixed query invocation
|
||||||
|
* 10/30/2013 1538 bphillip Changed method visibility, added add/remove/save notification servers and updated to use non-static rest/soap clients
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author bphillip
|
* @author bphillip
|
||||||
|
@ -147,12 +155,19 @@ public class RegistryReplicationManager {
|
||||||
/**
|
/**
|
||||||
* When a federation sync is necessary, this is the number of threads that
|
* When a federation sync is necessary, this is the number of threads that
|
||||||
* will be used for synchronization. Configurable in the
|
* will be used for synchronization. Configurable in the
|
||||||
* com.raytheon.uf.edex.registry.ebxml.properties file. Default is 25
|
* com.raytheon.uf.edex.registry.ebxml.properties file. Default is 5
|
||||||
*/
|
*/
|
||||||
private int registrySyncThreads = 5;
|
private int registrySyncThreads = 5;
|
||||||
|
|
||||||
|
/** Maximum times this registry will try to sync data before failure */
|
||||||
private int maxSyncRetries = 3;
|
private int maxSyncRetries = 3;
|
||||||
|
|
||||||
|
/** Data Delivery REST services client */
|
||||||
|
private DataDeliveryRESTServices dataDeliveryRestClient;
|
||||||
|
|
||||||
|
/** REgistry Soap client */
|
||||||
|
private RegistrySOAPServices registrySoapClient;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new RegistryReplicationManager
|
* Creates a new RegistryReplicationManager
|
||||||
*
|
*
|
||||||
|
@ -166,16 +181,23 @@ public class RegistryReplicationManager {
|
||||||
* @throws MalformedURLException
|
* @throws MalformedURLException
|
||||||
*/
|
*/
|
||||||
public RegistryReplicationManager(boolean subscriptionProcessingEnabled,
|
public RegistryReplicationManager(boolean subscriptionProcessingEnabled,
|
||||||
String notificationServerConfigFileName, RegistryObjectDao dao,
|
RegistryObjectDao dao,
|
||||||
FederatedRegistryMonitor availabilityMonitor,
|
FederatedRegistryMonitor availabilityMonitor,
|
||||||
TransactionTemplate txTemplate, int registrySyncThreads)
|
TransactionTemplate txTemplate) throws JAXBException,
|
||||||
throws JAXBException, SerializationException, MalformedURLException {
|
SerializationException, MalformedURLException {
|
||||||
this.subscriptionProcessingEnabled = subscriptionProcessingEnabled;
|
this.subscriptionProcessingEnabled = subscriptionProcessingEnabled;
|
||||||
this.replicationConfigFileName = notificationServerConfigFileName;
|
if (System.getProperty("edex.run.mode").equals("centralRegistry")) {
|
||||||
|
this.replicationConfigFileName = "ebxml/notification/notificationServers_NCF.xml";
|
||||||
|
} else {
|
||||||
|
this.replicationConfigFileName = "ebxml/notification/notificationServers_WFO.xml";
|
||||||
|
}
|
||||||
this.dao = dao;
|
this.dao = dao;
|
||||||
this.txTemplate = txTemplate;
|
this.txTemplate = txTemplate;
|
||||||
this.federatedRegistryMonitor = availabilityMonitor;
|
this.federatedRegistryMonitor = availabilityMonitor;
|
||||||
this.registrySyncThreads = registrySyncThreads;
|
if (System.getProperty("ebxml-federation-sync-threads") != null) {
|
||||||
|
registrySyncThreads = Integer.valueOf(System
|
||||||
|
.getProperty("ebxml-federation-sync-threads"));
|
||||||
|
}
|
||||||
jaxbManager = new JAXBManager(NotificationServers.class,
|
jaxbManager = new JAXBManager(NotificationServers.class,
|
||||||
SubscriptionType.class);
|
SubscriptionType.class);
|
||||||
File notificationServerConfigFile = PathManagerFactory.getPathManager()
|
File notificationServerConfigFile = PathManagerFactory.getPathManager()
|
||||||
|
@ -187,11 +209,68 @@ public class RegistryReplicationManager {
|
||||||
this.subscriptionProcessingEnabled = false;
|
this.subscriptionProcessingEnabled = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
servers = (NotificationServers) jaxbManager
|
servers = jaxbManager.unmarshalFromXmlFile(NotificationServers.class,
|
||||||
.unmarshalFromXmlFile(notificationServerConfigFile);
|
notificationServerConfigFile);
|
||||||
scheduler = Executors.newSingleThreadScheduledExecutor();
|
scheduler = Executors.newSingleThreadScheduledExecutor();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes a notificationServer based on the URL.
|
||||||
|
*
|
||||||
|
* @param baseURL
|
||||||
|
* The URL of the server to be removed
|
||||||
|
*/
|
||||||
|
public void removeNotificationServer(String baseURL) {
|
||||||
|
NotificationHostConfiguration toRemove = null;
|
||||||
|
for (NotificationHostConfiguration hostConfig : this.servers
|
||||||
|
.getRegistryReplicationServers()) {
|
||||||
|
if (hostConfig.getRegistryBaseURL().equals(baseURL)) {
|
||||||
|
toRemove = hostConfig;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (toRemove != null) {
|
||||||
|
this.servers.getRegistryReplicationServers().remove(toRemove);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a notification server to the list.
|
||||||
|
*
|
||||||
|
* @param host
|
||||||
|
* The host to be added
|
||||||
|
*/
|
||||||
|
public void addNotificationServer(NotificationHostConfiguration host) {
|
||||||
|
for (NotificationHostConfiguration hostConfig : this.servers
|
||||||
|
.getRegistryReplicationServers()) {
|
||||||
|
if (hostConfig.getRegistryBaseURL().equals(
|
||||||
|
host.getRegistryBaseURL())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.servers.getRegistryReplicationServers().add(host);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Persists the list of notification servers to the localized file
|
||||||
|
*/
|
||||||
|
public void saveNotificationServers() {
|
||||||
|
IPathManager pm = PathManagerFactory.getPathManager();
|
||||||
|
LocalizationContext lc = pm.getContext(LocalizationType.EDEX_STATIC,
|
||||||
|
LocalizationLevel.CONFIGURED);
|
||||||
|
LocalizationFile lf = pm.getLocalizationFile(lc,
|
||||||
|
this.replicationConfigFileName);
|
||||||
|
File file = lf.getFile();
|
||||||
|
|
||||||
|
try {
|
||||||
|
jaxbManager.marshalToXmlFile(this.servers, file.getAbsolutePath());
|
||||||
|
lf.save();
|
||||||
|
} catch (SerializationException e) {
|
||||||
|
statusHandler.error("Unable to update replication server file!", e);
|
||||||
|
} catch (LocalizationOpFailedException e) {
|
||||||
|
statusHandler.handle(Priority.ERROR, e.getLocalizedMessage(), e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks how long a registry has been down. If the registry has been down
|
* Checks how long a registry has been down. If the registry has been down
|
||||||
* for over 2 days, the registry is synchronized with one of the federation
|
* for over 2 days, the registry is synchronized with one of the federation
|
||||||
|
@ -234,8 +313,9 @@ public class RegistryReplicationManager {
|
||||||
statusHandler
|
statusHandler
|
||||||
.info("Checking availability of registry at: "
|
.info("Checking availability of registry at: "
|
||||||
+ config.getRegistryBaseURL());
|
+ config.getRegistryBaseURL());
|
||||||
if (RegistryRESTServices.isRegistryAvailable(config
|
if (dataDeliveryRestClient
|
||||||
.getRegistryBaseURL())) {
|
.isRegistryAvailable(config
|
||||||
|
.getRegistryBaseURL())) {
|
||||||
registryToSyncFrom = config;
|
registryToSyncFrom = config;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -281,8 +361,16 @@ public class RegistryReplicationManager {
|
||||||
TimeUnit.MINUTES);
|
TimeUnit.MINUTES);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void synchronizeRegistryWithFederation(String remoteRegistryUrl)
|
/**
|
||||||
throws MsgRegistryException, EbxmlRegistryException {
|
* Synchronizes this registry's data with the registry at the specified URL
|
||||||
|
*
|
||||||
|
* @param remoteRegistryUrl
|
||||||
|
* The URL of the registry to sync with
|
||||||
|
* @throws EbxmlRegistryException
|
||||||
|
* If the thread executor fails to shut down properly
|
||||||
|
*/
|
||||||
|
public void synchronizeRegistryWithFederation(String remoteRegistryUrl)
|
||||||
|
throws EbxmlRegistryException {
|
||||||
ExecutorService executor = Executors
|
ExecutorService executor = Executors
|
||||||
.newFixedThreadPool(this.registrySyncThreads);
|
.newFixedThreadPool(this.registrySyncThreads);
|
||||||
for (String objectType : objectTypes) {
|
for (String objectType : objectTypes) {
|
||||||
|
@ -290,7 +378,7 @@ public class RegistryReplicationManager {
|
||||||
Set<String> remoteIds = new HashSet<String>();
|
Set<String> remoteIds = new HashSet<String>();
|
||||||
statusHandler
|
statusHandler
|
||||||
.info("Getting registry object Ids from local registry...");
|
.info("Getting registry object Ids from local registry...");
|
||||||
Collection<String> response = RegistryRESTServices
|
Collection<String> response = dataDeliveryRestClient
|
||||||
.getRegistryDataAccessService(
|
.getRegistryDataAccessService(
|
||||||
RegistryUtil.LOCAL_REGISTRY_ADDRESS)
|
RegistryUtil.LOCAL_REGISTRY_ADDRESS)
|
||||||
.getRegistryObjectIdsOfType(objectType).getPayload();
|
.getRegistryObjectIdsOfType(objectType).getPayload();
|
||||||
|
@ -301,7 +389,7 @@ public class RegistryReplicationManager {
|
||||||
+ objectType + " present in local registry.");
|
+ objectType + " present in local registry.");
|
||||||
statusHandler.info("Getting registry object Ids from "
|
statusHandler.info("Getting registry object Ids from "
|
||||||
+ remoteRegistryUrl + "...");
|
+ remoteRegistryUrl + "...");
|
||||||
response = RegistryRESTServices
|
response = dataDeliveryRestClient
|
||||||
.getRegistryDataAccessService(remoteRegistryUrl)
|
.getRegistryDataAccessService(remoteRegistryUrl)
|
||||||
.getRegistryObjectIdsOfType(objectType).getPayload();
|
.getRegistryObjectIdsOfType(objectType).getPayload();
|
||||||
if (response != null) {
|
if (response != null) {
|
||||||
|
@ -321,7 +409,7 @@ public class RegistryReplicationManager {
|
||||||
for (String localId : localIds) {
|
for (String localId : localIds) {
|
||||||
if (remoteIds.contains(localId)) {
|
if (remoteIds.contains(localId)) {
|
||||||
executor.submit(new RegistrySubmitTask(txTemplate, dao,
|
executor.submit(new RegistrySubmitTask(txTemplate, dao,
|
||||||
localId, remoteRegistryUrl));
|
localId, remoteRegistryUrl, dataDeliveryRestClient));
|
||||||
} else {
|
} else {
|
||||||
RegistryRemoveTask removeTask = new RegistryRemoveTask(
|
RegistryRemoveTask removeTask = new RegistryRemoveTask(
|
||||||
txTemplate, dao, localId);
|
txTemplate, dao, localId);
|
||||||
|
@ -337,7 +425,7 @@ public class RegistryReplicationManager {
|
||||||
for (String remoteId : remoteIds) {
|
for (String remoteId : remoteIds) {
|
||||||
if (!localIds.contains(remoteId)) {
|
if (!localIds.contains(remoteId)) {
|
||||||
executor.submit(new RegistrySubmitTask(txTemplate, dao,
|
executor.submit(new RegistrySubmitTask(txTemplate, dao,
|
||||||
remoteId, remoteRegistryUrl));
|
remoteId, remoteRegistryUrl, dataDeliveryRestClient));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -438,8 +526,8 @@ public class RegistryReplicationManager {
|
||||||
* The object describing the destination server to make registry
|
* The object describing the destination server to make registry
|
||||||
* replication subscriptions to
|
* replication subscriptions to
|
||||||
*/
|
*/
|
||||||
private void submitSubscriptionsToHost(
|
public void submitSubscriptionsToHost(NotificationHostConfiguration config,
|
||||||
NotificationHostConfiguration config, RegistryType localRegistry) {
|
RegistryType localRegistry) {
|
||||||
statusHandler
|
statusHandler
|
||||||
.info("Generating registry replication subscriptions for registry at ["
|
.info("Generating registry replication subscriptions for registry at ["
|
||||||
+ config.getRegistrySiteName()
|
+ config.getRegistrySiteName()
|
||||||
|
@ -462,7 +550,7 @@ public class RegistryReplicationManager {
|
||||||
"Subscription Submission", "Subscription Submission", null,
|
"Subscription Submission", "Subscription Submission", null,
|
||||||
new RegistryObjectListType(subscriptions), false,
|
new RegistryObjectListType(subscriptions), false,
|
||||||
Mode.CREATE_OR_REPLACE);
|
Mode.CREATE_OR_REPLACE);
|
||||||
RegistrySOAPServices.sendSubmitObjectsRequest(request,
|
registrySoapClient.sendSubmitObjectsRequest(request,
|
||||||
config.getRegistryBaseURL());
|
config.getRegistryBaseURL());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -526,7 +614,7 @@ public class RegistryReplicationManager {
|
||||||
|
|
||||||
String endpointType = DeliveryMethodTypes.SOAP;
|
String endpointType = DeliveryMethodTypes.SOAP;
|
||||||
W3CEndpointReferenceBuilder builder = new W3CEndpointReferenceBuilder();
|
W3CEndpointReferenceBuilder builder = new W3CEndpointReferenceBuilder();
|
||||||
builder.address(RegistrySOAPServices.getNotificationListenerServiceUrl(
|
builder.address(registrySoapClient.getNotificationListenerServiceUrl(
|
||||||
registry.getBaseURL()).toString());
|
registry.getBaseURL()).toString());
|
||||||
W3CEndpointReference ref = builder.build();
|
W3CEndpointReference ref = builder.build();
|
||||||
DOMResult dom = new DOMResult();
|
DOMResult dom = new DOMResult();
|
||||||
|
@ -603,7 +691,7 @@ public class RegistryReplicationManager {
|
||||||
statusHandler.info("Checking if remote registry at ["
|
statusHandler.info("Checking if remote registry at ["
|
||||||
+ remoteRegistryBaseURL + "] is available...");
|
+ remoteRegistryBaseURL + "] is available...");
|
||||||
|
|
||||||
if (RegistryRESTServices
|
if (dataDeliveryRestClient
|
||||||
.isRegistryAvailable(remoteRegistryBaseURL)) {
|
.isRegistryAvailable(remoteRegistryBaseURL)) {
|
||||||
statusHandler.info("Registry at [" + remoteRegistryBaseURL
|
statusHandler.info("Registry at [" + remoteRegistryBaseURL
|
||||||
+ "] is available!");
|
+ "] is available!");
|
||||||
|
@ -616,7 +704,7 @@ public class RegistryReplicationManager {
|
||||||
try {
|
try {
|
||||||
statusHandler
|
statusHandler
|
||||||
.info("Removing remote subscriptions prior to submission of new subscriptions");
|
.info("Removing remote subscriptions prior to submission of new subscriptions");
|
||||||
RegistryRESTServices.getRegistryDataAccessService(
|
dataDeliveryRestClient.getRegistryDataAccessService(
|
||||||
config.getRegistryBaseURL())
|
config.getRegistryBaseURL())
|
||||||
.removeSubscriptionsForSite(registry.getOwner());
|
.removeSubscriptionsForSite(registry.getOwner());
|
||||||
submitSubscriptionsToHost(config, registry);
|
submitSubscriptionsToHost(config, registry);
|
||||||
|
@ -630,8 +718,9 @@ public class RegistryReplicationManager {
|
||||||
statusHandler
|
statusHandler
|
||||||
.info("Registry shutting down. Removing subscriptions from: ["
|
.info("Registry shutting down. Removing subscriptions from: ["
|
||||||
+ remoteRegistryBaseURL + "]");
|
+ remoteRegistryBaseURL + "]");
|
||||||
RegistryRESTServices.getRegistryDataAccessService(
|
dataDeliveryRestClient
|
||||||
remoteRegistryBaseURL)
|
.getRegistryDataAccessService(
|
||||||
|
remoteRegistryBaseURL)
|
||||||
.removeSubscriptionsForSite(
|
.removeSubscriptionsForSite(
|
||||||
registry.getOwner());
|
registry.getOwner());
|
||||||
statusHandler.info("Subscriptions removed from: ["
|
statusHandler.info("Subscriptions removed from: ["
|
||||||
|
@ -647,7 +736,10 @@ public class RegistryReplicationManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<String> getObjectTypes() {
|
||||||
|
return Collections.unmodifiableList(objectTypes);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSubscriptionProcessingEnabled(
|
public void setSubscriptionProcessingEnabled(
|
||||||
|
@ -659,4 +751,13 @@ public class RegistryReplicationManager {
|
||||||
return servers;
|
return servers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setDataDeliveryRestClient(
|
||||||
|
DataDeliveryRESTServices dataDeliveryRestClient) {
|
||||||
|
this.dataDeliveryRestClient = dataDeliveryRestClient;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRegistrySoapClient(RegistrySOAPServices registrySoapClient) {
|
||||||
|
this.registrySoapClient = registrySoapClient;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,10 +23,10 @@ import oasis.names.tc.ebxml.regrep.xsd.rim.v4.RegistryObjectType;
|
||||||
|
|
||||||
import org.springframework.transaction.support.TransactionTemplate;
|
import org.springframework.transaction.support.TransactionTemplate;
|
||||||
|
|
||||||
import com.raytheon.uf.common.registry.services.RegistryRESTServices;
|
|
||||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||||
import com.raytheon.uf.common.status.UFStatus;
|
import com.raytheon.uf.common.status.UFStatus;
|
||||||
import com.raytheon.uf.edex.database.RunnableWithTransaction;
|
import com.raytheon.uf.edex.database.RunnableWithTransaction;
|
||||||
|
import com.raytheon.uf.edex.datadelivery.registry.web.DataDeliveryRESTServices;
|
||||||
import com.raytheon.uf.edex.registry.ebxml.dao.RegistryObjectDao;
|
import com.raytheon.uf.edex.registry.ebxml.dao.RegistryObjectDao;
|
||||||
import com.raytheon.uf.edex.registry.ebxml.util.EbxmlObjectUtil;
|
import com.raytheon.uf.edex.registry.ebxml.util.EbxmlObjectUtil;
|
||||||
|
|
||||||
|
@ -41,6 +41,7 @@ import com.raytheon.uf.edex.registry.ebxml.util.EbxmlObjectUtil;
|
||||||
* Date Ticket# Engineer Description
|
* Date Ticket# Engineer Description
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* 7/29/2013 2191 bphillip Initial implementation
|
* 7/29/2013 2191 bphillip Initial implementation
|
||||||
|
* 10/30/2013 1538 bphillip Updated to use non-static rest client
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author bphillip
|
* @author bphillip
|
||||||
|
@ -60,21 +61,25 @@ public class RegistrySubmitTask extends RunnableWithTransaction {
|
||||||
/** The URL of the remote server to get the object from */
|
/** The URL of the remote server to get the object from */
|
||||||
private String remoteURL;
|
private String remoteURL;
|
||||||
|
|
||||||
|
private DataDeliveryRESTServices restClient;
|
||||||
|
|
||||||
public RegistrySubmitTask(TransactionTemplate txTemplate,
|
public RegistrySubmitTask(TransactionTemplate txTemplate,
|
||||||
RegistryObjectDao dao, String objectId, String remoteURL) {
|
RegistryObjectDao dao, String objectId, String remoteURL,
|
||||||
|
DataDeliveryRESTServices restClient) {
|
||||||
super(txTemplate);
|
super(txTemplate);
|
||||||
this.dao = dao;
|
this.dao = dao;
|
||||||
this.objectId = objectId;
|
this.objectId = objectId;
|
||||||
this.remoteURL = remoteURL;
|
this.remoteURL = remoteURL;
|
||||||
|
this.restClient = restClient;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void runWithTransaction() {
|
public void runWithTransaction() {
|
||||||
try {
|
try {
|
||||||
RegistryObjectType objectToSubmit = RegistryRESTServices
|
RegistryObjectType objectToSubmit = restClient.getRegistryObject(
|
||||||
.getRegistryObject(RegistryObjectType.class, remoteURL,
|
RegistryObjectType.class, remoteURL,
|
||||||
escapeObjectId(objectId));
|
escapeObjectId(objectId));
|
||||||
|
|
||||||
if (objectToSubmit.getSlotByName(EbxmlObjectUtil.HOME_SLOT_NAME) == null) {
|
if (objectToSubmit.getSlotByName(EbxmlObjectUtil.HOME_SLOT_NAME) == null) {
|
||||||
objectToSubmit.addSlot(EbxmlObjectUtil.HOME_SLOT_NAME,
|
objectToSubmit.addSlot(EbxmlObjectUtil.HOME_SLOT_NAME,
|
||||||
|
|
|
@ -0,0 +1,152 @@
|
||||||
|
/**
|
||||||
|
* This software was developed and / or modified by Raytheon Company,
|
||||||
|
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||||
|
*
|
||||||
|
* U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||||
|
* This software product contains export-restricted data whose
|
||||||
|
* export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||||
|
* to non-U.S. persons whether in the United States or abroad requires
|
||||||
|
* an export license or other authorization.
|
||||||
|
*
|
||||||
|
* Contractor Name: Raytheon Company
|
||||||
|
* Contractor Address: 6825 Pine Street, Suite 340
|
||||||
|
* Mail Stop B8
|
||||||
|
* Omaha, NE 68106
|
||||||
|
* 402.291.0100
|
||||||
|
*
|
||||||
|
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||||
|
* further licensing information.
|
||||||
|
**/
|
||||||
|
package com.raytheon.uf.edex.datadelivery.registry.web;
|
||||||
|
|
||||||
|
import java.util.concurrent.ExecutionException;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import javax.xml.bind.JAXBException;
|
||||||
|
|
||||||
|
import org.apache.commons.lang.exception.ExceptionUtils;
|
||||||
|
|
||||||
|
import com.google.common.cache.CacheBuilder;
|
||||||
|
import com.google.common.cache.CacheLoader;
|
||||||
|
import com.google.common.cache.LoadingCache;
|
||||||
|
import com.raytheon.uf.common.datadelivery.registry.web.IRegistryAvailableRestService;
|
||||||
|
import com.raytheon.uf.common.datadelivery.registry.web.IRegistryDataAccessService;
|
||||||
|
import com.raytheon.uf.common.registry.constants.RegistryAvailability;
|
||||||
|
import com.raytheon.uf.common.registry.services.RegistryRESTServices;
|
||||||
|
import com.raytheon.uf.common.registry.services.RegistryServiceException;
|
||||||
|
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||||
|
import com.raytheon.uf.common.status.UFStatus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
* Set of Data Delivery specific REST services
|
||||||
|
*
|
||||||
|
* SOFTWARE HISTORY
|
||||||
|
*
|
||||||
|
* Date Ticket# Engineer Description
|
||||||
|
* ------------ ---------- ----------- --------------------------
|
||||||
|
* 10/30/2013 1538 bphillip Initial Creation
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @author bphillip
|
||||||
|
* @version 1
|
||||||
|
**/
|
||||||
|
public class DataDeliveryRESTServices extends RegistryRESTServices {
|
||||||
|
|
||||||
|
/** Path to these services */
|
||||||
|
private static final String DATA_DELIVERY_REST_SERVICE_PATH = "/dataDelivery";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The logger
|
||||||
|
*/
|
||||||
|
private static final IUFStatusHandler statusHandler = UFStatus
|
||||||
|
.getHandler(RegistryRESTServices.class);
|
||||||
|
|
||||||
|
/** Map of known registry availability services */
|
||||||
|
private LoadingCache<String, IRegistryAvailableRestService> registryAvailabilityServiceMap = CacheBuilder
|
||||||
|
.newBuilder().expireAfterAccess(5, TimeUnit.MINUTES)
|
||||||
|
.build(new CacheLoader<String, IRegistryAvailableRestService>() {
|
||||||
|
public IRegistryAvailableRestService load(String url) {
|
||||||
|
return getPort(url + DATA_DELIVERY_REST_SERVICE_PATH,
|
||||||
|
IRegistryAvailableRestService.class);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/** Map of known registry data access services */
|
||||||
|
private LoadingCache<String, IRegistryDataAccessService> registryDataAccessServiceMap = CacheBuilder
|
||||||
|
.newBuilder().expireAfterAccess(5, TimeUnit.MINUTES)
|
||||||
|
.build(new CacheLoader<String, IRegistryDataAccessService>() {
|
||||||
|
public IRegistryDataAccessService load(String url) {
|
||||||
|
return getPort(url + DATA_DELIVERY_REST_SERVICE_PATH,
|
||||||
|
IRegistryDataAccessService.class);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
public DataDeliveryRESTServices() throws JAXBException {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the registry available service implementation
|
||||||
|
*
|
||||||
|
* @param baseURL
|
||||||
|
* The base URL of the registry
|
||||||
|
* @return THe registry available service implementation
|
||||||
|
*/
|
||||||
|
public IRegistryAvailableRestService getRegistryAvailableService(
|
||||||
|
String baseURL) {
|
||||||
|
try {
|
||||||
|
return registryAvailabilityServiceMap.get(baseURL);
|
||||||
|
} catch (ExecutionException e) {
|
||||||
|
throw new RegistryServiceException(
|
||||||
|
"Error getting Registry Availability Rest Service", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the registry at the given URL is available
|
||||||
|
*
|
||||||
|
* @param baseURL
|
||||||
|
* The base URL of the registry
|
||||||
|
* @return True if the registry services are available
|
||||||
|
*/
|
||||||
|
public boolean isRegistryAvailable(String baseURL) {
|
||||||
|
String response = null;
|
||||||
|
try {
|
||||||
|
response = getRegistryAvailableService(baseURL)
|
||||||
|
.isRegistryAvailable();
|
||||||
|
if (RegistryAvailability.AVAILABLE.equals(response)) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
statusHandler.info("Registry at [" + baseURL
|
||||||
|
+ "] not available: " + response);
|
||||||
|
}
|
||||||
|
return RegistryAvailability.AVAILABLE.equals(response);
|
||||||
|
} catch (Throwable t) {
|
||||||
|
if (response == null) {
|
||||||
|
response = ExceptionUtils.getRootCauseMessage(t);
|
||||||
|
}
|
||||||
|
statusHandler.error("Registry at [" + baseURL + "] not available: "
|
||||||
|
+ response);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the data access service for the specified registry URL
|
||||||
|
*
|
||||||
|
* @param baseURL
|
||||||
|
* The baseURL of the registry
|
||||||
|
* @return The data access service for the specified registry URL
|
||||||
|
*/
|
||||||
|
public IRegistryDataAccessService getRegistryDataAccessService(
|
||||||
|
String baseURL) {
|
||||||
|
try {
|
||||||
|
return registryDataAccessServiceMap.get(baseURL);
|
||||||
|
} catch (ExecutionException e) {
|
||||||
|
throw new RegistryServiceException(
|
||||||
|
"Error getting Registry Availability Rest Service", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -17,7 +17,7 @@
|
||||||
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||||
* further licensing information.
|
* further licensing information.
|
||||||
**/
|
**/
|
||||||
package com.raytheon.uf.edex.registry.ebxml.services.rest;
|
package com.raytheon.uf.edex.datadelivery.registry.web;
|
||||||
|
|
||||||
import javax.ws.rs.GET;
|
import javax.ws.rs.GET;
|
||||||
import javax.ws.rs.Path;
|
import javax.ws.rs.Path;
|
||||||
|
@ -26,8 +26,8 @@ import javax.ws.rs.Produces;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import com.raytheon.uf.common.datadelivery.registry.web.IRegistryAvailableRestService;
|
||||||
import com.raytheon.uf.common.registry.constants.RegistryAvailability;
|
import com.raytheon.uf.common.registry.constants.RegistryAvailability;
|
||||||
import com.raytheon.uf.common.registry.services.rest.IRegistryAvailableRestService;
|
|
||||||
import com.raytheon.uf.edex.registry.ebxml.dao.DbInit;
|
import com.raytheon.uf.edex.registry.ebxml.dao.DbInit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -42,12 +42,13 @@ import com.raytheon.uf.edex.registry.ebxml.dao.DbInit;
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* 5/21/2013 2022 bphillip Initial implementation
|
* 5/21/2013 2022 bphillip Initial implementation
|
||||||
* 9/5/2013 1538 bphillip Removed log message
|
* 9/5/2013 1538 bphillip Removed log message
|
||||||
|
* 10/30/2013 1538 bphillip Moved data delivery specific services out of registry plugin
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author bphillip
|
* @author bphillip
|
||||||
* @version 1
|
* @version 1
|
||||||
*/
|
*/
|
||||||
@Path("/rest/registryAvailable")
|
@Path(IRegistryAvailableRestService.REGISTRY_AVAILABILITY_PATH_PREFIX)
|
||||||
@Service
|
@Service
|
||||||
@Transactional
|
@Transactional
|
||||||
public class RegistryAvailableRestService implements
|
public class RegistryAvailableRestService implements
|
|
@ -17,7 +17,7 @@
|
||||||
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||||
* further licensing information.
|
* further licensing information.
|
||||||
**/
|
**/
|
||||||
package com.raytheon.uf.edex.registry.ebxml.services.rest;
|
package com.raytheon.uf.edex.datadelivery.registry.web;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -48,8 +48,8 @@ import org.reflections.util.ClasspathHelper;
|
||||||
import org.reflections.util.ConfigurationBuilder;
|
import org.reflections.util.ConfigurationBuilder;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import com.raytheon.uf.common.datadelivery.registry.web.IRegistryDataAccessService;
|
||||||
import com.raytheon.uf.common.registry.RegistryException;
|
import com.raytheon.uf.common.registry.RegistryException;
|
||||||
import com.raytheon.uf.common.registry.services.rest.IRegistryDataAccessService;
|
|
||||||
import com.raytheon.uf.common.registry.services.rest.response.RestCollectionResponse;
|
import com.raytheon.uf.common.registry.services.rest.response.RestCollectionResponse;
|
||||||
import com.raytheon.uf.common.serialization.JAXBManager;
|
import com.raytheon.uf.common.serialization.JAXBManager;
|
||||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||||
|
@ -63,8 +63,7 @@ import com.raytheon.uf.edex.registry.ebxml.dao.RegistryObjectDao;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Implementation of the registry data access service interface <br>
|
* Implementation of the registry data access service interface
|
||||||
* TODO: This class really needs to be moved to a data delivery specific plugin
|
|
||||||
*
|
*
|
||||||
* <pre>
|
* <pre>
|
||||||
*
|
*
|
||||||
|
@ -76,13 +75,13 @@ import com.raytheon.uf.edex.registry.ebxml.dao.RegistryObjectDao;
|
||||||
* 9/20/2013 2385 bphillip Added subscription backup functions
|
* 9/20/2013 2385 bphillip Added subscription backup functions
|
||||||
* 10/2/2013 2385 bphillip Fixed subscription backup queries
|
* 10/2/2013 2385 bphillip Fixed subscription backup queries
|
||||||
* 10/8/2013 1682 bphillip Added query queries
|
* 10/8/2013 1682 bphillip Added query queries
|
||||||
* 10/23/2013 2385 bphillip Restored subscriptions are now scheduled in the bandwidth manager
|
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author bphillip
|
* @author bphillip
|
||||||
* @version 1
|
* @version 1
|
||||||
*/
|
*/
|
||||||
@Transactional
|
@Transactional
|
||||||
|
@Path(IRegistryDataAccessService.DATA_ACCESS_PATH_PREFIX)
|
||||||
public class RegistryDataAccessService implements IRegistryDataAccessService {
|
public class RegistryDataAccessService implements IRegistryDataAccessService {
|
||||||
|
|
||||||
/** The logger */
|
/** The logger */
|
||||||
|
@ -113,6 +112,10 @@ public class RegistryDataAccessService implements IRegistryDataAccessService {
|
||||||
/** Lifecyclemanager */
|
/** Lifecyclemanager */
|
||||||
private LifecycleManager lcm;
|
private LifecycleManager lcm;
|
||||||
|
|
||||||
|
public RegistryDataAccessService() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see
|
* @see
|
||||||
* com.raytheon.uf.common.registry.services.rest.IRegistryDataAccessService
|
* com.raytheon.uf.common.registry.services.rest.IRegistryDataAccessService
|
||||||
|
@ -120,7 +123,7 @@ public class RegistryDataAccessService implements IRegistryDataAccessService {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@GET
|
@GET
|
||||||
@Path(DATA_ACCESS_PATH_PREFIX + "getRegistryObjectIds/{objectType}")
|
@Path("getRegistryObjectIds/{objectType}")
|
||||||
public RestCollectionResponse<String> getRegistryObjectIdsOfType(
|
public RestCollectionResponse<String> getRegistryObjectIdsOfType(
|
||||||
@PathParam("objectType") String objectType) {
|
@PathParam("objectType") String objectType) {
|
||||||
statusHandler.info("Getting registry object ids of type [" + objectType
|
statusHandler.info("Getting registry object ids of type [" + objectType
|
||||||
|
@ -133,7 +136,7 @@ public class RegistryDataAccessService implements IRegistryDataAccessService {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@GET
|
@GET
|
||||||
@Path(DATA_ACCESS_PATH_PREFIX + "getQueries")
|
@Path("getQueries")
|
||||||
public String getValidQueries() {
|
public String getValidQueries() {
|
||||||
statusHandler.debug("Getting valid queries...");
|
statusHandler.debug("Getting valid queries...");
|
||||||
List<String> ids = queryDefinitionDao.getQueryIds();
|
List<String> ids = queryDefinitionDao.getQueryIds();
|
||||||
|
@ -146,7 +149,7 @@ public class RegistryDataAccessService implements IRegistryDataAccessService {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@GET
|
@GET
|
||||||
@Path(DATA_ACCESS_PATH_PREFIX + "getParametersForQuery/{queryId}")
|
@Path("getParametersForQuery/{queryId}")
|
||||||
public String getParametersForQuery(@PathParam("queryId") String queryId) {
|
public String getParametersForQuery(@PathParam("queryId") String queryId) {
|
||||||
statusHandler.debug("Getting query parameters for query: " + queryId
|
statusHandler.debug("Getting query parameters for query: " + queryId
|
||||||
+ "...");
|
+ "...");
|
||||||
|
@ -168,7 +171,7 @@ public class RegistryDataAccessService implements IRegistryDataAccessService {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@GET
|
@GET
|
||||||
@Path(DATA_ACCESS_PATH_PREFIX + "removeSubscriptionsFor/{siteId}")
|
@Path("removeSubscriptionsFor/{siteId}")
|
||||||
public void removeSubscriptionsForSite(@PathParam("siteId") String siteId) {
|
public void removeSubscriptionsForSite(@PathParam("siteId") String siteId) {
|
||||||
statusHandler.info("Removing subscriptions for: " + siteId);
|
statusHandler.info("Removing subscriptions for: " + siteId);
|
||||||
List<SubscriptionType> subscriptions = registryObjectDao
|
List<SubscriptionType> subscriptions = registryObjectDao
|
||||||
|
@ -205,7 +208,7 @@ public class RegistryDataAccessService implements IRegistryDataAccessService {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@GET
|
@GET
|
||||||
@Path(DATA_ACCESS_PATH_PREFIX + "getSubscriptions")
|
@Path("getSubscriptions")
|
||||||
public String getSubscriptions() {
|
public String getSubscriptions() {
|
||||||
String[] slotNames = new String[] { "name", "owner", "dataSetName",
|
String[] slotNames = new String[] { "name", "owner", "dataSetName",
|
||||||
"provider", "dataSetType", "route", "active", "groupName",
|
"provider", "dataSetType", "route", "active", "groupName",
|
||||||
|
@ -245,7 +248,7 @@ public class RegistryDataAccessService implements IRegistryDataAccessService {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@GET
|
@GET
|
||||||
@Path(DATA_ACCESS_PATH_PREFIX + "backupSubscription/{subscriptionName}")
|
@Path("backupSubscription/{subscriptionName}")
|
||||||
public String backupSubscription(
|
public String backupSubscription(
|
||||||
@PathParam("subscriptionName") String subscriptionName) {
|
@PathParam("subscriptionName") String subscriptionName) {
|
||||||
StringBuilder response = new StringBuilder();
|
StringBuilder response = new StringBuilder();
|
||||||
|
@ -288,7 +291,7 @@ public class RegistryDataAccessService implements IRegistryDataAccessService {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@GET
|
@GET
|
||||||
@Path(DATA_ACCESS_PATH_PREFIX + "backupAllSubscriptions/")
|
@Path("backupAllSubscriptions/")
|
||||||
public String backupAllSubscriptions() {
|
public String backupAllSubscriptions() {
|
||||||
StringBuilder response = new StringBuilder();
|
StringBuilder response = new StringBuilder();
|
||||||
List<RegistryObjectType> subs = registryObjectDao
|
List<RegistryObjectType> subs = registryObjectDao
|
||||||
|
@ -310,7 +313,7 @@ public class RegistryDataAccessService implements IRegistryDataAccessService {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@GET
|
@GET
|
||||||
@Path(DATA_ACCESS_PATH_PREFIX + "restoreSubscription/{subscriptionName}")
|
@Path("restoreSubscription/{subscriptionName}")
|
||||||
public String restoreSubscription(
|
public String restoreSubscription(
|
||||||
@PathParam("subscriptionName") String subscriptionName) {
|
@PathParam("subscriptionName") String subscriptionName) {
|
||||||
StringBuilder response = new StringBuilder();
|
StringBuilder response = new StringBuilder();
|
||||||
|
@ -367,7 +370,7 @@ public class RegistryDataAccessService implements IRegistryDataAccessService {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@GET
|
@GET
|
||||||
@Path(DATA_ACCESS_PATH_PREFIX + "restoreSubscriptions/")
|
@Path("restoreSubscriptions/")
|
||||||
public String restoreSubscriptions() {
|
public String restoreSubscriptions() {
|
||||||
StringBuilder response = new StringBuilder();
|
StringBuilder response = new StringBuilder();
|
||||||
if (SUBSCRIPTION_BACKUP_DIR.exists()) {
|
if (SUBSCRIPTION_BACKUP_DIR.exists()) {
|
||||||
|
@ -391,7 +394,7 @@ public class RegistryDataAccessService implements IRegistryDataAccessService {
|
||||||
* .clearSubscriptionBackupFiles()
|
* .clearSubscriptionBackupFiles()
|
||||||
*/
|
*/
|
||||||
@GET
|
@GET
|
||||||
@Path(DATA_ACCESS_PATH_PREFIX + "clearSubscriptionBackupFiles/")
|
@Path("clearSubscriptionBackupFiles/")
|
||||||
public String clearSubscriptionBackupFiles() {
|
public String clearSubscriptionBackupFiles() {
|
||||||
StringBuilder response = new StringBuilder();
|
StringBuilder response = new StringBuilder();
|
||||||
if (SUBSCRIPTION_BACKUP_DIR.exists()) {
|
if (SUBSCRIPTION_BACKUP_DIR.exists()) {
|
|
@ -0,0 +1,446 @@
|
||||||
|
/**
|
||||||
|
* This software was developed and / or modified by Raytheon Company,
|
||||||
|
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||||
|
*
|
||||||
|
* U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||||
|
* This software product contains export-restricted data whose
|
||||||
|
* export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||||
|
* to non-U.S. persons whether in the United States or abroad requires
|
||||||
|
* an export license or other authorization.
|
||||||
|
*
|
||||||
|
* Contractor Name: Raytheon Company
|
||||||
|
* Contractor Address: 6825 Pine Street, Suite 340
|
||||||
|
* Mail Stop B8
|
||||||
|
* Omaha, NE 68106
|
||||||
|
* 402.291.0100
|
||||||
|
*
|
||||||
|
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||||
|
* further licensing information.
|
||||||
|
**/
|
||||||
|
package com.raytheon.uf.edex.datadelivery.registry.web;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.ws.rs.GET;
|
||||||
|
import javax.ws.rs.Path;
|
||||||
|
import javax.ws.rs.PathParam;
|
||||||
|
import javax.xml.transform.dom.DOMResult;
|
||||||
|
import javax.xml.ws.wsaddressing.W3CEndpointReference;
|
||||||
|
|
||||||
|
import oasis.names.tc.ebxml.regrep.wsdl.registry.services.v4.MsgRegistryException;
|
||||||
|
import oasis.names.tc.ebxml.regrep.xsd.query.v4.QueryRequest;
|
||||||
|
import oasis.names.tc.ebxml.regrep.xsd.query.v4.ResponseOptionType;
|
||||||
|
import oasis.names.tc.ebxml.regrep.xsd.rim.v4.DeliveryInfoType;
|
||||||
|
import oasis.names.tc.ebxml.regrep.xsd.rim.v4.QueryType;
|
||||||
|
import oasis.names.tc.ebxml.regrep.xsd.rim.v4.RegistryObjectType;
|
||||||
|
import oasis.names.tc.ebxml.regrep.xsd.rim.v4.RegistryType;
|
||||||
|
import oasis.names.tc.ebxml.regrep.xsd.rim.v4.SlotType;
|
||||||
|
import oasis.names.tc.ebxml.regrep.xsd.rim.v4.StringValueType;
|
||||||
|
import oasis.names.tc.ebxml.regrep.xsd.rim.v4.SubscriptionType;
|
||||||
|
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
import org.w3c.dom.Document;
|
||||||
|
import org.w3c.dom.Node;
|
||||||
|
import org.w3c.dom.NodeList;
|
||||||
|
|
||||||
|
import com.raytheon.uf.common.registry.EbxmlNamespaces;
|
||||||
|
import com.raytheon.uf.common.registry.constants.AssociationTypes;
|
||||||
|
import com.raytheon.uf.common.registry.constants.CanonicalQueryTypes;
|
||||||
|
import com.raytheon.uf.common.registry.constants.DeliveryMethodTypes;
|
||||||
|
import com.raytheon.uf.common.registry.constants.QueryLanguages;
|
||||||
|
import com.raytheon.uf.common.registry.constants.QueryReturnTypes;
|
||||||
|
import com.raytheon.uf.common.registry.ebxml.RegistryUtil;
|
||||||
|
import com.raytheon.uf.common.registry.services.RegistrySOAPServices;
|
||||||
|
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||||
|
import com.raytheon.uf.common.status.UFStatus;
|
||||||
|
import com.raytheon.uf.common.util.CollectionUtil;
|
||||||
|
import com.raytheon.uf.common.util.StringUtil;
|
||||||
|
import com.raytheon.uf.edex.datadelivery.registry.federation.RegistryFederationManager;
|
||||||
|
import com.raytheon.uf.edex.datadelivery.registry.replication.NotificationHostConfiguration;
|
||||||
|
import com.raytheon.uf.edex.datadelivery.registry.replication.RegistryReplicationManager;
|
||||||
|
import com.raytheon.uf.edex.registry.ebxml.dao.RegistryDao;
|
||||||
|
import com.raytheon.uf.edex.registry.ebxml.dao.SubscriptionDao;
|
||||||
|
import com.raytheon.uf.edex.registry.ebxml.services.notification.RegistrySubscriptionManager;
|
||||||
|
import com.raytheon.uf.edex.registry.ebxml.services.query.QueryConstants;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <pre>
|
||||||
|
* Set of services used by the federation status web interface to modify federation associations
|
||||||
|
*
|
||||||
|
* SOFTWARE HISTORY
|
||||||
|
*
|
||||||
|
* Date Ticket# Engineer Description
|
||||||
|
* ------------ ---------- ----------- --------------------------
|
||||||
|
* 10/30/2013 1538 bphillip Initial Creation
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @author bphillip
|
||||||
|
* @version 1
|
||||||
|
**/
|
||||||
|
@Path(RegistryFederationStatus.REGISTRY_FEDERATION_STATUS_PATH)
|
||||||
|
@Transactional
|
||||||
|
public class RegistryFederationStatus {
|
||||||
|
|
||||||
|
/** The path to these set of services */
|
||||||
|
protected static final String REGISTRY_FEDERATION_STATUS_PATH = "/status/";
|
||||||
|
|
||||||
|
/** The logger instance */
|
||||||
|
private static final IUFStatusHandler statusHandler = UFStatus
|
||||||
|
.getHandler(RegistryFederationStatus.class);
|
||||||
|
|
||||||
|
/** Comparator to sort registry instances */
|
||||||
|
private static final Comparator<RegistryObjectType> REGISTRY_COMPARATOR = new Comparator<RegistryObjectType>() {
|
||||||
|
@Override
|
||||||
|
public int compare(RegistryObjectType o1, RegistryObjectType o2) {
|
||||||
|
return o1.getId().compareTo(o2.getId());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Data Access object for registry objects */
|
||||||
|
private RegistryDao registryDao;
|
||||||
|
|
||||||
|
/** Data Access object for registry subscription objects */
|
||||||
|
private SubscriptionDao subscriptionDao;
|
||||||
|
|
||||||
|
/** The registry replication manager */
|
||||||
|
private RegistryReplicationManager replicationManager;
|
||||||
|
|
||||||
|
/** Data Delivery rest services client */
|
||||||
|
private DataDeliveryRESTServices dataDeliveryRestClient;
|
||||||
|
|
||||||
|
/** Registry soap services client */
|
||||||
|
private RegistrySOAPServices registrySoapServices;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The address to the NCF registry loaded from the NCF_ADDRESS item in
|
||||||
|
* setup.env
|
||||||
|
*/
|
||||||
|
private String ncfAddress = System.getenv("NCF_ADDRESS");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets if this registry is participating in the federation
|
||||||
|
*
|
||||||
|
* @return The value of the EBXML_REGISTRY_FEDERATION_ENABLED environment
|
||||||
|
* variable
|
||||||
|
*/
|
||||||
|
@GET
|
||||||
|
@Path("isFederated")
|
||||||
|
public String isFederated() {
|
||||||
|
return System.getenv("EBXML_REGISTRY_FEDERATION_ENABLED");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets if this registry is processing registry replication subscriptions
|
||||||
|
*
|
||||||
|
* @return The value of the EBXML_REGISTRY_SUBSCRIPTIONS_ENABLED environment
|
||||||
|
* variable
|
||||||
|
*/
|
||||||
|
@GET
|
||||||
|
@Path("isProcessingSubscriptions")
|
||||||
|
public String isProcessingSubscriptions() {
|
||||||
|
return System.getenv("EBXML_REGISTRY_SUBSCRIPTIONS_ENABLED");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets information about this registry
|
||||||
|
*
|
||||||
|
* @return Information pertaining to the local registry
|
||||||
|
*/
|
||||||
|
@GET
|
||||||
|
@Path("getMyRegistryInfo")
|
||||||
|
public String getMyRegistryInfo() {
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
RegistryType myRegistry = registryDao
|
||||||
|
.getRegistryByBaseURL(RegistryUtil.LOCAL_REGISTRY_ADDRESS);
|
||||||
|
appendRegistryInfo(myRegistry, builder);
|
||||||
|
return builder.toString();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Queries the NCF registry to get a list of registries in the federation
|
||||||
|
*
|
||||||
|
* @return The list of registries in the federation
|
||||||
|
* @throws MsgRegistryException
|
||||||
|
* If an error occurs while querying the NCF registry
|
||||||
|
*/
|
||||||
|
@GET
|
||||||
|
@Path("getFederationMembers")
|
||||||
|
public String getFederationMembers() throws MsgRegistryException {
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
QueryType query = new QueryType(
|
||||||
|
CanonicalQueryTypes.FIND_ASSOCIATED_OBJECTS);
|
||||||
|
query.getSlot().add(
|
||||||
|
new SlotType(QueryConstants.ASSOCIATION_TYPE,
|
||||||
|
new StringValueType(
|
||||||
|
AssociationTypes.HAS_FEDERATION_MEMBER)));
|
||||||
|
query.getSlot().add(
|
||||||
|
new SlotType(QueryConstants.SOURCE_OBJECT_ID,
|
||||||
|
new StringValueType(
|
||||||
|
RegistryFederationManager.FEDERATION_ID)));
|
||||||
|
|
||||||
|
QueryRequest queryRequest = new QueryRequest("Get Federation Members",
|
||||||
|
query, new ResponseOptionType(QueryReturnTypes.REGISTRY_OBJECT,
|
||||||
|
true));
|
||||||
|
List<RegistryObjectType> federationMembers = registrySoapServices
|
||||||
|
.getQueryServiceForHost(ncfAddress).executeQuery(queryRequest)
|
||||||
|
.getRegistryObjects();
|
||||||
|
Collections.sort(federationMembers, REGISTRY_COMPARATOR);
|
||||||
|
for (RegistryObjectType obj : federationMembers) {
|
||||||
|
if (obj instanceof RegistryType) {
|
||||||
|
RegistryType registry = (RegistryType) obj;
|
||||||
|
appendRegistryInfo(registry, builder);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return builder.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the list of registry that the local registry is subscribed to
|
||||||
|
*
|
||||||
|
* @return The list of registries that the local registry is subscribed to
|
||||||
|
*/
|
||||||
|
@GET
|
||||||
|
@Path("getRegistriesSubscribedTo")
|
||||||
|
public String getRegistriesSubscribedTo() {
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
if (this.replicationManager.getServers() != null
|
||||||
|
&& !CollectionUtil.isNullOrEmpty(this.replicationManager
|
||||||
|
.getServers().getRegistryReplicationServers())) {
|
||||||
|
List<RegistryObjectType> registries = new ArrayList<RegistryObjectType>();
|
||||||
|
for (NotificationHostConfiguration hostConfig : this.replicationManager
|
||||||
|
.getServers().getRegistryReplicationServers()) {
|
||||||
|
|
||||||
|
SlotType queryLanguageSlot = new SlotType(
|
||||||
|
QueryConstants.QUERY_LANGUAGE, new StringValueType(
|
||||||
|
QueryLanguages.HQL));
|
||||||
|
SlotType queryExpressionSlot = new SlotType(
|
||||||
|
QueryConstants.QUERY_EXPRESSION, new StringValueType(
|
||||||
|
"FROM SubscriptionType sub where sub.id like 'Replication Subscription for%"
|
||||||
|
+ RegistryUtil.LOCAL_REGISTRY_ADDRESS
|
||||||
|
+ "%'"));
|
||||||
|
QueryType query = new QueryType();
|
||||||
|
query.setQueryDefinition(CanonicalQueryTypes.ADHOC_QUERY);
|
||||||
|
query.getSlot().add(queryLanguageSlot);
|
||||||
|
query.getSlot().add(queryExpressionSlot);
|
||||||
|
|
||||||
|
QueryRequest request = new QueryRequest();
|
||||||
|
request.setResponseOption(new ResponseOptionType(
|
||||||
|
QueryReturnTypes.REGISTRY_OBJECT, true));
|
||||||
|
request.setId("Replication Subscription Verification Query");
|
||||||
|
request.setQuery(query);
|
||||||
|
try {
|
||||||
|
if (!registrySoapServices
|
||||||
|
.getQueryServiceForHost(
|
||||||
|
hostConfig.getRegistryBaseURL())
|
||||||
|
.executeQuery(request).getRegistryObjects()
|
||||||
|
.isEmpty()) {
|
||||||
|
RegistryType registry = registryDao
|
||||||
|
.getRegistryByBaseURL(hostConfig
|
||||||
|
.getRegistryBaseURL());
|
||||||
|
if (registry != null) {
|
||||||
|
registries.add(registry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
statusHandler.error("Error querying remote registry", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
Collections.sort(registries, REGISTRY_COMPARATOR);
|
||||||
|
for (RegistryObjectType reg : registries) {
|
||||||
|
appendRegistryInfo((RegistryType) reg, builder);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return builder.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a list of registries that are subscribing to the local registry
|
||||||
|
*
|
||||||
|
* @return The list of registries that are subscribing to the local registry
|
||||||
|
*/
|
||||||
|
@GET
|
||||||
|
@Path("getRegistrySubscribing")
|
||||||
|
public String getRegistrySubscribing() {
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
List<RegistryObjectType> registries = new ArrayList<RegistryObjectType>();
|
||||||
|
for (SubscriptionType sub : subscriptionDao.getAll()) {
|
||||||
|
DeliveryInfoType deliveryInfo = sub.getDeliveryInfo().get(0);
|
||||||
|
W3CEndpointReference endpointReference = deliveryInfo.getNotifyTo();
|
||||||
|
DOMResult dom = new DOMResult();
|
||||||
|
endpointReference.writeTo(dom);
|
||||||
|
Document doc = (Document) dom.getNode();
|
||||||
|
NodeList nodes = doc.getElementsByTagNameNS(
|
||||||
|
EbxmlNamespaces.ADDRESSING_URI,
|
||||||
|
RegistrySubscriptionManager.ADDRESS_TAG);
|
||||||
|
Node addressNode = nodes.item(0);
|
||||||
|
String serviceAddress = addressNode.getTextContent().trim();
|
||||||
|
String endpointType = addressNode
|
||||||
|
.getAttributes()
|
||||||
|
.getNamedItemNS(EbxmlNamespaces.RIM_URI,
|
||||||
|
RegistrySubscriptionManager.ENDPOINT_TAG)
|
||||||
|
.getNodeValue();
|
||||||
|
if (endpointType.equals(DeliveryMethodTypes.SOAP)) {
|
||||||
|
RegistryType registry = registryDao
|
||||||
|
.getRegistryByBaseURL(serviceAddress.replace(
|
||||||
|
"/notificationListener", ""));
|
||||||
|
if (registry != null && !registries.contains(registry)) {
|
||||||
|
registries.add(registry);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Collections.sort(registries, REGISTRY_COMPARATOR);
|
||||||
|
for (RegistryObjectType reg : registries) {
|
||||||
|
appendRegistryInfo((RegistryType) reg, builder);
|
||||||
|
}
|
||||||
|
return builder.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the list of object types that are currently being replicated
|
||||||
|
*
|
||||||
|
* @return The object list
|
||||||
|
*/
|
||||||
|
@GET
|
||||||
|
@Path("getObjectTypesReplicated")
|
||||||
|
public String getObjectTypesReplicated() {
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
for (String objectType : RegistryReplicationManager.getObjectTypes()) {
|
||||||
|
builder.append(objectType).append(StringUtil.NEWLINE);
|
||||||
|
}
|
||||||
|
return builder.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Kicks of a full registry sync with the specified registry
|
||||||
|
*
|
||||||
|
* @param registryId
|
||||||
|
* The registry ID to sync with
|
||||||
|
* @return status message
|
||||||
|
*/
|
||||||
|
@GET
|
||||||
|
@Path("syncWithRegistry/{registryId}")
|
||||||
|
public String syncWithRegistry(@PathParam("registryId") String registryId) {
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
RegistryType registry = registryDao.getById(registryId);
|
||||||
|
if (registry == null) {
|
||||||
|
builder.append("Registry [" + registryId
|
||||||
|
+ "] not in federation. Unable to synchronize.");
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
replicationManager.synchronizeRegistryWithFederation(registry
|
||||||
|
.getBaseURL());
|
||||||
|
} catch (Exception e) {
|
||||||
|
statusHandler.error("Error synchronizing registry!", e);
|
||||||
|
builder.append("Error synchronizing registry [" + registryId
|
||||||
|
+ "]: " + e.getLocalizedMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return builder.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Subscribes to replication notifications from the specified registry
|
||||||
|
*
|
||||||
|
* @param registryId
|
||||||
|
* The ID of the registry to subscribe to
|
||||||
|
* @return Status message
|
||||||
|
*/
|
||||||
|
@GET
|
||||||
|
@Path("subscribeToRegistry/{registryId}")
|
||||||
|
public String subscribeToRegistry(@PathParam("registryId") String registryId) {
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
RegistryType registry = registryDao.getById(registryId);
|
||||||
|
if (registry == null) {
|
||||||
|
builder.append("Registry [" + registryId
|
||||||
|
+ "] not in federation. Unable to submit subscriptions.");
|
||||||
|
} else {
|
||||||
|
RegistryType localRegistry = registryDao
|
||||||
|
.getRegistryByBaseURL(RegistryUtil.LOCAL_REGISTRY_ADDRESS);
|
||||||
|
|
||||||
|
NotificationHostConfiguration config = new NotificationHostConfiguration(
|
||||||
|
registry.getId(), registry.getId(), registry.getBaseURL());
|
||||||
|
replicationManager.submitSubscriptionsToHost(config, localRegistry);
|
||||||
|
builder.append("Successfully subscribed to registry [" + registryId
|
||||||
|
+ "]");
|
||||||
|
this.replicationManager.addNotificationServer(config);
|
||||||
|
replicationManager.saveNotificationServers();
|
||||||
|
}
|
||||||
|
return builder.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unsubscribes from the specified registry
|
||||||
|
*
|
||||||
|
* @param registryId
|
||||||
|
* The ID of the registry to unsubscribe from
|
||||||
|
* @return The status message
|
||||||
|
*/
|
||||||
|
@GET
|
||||||
|
@Path("unsubscribeFromRegistry/{registryId}")
|
||||||
|
public String unsubscribeFromRegistry(
|
||||||
|
@PathParam("registryId") String registryId) {
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
RegistryType registry = registryDao.getById(registryId);
|
||||||
|
if (registry == null) {
|
||||||
|
builder.append("Registry [" + registryId
|
||||||
|
+ "] not in federation. Unable to unsubscribe.");
|
||||||
|
} else {
|
||||||
|
RegistryType localRegistry = registryDao
|
||||||
|
.getRegistryByBaseURL(RegistryUtil.LOCAL_REGISTRY_ADDRESS);
|
||||||
|
dataDeliveryRestClient.getRegistryDataAccessService(
|
||||||
|
registry.getBaseURL()).removeSubscriptionsForSite(
|
||||||
|
localRegistry.getOwner());
|
||||||
|
builder.append("Successfully unsubscribed from registry ["
|
||||||
|
+ registryId + "]");
|
||||||
|
replicationManager.removeNotificationServer(registry.getBaseURL());
|
||||||
|
replicationManager.saveNotificationServers();
|
||||||
|
}
|
||||||
|
return builder.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Appends registry information to the stringbuilder
|
||||||
|
*
|
||||||
|
* @param registry
|
||||||
|
* The registry to get information for
|
||||||
|
* @param builder
|
||||||
|
* The string builder to append to
|
||||||
|
*/
|
||||||
|
private void appendRegistryInfo(RegistryType registry, StringBuilder builder) {
|
||||||
|
builder.append(registry).append(",");
|
||||||
|
builder.append(registry.getBaseURL()).append(",");
|
||||||
|
builder.append(registry.getConformanceProfile()).append(",");
|
||||||
|
builder.append(registry.getSpecificationVersion());
|
||||||
|
builder.append(StringUtil.NEWLINE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setReplicationManager(
|
||||||
|
RegistryReplicationManager replicationManager) {
|
||||||
|
this.replicationManager = replicationManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRegistryDao(RegistryDao registryDao) {
|
||||||
|
this.registryDao = registryDao;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSubscriptionDao(SubscriptionDao subscriptionDao) {
|
||||||
|
this.subscriptionDao = subscriptionDao;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDataDeliveryRestClient(
|
||||||
|
DataDeliveryRESTServices dataDeliveryRestClient) {
|
||||||
|
this.dataDeliveryRestClient = dataDeliveryRestClient;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRegistrySoapServices(
|
||||||
|
RegistrySOAPServices registrySoapServices) {
|
||||||
|
this.registrySoapServices = registrySoapServices;
|
||||||
|
}
|
||||||
|
}
|
|
@ -34,8 +34,7 @@ Require-Bundle: com.raytheon.uf.common.registry.schemas.ebxml;bundle-version="1.
|
||||||
com.raytheon.uf.common.datadelivery.request;bundle-version="1.0.0",
|
com.raytheon.uf.common.datadelivery.request;bundle-version="1.0.0",
|
||||||
javax.mail;bundle-version="1.0.0",
|
javax.mail;bundle-version="1.0.0",
|
||||||
org.apache.commons.validator;bundle-version="1.2.0",
|
org.apache.commons.validator;bundle-version="1.2.0",
|
||||||
com.sun.xml.bind;bundle-version="1.0.0",
|
com.sun.xml.bind;bundle-version="1.0.0"
|
||||||
org.reflections;bundle-version="0.9.9"
|
|
||||||
Export-Package: com.raytheon.uf.edex.registry.ebxml.acp,
|
Export-Package: com.raytheon.uf.edex.registry.ebxml.acp,
|
||||||
com.raytheon.uf.edex.registry.ebxml.dao,
|
com.raytheon.uf.edex.registry.ebxml.dao,
|
||||||
com.raytheon.uf.edex.registry.ebxml.exception,
|
com.raytheon.uf.edex.registry.ebxml.exception,
|
||||||
|
@ -45,6 +44,7 @@ Export-Package: com.raytheon.uf.edex.registry.ebxml.acp,
|
||||||
com.raytheon.uf.edex.registry.ebxml.services.lifecycle,
|
com.raytheon.uf.edex.registry.ebxml.services.lifecycle,
|
||||||
com.raytheon.uf.edex.registry.ebxml.services.notification,
|
com.raytheon.uf.edex.registry.ebxml.services.notification,
|
||||||
com.raytheon.uf.edex.registry.ebxml.services.query,
|
com.raytheon.uf.edex.registry.ebxml.services.query,
|
||||||
|
com.raytheon.uf.edex.registry.ebxml.services.query.plugins,
|
||||||
com.raytheon.uf.edex.registry.ebxml.services.validator,
|
com.raytheon.uf.edex.registry.ebxml.services.validator,
|
||||||
com.raytheon.uf.edex.registry.ebxml.services.validator.types,
|
com.raytheon.uf.edex.registry.ebxml.services.validator.types,
|
||||||
com.raytheon.uf.edex.registry.ebxml.util,
|
com.raytheon.uf.edex.registry.ebxml.util,
|
||||||
|
|
|
@ -44,6 +44,7 @@
|
||||||
<property name="registryObjectDao" ref="registryObjectDao"/>
|
<property name="registryObjectDao" ref="registryObjectDao"/>
|
||||||
<property name="dynamicRefDao" ref="dynamicObjectRefDao"/>
|
<property name="dynamicRefDao" ref="dynamicObjectRefDao"/>
|
||||||
<property name="queryManager" ref="queryServiceImpl"/>
|
<property name="queryManager" ref="queryServiceImpl"/>
|
||||||
|
<property name="registryRestClient" ref="registryRestClient"/>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<bean id="registryXpathProcessor" class="com.raytheon.uf.edex.registry.ebxml.util.xpath.RegistryXPathProcessor">
|
<bean id="registryXpathProcessor" class="com.raytheon.uf.edex.registry.ebxml.util.xpath.RegistryXPathProcessor">
|
||||||
|
|
|
@ -139,6 +139,7 @@
|
||||||
value="urn:oasis:names:tc:ebxml-regrep:query:GetReferencedObject" />
|
value="urn:oasis:names:tc:ebxml-regrep:query:GetReferencedObject" />
|
||||||
<property name="classificationNodeDao" ref="classificationNodeDao" />
|
<property name="classificationNodeDao" ref="classificationNodeDao" />
|
||||||
<property name="referenceResolver" ref="objectReferenceResolver" />
|
<property name="referenceResolver" ref="objectReferenceResolver" />
|
||||||
|
<property name="registrySoapClient" ref="registryWebServiceClient"/>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
</beans>
|
</beans>
|
|
@ -5,6 +5,7 @@
|
||||||
<bean id="notificationListenerFactory"
|
<bean id="notificationListenerFactory"
|
||||||
class="com.raytheon.uf.edex.registry.ebxml.services.notification.NotificationListenerFactory">
|
class="com.raytheon.uf.edex.registry.ebxml.services.notification.NotificationListenerFactory">
|
||||||
<constructor-arg ref="EmailSender" />
|
<constructor-arg ref="EmailSender" />
|
||||||
|
<constructor-arg ref="registryWebServiceClient"/>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<bean name="EmailSender"
|
<bean name="EmailSender"
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
|
|
||||||
<property name="threadPool">
|
<property name="threadPool">
|
||||||
<bean id="ThreadPool" class="org.eclipse.jetty.util.thread.QueuedThreadPool">
|
<bean id="ThreadPool" class="org.eclipse.jetty.util.thread.QueuedThreadPool">
|
||||||
<property name="minThreads" value="2" />
|
<property name="minThreads" value="${ebxml-webserver-min-threads}" />
|
||||||
<property name="maxThreads" value="5" />
|
<property name="maxThreads" value="${ebxml-webserver-max-threads}" />
|
||||||
</bean>
|
</bean>
|
||||||
</property>
|
</property>
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,12 @@
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
|
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
|
||||||
|
|
||||||
|
<bean id="registryRestClient" class="com.raytheon.uf.common.registry.services.RegistryRESTServices"/>
|
||||||
|
<bean id="registryWebServiceClient" class="com.raytheon.uf.common.registry.services.RegistrySOAPServices"/>
|
||||||
|
|
||||||
|
<bean id="webServiceInInterceptor"
|
||||||
|
class="com.raytheon.uf.edex.registry.ebxml.services.RegistryServiceInInterceptor" />
|
||||||
|
|
||||||
<!-- QUERY -->
|
<!-- QUERY -->
|
||||||
<!-- Define concrete implementation of the service -->
|
<!-- Define concrete implementation of the service -->
|
||||||
<bean id="queryServiceImpl"
|
<bean id="queryServiceImpl"
|
||||||
|
@ -12,6 +18,7 @@
|
||||||
<property name="classificationNodeDao" ref="classificationNodeDao"/>
|
<property name="classificationNodeDao" ref="classificationNodeDao"/>
|
||||||
<property name="registryObjectDao" ref="registryObjectDao"/>
|
<property name="registryObjectDao" ref="registryObjectDao"/>
|
||||||
<property name="sessionFactory" ref="metadataSessionFactory"/>
|
<property name="sessionFactory" ref="metadataSessionFactory"/>
|
||||||
|
<property name="registrySoapClient" ref="registryWebServiceClient"/>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<!-- NOTIFICATION LISTENER -->
|
<!-- NOTIFICATION LISTENER -->
|
||||||
|
@ -21,6 +28,7 @@
|
||||||
<property name="lcm" ref="lcmServiceImpl" />
|
<property name="lcm" ref="lcmServiceImpl" />
|
||||||
<property name="registryObjectDao" ref="registryObjectDao" />
|
<property name="registryObjectDao" ref="registryObjectDao" />
|
||||||
<property name="registryDao" ref="registryDao" />
|
<property name="registryDao" ref="registryDao" />
|
||||||
|
<property name="registrySoapClient" ref="registryWebServiceClient"/>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
|
|
||||||
|
@ -74,15 +82,6 @@
|
||||||
<property name="partyDao" ref="partyDao" />
|
<property name="partyDao" ref="partyDao" />
|
||||||
<property name="webUtil" ref="RegistryWebUtil" />
|
<property name="webUtil" ref="RegistryWebUtil" />
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<bean id="registryDataAccessService" class="com.raytheon.uf.edex.registry.ebxml.services.rest.RegistryDataAccessService">
|
|
||||||
<property name="registryObjectDao" ref="registryObjectDao"/>
|
|
||||||
<property name="lcm" ref="lcmServiceImpl"/>
|
|
||||||
<property name="queryDefinitionDao" ref="queryDefinitionDao"/>
|
|
||||||
</bean>
|
|
||||||
|
|
||||||
<bean id="registryAvailabilityService"
|
|
||||||
class="com.raytheon.uf.edex.registry.ebxml.services.rest.RegistryAvailableRestService" />
|
|
||||||
|
|
||||||
<bean id="registryObjectsRestService"
|
<bean id="registryObjectsRestService"
|
||||||
class="com.raytheon.uf.edex.registry.ebxml.services.rest.RegistryObjectsRestService">
|
class="com.raytheon.uf.edex.registry.ebxml.services.rest.RegistryObjectsRestService">
|
||||||
|
|
|
@ -11,4 +11,7 @@ ebxml-federation-sync-threads=3
|
||||||
ebxml-email.enabled=false
|
ebxml-email.enabled=false
|
||||||
# The maximum number of events that will be batched and send
|
# The maximum number of events that will be batched and send
|
||||||
# in a registry replication notification
|
# in a registry replication notification
|
||||||
ebxml-notification-batch-size=50
|
ebxml-notification-batch-size=50
|
||||||
|
# Configuration of thread pool used to handle web service requests
|
||||||
|
ebxml-webserver-min-threads=2
|
||||||
|
ebxml-webserver-max-threads=10
|
|
@ -21,9 +21,6 @@ package com.raytheon.uf.edex.registry.ebxml;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
|
|
||||||
import javax.jws.WebService;
|
|
||||||
|
|
||||||
import com.raytheon.uf.common.registry.IRegistryRequestService;
|
|
||||||
import com.raytheon.uf.edex.auth.RemoteRequestRouteWrapper;
|
import com.raytheon.uf.edex.auth.RemoteRequestRouteWrapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -37,18 +34,16 @@ import com.raytheon.uf.edex.auth.RemoteRequestRouteWrapper;
|
||||||
* Date Ticket# Engineer Description
|
* Date Ticket# Engineer Description
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* 5/3/2013 1948 bphillip Initial implementation
|
* 5/3/2013 1948 bphillip Initial implementation
|
||||||
* 7/26/2031 2232 mpduff Don't override executeThrift.
|
* 7/26/2013 2232 mpduff Don't override executeThrift.
|
||||||
|
* 10/30/2013 1538 bphillip Removed unused IRegistryRequestService interface
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author bphillip
|
* @author bphillip
|
||||||
* @version 1
|
* @version 1
|
||||||
*/
|
*/
|
||||||
@WebService(endpointInterface = "com.raytheon.uf.common.registry.IRegistryRequestService")
|
public class RegistryRemoteRequestWrapper extends RemoteRequestRouteWrapper {
|
||||||
public class RegistryRemoteRequestWrapper extends RemoteRequestRouteWrapper
|
|
||||||
implements IRegistryRequestService {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public byte[] request(byte[] data) {
|
public byte[] request(byte[] data) {
|
||||||
return executeThrift(new ByteArrayInputStream(data));
|
return executeThrift(new ByteArrayInputStream(data));
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,6 +63,7 @@ import com.raytheon.uf.edex.registry.ebxml.util.EbxmlExceptionUtil;
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* 8/5/2013 2191 bphillip Initial implementation
|
* 8/5/2013 2191 bphillip Initial implementation
|
||||||
* 10/8/2013 1682 bphillip Added getReferenced objects methods
|
* 10/8/2013 1682 bphillip Added getReferenced objects methods
|
||||||
|
* 10/30/2013 1538 bphillip Changed to use non-static rest/soap clients
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author bphillip
|
* @author bphillip
|
||||||
|
@ -86,6 +87,8 @@ public class ObjectReferenceResolver {
|
||||||
/** Validator for validating REST endpoint addresses */
|
/** Validator for validating REST endpoint addresses */
|
||||||
private UrlValidator urlValidator = new UrlValidator();
|
private UrlValidator urlValidator = new UrlValidator();
|
||||||
|
|
||||||
|
private RegistryRESTServices registryRestClient;
|
||||||
|
|
||||||
/** Cache holding the fields in each class that are object references */
|
/** Cache holding the fields in each class that are object references */
|
||||||
private static LoadingCache<Class<?>, List<String>> OBJECT_REFERENCE_FIELD_CACHE = CacheBuilder
|
private static LoadingCache<Class<?>, List<String>> OBJECT_REFERENCE_FIELD_CACHE = CacheBuilder
|
||||||
.newBuilder().expireAfterAccess(1, TimeUnit.MINUTES)
|
.newBuilder().expireAfterAccess(1, TimeUnit.MINUTES)
|
||||||
|
@ -386,8 +389,7 @@ public class ObjectReferenceResolver {
|
||||||
|
|
||||||
RegistryObjectType retVal = null;
|
RegistryObjectType retVal = null;
|
||||||
if (urlValidator.isValid(ref)) {
|
if (urlValidator.isValid(ref)) {
|
||||||
Object restResponse = RegistryRESTServices
|
Object restResponse = registryRestClient.accessXMLRestService(ref);
|
||||||
.accessXMLRestService(ref);
|
|
||||||
if (restResponse instanceof QueryResponse) {
|
if (restResponse instanceof QueryResponse) {
|
||||||
QueryResponse queryResponse = (QueryResponse) restResponse;
|
QueryResponse queryResponse = (QueryResponse) restResponse;
|
||||||
if (responseOk(queryResponse)) {
|
if (responseOk(queryResponse)) {
|
||||||
|
@ -459,4 +461,8 @@ public class ObjectReferenceResolver {
|
||||||
this.queryManager = queryManager;
|
this.queryManager = queryManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setRegistryRestClient(RegistryRESTServices registryRestClient) {
|
||||||
|
this.registryRestClient = registryRestClient;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,7 @@ import oasis.names.tc.ebxml.regrep.xsd.rs.v4.RegistryResponseType;
|
||||||
import com.google.common.annotations.VisibleForTesting;
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
import com.raytheon.uf.common.registry.EbxmlNamespaces;
|
import com.raytheon.uf.common.registry.EbxmlNamespaces;
|
||||||
import com.raytheon.uf.common.registry.constants.DeliveryMethodTypes;
|
import com.raytheon.uf.common.registry.constants.DeliveryMethodTypes;
|
||||||
|
import com.raytheon.uf.common.registry.services.RegistrySOAPServices;
|
||||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||||
import com.raytheon.uf.common.status.UFStatus;
|
import com.raytheon.uf.common.status.UFStatus;
|
||||||
import com.raytheon.uf.edex.registry.ebxml.services.notification.listeners.EmailNotificationListener;
|
import com.raytheon.uf.edex.registry.ebxml.services.notification.listeners.EmailNotificationListener;
|
||||||
|
@ -48,6 +49,7 @@ import com.raytheon.uf.edex.registry.ebxml.services.notification.listeners.WebSe
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* Apr 17, 2013 1672 djohnson Initial creation
|
* Apr 17, 2013 1672 djohnson Initial creation
|
||||||
* 10/20/2013 1682 bphillip Added synchronous notification delivery
|
* 10/20/2013 1682 bphillip Added synchronous notification delivery
|
||||||
|
* 10/30/2013 1538 bphillip Changed to use non-static web service clients
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -94,16 +96,22 @@ public class NotificationListenerFactory implements
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Email sender */
|
||||||
private final EmailSender emailSender;
|
private final EmailSender emailSender;
|
||||||
|
|
||||||
|
/** Registry soap service client */
|
||||||
|
private final RegistrySOAPServices registrySoapClient;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
*
|
*
|
||||||
* @param emailSender
|
* @param emailSender
|
||||||
* the email sender
|
* the email sender
|
||||||
*/
|
*/
|
||||||
public NotificationListenerFactory(EmailSender emailSender) {
|
public NotificationListenerFactory(EmailSender emailSender,
|
||||||
|
RegistrySOAPServices registrySoapClient) {
|
||||||
this.emailSender = emailSender;
|
this.emailSender = emailSender;
|
||||||
|
this.registrySoapClient = registrySoapClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -134,7 +142,8 @@ public class NotificationListenerFactory implements
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
NotificationListener getWebServiceNotificationListener(
|
NotificationListener getWebServiceNotificationListener(
|
||||||
final NotificationDestination destination) {
|
final NotificationDestination destination) {
|
||||||
return new WebServiceNotificationListener(destination);
|
return new WebServiceNotificationListener(destination,
|
||||||
|
registrySoapClient);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -88,6 +88,7 @@ import com.raytheon.uf.edex.registry.ebxml.util.EbxmlObjectUtil;
|
||||||
* 9/11/2013 2254 bphillip Cleaned up handling of notifications and removed unneccessary code
|
* 9/11/2013 2254 bphillip Cleaned up handling of notifications and removed unneccessary code
|
||||||
* 10/20/2013 1682 bphillip Added synchronous notification delivery
|
* 10/20/2013 1682 bphillip Added synchronous notification delivery
|
||||||
* 10/23/2013 1538 bphillip Added log message denoting when processing is complete and time duration
|
* 10/23/2013 1538 bphillip Added log message denoting when processing is complete and time duration
|
||||||
|
* 10/30/2013 1538 bphillip Changed to use non-static registry soap service client
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -117,6 +118,9 @@ public class NotificationListenerImpl implements NotificationListener {
|
||||||
/** Data access object for getting RegistryType objects */
|
/** Data access object for getting RegistryType objects */
|
||||||
private RegistryDao registryDao;
|
private RegistryDao registryDao;
|
||||||
|
|
||||||
|
/** Registry soap service client */
|
||||||
|
private RegistrySOAPServices registrySoapClient;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onNotification(NotificationType notification) {
|
public void onNotification(NotificationType notification) {
|
||||||
long startTime = TimeUtil.currentTimeMillis();
|
long startTime = TimeUtil.currentTimeMillis();
|
||||||
|
@ -250,7 +254,7 @@ public class NotificationListenerImpl implements NotificationListener {
|
||||||
Collection<String> objIds, Mode mode) throws EbxmlRegistryException {
|
Collection<String> objIds, Mode mode) throws EbxmlRegistryException {
|
||||||
try {
|
try {
|
||||||
// Get a the remote query service
|
// Get a the remote query service
|
||||||
QueryManager queryManager = RegistrySOAPServices
|
QueryManager queryManager = registrySoapClient
|
||||||
.getQueryServiceForHost(clientBaseURL);
|
.getQueryServiceForHost(clientBaseURL);
|
||||||
// Create a query to get the current state of the affected objects
|
// Create a query to get the current state of the affected objects
|
||||||
QueryRequest queryRequest = createGetCurrentStateQuery(
|
QueryRequest queryRequest = createGetCurrentStateQuery(
|
||||||
|
@ -343,4 +347,9 @@ public class NotificationListenerImpl implements NotificationListener {
|
||||||
public void setRegistryDao(RegistryDao registryDao) {
|
public void setRegistryDao(RegistryDao registryDao) {
|
||||||
this.registryDao = registryDao;
|
this.registryDao = registryDao;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setRegistrySoapClient(RegistrySOAPServices registrySoapClient) {
|
||||||
|
this.registrySoapClient = registrySoapClient;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,6 +50,7 @@ import com.raytheon.uf.edex.registry.ebxml.util.EbxmlExceptionUtil;
|
||||||
* Apr 16, 2013 1672 djohnson Extracted from RegistryNotificationManager.
|
* Apr 16, 2013 1672 djohnson Extracted from RegistryNotificationManager.
|
||||||
* 8/28/2013 1538 bphillip Changed to catch a Throwable instead of just EbxmlRegistryException
|
* 8/28/2013 1538 bphillip Changed to catch a Throwable instead of just EbxmlRegistryException
|
||||||
* 10/20/2013 1682 bphillip Added synchronous notification delivery
|
* 10/20/2013 1682 bphillip Added synchronous notification delivery
|
||||||
|
* 10/30/2013 1538 bphillip Changed to use non-static soap service client
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -63,13 +64,19 @@ public class WebServiceNotificationListener implements NotificationListener {
|
||||||
private static final IUFStatusHandler statusHandler = UFStatus
|
private static final IUFStatusHandler statusHandler = UFStatus
|
||||||
.getHandler(WebServiceNotificationListener.class);
|
.getHandler(WebServiceNotificationListener.class);
|
||||||
|
|
||||||
|
/** The destination of notifications sent via this listener */
|
||||||
private final String destination;
|
private final String destination;
|
||||||
|
|
||||||
|
/** Registry soap service client */
|
||||||
|
private RegistrySOAPServices registrySoapClient;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param destination
|
* @param destination
|
||||||
*/
|
*/
|
||||||
public WebServiceNotificationListener(NotificationDestination destination) {
|
public WebServiceNotificationListener(NotificationDestination destination,
|
||||||
|
RegistrySOAPServices registrySoapClient) {
|
||||||
this.destination = destination.getDestination();
|
this.destination = destination.getDestination();
|
||||||
|
this.registrySoapClient = registrySoapClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -120,8 +127,8 @@ public class WebServiceNotificationListener implements NotificationListener {
|
||||||
RegistryServiceException, MsgRegistryException {
|
RegistryServiceException, MsgRegistryException {
|
||||||
statusHandler.info("Sending notification [" + notification.getId()
|
statusHandler.info("Sending notification [" + notification.getId()
|
||||||
+ "]");
|
+ "]");
|
||||||
RegistrySOAPServices.getNotificationListenerServiceForUrl(
|
registrySoapClient.getNotificationListenerServiceForUrl(serviceAddress)
|
||||||
serviceAddress).synchronousNotification(notification);
|
.synchronousNotification(notification);
|
||||||
statusHandler.info("Notification [" + notification.getId() + "] sent!");
|
statusHandler.info("Notification [" + notification.getId() + "] sent!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -122,6 +122,7 @@ import com.raytheon.uf.edex.registry.ebxml.util.EbxmlObjectUtil;
|
||||||
* 10/8/2013 1682 bphillip Refactored querying
|
* 10/8/2013 1682 bphillip Refactored querying
|
||||||
* 10/2013 1682 bphillip Fixed federated query invocation
|
* 10/2013 1682 bphillip Fixed federated query invocation
|
||||||
* 10/23/2013 1538 bphillip Remove extra executeQuery method
|
* 10/23/2013 1538 bphillip Remove extra executeQuery method
|
||||||
|
* 10/30/2013 1538 bphillip Changed to use non-static soap service client
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -192,6 +193,8 @@ public class QueryManagerImpl implements QueryManager, ApplicationContextAware {
|
||||||
*/
|
*/
|
||||||
private ObjectReferenceResolver referenceResolver;
|
private ObjectReferenceResolver referenceResolver;
|
||||||
|
|
||||||
|
private RegistrySOAPServices registrySoapClient;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new QueryManagerImpl
|
* Creates a new QueryManagerImpl
|
||||||
*/
|
*/
|
||||||
|
@ -795,7 +798,7 @@ public class QueryManagerImpl implements QueryManager, ApplicationContextAware {
|
||||||
statusHandler.info("Submitting federated query to ["
|
statusHandler.info("Submitting federated query to ["
|
||||||
+ registryToQuery.getId() + "] at ["
|
+ registryToQuery.getId() + "] at ["
|
||||||
+ registryToQuery.getBaseURL() + "]...");
|
+ registryToQuery.getBaseURL() + "]...");
|
||||||
return RegistrySOAPServices.getQueryServiceForHost(
|
return registrySoapClient.getQueryServiceForHost(
|
||||||
registryToQuery.getBaseURL()).executeQuery(queryRequest);
|
registryToQuery.getBaseURL()).executeQuery(queryRequest);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -859,4 +862,8 @@ public class QueryManagerImpl implements QueryManager, ApplicationContextAware {
|
||||||
this.sessionFactory = sessionFactory;
|
this.sessionFactory = sessionFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setRegistrySoapClient(RegistrySOAPServices registrySoapClient) {
|
||||||
|
this.registrySoapClient = registrySoapClient;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,6 +57,7 @@ import com.raytheon.uf.edex.registry.ebxml.util.EbxmlExceptionUtil;
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* 9/18/2013 1705 bphillip Initial implementation
|
* 9/18/2013 1705 bphillip Initial implementation
|
||||||
* 10/8/2013 1682 bphillip Refactored querying
|
* 10/8/2013 1682 bphillip Refactored querying
|
||||||
|
* 10/30/2013 1538 bphillip Changed to use non-static soap service client
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author bphillip
|
* @author bphillip
|
||||||
|
@ -67,6 +68,9 @@ public class GetReferencedObject extends RegistryQueryPlugin {
|
||||||
/** Object used to resolve object references */
|
/** Object used to resolve object references */
|
||||||
private ObjectReferenceResolver referenceResolver;
|
private ObjectReferenceResolver referenceResolver;
|
||||||
|
|
||||||
|
/** Registry soap service client */
|
||||||
|
private RegistrySOAPServices registrySoapClient;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@WebMethod(action = EXECUTE_QUERY_ACTION)
|
@WebMethod(action = EXECUTE_QUERY_ACTION)
|
||||||
@WebResult(name = "QueryResponse", targetNamespace = EbxmlNamespaces.QUERY_URI, partName = "partQueryResponse")
|
@WebResult(name = "QueryResponse", targetNamespace = EbxmlNamespaces.QUERY_URI, partName = "partQueryResponse")
|
||||||
|
@ -108,7 +112,7 @@ public class GetReferencedObject extends RegistryQueryPlugin {
|
||||||
query.setQuery(queryObj);
|
query.setQuery(queryObj);
|
||||||
query.setResponseOption(new ResponseOptionType(
|
query.setResponseOption(new ResponseOptionType(
|
||||||
QueryReturnTypes.REGISTRY_OBJECT, true));
|
QueryReturnTypes.REGISTRY_OBJECT, true));
|
||||||
QueryManager remoteQueryManager = RegistrySOAPServices
|
QueryManager remoteQueryManager = registrySoapClient
|
||||||
.getQueryServiceForHost(remoteAddress);
|
.getQueryServiceForHost(remoteAddress);
|
||||||
|
|
||||||
QueryResponse remoteResponse = remoteQueryManager
|
QueryResponse remoteResponse = remoteQueryManager
|
||||||
|
@ -130,4 +134,8 @@ public class GetReferencedObject extends RegistryQueryPlugin {
|
||||||
this.referenceResolver = referenceResolver;
|
this.referenceResolver = referenceResolver;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setRegistrySoapClient(RegistrySOAPServices registrySoapClient) {
|
||||||
|
this.registrySoapClient = registrySoapClient;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,12 +66,13 @@ import com.raytheon.uf.edex.registry.ebxml.util.EbxmlExceptionUtil;
|
||||||
* 4/19/2013 1931 bphillip Initial implementation
|
* 4/19/2013 1931 bphillip Initial implementation
|
||||||
* 5/21/2013 2022 bphillip Added interface and moved constants
|
* 5/21/2013 2022 bphillip Added interface and moved constants
|
||||||
* 10/8/2013 1682 bphillip Refactored to use parameter definitions from the registry
|
* 10/8/2013 1682 bphillip Refactored to use parameter definitions from the registry
|
||||||
|
* 10/30/2013 1538 bphillip Changed root REST service path
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author bphillip
|
* @author bphillip
|
||||||
* @version 1
|
* @version 1
|
||||||
*/
|
*/
|
||||||
@Path("/rest/search")
|
@Path("/search")
|
||||||
@Service
|
@Service
|
||||||
@Transactional
|
@Transactional
|
||||||
public class QueryProtocolRestService implements IQueryProtocolRestService {
|
public class QueryProtocolRestService implements IQueryProtocolRestService {
|
||||||
|
|
|
@ -73,12 +73,13 @@ import com.raytheon.uf.edex.registry.ebxml.dao.RegistryObjectDao;
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* 4/19/2013 1931 bphillip Initial implementation
|
* 4/19/2013 1931 bphillip Initial implementation
|
||||||
* 5/21/2013 2022 bphillip Added interface
|
* 5/21/2013 2022 bphillip Added interface
|
||||||
|
* 10/30/2013 1538 bphillip Changed root REST service path
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author bphillip
|
* @author bphillip
|
||||||
* @version 1
|
* @version 1
|
||||||
*/
|
*/
|
||||||
@Path("/rest/registryObjects/{objectId}")
|
@Path("/registryObjects/{objectId}")
|
||||||
@Service
|
@Service
|
||||||
@Transactional
|
@Transactional
|
||||||
public class RegistryObjectsRestService implements IRegistryObjectsRestService {
|
public class RegistryObjectsRestService implements IRegistryObjectsRestService {
|
||||||
|
|
|
@ -46,12 +46,13 @@ import com.raytheon.uf.edex.registry.ebxml.dao.ExtrinsicObjectDao;
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* 4/19/2013 1931 bphillip Initial implementation
|
* 4/19/2013 1931 bphillip Initial implementation
|
||||||
* 5/21/2013 2022 bphillip Added interface and changed method name
|
* 5/21/2013 2022 bphillip Added interface and changed method name
|
||||||
|
* 10/30/2013 1538 bphillip Changed root REST service path
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author bphillip
|
* @author bphillip
|
||||||
* @version 1
|
* @version 1
|
||||||
*/
|
*/
|
||||||
@Path("/rest/repositoryItems/{repositoryItemId}")
|
@Path("/repositoryItems/{repositoryItemId}")
|
||||||
@Service
|
@Service
|
||||||
@Transactional
|
@Transactional
|
||||||
public class RepositoryItemsRestService implements IRepositoryItemsRestService {
|
public class RepositoryItemsRestService implements IRepositoryItemsRestService {
|
||||||
|
|
|
@ -119,7 +119,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
function callRESTService(func){
|
function callRESTService(func){
|
||||||
var url = "http://"+window.location.host+"/rest/dataAccess/"+func;
|
var url = "http://"+window.location.host+"/dataDelivery/dataAccess/"+func;
|
||||||
var client = new XMLHttpRequest();
|
var client = new XMLHttpRequest();
|
||||||
client.open("GET", url, false);
|
client.open("GET", url, false);
|
||||||
client.setRequestHeader("Content-Type", "text/plain");
|
client.setRequestHeader("Content-Type", "text/plain");
|
||||||
|
|
|
@ -11,21 +11,19 @@
|
||||||
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
|
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
|
||||||
version="2.4">
|
version="2.4">
|
||||||
<display-name>Data Delivery Web Services</display-name>
|
<display-name>Data Delivery Web Services</display-name>
|
||||||
|
|
||||||
<context-param>
|
<context-param>
|
||||||
<param-name>webAppRootKey</param-name>
|
<param-name>webAppRootKey</param-name>
|
||||||
<param-value>registryEbxml</param-value>
|
<param-value>registryEbxml</param-value>
|
||||||
</context-param>
|
</context-param>
|
||||||
|
|
||||||
<context-param>
|
<context-param>
|
||||||
<param-name>contextConfigLocation</param-name>
|
<param-name>contextConfigLocation</param-name>
|
||||||
<param-value>/webServiceBeans.xml</param-value>
|
<param-value>/webServiceBeans.xml</param-value>
|
||||||
</context-param>
|
</context-param>
|
||||||
|
|
||||||
<listener>
|
<listener>
|
||||||
<listener-class>
|
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
|
||||||
org.springframework.web.context.ContextLoaderListener
|
|
||||||
</listener-class>
|
|
||||||
</listener>
|
</listener>
|
||||||
|
|
||||||
<filter>
|
<filter>
|
||||||
|
@ -50,12 +48,16 @@
|
||||||
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
|
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
|
||||||
<init-param>
|
<init-param>
|
||||||
<param-name>static-welcome-file</param-name>
|
<param-name>static-welcome-file</param-name>
|
||||||
<param-value>/RegistryUserMenu.html</param-value>
|
<param-value>/registry/RegistryInterface.html</param-value>
|
||||||
</init-param>
|
</init-param>
|
||||||
<init-param>
|
<init-param>
|
||||||
<param-name>static-resources-list</param-name>
|
<param-name>static-resources-list</param-name>
|
||||||
<param-value>.*\.html .*\.js .*\.css</param-value>
|
<param-value>.*\.html .*\.js .*\.css</param-value>
|
||||||
</init-param>
|
</init-param>
|
||||||
|
<init-param>
|
||||||
|
<param-name>disable-address-updates</param-name>
|
||||||
|
<param-value>true</param-value>
|
||||||
|
</init-param>
|
||||||
<load-on-startup>1</load-on-startup>
|
<load-on-startup>1</load-on-startup>
|
||||||
</servlet>
|
</servlet>
|
||||||
|
|
||||||
|
|
|
@ -261,7 +261,7 @@ function enableElement(elemName){
|
||||||
*/
|
*/
|
||||||
function splitArray(data){
|
function splitArray(data){
|
||||||
if (data == null){
|
if (data == null){
|
||||||
return new Array();
|
return new Array();
|
||||||
}else{
|
}else{
|
||||||
var tokens = String(data).split(",")
|
var tokens = String(data).split(",")
|
||||||
return tokens
|
return tokens
|
||||||
|
@ -271,7 +271,7 @@ function splitArray(data){
|
||||||
/*
|
/*
|
||||||
* Adds an entry into the select box with the provided name
|
* Adds an entry into the select box with the provided name
|
||||||
*/
|
*/
|
||||||
function addOptionToList(selectBoxName,text,value){
|
function addOptionToList(selectBoxName,text,value){
|
||||||
var selectBox = document.getElementById(selectBoxName)
|
var selectBox = document.getElementById(selectBoxName)
|
||||||
var optn = document.createElement("OPTION");
|
var optn = document.createElement("OPTION");
|
||||||
optn.text = text;
|
optn.text = text;
|
||||||
|
@ -279,6 +279,19 @@ function addOptionToList(selectBoxName,text,value){
|
||||||
selectBox.options.add(optn);
|
selectBox.options.add(optn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Removes an entry from the select box with the provided name
|
||||||
|
*/
|
||||||
|
function removeOptionFromList(selectBoxName,value){
|
||||||
|
var selectBox = document.getElementById(selectBoxName)
|
||||||
|
for(var i = 0; i < selectBox.options.length;i++){
|
||||||
|
if(selectBox.options[i].value == value){
|
||||||
|
selectBox.options.remove(selectBox.options[i])
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Sets the currently selected index of a select box element with
|
* Sets the currently selected index of a select box element with
|
||||||
* the given name
|
* the given name
|
||||||
|
@ -916,5 +929,4 @@ Array.prototype.contains = function(item){
|
||||||
return this.indexOf(item)!=-1
|
return this.indexOf(item)!=-1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -51,13 +51,14 @@ Date Ticket# Engineer Description
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||||
|
<script type="text/javascript" src='/registry/registryUtil.js'></script>
|
||||||
<script type="text/javascript" src='/registry/services/query/queryUtil.js'></script>
|
<script type="text/javascript" src='/registry/services/query/queryUtil.js'></script>
|
||||||
<title>EDEX EBXML Registry Interface</title>
|
<title>EDEX EBXML Registry Interface</title>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<FRAMESET cols="15%, 85%">
|
<FRAMESET cols="15%, 85%">
|
||||||
<FRAME id="navFram" name="navFrame" src=navigation.html>
|
<FRAME id="navFram" name="navFrame" src=/registry/navigation.html>
|
||||||
<FRAME id="actionFrame" name="actionFrame" src="services/query/Query.html">
|
<FRAME id="actionFrame" name="actionFrame" src="/registry/services/query/Query.html">
|
||||||
</FRAMESET>
|
</FRAMESET>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,207 @@
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<style type="text/css">
|
||||||
|
span {font-weight:bold;}
|
||||||
|
a {font-weight:bold;}
|
||||||
|
td {width:200px; background: #A9A9A9;}
|
||||||
|
th {width:200px; background: #A9A9A9;}
|
||||||
|
button {width:190px;}
|
||||||
|
input{width:300px;}
|
||||||
|
table {border:0;}
|
||||||
|
select {width:200px;}
|
||||||
|
body { font-family: Helvetica;
|
||||||
|
margin-left: 75px;
|
||||||
|
margin-right: 75px;
|
||||||
|
background: #D3D3D3;}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||||
|
<script type="text/javascript" src='/registry/registryUtil.js'></script>
|
||||||
|
<script type="text/javascript" src='/dataDeliveryUtil.js'></script>
|
||||||
|
<title>Federation Status</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body onload="populate()">
|
||||||
|
<h3>Federation Status</h3>
|
||||||
|
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td>Federated:</td>
|
||||||
|
<td><span id="federatedSpan">[Unknown]</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Processing Subscriptions:</td>
|
||||||
|
<td><span id="processSubscriptionsSpan">[Unknown]</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>My Registry ID:</td>
|
||||||
|
<td><span id="myRegistryIdSpan">[Unknown]</span></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<br><br>
|
||||||
|
|
||||||
|
<table border ="1">
|
||||||
|
<tr>
|
||||||
|
<td>Resubmit Subscriptions To:</td>
|
||||||
|
<td><select id="resubmitSubsToRegistrySelect"></select></td>
|
||||||
|
<td style='width:90px'><button type="button" style='width:90px' onclick='resubmitSubs()'>Resubmit</button></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Synchronize with Registry:</td>
|
||||||
|
<td><select id="syncWithRegistrySelect"></select></td>
|
||||||
|
<td style='width:90px'><button type="button" style='width:90px' onclick="sync()">Sync</button></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Subscribe To Registry:</td>
|
||||||
|
<td><select id="subscribeToRegistrySelect"></select></td>
|
||||||
|
<td style='width:90px'><button type="button" style='width:90px' onclick="subscribe()">Subscribe</button></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Unsubscribe From Registry:</td>
|
||||||
|
<td><select id="unsubscribeFromRegistrySelect"></select></td>
|
||||||
|
<td style='width:90px'><button type="button" style='width:90px' onclick="unsubscribe()">Unsubscribe</button></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<b>My Registry is Subscribed To:</b>
|
||||||
|
<span id="subscribedToRegistriesSpan"></span>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<b>Registries Subscribing to My Registry:</b>
|
||||||
|
<span id="subscribedToRegistries"></span>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<b>Federation Members:<b>
|
||||||
|
<span id="federationMembersSpan"></span>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<b>Object Types Currently Replicated:</b>
|
||||||
|
<span id="replicatedObjectListSpan"></span>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
<script language="JavaScript">
|
||||||
|
|
||||||
|
function subscribe(){
|
||||||
|
var registryId = getComboValue("subscribeToRegistrySelect")
|
||||||
|
callRestService("dataDelivery/status/subscribeToRegistry",registryId);
|
||||||
|
location.reload(false)
|
||||||
|
}
|
||||||
|
|
||||||
|
function resubmitSubs(){
|
||||||
|
var registryId = getComboValue("resubmitSubsToRegistrySelect")
|
||||||
|
callRestService("dataDelivery/status/subscribeToRegistry",registryId);
|
||||||
|
}
|
||||||
|
|
||||||
|
function unsubscribe(){
|
||||||
|
var registryId = getComboValue("unsubscribeFromRegistrySelect")
|
||||||
|
callRestService("dataDelivery/status/unsubscribeFromRegistry",registryId);
|
||||||
|
location.reload(false)
|
||||||
|
}
|
||||||
|
|
||||||
|
function sync(){
|
||||||
|
var registryId = getComboValue("syncWithRegistrySelect")
|
||||||
|
callRestService("dataDelivery/status/syncWithRegistry",registryId);
|
||||||
|
}
|
||||||
|
|
||||||
|
function populate(){
|
||||||
|
var isFederated = callRestService("dataDelivery/status/isFederated")
|
||||||
|
document.getElementById("federatedSpan").innerHTML=isFederated
|
||||||
|
document.getElementById("processSubscriptionsSpan").innerHTML=callRestService("dataDelivery/status/isProcessingSubscriptions")
|
||||||
|
if(isFederated == "true"){
|
||||||
|
var myRegistryId=callRestService("dataDelivery/status/getMyRegistryInfo").split("\n")[0].split(",")[0]
|
||||||
|
document.getElementById("myRegistryIdSpan").innerHTML=myRegistryId
|
||||||
|
var subscriptionCandidates = new Array();
|
||||||
|
var memberHTML = "<table border='1'><tr><th>Site</th><th>Base URL</th><th>Conformance Profile</th><th>Specification Version</th></tr>"
|
||||||
|
var registries = callRestService("dataDelivery/status/getFederationMembers").split("\n")
|
||||||
|
var federationMembers = new Array()
|
||||||
|
var subscribedTo=new Array()
|
||||||
|
var subscribedFrom=new Array()
|
||||||
|
for(var i = 0; i < registries.length-1;i++){
|
||||||
|
var tokens = registries[i].split(",")
|
||||||
|
memberHTML+="<tr>"
|
||||||
|
memberHTML+="<td>"+tokens[0]+"</td>"
|
||||||
|
memberHTML+="<td>"+tokens[1]+"</td>"
|
||||||
|
memberHTML+="<td>"+tokens[2]+"</td>"
|
||||||
|
memberHTML+="<td>"+tokens[3]+"</td>"
|
||||||
|
memberHTML+="</tr>"
|
||||||
|
federationMembers[i]=tokens[0]
|
||||||
|
}
|
||||||
|
memberHTML+="</table>"
|
||||||
|
document.getElementById("federationMembersSpan").innerHTML=memberHTML
|
||||||
|
|
||||||
|
memberHTML = "<table border='1'><tr><th>Site</th><th>Base URL</th><th>Conformance Profile</th><th>Specification Version</th></tr>"
|
||||||
|
registries = callRestService("dataDelivery/status/getRegistriesSubscribedTo").split("\n")
|
||||||
|
for(var i = 0; i < registries.length-1;i++){
|
||||||
|
var tokens = registries[i].split(",")
|
||||||
|
memberHTML+="<tr>"
|
||||||
|
memberHTML+="<td>"+tokens[0]+"</td>"
|
||||||
|
memberHTML+="<td>"+tokens[1]+"</td>"
|
||||||
|
memberHTML+="<td>"+tokens[2]+"</td>"
|
||||||
|
memberHTML+="<td>"+tokens[3]+"</td>"
|
||||||
|
memberHTML+="</tr>"
|
||||||
|
subscribedTo[i] = tokens[0]
|
||||||
|
}
|
||||||
|
memberHTML+="</table>"
|
||||||
|
document.getElementById("subscribedToRegistriesSpan").innerHTML=memberHTML
|
||||||
|
|
||||||
|
memberHTML = "<table border='1'><tr><th>Site</th><th>Base URL</th><th>Conformance Profile</th><th>Specification Version</th></tr>"
|
||||||
|
registries = callRestService("dataDelivery/status/getRegistrySubscribing").split("\n")
|
||||||
|
for(var i = 0; i < registries.length-1;i++){
|
||||||
|
var tokens = registries[i].split(",")
|
||||||
|
memberHTML+="<tr>"
|
||||||
|
memberHTML+="<td>"+tokens[0]+"</td>"
|
||||||
|
memberHTML+="<td>"+tokens[1]+"</td>"
|
||||||
|
memberHTML+="<td>"+tokens[2]+"</td>"
|
||||||
|
memberHTML+="<td>"+tokens[3]+"</td>"
|
||||||
|
memberHTML+="</tr>"
|
||||||
|
subscribedFrom[i]=tokens[0]
|
||||||
|
}
|
||||||
|
memberHTML+="</table>"
|
||||||
|
document.getElementById("subscribedToRegistries").innerHTML=memberHTML
|
||||||
|
|
||||||
|
var objectTypes = callRestService("dataDelivery/status/getObjectTypesReplicated").split("\n")
|
||||||
|
var objectTypeHTML = "<table border='1'><tr><th style='width:30px;'></th><th>Object Type</th></tr>"
|
||||||
|
for(var i = 0; i < objectTypes.length-1;i++){
|
||||||
|
objectTypeHTML+="<tr>"
|
||||||
|
objectTypeHTML+="<td style='width:30px;'>"+(i+1)+"</td>"
|
||||||
|
objectTypeHTML+="<td>"+objectTypes[i]+"</td>"
|
||||||
|
objectTypeHTML+="</tr>"
|
||||||
|
}
|
||||||
|
|
||||||
|
for(var i = 0; i < federationMembers.length;i++){
|
||||||
|
var member=federationMembers[i]
|
||||||
|
if(subscribedTo.indexOf(member)== -1 && member!=myRegistryId){
|
||||||
|
addOptionToList("subscribeToRegistrySelect",member,member)
|
||||||
|
}
|
||||||
|
if(member!=myRegistryId){
|
||||||
|
addOptionToList("syncWithRegistrySelect",member,member)
|
||||||
|
}
|
||||||
|
if(subscribedTo.indexOf(member) != -1){
|
||||||
|
addOptionToList("unsubscribeFromRegistrySelect",member,member)
|
||||||
|
addOptionToList("resubmitSubsToRegistrySelect",member,member)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
objectTypeHTML+="</table>";
|
||||||
|
document.getElementById("replicatedObjectListSpan").innerHTML=objectTypeHTML
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</html>
|
|
@ -10,11 +10,11 @@ an export license or other authorization.
|
||||||
|
|
||||||
Contractor Name: Raytheon Company
|
Contractor Name: Raytheon Company
|
||||||
Contractor Address: 6825 Pine Street, Suite 340
|
Contractor Address: 6825 Pine Street, Suite 340
|
||||||
Mail Stop B8
|
Mail Stop B8
|
||||||
Omaha, NE 68106
|
Omaha, NE 68106
|
||||||
402.291.0100
|
402.291.0100
|
||||||
|
|
||||||
See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||||
further licensing information.
|
further licensing information.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@ Date Ticket# Engineer Description
|
||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<style type="text/css">
|
<style type="text/css">
|
||||||
a {font-weight:bold;}
|
a {font-weight:bold;}
|
||||||
td {width:175px;}
|
td {width:175px;}
|
||||||
button {width:190px;}
|
button {width:190px;}
|
||||||
|
@ -48,15 +48,18 @@ Date Ticket# Engineer Description
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||||
|
<script type="text/javascript" src='/registry/registryUtil.js'></script>
|
||||||
<script type="text/javascript" src='/registry/services/query/queryUtil.js'></script>
|
<script type="text/javascript" src='/registry/services/query/queryUtil.js'></script>
|
||||||
<title>NAVIGATION LINKS</title>
|
<title>NAVIGATION LINKS</title>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<a href="services/query/Query.html" target="actionFrame">Query Interface</a>
|
<a href="/registry/services/query/Query.html" target="actionFrame">Query Interface</a>
|
||||||
<br>
|
<br>
|
||||||
<a href="../RegistrySubscriptionBackup.html" target="actionFrame">Subscription Backup</a>
|
<a href="/RegistrySubscriptionBackup.html" target="actionFrame">Subscription Backup</a>
|
||||||
|
<br>
|
||||||
|
<a href="/registry/federation/status.html" target="actionFrame">Federation Status</a>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
|
@ -0,0 +1,21 @@
|
||||||
|
|
||||||
|
|
||||||
|
function callRestService(url,arg){
|
||||||
|
var url = "http://"+window.location.host+"/"+url
|
||||||
|
if(arg != null){
|
||||||
|
url+="/"+arg;
|
||||||
|
}
|
||||||
|
var client = new XMLHttpRequest();
|
||||||
|
client.open("GET", url, false);
|
||||||
|
client.setRequestHeader("Content-Type", "text/plain");
|
||||||
|
client.send();
|
||||||
|
return client.responseText
|
||||||
|
}
|
||||||
|
|
||||||
|
function callDataAccessServiceWithArg(func,arg){
|
||||||
|
return callRestService("dataDelivery/dataAccess/"+func+"/"+arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
function callDataAccessService(func){
|
||||||
|
return callRestService("dataDelivery/dataAccess/"+func);
|
||||||
|
}
|
|
@ -48,6 +48,7 @@ Date Ticket# Engineer Description
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||||
|
<script type="text/javascript" src='/registry/registryUtil.js'></script>
|
||||||
<script type="text/javascript" src='/registry/services/query/queryUtil.js'></script>
|
<script type="text/javascript" src='/registry/services/query/queryUtil.js'></script>
|
||||||
<title>Registry Query Interface</title>
|
<title>Registry Query Interface</title>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
* an export license or other authorization.
|
* an export license or other authorization.
|
||||||
*
|
*
|
||||||
* Contractor Name: Raytheon Company
|
* Contractor Name: Raytheon Company
|
||||||
* Contractor Address: 6825 Pine Street, Suite 340
|
* Contractor Address: 6825 Pine Street, Suite 340
|
||||||
* Mail Stop B8
|
* Mail Stop B8
|
||||||
* Omaha, NE 68106
|
* Omaha, NE 68106
|
||||||
* 402.291.0100
|
* 402.291.0100
|
||||||
|
@ -34,12 +34,12 @@
|
||||||
* @author bphillip
|
* @author bphillip
|
||||||
* @version 1
|
* @version 1
|
||||||
*/
|
*/
|
||||||
function getValidQueryTypes(){
|
function getValidQueryTypes(){
|
||||||
var tokens = callDataAccessService("getQueries","").split("\n")
|
var tokens = callDataAccessService("getQueries").split("\n")
|
||||||
var selectBox = document.getElementById("queryTypeInput")
|
var selectBox = document.getElementById("queryTypeInput")
|
||||||
for(var i=0;i<tokens.length;i++){
|
for(var i=0;i<tokens.length;i++){
|
||||||
if(tokens[i].length != 0){
|
if(tokens[i].length != 0){
|
||||||
var textTokens = tokens[i].split(":");
|
var textTokens = tokens[i].split(":");
|
||||||
var optn = document.createElement("OPTION");
|
var optn = document.createElement("OPTION");
|
||||||
optn.text = textTokens[textTokens.length-1];
|
optn.text = textTokens[textTokens.length-1];
|
||||||
optn.value = tokens[i];
|
optn.value = tokens[i];
|
||||||
|
@ -52,7 +52,7 @@
|
||||||
function getQueryParameters(){
|
function getQueryParameters(){
|
||||||
var selectBox = document.getElementById("queryTypeInput")
|
var selectBox = document.getElementById("queryTypeInput")
|
||||||
var value = selectBox.options[selectBox.selectedIndex].value
|
var value = selectBox.options[selectBox.selectedIndex].value
|
||||||
var responseTokens = callDataAccessService("getParametersForQuery",value).split("\n")
|
var responseTokens = callDataAccessServiceWithArg("getParametersForQuery",value).split("\n")
|
||||||
|
|
||||||
var gen = "<table>"
|
var gen = "<table>"
|
||||||
var paramType=""
|
var paramType=""
|
||||||
|
@ -83,22 +83,4 @@
|
||||||
}
|
}
|
||||||
gen+="</table><br><input type=\"submit\" value=\"Submit\"/>"
|
gen+="</table><br><input type=\"submit\" value=\"Submit\"/>"
|
||||||
document.getElementById("querySpecificSpan").innerHTML = gen
|
document.getElementById("querySpecificSpan").innerHTML = gen
|
||||||
}
|
}
|
||||||
|
|
||||||
function callRestService(url,arg){
|
|
||||||
var url = "http://"+url+"/"+arg;
|
|
||||||
var client = new XMLHttpRequest();
|
|
||||||
client.open("GET", url, false);
|
|
||||||
client.setRequestHeader("Content-Type", "text/plain");
|
|
||||||
client.send();
|
|
||||||
return client.responseText
|
|
||||||
}
|
|
||||||
|
|
||||||
function callDataAccessService(func,arg){
|
|
||||||
var url = "http://"+window.location.host+"/rest/dataAccess/"+func+"/"+arg;
|
|
||||||
var client = new XMLHttpRequest();
|
|
||||||
client.open("GET", url, false);
|
|
||||||
client.setRequestHeader("Content-Type", "text/plain");
|
|
||||||
client.send();
|
|
||||||
return client.responseText
|
|
||||||
}
|
|
|
@ -8,10 +8,12 @@
|
||||||
http://cxf.apache.org/jaxrs
|
http://cxf.apache.org/jaxrs
|
||||||
http://cxf.apache.org/schemas/jaxrs.xsd">
|
http://cxf.apache.org/schemas/jaxrs.xsd">
|
||||||
|
|
||||||
|
<import resource="classpath:META-INF/cxf/cxf.xml" />
|
||||||
|
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
|
||||||
|
|
||||||
<import resource="file:///${edex.home}/conf/spring/edex-db.xml" />
|
<import resource="file:///${edex.home}/conf/spring/edex-db.xml" />
|
||||||
<import resource="classpath:res/spring/eventbus-common.xml" />
|
<import resource="classpath:res/spring/eventbus-common.xml" />
|
||||||
<import resource="classpath:res/spring/ebxml.xml" />
|
<import resource="classpath:res/spring/ebxml.xml" />
|
||||||
<import resource="classpath:res/spring/ebxml-webservices.xml" />
|
|
||||||
<import resource="classpath:res/spring/ebxml-validator-plugins.xml" />
|
<import resource="classpath:res/spring/ebxml-validator-plugins.xml" />
|
||||||
<import resource="classpath:res/spring/ebxml-querytypes.xml" />
|
<import resource="classpath:res/spring/ebxml-querytypes.xml" />
|
||||||
<import resource="classpath:res/spring/ebxml-registry-dao.xml" />
|
<import resource="classpath:res/spring/ebxml-registry-dao.xml" />
|
||||||
|
@ -20,12 +22,9 @@
|
||||||
<import resource="classpath:res/spring/ebxml-thrift-client.xml" />
|
<import resource="classpath:res/spring/ebxml-thrift-client.xml" />
|
||||||
<import resource="classpath:res/spring/ebxml-xacml.xml" />
|
<import resource="classpath:res/spring/ebxml-xacml.xml" />
|
||||||
<import resource="classpath:res/spring/ebxml-impl.xml" />
|
<import resource="classpath:res/spring/ebxml-impl.xml" />
|
||||||
|
<import resource="classpath*:res/spring/ebxml-customQueryPlugin.xml"/>
|
||||||
<import resource="classpath:META-INF/cxf/cxf.xml" />
|
<import resource="classpath:res/spring/ebxml-webservices.xml" />
|
||||||
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
|
<import resource="classpath*:res/spring/webservices.xml"/>
|
||||||
|
|
||||||
<bean id="webServiceInInterceptor"
|
|
||||||
class="com.raytheon.uf.edex.registry.ebxml.services.RegistryServiceInInterceptor" />
|
|
||||||
|
|
||||||
<bean id="QueryServiceWrapper"
|
<bean id="QueryServiceWrapper"
|
||||||
class="com.raytheon.uf.edex.registry.ebxml.services.query.QueryManagerImplWrapper">
|
class="com.raytheon.uf.edex.registry.ebxml.services.query.QueryManagerImplWrapper">
|
||||||
|
@ -48,17 +47,6 @@
|
||||||
<constructor-arg ref="catalogerServiceImpl" />
|
<constructor-arg ref="catalogerServiceImpl" />
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<jaxws:server id="RegistryRequest"
|
|
||||||
serviceClass="com.raytheon.uf.common.registry.IRegistryRequestService"
|
|
||||||
address="/registryRequest">
|
|
||||||
<jaxws:inInterceptors>
|
|
||||||
<ref bean="webServiceInInterceptor" />
|
|
||||||
</jaxws:inInterceptors>
|
|
||||||
<jaxws:serviceBean>
|
|
||||||
<ref bean="routeWrapper" />
|
|
||||||
</jaxws:serviceBean>
|
|
||||||
</jaxws:server>
|
|
||||||
|
|
||||||
<!-- SOAP Service definitions -->
|
<!-- SOAP Service definitions -->
|
||||||
<jaxws:server id="QueryService" address="/queryManager">
|
<jaxws:server id="QueryService" address="/queryManager">
|
||||||
<jaxws:inInterceptors>
|
<jaxws:inInterceptors>
|
||||||
|
@ -107,13 +95,11 @@
|
||||||
<!-- End Soap Service Definitions -->
|
<!-- End Soap Service Definitions -->
|
||||||
|
|
||||||
<!-- REST Service Definitions -->
|
<!-- REST Service Definitions -->
|
||||||
<jaxrs:server id="registryRestServices" address="/">
|
<jaxrs:server id="registryRestServices" address="/rest">
|
||||||
<jaxrs:inInterceptors>
|
<jaxrs:inInterceptors>
|
||||||
<ref bean="webServiceInInterceptor" />
|
<ref bean="webServiceInInterceptor" />
|
||||||
</jaxrs:inInterceptors>
|
</jaxrs:inInterceptors>
|
||||||
<jaxrs:serviceBeans>
|
<jaxrs:serviceBeans>
|
||||||
<ref bean="registryDataAccessService" />
|
|
||||||
<ref bean="registryAvailabilityService" />
|
|
||||||
<ref bean="registryObjectsRestService" />
|
<ref bean="registryObjectsRestService" />
|
||||||
<ref bean="repositoryObjectsRestService" />
|
<ref bean="repositoryObjectsRestService" />
|
||||||
<ref bean="queryProtocolRestService" />
|
<ref bean="queryProtocolRestService" />
|
||||||
|
@ -123,5 +109,4 @@
|
||||||
</jaxrs:serviceBeans>
|
</jaxrs:serviceBeans>
|
||||||
</jaxrs:server>
|
</jaxrs:server>
|
||||||
<!-- End REST Endpoint definitions -->
|
<!-- End REST Endpoint definitions -->
|
||||||
|
|
||||||
</beans>
|
</beans>
|
|
@ -73,13 +73,6 @@
|
||||||
version="0.0.0"
|
version="0.0.0"
|
||||||
unpack="false"/>
|
unpack="false"/>
|
||||||
|
|
||||||
<plugin
|
|
||||||
id="gov.noaa.nws.ncep.common.dataplugin.ncccfp"
|
|
||||||
download-size="0"
|
|
||||||
install-size="0"
|
|
||||||
version="0.0.0"
|
|
||||||
unpack="false"/>
|
|
||||||
|
|
||||||
<plugin
|
<plugin
|
||||||
id="gov.noaa.nws.ncep.common.dataplugin.ncscat"
|
id="gov.noaa.nws.ncep.common.dataplugin.ncscat"
|
||||||
download-size="0"
|
download-size="0"
|
||||||
|
@ -185,13 +178,6 @@
|
||||||
version="0.0.0"
|
version="0.0.0"
|
||||||
unpack="false"/>
|
unpack="false"/>
|
||||||
|
|
||||||
<plugin
|
|
||||||
id="gov.noaa.nws.ncep.edex.plugin.ncccfp"
|
|
||||||
download-size="0"
|
|
||||||
install-size="0"
|
|
||||||
version="0.0.0"
|
|
||||||
unpack="false"/>
|
|
||||||
|
|
||||||
<plugin
|
<plugin
|
||||||
id="gov.noaa.nws.ncep.edex.plugin.ncgrib"
|
id="gov.noaa.nws.ncep.edex.plugin.ncgrib"
|
||||||
download-size="0"
|
download-size="0"
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<classpath>
|
|
||||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
|
|
||||||
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
|
|
||||||
<classpathentry kind="src" path="src"/>
|
|
||||||
<classpathentry kind="output" path="bin"/>
|
|
||||||
</classpath>
|
|
|
@ -1,28 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<projectDescription>
|
|
||||||
<name>gov.noaa.nws.ncep.common.dataplugin.ncccfp</name>
|
|
||||||
<comment></comment>
|
|
||||||
<projects>
|
|
||||||
</projects>
|
|
||||||
<buildSpec>
|
|
||||||
<buildCommand>
|
|
||||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>org.eclipse.pde.ManifestBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>org.eclipse.pde.SchemaBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
</buildSpec>
|
|
||||||
<natures>
|
|
||||||
<nature>org.eclipse.pde.PluginNature</nature>
|
|
||||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
|
||||||
</natures>
|
|
||||||
</projectDescription>
|
|
|
@ -1,7 +0,0 @@
|
||||||
#Wed May 26 11:01:26 EDT 2010
|
|
||||||
eclipse.preferences.version=1
|
|
||||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
|
|
||||||
org.eclipse.jdt.core.compiler.compliance=1.6
|
|
||||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
|
||||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
|
||||||
org.eclipse.jdt.core.compiler.source=1.6
|
|
|
@ -1,16 +0,0 @@
|
||||||
Manifest-Version: 1.0
|
|
||||||
Bundle-ManifestVersion: 2
|
|
||||||
Bundle-Name: Ncccfp Plug-in
|
|
||||||
Bundle-SymbolicName: gov.noaa.nws.ncep.common.dataplugin.ncccfp
|
|
||||||
Bundle-Version: 1.0.0.qualifier
|
|
||||||
Bundle-Vendor: NOAA/NWS/NCEP/NCO/SIB
|
|
||||||
Eclipse-RegisterBuddy: com.raytheon.edex.common, com.raytheon.uf.common.serialization
|
|
||||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
|
|
||||||
Require-Bundle: com.raytheon.edex.common;bundle-version="1.11.31",
|
|
||||||
javax.persistence;bundle-version="1.0.0",
|
|
||||||
gov.noaa.nws.ncep.common;bundle-version="1.0.0"
|
|
||||||
Import-Package: com.vividsolutions.jts.geom,
|
|
||||||
gov.noaa.nws.ncep.edex.common.dao,
|
|
||||||
org.opengis.referencing.crs
|
|
||||||
Export-Package: gov.noaa.nws.ncep.common.dataplugin.ncccfp,
|
|
||||||
gov.noaa.nws.ncep.common.dataplugin.ncccfp.dao
|
|
|
@ -1 +0,0 @@
|
||||||
gov.noaa.nws.ncep.common.dataplugin.ncccfp.NcccfpRecord
|
|
|
@ -1,4 +0,0 @@
|
||||||
source.. = src/
|
|
||||||
output.. = bin/
|
|
||||||
bin.includes = META-INF/,\
|
|
||||||
.
|
|
|
@ -1,117 +0,0 @@
|
||||||
|
|
||||||
package gov.noaa.nws.ncep.common.dataplugin.ncccfp;
|
|
||||||
|
|
||||||
import javax.persistence.Column;
|
|
||||||
import javax.persistence.Embeddable;
|
|
||||||
import javax.xml.bind.annotation.XmlAccessType;
|
|
||||||
import javax.xml.bind.annotation.XmlAccessorType;
|
|
||||||
import javax.xml.bind.annotation.XmlElement;
|
|
||||||
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
|
|
||||||
|
|
||||||
import org.hibernate.annotations.Type;
|
|
||||||
import org.opengis.referencing.crs.CoordinateReferenceSystem;
|
|
||||||
|
|
||||||
import com.raytheon.uf.common.dataplugin.annotations.DataURI;
|
|
||||||
import com.raytheon.uf.common.geospatial.ISpatialObject;
|
|
||||||
import com.raytheon.uf.common.serialization.adapters.GeometryAdapter;
|
|
||||||
import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
|
|
||||||
import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
|
|
||||||
import com.vividsolutions.jts.geom.Geometry;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* NCCCFP Location
|
|
||||||
*
|
|
||||||
* <pre>
|
|
||||||
* SOFTWARE HISTORY
|
|
||||||
* Date Ticket# Engineer Description
|
|
||||||
* ------------ ---------- ----------- --------------------------
|
|
||||||
* 10/05/09 155 F. J. Yen From Raytheon's CCFP; mod for NCCCFP. Fix for LINESTRING:
|
|
||||||
* Change type of geometry from Polygon to Geometry.
|
|
||||||
* 12/14/09 155 F. J. Yen Updated from to11d3 to to11d6 (changed import of
|
|
||||||
* IspatialObject package to ...geospatial.ISpatialObject)
|
|
||||||
* 05/26/10 155 F. J. Yen Refactored from plugin for migration to to11dr11
|
|
||||||
* 07/16/13 2181 bsteffen Convert geometry types to use hibernate-spatial
|
|
||||||
*
|
|
||||||
* </pre>
|
|
||||||
*
|
|
||||||
* @author fjyen
|
|
||||||
* @version 1
|
|
||||||
*/
|
|
||||||
@Embeddable
|
|
||||||
@XmlAccessorType(XmlAccessType.NONE)
|
|
||||||
@DynamicSerialize
|
|
||||||
public class NcccfpLocation implements ISpatialObject {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = 8890315829188793187L;
|
|
||||||
|
|
||||||
@DataURI(position=0)
|
|
||||||
@Column(name = "location")
|
|
||||||
@Type(type = "org.hibernatespatial.GeometryUserType")
|
|
||||||
@XmlJavaTypeAdapter(value = GeometryAdapter.class)
|
|
||||||
@DynamicSerializeElement
|
|
||||||
private Geometry geometry;
|
|
||||||
|
|
||||||
@Column(length=600)
|
|
||||||
@DynamicSerializeElement
|
|
||||||
@XmlElement
|
|
||||||
private String locationAll;
|
|
||||||
|
|
||||||
@Column
|
|
||||||
@DynamicSerializeElement
|
|
||||||
@XmlElement
|
|
||||||
private double boxLat;
|
|
||||||
|
|
||||||
@Column
|
|
||||||
@DynamicSerializeElement
|
|
||||||
@XmlElement
|
|
||||||
private double boxLong;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CoordinateReferenceSystem getCrs() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Geometry getGeometry() {
|
|
||||||
return geometry;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Integer getNx() {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Integer getNy() {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getBoxLat() {
|
|
||||||
return boxLat;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setBoxLat(double boxLat) {
|
|
||||||
this.boxLat = boxLat;
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getBoxLong() {
|
|
||||||
return boxLong;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setBoxLong(double boxLong) {
|
|
||||||
this.boxLong = boxLong;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setGeometry(Geometry geometry) {
|
|
||||||
this.geometry = geometry;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLocationAll (String locationAll) {
|
|
||||||
this.locationAll = locationAll;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getLocationAll () {
|
|
||||||
return locationAll;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,347 +0,0 @@
|
||||||
package gov.noaa.nws.ncep.common.dataplugin.ncccfp;
|
|
||||||
|
|
||||||
import java.util.Calendar;
|
|
||||||
|
|
||||||
import javax.persistence.Access;
|
|
||||||
import javax.persistence.AccessType;
|
|
||||||
import javax.persistence.Column;
|
|
||||||
import javax.persistence.Entity;
|
|
||||||
import javax.persistence.SequenceGenerator;
|
|
||||||
import javax.persistence.Table;
|
|
||||||
import javax.persistence.UniqueConstraint;
|
|
||||||
import javax.xml.bind.annotation.XmlAccessType;
|
|
||||||
import javax.xml.bind.annotation.XmlAccessorType;
|
|
||||||
import javax.xml.bind.annotation.XmlAttribute;
|
|
||||||
import javax.xml.bind.annotation.XmlElement;
|
|
||||||
import javax.xml.bind.annotation.XmlRootElement;
|
|
||||||
|
|
||||||
import org.hibernate.annotations.Index;
|
|
||||||
|
|
||||||
import com.raytheon.uf.common.dataplugin.IDecoderGettable;
|
|
||||||
import com.raytheon.uf.common.dataplugin.PluginDataObject;
|
|
||||||
import com.raytheon.uf.common.dataplugin.annotations.DataURI;
|
|
||||||
import com.raytheon.uf.common.geospatial.ISpatialEnabled;
|
|
||||||
import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
|
|
||||||
import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* NC_CCFP Record
|
|
||||||
*
|
|
||||||
* <pre>
|
|
||||||
* SOFTWARE HISTORY
|
|
||||||
* Date Ticket# Engineer Description
|
|
||||||
* ------------ -------- ----------- --------------------------
|
|
||||||
* Oct 05, 2009 155 F. J. Yen From Raytheon's CCFP; mod for NC_CCFP
|
|
||||||
* May 26, 2010 155 F. J. Yen Refactored to dataplugin for
|
|
||||||
* migration to to11dr11
|
|
||||||
* Apr 04, 2013 1846 bkowal Added an index on refTime and forecastTime
|
|
||||||
* Apr 12, 2013 1857 bgonzale Added SequenceGenerator annotation.
|
|
||||||
* May 07, 2013 1869 bsteffen Remove dataURI column from
|
|
||||||
* PluginDataObject.
|
|
||||||
* Aug 30, 2013 2298 rjpeter Make getPluginName abstract
|
|
||||||
* </pre>
|
|
||||||
*
|
|
||||||
* @author F. J. Yen
|
|
||||||
* @version 1
|
|
||||||
*/
|
|
||||||
@Entity
|
|
||||||
@SequenceGenerator(initialValue = 1, name = PluginDataObject.ID_GEN, sequenceName = "ncccfpseq")
|
|
||||||
@Table(name = "ncccfp", uniqueConstraints = { @UniqueConstraint(columnNames = { "dataURI" }) })
|
|
||||||
/*
|
|
||||||
* Both refTime and forecastTime are included in the refTimeIndex since
|
|
||||||
* forecastTime is unlikely to be used.
|
|
||||||
*/
|
|
||||||
@org.hibernate.annotations.Table(appliesTo = "ncccfp", indexes = { @Index(name = "ncccfp_refTimeIndex", columnNames = {
|
|
||||||
"refTime", "forecastTime" }) })
|
|
||||||
@XmlRootElement
|
|
||||||
@XmlAccessorType(XmlAccessType.NONE)
|
|
||||||
@DynamicSerialize
|
|
||||||
public class NcccfpRecord extends PluginDataObject implements ISpatialEnabled {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
@DataURI(position = 2)
|
|
||||||
@Column
|
|
||||||
@XmlAttribute
|
|
||||||
@DynamicSerializeElement
|
|
||||||
private Calendar issuetime;
|
|
||||||
|
|
||||||
@DataURI(position = 1)
|
|
||||||
@Column
|
|
||||||
@XmlAttribute
|
|
||||||
@DynamicSerializeElement
|
|
||||||
private Calendar validtime;
|
|
||||||
|
|
||||||
@Column(length = 8)
|
|
||||||
@XmlAttribute
|
|
||||||
@DynamicSerializeElement
|
|
||||||
private String producttype;
|
|
||||||
|
|
||||||
@Column
|
|
||||||
@XmlAttribute
|
|
||||||
@DynamicSerializeElement
|
|
||||||
private Integer coverage;
|
|
||||||
|
|
||||||
@Column
|
|
||||||
@XmlAttribute
|
|
||||||
@DynamicSerializeElement
|
|
||||||
private Integer conf;
|
|
||||||
|
|
||||||
@Column
|
|
||||||
@XmlAttribute
|
|
||||||
@DynamicSerializeElement
|
|
||||||
private Integer growth;
|
|
||||||
|
|
||||||
@Column
|
|
||||||
@XmlAttribute
|
|
||||||
@DynamicSerializeElement
|
|
||||||
private Integer tops;
|
|
||||||
|
|
||||||
@Column
|
|
||||||
@XmlAttribute
|
|
||||||
@DynamicSerializeElement
|
|
||||||
private Integer speed;
|
|
||||||
|
|
||||||
@Column
|
|
||||||
@XmlAttribute
|
|
||||||
@DynamicSerializeElement
|
|
||||||
private Integer direction;
|
|
||||||
|
|
||||||
@DataURI(position = 3)
|
|
||||||
@Column
|
|
||||||
@XmlAttribute
|
|
||||||
@DynamicSerializeElement
|
|
||||||
private Integer numPts;
|
|
||||||
|
|
||||||
@Column
|
|
||||||
@DynamicSerializeElement
|
|
||||||
@XmlElement
|
|
||||||
private Boolean canadaflag;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* locationUri contains up to the first seven coordinates. This is for
|
|
||||||
* making the dataURI unique. (It was suggested that it was highly unlikely
|
|
||||||
* that 7 coordinates would not be unique enough. The number of coordinates
|
|
||||||
* was reduced due to the limited length of the string dataURI)
|
|
||||||
*/
|
|
||||||
@DataURI(position = 4)
|
|
||||||
@Column(length = 150)
|
|
||||||
@XmlElement
|
|
||||||
@DynamicSerializeElement
|
|
||||||
private String locationUri;
|
|
||||||
|
|
||||||
private NcccfpLocation location;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Default Constructor
|
|
||||||
*/
|
|
||||||
public NcccfpRecord() {
|
|
||||||
}
|
|
||||||
|
|
||||||
// /**
|
|
||||||
// * Constructor.
|
|
||||||
// *
|
|
||||||
// * @param message
|
|
||||||
// * The text of the message
|
|
||||||
// */
|
|
||||||
// public NcccfpRecord(String message) {
|
|
||||||
// super(message);
|
|
||||||
// }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructs an ncccfp record from a dataURI
|
|
||||||
*
|
|
||||||
* @param uri
|
|
||||||
* The dataURI
|
|
||||||
* @param tableDef
|
|
||||||
* The table definition associated with this class
|
|
||||||
*/
|
|
||||||
public NcccfpRecord(String uri) {
|
|
||||||
super(uri);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IDecoderGettable getDecoderGettable() {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public java.util.Calendar getIssuetime() {
|
|
||||||
return issuetime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setIssuetime(java.util.Calendar issuetime) {
|
|
||||||
this.issuetime = issuetime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public java.util.Calendar getValidtime() {
|
|
||||||
return validtime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setValidtime(java.util.Calendar validtime) {
|
|
||||||
this.validtime = validtime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public java.lang.String getProducttype() {
|
|
||||||
return producttype;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setProducttype(java.lang.String producttype) {
|
|
||||||
this.producttype = producttype;
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getBoxLat() {
|
|
||||||
return location.getBoxLat();
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getBoxLong() {
|
|
||||||
return location.getBoxLong();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Boolean getCanadaflag() {
|
|
||||||
return canadaflag;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setCanadaflag(Boolean canadaflag) {
|
|
||||||
this.canadaflag = canadaflag;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the coverage
|
|
||||||
*/
|
|
||||||
public Integer getCoverage() {
|
|
||||||
return coverage;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param coverage
|
|
||||||
* the coverage to set
|
|
||||||
*/
|
|
||||||
public void setCoverage(Integer coverage) {
|
|
||||||
this.coverage = coverage;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the conf
|
|
||||||
*/
|
|
||||||
public Integer getConf() {
|
|
||||||
return conf;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param conf
|
|
||||||
* the conf to set
|
|
||||||
*/
|
|
||||||
public void setConf(Integer conf) {
|
|
||||||
this.conf = conf;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the growth
|
|
||||||
*/
|
|
||||||
public Integer getGrowth() {
|
|
||||||
return growth;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param growth
|
|
||||||
* the growth to set
|
|
||||||
*/
|
|
||||||
public void setGrowth(Integer growth) {
|
|
||||||
this.growth = growth;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the tops
|
|
||||||
*/
|
|
||||||
public Integer getTops() {
|
|
||||||
return tops;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param tops
|
|
||||||
* the tops to set
|
|
||||||
*/
|
|
||||||
public void setTops(Integer tops) {
|
|
||||||
this.tops = tops;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the speed
|
|
||||||
*/
|
|
||||||
public Integer getSpeed() {
|
|
||||||
return speed;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param speed
|
|
||||||
* the speed to set
|
|
||||||
*/
|
|
||||||
public void setSpeed(Integer speed) {
|
|
||||||
this.speed = speed;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the direction
|
|
||||||
*/
|
|
||||||
public Integer getDirection() {
|
|
||||||
return direction;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param direction
|
|
||||||
* the direction to set
|
|
||||||
*/
|
|
||||||
public void setDirection(Integer direction) {
|
|
||||||
this.direction = direction;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the number of points
|
|
||||||
*/
|
|
||||||
public Integer getNumPts() {
|
|
||||||
return numPts;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param numPts
|
|
||||||
* the number of points
|
|
||||||
*/
|
|
||||||
public void setNumPts(Integer numPts) {
|
|
||||||
this.numPts = numPts;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public NcccfpLocation getSpatialObject() {
|
|
||||||
return location;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getLocationUri() {
|
|
||||||
return locationUri;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLocationUri(String locationUri) {
|
|
||||||
this.locationUri = locationUri;
|
|
||||||
}
|
|
||||||
|
|
||||||
public NcccfpLocation getLocation() {
|
|
||||||
return location;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLocation(NcccfpLocation location) {
|
|
||||||
this.location = location;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Column
|
|
||||||
@Access(AccessType.PROPERTY)
|
|
||||||
public String getDataURI() {
|
|
||||||
return super.getDataURI();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getPluginName() {
|
|
||||||
return "ncccfp";
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,75 +0,0 @@
|
||||||
/**
|
|
||||||
* Set of DAO methods for NCCCFP data.
|
|
||||||
*
|
|
||||||
* <pre>
|
|
||||||
*
|
|
||||||
* SOFTWARE HISTORY
|
|
||||||
*
|
|
||||||
* Date Ticket# Engineer Description
|
|
||||||
* ------------ ----------- ----------- --------------------------
|
|
||||||
* 26/05/10 155 F. J. Yen Initial Coding for to11dr11 (Following one of RTN's DAO to refactor)
|
|
||||||
* </pre>
|
|
||||||
*
|
|
||||||
* @author fjyen
|
|
||||||
* @version 1.0
|
|
||||||
**/
|
|
||||||
package gov.noaa.nws.ncep.common.dataplugin.ncccfp.dao;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import gov.noaa.nws.ncep.common.dataplugin.ncccfp.NcccfpRecord;
|
|
||||||
import gov.noaa.nws.ncep.edex.common.dao.NcepDefaultPluginDao;
|
|
||||||
|
|
||||||
import com.raytheon.uf.common.dataplugin.PluginException;
|
|
||||||
import com.raytheon.uf.edex.database.DataAccessLayerException;
|
|
||||||
|
|
||||||
public class NcccfpDao extends NcepDefaultPluginDao {
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new ReccoDao
|
|
||||||
* @throws PluginException
|
|
||||||
*/
|
|
||||||
public NcccfpDao(String pluginName) throws PluginException {
|
|
||||||
super(pluginName);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieves a NCCCFP report using the datauri .
|
|
||||||
*
|
|
||||||
* @param dataURI
|
|
||||||
* The dataURI to match against.
|
|
||||||
* @return The report record if it exists.
|
|
||||||
*/
|
|
||||||
public NcccfpRecord queryByDataURI(String dataURI) {
|
|
||||||
NcccfpRecord report = null;
|
|
||||||
List<?> obs = null;
|
|
||||||
try {
|
|
||||||
obs = queryBySingleCriteria("dataURI", dataURI);
|
|
||||||
} catch (DataAccessLayerException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
if((obs != null)&&(obs.size() > 0)) {
|
|
||||||
report = (NcccfpRecord) obs.get(0);
|
|
||||||
}
|
|
||||||
return report;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Queries for to determine if a given data uri exists on the NCCCFP table.
|
|
||||||
*
|
|
||||||
* @param dataUri
|
|
||||||
* The DataURI to find.
|
|
||||||
* @return An array of objects. If not null, there should only be a single
|
|
||||||
* element.
|
|
||||||
*/
|
|
||||||
public Object[] queryDataUriColumn(final String dataUri) {
|
|
||||||
|
|
||||||
String sql = "select datauri from awips.ncccfp where datauri='"
|
|
||||||
+ dataUri + "';";
|
|
||||||
|
|
||||||
Object[] results = executeSQLQuery(sql);
|
|
||||||
|
|
||||||
return results;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,7 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<classpath>
|
|
||||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
|
|
||||||
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
|
|
||||||
<classpathentry kind="src" path="src"/>
|
|
||||||
<classpathentry kind="output" path="bin"/>
|
|
||||||
</classpath>
|
|
|
@ -1,28 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<projectDescription>
|
|
||||||
<name>gov.noaa.nws.ncep.edex.plugin.ncccfp</name>
|
|
||||||
<comment></comment>
|
|
||||||
<projects>
|
|
||||||
</projects>
|
|
||||||
<buildSpec>
|
|
||||||
<buildCommand>
|
|
||||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>org.eclipse.pde.ManifestBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>org.eclipse.pde.SchemaBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
</buildSpec>
|
|
||||||
<natures>
|
|
||||||
<nature>org.eclipse.pde.PluginNature</nature>
|
|
||||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
|
||||||
</natures>
|
|
||||||
</projectDescription>
|
|
|
@ -1,7 +0,0 @@
|
||||||
#Thu Mar 26 10:17:30 CDT 2009
|
|
||||||
eclipse.preferences.version=1
|
|
||||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
|
|
||||||
org.eclipse.jdt.core.compiler.compliance=1.6
|
|
||||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
|
||||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
|
||||||
org.eclipse.jdt.core.compiler.source=1.6
|
|
|
@ -1,18 +0,0 @@
|
||||||
Manifest-Version: 1.0
|
|
||||||
Bundle-ManifestVersion: 2
|
|
||||||
Bundle-Name: Nc_ccfp Plug-in
|
|
||||||
Bundle-SymbolicName: gov.noaa.nws.ncep.edex.plugin.ncccfp
|
|
||||||
Bundle-Version: 1.11.7.qualifier
|
|
||||||
Bundle-Vendor: AWIPS II Migration
|
|
||||||
Eclipse-RegisterBuddy: com.raytheon.uf.common.serialization, com.raytheon.edex.common
|
|
||||||
Require-Bundle: com.raytheon.edex.common,
|
|
||||||
com.raytheon.uf.edex.decodertools;bundle-version="1.0.0",
|
|
||||||
org.geotools,
|
|
||||||
javax.persistence,
|
|
||||||
com.raytheon.uf.common.localization;bundle-version="1.11.7",
|
|
||||||
gov.noaa.nws.ncep.common.dataplugin.ncccfp;bundle-version="1.0.0",
|
|
||||||
gov.noaa.nws.ncep.edex.common;bundle-version="1.0.0",
|
|
||||||
gov.noaa.nws.ncep.common;bundle-version="1.0.0"
|
|
||||||
Export-Package: gov.noaa.nws.ncep.edex.plugin.ncccfp.decoder
|
|
||||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
|
|
||||||
Import-Package: org.apache.commons.logging
|
|
|
@ -1,2 +0,0 @@
|
||||||
gov.noaa.nws.ncep.common.dataplugin.ncccfp.NcccfpRecord
|
|
||||||
gov.noaa.nws.ncep.common.dataplugin.ncccfp.NcccfpLocation
|
|
|
@ -1,5 +0,0 @@
|
||||||
source.. = src/
|
|
||||||
output.. = bin/
|
|
||||||
bin.includes = META-INF/,\
|
|
||||||
.,\
|
|
||||||
res/
|
|
|
@ -1,23 +0,0 @@
|
||||||
<beans
|
|
||||||
xmlns="http://www.springframework.org/schema/beans"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
|
|
||||||
|
|
||||||
|
|
||||||
<bean id="ncccfpPluginName" class="java.lang.String">
|
|
||||||
<constructor-arg type="java.lang.String" value="ncccfp" />
|
|
||||||
</bean>
|
|
||||||
|
|
||||||
<bean id="ncccfpProperties" class="com.raytheon.uf.common.dataplugin.PluginProperties">
|
|
||||||
<property name="pluginName" ref="ncccfpPluginName" />
|
|
||||||
<property name="pluginFQN" value="gov.noaa.nws.ncep.common.dataplugin.ncccfp" />
|
|
||||||
<property name="dao" value="gov.noaa.nws.ncep.common.dataplugin.ncccfp.dao.NcccfpDao" />
|
|
||||||
<property name="record" value="gov.noaa.nws.ncep.common.dataplugin.ncccfp.NcccfpRecord" />
|
|
||||||
</bean>
|
|
||||||
|
|
||||||
<bean factory-bean="pluginRegistry" factory-method="register">
|
|
||||||
<constructor-arg ref="ncccfpPluginName"/>
|
|
||||||
<constructor-arg ref="ncccfpProperties"/>
|
|
||||||
</bean>
|
|
||||||
|
|
||||||
</beans>
|
|
|
@ -1,68 +0,0 @@
|
||||||
<beans xmlns="http://www.springframework.org/schema/beans"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
|
|
||||||
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
|
|
||||||
|
|
||||||
<bean id="ncccfpDecoder" class="gov.noaa.nws.ncep.edex.plugin.ncccfp.decoder.NcccfpDecoder">
|
|
||||||
<constructor-arg ref="ncccfpPluginName"/>
|
|
||||||
</bean>
|
|
||||||
<bean id="ncccfpSeparator" class="gov.noaa.nws.ncep.edex.plugin.ncccfp.decoder.NcccfpSeparator" />
|
|
||||||
|
|
||||||
<bean id="ncccfpDistRegistry" factory-bean="distributionSrv"
|
|
||||||
factory-method="register">
|
|
||||||
<constructor-arg value="ncccfp" />
|
|
||||||
<constructor-arg value="jms-dist:queue:Ingest.ncccfp" />
|
|
||||||
</bean>
|
|
||||||
|
|
||||||
<bean id="ncccfpCamelRegistered" factory-bean="contextManager"
|
|
||||||
factory-method="register" depends-on="persistCamelRegistered">
|
|
||||||
<constructor-arg ref="ncccfp-camel"/>
|
|
||||||
</bean>
|
|
||||||
|
|
||||||
<camelContext id="ncccfp-camel"
|
|
||||||
xmlns="http://camel.apache.org/schema/spring"
|
|
||||||
errorHandlerRef="errorHandler"
|
|
||||||
autoStartup="false">
|
|
||||||
|
|
||||||
<endpoint id="ncccfpFileEndpoint" uri="file:${edex.home}/data/sbn/ncccfp?noop=true&idempotent=false" />
|
|
||||||
|
|
||||||
<route id="ncccfpFileConsumerRoute">
|
|
||||||
<from ref="ncccfpFileEndpoint" />
|
|
||||||
<bean ref="fileToString" />
|
|
||||||
<setHeader headerName="pluginName">
|
|
||||||
<constant>ncccfp</constant>
|
|
||||||
</setHeader>
|
|
||||||
<to uri="jms-durable:queue:Ingest.ncccfp" />
|
|
||||||
</route>
|
|
||||||
|
|
||||||
<!-- Begin Ncccfp routes -->
|
|
||||||
<route id="ncccfpIngestRoute">
|
|
||||||
<from uri="jms-durable:queue:Ingest.ncccfp" />
|
|
||||||
<setHeader headerName="pluginName">
|
|
||||||
<constant>ncccfp</constant>
|
|
||||||
</setHeader>
|
|
||||||
<doTry>
|
|
||||||
<pipeline>
|
|
||||||
<bean ref="stringToFile" />
|
|
||||||
<split streaming="true">
|
|
||||||
<method bean="ncccfpSeparator" method="separate" />
|
|
||||||
<doTry>
|
|
||||||
<pipeline>
|
|
||||||
<bean ref="ncccfpDecoder" method="decode" />
|
|
||||||
<to uri="direct-vm:indexAlert" />
|
|
||||||
</pipeline>
|
|
||||||
<doCatch>
|
|
||||||
<exception>java.lang.Throwable</exception>
|
|
||||||
<to uri="log:ncccfp?level=ERROR" />
|
|
||||||
</doCatch>
|
|
||||||
</doTry>
|
|
||||||
</split>
|
|
||||||
</pipeline>
|
|
||||||
<doCatch>
|
|
||||||
<exception>java.lang.Throwable</exception>
|
|
||||||
<to uri="log:ncccfp?level=ERROR" />
|
|
||||||
</doCatch>
|
|
||||||
</doTry>
|
|
||||||
</route>
|
|
||||||
</camelContext>
|
|
||||||
</beans>
|
|
|
@ -1,314 +0,0 @@
|
||||||
package gov.noaa.nws.ncep.edex.plugin.ncccfp.decoder;
|
|
||||||
|
|
||||||
import gov.noaa.nws.ncep.common.dataplugin.ncccfp.NcccfpLocation;
|
|
||||||
import gov.noaa.nws.ncep.common.dataplugin.ncccfp.NcccfpRecord;
|
|
||||||
|
|
||||||
import java.util.Calendar;
|
|
||||||
import java.util.regex.Matcher;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
import com.raytheon.edex.exception.DecoderException;
|
|
||||||
import com.raytheon.edex.plugin.AbstractDecoder;
|
|
||||||
import com.raytheon.uf.common.dataplugin.PluginDataObject;
|
|
||||||
import com.raytheon.uf.common.dataplugin.PluginException;
|
|
||||||
import com.raytheon.uf.common.time.DataTime;
|
|
||||||
import com.raytheon.uf.common.time.TimeRange;
|
|
||||||
import com.raytheon.uf.edex.decodertools.time.TimeTools;
|
|
||||||
import com.vividsolutions.jts.io.WKTReader;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* NCCCFP Decoder
|
|
||||||
*
|
|
||||||
* <pre>
|
|
||||||
* SOFTWARE HISTORY
|
|
||||||
* Date Ticket# Engineer Description
|
|
||||||
* ------------ ---------- ----------- --------------------------
|
|
||||||
* Oct 05, 2009 155 F. J. Yen From Raytheon's CCFP. Fix AREA. Store
|
|
||||||
* 1 instead of 14-15 decimal places for
|
|
||||||
* lat/lon values and limit to 7 points in
|
|
||||||
* dataURI (length 255) to conserve space
|
|
||||||
* and to fit into field. Add number of
|
|
||||||
* points to dataURI. Modify for LINE to
|
|
||||||
* be decoded. Make decode synchronized.
|
|
||||||
* May 27, 2010 155 F. J. Yen Refactored for dataplugin for migration
|
|
||||||
* to to11dr11
|
|
||||||
* Aug 30, 2013 2298 rjpeter Make getPluginName abstract
|
|
||||||
*
|
|
||||||
* </pre>
|
|
||||||
*
|
|
||||||
* @author F. J. Yen
|
|
||||||
* @version 1
|
|
||||||
*/
|
|
||||||
|
|
||||||
public class NcccfpDecoder extends AbstractDecoder {
|
|
||||||
private static String pluginName;
|
|
||||||
|
|
||||||
private static final String PLUGIN_NAME = "ncccfp";
|
|
||||||
|
|
||||||
/** Record used for returning values */
|
|
||||||
NcccfpRecord record;
|
|
||||||
|
|
||||||
/** Pattern object for regex search */
|
|
||||||
Pattern pattern;
|
|
||||||
|
|
||||||
/** Regex matcher */
|
|
||||||
private Matcher matcher;
|
|
||||||
|
|
||||||
/** Match the product returned from separator */
|
|
||||||
private static final String PARSE_STRING = "[A-Z]{4}[0-9]{1,2} [A-Z]{4} [0-9]{6}(?: [A-Z]{3})?\n"
|
|
||||||
+ "CFP[\\p{Alnum} ]{3}\n" // awips header
|
|
||||||
+ "CCFP (\\d{4})(\\d{2})(\\d{2})_(\\d{2})\\d{2} (\\d{4})(\\d{2})(\\d{2})_(\\d{2})\\d{2}\n" // start/valid
|
|
||||||
// times
|
|
||||||
+ "(AREA|LINE).*\n" // SKIP AREA and LINE parsing
|
|
||||||
+ "(CANADA ON|CANADA OFF)";
|
|
||||||
|
|
||||||
/** Parse an AREA line */
|
|
||||||
private static final String PARSE_AREA = "AREA (\\d+) (\\d+) (\\d+) (\\d+) (\\d+) (\\d+) (\\d+) (.*) (\\d+) (\\d+)";
|
|
||||||
|
|
||||||
/** Parse a LINE line */
|
|
||||||
private static final String PARSE_LINE = "LINE (\\d+) (.*)";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor
|
|
||||||
*
|
|
||||||
* @throws DecoderException
|
|
||||||
*/
|
|
||||||
public NcccfpDecoder() throws DecoderException {
|
|
||||||
}
|
|
||||||
|
|
||||||
public NcccfpDecoder(String name) throws DecoderException {
|
|
||||||
pluginName = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public synchronized PluginDataObject[] decode(String msg)
|
|
||||||
throws DecoderException, PluginException {
|
|
||||||
record = new NcccfpRecord();
|
|
||||||
record.setMessageData(msg);
|
|
||||||
NcccfpLocation location = new NcccfpLocation();
|
|
||||||
|
|
||||||
pattern = Pattern.compile(PARSE_STRING);
|
|
||||||
matcher = pattern.matcher(msg);
|
|
||||||
|
|
||||||
try {
|
|
||||||
WKTReader wktReader = new WKTReader();
|
|
||||||
if (matcher.find()) {
|
|
||||||
Calendar start = TimeTools.getBaseCalendar(
|
|
||||||
Integer.parseInt(matcher.group(1)),
|
|
||||||
Integer.parseInt(matcher.group(2)),
|
|
||||||
Integer.parseInt(matcher.group(3)));
|
|
||||||
start.set(Calendar.HOUR_OF_DAY,
|
|
||||||
Integer.parseInt(matcher.group(4)));
|
|
||||||
record.setIssuetime(start);
|
|
||||||
Calendar valid = TimeTools.getBaseCalendar(
|
|
||||||
Integer.parseInt(matcher.group(5)),
|
|
||||||
Integer.parseInt(matcher.group(6)),
|
|
||||||
Integer.parseInt(matcher.group(7)));
|
|
||||||
valid.set(Calendar.HOUR_OF_DAY,
|
|
||||||
Integer.parseInt(matcher.group(8)));
|
|
||||||
record.setValidtime(valid);
|
|
||||||
TimeRange range = new TimeRange(record.getIssuetime(),
|
|
||||||
record.getValidtime());
|
|
||||||
record.setDataTime(new DataTime(record.getIssuetime(), range));
|
|
||||||
record.setProducttype(matcher.group(9));
|
|
||||||
if (matcher.group(10).equals("CANADA ON")) {
|
|
||||||
record.setCanadaflag(Boolean.TRUE);
|
|
||||||
} else {
|
|
||||||
record.setCanadaflag(Boolean.FALSE);
|
|
||||||
}
|
|
||||||
record.setInsertTime(TimeTools.getSystemCalendar());
|
|
||||||
}
|
|
||||||
if (record.getProducttype().equals("AREA")) {
|
|
||||||
pattern = Pattern.compile(PARSE_AREA);
|
|
||||||
matcher = pattern.matcher(msg);
|
|
||||||
if (matcher.find()) {
|
|
||||||
record.setCoverage(Integer.parseInt(matcher.group(1)));
|
|
||||||
record.setConf(Integer.parseInt(matcher.group(2)));
|
|
||||||
record.setGrowth(Integer.parseInt(matcher.group(3)));
|
|
||||||
record.setTops(Integer.parseInt(matcher.group(4)));
|
|
||||||
record.setSpeed(Integer.parseInt(matcher.group(5)));
|
|
||||||
record.setDirection(Integer.parseInt(matcher.group(6)));
|
|
||||||
record.setNumPts(Integer.parseInt(matcher.group(7)));
|
|
||||||
location.setBoxLat(Double.parseDouble(matcher.group(9)) * 0.1);
|
|
||||||
location.setBoxLong(Double.parseDouble(matcher.group(10))
|
|
||||||
* -0.1);
|
|
||||||
String templatlonpairs = matcher.group(8);
|
|
||||||
pattern = Pattern.compile("(\\d+) (\\d+)");
|
|
||||||
matcher = pattern.matcher(templatlonpairs);
|
|
||||||
StringBuffer wtk = new StringBuffer();
|
|
||||||
wtk.append("POLYGON((");
|
|
||||||
StringBuffer wtka = new StringBuffer();
|
|
||||||
wtka.append("POLYGON((");
|
|
||||||
int i7CntPts = 0;
|
|
||||||
StringBuffer wtk7 = new StringBuffer();
|
|
||||||
wtk7.append("POLYGONU((");
|
|
||||||
|
|
||||||
if (matcher.find()) {
|
|
||||||
wtk.append(Double.toString(Integer.parseInt(matcher
|
|
||||||
.group(1)) * 0.1) + " ");
|
|
||||||
wtk.append(Double.toString(Integer.parseInt(matcher
|
|
||||||
.group(2)) * -0.1));
|
|
||||||
/*
|
|
||||||
* Reduce from 14-15 decimal places to 1 for dataURI
|
|
||||||
*/
|
|
||||||
int len = matcher.group(1).length();
|
|
||||||
String lat1deg = matcher.group(1).substring(0, len - 1);
|
|
||||||
String lat1tenth = matcher.group(1).substring(len - 1);
|
|
||||||
len = matcher.group(2).length();
|
|
||||||
String lon1deg = matcher.group(2).substring(0, len - 1);
|
|
||||||
if (!matcher.group(2).substring(0, 0).equals("-")) {
|
|
||||||
lon1deg = "-" + lon1deg;
|
|
||||||
}
|
|
||||||
String lon1tenth = matcher.group(2).substring(len - 1);
|
|
||||||
i7CntPts++;
|
|
||||||
wtk7.append(lat1deg + "." + lat1tenth + " " + lon1deg
|
|
||||||
+ "." + lon1tenth);
|
|
||||||
wtka.append(lat1deg + "." + lat1tenth + " " + lon1deg
|
|
||||||
+ "." + lon1tenth);
|
|
||||||
}
|
|
||||||
while (matcher.find()) {
|
|
||||||
wtk.append(", "
|
|
||||||
+ Double.toString(Integer.parseInt(matcher
|
|
||||||
.group(1)) * 0.1) + " ");
|
|
||||||
wtk.append(Double.toString(Integer.parseInt(matcher
|
|
||||||
.group(2)) * -0.1));
|
|
||||||
/*
|
|
||||||
* Reduce from 14-15 decimal places to 1 for dataURI
|
|
||||||
*/
|
|
||||||
int len = matcher.group(1).length();
|
|
||||||
String latdeg = matcher.group(1).substring(0, len - 1);
|
|
||||||
String lat10 = matcher.group(1).substring(len - 1);
|
|
||||||
len = matcher.group(2).length();
|
|
||||||
String londeg = matcher.group(2).substring(0, len - 1);
|
|
||||||
if (!matcher.group(2).substring(0, 0).equals("-")) {
|
|
||||||
londeg = "-" + londeg;
|
|
||||||
}
|
|
||||||
String lon10 = matcher.group(2).substring(len - 1);
|
|
||||||
if (i7CntPts < 7) {
|
|
||||||
/*
|
|
||||||
* Truncate the number of coordinates to 7 for
|
|
||||||
* dataURI
|
|
||||||
*/
|
|
||||||
i7CntPts++;
|
|
||||||
wtk7.append("," + latdeg + "." + lat10 + " "
|
|
||||||
+ londeg + "." + lon10);
|
|
||||||
}
|
|
||||||
wtka.append("," + latdeg + "." + lat10 + " " + londeg
|
|
||||||
+ "." + lon10);
|
|
||||||
}
|
|
||||||
wtk.append("))");
|
|
||||||
wtk7.append("))");
|
|
||||||
wtka.append("))");
|
|
||||||
location.setGeometry(wktReader.read(wtk.toString()));
|
|
||||||
record.setLocation(location);
|
|
||||||
/*
|
|
||||||
* Column LocationAll contains all the coordinates with 1
|
|
||||||
* decimal place. Column locationUri is locationAll
|
|
||||||
* truncated to 7 coordinates (or less).
|
|
||||||
*/
|
|
||||||
record.setLocationUri(wtk7.toString());
|
|
||||||
location.setLocationAll(wtka.toString());
|
|
||||||
}
|
|
||||||
} else if (record.getProducttype().equals("LINE")) {
|
|
||||||
pattern = Pattern.compile(PARSE_LINE);
|
|
||||||
matcher = pattern.matcher(msg);
|
|
||||||
if (matcher.find()) {
|
|
||||||
record.setCoverage(null);
|
|
||||||
record.setConf(null);
|
|
||||||
record.setGrowth(null);
|
|
||||||
record.setTops(null);
|
|
||||||
record.setSpeed(null);
|
|
||||||
record.setDirection(null);
|
|
||||||
location.setBoxLat(0);
|
|
||||||
location.setBoxLong(0);
|
|
||||||
record.setNumPts(Integer.parseInt(matcher.group(1)));
|
|
||||||
// String templatlonpairs = matcher.group(1);
|
|
||||||
String templatlonpairs = matcher.group(2);
|
|
||||||
pattern = Pattern.compile("(\\d+) (\\d+)");
|
|
||||||
matcher = pattern.matcher(templatlonpairs);
|
|
||||||
|
|
||||||
StringBuffer wtk = new StringBuffer();
|
|
||||||
wtk.append("LINESTRING(");
|
|
||||||
StringBuffer wtka = new StringBuffer();
|
|
||||||
wtka.append("LINESTRING(");
|
|
||||||
int i7CntPts = 0;
|
|
||||||
StringBuffer wtk7 = new StringBuffer();
|
|
||||||
wtk7.append("LINESTRINGU(");
|
|
||||||
if (matcher.find()) {
|
|
||||||
wtk.append(Double.toString(Integer.parseInt(matcher
|
|
||||||
.group(1)) * 0.1) + " ");
|
|
||||||
wtk.append(Double.toString(Integer.parseInt(matcher
|
|
||||||
.group(2)) * -0.1));
|
|
||||||
/*
|
|
||||||
* Reduce from 14-15 decimal places to 1 for dataURI
|
|
||||||
*/
|
|
||||||
int len = matcher.group(1).length();
|
|
||||||
String lat1deg = matcher.group(1).substring(0, len - 1);
|
|
||||||
String lat1tenth = matcher.group(1).substring(len - 1);
|
|
||||||
len = matcher.group(2).length();
|
|
||||||
String lon1deg = matcher.group(2).substring(0, len - 1);
|
|
||||||
if (!matcher.group(2).substring(0, 0).equals("-")) {
|
|
||||||
lon1deg = "-" + lon1deg;
|
|
||||||
}
|
|
||||||
String lon1tenth = matcher.group(2).substring(len - 1);
|
|
||||||
i7CntPts++;
|
|
||||||
wtk7.append(lat1deg + "." + lat1tenth + " " + lon1deg
|
|
||||||
+ "." + lon1tenth);
|
|
||||||
wtka.append(lat1deg + "." + lat1tenth + " " + lon1deg
|
|
||||||
+ "." + lon1tenth);
|
|
||||||
}
|
|
||||||
while (matcher.find()) {
|
|
||||||
wtk.append(", "
|
|
||||||
+ Double.toString(Integer.parseInt(matcher
|
|
||||||
.group(1)) * 0.1) + " ");
|
|
||||||
wtk.append(Double.toString(Integer.parseInt(matcher
|
|
||||||
.group(2)) * -0.1));
|
|
||||||
/*
|
|
||||||
* Reduce from 14-15 decimal places to 1 for dataURI
|
|
||||||
*/
|
|
||||||
int len = matcher.group(1).length();
|
|
||||||
String latdeg = matcher.group(1).substring(0, len - 1);
|
|
||||||
String lat10 = matcher.group(1).substring(len - 1);
|
|
||||||
len = matcher.group(2).length();
|
|
||||||
String londeg = matcher.group(2).substring(0, len - 1);
|
|
||||||
if (!matcher.group(2).substring(0, 0).equals("-")) {
|
|
||||||
londeg = "-" + londeg;
|
|
||||||
}
|
|
||||||
String lon10 = matcher.group(2).substring(len - 1);
|
|
||||||
/*
|
|
||||||
* Truncate the number of coordinates to 7 for dataURI
|
|
||||||
*/
|
|
||||||
if (i7CntPts < 7) {
|
|
||||||
i7CntPts++;
|
|
||||||
wtk7.append("," + latdeg + "." + lat10 + " "
|
|
||||||
+ londeg + "." + lon10);
|
|
||||||
}
|
|
||||||
wtka.append("," + latdeg + "." + lat10 + " " + londeg
|
|
||||||
+ "." + lon10);
|
|
||||||
}
|
|
||||||
wtk.append(")");
|
|
||||||
wtk7.append(")");
|
|
||||||
wtka.append(")");
|
|
||||||
location.setGeometry(wktReader.read(wtk.toString()));
|
|
||||||
record.setLocation(location);
|
|
||||||
/*
|
|
||||||
* Column locationAll contains all the coordinates with 1
|
|
||||||
* decimal place. Column locationUri is locationAll
|
|
||||||
* truncated to 7 coordinates (or less).
|
|
||||||
*/
|
|
||||||
record.setLocationUri(wtk7.toString());
|
|
||||||
location.setLocationAll(wtka.toString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new DecoderException("Unable to decode NCCCFP", e);
|
|
||||||
}
|
|
||||||
if (record != null) {
|
|
||||||
record.constructDataURI();
|
|
||||||
return new PluginDataObject[] { record };
|
|
||||||
} else {
|
|
||||||
return new PluginDataObject[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,206 +0,0 @@
|
||||||
package gov.noaa.nws.ncep.edex.plugin.ncccfp.decoder;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.NoSuchElementException;
|
|
||||||
import java.util.regex.Matcher;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
|
||||||
import org.apache.commons.logging.LogFactory;
|
|
||||||
|
|
||||||
import com.raytheon.edex.esb.Headers;
|
|
||||||
import com.raytheon.edex.plugin.AbstractRecordSeparator;
|
|
||||||
import com.raytheon.uf.common.util.StringUtil;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* NCCCFP Separator
|
|
||||||
*
|
|
||||||
* <pre>
|
|
||||||
* SOFTWARE HISTORY
|
|
||||||
* Date Ticket# Engineer Description
|
|
||||||
* ------------ ---------- ----------- --------------------------
|
|
||||||
* 09/03/2009 155 F. J. Yen From Raytheon's CCFP; modify for NCCCFP
|
|
||||||
*
|
|
||||||
* </pre>
|
|
||||||
*
|
|
||||||
* @author F. J. Yen
|
|
||||||
* @version 1
|
|
||||||
*/
|
|
||||||
|
|
||||||
public class NcccfpSeparator extends AbstractRecordSeparator {
|
|
||||||
|
|
||||||
private final Log theLogger = LogFactory.getLog(getClass());
|
|
||||||
|
|
||||||
/** Regex used for separating multi-record files */
|
|
||||||
private static final String DATASET = "CCFP \\d{8}_\\d{4} \\d{8}_\\d{4}([\\r\\n]+(AREA|LINE).*)*";
|
|
||||||
|
|
||||||
/** Regex to pull AWIPS Header */
|
|
||||||
private static final String AWIPSHEADER = "[\\r\\n]+(TAF|MTR|CFP)([\\p{Alnum} ]{3})[\\r\\n]+";
|
|
||||||
|
|
||||||
/** Regex used for extracting the header */
|
|
||||||
private static final String HEADERREGEX = "[A-Z]{4}[0-9]{1,2} [A-Z]{4} [0-9]{6}(?: [A-Z]{3})?";
|
|
||||||
|
|
||||||
/** Regex used for extracting a line */
|
|
||||||
private static final String TIMEREGEX = "CCFP \\d{8}_\\d{4} \\d{8}_\\d{4}";
|
|
||||||
|
|
||||||
/** Regex used for extracting a line */
|
|
||||||
private static final String LINEREGEX = "AREA.*|LINE.*";
|
|
||||||
|
|
||||||
private static final String CANADA_FLAG = "CANADA ON|CANADA OFF";
|
|
||||||
|
|
||||||
/** Pattern object for regex search */
|
|
||||||
Pattern pattern;
|
|
||||||
|
|
||||||
/** Regex matcher */
|
|
||||||
private Matcher matcher;
|
|
||||||
|
|
||||||
/** The WMO header */
|
|
||||||
private String header;
|
|
||||||
|
|
||||||
/** The AWIPS header */
|
|
||||||
private String awipsheader;
|
|
||||||
|
|
||||||
private String canadaflag;
|
|
||||||
|
|
||||||
/** List of individual areas in file */
|
|
||||||
private List<String> splitAreas;
|
|
||||||
|
|
||||||
/** List of records contained in file */
|
|
||||||
private List<String> bodyRecords;
|
|
||||||
|
|
||||||
/** List of records contained in file */
|
|
||||||
private List<String> records;
|
|
||||||
|
|
||||||
private Iterator<String> iterator = null;
|
|
||||||
|
|
||||||
public static NcccfpSeparator separate(byte[] data, Headers headers) {
|
|
||||||
NcccfpSeparator sep = new NcccfpSeparator();
|
|
||||||
sep.setData(data, headers);
|
|
||||||
return sep;
|
|
||||||
}
|
|
||||||
|
|
||||||
public NcccfpSeparator() {
|
|
||||||
bodyRecords = new ArrayList<String>();
|
|
||||||
records = new ArrayList<String>();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String next() {
|
|
||||||
try {
|
|
||||||
String temp = iterator.next();
|
|
||||||
if (StringUtil.isEmptyString(temp)) {
|
|
||||||
return "";
|
|
||||||
} else {
|
|
||||||
return temp;
|
|
||||||
}
|
|
||||||
} catch (NoSuchElementException e) {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean hasNext() {
|
|
||||||
if (iterator == null) {
|
|
||||||
return false;
|
|
||||||
} else {
|
|
||||||
return iterator.hasNext();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setData(byte[] data, Headers headers) {
|
|
||||||
this.separate(new String(data));
|
|
||||||
iterator = records.iterator();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param message
|
|
||||||
*/
|
|
||||||
private void separate(String message) {
|
|
||||||
message = message.replaceAll("=", "");
|
|
||||||
|
|
||||||
try {
|
|
||||||
// Extracts the header
|
|
||||||
pattern = Pattern.compile(HEADERREGEX);
|
|
||||||
matcher = pattern.matcher(message);
|
|
||||||
|
|
||||||
if (matcher.find()) {
|
|
||||||
header = matcher.group();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Extracts the AWIPS header
|
|
||||||
pattern = Pattern.compile(AWIPSHEADER);
|
|
||||||
matcher = pattern.matcher(message);
|
|
||||||
|
|
||||||
if (matcher.find()) {
|
|
||||||
awipsheader = matcher.group(1) + matcher.group(2);
|
|
||||||
}
|
|
||||||
|
|
||||||
pattern = Pattern.compile(CANADA_FLAG);
|
|
||||||
matcher = pattern.matcher(message);
|
|
||||||
if (matcher.find()) {
|
|
||||||
canadaflag = matcher.group();
|
|
||||||
}
|
|
||||||
|
|
||||||
pattern = Pattern.compile(DATASET);
|
|
||||||
matcher = pattern.matcher(message);
|
|
||||||
|
|
||||||
// Extracts all the matches out of the message. Looks for ICAO/date
|
|
||||||
// pairs. Does not allow duplicate entries.
|
|
||||||
while (matcher.find()) {
|
|
||||||
if (!bodyRecords.contains(matcher.group())) {
|
|
||||||
bodyRecords.add(matcher.group());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Assigns records
|
|
||||||
for (int i = 0; i < bodyRecords.size(); i++) {
|
|
||||||
String observation = null;
|
|
||||||
if (i < bodyRecords.size() - 1) {
|
|
||||||
observation = message
|
|
||||||
.substring(message.indexOf(bodyRecords.get(i)),
|
|
||||||
message.indexOf(bodyRecords.get(i + 1)))
|
|
||||||
.trim().replaceAll("\\r\\r\\n", "\n");
|
|
||||||
;
|
|
||||||
} else {
|
|
||||||
observation = bodyRecords.get(i).trim()
|
|
||||||
.replaceAll("\\r\\r\\n", "\n");
|
|
||||||
}
|
|
||||||
splitAreas = splitRecord(observation);
|
|
||||||
for (int j = 0; j < splitAreas.size(); j++) {
|
|
||||||
String record = header + "\n" + awipsheader + "\n"
|
|
||||||
+ splitAreas.get(j) + "\n" + canadaflag;
|
|
||||||
records.add(record);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
theLogger.warn("No valid NCCCFP records found.");
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
private List<String> splitRecord(String obs) {
|
|
||||||
List<String> rval = new ArrayList<String>();
|
|
||||||
String timeline = null;
|
|
||||||
|
|
||||||
pattern = Pattern.compile(TIMEREGEX);
|
|
||||||
matcher = pattern.matcher(obs);
|
|
||||||
if (matcher.find()) {
|
|
||||||
timeline = matcher.group();
|
|
||||||
}
|
|
||||||
|
|
||||||
pattern = Pattern.compile(LINEREGEX);
|
|
||||||
matcher = pattern.matcher(obs);
|
|
||||||
while (matcher.find()) {
|
|
||||||
rval.add(timeline + "\n" + matcher.group());
|
|
||||||
}
|
|
||||||
|
|
||||||
return rval;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,6 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
||||||
<purgeRuleSet>
|
|
||||||
<defaultRule>
|
|
||||||
<period>02-00:00:00</period>
|
|
||||||
</defaultRule>
|
|
||||||
</purgeRuleSet>
|
|
|
@ -1,4 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
||||||
<requestPatterns xmlns:ns2="group">
|
|
||||||
<regex>^FAUS2[789] KKCI.*</regex>
|
|
||||||
</requestPatterns>
|
|
|
@ -5,7 +5,7 @@
|
||||||
Name: awips2-ant
|
Name: awips2-ant
|
||||||
Summary: AWIPS II Ant Distribution
|
Summary: AWIPS II Ant Distribution
|
||||||
Version: 1.7.1
|
Version: 1.7.1
|
||||||
Release: 2
|
Release: 3
|
||||||
Group: AWIPSII
|
Group: AWIPSII
|
||||||
BuildRoot: %{_build_root}
|
BuildRoot: %{_build_root}
|
||||||
BuildArch: noarch
|
BuildArch: noarch
|
||||||
|
@ -131,4 +131,4 @@ rm -rf ${RPM_BUILD_ROOT}
|
||||||
/awips2/ant/licenses
|
/awips2/ant/licenses
|
||||||
%doc /awips2/ant/NOTICE
|
%doc /awips2/ant/NOTICE
|
||||||
%doc /awips2/ant/README
|
%doc /awips2/ant/README
|
||||||
%doc /awips2/ant/WHATSNEW
|
%doc /awips2/ant/WHATSNEW
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#!/bin/csh
|
#!/bin/csh
|
||||||
|
|
||||||
# Determine where ant has been installed.
|
# Determine where ant has been installed.
|
||||||
set ANT_INSTALL=`rpm -q --queryformat '%{INSTALLPREFIX}' awips2-ant`
|
set ANT_INSTALL=`rpm -q --queryformat '%{INSTPREFIXES}' awips2-ant`
|
||||||
setenv ANT_HOME "${ANT_INSTALL}"
|
setenv ANT_HOME "${ANT_INSTALL}"
|
||||||
|
|
||||||
if $?PATH then
|
if $?PATH then
|
||||||
|
|
|
@ -8,7 +8,7 @@ if [ ${RC} -ne 0 ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Determine Where Ant Has Been Installed.
|
# Determine Where Ant Has Been Installed.
|
||||||
ANT_INSTALL=`rpm -q --queryformat '%{INSTALLPREFIX}' awips2-ant`
|
ANT_INSTALL=`rpm -q --queryformat '%{INSTPREFIXES}' awips2-ant`
|
||||||
if [ "${ANT_INSTALL}" = "" ]; then
|
if [ "${ANT_INSTALL}" = "" ]; then
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -6,7 +6,10 @@ set RC="$?"
|
||||||
|
|
||||||
#if installed, set the variable
|
#if installed, set the variable
|
||||||
if ( "${RC}" == "0" ) then
|
if ( "${RC}" == "0" ) then
|
||||||
set CLI_INSTALL=/awips2/fxa
|
set CLI_INSTALL=`rpm -q --queryformat '%{INSTPREFIXES}' awips2-cli`
|
||||||
setenv PATH ${CLI_INSTALL}/bin:${PATH}
|
#if check CLI_INSTALL is set, set it in the path
|
||||||
|
if ( "${CLI_INSTALL}" != "" ) then
|
||||||
|
setenv PATH ${CLI_INSTALL}/bin:${PATH}
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
|
@ -9,5 +9,9 @@ if [ ! "${RC}" = "0" ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Determine where awips2-cli has been installed.
|
# Determine where awips2-cli has been installed.
|
||||||
CLI_INSTALL=/awips2/fxa
|
CLI_INSTALL=`rpm -q --queryformat '%{INSTPREFIXES}\n' awips2-cli`
|
||||||
|
if [ "${CLI_INSTALL}" = "" ]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
export PATH=${CLI_INSTALL}/bin:${PATH}
|
export PATH=${CLI_INSTALL}/bin:${PATH}
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
Name: awips2-tools
|
Name: awips2-tools
|
||||||
Summary: AWIPS II Tools Distribution
|
Summary: AWIPS II Tools Distribution
|
||||||
Version: 1.8.4
|
Version: 1.8.4
|
||||||
Release: 1.el6
|
Release: 2.el6
|
||||||
Group: AWIPSII
|
Group: AWIPSII
|
||||||
BuildRequires: awips2-python-h5py
|
BuildRequires: awips2-python-h5py
|
||||||
BuildRoot: /tmp
|
BuildRoot: /tmp
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/csh
|
#!/bin/csh
|
||||||
|
|
||||||
set HDF5_TOOLS_INSTALL=/awips2/tools
|
set HDF5_TOOLS_INSTALL=`rpm -q --queryformat '%{INSTPREFIXES}' awips2-tools`
|
||||||
|
|
||||||
if $?PATH then
|
if $?PATH then
|
||||||
setenv PATH ${HDF5_TOOLS_INSTALL}/bin:$PATH
|
setenv PATH ${HDF5_TOOLS_INSTALL}/bin:$PATH
|
||||||
|
|
|
@ -8,7 +8,10 @@ if [ ${RC} -ne 0 ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Determine Where awips2-tools Has Been Installed.
|
# Determine Where awips2-tools Has Been Installed.
|
||||||
HDF5_TOOLS_INSTALL=/awips2/tools
|
HDF5_TOOLS_INSTALL=`rpm -q --queryformat '%{INSTPREFIXES}' awips2-tools`
|
||||||
|
if [ "${HDF5_TOOLS_INSTALL}" = "" ]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
# Update The Environment.
|
# Update The Environment.
|
||||||
# Determine If awips2-tools Is Already Part Of The Path.
|
# Determine If awips2-tools Is Already Part Of The Path.
|
||||||
|
|
|
@ -82,6 +82,9 @@ public class GetNotificationTest extends QueryTest {
|
||||||
@Autowired
|
@Autowired
|
||||||
private GetNotification getNotification;
|
private GetNotification getNotification;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private RegistrySOAPServices registrySoapClient;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void createSubscription() throws Exception {
|
public void createSubscription() throws Exception {
|
||||||
// Set normal registry object fields
|
// Set normal registry object fields
|
||||||
|
@ -112,7 +115,7 @@ public class GetNotificationTest extends QueryTest {
|
||||||
|
|
||||||
String endpointType = DeliveryMethodTypes.SOAP;
|
String endpointType = DeliveryMethodTypes.SOAP;
|
||||||
W3CEndpointReferenceBuilder builder = new W3CEndpointReferenceBuilder();
|
W3CEndpointReferenceBuilder builder = new W3CEndpointReferenceBuilder();
|
||||||
builder.address(RegistrySOAPServices.getNotificationListenerServiceUrl(
|
builder.address(registrySoapClient.getNotificationListenerServiceUrl(
|
||||||
"http://someaddress.com").toString());
|
"http://someaddress.com").toString());
|
||||||
W3CEndpointReference ref = builder.build();
|
W3CEndpointReference ref = builder.build();
|
||||||
DOMResult dom = new DOMResult();
|
DOMResult dom = new DOMResult();
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
<bean id="notificationListenerFactory"
|
<bean id="notificationListenerFactory"
|
||||||
class="com.raytheon.uf.edex.registry.ebxml.services.notification.MockNotificationListenerFactory">
|
class="com.raytheon.uf.edex.registry.ebxml.services.notification.MockNotificationListenerFactory">
|
||||||
<constructor-arg ref="EmailSender" />
|
<constructor-arg ref="EmailSender" />
|
||||||
|
<constructor-arg ref="registryWebServiceClient"/>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
</beans>
|
</beans>
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue