Merge branch 'omaha_15.1.1' into field_15.1.1

Change-Id: I46ed5379753021871381803e9e84e1c6a37ded10

Former-commit-id: a35b2c8cbd4e07bf92fbc32d8548f9fa0c0a9dd5
This commit is contained in:
Ana Rivera 2015-03-04 18:30:37 +00:00
commit 7065fe20db
37 changed files with 970 additions and 675 deletions

View file

@ -1,73 +1,10 @@
<configuration debug="false" scan="true"> <configuration debug="false" scan="true">
<!-- general application log --> <include file="${edex.home}/conf/logback-edex-properties.xml"/>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <include file="${edex.home}/conf/logback-edex-appenders.xml" />
<param name="Threshold" value="INFO" />
<encoder>
<pattern>%-5p %d [%t] %c{0}: %m%n</pattern>
</encoder>
</appender>
<!-- hibernate log --> <include file="${edex.home}/conf/logback-edex-loggers.xml" />
<appender name="HibernateLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <include file="${edex.home}/conf/logback-edex-hibernate-logger.xml" />
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${edex.home}/logs/edex-${edex.run.mode}-hibernate-%d{yyyyMMdd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%-5p %d [%t] %c{0}: %m%n</pattern>
</encoder>
</appender>
<logger name="com.raytheon">
<level value="INFO"/>
</logger>
<!-- used by c3p0 -->
<logger name="com.mchange">
<level value="ERROR"/>
</logger>
<logger name="com.tc">
<level value="WARN"/>
</logger>
<logger name="mx4j">
<level value="ERROR"/>
</logger>
<logger name="org.apache">
<level value="INFO"/>
</logger>
<logger name="org.apache.activemq.spring">
<level value="WARN"/>
</logger>
<logger name="org.apache.camel.impl.converter.DefaultTypeConverter">
<level value="ERROR"/>
</logger>
<logger name="org.apache.camel.core.xml">
<level value="WARN"/>
</logger>
<logger name="org.apache.qpid">
<level value="INFO"/>
</logger>
<logger name="org.apache.qpid.client.BasicMessageProducer_0_10">
<level value="WARN"/>
</logger>
<logger name="org.apache.xbean.spring">
<level value="WARN"/>
</logger>
<logger name="org.quartz">
<level value="ERROR"/>
</logger>
<logger name="org.springframework">
<level value="ERROR"/>
</logger>
<logger name="org.hibernate" additivity="false">
<level value="ERROR"/>
<appender-ref ref="HibernateLog" />
</logger>
<logger name="org.geotools">
<level value="WARN"/>
</logger>
<!-- <logger name="com.raytheon.uf.edex.datadelivery.provideragent" additivity="false"> <!-- <logger name="com.raytheon.uf.edex.datadelivery.provideragent" additivity="false">
<level value="INFO"/> <level value="INFO"/>
<appender-ref ref="ProviderAgent"/> <appender-ref ref="ProviderAgent"/>

View file

@ -0,0 +1,23 @@
<included>
<!-- Appenders shared by all EDEX logback files. -->
<!-- general application log -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="com.raytheon.uf.common.status.logback.UFStdEncoder"/>
</appender>
<appender name="asyncConsole" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="console" />
</appender>
<!-- Performance log -->
<appender name="PerformanceLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="com.raytheon.uf.common.status.logback.StdTimeBasedRollingPolicy">
<name>performance</name>
</rollingPolicy>
<encoder class="com.raytheon.uf.common.status.logback.UFStdEncoder"/>
</appender>
<appender name="PerformanceLogAsync" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="PerformanceLog" />
</appender>
</included>

View file

@ -0,0 +1,17 @@
<included>
<!-- hibernate log -->
<appender name="HibernateLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="com.raytheon.uf.common.status.logback.StdTimeBasedRollingPolicy">
<name>hibernate</name>
</rollingPolicy>
<encoder class="com.raytheon.uf.common.status.logback.UFStdEncoder">
<trace>false</trace>
</encoder>
</appender>
<logger name="org.hibernate" additivity="false">
<level value="ERROR"/>
<appender-ref ref="HibernateLog" />
</logger>
</included>

View file

@ -0,0 +1,7 @@
<included>
<!-- Loggers shared only by logback-request.xml and logback-ingest.xml -->
<logger name="com.raytheon.edex.services.NotifySrv">
<level value="WARN"/>
</logger>
</included>

View file

@ -0,0 +1,46 @@
<included>
<!-- Logger's shared by all EDEX logback files. -->
<logger name="com.raytheon">
<level value="INFO"/>
</logger>
<logger name="PerformanceLogger" additivity="false">
<level value="DEBUG"/>
<appender-ref ref="PerformanceLogAsync" />
</logger>
<!-- used by c3p0 -->
<logger name="com.mchange">
<level value="ERROR"/>
</logger>
<logger name="mx4j">
<level value="ERROR"/>
</logger>
<logger name="org.apache">
<level value="INFO"/>
</logger>
<logger name="org.apache.camel.impl.converter.DefaultTypeConverter">
<level value="ERROR"/>
</logger>
<logger name="org.apache.camel.core.xml">
<level value="WARN"/>
</logger>
<logger name="org.apache.qpid">
<level value="INFO"/>
</logger>
<logger name="org.apache.qpid.client.BasicMessageProducer_0_10">
<level value="WARN"/>
</logger>
<logger name="org.apache.xbean.spring">
<level value="WARN"/>
</logger>
<logger name="org.quartz">
<level value="ERROR"/>
</logger>
<logger name="org.springframework">
<level value="ERROR"/>
</logger>
<logger name="org.geotools">
<level value="WARN"/>
</logger>
</included>

View file

@ -0,0 +1,8 @@
<included>
<property scope="context" name="log.dir.home" value="${edex.home}"/>
<property scope="context" name="log.file.base" value ="edex"/>
<property scope="context" name="log.file.mode" value="${edex.run.mode}"/>
<!-- Only define when not wanting to use the UF Standard.
<property scope="context" name="log.message.pattern" value="%-5p %d [%t] %c{0}: %m%n"/>
-->
</included>

View file

@ -1,233 +1,105 @@
<configuration debug="false" scan="true"> <configuration debug="false" scan="true">
<!-- general application log --> <include file="${edex.home}/conf/logback-edex-properties.xml"/>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <include file="${edex.home}/conf/logback-edex-appenders.xml" />
<encoder>
<pattern>%-5p %d [%t] %c{0}: %m%n</pattern>
</encoder>
</appender>
<appender name="asyncConsole" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="console" />
</appender>
<!-- hibernate log -->
<appender name="HibernateLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${edex.home}/logs/edex-${edex.run.mode}-hibernate-%d{yyyyMMdd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%-5p %d [%t] %c{0}: %m%n %nopex</pattern>
</encoder>
</appender>
<!-- shef log --> <!-- shef log -->
<appender name="shef" class="ch.qos.logback.core.rolling.RollingFileAppender"> <appender name="shef" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <rollingPolicy class="com.raytheon.uf.common.status.logback.StdTimeBasedRollingPolicy">
<fileNamePattern>${edex.home}/logs/edex-${edex.run.mode}-shef-%d{yyyyMMdd}.log</fileNamePattern> <name>shef</name>
<maxHistory>30</maxHistory> </rollingPolicy>
</rollingPolicy> <encoder class="com.raytheon.uf.common.status.logback.UFStdEncoder"/>
<encoder>
<pattern>%-5p %d [%t] %c{0}: %m%n</pattern>
</encoder>
</appender> </appender>
<!-- activeTableChange log --> <!-- activeTableChange log -->
<appender name="activeTableChangeLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <appender name="activeTableChangeLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <rollingPolicy class="com.raytheon.uf.common.status.logback.StdTimeBasedRollingPolicy">
<fileNamePattern>${edex.home}/logs/edex-${edex.run.mode}-activeTableChange-%d{yyyyMMdd}.log</fileNamePattern> <name>activeTableChange</name>
<maxHistory>30</maxHistory> </rollingPolicy>
</rollingPolicy> <encoder class="com.raytheon.uf.common.status.logback.UFStdEncoder"/>
<encoder>
<pattern>%-5p %d [%t] %c{0}: %m%n</pattern>
</encoder>
</appender> </appender>
<appender name="activeTableChangeLogAsync" class="ch.qos.logback.classic.AsyncAppender"> <appender name="activeTableChangeLogAsync" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="activeTableChangeLog" /> <appender-ref ref="activeTableChangeLog" />
</appender> </appender>
<logger name="ActiveTableChange" additivity="false">
<level value="DEBUG"/>
<appender-ref ref="activeTableChangeLogAsync" />
</logger>
<!-- Purge log --> <!-- Purge log -->
<appender name="purge" class="ch.qos.logback.core.rolling.RollingFileAppender"> <appender name="purge" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <rollingPolicy class="com.raytheon.uf.common.status.logback.StdTimeBasedRollingPolicy">
<fileNamePattern>${edex.home}/logs/edex-${edex.run.mode}-purge-%d{yyyyMMdd}.log</fileNamePattern> <name>purge</name>
<maxHistory>30</maxHistory> </rollingPolicy>
</rollingPolicy> <encoder class="com.raytheon.uf.common.status.logback.UFStdEncoder"/>
<encoder>
<pattern>%-5p %d [%t] %c{0}: %m%n</pattern>
</encoder>
</appender> </appender>
<!-- RouteFailedLog log --> <!-- RouteFailedLog log -->
<appender name="RouteFailedLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <appender name="RouteFailedLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <rollingPolicy class="com.raytheon.uf.common.status.logback.StdTimeBasedRollingPolicy">
<fileNamePattern>${edex.home}/logs/edex-${edex.run.mode}-unrecognized-files-%d{yyyyMMdd}.log</fileNamePattern> <name>unrecognized-files</name>
<maxHistory>30</maxHistory> </rollingPolicy>
</rollingPolicy> <encoder class="com.raytheon.uf.common.status.logback.UFStdEncoder"/>
<encoder>
<pattern>%-5p %d [%t] %c{0}: %m%n</pattern>
</encoder>
</appender> </appender>
<!-- ShefPerformanceLog log --> <!-- ShefPerformanceLog log -->
<appender name="ShefPerfLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <appender name="ShefPerfLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <rollingPolicy class="com.raytheon.uf.common.status.logback.StdTimeBasedRollingPolicy">
<fileNamePattern>${edex.home}/logs/edex-${edex.run.mode}-shef-performance-%d{yyyyMMdd}.log</fileNamePattern> <name>shef-performance</name>
<maxHistory>30</maxHistory> </rollingPolicy>
</rollingPolicy> <encoder class="com.raytheon.uf.common.status.logback.UFStdEncoder"/>
<encoder>
<pattern>%-5p %d [%t] %c{0}: %m%n</pattern>
</encoder>
</appender> </appender>
<!-- Gen Areal FFG log --> <!-- Gen Areal FFG log -->
<appender name="GenArealFFG" class="ch.qos.logback.core.rolling.RollingFileAppender"> <appender name="GenArealFFG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <rollingPolicy class="com.raytheon.uf.common.status.logback.StdTimeBasedRollingPolicy">
<fileNamePattern>${edex.home}/logs/edex-${edex.run.mode}-gen_areal_ffg-%d{yyyyMMdd}.log</fileNamePattern> <name>gen_areal_ffg</name>
<maxHistory>30</maxHistory> </rollingPolicy>
</rollingPolicy> <encoder class="com.raytheon.uf.common.status.logback.UFStdEncoder"/>
<encoder>
<pattern>%-5p %d [%t] %c{0}: %m%n</pattern>
</encoder>
</appender> </appender>
<!-- Gen Areal QPE log --> <!-- Gen Areal QPE log -->
<appender name="GenArealQPE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <appender name="GenArealQPE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <rollingPolicy class="com.raytheon.uf.common.status.logback.StdTimeBasedRollingPolicy">
<fileNamePattern>${edex.home}/logs/edex-${edex.run.mode}-gen_areal_qpe-%d{yyyyMMdd}.log</fileNamePattern> <name>gen_areal_qpe</name>
<maxHistory>30</maxHistory> </rollingPolicy>
</rollingPolicy> <encoder class="com.raytheon.uf.common.status.logback.UFStdEncoder"/>
<encoder>
<pattern>%-5p %d [%t] %c{0}: %m%n</pattern>
</encoder>
</appender> </appender>
<!-- Trigger log --> <!-- Trigger log -->
<appender name="FailedTriggerLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <appender name="FailedTriggerLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <rollingPolicy class="com.raytheon.uf.common.status.logback.StdTimeBasedRollingPolicy">
<fileNamePattern>${edex.home}/logs/edex-${edex.run.mode}-trigger-%d{yyyyMMdd}.log</fileNamePattern> <name>trigger</name>
<maxHistory>30</maxHistory> </rollingPolicy>
</rollingPolicy> <encoder class="com.raytheon.uf.common.status.logback.UFStdEncoder"/>
<encoder>
<pattern>%-5p %d [%t] %c{0}: %m%n</pattern>
</encoder>
</appender> </appender>
<!-- ohd log --> <!-- ohd log -->
<appender name="OhdLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <appender name="OhdLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <rollingPolicy class="com.raytheon.uf.common.status.logback.StdTimeBasedRollingPolicy">
<fileNamePattern>${edex.home}/logs/edex-${edex.run.mode}-ohd-%d{yyyyMMdd}.log</fileNamePattern> <name>ohd</name>
<maxHistory>30</maxHistory> </rollingPolicy>
</rollingPolicy> <encoder class="com.raytheon.uf.common.status.logback.UFStdEncoder"/>
<encoder>
<pattern>%-5p %d [%t] %c{0}: %m%n</pattern>
</encoder>
</appender> </appender>
<appender name="ThreadBasedLog" class="com.raytheon.uf.common.status.logback.ThreadBasedAppender"> <appender name="ThreadBasedLog" class="com.raytheon.uf.common.status.logback.ThreadBasedAppender">
<maxHistory>30</maxHistory>
<patternLayout>%-5p %d [%t] %c{0}: %m%n</patternLayout>
<fileNameBase>${edex.home}/logs/edex-${edex.run.mode}-%s{name}-%d{yyyyMMdd}.log</fileNameBase>
<defaultAppenderName>asyncConsole</defaultAppenderName> <defaultAppenderName>asyncConsole</defaultAppenderName>
<appender-ref ref="asyncConsole"/> <appender-ref ref="asyncConsole"/>
<appender-ref ref="shef"/> <appender-ref ref="shef"/>
<appender-ref ref="purge"/> <appender-ref ref="purge"/>
</appender> </appender>
<appender name="PerformanceLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <include file="${edex.home}/conf/logback-edex-loggers.xml" />
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <include file="${edex.home}/conf/logback-edex-limited-loggers.xml"/>
<fileNamePattern>${edex.home}/logs/edex-${edex.run.mode}-performance-%d{yyyyMMdd}.log</fileNamePattern> <include file="${edex.home}/conf/logback-edex-hibernate-logger.xml"/>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%-5p %d [%t] %c{0}: %m%n</pattern>
</encoder>
</appender>
<appender name="PerformanceLogAsync" class="ch.qos.logback.classic.AsyncAppender"> <logger name="ActiveTableChange" additivity="false">
<appender-ref ref="PerformanceLog" />
</appender>
<logger name="PerformanceLogger" additivity="false">
<level value="DEBUG"/> <level value="DEBUG"/>
<appender-ref ref="PerformanceLogAsync" /> <appender-ref ref="activeTableChangeLogAsync" />
</logger>
<logger name="com.raytheon">
<level value="INFO"/>
</logger> </logger>
<logger name="com.raytheon.edex.plugin.shef" additivity="false"> <logger name="com.raytheon.edex.plugin.shef" additivity="false">
<level value="INFO"/> <level value="INFO"/>
<appender-ref ref="shef" /> <appender-ref ref="shef" />
</logger> </logger>
<logger name="com.raytheon.edex.services.ArchiveSrv">
<level value="WARN"/> <logger name="com.raytheon.uf.edex.purgesrv" additivity="false">
</logger>
<logger name="com.raytheon.edex.services.NotifySrv">
<level value="WARN"/>
</logger>
<!-- used by c3p0 -->
<logger name="com.mchange">
<level value="ERROR"/>
</logger>
<logger name="com.tc">
<level value="WARN"/>
</logger>
<logger name="mx4j">
<level value="ERROR"/>
</logger>
<logger name="org.apache">
<level value="INFO"/>
</logger>
<logger name="org.apache.activemq.spring">
<level value="WARN"/>
</logger>
<logger name="org.apache.camel.impl.converter.DefaultTypeConverter">
<level value="ERROR"/>
</logger>
<logger name="org.apache.camel.core.xml">
<level value="WARN"/>
</logger>
<logger name="org.apache.qpid">
<level value="INFO"/>
</logger>
<logger name="org.apache.qpid.client.BasicMessageProducer_0_10">
<level value="WARN"/>
</logger>
<logger name="org.apache.xbean.spring">
<level value="WARN"/>
</logger>
<logger name="org.quartz">
<level value="ERROR"/>
</logger>
<logger name="org.springframework">
<level value="ERROR"/>
</logger>
<logger name="org.hibernate" additivity="false">
<level value="ERROR"/>
<appender-ref ref="HibernateLog" />
</logger>
<logger name="org.geotools">
<level value="WARN"/>
</logger>
<logger name="com.raytheon.uf.edex.purgesrv" additivity="false">
<level value="INFO"/> <level value="INFO"/>
<appender-ref ref="purge"/> <appender-ref ref="purge"/>
</logger> </logger>

View file

@ -1,138 +1,55 @@
<configuration debug="false" scan="true"> <configuration debug="false" scan="true">
<!-- general application log --> <include file="${edex.home}/conf/logback-edex-properties.xml"/>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <include file="${edex.home}/conf/logback-edex-appenders.xml" />
<encoder>
<pattern>%-5p %d [%t] %c{0}: %m%n</pattern>
</encoder>
</appender>
<!-- hibernate log -->
<appender name="HibernateLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${edex.home}/logs/edex-${edex.run.mode}-hibernate-%d{yyyyMMdd}.log</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>%-5p %d [%t] %c{0}: %m%n</pattern>
</encoder>
</appender>
<!-- BandwidthManager log --> <!-- BandwidthManager log -->
<appender name="BandwidthManagerLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <appender name="BandwidthManagerLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <rollingPolicy class="com.raytheon.uf.common.status.logback.StdTimeBasedRollingPolicy">
<fileNamePattern>${edex.home}/logs/edex-${edex.run.mode}-bandwidth-%d{yyyyMMdd}.log</fileNamePattern> <name>bandwidth</name>
<maxHistory>30</maxHistory> </rollingPolicy>
</rollingPolicy> <encoder class="com.raytheon.uf.common.status.logback.UFStdEncoder"/>
<encoder>
<pattern>%-5p %d [%t] %c{0}: %m%n</pattern>
</encoder>
</appender> </appender>
<!-- data delivery log --> <!-- data delivery log -->
<appender name="DataDeliveryLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <appender name="DataDeliveryLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <rollingPolicy class="com.raytheon.uf.common.status.logback.StdTimeBasedRollingPolicy">
<fileNamePattern>${edex.home}/logs/edex-${edex.run.mode}-datadelivery-%d{yyyyMMdd}.log</fileNamePattern> <name>datadelivery</name>
<maxHistory>30</maxHistory> </rollingPolicy>
</rollingPolicy> <encoder class="com.raytheon.uf.common.status.logback.UFStdEncoder"/>
<encoder>
<pattern>%-5p %d [%t] %c{0}: %m%n</pattern>
</encoder>
</appender> </appender>
<!-- data delivery Notification log --> <!-- data delivery Notification log -->
<appender name="NotificationLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <appender name="NotificationLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <rollingPolicy class="com.raytheon.uf.common.status.logback.StdTimeBasedRollingPolicy">
<fileNamePattern>${edex.home}/logs/edex-${edex.run.mode}-notification-%d{yyyyMMdd}.log</fileNamePattern> <name>notification</name>
<maxHistory>30</maxHistory> </rollingPolicy>
</rollingPolicy> <encoder class="com.raytheon.uf.common.status.logback.UFStdEncoder"/>
<encoder>
<pattern>%-5p %d [%t] %c{0}: %m%n</pattern>
</encoder>
</appender> </appender>
<!-- data delivery Retrieval log --> <!-- data delivery Retrieval log -->
<appender name="RetrievalLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <appender name="RetrievalLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <rollingPolicy class="com.raytheon.uf.common.status.logback.StdTimeBasedRollingPolicy">
<fileNamePattern>${edex.home}/logs/edex-${edex.run.mode}-retrieval-%d{yyyyMMdd}.log</fileNamePattern> <name>retrieval</name>
<maxHistory>30</maxHistory> </rollingPolicy>
</rollingPolicy> <encoder class="com.raytheon.uf.common.status.logback.UFStdEncoder"/>
<encoder>
<pattern>%-5p %d [%t] %c{0}: %m%n</pattern>
</encoder>
</appender> </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">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <rollingPolicy class="com.raytheon.uf.common.status.logback.StdTimeBasedRollingPolicy">
<fileNamePattern>${edex.home}/logs/edex-${edex.run.mode}-purge-%d{yyyyMMdd}.log</fileNamePattern> <name>purge</name>
<maxHistory>30</maxHistory>
</rollingPolicy> </rollingPolicy>
<encoder class="com.raytheon.uf.common.status.logback.UFStdEncoder"/>
<encoder>
<pattern>%-5p %d [%t] %c{0}: %m%n</pattern>
</encoder>
</appender> </appender>
<appender name="ThreadBasedLog" class="com.raytheon.uf.common.status.logback.ThreadBasedAppender"> <appender name="ThreadBasedLog" class="com.raytheon.uf.common.status.logback.ThreadBasedAppender">
<maxHistory>30</maxHistory>
<patternLayout>%-5p %d [%t] %c{0}: %m%n</patternLayout>
<fileNameBase>${edex.home}/logs/edex-${edex.run.mode}-%s{name}-%d{yyyyMMdd}.log</fileNameBase>
<defaultAppenderName>console</defaultAppenderName> <defaultAppenderName>console</defaultAppenderName>
<appender-ref ref="console"/> <appender-ref ref="console"/>
</appender> </appender>
<logger name="com.raytheon"> <include file="${edex.home}/conf/logback-edex-loggers.xml" />
<level value="INFO"/> <include file="${edex.home}/conf/logback-edex-hibernate-logger.xml" />
</logger>
<!-- used by c3p0 -->
<logger name="com.mchange">
<level value="ERROR"/>
</logger>
<logger name="com.tc">
<level value="WARN"/>
</logger>
<logger name="mx4j">
<level value="ERROR"/>
</logger>
<logger name="org.apache">
<level value="INFO"/>
</logger>
<logger name="org.apache.activemq.spring">
<level value="WARN"/>
</logger>
<logger name="org.apache.camel.impl.converter.DefaultTypeConverter">
<level value="ERROR"/>
</logger>
<logger name="org.apache.camel.core.xml">
<level value="WARN"/>
</logger>
<logger name="org.apache.qpid">
<level value="INFO"/>
</logger>
<logger name="org.apache.qpid.client.BasicMessageProducer_0_10">
<level value="WARN"/>
</logger>
<logger name="org.apache.xbean.spring">
<level value="WARN"/>
</logger>
<logger name="org.quartz">
<level value="ERROR"/>
</logger>
<logger name="org.springframework">
<level value="ERROR"/>
</logger>
<logger name="org.hibernate" additivity="false">
<level value="ERROR"/>
<appender-ref ref="HibernateLog" />
</logger>
<logger name="org.geotools">
<level value="WARN"/>
</logger>
<logger name="edu"> <logger name="edu">
<level value="WARN" /> <level value="WARN" />
</logger> </logger>

View file

@ -0,0 +1,68 @@
<configuration debug="false" scan="true">
<include file="${edex.home}/conf/logback-edex-properties.xml"/>
<include file="${edex.home}/conf/logback-edex-appenders.xml" />
<!-- ProductSrvRequest log -->
<appender name="ProductSrvRequestLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="com.raytheon.uf.common.status.logback.StdTimeBasedRollingPolicy">
<name>productSrvRequest</name>
</rollingPolicy>
<encoder class="com.raytheon.uf.common.status.logback.UFStdEncoder"/>
</appender>
<appender name="ProductSrvRequestLogAsync" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="ProductSrvRequestLog" />
</appender>
<!-- TextDBSrvRequest log -->
<appender name="TextDBSrvRequestLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="com.raytheon.uf.common.status.logback.StdTimeBasedRollingPolicy">
<name>textdbSrvRequest</name>
</rollingPolicy>
<encoder class="com.raytheon.uf.common.status.logback.UFStdEncoder"/>
</appender>
<appender name="TextDBSrvRequestLogAsync" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="TextDBSrvRequestLog" />
</appender>
<!-- ThriftSrv (RemoteRequestRouteWrapper) request log -->
<appender name="ThriftSrvRequestLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="com.raytheon.uf.common.status.logback.StdTimeBasedRollingPolicy">
<name>thriftSrv</name>
</rollingPolicy>
<encoder class="com.raytheon.uf.common.status.logback.UFStdEncoder"/>
</appender>
<appender name="ThriftSrvRequestLogAsync" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="ThriftSrvRequestLog" />
</appender>
<include file="${edex.home}/conf/logback-edex-loggers.xml" />
<include file="${edex.home}/conf/logback-edex-limited-loggers.xml"/>
<logger name="ProductSrvRequestLogger" additivity="false">
<level value="DEBUG"/>
<appender-ref ref="ProductSrvRequestLogAsync"/>
</logger>
<logger name="TextDBSrvRequestLogger" additivity="false">
<level value="DEBUG"/>
<appender-ref ref="TextDBSrvRequestLogAsync"/>
</logger>
<logger name="ThriftSrvRequestLogger" additivity="false">
<level value="Info"/>
<appender-ref ref="ThriftSrvRequestLogAsync" />
</logger>
<logger name="org.hibernate">
<level value="ERROR"/>
</logger>
<!-- default logging -->
<root>
<level value="INFO"/>
<appender-ref ref="asyncConsole"/>
</root>
</configuration>

View file

@ -1,163 +1,9 @@
<configuration debug="false" scan="true"> <configuration debug="false" scan="true">
<!-- general application log --> <include file="${edex.home}/conf/logback-edex-properties.xml"/>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <include file="${edex.home}/conf/logback-edex-appenders.xml" />
<encoder> <!-- Simple default logback. -->
<pattern>%-5p %d [%t] %c{0}: %m%n</pattern> <include file="${edex.home}/conf/logback-edex-loggers.xml" />
</encoder> <include file="${edex.home}/conf/logback-edex-hibernate-logger.xml" />
</appender>
<appender name="asyncConsole" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="console" />
</appender>
<!-- hibernate log -->
<appender name="HibernateLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${edex.home}/logs/edex-${edex.run.mode}-hibernate-%d{yyyyMMdd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%-5p %d [%t] %c{0}: %m%n %nopex</pattern>
</encoder>
</appender>
<!-- ProductSrvRequest log -->
<appender name="ProductSrvRequestLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${edex.home}/logs/edex-request-productSrvRequest-%d{yyyyMMdd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%-5p %d [%t] %c{0}: %m%n</pattern>
</encoder>
</appender>
<appender name="ProductSrvRequestLogAsync" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="ProductSrvRequestLog" />
</appender>
<!-- TextDBSrvRequest log -->
<appender name="TextDBSrvRequestLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${edex.home}/logs/edex-request-textdbSrvRequest-%d{yyyyMMdd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%-5p %d [%t] %c{0}: %m%n</pattern>
</encoder>
</appender>
<appender name="TextDBSrvRequestLogAsync" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="TextDBSrvRequestLog" />
</appender>
<!-- ThriftSrv (RemoteRequestRouteWrapper) request log -->
<appender name="ThriftSrvRequestLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${edex.home}/logs/edex-request-thriftSrv-%d{yyyyMMdd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%-5p %d [%t] %c{0}: %m%n</pattern>
</encoder>
</appender>
<appender name="ThriftSrvRequestLogAsync" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="ThriftSrvRequestLog" />
</appender>
<!-- Performance log -->
<appender name="PerformanceLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${edex.home}/logs/edex-${edex.run.mode}-performance-%d{yyyyMMdd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%-5p %d [%t] %c{0}: %m%n</pattern>
</encoder>
</appender>
<appender name="PerformanceLogAsync" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="PerformanceLog" />
</appender>
<logger name="ProductSrvRequestLogger" additivity="false">
<level value="DEBUG"/>
<appender-ref ref="ProductSrvRequestLogAsync"/>
</logger>
<logger name="TextDBSrvRequestLogger" additivity="false">
<level value="DEBUG"/>
<appender-ref ref="TextDBSrvRequestLogAsync"/>
</logger>
<logger name="ThriftSrvRequestLogger" additivity="false">
<level value="Info"/>
<appender-ref ref="ThriftSrvRequestLogAsync" />
</logger>
<logger name="PerformanceLogger" additivity="false">
<level value="DEBUG"/>
<appender-ref ref="PerformanceLogAsync" />
</logger>
<logger name="com.raytheon">
<level value="INFO"/>
</logger>
<logger name="com.raytheon.edex.services.ArchiveSrv">
<level value="WARN"/>
</logger>
<logger name="com.raytheon.edex.services.NotifySrv">
<level value="WARN"/>
</logger>
<!-- used by c3p0 -->
<logger name="com.mchange">
<level value="ERROR"/>
</logger>
<logger name="com.tc">
<level value="WARN"/>
</logger>
<logger name="mx4j">
<level value="ERROR"/>
</logger>
<logger name="org.apache">
<level value="INFO"/>
</logger>
<logger name="org.apache.activemq.spring">
<level value="WARN"/>
</logger>
<logger name="org.apache.camel.impl.converter.DefaultTypeConverter">
<level value="ERROR"/>
</logger>
<logger name="org.apache.camel.core.xml">
<level value="WARN"/>
</logger>
<logger name="org.apache.qpid">
<level value="INFO"/>
</logger>
<logger name="org.apache.qpid.client.BasicMessageProducer_0_10">
<level value="WARN"/>
</logger>
<logger name="org.apache.xbean.spring">
<level value="WARN"/>
</logger>
<logger name="org.quartz">
<level value="ERROR"/>
</logger>
<logger name="org.springframework">
<level value="ERROR"/>
</logger>
<logger name="org.hibernate" additivity="false">
<level value="ERROR"/>
<appender-ref ref="HibernateLog" />
</logger>
<logger name="org.geotools">
<level value="WARN"/>
</logger>
<!-- default logging --> <!-- default logging -->
<root> <root>

View file

@ -28,4 +28,5 @@ export SERIALIZE_STREAM_MAX_SIZE_MB=8
export EDEX_DEBUG_PORT=5005 export EDEX_DEBUG_PORT=5005
export EDEX_JMX_PORT=1616 export EDEX_JMX_PORT=1616
export LOG_CONF=logback-request.xml
export MGMT_PORT=9601 export MGMT_PORT=9601

View file

@ -34,6 +34,7 @@ import org.eclipse.swt.widgets.Display;
* ------------ ---------- ----------- -------------------------- * ------------ ---------- ----------- --------------------------
* 05 Oct 2008 lvenable Initial creation. * 05 Oct 2008 lvenable Initial creation.
* 02 Apr 2009 lvenable TTR fixes. * 02 Apr 2009 lvenable TTR fixes.
* 02 Mar 2015 3856 lvenable Cancel the job if the timer is being canceled.
* *
* </pre> * </pre>
* *
@ -45,12 +46,12 @@ public class AlertTimer {
/** /**
* Callback called when the timer fires or when the timer is finished. * Callback called when the timer fires or when the timer is finished.
*/ */
private ITimerAction actionCB; private final ITimerAction actionCB;
/** /**
* Parent display. * Parent display.
*/ */
private Display parentDisplay; private final Display parentDisplay;
/** /**
* Time in milliseconds between executions. * Time in milliseconds between executions.
@ -74,7 +75,7 @@ public class AlertTimer {
*/ */
private boolean blinkText; private boolean blinkText;
private Job job = new Job("AlertTimer") { private final Job job = new Job("AlertTimer") {
@Override @Override
protected IStatus run(IProgressMonitor monitor) { protected IStatus run(IProgressMonitor monitor) {
@ -87,6 +88,7 @@ public class AlertTimer {
if (isRunning) { if (isRunning) {
parentDisplay.syncExec(new Runnable() { parentDisplay.syncExec(new Runnable() {
@Override
public void run() { public void run() {
actionCB.timerAction(blinkText); actionCB.timerAction(blinkText);
} }
@ -224,13 +226,14 @@ public class AlertTimer {
* Setting alertPopupDlg Cancel the timer. * Setting alertPopupDlg Cancel the timer.
*/ */
public void cancelTimer() { public void cancelTimer() {
// only synchronize on cancelling the timer, don't do the syncExec in // only synchronize on canceling the timer, don't do the syncExec in
// the sync block. // the sync block.
boolean cancel = false; boolean cancel = false;
synchronized (this) { synchronized (this) {
if (isRunning) { if (isRunning) {
isRunning = false; isRunning = false;
cancel = true; cancel = true;
job.cancel();
} }
} }
@ -240,6 +243,7 @@ public class AlertTimer {
} }
parentDisplay.syncExec(new Runnable() { parentDisplay.syncExec(new Runnable() {
@Override
public void run() { public void run() {
actionCB.timerCompleted(); actionCB.timerCompleted();
} }

View file

@ -1,9 +1,10 @@
<configuration debug="false" scan="false"> <configuration debug="false" scan="false">
<!-- Only define when not wanting to use the UF Standard.
<property scope="context" name="log.message.pattern" value="%-5p %d [%t] %c{0}: %m%n"/>
-->
<!-- general application log --> <!-- general application log -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder> <encoder class="com.raytheon.uf.common.status.logback.UFStdEncoder"/>
<pattern>%-5p %d [%t] %c{0}: %m%n</pattern>
</encoder>
<filter class="com.raytheon.uf.common.status.logback.InvertedThresholdFilter"> <filter class="com.raytheon.uf.common.status.logback.InvertedThresholdFilter">
<level>INFO</level> <level>INFO</level>
</filter> </filter>
@ -14,9 +15,7 @@
<filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level> <level>WARN</level>
</filter> </filter>
<encoder> <encoder class="com.raytheon.uf.common.status.logback.UFStdEncoder"/>
<pattern>%-5p %d [%t] %c{0}: %m%n</pattern>
</encoder>
</appender> </appender>
<appender name="AlertVizAdminLogAppender" class="com.raytheon.uf.common.status.logback.EnvConfigurableRollingFileAppender"> <appender name="AlertVizAdminLogAppender" class="com.raytheon.uf.common.status.logback.EnvConfigurableRollingFileAppender">
@ -33,9 +32,7 @@
<maxFileSize>2GB</maxFileSize> <maxFileSize>2GB</maxFileSize>
</triggeringPolicy> </triggeringPolicy>
<append>true</append> <append>true</append>
<encoder> <encoder class="com.raytheon.uf.common.status.logback.UFStdEncoder"/>
<pattern>%-5p %d [%t] %c{0}: %m%n</pattern>
</encoder>
</appender> </appender>
<logger name="AlertVizAdminLogger" additivity="false"> <logger name="AlertVizAdminLogger" additivity="false">
@ -47,18 +44,12 @@
<level value="INFO"/> <level value="INFO"/>
</logger> </logger>
<logger name="com.tc">
<level value="WARN"/>
</logger>
<logger name="mx4j"> <logger name="mx4j">
<level value="ERROR"/> <level value="ERROR"/>
</logger> </logger>
<logger name="org.apache"> <logger name="org.apache">
<level value="INFO"/> <level value="INFO"/>
</logger> </logger>
<logger name="org.apache.activemq.spring">
<level value="WARN"/>
</logger>
<logger name="org.apache.commons.beanutils"> <logger name="org.apache.commons.beanutils">
<level value="WARN"/> <level value="WARN"/>
</logger> </logger>

Binary file not shown.

After

Width:  |  Height:  |  Size: 545 B

View file

@ -1987,4 +1987,16 @@
perspectiveId="com.raytheon.uf.viz.d2d.ui.perspectives.D2D5Pane"> perspectiveId="com.raytheon.uf.viz.d2d.ui.perspectives.D2D5Pane">
</tearoffperspective> </tearoffperspective>
</extension> </extension>
<!-- add right click on tab actions -->
<extension
point="com.raytheon.viz.ui.editorMenuAddition">
<editorMenuAddition
class="com.raytheon.viz.ui.actions.RenameTabAction"
name="Rename Tab"
icon="icons/rename.png"
perspectiveId="com.raytheon.uf.viz.d2d.ui.perspectives.D2D5Pane">
</editorMenuAddition>
</extension>
</plugin> </plugin>

View file

@ -31,6 +31,7 @@ import java.util.Set;
import org.eclipse.jface.dialogs.InputDialog; import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT; import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.MouseEvent;
@ -68,6 +69,7 @@ import com.raytheon.uf.viz.core.drawables.AbstractDescriptor;
import com.raytheon.uf.viz.core.drawables.AbstractRenderableDisplay; import com.raytheon.uf.viz.core.drawables.AbstractRenderableDisplay;
import com.raytheon.uf.viz.core.drawables.ResourcePair; import com.raytheon.uf.viz.core.drawables.ResourcePair;
import com.raytheon.uf.viz.core.exception.VizException; import com.raytheon.uf.viz.core.exception.VizException;
import com.raytheon.uf.viz.core.maps.display.MapRenderableDisplay;
import com.raytheon.uf.viz.core.procedures.AlterBundleFactory; import com.raytheon.uf.viz.core.procedures.AlterBundleFactory;
import com.raytheon.uf.viz.core.procedures.Bundle; import com.raytheon.uf.viz.core.procedures.Bundle;
import com.raytheon.uf.viz.core.procedures.IAlterBundleContributor; import com.raytheon.uf.viz.core.procedures.IAlterBundleContributor;
@ -78,6 +80,7 @@ import com.raytheon.uf.viz.core.rsc.AbstractVizResource;
import com.raytheon.uf.viz.core.rsc.ResourceList; import com.raytheon.uf.viz.core.rsc.ResourceList;
import com.raytheon.uf.viz.d2d.ui.dialogs.procedures.ProcedureComm.BundlePair; import com.raytheon.uf.viz.d2d.ui.dialogs.procedures.ProcedureComm.BundlePair;
import com.raytheon.viz.ui.HistoryList; import com.raytheon.viz.ui.HistoryList;
import com.raytheon.viz.ui.IRenameablePart;
import com.raytheon.viz.ui.UiUtil; import com.raytheon.viz.ui.UiUtil;
import com.raytheon.viz.ui.actions.SaveBundle; import com.raytheon.viz.ui.actions.SaveBundle;
import com.raytheon.viz.ui.dialogs.CaveSWTDialog; import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
@ -85,13 +88,13 @@ import com.raytheon.viz.ui.dialogs.ICloseCallback;
import com.raytheon.viz.ui.editor.AbstractEditor; import com.raytheon.viz.ui.editor.AbstractEditor;
/** /**
* *
* Dialog for loading or modifying procedures. * Dialog for loading or modifying procedures.
* *
* <pre> * <pre>
* *
* SOFTWARE HISTORY * SOFTWARE HISTORY
* *
* Date Ticket# Engineer Description * Date Ticket# Engineer Description
* ------------ ---------- ----------- -------------------------- * ------------ ---------- ----------- --------------------------
* Initial Creation * Initial Creation
@ -104,8 +107,10 @@ import com.raytheon.viz.ui.editor.AbstractEditor;
* Jun 7, 2013 2074 mnash Remove resource if doesn't instantiate correctly * Jun 7, 2013 2074 mnash Remove resource if doesn't instantiate correctly
* Aug 11, 2014 3480 bclement added info logging when procedure is loaded * Aug 11, 2014 3480 bclement added info logging when procedure is loaded
* Jan 06, 2015 3879 nabowle Disallow copy-in when the view is empty. * Jan 06, 2015 3879 nabowle Disallow copy-in when the view is empty.
* Mar 02, 2015 4204 njensen Copy In uses tab name if applicable
*
* </pre> * </pre>
* *
* @author unknown * @author unknown
* @version 1.0 * @version 1.0
*/ */
@ -338,7 +343,7 @@ public class ProcedureDlg extends CaveSWTDialog {
/* /*
* (non-Javadoc) * (non-Javadoc)
* *
* @see * @see
* com.raytheon.viz.ui.dialogs.procedure.ProcedureComm.ICopyOutListener * com.raytheon.viz.ui.dialogs.procedure.ProcedureComm.ICopyOutListener
* #copyOut(com.raytheon.viz.ui.dialogs.procedure.ProcedureComm. * #copyOut(com.raytheon.viz.ui.dialogs.procedure.ProcedureComm.
@ -569,7 +574,7 @@ public class ProcedureDlg extends CaveSWTDialog {
InputDialog id = new InputDialog(shell, InputDialog id = new InputDialog(shell,
"Enter Bundle Name", "Enter bundle name:", b.name, "Enter Bundle Name", "Enter bundle name:", b.name,
null); null);
if (InputDialog.OK == id.open()) { if (Window.OK == id.open()) {
String newName = id.getValue(); String newName = id.getValue();
if (newName != null if (newName != null
@ -742,7 +747,16 @@ public class ProcedureDlg extends CaveSWTDialog {
} }
BundlePair bp = new BundlePair(); BundlePair bp = new BundlePair();
bp.name = HistoryList.getInstance().getLabels()[0]; if (!IRenameablePart.DEFAULT_PART_NAME.equals(b.getName())
&& b.getDisplays()[0] instanceof MapRenderableDisplay) {
/*
* This is a horrible hack to get a renamed editor's
* name instead of the default of Map.
*/
bp.name = b.getName();
} else {
bp.name = HistoryList.getInstance().getLabels()[0];
}
bp.xml = sb; bp.xml = sb;
bundles.add(bp); bundles.add(bp);
resyncProcedureAndList(); resyncProcedureAndList();
@ -1083,9 +1097,9 @@ public class ProcedureDlg extends CaveSWTDialog {
/** /**
* If there is a procedure dialog open for the given filename, return it, * If there is a procedure dialog open for the given filename, return it,
* otherwise null. * otherwise null.
* *
* @param fileName * @param fileName
* @return * @return the dialog if it's open for for the filename
*/ */
public static ProcedureDlg getDialog(String fileName) { public static ProcedureDlg getDialog(String fileName) {
synchronized (ProcedureDlg.openDialogs) { synchronized (ProcedureDlg.openDialogs) {
@ -1096,7 +1110,7 @@ public class ProcedureDlg extends CaveSWTDialog {
/** /**
* Get the ProcedureDlg for the given fileName and display it. * Get the ProcedureDlg for the given fileName and display it.
* *
* @param fileName * @param fileName
* @param p * @param p
* @param parent * @param parent

View file

@ -60,6 +60,7 @@ import com.raytheon.uf.viz.d2d.core.legend.D2DLegendResource.LegendMode;
import com.raytheon.viz.ui.BundleLoader; import com.raytheon.viz.ui.BundleLoader;
import com.raytheon.viz.ui.EditorUtil; import com.raytheon.viz.ui.EditorUtil;
import com.raytheon.viz.ui.HistoryList; import com.raytheon.viz.ui.HistoryList;
import com.raytheon.viz.ui.IRenameablePart;
import com.raytheon.viz.ui.UiUtil; import com.raytheon.viz.ui.UiUtil;
import com.raytheon.viz.ui.color.BackgroundColor; import com.raytheon.viz.ui.color.BackgroundColor;
import com.raytheon.viz.ui.color.IBackgroundColorChangedListener; import com.raytheon.viz.ui.color.IBackgroundColorChangedListener;
@ -93,6 +94,7 @@ import com.vividsolutions.jts.geom.Coordinate;
* Oct 10, 2013 #2104 mschenke Switched to use MapScalesManager * Oct 10, 2013 #2104 mschenke Switched to use MapScalesManager
* Jul 15, 2014 2954 njensen Updated init() for MapScalesManager change * Jul 15, 2014 2954 njensen Updated init() for MapScalesManager change
* Aug 25, 2014 3467 mapeters Removed changing of editability from swapPanes(). * Aug 25, 2014 3467 mapeters Removed changing of editability from swapPanes().
* Mar 02, 2015 4204 njensen Support for swapping part names
* *
* </pre> * </pre>
* *
@ -100,7 +102,7 @@ import com.vividsolutions.jts.geom.Coordinate;
* *
*/ */
public class SideView extends ViewPart implements IMultiPaneEditor, public class SideView extends ViewPart implements IMultiPaneEditor,
IBackgroundColorChangedListener { IBackgroundColorChangedListener, IRenameablePart {
private static final transient IUFStatusHandler statusHandler = UFStatus private static final transient IUFStatusHandler statusHandler = UFStatus
.getHandler(SideView.class); .getHandler(SideView.class);
@ -319,13 +321,21 @@ public class SideView extends ViewPart implements IMultiPaneEditor,
AbstractEditor theEditor = (AbstractEditor) editor; AbstractEditor theEditor = (AbstractEditor) editor;
// swap part name
String editorName = theEditor.getPartName();
String viewName = this.getPartName();
if ("D2D Side View".equals(viewName)) {
viewName = IRenameablePart.DEFAULT_PART_NAME;
}
theEditor.setPartName(viewName);
this.setPartName(editorName);
// First thing to do, swap input handlers // First thing to do, swap input handlers
// Get editor resource handlers and unregister on editor // Get editor resource handlers and unregister on editor
final InputPriority[] SWAPPABLE_PRIORITIES = { InputPriority.RESOURCE, final InputPriority[] SWAPPABLE_PRIORITIES = {
InputPriority.SYSTEM_RESOURCE, InputPriority.RESOURCE, InputPriority.SYSTEM_RESOURCE,
InputPriority.SYSTEM_RESOURCE_LOW }; InputPriority.SYSTEM_RESOURCE_LOW };
HashMap<InputPriority, IInputHandler[]> editorHandlers = HashMap<InputPriority, IInputHandler[]> editorHandlers = new HashMap<IInputHandler.InputPriority, IInputHandler[]>();
new HashMap<IInputHandler.InputPriority, IInputHandler[]>();
for (InputPriority priority : SWAPPABLE_PRIORITIES) { for (InputPriority priority : SWAPPABLE_PRIORITIES) {
IInputHandler[] handlers = theEditor.getMouseManager() IInputHandler[] handlers = theEditor.getMouseManager()
.getHandlersForPriority(priority); .getHandlersForPriority(priority);
@ -336,8 +346,7 @@ public class SideView extends ViewPart implements IMultiPaneEditor,
} }
// Store and unregister input handlers on ourself // Store and unregister input handlers on ourself
HashMap<InputPriority, IInputHandler[]> myHandlers = HashMap<InputPriority, IInputHandler[]> myHandlers = new HashMap<IInputHandler.InputPriority, IInputHandler[]>();
new HashMap<IInputHandler.InputPriority, IInputHandler[]>();
for (InputPriority priority : SWAPPABLE_PRIORITIES) { for (InputPriority priority : SWAPPABLE_PRIORITIES) {
IInputHandler[] handlers = paneManager.getMouseManager() IInputHandler[] handlers = paneManager.getMouseManager()
.getHandlersForPriority(priority); .getHandlersForPriority(priority);
@ -422,6 +431,8 @@ public class SideView extends ViewPart implements IMultiPaneEditor,
.getId() .getId()
.equals(DescriptorMap.getEditorId(myRenderables[0] .equals(DescriptorMap.getEditorId(myRenderables[0]
.getDescriptor().getClass().getName()))) { .getDescriptor().getClass().getName()))) {
// swap loop properties
LoopProperties editorLoopProperties = theEditor LoopProperties editorLoopProperties = theEditor
.getLoopProperties(); .getLoopProperties();
theEditor.setLoopProperties(loopProperties); theEditor.setLoopProperties(loopProperties);
@ -490,6 +501,8 @@ public class SideView extends ViewPart implements IMultiPaneEditor,
LoopProperties editorLoopProperties = theEditor LoopProperties editorLoopProperties = theEditor
.getLoopProperties(); .getLoopProperties();
theEditor = UiUtil.createEditor(editorId, myRenderables); theEditor = UiUtil.createEditor(editorId, myRenderables);
// closed the editor above so have to set the name again
theEditor.setPartName(viewName);
theEditor.setLoopProperties(loopProperties); theEditor.setLoopProperties(loopProperties);
this.loopProperties = editorLoopProperties; this.loopProperties = editorLoopProperties;
@ -550,8 +563,7 @@ public class SideView extends ViewPart implements IMultiPaneEditor,
for (InputPriority priority : SWAPPABLE_PRIORITIES) { for (InputPriority priority : SWAPPABLE_PRIORITIES) {
IInputHandler[] handlers = myHandlers.get(priority); IInputHandler[] handlers = myHandlers.get(priority);
for (IInputHandler handler : handlers) { for (IInputHandler handler : handlers) {
theEditor.registerMouseHandler(handler, theEditor.registerMouseHandler(handler, priority);
priority);
} }
} }
@ -781,4 +793,10 @@ public class SideView extends ViewPart implements IMultiPaneEditor,
} }
refresh(); refresh();
} }
@Override
public void setPartName(String partName) {
super.setPartName(partName);
}
} }

View file

@ -21,6 +21,7 @@ package com.raytheon.uf.viz.damagepath;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.IStatus;
@ -36,7 +37,6 @@ import com.raytheon.uf.common.localization.LocalizationContext;
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationLevel; import com.raytheon.uf.common.localization.LocalizationContext.LocalizationLevel;
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationType; import com.raytheon.uf.common.localization.LocalizationContext.LocalizationType;
import com.raytheon.uf.common.localization.LocalizationFile; import com.raytheon.uf.common.localization.LocalizationFile;
import com.raytheon.uf.common.localization.LocalizationFileInputStream;
import com.raytheon.uf.common.localization.LocalizationFileOutputStream; import com.raytheon.uf.common.localization.LocalizationFileOutputStream;
import com.raytheon.uf.common.localization.PathManagerFactory; import com.raytheon.uf.common.localization.PathManagerFactory;
import com.raytheon.uf.viz.core.IGraphicsTarget; import com.raytheon.uf.viz.core.IGraphicsTarget;
@ -75,6 +75,14 @@ public class DamagePathLayer<T extends DamagePathResourceData> extends
private static final String PATH = DIR + IPathManager.SEPARATOR + FILE; private static final String PATH = DIR + IPathManager.SEPARATOR + FILE;
/**
* JVM property to specify the localization level to attempt to save/load
* with. Falls back to USER if not defined.
*/
private static final LocalizationLevel LEVEL_TO_USE = LocalizationLevel
.valueOf(System.getProperty("damage.path.localization.level",
LocalizationLevel.USER.name()));
/* /*
* TODO: If we support multiple polygons in the future then the jobs will * TODO: If we support multiple polygons in the future then the jobs will
* need to be smart enough to load/save different files. * need to be smart enough to load/save different files.
@ -104,7 +112,7 @@ public class DamagePathLayer<T extends DamagePathResourceData> extends
// listen for changes to the directory // listen for changes to the directory
LocalizationFile dir = PathManagerFactory.getPathManager() LocalizationFile dir = PathManagerFactory.getPathManager()
.getLocalizationFile(getUserContext(), DIR); .getLocalizationFile(getContext(), DIR);
dir.addFileUpdatedObserver(this); dir.addFileUpdatedObserver(this);
loadJob.setSystem(true); loadJob.setSystem(true);
@ -129,7 +137,7 @@ public class DamagePathLayer<T extends DamagePathResourceData> extends
@Override @Override
protected void disposeInternal() { protected void disposeInternal() {
LocalizationFile dir = PathManagerFactory.getPathManager() LocalizationFile dir = PathManagerFactory.getPathManager()
.getLocalizationFile(getUserContext(), DIR); .getLocalizationFile(getContext(), DIR);
dir.removeFileUpdatedObserver(this); dir.removeFileUpdatedObserver(this);
super.disposeInternal(); super.disposeInternal();
@ -183,13 +191,13 @@ public class DamagePathLayer<T extends DamagePathResourceData> extends
} }
} }
private LocalizationContext getUserContext() { private LocalizationContext getContext() {
return PathManagerFactory.getPathManager().getContext( return PathManagerFactory.getPathManager().getContext(
LocalizationType.COMMON_STATIC, LocalizationLevel.USER); LocalizationType.COMMON_STATIC, LEVEL_TO_USE);
} }
protected LocalizationFile getDamagePathFile() { protected LocalizationFile getDamagePathFile() {
LocalizationContext ctx = getUserContext(); LocalizationContext ctx = getContext();
return PathManagerFactory.getPathManager().getLocalizationFile(ctx, return PathManagerFactory.getPathManager().getLocalizationFile(ctx,
PATH); PATH);
} }
@ -205,9 +213,9 @@ public class DamagePathLayer<T extends DamagePathResourceData> extends
} }
protected void loadDamagePath(LocalizationFile file) { protected void loadDamagePath(LocalizationFile file) {
try (LocalizationFileInputStream fis = file.openInputStream()) { try (InputStream is = file.openInputStream()) {
GeoJsonUtil json = new GeoJsonUtilSimpleImpl(); GeoJsonUtil json = new GeoJsonUtilSimpleImpl();
Polygon geometry = (Polygon) json.deserializeGeom(fis); Polygon geometry = (Polygon) json.deserializeGeom(is);
/* /*
* specifically call super.resetPolygon() cause this.resetPolygon() * specifically call super.resetPolygon() cause this.resetPolygon()
* will save the file and we don't want to do that or we could * will save the file and we don't want to do that or we could

View file

@ -43,7 +43,8 @@ import com.raytheon.viz.ui.panes.PaneManager;
* SOFTWARE HISTORY * SOFTWARE HISTORY
* Date Ticket# Engineer Description * Date Ticket# Engineer Description
* ------------ ---------- ----------- -------------------------- * ------------ ---------- ----------- --------------------------
* Oct 8, 2009 mschenke Initial creation * Oct 08, 2009 mschenke Initial creation
* Mar 02, 2015 4204 njensen Overrode setPartName()
* *
* </pre> * </pre>
* *
@ -151,4 +152,9 @@ public class VizXyEditor extends VizMultiPaneEditor implements
setColor(getPaneManager().getInsetPanes(), newColor); setColor(getPaneManager().getInsetPanes(), newColor);
} }
@Override
public void setPartName(String partName) {
super.setPartName(partName);
}
} }

View file

@ -25,6 +25,7 @@ import java.io.File;
import java.io.FileReader; import java.io.FileReader;
import java.io.FileWriter; import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
@ -50,7 +51,6 @@ import com.raytheon.uf.common.localization.LocalizationContext;
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationLevel; import com.raytheon.uf.common.localization.LocalizationContext.LocalizationLevel;
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationType; import com.raytheon.uf.common.localization.LocalizationContext.LocalizationType;
import com.raytheon.uf.common.localization.LocalizationFile; import com.raytheon.uf.common.localization.LocalizationFile;
import com.raytheon.uf.common.localization.LocalizationFileInputStream;
import com.raytheon.uf.common.localization.LocalizationFileOutputStream; import com.raytheon.uf.common.localization.LocalizationFileOutputStream;
import com.raytheon.uf.common.localization.PathManagerFactory; import com.raytheon.uf.common.localization.PathManagerFactory;
import com.raytheon.uf.common.localization.exception.LocalizationException; import com.raytheon.uf.common.localization.exception.LocalizationException;
@ -86,7 +86,8 @@ import com.vividsolutions.jts.geom.LineString;
* 07-11-12 #875 rferrel Move points to PointsDataManager. * 07-11-12 #875 rferrel Move points to PointsDataManager.
* 01-29-14 DR 16351 D. Friedman Fix updates to storm track from preferences. * 01-29-14 DR 16351 D. Friedman Fix updates to storm track from preferences.
* 04-02-14 DR 16351 D. Friedman Fix updates to storm track from preferences. (backport from 14.2.2) * 04-02-14 DR 16351 D. Friedman Fix updates to storm track from preferences. (backport from 14.2.2)
* 06-03-24 3191 njensen Improved saving/loading storm track data * Jun 03, 2014 3191 njensen Improved saving/loading storm track data
* Feb 24, 2015 3978 njensen Changed to use abstract InputStream
* *
* </pre> * </pre>
* *
@ -122,25 +123,25 @@ public class ToolsDataManager implements ILocalizationFileObserver {
private Map<String, LineString> baselines; private Map<String, LineString> baselines;
private ListenerList baselineListeners = new ListenerList(); private final ListenerList baselineListeners = new ListenerList();
private PointsDataManager pointsManager; private final PointsDataManager pointsManager;
private Collection<RangeRing> rangeRings; private Collection<RangeRing> rangeRings;
private StormTrackData stormData; private StormTrackData stormData;
private ListenerList stormListeners = new ListenerList(); private final ListenerList stormListeners = new ListenerList();
private Object stormLock = new Object(); private final Object stormLock = new Object();
private boolean stormTrackDirty = false; private boolean stormTrackDirty = false;
private LocalizationFile userToolsDir; private final LocalizationFile userToolsDir;
private IPathManager pathMgr; private final IPathManager pathMgr;
private BlockingQueue<String> baselineStoreQueue = new LinkedBlockingQueue<String>(); private final BlockingQueue<String> baselineStoreQueue = new LinkedBlockingQueue<String>();
public static synchronized ToolsDataManager getInstance() { public static synchronized ToolsDataManager getInstance() {
if (theManager == null) { if (theManager == null) {
@ -252,7 +253,7 @@ public class ToolsDataManager implements ILocalizationFileObserver {
userToolsDir.getContext(), userToolsDir.getName() userToolsDir.getContext(), userToolsDir.getName()
+ IPathManager.SEPARATOR + STORM_TRACK_FILE); + IPathManager.SEPARATOR + STORM_TRACK_FILE);
if (f.exists()) { if (f.exists()) {
LocalizationFileInputStream is = null; InputStream is = null;
try { try {
is = f.openInputStream(); is = f.openInputStream();
stormData = JAXB.unmarshal(is, StormTrackData.class); stormData = JAXB.unmarshal(is, StormTrackData.class);
@ -380,7 +381,7 @@ public class ToolsDataManager implements ILocalizationFileObserver {
} }
} }
private Job baselineStoreJob = new Job("Storing Baselines") { private final Job baselineStoreJob = new Job("Storing Baselines") {
@Override @Override
protected IStatus run(IProgressMonitor monitor) { protected IStatus run(IProgressMonitor monitor) {

View file

@ -21,9 +21,9 @@ package com.raytheon.uf.common.archive.config;
import java.io.File; import java.io.File;
import java.io.FileFilter; import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.text.FieldPosition; import java.text.FieldPosition;
import java.text.MessageFormat; import java.text.MessageFormat;
import java.util.ArrayList; import java.util.ArrayList;
@ -59,7 +59,6 @@ import com.raytheon.uf.common.localization.LocalizationContext;
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationLevel; import com.raytheon.uf.common.localization.LocalizationContext.LocalizationLevel;
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationType; import com.raytheon.uf.common.localization.LocalizationContext.LocalizationType;
import com.raytheon.uf.common.localization.LocalizationFile; import com.raytheon.uf.common.localization.LocalizationFile;
import com.raytheon.uf.common.localization.LocalizationFileInputStream;
import com.raytheon.uf.common.localization.LocalizationFileOutputStream; import com.raytheon.uf.common.localization.LocalizationFileOutputStream;
import com.raytheon.uf.common.localization.PathManagerFactory; import com.raytheon.uf.common.localization.PathManagerFactory;
import com.raytheon.uf.common.localization.exception.LocalizationException; import com.raytheon.uf.common.localization.exception.LocalizationException;
@ -98,6 +97,8 @@ import com.raytheon.uf.common.util.FileUtil;
* Apr 01, 2014 2862 rferrel Moved purge only routines to ArchivePurgeManager. * Apr 01, 2014 2862 rferrel Moved purge only routines to ArchivePurgeManager.
* Apr 29, 2014 3036 rferrel Check for missing archive root directories. * Apr 29, 2014 3036 rferrel Check for missing archive root directories.
* May 22, 2014 3181 rferrel Add check for valid array index. * May 22, 2014 3181 rferrel Add check for valid array index.
* Feb 24, 2015 3978 njensen Changed to use abstract InputStream
*
* </pre> * </pre>
* *
* @author rferrel * @author rferrel
@ -910,7 +911,7 @@ public class ArchiveConfigManager {
LocalizationFile lFile) throws IOException, LocalizationException, LocalizationFile lFile) throws IOException, LocalizationException,
DataBindingException { DataBindingException {
ArchiveConfig archiveConfig = null; ArchiveConfig archiveConfig = null;
LocalizationFileInputStream stream = null; InputStream stream = null;
try { try {
stream = lFile.openInputStream(); stream = lFile.openInputStream();
archiveConfig = JAXB.unmarshal(stream, ArchiveConfig.class); archiveConfig = JAXB.unmarshal(stream, ArchiveConfig.class);
@ -954,7 +955,7 @@ public class ArchiveConfigManager {
LocalizationFile lFile = pathMgr.getLocalizationFile(siteContext, LocalizationFile lFile = pathMgr.getLocalizationFile(siteContext,
ARCHIVE_DIR + "/" + fileName); ARCHIVE_DIR + "/" + fileName);
if (lFile.exists()) { if (lFile.exists()) {
FileInputStream stream = null; InputStream stream = null;
try { try {
stream = lFile.openInputStream(); stream = lFile.openInputStream();
selections = unmarshallSelectionStream(stream); selections = unmarshallSelectionStream(stream);
@ -1069,7 +1070,7 @@ public class ArchiveConfigManager {
* @return selectConfig * @return selectConfig
* @throws IOException * @throws IOException
*/ */
private SelectConfig unmarshallSelectionStream(FileInputStream stream) private SelectConfig unmarshallSelectionStream(InputStream stream)
throws IOException { throws IOException {
SelectConfig selections = null; SelectConfig selections = null;
try { try {

View file

@ -31,6 +31,7 @@ package com.raytheon.uf.common.dataplugin.binlightning;
* May 30, 2014 3226 bclement Initial creation * May 30, 2014 3226 bclement Initial creation
* Jul 07, 2014 3333 bclement added SOURCE * Jul 07, 2014 3333 bclement added SOURCE
* Jan 22, 2014 2949 nabowle Add default and unknown source values. * Jan 22, 2014 2949 nabowle Add default and unknown source values.
* Feb 27, 2015 4181 mapeters Added AVAILABLE_PARAMETERS.
* *
* </pre> * </pre>
* *
@ -69,6 +70,13 @@ public class LightningConstants {
public static final String SENSOR_COUNT_DATASET = "sensorCount"; public static final String SENSOR_COUNT_DATASET = "sensorCount";
// List of above metadata/HDF5 parameters
public static final String[] AVAILABLE_PARAMETERS = { SOURCE, TIME_DATASET,
LAT_DATASET, LON_DATASET, INTENSITY_DATASET, MSG_TYPE_DATASET,
STRIKE_TYPE_DATASET, PULSE_COUNT_DATSET, PULSE_INDEX_DATASET,
PULSE_TYPE_DATASET, HEIGHT_DATASET, SENSOR_COUNT_DATASET };
// Field values // Field values
public static final String DEFAULT_SOURCE = "NLDN"; public static final String DEFAULT_SOURCE = "NLDN";

View file

@ -73,6 +73,7 @@ import com.vividsolutions.jts.geom.GeometryFactory;
* Feb 06, 2014 2672 bsteffen Add envelope support * Feb 06, 2014 2672 bsteffen Add envelope support
* Jul 07, 2014 3333 bclement now uses lightning constants * Jul 07, 2014 3333 bclement now uses lightning constants
* Jul 30, 2014 3184 njensen Removed getValidIdentifiers() * Jul 30, 2014 3184 njensen Removed getValidIdentifiers()
* Feb 27, 2015 4181 mapeters Overrode getAvailableParameters().
* *
* </pre> * </pre>
* *
@ -109,6 +110,11 @@ public class BinLightningAccessFactory extends AbstractDataPluginFactory {
+ " does not support location names"); + " does not support location names");
} }
@Override
public String[] getAvailableParameters(IDataRequest request) {
return LightningConstants.AVAILABLE_PARAMETERS;
}
/* /*
* (non-Javadoc) * (non-Javadoc)
* *

View file

@ -76,6 +76,7 @@ import com.vividsolutions.jts.geom.Geometry;
* Jun 24, 2014 3170 mnash Get the accumulated time if multiple times are requested * Jun 24, 2014 3170 mnash Get the accumulated time if multiple times are requested
* Jul 14, 2014 3184 njensen Overrode getAvailableLevels() * Jul 14, 2014 3184 njensen Overrode getAvailableLevels()
* Jul 30, 2014 3184 njensen Overrode required and optional identifiers * Jul 30, 2014 3184 njensen Overrode required and optional identifiers
* Feb 27, 2015 4180 mapeters Overrode getAvailableParameters().
* *
* </pre> * </pre>
* *
@ -359,13 +360,40 @@ public class FFMPGeometryFactory extends AbstractDataPluginFactory {
+ domain + "';"; + domain + "';";
List<Object[]> results = DatabaseQueryUtil.executeDatabaseQuery( List<Object[]> results = DatabaseQueryUtil.executeDatabaseQuery(
QUERY_MODE.MODE_SQLQUERY, sql, "metadata", "ffmp"); QUERY_MODE.MODE_SQLQUERY, sql, "metadata", PLUGIN_NAME);
for (Object[] oa : results) { for (Object[] oa : results) {
pfafList.add((String) oa[0]); pfafList.add((String) oa[0]);
} }
return pfafList.toArray(new String[pfafList.size()]); return pfafList.toArray(new String[0]);
}
@Override
public String[] getAvailableParameters(IDataRequest request) {
StringBuilder sqlQuery = new StringBuilder("select distinct ")
.append(SOURCE_NAME).append(" from ").append(PLUGIN_NAME);
String keyWord = " where ";
for (Map.Entry<String, Object> entry : request.getIdentifiers()
.entrySet()) {
String key = entry.getKey();
String value = (String) entry.getValue();
sqlQuery.append(keyWord).append(key).append(" = '").append(value)
.append("'");
keyWord = " and ";
}
sqlQuery.append(";");
List<Object[]> results = DatabaseQueryUtil.executeDatabaseQuery(
QUERY_MODE.MODE_SQLQUERY, sqlQuery.toString(), "metadata",
PLUGIN_NAME);
List<String> params = new ArrayList<>(results.size());
for (Object[] r : results) {
params.add((String) r[0]);
}
return params.toArray(new String[0]);
} }
@Override @Override

View file

@ -25,7 +25,6 @@ import java.util.Map.Entry;
import org.geotools.coverage.grid.GridGeometry2D; import org.geotools.coverage.grid.GridGeometry2D;
import com.raytheon.uf.common.dataaccess.IDataFactory;
import com.raytheon.uf.common.dataaccess.IDataRequest; import com.raytheon.uf.common.dataaccess.IDataRequest;
import com.raytheon.uf.common.dataaccess.exception.DataRetrievalException; import com.raytheon.uf.common.dataaccess.exception.DataRetrievalException;
import com.raytheon.uf.common.dataaccess.grid.IGridData; import com.raytheon.uf.common.dataaccess.grid.IGridData;
@ -43,10 +42,8 @@ import com.raytheon.uf.common.dataplugin.gfe.slice.ScalarGridSlice;
import com.raytheon.uf.common.dataplugin.gfe.slice.WeatherGridSlice; import com.raytheon.uf.common.dataplugin.gfe.slice.WeatherGridSlice;
import com.raytheon.uf.common.dataplugin.level.Level; import com.raytheon.uf.common.dataplugin.level.Level;
import com.raytheon.uf.common.dataplugin.level.MasterLevel; import com.raytheon.uf.common.dataplugin.level.MasterLevel;
import com.raytheon.uf.common.dataquery.requests.DbQueryRequest;
import com.raytheon.uf.common.dataquery.requests.RequestConstraint; import com.raytheon.uf.common.dataquery.requests.RequestConstraint;
import com.raytheon.uf.common.dataquery.requests.RequestConstraint.ConstraintType; import com.raytheon.uf.common.dataquery.requests.RequestConstraint.ConstraintType;
import com.raytheon.uf.common.dataquery.responses.DbQueryResponse;
import com.raytheon.uf.common.geospatial.MapUtil; import com.raytheon.uf.common.geospatial.MapUtil;
import com.raytheon.uf.common.geospatial.util.SubGridGeometryCalculator; import com.raytheon.uf.common.geospatial.util.SubGridGeometryCalculator;
import com.raytheon.uf.common.numeric.buffer.ByteBufferWrapper; import com.raytheon.uf.common.numeric.buffer.ByteBufferWrapper;
@ -58,11 +55,11 @@ import com.raytheon.uf.common.util.StringUtil;
/** /**
* A data factory for getting gfe data from the metadata database. There are * A data factory for getting gfe data from the metadata database. There are
* currently not any required identifiers. * currently not any required identifiers.
* *
* <pre> * <pre>
* *
* SOFTWARE HISTORY * SOFTWARE HISTORY
* *
* Date Ticket# Engineer Description * Date Ticket# Engineer Description
* ------------- -------- ----------- -------------------------- * ------------- -------- ----------- --------------------------
* Feb 04, 2013 bsteffen Initial creation * Feb 04, 2013 bsteffen Initial creation
@ -75,15 +72,18 @@ import com.raytheon.uf.common.util.StringUtil;
* Feb 04, 2014 2672 bsteffen Enable requesting subgrids. * Feb 04, 2014 2672 bsteffen Enable requesting subgrids.
* Jul 30, 2014 3184 njensen Renamed valid identifiers to optional * Jul 30, 2014 3184 njensen Renamed valid identifiers to optional
* Feb 10, 2015 2866 nabowle Overwrite subgrid size estimation. * Feb 10, 2015 2866 nabowle Overwrite subgrid size estimation.
* * Feb 26, 2015 4179 mapeters Overrode getAvailableParameters(), added
* getAvailableValues(), inherits IDataFactory.
* Feb 27, 2015 4179 mapeters Promoted getAvailableValues() to
* AbstractDataPluginFactory.
*
* </pre> * </pre>
* *
* @author bsteffen * @author bsteffen
* @version 1.0 * @version 1.0
*/ */
public class GFEGridFactory extends AbstractGridDataPluginFactory implements public class GFEGridFactory extends AbstractGridDataPluginFactory {
IDataFactory {
public static final String MODEL_TIME = "modelTime"; public static final String MODEL_TIME = "modelTime";
@ -214,6 +214,7 @@ public class GFEGridFactory extends AbstractGridDataPluginFactory implements
* @param subGrid * @param subGrid
* @return * @return
*/ */
@Override
protected long estimateSubgridSize(GridGeometry2D gridGeom, protected long estimateSubgridSize(GridGeometry2D gridGeom,
SubGridGeometryCalculator subGrid) { SubGridGeometryCalculator subGrid) {
long size = gridGeom.getGridRange().getSpan(0) long size = gridGeom.getGridRange().getSpan(0)
@ -284,13 +285,13 @@ public class GFEGridFactory extends AbstractGridDataPluginFactory implements
@Override @Override
public String[] getAvailableLocationNames(IDataRequest request) { public String[] getAvailableLocationNames(IDataRequest request) {
DbQueryRequest dbRequest = buildDbQueryRequest(request); return getAvailableValues(request, GFEDataAccessUtil.SITE_ID,
dbRequest.addRequestField(GFEDataAccessUtil.SITE_ID); String.class);
dbRequest.setDistinct(true); }
DbQueryResponse dbResonse = executeDbQueryRequest(dbRequest,
request.toString());
return dbResonse.getFieldObjects(GFEDataAccessUtil.SITE_ID, @Override
public String[] getAvailableParameters(IDataRequest request) {
return getAvailableValues(request, GFEDataAccessUtil.PARM_NAME,
String.class); String.class);
} }
@ -302,5 +303,4 @@ public class GFEGridFactory extends AbstractGridDataPluginFactory implements
return (GFERecord) obj; return (GFERecord) obj;
} }
} }

View file

@ -20,9 +20,9 @@
package com.raytheon.uf.common.dataplugin.gfe.textproduct; package com.raytheon.uf.common.dataplugin.gfe.textproduct;
import java.io.File; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import com.raytheon.uf.common.localization.LocalizationFile; import com.raytheon.uf.common.localization.LocalizationFile;
import com.raytheon.uf.common.localization.exception.LocalizationException; import com.raytheon.uf.common.localization.exception.LocalizationException;
@ -44,6 +44,7 @@ import com.raytheon.uf.common.status.UFStatus.Priority;
* ------------ ---------- ----------- -------------------------- * ------------ ---------- ----------- --------------------------
* Mar 23, 2010 randerso Initial creation * Mar 23, 2010 randerso Initial creation
* Mar 26, 2014 #2884 randerso Code clean up * Mar 26, 2014 #2884 randerso Code clean up
* Feb 24, 2015 3978 njensen Changed to use abstract InputStream
* *
* </pre> * </pre>
* *
@ -117,7 +118,7 @@ public class DraftProduct {
throws SerializationException { throws SerializationException {
byte[] bytes = null; byte[] bytes = null;
FileInputStream in = null; InputStream in = null;
try { try {
File file = lf.getFile(true); File file = lf.getFile(true);
in = lf.openInputStream(); in = lf.openInputStream();

View file

@ -19,9 +19,13 @@
**/ **/
package com.raytheon.uf.common.dataplugin.grid.dataaccess; package com.raytheon.uf.common.dataplugin.grid.dataaccess;
import java.awt.Point;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
@ -29,14 +33,27 @@ import java.util.Set;
import javax.measure.unit.Unit; import javax.measure.unit.Unit;
import org.geotools.coverage.grid.GridEnvelope2D;
import org.geotools.coverage.grid.GridGeometry2D; import org.geotools.coverage.grid.GridGeometry2D;
import org.geotools.geometry.DirectPosition2D;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.geotools.referencing.CRS;
import org.geotools.referencing.crs.DefaultGeographicCRS;
import org.opengis.referencing.FactoryException;
import org.opengis.referencing.operation.MathTransform;
import org.opengis.referencing.operation.TransformException;
import com.raytheon.uf.common.comm.CommunicationException; import com.raytheon.uf.common.comm.CommunicationException;
import com.raytheon.uf.common.dataaccess.IDataRequest; import com.raytheon.uf.common.dataaccess.IDataRequest;
import com.raytheon.uf.common.dataaccess.exception.DataRetrievalException; import com.raytheon.uf.common.dataaccess.exception.DataRetrievalException;
import com.raytheon.uf.common.dataaccess.exception.EnvelopeProjectionException;
import com.raytheon.uf.common.dataaccess.exception.IncompatibleRequestException;
import com.raytheon.uf.common.dataaccess.geom.IGeometryData;
import com.raytheon.uf.common.dataaccess.grid.IGridData; import com.raytheon.uf.common.dataaccess.grid.IGridData;
import com.raytheon.uf.common.dataaccess.impl.AbstractGridDataPluginFactory; import com.raytheon.uf.common.dataaccess.impl.AbstractGridDataPluginFactory;
import com.raytheon.uf.common.dataaccess.impl.DefaultGeometryData;
import com.raytheon.uf.common.dataaccess.impl.DefaultGridData; import com.raytheon.uf.common.dataaccess.impl.DefaultGridData;
import com.raytheon.uf.common.dataaccess.util.PDOUtil;
import com.raytheon.uf.common.dataplugin.PluginDataObject; import com.raytheon.uf.common.dataplugin.PluginDataObject;
import com.raytheon.uf.common.dataplugin.grid.GridConstants; import com.raytheon.uf.common.dataplugin.grid.GridConstants;
import com.raytheon.uf.common.dataplugin.grid.GridRecord; import com.raytheon.uf.common.dataplugin.grid.GridRecord;
@ -44,13 +61,22 @@ import com.raytheon.uf.common.dataplugin.grid.dataquery.GridQueryAssembler;
import com.raytheon.uf.common.dataplugin.grid.mapping.DatasetIdMapper; import com.raytheon.uf.common.dataplugin.grid.mapping.DatasetIdMapper;
import com.raytheon.uf.common.dataplugin.level.Level; import com.raytheon.uf.common.dataplugin.level.Level;
import com.raytheon.uf.common.dataplugin.level.mapping.LevelMapper; import com.raytheon.uf.common.dataplugin.level.mapping.LevelMapper;
import com.raytheon.uf.common.dataquery.requests.DbQueryRequest;
import com.raytheon.uf.common.dataquery.requests.RequestConstraint; import com.raytheon.uf.common.dataquery.requests.RequestConstraint;
import com.raytheon.uf.common.dataquery.requests.RequestConstraint.ConstraintType; import com.raytheon.uf.common.dataquery.requests.RequestConstraint.ConstraintType;
import com.raytheon.uf.common.dataquery.responses.DbQueryResponse; import com.raytheon.uf.common.dataquery.responses.DbQueryResponse;
import com.raytheon.uf.common.datastorage.Request;
import com.raytheon.uf.common.datastorage.records.FloatDataRecord;
import com.raytheon.uf.common.datastorage.records.IDataRecord;
import com.raytheon.uf.common.geospatial.util.SubGridGeometryCalculator;
import com.raytheon.uf.common.gridcoverage.GridCoverage;
import com.raytheon.uf.common.numeric.source.DataSource; import com.raytheon.uf.common.numeric.source.DataSource;
import com.raytheon.uf.common.parameter.Parameter;
import com.raytheon.uf.common.parameter.mapping.ParameterMapper; import com.raytheon.uf.common.parameter.mapping.ParameterMapper;
import com.raytheon.uf.common.time.DataTime;
import com.raytheon.uf.common.util.mapping.Mapper; import com.raytheon.uf.common.util.mapping.Mapper;
import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.Envelope;
import com.vividsolutions.jts.geom.GeometryFactory;
/** /**
* Data access factory for accessing data from the Grid plugin as grid types. * Data access factory for accessing data from the Grid plugin as grid types.
@ -70,7 +96,8 @@ import com.raytheon.uf.common.util.mapping.Mapper;
* Oct 16, 2014 3598 nabowle Accept level identifiers. * Oct 16, 2014 3598 nabowle Accept level identifiers.
* Oct 21, 2014 3755 nabowle Add getAvailable levels and parameters. * Oct 21, 2014 3755 nabowle Add getAvailable levels and parameters.
* Feb 13, 2015 4124 mapeters Inherits IDataFactory. * Feb 13, 2015 4124 mapeters Inherits IDataFactory.
* * Feb 23, 2015 4016 bsteffen Add support for geometry requests.
* Feb 27, 2015 4179 mapeters Use AbstractDataPluginFactory.getAvailableValues().
* *
* </pre> * </pre>
* *
@ -320,7 +347,8 @@ public class GridDataAccessFactory extends AbstractGridDataPluginFactory {
@Override @Override
public String[] getAvailableLocationNames(IDataRequest request) { public String[] getAvailableLocationNames(IDataRequest request) {
return getAvailableLocationNames(request, GridConstants.DATASET_ID); return getAvailableValues(request, GridConstants.DATASET_ID,
String.class);
} }
/** /**
@ -328,14 +356,7 @@ public class GridDataAccessFactory extends AbstractGridDataPluginFactory {
*/ */
@Override @Override
public Level[] getAvailableLevels(IDataRequest request) { public Level[] getAvailableLevels(IDataRequest request) {
DbQueryRequest dbQueryRequest = buildDbQueryRequest(request); return getAvailableValues(request, GridConstants.LEVEL, Level.class);
dbQueryRequest.setDistinct(Boolean.TRUE);
dbQueryRequest.addRequestField(GridConstants.LEVEL);
DbQueryResponse dbQueryResponse = this.executeDbQueryRequest(
dbQueryRequest, request.toString());
return dbQueryResponse
.getFieldObjects(GridConstants.LEVEL, Level.class);
} }
/** /**
@ -343,13 +364,297 @@ public class GridDataAccessFactory extends AbstractGridDataPluginFactory {
*/ */
@Override @Override
public String[] getAvailableParameters(IDataRequest request) { public String[] getAvailableParameters(IDataRequest request) {
DbQueryRequest dbQueryRequest = buildDbQueryRequest(request); return getAvailableValues(request,
dbQueryRequest.setDistinct(Boolean.TRUE);
dbQueryRequest.addRequestField(GridConstants.PARAMETER_ABBREVIATION);
DbQueryResponse dbQueryResponse = this.executeDbQueryRequest(
dbQueryRequest, request.toString());
return dbQueryResponse.getFieldObjects(
GridConstants.PARAMETER_ABBREVIATION, String.class); GridConstants.PARAMETER_ABBREVIATION, String.class);
} }
/**
* Return geometry data for grid records. Each grid cell is treated as a
* single Point Geometry. An envelope must be provided.
*/
@Override
protected IGeometryData[] getGeometryData(IDataRequest request,
DbQueryResponse dbQueryResponse) {
if (request.getEnvelope() == null) {
throw new IncompatibleRequestException(
"Requests for Grid data as a geometry must provide a bounding envelope.");
}
Map<GridGeometryKey, Set<GridRecord>> sortedRecords = new HashMap<>();
for (GridRecord record : dbQueryResponse
.getEntityObjects(GridRecord.class)) {
GridGeometryKey key = new GridGeometryKey(record);
Set<GridRecord> records = sortedRecords.get(key);
if (records == null) {
records = new HashSet<>();
sortedRecords.put(key, records);
}
records.add(record);
}
List<IGeometryData> result = new ArrayList<>(
dbQueryResponse.getNumResults());
for (Entry<GridGeometryKey, Set<GridRecord>> entry : sortedRecords
.entrySet()) {
result.addAll(getGeometryData(request, entry.getKey(),
entry.getValue()));
}
return result.toArray(new IGeometryData[0]);
}
/**
* Get geometry data for many related records. The result will be a single
* {@link IGeometryData} for each grid cell in the request envelope.
* Multiple records will be represented as seperate paramters within each
* IGeometryData.
*/
private Collection<IGeometryData> getGeometryData(IDataRequest request,
GridGeometryKey key, Set<GridRecord> records) {
ReferencedEnvelope requestEnv = new ReferencedEnvelope(
request.getEnvelope(), DefaultGeographicCRS.WGS84);
Point point = findRequestPoint(key.getGridCoverage(),
request.getEnvelope());
if (point != null) {
return Collections.singleton(getGeometryData(point, key, records));
} else {
SubGridGeometryCalculator subGrid = calculateSubGrid(requestEnv,
key.getGridCoverage().getGridGeometry());
if (subGrid != null && !subGrid.isEmpty()) {
return getGeometryData(subGrid, key, records);
} else {
return Collections.emptyList();
}
}
}
/**
* Get geometry data for a single point.
*/
private IGeometryData getGeometryData(Point point, GridGeometryKey key,
Set<GridRecord> records) {
DefaultGeometryData data = key.toGeometryData();
DirectPosition2D llPoint = findResponsePoint(key.getGridCoverage(),
point.x, point.y);
data.setGeometry(new GeometryFactory().createPoint(new Coordinate(
llPoint.x, llPoint.y)));
data.setLocationName(data.getLocationName() + "-" + point.x + ","
+ point.y);
Request request = Request.buildPointRequest(point);
populateGeometryData(records, request,
new DefaultGeometryData[] { data });
return data;
}
/**
* Get geometry data for multiple points within a subgrid that has been
* calculated from a request envelope.
*/
private Collection<IGeometryData> getGeometryData(
SubGridGeometryCalculator subGrid, GridGeometryKey key,
Set<GridRecord> records) {
GridEnvelope2D gridRange = subGrid.getSubGridGeometry2D()
.getGridRange2D();
DefaultGeometryData[] data = new DefaultGeometryData[(int) (gridRange
.getWidth() * gridRange.getHeight())];
GeometryFactory geometryFactory = new GeometryFactory();
int index = 0;
for (int y = (int) gridRange.getMinY(); y < gridRange.getMaxY(); y += 1) {
for (int x = (int) gridRange.getMinX(); x < gridRange.getMaxX(); x += 1) {
data[index] = key.toGeometryData();
DirectPosition2D llPoint = findResponsePoint(
key.getGridCoverage(), x, y);
data[index].setGeometry(geometryFactory
.createPoint(new Coordinate(llPoint.x, llPoint.y)));
data[index].setLocationName(data[index].getLocationName() + "-"
+ x + "," + y);
index += 1;
}
}
Request request = Request.buildSlab(subGrid.getGridRangeLow(true),
subGrid.getGridRangeHigh(false));
populateGeometryData(records, request, data);
return Arrays.<IGeometryData> asList(data);
}
/**
* Populate one or more DefaultGeometryData by requesting data for the
* specified request for each grid record. Each GridRecord is added to each
* DefaultGeometryData as a separate parameter. The order of the
* DefaultGeometryDatas must be the same as the order of the data returned
* from the provided request.
*/
private static void populateGeometryData(Set<GridRecord> records,
Request request, DefaultGeometryData[] data) {
for (GridRecord record : records) {
try {
Parameter parameter = record.getParameter();
IDataRecord dataRecord = PDOUtil.getDataRecord(record, "Data",
request);
if (dataRecord instanceof FloatDataRecord) {
float[] rawArray = ((FloatDataRecord) dataRecord)
.getFloatData();
if (rawArray.length != data.length) {
throw new DataRetrievalException(
"Unexpected response of size "
+ rawArray.length
+ " when expected size is "
+ data.length + " for record " + record);
}
for (int i = 0; i < data.length; i += 1) {
data[i].addData(parameter.getAbbreviation(),
rawArray[i], parameter.getUnit());
}
} else {
String type = dataRecord == null ? "null" : dataRecord
.getClass().getSimpleName();
throw new DataRetrievalException("Unexpected record type("
+ type + ") for " + record);
}
} catch (Exception e) {
throw new DataRetrievalException(
"Failed to retrieve the IDataRecord for GridRecord: "
+ record.toString(), e);
}
}
}
/**
* After a grid point has been requested, this will determine the Geometry
* for that point.
*/
private DirectPosition2D findResponsePoint(GridCoverage coverage, int x,
int y) {
try {
MathTransform grid2crs = coverage.getGridGeometry().getGridToCRS();
MathTransform crs2ll = CRS.findMathTransform(coverage.getCrs(),
DefaultGeographicCRS.WGS84, true);
DirectPosition2D point = new DirectPosition2D(x, y);
grid2crs.transform(point, point);
crs2ll.transform(point, point);
return point;
} catch (TransformException | FactoryException e) {
throw new EnvelopeProjectionException(
"Error determining point from envelope: ", e);
}
}
/**
* Find a single point(grid cell) to request. This will return a result only
* if the envelope is so small that it is entirely within a single grid cell
* and it overlaps the area of the coverage. It tests for this by converting
* the upper left and lower right corners of the envelope into grid space
* and returning the point only if both convert to the same point.
*/
private Point findRequestPoint(GridCoverage coverage, Envelope envelope) {
try {
MathTransform ll2crs = CRS.findMathTransform(
DefaultGeographicCRS.WGS84, coverage.getCrs(), true);
MathTransform crs2grid = coverage.getGridGeometry()
.getCRSToGrid2D();
double[] testPoints = { envelope.getMinX(), envelope.getMinY(),
envelope.getMaxX(), envelope.getMaxY() };
ll2crs.transform(testPoints, 0, testPoints, 0, 2);
crs2grid.transform(testPoints, 0, testPoints, 0, 2);
int minX = (int) Math.round(testPoints[0]);
int minY = (int) Math.round(testPoints[1]);
int maxX = (int) Math.round(testPoints[2]);
int maxY = (int) Math.round(testPoints[3]);
GridEnvelope2D gridRange = coverage.getGridGeometry()
.getGridRange2D();
if (minX == maxX && minY == maxY && gridRange.contains(minX, minY)) {
return new Point(minX, minY);
} else {
return null;
}
} catch (TransformException | FactoryException e) {
throw new EnvelopeProjectionException(
"Error determining point from envelope: ", e);
}
}
/**
* A class for organizing {@link GridRecord}s into groups which can be
* combined into a single {@link IGeometryData} object.
*/
private static final class GridGeometryKey {
private final Level level;
private final DataTime dataTime;
private final String datasetId;
private final GridCoverage coverage;
private final int hashCode;
public GridGeometryKey(GridRecord record) {
this.level = record.getLevel();
this.dataTime = record.getDataTime();
this.datasetId = record.getDatasetId();
this.coverage = record.getLocation();
final int prime = 31;
int hashCode = 1;
hashCode = prime * hashCode
+ ((coverage == null) ? 0 : coverage.hashCode());
hashCode = prime * hashCode
+ ((dataTime == null) ? 0 : dataTime.hashCode());
hashCode = prime * hashCode
+ ((datasetId == null) ? 0 : datasetId.hashCode());
hashCode = prime * hashCode
+ ((level == null) ? 0 : level.hashCode());
this.hashCode = hashCode;
}
public DefaultGeometryData toGeometryData() {
DefaultGeometryData geometryData = new DefaultGeometryData();
geometryData.setLevel(level);
geometryData.setDataTime(dataTime);
geometryData.setLocationName(datasetId);
return geometryData;
}
public GridCoverage getGridCoverage() {
return coverage;
}
@Override
public int hashCode() {
return this.hashCode;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
GridGeometryKey other = (GridGeometryKey) obj;
if (coverage == null) {
if (other.coverage != null)
return false;
} else if (!coverage.equals(other.coverage))
return false;
if (dataTime == null) {
if (other.dataTime != null)
return false;
} else if (!dataTime.equals(other.dataTime))
return false;
if (datasetId == null) {
if (other.datasetId != null)
return false;
} else if (!datasetId.equals(other.datasetId))
return false;
if (level == null) {
if (other.level != null)
return false;
} else if (!level.equals(other.level))
return false;
return true;
}
}
} }

View file

@ -91,6 +91,7 @@ import com.vividsolutions.jts.geom.Envelope;
* fields are used for the level one and two * fields are used for the level one and two
* values. * values.
* Feb 13, 2015 4124 mapeters Inherits IDataFactory. * Feb 13, 2015 4124 mapeters Inherits IDataFactory.
* Feb 27, 2015 4179 mapeters Use AbstractDataPluginFactory.getAvailableValues().
* *
* </pre> * </pre>
* *
@ -503,7 +504,7 @@ public class RadarGridFactory extends AbstractGridDataPluginFactory {
@Override @Override
public String[] getAvailableLocationNames(IDataRequest request) { public String[] getAvailableLocationNames(IDataRequest request) {
return getAvailableLocationNames(request, ICAO); return getAvailableValues(request, ICAO, String.class);
} }
/** /**

View file

@ -37,9 +37,7 @@ import com.raytheon.uf.common.dataaccess.impl.DefaultGridData;
import com.raytheon.uf.common.dataplugin.PluginDataObject; import com.raytheon.uf.common.dataplugin.PluginDataObject;
import com.raytheon.uf.common.dataplugin.satellite.SatelliteRecord; import com.raytheon.uf.common.dataplugin.satellite.SatelliteRecord;
import com.raytheon.uf.common.dataplugin.satellite.units.SatelliteUnits; import com.raytheon.uf.common.dataplugin.satellite.units.SatelliteUnits;
import com.raytheon.uf.common.dataquery.requests.DbQueryRequest;
import com.raytheon.uf.common.dataquery.requests.RequestConstraint; import com.raytheon.uf.common.dataquery.requests.RequestConstraint;
import com.raytheon.uf.common.dataquery.responses.DbQueryResponse;
import com.raytheon.uf.common.numeric.source.DataSource; import com.raytheon.uf.common.numeric.source.DataSource;
/** /**
@ -60,6 +58,7 @@ import com.raytheon.uf.common.numeric.source.DataSource;
* Jul 30, 2014 3184 njensen Renamed valid identifiers to optional * Jul 30, 2014 3184 njensen Renamed valid identifiers to optional
* Sep 29, 2014 3596 nabowle Always put creatingEntity in attributes. * Sep 29, 2014 3596 nabowle Always put creatingEntity in attributes.
* Feb 13, 2015 4124 mapeters Overrode getAvailableParameters(), inherits IDataFactory. * Feb 13, 2015 4124 mapeters Overrode getAvailableParameters(), inherits IDataFactory.
* Feb 27, 2015 4179 mapeters Use AbstractDataPluginFactory.getAvailableValues().
* *
* </pre> * </pre>
* *
@ -170,7 +169,7 @@ public class SatelliteGridFactory extends AbstractGridDataPluginFactory {
@Override @Override
public String[] getAvailableLocationNames(IDataRequest request) { public String[] getAvailableLocationNames(IDataRequest request) {
return getAvailableLocationNames(request, FIELD_SECTOR_ID); return getAvailableValues(request, FIELD_SECTOR_ID, String.class);
} }
/** /**
@ -178,14 +177,7 @@ public class SatelliteGridFactory extends AbstractGridDataPluginFactory {
*/ */
@Override @Override
public String[] getAvailableParameters(IDataRequest request) { public String[] getAvailableParameters(IDataRequest request) {
DbQueryRequest dbQueryRequest = buildDbQueryRequest(request); return getAvailableValues(request, FIELD_PYHSICAL_ELEMENT, String.class);
dbQueryRequest.setDistinct(Boolean.TRUE);
dbQueryRequest.addRequestField(FIELD_PYHSICAL_ELEMENT);
DbQueryResponse dbQueryResponse = this.executeDbQueryRequest(
dbQueryRequest, request.toString());
return dbQueryResponse.getFieldObjects(FIELD_PYHSICAL_ELEMENT,
String.class);
} }
} }

View file

@ -19,6 +19,8 @@
**/ **/
package com.raytheon.uf.common.dataplugin.warning.gis; package com.raytheon.uf.common.dataplugin.warning.gis;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@ -65,6 +67,7 @@ import com.vividsolutions.jts.geom.prep.PreparedGeometryFactory;
* Oct 22, 2013 2361 njensen Use JAXBManager for XML * Oct 22, 2013 2361 njensen Use JAXBManager for XML
* Jun 17, 2014 DR 17390 Qinglu Lin Updated getMetaDataMap() for lonField and latField. * Jun 17, 2014 DR 17390 Qinglu Lin Updated getMetaDataMap() for lonField and latField.
* Aug 21, 2014 3353 rferrel Generating Geo Spatial data set no longer on the UI thread. * Aug 21, 2014 3353 rferrel Generating Geo Spatial data set no longer on the UI thread.
* Feb 24, 2015 3978 njensen Use openInputStream() for reading file contents
* *
* </pre> * </pre>
* *
@ -292,9 +295,13 @@ public class GeospatialFactory {
+ fileName); + fileName);
if (lf.exists()) { if (lf.exists()) {
byte[] data = lf.read(); try (InputStream is = lf.openInputStream()) {
return SerializationUtil.transformFromThrift( return SerializationUtil.transformFromThrift(
GeospatialDataSet.class, data); GeospatialDataSet.class, is);
} catch (IOException e) {
throw new SerializationException("Error reading file "
+ lf.getName(), e);
}
} else { } else {
System.out.println("Attempted to load: " + lf.getName() System.out.println("Attempted to load: " + lf.getName()
+ " for site " + site + ", but file does not exist."); + " for site " + site + ", but file does not exist.");

View file

@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2 Bundle-ManifestVersion: 2
Bundle-Name: Ohd Plug-in Bundle-Name: Ohd Plug-in
Bundle-SymbolicName: com.raytheon.uf.edex.ohd Bundle-SymbolicName: com.raytheon.uf.edex.ohd
Bundle-Version: 1.14.0.qualifier Bundle-Version: 1.15.0.qualifier
Bundle-Vendor: RAYTHEON Bundle-Vendor: RAYTHEON
Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Import-Package: com.raytheon.edex.util, Import-Package: com.raytheon.edex.util,

View file

@ -1,19 +1,19 @@
/** /**
* This software was developed and / or modified by Raytheon Company, * This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government. * pursuant to Contract DG133W-05-CQ-1067 with the US Government.
* *
* U.S. EXPORT CONTROLLED TECHNICAL DATA * U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose * This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination * export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires * to non-U.S. persons whether in the United States or abroad requires
* 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
* *
* 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.
**/ **/
@ -22,11 +22,14 @@ package com.raytheon.uf.edex.ohd.pproc;
import java.io.File; import java.io.File;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.util.HashMap;
import java.util.Map;
import org.hibernate.HibernateException; import org.hibernate.HibernateException;
import org.opengis.metadata.spatial.PixelOrientation; import org.opengis.metadata.spatial.PixelOrientation;
import com.raytheon.uf.common.dataplugin.binlightning.BinLightningRecord; import com.raytheon.uf.common.dataplugin.binlightning.BinLightningRecord;
import com.raytheon.uf.common.dataplugin.binlightning.LightningConstants;
import com.raytheon.uf.common.dataplugin.persist.DefaultPathProvider; import com.raytheon.uf.common.dataplugin.persist.DefaultPathProvider;
import com.raytheon.uf.common.dataplugin.persist.IPersistable; import com.raytheon.uf.common.dataplugin.persist.IPersistable;
import com.raytheon.uf.common.dataquery.db.QueryResult; import com.raytheon.uf.common.dataquery.db.QueryResult;
@ -46,9 +49,9 @@ import com.vividsolutions.jts.geom.Coordinate;
/** /**
* Service implementation for gathering the lightning datasets from files in * Service implementation for gathering the lightning datasets from files in
* HDF5 format and inserting them into the ifhs lightning table. * HDF5 format and inserting them into the ifhs lightning table.
* *
* <pre> * <pre>
* *
* SOFTWARE HISTORY * SOFTWARE HISTORY
* Date Ticket# Engineer Description * Date Ticket# Engineer Description
* ------------ ---------- ----------- -------------------------- * ------------ ---------- ----------- --------------------------
@ -60,9 +63,12 @@ import com.vividsolutions.jts.geom.Coordinate;
* Aug 20, 2014 3549 njensen Fixed spelling in exceptions * Aug 20, 2014 3549 njensen Fixed spelling in exceptions
* Sep 17, 2014 3015 bclement improved exception handling * Sep 17, 2014 3015 bclement improved exception handling
* Dec 04, 2014 3015 njensen Corrected usage of Coordinate(x, y) * Dec 04, 2014 3015 njensen Corrected usage of Coordinate(x, y)
* * Feb 25, 2015 3992 nabowle Limit getMostRecentStrikes to NLDN.
* Deduplicate lightning data in a
* single BinLightningRecord.
*
* </pre> * </pre>
* *
* @author jnjanga * @author jnjanga
* @version 1.0 * @version 1.0
*/ */
@ -90,14 +96,15 @@ public class MpeLightningSrv {
/** /**
* Check the metadata Database for new lightning entries. * Check the metadata Database for new lightning entries.
* *
* @return rows returned from the query * @return rows returned from the query
*/ */
private QueryResultRow[] getMostRecentStrikes() throws EdexException { private QueryResultRow[] getMostRecentStrikes() throws EdexException {
QueryResult rs = null; QueryResult rs = null;
CoreDao coreDao = new CoreDao(DaoConfig.DEFAULT); CoreDao coreDao = new CoreDao(DaoConfig.DEFAULT);
final String lgtSQL = "select datauri from binlightning " final String lgtSQL = "select datauri from binlightning "
+ "where reftime > (now()- interval \'30 minutes \')"; + "where reftime > (now()- interval \'30 minutes \')"
+ "and source = '" + LightningConstants.DEFAULT_SOURCE + "'";
try { try {
rs = (QueryResult) coreDao.executeNativeSql(lgtSQL, true); rs = (QueryResult) coreDao.executeNativeSql(lgtSQL, true);
} catch (Exception e) { } catch (Exception e) {
@ -109,7 +116,7 @@ public class MpeLightningSrv {
/** /**
* Inserts a single record into ihfs's lightning table. * Inserts a single record into ihfs's lightning table.
* *
* @param dataURI * @param dataURI
* @throws EdexException * @throws EdexException
*/ */
@ -143,40 +150,62 @@ public class MpeLightningSrv {
float[] longitudes = ltngRec.getLongitudes(); float[] longitudes = ltngRec.getLongitudes();
long[] obstimes = ltngRec.getObsTimes(); long[] obstimes = ltngRec.getObsTimes();
byte[] strikes = ltngRec.getPulseCounts(); byte[] strikes = ltngRec.getPulseCounts();
int[] intensities = ltngRec.getIntensities();
Map<LightningData, Integer> lightningData = new HashMap<>();
// convert latitude and longitude to grid coordinate // convert latitude and longitude to grid coordinate
HRAP hrap = HRAP.getInstance(); HRAP hrap = HRAP.getInstance();
PixelOrientation po = PixelOrientation.CENTER; PixelOrientation po = PixelOrientation.CENTER;
short[] x_hgrids = new short[latitudes.length];
short[] y_hgrids = new short[longitudes.length];
Coordinate gridCell = new Coordinate(); Coordinate gridCell = new Coordinate();
LightningData data;
Integer oldIntensity;
for (int i = 0; i < latitudes.length; i++) { for (int i = 0; i < latitudes.length; i++) {
float lat = latitudes[i]; float lat = latitudes[i];
float lon = longitudes[i]; float lon = longitudes[i];
Coordinate c = new Coordinate(lon, lat); Coordinate c = new Coordinate(lon, lat);
gridCell = hrap.latLonToGridCoordinate(c, po); gridCell = hrap.latLonToGridCoordinate(c, po);
x_hgrids[i] = (short) gridCell.x; data = new LightningData((short) gridCell.x,
y_hgrids[i] = (short) gridCell.y; (short) gridCell.y, obstimes[i], strikes[i]);
// deduplicate lightning data that will create the same
// primary keys.
oldIntensity = lightningData.get(data);
if (oldIntensity == null) {
lightningData.put(data, intensities[i]);
} else {
logger.debug("dataURI " + dataURI
+ " has multiple lightning data for "
+ "ihfs.Lightning pk (" + data.getX() + ", "
+ data.getY() + ", " + data.getObstime() + ")");
if (intensities[i] > oldIntensity.intValue()) {
/*
* highest intensity data is retained. #put() does not
* replace keys, so because only some of the fields are
* used for hashcode and equals, we must remove the old
* key before putting the new key.
*/
lightningData.remove(data);
lightningData.put(data, intensities[i]);
}
}
} }
// set up query first // set up query first
StringBuilder sql = new StringBuilder("INSERT INTO lightning " StringBuilder sql = new StringBuilder("INSERT INTO lightning "
+ " (x_hgrid, y_hgrid, obstime, no_of_strike) VALUES"); + " (x_hgrid, y_hgrid, obstime, no_of_strike) VALUES");
// form tuples // form tuples
for (int j = 0; j < x_hgrids.length; j++) { for (LightningData lightning : lightningData.keySet()) {
// need to convert obstime from seconds // need to convert obstime from seconds
// to timestamp type for table insertion // to timestamp type for table insertion
Timestamp ts = new Timestamp(obstimes[j]); Timestamp ts = new Timestamp(lightning.getObstime());
String tuple = "(" + x_hgrids[j] + "," + y_hgrids[j] String tuple = "(" + lightning.getX() + "," + lightning.getY()
+ ", TIMESTAMP '" + ts.toString() + "' ," + strikes[j] + ", TIMESTAMP '" + ts.toString() + "' ,"
+ ")"; + lightning.getStrikes() + ")";
if (j != x_hgrids.length - 1) { tuple = tuple + ",";
tuple = tuple + ",";
} else {
tuple = tuple + ";";
}
sql.append(tuple); sql.append(tuple);
} }
sql.replace(sql.length() - 1, sql.length(), ";");
// insert all the tuples into the 'lightning' table in ihfs // insert all the tuples into the 'lightning' table in ihfs
// database. // database.
@ -202,7 +231,7 @@ public class MpeLightningSrv {
/** /**
* Populates ifhs' lightning table with the resultset obtained from querying * Populates ifhs' lightning table with the resultset obtained from querying
* metadata's binlighting table. * metadata's binlighting table.
* *
* @param rows * @param rows
* @throws EdexException * @throws EdexException
*/ */
@ -219,7 +248,7 @@ public class MpeLightningSrv {
/** /**
* run at scheduled timer. * run at scheduled timer.
* *
* @throws EdexException * @throws EdexException
*/ */
public void runOnSchedule() throws EdexException { public void runOnSchedule() throws EdexException {
@ -229,4 +258,98 @@ public class MpeLightningSrv {
QueryResultRow[] rows = getMostRecentStrikes(); QueryResultRow[] rows = getMostRecentStrikes();
ifhsInsertMostRecentStrikes(rows); ifhsInsertMostRecentStrikes(rows);
} }
/**
* Class to simplify deduplicating lightning data in a
* {@link BinLightningRecord} that generate the same ihfs lightning primary
* key.
*/
private static class LightningData {
private short x;
private short y;
private long obstime;
private byte strikes;
public LightningData(short x, short y, long time, byte strikes) {
super();
this.x = x;
this.y = y;
this.obstime = time;
this.strikes = strikes;
}
/**
* @return the x
*/
public short getX() {
return x;
}
/**
* @return the y
*/
public short getY() {
return y;
}
/**
* @return the obstime
*/
public long getObstime() {
return obstime;
}
/**
* @return the strikes
*/
public byte getStrikes() {
return strikes;
}
/**
* Generate a hashcode using the ihfs primary key fields: x, y, and
* time.
*/
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + (int) (obstime ^ (obstime >>> 32));
result = prime * result + x;
result = prime * result + y;
return result;
}
/**
* Determine equality using the ihfs primary key fields: x, y, and time.
*/
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
LightningData other = (LightningData) obj;
if (obstime != other.obstime) {
return false;
}
if (x != other.x) {
return false;
}
if (y != other.y) {
return false;
}
return true;
}
}
} }

View file

@ -23,7 +23,7 @@ Require-Bundle: com.raytheon.uf.edex.cpgsrv;bundle-version="1.11.7";resolution:=
Import-Package: com.raytheon.uf.common.dataplugin.grid, Import-Package: com.raytheon.uf.common.dataplugin.grid,
com.raytheon.uf.common.ohd, com.raytheon.uf.common.ohd,
com.raytheon.uf.common.status, com.raytheon.uf.common.status,
com.raytheon.uf.edex.dat.utils;resolution:=optional, com.raytheon.uf.edex.dat.utils,
com.raytheon.uf.edex.plugin.scan.common, com.raytheon.uf.edex.plugin.scan.common,
org.apache.commons.logging org.apache.commons.logging
Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Bundle-RequiredExecutionEnvironment: JavaSE-1.7

View file

@ -96,6 +96,14 @@
<permission id="com.raytheon.localization.site/common_static/archiver/purger/case"/> <permission id="com.raytheon.localization.site/common_static/archiver/purger/case"/>
<permission id="com.raytheon.localization.site/common_static/mixedCase"/> <permission id="com.raytheon.localization.site/common_static/mixedCase"/>
<permission id="com.raytheon.localization.site/common_static/hazardServices"/>
<permission id="com.raytheon.localization.site/common_static/hazardServices/settings"/>
<!-- TODO Localization permissions should be able to be plugin contributed.
Improve code in the generically [poorly] named FileManager to support
that concept and then split them. -->
<permission id="com.raytheon.localization.site/common_static/damagepath"/>
<user userId="ALL"> <user userId="ALL">
<userPermission>com.raytheon.localization.site/common_static/purge</userPermission> <userPermission>com.raytheon.localization.site/common_static/purge</userPermission>
@ -131,6 +139,9 @@
<userPermission>com.raytheon.localization.site/common_static/archiver/purger</userPermission> <userPermission>com.raytheon.localization.site/common_static/archiver/purger</userPermission>
<userPermission>com.raytheon.localization.site/common_static/archiver/purger/retention</userPermission> <userPermission>com.raytheon.localization.site/common_static/archiver/purger/retention</userPermission>
<userPermission>com.raytheon.localization.site/common_static/archiver/purger/case</userPermission> <userPermission>com.raytheon.localization.site/common_static/archiver/purger/case</userPermission>
<userPermission>com.raytheon.localization.site/common_static/damagepath</userPermission>
<userPermission>com.raytheon.localization.site/common_static/hazardServices</userPermission>
<userPermission>com.raytheon.localization.site/common_static/hazardServices/settings</userPermission>
</user> </user>
</nwsRoleData> </nwsRoleData>

View file

@ -4,21 +4,25 @@
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">
<camelContext id="ebxml-request-service-camel" <camelContext id="ebxml-request-service-camel"
xmlns="http://camel.apache.org/schema/spring" xmlns="http://camel.apache.org/schema/spring"
errorHandlerRef="errorHandler"> errorHandlerRef="errorHandler">
<propertyPlaceholder id="ebxmlThriftServiceProperties"
location="classpath:com.raytheon.uf.edex.registry.ebxml.properties"/>
<restConfiguration component="jetty" host="0.0.0.0" port="{{ebxml.thrift.service.port}}" >
<endpointProperty key="disableStreamCache" value="{{ebxml.thrift.service.disableStreamCache}}" />
<endpointProperty key="chunked" value="{{ebxml.thrift.service.chunked}}" />
</restConfiguration>
<endpoint id="webServiceEndpoint" <rest path="{{env:HTTP_SERVER_PATH}}">
uri="jetty:http://0.0.0.0:${ebxml.thrift.service.port}${HTTP_SERVER_PATH}?${ebxml.thrift.service.properties}" /> <post uri="/{format}">
<to uri="bean:httpServiceExecutor?method=execute(${body}, ${header.format}, ${in.header.accept-encoding}, ${in.header.CamelHttpServletResponse})" />
<route id="webServiceRoute" streamCache="false"> </post>
<from uri="webServiceEndpoint" /> <post uri="/">
<setBody> <to uri="bean:httpServiceExecutor?method=execute(${body}, ${in.header.content-type}, ${in.header.accept-encoding}, ${in.header.CamelHttpServletResponse})" />
<simple> </post>
bodyAs(javax.servlet.http.HttpServletRequest) </rest>
</simple> </camelContext>
</setBody>
<bean ref="httpServiceExecutor" method="execute(${body}, ${in.header.CamelHttpServletResponse})"/>
</route>
</camelContext>
</beans> </beans>

View file

@ -16,7 +16,8 @@ ebxml-notification-batch-size=200
ebxml-webserver-max-threads=8 ebxml-webserver-max-threads=8
# EBXML thrift service port # EBXML thrift service port
ebxml.thrift.service.port=9588 ebxml.thrift.service.port=9588
ebxml.thrift.service.properties=disableStreamCache=true&chunked=false&httpBindingRef=#binaryHttpBinding&matchOnUriPrefix=true ebxml.thrift.service.disableStreamCache=true
ebxml.thrift.service.chunked=false
# EBXML webserver port # EBXML webserver port
ebxml.registry.webserver.port=8082 ebxml.registry.webserver.port=8082
# EBXML registry host # EBXML registry host

View file

@ -1,22 +1,30 @@
# This software was developed and / or modified by Raytheon Company, # This software was developed and / or modified by Raytheon Company,
# pursuant to Contract DG133W-05-CQ-1067 with the US Government. # pursuant to Contract DG133W-05-CQ-1067 with the US Government.
# #
# U.S. EXPORT CONTROLLED TECHNICAL DATA # U.S. EXPORT CONTROLLED TECHNICAL DATA
# This software product contains export-restricted data whose # This software product contains export-restricted data whose
# export/transfer/disclosure is restricted by U.S. law. Dissemination # export/transfer/disclosure is restricted by U.S. law. Dissemination
# to non-U.S. persons whether in the United States or abroad requires # to non-U.S. persons whether in the United States or abroad requires
# 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
# #
# 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.
# File auto-generated against equivalent DynamicSerialize Java class # File auto-generated against equivalent DynamicSerialize Java class and
# modified.
#
# SOFTWARE HISTORY
#
# Date Ticket# Engineer Description
# ------------ ---------- ----------- --------------------------
# 2015-02-27 4174 nabowle Output full stacktrace.
#
class SerializableExceptionWrapper(object): class SerializableExceptionWrapper(object):
@ -28,15 +36,18 @@ class SerializableExceptionWrapper(object):
def __str__(self): def __str__(self):
return self.__repr__() return self.__repr__()
def __repr__(self): def __repr__(self):
if not self.message: if not self.message:
self.message = '' self.message = ''
retVal = "" + self.exceptionClass + " exception thrown: " + self.message + "\n" retVal = "" + self.exceptionClass + " exception thrown: " + self.message + "\n"
for element in self.stackTrace: for element in self.stackTrace:
retVal += "\tat " + str(element) + "\n" retVal += "\tat " + str(element) + "\n"
if self.wrapper:
retVal += "Caused by: " + self.wrapper.__repr__()
return retVal return retVal
def getStackTrace(self): def getStackTrace(self):
return self.stackTrace return self.stackTrace