12.11.1-1 baseline
Former-commit-id:ffe3641057
[formerly0e86bfd1d3
] [formerly618aa3f316
] [formerlyfeec28f274
[formerly618aa3f316
[formerly 765055b5332ddace3cec2d07e279652de869cfe4]]] Former-commit-id:feec28f274
Former-commit-id: 5951ea0cd95d43633ba501132c7b65a55db27e09 [formerly8843ffd022
] Former-commit-id:f5e63d5f93
This commit is contained in:
parent
326954a0b8
commit
9c67bbab77
263 changed files with 46335 additions and 36370 deletions
|
@ -43,8 +43,9 @@ xmlns:xlink="http://www.w3.org/1999/xlink" style="stroke: rgb(255,255,255);">
|
||||||
]]>
|
]]>
|
||||||
</style>
|
</style>
|
||||||
<symbol overflow="visible" id="plotData" class="info">
|
<symbol overflow="visible" id="plotData" class="info">
|
||||||
<text id="turbInensity" plotMode="table" class="weather" plotLookupTable="airep_turb_intens_trans.txt" plotParam="FLT_HZD" x="0" y="0">0</text>
|
<text id="airepturbIntensity" plotMode="table" class="weather" plotLookupTable="turb_intens_trans.txt" plotParam="TBI" x="0" y="0">0</text>
|
||||||
<text id="fltLvlText" plotMode="text" plotParam="FLT_LVL" plotFormat="%3.0f" plotUnit="hft" style="text-anchor: end;" x="-15px" y="0px">75</text>
|
<text id="airepturbFreq" plotMode="table" class="weather" plotLookupTable="turb_freq_trans.txt" plotParam="TBF" style="text-anchor: end" x="0" y="-10">0</text>
|
||||||
|
<text id="airepfltLvlText" plotMode="text" plotParam="FLT_LVL" plotFormat="%3.0f" plotUnit="hft" style="text-anchor: end;" x="-15px" y="0px">75</text>
|
||||||
</symbol>
|
</symbol>
|
||||||
|
|
||||||
</defs>
|
</defs>
|
||||||
|
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.9 KiB |
|
@ -46,6 +46,7 @@ from java.util import HashSet
|
||||||
# ------------ ---------- ----------- --------------------------
|
# ------------ ---------- ----------- --------------------------
|
||||||
# 04/01/09 njensen Initial Creation.
|
# 04/01/09 njensen Initial Creation.
|
||||||
# 08/20/2012 #1077 randerso Fixed backgroundColor setting
|
# 08/20/2012 #1077 randerso Fixed backgroundColor setting
|
||||||
|
# 09/13/2012 #1147 dgilling Allow map labels to be disabled.
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
@ -160,8 +161,7 @@ class GFEPainter(VizPainter.VizPainter):
|
||||||
rsc.getCapability(LabelableCapability).setxOffset(xOffset)
|
rsc.getCapability(LabelableCapability).setxOffset(xOffset)
|
||||||
if yOffset is not None:
|
if yOffset is not None:
|
||||||
rsc.getCapability(LabelableCapability).setyOffset(yOffset)
|
rsc.getCapability(LabelableCapability).setyOffset(yOffset)
|
||||||
if labelAttribute is not None:
|
rsc.getCapability(LabelableCapability).setLabelField(labelAttribute)
|
||||||
rsc.getCapability(LabelableCapability).setLabelField(labelAttribute)
|
|
||||||
if fontOffset is not None:
|
if fontOffset is not None:
|
||||||
mag = Double(1.26 ** fontOffset)
|
mag = Double(1.26 ** fontOffset)
|
||||||
rsc.getCapability(MagnificationCapability).setMagnification(mag)
|
rsc.getCapability(MagnificationCapability).setMagnification(mag)
|
||||||
|
|
|
@ -88,7 +88,8 @@ fi
|
||||||
while [ $exitVal -ne 0 ]
|
while [ $exitVal -ne 0 ]
|
||||||
do
|
do
|
||||||
curTime=`date +%Y%m%d_%H%M%S`
|
curTime=`date +%Y%m%d_%H%M%S`
|
||||||
LOGFILE=${LOGDIR}/alertviz_${curTime}.log
|
LOGFILE=${LOGDIR}/alertviz_${curTime}_console.log
|
||||||
|
export LOGFILE_ALERTVIZ=${LOGDIR}/alertviz_${curTime}_admin.log
|
||||||
|
|
||||||
#first check if we can write to the directory
|
#first check if we can write to the directory
|
||||||
if [ -w ${LOGDIR} ]; then
|
if [ -w ${LOGDIR} ]; then
|
||||||
|
|
|
@ -116,7 +116,8 @@ fi
|
||||||
export pid=$$
|
export pid=$$
|
||||||
|
|
||||||
curTime=`date +%Y%m%d_%H%M%S`
|
curTime=`date +%Y%m%d_%H%M%S`
|
||||||
LOGFILE=${LOGDIR}/cave_${curTime}_pid_${pid}.log
|
LOGFILE=${LOGDIR}/cave_${curTime}_pid_${pid}_console.log
|
||||||
|
export LOGFILE_CAVE=${LOGDIR}/cave_${curTime}_pid_${pid}_alertviz.log
|
||||||
|
|
||||||
redirect="TRUE"
|
redirect="TRUE"
|
||||||
for flag in $@; do
|
for flag in $@; do
|
||||||
|
|
|
@ -632,7 +632,7 @@ public class AlertVisualization implements ITimerAction, IAudioAction,
|
||||||
|| statMsg.getSourceKey().equals("GDN_ADMIN");
|
|| statMsg.getSourceKey().equals("GDN_ADMIN");
|
||||||
|
|
||||||
if (isGdnAdminMessage) {
|
if (isGdnAdminMessage) {
|
||||||
Container.logInternal(statMsg);
|
// Container.logInternal(statMsg);
|
||||||
if ((statMsg.getDetails() != null)
|
if ((statMsg.getDetails() != null)
|
||||||
&& (statMsg.getDetails().contains("Error")
|
&& (statMsg.getDetails().contains("Error")
|
||||||
|| statMsg.getDetails().contains("Exception")
|
|| statMsg.getDetails().contains("Exception")
|
||||||
|
|
|
@ -29,3 +29,5 @@ Import-Package: com.raytheon.uf.common.python,
|
||||||
com.raytheon.uf.viz.python.swt,
|
com.raytheon.uf.viz.python.swt,
|
||||||
com.raytheon.uf.viz.python.swt.widgets
|
com.raytheon.uf.viz.python.swt.widgets
|
||||||
Bundle-ActivationPolicy: lazy
|
Bundle-ActivationPolicy: lazy
|
||||||
|
Eclipse-BuddyPolicy: ext, registered, global
|
||||||
|
Eclipse-RegisterBuddy: org.apache.log4j
|
||||||
|
|
|
@ -6,4 +6,5 @@ bin.includes = META-INF/,\
|
||||||
lib/derbyrun.jar,\
|
lib/derbyrun.jar,\
|
||||||
lib/derby.jar,\
|
lib/derby.jar,\
|
||||||
statusMessage.xsd,\
|
statusMessage.xsd,\
|
||||||
config.xml
|
config.xml,\
|
||||||
|
log4j-alertviz.xml
|
||||||
|
|
79
cave/com.raytheon.uf.viz.alertviz/log4j-alertviz.xml
Normal file
79
cave/com.raytheon.uf.viz.alertviz/log4j-alertviz.xml
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
|
||||||
|
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
|
||||||
|
<!-- general application log -->
|
||||||
|
<appender name="console" class="org.apache.log4j.ConsoleAppender">
|
||||||
|
<layout class="org.apache.log4j.PatternLayout">
|
||||||
|
<param name="ConversionPattern" value="%-5p %d [%t] %c{1}: %m%n"/>
|
||||||
|
</layout>
|
||||||
|
<filter class="org.apache.log4j.varia.LevelRangeFilter">
|
||||||
|
<param name="levelMin" value="DEBUG" />
|
||||||
|
<param name="levelMax" value="INFO" />
|
||||||
|
</filter>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<appender name="errConsole" class="org.apache.log4j.ConsoleAppender">
|
||||||
|
<param name="Target" value="System.err"/>
|
||||||
|
<param name="Threshold" value="WARN" />
|
||||||
|
<layout class="org.apache.log4j.PatternLayout">
|
||||||
|
<param name="ConversionPattern" value="%-5p %d [%t] %c{1}: %m%n"/>
|
||||||
|
</layout>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<appender name="AlertVizAdminLogAppender" class="com.raytheon.uf.viz.alertviz.EnvConfigurableRollingFileAppender">
|
||||||
|
<param name="envLogVar" value="LOGFILE_ALERTVIZ" />
|
||||||
|
<param name="maxFileSize" value="2GB"/>
|
||||||
|
<param name="maxBackupIndex" value="5"/>
|
||||||
|
<param name="Append" value="true"/>
|
||||||
|
<layout class="org.apache.log4j.PatternLayout">
|
||||||
|
<param name="ConversionPattern" value="%-5p %d [%t] : %m%n"/>
|
||||||
|
</layout>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<logger name="AlertVizAdminLogger" additivity="false">
|
||||||
|
<level value="ALL"/>
|
||||||
|
<appender-ref ref="AlertVizAdminLogAppender"/>
|
||||||
|
</logger>
|
||||||
|
|
||||||
|
<logger name="com.raytheon">
|
||||||
|
<level value="INFO"/>
|
||||||
|
</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.commons.beanutils">
|
||||||
|
<level value="WARN"/>
|
||||||
|
</logger>
|
||||||
|
<logger name="org.apache.qpid">
|
||||||
|
<level value="WARN"/>
|
||||||
|
</logger>
|
||||||
|
<logger name="org.geotools">
|
||||||
|
<level value="WARN"/>
|
||||||
|
</logger>
|
||||||
|
<logger name="org.apache.xbean.spring">
|
||||||
|
<level value="WARN"/>
|
||||||
|
</logger>
|
||||||
|
<logger name="org.springframework">
|
||||||
|
<level value="ERROR"/>
|
||||||
|
</logger>
|
||||||
|
<logger name="uk.ltd.getahead">
|
||||||
|
<level value="WARN"/>
|
||||||
|
</logger>
|
||||||
|
|
||||||
|
<!-- default logging -->
|
||||||
|
<root>
|
||||||
|
<level value="INFO"/>
|
||||||
|
<appender-ref ref="console"/>
|
||||||
|
<appender-ref ref="errConsole"/>
|
||||||
|
</root>
|
||||||
|
</log4j:configuration>
|
|
@ -230,7 +230,7 @@ public class AlertvizJob extends Job {
|
||||||
e);
|
e);
|
||||||
StatusMessage sm = new StatusMessage();
|
StatusMessage sm = new StatusMessage();
|
||||||
sm.setPriority(Priority.CRITICAL);
|
sm.setPriority(Priority.CRITICAL);
|
||||||
sm.setMachine("LOCAL");
|
sm.setMachineToCurrent();
|
||||||
sm.setCategory("GDN_ADMIN");
|
sm.setCategory("GDN_ADMIN");
|
||||||
sm.setSourceKey("GDN_ADMIN");
|
sm.setSourceKey("GDN_ADMIN");
|
||||||
sm.setMessage(e.getMessage());
|
sm.setMessage(e.getMessage());
|
||||||
|
|
|
@ -36,7 +36,7 @@ import com.raytheon.uf.viz.alertviz.config.Category;
|
||||||
import com.raytheon.uf.viz.alertviz.config.Configuration;
|
import com.raytheon.uf.viz.alertviz.config.Configuration;
|
||||||
import com.raytheon.uf.viz.alertviz.config.ForcedConfiguration;
|
import com.raytheon.uf.viz.alertviz.config.ForcedConfiguration;
|
||||||
import com.raytheon.uf.viz.alertviz.config.Source;
|
import com.raytheon.uf.viz.alertviz.config.Source;
|
||||||
import com.raytheon.uf.viz.alertviz.internal.ArchiveLogJob;
|
import com.raytheon.uf.viz.alertviz.internal.PurgeLogJob;
|
||||||
import com.raytheon.uf.viz.alertviz.internal.LogMessageDAO;
|
import com.raytheon.uf.viz.alertviz.internal.LogMessageDAO;
|
||||||
import com.raytheon.uf.viz.core.VizApp;
|
import com.raytheon.uf.viz.core.VizApp;
|
||||||
|
|
||||||
|
@ -63,8 +63,8 @@ public class Container implements IConfigurationChangedListener {
|
||||||
|
|
||||||
public static final String SOURCE_MISSING = "Source was not found";
|
public static final String SOURCE_MISSING = "Source was not found";
|
||||||
|
|
||||||
private transient static final org.apache.log4j.Logger internalLogger = Logger
|
private transient static final org.apache.log4j.Logger adminLogger = Logger
|
||||||
.getLogger("AlertVizLogger");
|
.getLogger("AlertVizAdminLogger");
|
||||||
|
|
||||||
private Configuration configuration;
|
private Configuration configuration;
|
||||||
|
|
||||||
|
@ -96,7 +96,7 @@ public class Container implements IConfigurationChangedListener {
|
||||||
.getForcedConfiguration();
|
.getForcedConfiguration();
|
||||||
ConfigurationManager.getInstance().addListener(this);
|
ConfigurationManager.getInstance().addListener(this);
|
||||||
this.callbacks = callbacks;
|
this.callbacks = callbacks;
|
||||||
ArchiveLogJob archive = new ArchiveLogJob();
|
PurgeLogJob archive = new PurgeLogJob();
|
||||||
archive.schedule();
|
archive.schedule();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -171,7 +171,7 @@ public class Container implements IConfigurationChangedListener {
|
||||||
// for now, just send to the regular log
|
// for now, just send to the regular log
|
||||||
StatusMessage sm = new StatusMessage();
|
StatusMessage sm = new StatusMessage();
|
||||||
sm.setPriority(priority);
|
sm.setPriority(priority);
|
||||||
sm.setMachine("LOCAL");
|
sm.setMachineToCurrent();
|
||||||
sm.setSourceKey("GDN_ADMIN");
|
sm.setSourceKey("GDN_ADMIN");
|
||||||
sm.setCategory("GDN)ADMIN");
|
sm.setCategory("GDN)ADMIN");
|
||||||
sm.setMessage(msg);
|
sm.setMessage(msg);
|
||||||
|
@ -319,24 +319,25 @@ public class Container implements IConfigurationChangedListener {
|
||||||
String cat = message.getCategory();
|
String cat = message.getCategory();
|
||||||
String source = message.getSourceKey();
|
String source = message.getSourceKey();
|
||||||
|
|
||||||
if ((cat != null && cat.equalsIgnoreCase("GDN_ADMIN"))
|
boolean isInternal = (cat != null && cat.equalsIgnoreCase("GDN_ADMIN"))
|
||||||
|| (source != null && source.equalsIgnoreCase("GDN_ADMIN"))) {
|
|| (source != null && source.equalsIgnoreCase("GDN_ADMIN"));
|
||||||
|
if (isInternal) {
|
||||||
switch (message.getPriority()) {
|
switch (message.getPriority()) {
|
||||||
case CRITICAL:
|
case CRITICAL:
|
||||||
internalLogger.fatal(message);
|
adminLogger.fatal(message);
|
||||||
break;
|
break;
|
||||||
case SIGNIFICANT:
|
case SIGNIFICANT:
|
||||||
internalLogger.error(message);
|
adminLogger.error(message);
|
||||||
break;
|
break;
|
||||||
case PROBLEM:
|
case PROBLEM:
|
||||||
internalLogger.warn(message);
|
adminLogger.warn(message);
|
||||||
break;
|
break;
|
||||||
case EVENTA: // fall through
|
case EVENTA: // fall through
|
||||||
case EVENTB:
|
case EVENTB:
|
||||||
internalLogger.info(message);
|
adminLogger.info(message);
|
||||||
break;
|
break;
|
||||||
case VERBOSE:
|
case VERBOSE:
|
||||||
internalLogger.debug(message);
|
adminLogger.debug(message);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,80 @@
|
||||||
|
/**
|
||||||
|
* This software was developed and / or modified by Raytheon Company,
|
||||||
|
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||||
|
*
|
||||||
|
* U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||||
|
* This software product contains export-restricted data whose
|
||||||
|
* export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||||
|
* to non-U.S. persons whether in the United States or abroad requires
|
||||||
|
* an export license or other authorization.
|
||||||
|
*
|
||||||
|
* Contractor Name: Raytheon Company
|
||||||
|
* Contractor Address: 6825 Pine Street, Suite 340
|
||||||
|
* Mail Stop B8
|
||||||
|
* Omaha, NE 68106
|
||||||
|
* 402.291.0100
|
||||||
|
*
|
||||||
|
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||||
|
* further licensing information.
|
||||||
|
**/
|
||||||
|
package com.raytheon.uf.viz.alertviz;
|
||||||
|
|
||||||
|
import org.apache.log4j.RollingFileAppender;
|
||||||
|
import org.apache.log4j.helpers.LogLog;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RollingFileAppender retrieves the value set for property EnvLogVar from the
|
||||||
|
* system environment to define the log file.
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
* SOFTWARE HISTORY
|
||||||
|
*
|
||||||
|
* Date Ticket# Engineer Description
|
||||||
|
* ------------ ---------- ----------- --------------------------
|
||||||
|
* Sep 10, 2012 bgonzale Initial creation
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @author bgonzale
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class EnvConfigurableRollingFileAppender extends RollingFileAppender {
|
||||||
|
|
||||||
|
private String envLogVar;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param envLogVar
|
||||||
|
* the envLogVar to set
|
||||||
|
*/
|
||||||
|
public void setEnvLogVar(String envLogVar) {
|
||||||
|
this.envLogVar = envLogVar;
|
||||||
|
setFileFromEnv();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the envLogVar
|
||||||
|
*/
|
||||||
|
public String getEnvLogVar() {
|
||||||
|
return envLogVar;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setFileFromEnv() {
|
||||||
|
if (envLogVar == null || envLogVar.isEmpty()) {
|
||||||
|
LogLog.error("Appender [" + name
|
||||||
|
+ "] requires EnvLogVar to be set.");
|
||||||
|
} else {
|
||||||
|
String file = System.getenv(envLogVar);
|
||||||
|
|
||||||
|
if (file == null || file.isEmpty()) {
|
||||||
|
LogLog.error("Appender [" + name
|
||||||
|
+ "] needs environment variable, " + envLogVar
|
||||||
|
+ ", to be set.");
|
||||||
|
} else {
|
||||||
|
setFile(file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -19,6 +19,7 @@
|
||||||
**/
|
**/
|
||||||
package com.raytheon.uf.viz.alertviz;
|
package com.raytheon.uf.viz.alertviz;
|
||||||
|
|
||||||
|
import org.apache.log4j.Logger;
|
||||||
import org.eclipse.core.runtime.IStatus;
|
import org.eclipse.core.runtime.IStatus;
|
||||||
import org.eclipse.core.runtime.Status;
|
import org.eclipse.core.runtime.Status;
|
||||||
import org.eclipse.jface.dialogs.ErrorDialog;
|
import org.eclipse.jface.dialogs.ErrorDialog;
|
||||||
|
@ -50,6 +51,9 @@ import com.raytheon.uf.viz.core.status.VizStatusInternal;
|
||||||
|
|
||||||
public class SystemStatusHandler extends AbstractStatusHandler {
|
public class SystemStatusHandler extends AbstractStatusHandler {
|
||||||
|
|
||||||
|
private transient static final org.apache.log4j.Logger logger = Logger
|
||||||
|
.getLogger("CaveLogger");
|
||||||
|
|
||||||
private static final String WORKSTATION = "WORKSTATION";
|
private static final String WORKSTATION = "WORKSTATION";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -66,14 +70,13 @@ public class SystemStatusHandler extends AbstractStatusHandler {
|
||||||
|
|
||||||
if (status instanceof VizStatusInternal) {
|
if (status instanceof VizStatusInternal) {
|
||||||
VizStatusInternal vs = (VizStatusInternal) status;
|
VizStatusInternal vs = (VizStatusInternal) status;
|
||||||
sm = new StatusMessage(vs.getSource(), vs.getCategory(),
|
sm = vs.toStatusMessage();
|
||||||
vs.getPriority(), vs.getPluginName(), vs.getMessage(),
|
|
||||||
vs.getException());
|
|
||||||
} else {
|
} else {
|
||||||
sm = from(status);
|
sm = from(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
logStatus(sm);
|
||||||
AlertVizClient.sendMessage(sm);
|
AlertVizClient.sendMessage(sm);
|
||||||
} catch (final AlertvizException e) {
|
} catch (final AlertvizException e) {
|
||||||
// not a good situation, since we can't communicate with the log
|
// not a good situation, since we can't communicate with the log
|
||||||
|
@ -111,7 +114,7 @@ public class SystemStatusHandler extends AbstractStatusHandler {
|
||||||
StatusMessage sm = new StatusMessage();
|
StatusMessage sm = new StatusMessage();
|
||||||
sm.setCategory(WORKSTATION);
|
sm.setCategory(WORKSTATION);
|
||||||
|
|
||||||
sm.setMachine("LOCAL");
|
sm.setMachineToCurrent();
|
||||||
switch (status.getSeverity()) {
|
switch (status.getSeverity()) {
|
||||||
case Status.ERROR:
|
case Status.ERROR:
|
||||||
sm.setPriority(Priority.SIGNIFICANT);
|
sm.setPriority(Priority.SIGNIFICANT);
|
||||||
|
@ -184,4 +187,26 @@ public class SystemStatusHandler extends AbstractStatusHandler {
|
||||||
int count) throws AlertvizException {
|
int count) throws AlertvizException {
|
||||||
return LogMessageDAO.getInstance().load(count, category);
|
return LogMessageDAO.getInstance().load(count, category);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void logStatus(StatusMessage status) {
|
||||||
|
switch (status.getPriority()) {
|
||||||
|
case CRITICAL:
|
||||||
|
logger.fatal(status);
|
||||||
|
break;
|
||||||
|
case SIGNIFICANT:
|
||||||
|
logger.error(status);
|
||||||
|
break;
|
||||||
|
case PROBLEM:
|
||||||
|
logger.warn(status);
|
||||||
|
break;
|
||||||
|
case EVENTA: // fall through
|
||||||
|
case EVENTB:
|
||||||
|
logger.info(status);
|
||||||
|
break;
|
||||||
|
case VERBOSE:
|
||||||
|
logger.debug(status);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -250,7 +250,7 @@ public class LogMessageDAO {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void save(StatusMessage sm) throws AlertvizException {
|
public void save(StatusMessage sm) throws AlertvizException {
|
||||||
// Container.logInternal(sm);
|
Container.logInternal(sm);
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
boolean errorOccurred = false;
|
boolean errorOccurred = false;
|
||||||
ResultSet rs = null;
|
ResultSet rs = null;
|
||||||
|
|
|
@ -19,7 +19,6 @@
|
||||||
**/
|
**/
|
||||||
package com.raytheon.uf.viz.alertviz.internal;
|
package com.raytheon.uf.viz.alertviz.internal;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
|
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
|
@ -32,13 +31,9 @@ import org.eclipse.swt.widgets.Display;
|
||||||
import com.raytheon.uf.viz.alertviz.Activator;
|
import com.raytheon.uf.viz.alertviz.Activator;
|
||||||
import com.raytheon.uf.viz.alertviz.AlertvizException;
|
import com.raytheon.uf.viz.alertviz.AlertvizException;
|
||||||
import com.raytheon.uf.viz.alertviz.Constants;
|
import com.raytheon.uf.viz.alertviz.Constants;
|
||||||
import com.raytheon.uf.viz.alertviz.LogUtil;
|
|
||||||
import com.raytheon.uf.viz.alertviz.LogUtil.Order;
|
|
||||||
import com.raytheon.uf.viz.core.VizApp;
|
|
||||||
import com.raytheon.uf.viz.core.localization.LocalizationManager;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Purges the database, and archives the old log entries to a text file
|
* Purges old database entries.
|
||||||
*
|
*
|
||||||
* <pre>
|
* <pre>
|
||||||
* SOFTWARE HISTORY
|
* SOFTWARE HISTORY
|
||||||
|
@ -50,26 +45,16 @@ import com.raytheon.uf.viz.core.localization.LocalizationManager;
|
||||||
* @author chammack
|
* @author chammack
|
||||||
* @version 1.0
|
* @version 1.0
|
||||||
*/
|
*/
|
||||||
public class ArchiveLogJob extends Job {
|
public class PurgeLogJob extends Job {
|
||||||
|
|
||||||
private int numberOfLogsToKeep;
|
|
||||||
|
|
||||||
private int ageOfLogInHours;
|
private int ageOfLogInHours;
|
||||||
|
|
||||||
private static final int DEFAULT_NUMBER_OF_LOGS = 10;
|
|
||||||
|
|
||||||
private static final int DEFAULT_AGE_OF_LOG_IN_HRS = 12;
|
private static final int DEFAULT_AGE_OF_LOG_IN_HRS = 12;
|
||||||
|
|
||||||
private static final int MILLISECONDS_IN_HOUR = 60 * 60 * 1000;
|
private static final int MILLISECONDS_IN_HOUR = 60 * 60 * 1000;
|
||||||
|
|
||||||
public ArchiveLogJob() {
|
public PurgeLogJob() {
|
||||||
super("Archive Log");
|
super("Archive Log Purge");
|
||||||
this.setSystem(true);
|
|
||||||
numberOfLogsToKeep = Activator.getDefault().getPreferenceStore()
|
|
||||||
.getInt(Constants.P_NUMBER_OF_LOGS);
|
|
||||||
if (numberOfLogsToKeep == 0) {
|
|
||||||
this.numberOfLogsToKeep = DEFAULT_NUMBER_OF_LOGS;
|
|
||||||
}
|
|
||||||
|
|
||||||
ageOfLogInHours = Activator.getDefault().getPreferenceStore()
|
ageOfLogInHours = Activator.getDefault().getPreferenceStore()
|
||||||
.getInt(Constants.P_MAX_AGE_OF_LOGS);
|
.getInt(Constants.P_MAX_AGE_OF_LOGS);
|
||||||
|
@ -90,14 +75,8 @@ public class ArchiveLogJob extends Job {
|
||||||
long now = System.currentTimeMillis();
|
long now = System.currentTimeMillis();
|
||||||
|
|
||||||
if ((now - lastPurgeInMs) > (ageOfLogInHours * MILLISECONDS_IN_HOUR)) {
|
if ((now - lastPurgeInMs) > (ageOfLogInHours * MILLISECONDS_IN_HOUR)) {
|
||||||
String s = LocalizationManager.getUserDir() + "textLogs"
|
|
||||||
+ File.separator + VizApp.getHostName()
|
|
||||||
+ File.separator + "log";
|
|
||||||
LogUtil.rollLogs(s, numberOfLogsToKeep);
|
|
||||||
|
|
||||||
Timestamp ts = new Timestamp(now
|
Timestamp ts = new Timestamp(now
|
||||||
- (ageOfLogInHours * MILLISECONDS_IN_HOUR));
|
- (ageOfLogInHours * MILLISECONDS_IN_HOUR));
|
||||||
LogUtil.saveLogToFile(new File(s + ".0"), ts, Order.BEFORE);
|
|
||||||
LogMessageDAO.getInstance().purge(ts);
|
LogMessageDAO.getInstance().purge(ts);
|
||||||
}
|
}
|
||||||
} catch (AlertvizException e) {
|
} catch (AlertvizException e) {
|
||||||
|
@ -111,7 +90,7 @@ public class ArchiveLogJob extends Job {
|
||||||
.openError(
|
.openError(
|
||||||
Display.getDefault().getActiveShell(),
|
Display.getDefault().getActiveShell(),
|
||||||
"Error",
|
"Error",
|
||||||
"Error rotating saving and rotating logs. Archived logs may not be stored",
|
"Error purging logs.",
|
||||||
s);
|
s);
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,7 @@ Require-Bundle: org.eclipse.ui,
|
||||||
com.raytheon.uf.common.geospatial;bundle-version="1.12.1174"
|
com.raytheon.uf.common.geospatial;bundle-version="1.12.1174"
|
||||||
Bundle-ActivationPolicy: lazy
|
Bundle-ActivationPolicy: lazy
|
||||||
Eclipse-BuddyPolicy: ext, registered, global
|
Eclipse-BuddyPolicy: ext, registered, global
|
||||||
Eclipse-RegisterBuddy: org.apache.velocity, com.raytheon.edex.common, com.raytheon.uf.common.serialization, com.raytheon.uf.common.serialization.comm, com.raytheon.uf.common.status, com.raytheon.uf.common.dataplugin.level
|
Eclipse-RegisterBuddy: org.apache.velocity, org.apache.log4j, com.raytheon.edex.common, com.raytheon.uf.common.serialization, com.raytheon.uf.common.serialization.comm, com.raytheon.uf.common.status, com.raytheon.uf.common.dataplugin.level
|
||||||
Export-Package: com.raytheon.uf.viz.core,
|
Export-Package: com.raytheon.uf.viz.core,
|
||||||
com.raytheon.uf.viz.core.alerts,
|
com.raytheon.uf.viz.core.alerts,
|
||||||
com.raytheon.uf.viz.core.auth,
|
com.raytheon.uf.viz.core.auth,
|
||||||
|
|
|
@ -5,4 +5,5 @@ bin.includes = META-INF/,\
|
||||||
plugin.xml,\
|
plugin.xml,\
|
||||||
config.xml,\
|
config.xml,\
|
||||||
scriptTemplates/,\
|
scriptTemplates/,\
|
||||||
schema/
|
schema/,\
|
||||||
|
log4j-viz-core.xml
|
||||||
|
|
80
cave/com.raytheon.uf.viz.core/log4j-viz-core.xml
Normal file
80
cave/com.raytheon.uf.viz.core/log4j-viz-core.xml
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
|
||||||
|
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
|
||||||
|
<appender name="console" class="org.apache.log4j.ConsoleAppender">
|
||||||
|
<layout class="org.apache.log4j.PatternLayout">
|
||||||
|
<param name="ConversionPattern" value="%-5p %d [%t] %c{1}: %m%n"/>
|
||||||
|
</layout>
|
||||||
|
<filter class="org.apache.log4j.varia.LevelRangeFilter">
|
||||||
|
<param name="levelMin" value="DEBUG" />
|
||||||
|
<param name="levelMax" value="INFO" />
|
||||||
|
</filter>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<appender name="errConsole" class="org.apache.log4j.ConsoleAppender">
|
||||||
|
<param name="Target" value="System.err"/>
|
||||||
|
<param name="Threshold" value="WARN" />
|
||||||
|
<layout class="org.apache.log4j.PatternLayout">
|
||||||
|
<param name="ConversionPattern" value="%-5p %d [%t] %c{1}: %m%n"/>
|
||||||
|
</layout>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<appender name="CaveLogAppender" class="com.raytheon.uf.viz.alertviz.EnvConfigurableRollingFileAppender">
|
||||||
|
<param name="envLogVar" value="LOGFILE_CAVE" />
|
||||||
|
<param name="maxFileSize" value="2GB"/>
|
||||||
|
<param name="maxBackupIndex" value="5"/>
|
||||||
|
<param name="Append" value="true"/>
|
||||||
|
<layout class="org.apache.log4j.PatternLayout">
|
||||||
|
<param name="ConversionPattern" value="%-5p %d [%t] %m%n"/>
|
||||||
|
</layout>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<appender name="AsyncCaveLogAppender" class="org.apache.log4j.AsyncAppender">
|
||||||
|
<param name="BufferSize" value="500"/>
|
||||||
|
<appender-ref ref="CaveLogAppender"/>
|
||||||
|
</appender>
|
||||||
|
<logger name="CaveLogger" additivity="false">
|
||||||
|
<level value="ALL"/>
|
||||||
|
<appender-ref ref="AsyncCaveLogAppender"/>
|
||||||
|
</logger>
|
||||||
|
|
||||||
|
<logger name="com.raytheon">
|
||||||
|
<level value="INFO"/>
|
||||||
|
</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.commons.beanutils">
|
||||||
|
<level value="WARN"/>
|
||||||
|
</logger>
|
||||||
|
<logger name="org.apache.qpid">
|
||||||
|
<level value="WARN"/>
|
||||||
|
</logger>
|
||||||
|
<logger name="org.geotools">
|
||||||
|
<level value="WARN"/>
|
||||||
|
</logger>
|
||||||
|
<logger name="org.apache.xbean.spring">
|
||||||
|
<level value="WARN"/>
|
||||||
|
</logger>
|
||||||
|
<logger name="org.springframework">
|
||||||
|
<level value="ERROR"/>
|
||||||
|
</logger>
|
||||||
|
<logger name="uk.ltd.getahead">
|
||||||
|
<level value="WARN"/>
|
||||||
|
</logger>
|
||||||
|
<root>
|
||||||
|
<level value="INFO"/>
|
||||||
|
<appender-ref ref="console"/>
|
||||||
|
<appender-ref ref="errConsole"/>
|
||||||
|
</root>
|
||||||
|
</log4j:configuration>
|
|
@ -105,18 +105,6 @@ public abstract class AbstractTimeMatcher {
|
||||||
DataTime[] availableTimes, IDescriptor descriptor)
|
DataTime[] availableTimes, IDescriptor descriptor)
|
||||||
throws VizException;
|
throws VizException;
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the matched list of times to a particular resource
|
|
||||||
*
|
|
||||||
* @param dataTimes
|
|
||||||
* @param rsc
|
|
||||||
* @param descriptor
|
|
||||||
* @throws VizException
|
|
||||||
*/
|
|
||||||
public abstract void setTimeList(DataTime[] dataTimes,
|
|
||||||
AbstractVizResource<?, ?> rsc, IDescriptor descriptor)
|
|
||||||
throws VizException;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Given a list of RenderableDisplays, determine the order to instantiate
|
* Given a list of RenderableDisplays, determine the order to instantiate
|
||||||
* them in to get the correct time match settings, should only be called
|
* them in to get the correct time match settings, should only be called
|
||||||
|
|
|
@ -64,6 +64,7 @@ import com.raytheon.uf.viz.core.rsc.AbstractVizResource;
|
||||||
import com.raytheon.uf.viz.core.rsc.IResourceGroup;
|
import com.raytheon.uf.viz.core.rsc.IResourceGroup;
|
||||||
import com.raytheon.uf.viz.core.rsc.ResourceGroup;
|
import com.raytheon.uf.viz.core.rsc.ResourceGroup;
|
||||||
import com.raytheon.uf.viz.core.rsc.ResourceList;
|
import com.raytheon.uf.viz.core.rsc.ResourceList;
|
||||||
|
import com.raytheon.uf.viz.core.time.TimeMatchingJob;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* AbstractDescriptor
|
* AbstractDescriptor
|
||||||
|
@ -192,33 +193,37 @@ public abstract class AbstractDescriptor extends ResourceGroup implements
|
||||||
}
|
}
|
||||||
|
|
||||||
if (basis != newBasis) {
|
if (basis != newBasis) {
|
||||||
redoTimeMatching();
|
TimeMatchingJob.scheduleTimeMatch(AbstractDescriptor.this);
|
||||||
|
if (renderableDisplay != null
|
||||||
|
&& renderableDisplay.getContainer() != null) {
|
||||||
|
IDisplayPaneContainer container = renderableDisplay.getContainer();
|
||||||
|
for (IDisplayPane pane : container.getDisplayPanes()) {
|
||||||
|
if (pane.getDescriptor() != AbstractDescriptor.this) {
|
||||||
|
TimeMatchingJob.scheduleTimeMatch(pane.getDescriptor());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void redoTimeMatching() throws VizException {
|
|
||||||
if (getTimeMatcher() != null) {
|
|
||||||
getTimeMatcher().redoTimeMatching(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (renderableDisplay != null
|
|
||||||
&& renderableDisplay.getContainer() != null) {
|
|
||||||
IDisplayPaneContainer container = renderableDisplay.getContainer();
|
|
||||||
for (IDisplayPane pane : container.getDisplayPanes()) {
|
|
||||||
if (pane.getDescriptor() != this) {
|
|
||||||
if (pane.getDescriptor().getTimeMatcher() != null) {
|
|
||||||
pane.getDescriptor().getTimeMatcher()
|
|
||||||
.redoTimeMatching(pane.getDescriptor());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void postAddListener(ResourcePair rp) {
|
protected void postAddListener(ResourcePair rp) {
|
||||||
|
if (rp.getResource() != null && getTimeMatcher() != null) {
|
||||||
|
// We need to run time matching immediately beacuse order
|
||||||
|
// constructed is important for time matching so we must do it now
|
||||||
|
// instead of scheduling since another resource could be added by
|
||||||
|
// the time it runs
|
||||||
|
AbstractTimeMatcher tm = getTimeMatcher();
|
||||||
|
tm.redoTimeMatching(rp.getResource());
|
||||||
|
try {
|
||||||
|
tm.redoTimeMatching(this);
|
||||||
|
} catch (VizException e) {
|
||||||
|
statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(),
|
||||||
|
e);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
|
|
|
@ -35,7 +35,6 @@ 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.LocalizationInternalFile;
|
import com.raytheon.uf.common.localization.LocalizationInternalFile;
|
||||||
import com.raytheon.uf.common.localization.exception.LocalizationException;
|
|
||||||
import com.raytheon.uf.common.localization.exception.LocalizationOpFailedException;
|
import com.raytheon.uf.common.localization.exception.LocalizationOpFailedException;
|
||||||
import com.raytheon.uf.common.localization.msgs.AbstractUtilityCommand;
|
import com.raytheon.uf.common.localization.msgs.AbstractUtilityCommand;
|
||||||
import com.raytheon.uf.common.localization.msgs.AbstractUtilityResponse;
|
import com.raytheon.uf.common.localization.msgs.AbstractUtilityResponse;
|
||||||
|
@ -43,9 +42,6 @@ import com.raytheon.uf.common.localization.msgs.ListResponseEntry;
|
||||||
import com.raytheon.uf.common.localization.msgs.ProtectedFileCommand;
|
import com.raytheon.uf.common.localization.msgs.ProtectedFileCommand;
|
||||||
import com.raytheon.uf.common.localization.msgs.ProtectedFileResponse;
|
import com.raytheon.uf.common.localization.msgs.ProtectedFileResponse;
|
||||||
import com.raytheon.uf.common.localization.msgs.UtilityRequestMessage;
|
import com.raytheon.uf.common.localization.msgs.UtilityRequestMessage;
|
||||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
|
||||||
import com.raytheon.uf.common.status.UFStatus;
|
|
||||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
|
||||||
import com.raytheon.uf.common.util.FileUtil;
|
import com.raytheon.uf.common.util.FileUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -66,9 +62,6 @@ import com.raytheon.uf.common.util.FileUtil;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class CAVELocalizationAdapter implements ILocalizationAdapter {
|
public class CAVELocalizationAdapter implements ILocalizationAdapter {
|
||||||
private static transient IUFStatusHandler statusHandler = UFStatus
|
|
||||||
.getHandler(CAVELocalizationAdapter.class.getPackage().getName(),
|
|
||||||
"WORKSTATION", "CAVE");
|
|
||||||
|
|
||||||
private static final LocalizationManager manager = LocalizationManager
|
private static final LocalizationManager manager = LocalizationManager
|
||||||
.getInstance();
|
.getInstance();
|
||||||
|
@ -198,7 +191,7 @@ public class CAVELocalizationAdapter implements ILocalizationAdapter {
|
||||||
response.date = null;
|
response.date = null;
|
||||||
response.existsOnServer = false;
|
response.existsOnServer = false;
|
||||||
response.fileName = fileName;
|
response.fileName = fileName;
|
||||||
response.isProtected = false;
|
response.protectedLevel = null;
|
||||||
File file = getPath(caveConfigBase, fileName);
|
File file = getPath(caveConfigBase, fileName);
|
||||||
response.isDirectory = file != null && file.isDirectory();
|
response.isDirectory = file != null && file.isDirectory();
|
||||||
responses.add(response);
|
responses.add(response);
|
||||||
|
@ -229,17 +222,6 @@ public class CAVELocalizationAdapter implements ILocalizationAdapter {
|
||||||
}
|
}
|
||||||
|
|
||||||
manager.retrieve(file);
|
manager.retrieve(file);
|
||||||
if (file.isProtected()) {
|
|
||||||
File f;
|
|
||||||
try {
|
|
||||||
f = file.getFile(false);
|
|
||||||
f.setReadOnly();
|
|
||||||
} catch (LocalizationException e) {
|
|
||||||
// shouldn't happen since file was just retrieved
|
|
||||||
statusHandler.handle(Priority.PROBLEM, "Error retrieving file",
|
|
||||||
e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -253,7 +235,6 @@ public class CAVELocalizationAdapter implements ILocalizationAdapter {
|
||||||
@Override
|
@Override
|
||||||
public boolean save(File localFile, LocalizationContext context,
|
public boolean save(File localFile, LocalizationContext context,
|
||||||
String fileName) throws LocalizationOpFailedException {
|
String fileName) throws LocalizationOpFailedException {
|
||||||
|
|
||||||
if (context.getLocalizationLevel().isSystemLevel()) {
|
if (context.getLocalizationLevel().isSystemLevel()) {
|
||||||
throw new UnsupportedOperationException(
|
throw new UnsupportedOperationException(
|
||||||
"Saving to the System Level, "
|
"Saving to the System Level, "
|
||||||
|
@ -416,7 +397,7 @@ public class CAVELocalizationAdapter implements ILocalizationAdapter {
|
||||||
ListResponse response = new ListResponse();
|
ListResponse response = new ListResponse();
|
||||||
response.context = context;
|
response.context = context;
|
||||||
response.isDirectory = configFile.isDirectory();
|
response.isDirectory = configFile.isDirectory();
|
||||||
response.isProtected = false;
|
response.protectedLevel = null;
|
||||||
response.existsOnServer = false;
|
response.existsOnServer = false;
|
||||||
response.fileName = p;
|
response.fileName = p;
|
||||||
response.date = new Date(configFile.lastModified());
|
response.date = new Date(configFile.lastModified());
|
||||||
|
@ -442,10 +423,13 @@ public class CAVELocalizationAdapter implements ILocalizationAdapter {
|
||||||
response.existsOnServer = false;
|
response.existsOnServer = false;
|
||||||
response.fileName = pfr.getPathName();
|
response.fileName = pfr.getPathName();
|
||||||
response.isDirectory = locFile.isDirectory();
|
response.isDirectory = locFile.isDirectory();
|
||||||
response.isProtected = pfr.isProtectedFile();
|
response.protectedLevel = pfr.getProtectedLevel();
|
||||||
|
|
||||||
if (!response.isProtected
|
if (response.protectedLevel == null
|
||||||
|| (response.context.getLocalizationLevel() == LocalizationLevel.BASE)) {
|
|| response.context.getLocalizationLevel().compareTo(
|
||||||
|
response.protectedLevel) <= 0) {
|
||||||
|
// if not protected or protected level is less than/equal to
|
||||||
|
// our level, add response
|
||||||
responses.add(response);
|
responses.add(response);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -486,7 +470,7 @@ public class CAVELocalizationAdapter implements ILocalizationAdapter {
|
||||||
lr.isDirectory = entry.isDirectory();
|
lr.isDirectory = entry.isDirectory();
|
||||||
}
|
}
|
||||||
lr.context = context;
|
lr.context = context;
|
||||||
lr.isProtected = entry.isProtectedFile();
|
lr.protectedLevel = entry.getProtectedLevel();
|
||||||
lr.existsOnServer = entry.isExistsOnServer();
|
lr.existsOnServer = entry.isExistsOnServer();
|
||||||
return lr;
|
return lr;
|
||||||
}
|
}
|
||||||
|
|
|
@ -169,8 +169,7 @@ public abstract class AbstractRequestableResourceData extends
|
||||||
// 3. Throw an exception of no data available and user has not specified
|
// 3. Throw an exception of no data available and user has not specified
|
||||||
// to suppress load errors
|
// to suppress load errors
|
||||||
// 4. Retrieve the PluginDataObjects for all DataTimes
|
// 4. Retrieve the PluginDataObjects for all DataTimes
|
||||||
// 5. Notify the time matcher that load has completed with the set of
|
// 5. Construct resource with loaded pdos
|
||||||
// datatimes
|
|
||||||
DataTime[] availableTimes = this.getAvailableTimes();
|
DataTime[] availableTimes = this.getAvailableTimes();
|
||||||
DataTime[] dataTimes = descriptor.getTimeMatcher().initialLoad(
|
DataTime[] dataTimes = descriptor.getTimeMatcher().initialLoad(
|
||||||
loadProperties, availableTimes, descriptor);
|
loadProperties, availableTimes, descriptor);
|
||||||
|
@ -205,9 +204,8 @@ public abstract class AbstractRequestableResourceData extends
|
||||||
}
|
}
|
||||||
|
|
||||||
resource = constructResource(loadProperties, data);
|
resource = constructResource(loadProperties, data);
|
||||||
descriptor.getTimeMatcher().setTimeList(dataTimes, resource,
|
|
||||||
descriptor);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return resource;
|
return resource;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -88,8 +88,9 @@ public class VizStatusHandler implements IUFStatusHandler {
|
||||||
this.source = factory.getSource(source, pluginId);
|
this.source = factory.getSource(source, pluginId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
StatusManager.getManager().handle(
|
VizStatusInternal vizStatus = new VizStatusInternal(status, category,
|
||||||
new VizStatusInternal(status, category, source, pluginId));
|
source, pluginId);
|
||||||
|
StatusManager.getManager().handle(vizStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -22,6 +22,7 @@ package com.raytheon.uf.viz.core.status;
|
||||||
import org.eclipse.core.runtime.IStatus;
|
import org.eclipse.core.runtime.IStatus;
|
||||||
import org.eclipse.core.runtime.Status;
|
import org.eclipse.core.runtime.Status;
|
||||||
|
|
||||||
|
import com.raytheon.uf.common.message.StatusMessage;
|
||||||
import com.raytheon.uf.common.status.UFStatus;
|
import com.raytheon.uf.common.status.UFStatus;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -170,4 +171,9 @@ public class VizStatusInternal extends UFStatus implements IStatus {
|
||||||
return pluginName;
|
return pluginName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public StatusMessage toStatusMessage() {
|
||||||
|
return new StatusMessage(this.source, this.category, this.priority,
|
||||||
|
this.pluginName, this.message, this.exception);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -138,18 +138,33 @@ public class TileLevel {
|
||||||
DefaultGeographicCRS.WGS84));
|
DefaultGeographicCRS.WGS84));
|
||||||
corrector = new WorldWrapCorrector(targetGeometry);
|
corrector = new WorldWrapCorrector(targetGeometry);
|
||||||
|
|
||||||
// Calculate pixel density
|
Envelope levelEnv = levelGeometry.getEnvelope();
|
||||||
// Grab the center x, 3/4 y of the map
|
double[] in = new double[] {
|
||||||
double mapXCenter = targetGeometry.getGridRange().getSpan(0) * 0.5;
|
levelEnv.getMinimum(0) + (levelEnv.getSpan(0) / 2),
|
||||||
double mapYCenter = targetGeometry.getGridRange().getSpan(1) * 0.75;
|
levelEnv.getMinimum(1) + (levelEnv.getSpan(1) / 2) };
|
||||||
|
double[] out = new double[in.length];
|
||||||
|
tileCRSToTargetGrid.transform(in, 0, out, 0, 1);
|
||||||
|
|
||||||
double[] input = new double[] { mapXCenter, mapYCenter,
|
double mapPointX = out[0];
|
||||||
mapXCenter + 1, mapYCenter + 1 };
|
double mapPointY = out[1];
|
||||||
|
GridEnvelope targetEnv = targetGeometry.getGridRange();
|
||||||
|
if (targetEnv.getLow(0) > mapPointX
|
||||||
|
|| targetEnv.getHigh(0) < mapPointX
|
||||||
|
|| targetEnv.getLow(1) > mapPointY
|
||||||
|
|| targetEnv.getHigh(1) < mapPointY) {
|
||||||
|
// Center of tile level outside target grid, use something on
|
||||||
|
// target grid for calculations
|
||||||
|
mapPointX = targetEnv.getLow(0) + targetEnv.getSpan(0) * 0.5;
|
||||||
|
mapPointY = targetEnv.getLow(1)
|
||||||
|
+ targetGeometry.getGridRange().getSpan(1) * 0.75;
|
||||||
|
}
|
||||||
|
|
||||||
|
double[] input = new double[] { mapPointX, mapPointY,
|
||||||
|
mapPointX + 1, mapPointY + 1 };
|
||||||
double[] output = new double[input.length];
|
double[] output = new double[input.length];
|
||||||
|
|
||||||
tileCRSToTargetGrid.inverse().transform(input, 0, output, 0, 2);
|
tileCRSToTargetGrid.inverse().transform(input, 0, output, 0, 2);
|
||||||
levelGeometry.getGridToCRS(PixelInCell.CELL_CORNER).inverse()
|
crsToGrid.transform(output, 0, input, 0, 2);
|
||||||
.transform(output, 0, input, 0, 2);
|
|
||||||
pixelDensity = 1.0 / Math.abs(new Coordinate(input[0], input[1],
|
pixelDensity = 1.0 / Math.abs(new Coordinate(input[0], input[1],
|
||||||
0.0).distance(new Coordinate(input[2], input[3], 0.0)));
|
0.0).distance(new Coordinate(input[2], input[3], 0.0)));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|
|
@ -114,7 +114,7 @@ public class TileSetRenderable implements IRenderable {
|
||||||
.getHandler(TileSetRenderable.class);
|
.getHandler(TileSetRenderable.class);
|
||||||
|
|
||||||
/** Screen pixel to image pixel threshold at which we change levels */
|
/** Screen pixel to image pixel threshold at which we change levels */
|
||||||
protected static final double LEVEL_CHANGE_THRESHOLD = 2.0;
|
protected static final double LEVEL_CHANGE_THRESHOLD = 1.75;
|
||||||
|
|
||||||
/** Job pool for tile creation */
|
/** Job pool for tile creation */
|
||||||
protected static final JobPool tileCreationPool = new JobPool(
|
protected static final JobPool tileCreationPool = new JobPool(
|
||||||
|
|
|
@ -50,6 +50,7 @@ import com.raytheon.uf.viz.core.drawables.AbstractRenderableDisplay;
|
||||||
import com.raytheon.uf.viz.core.drawables.FrameCoordinator;
|
import com.raytheon.uf.viz.core.drawables.FrameCoordinator;
|
||||||
import com.raytheon.uf.viz.core.drawables.IDescriptor;
|
import com.raytheon.uf.viz.core.drawables.IDescriptor;
|
||||||
import com.raytheon.uf.viz.core.drawables.IDescriptor.FramesInfo;
|
import com.raytheon.uf.viz.core.drawables.IDescriptor.FramesInfo;
|
||||||
|
import com.raytheon.uf.viz.core.drawables.IRenderableDisplay;
|
||||||
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.globals.VizGlobalsManager;
|
import com.raytheon.uf.viz.core.globals.VizGlobalsManager;
|
||||||
|
@ -61,7 +62,6 @@ import com.raytheon.uf.viz.core.rsc.IResourceDataChanged.ChangeType;
|
||||||
import com.raytheon.uf.viz.core.rsc.IResourceGroup;
|
import com.raytheon.uf.viz.core.rsc.IResourceGroup;
|
||||||
import com.raytheon.uf.viz.core.rsc.LoadProperties;
|
import com.raytheon.uf.viz.core.rsc.LoadProperties;
|
||||||
import com.raytheon.uf.viz.core.rsc.ResourceList;
|
import com.raytheon.uf.viz.core.rsc.ResourceList;
|
||||||
import com.raytheon.uf.viz.core.time.TimeMatchingJob;
|
|
||||||
import com.raytheon.uf.viz.d2d.core.D2DLoadProperties;
|
import com.raytheon.uf.viz.d2d.core.D2DLoadProperties;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -73,7 +73,6 @@ import com.raytheon.uf.viz.d2d.core.D2DLoadProperties;
|
||||||
* Date Ticket# Engineer Description
|
* Date Ticket# Engineer Description
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* Feb 10, 2009 chammack Initial creation
|
* Feb 10, 2009 chammack Initial creation
|
||||||
* 2012-04-20 DR 14699 D. Friedman Work around race conditions
|
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -124,10 +123,6 @@ public class D2DTimeMatcher extends AbstractTimeMatcher implements
|
||||||
|
|
||||||
private AbstractTimeMatchingConfigurationFactory configFactory;
|
private AbstractTimeMatchingConfigurationFactory configFactory;
|
||||||
|
|
||||||
// DR 14699 work arounds
|
|
||||||
private boolean needRetry;
|
|
||||||
private int nRetries;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default Constructor.
|
* Default Constructor.
|
||||||
*/
|
*/
|
||||||
|
@ -158,8 +153,6 @@ public class D2DTimeMatcher extends AbstractTimeMatcher implements
|
||||||
public void redoTimeMatching(IDescriptor descriptor) throws VizException {
|
public void redoTimeMatching(IDescriptor descriptor) throws VizException {
|
||||||
|
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
needRetry = false;
|
|
||||||
|
|
||||||
if (timeMatchBasis != null) {
|
if (timeMatchBasis != null) {
|
||||||
IDescriptor tmDescriptor = timeMatchBasis.getDescriptor();
|
IDescriptor tmDescriptor = timeMatchBasis.getDescriptor();
|
||||||
if (tmDescriptor != null && tmDescriptor != descriptor) {
|
if (tmDescriptor != null && tmDescriptor != descriptor) {
|
||||||
|
@ -183,11 +176,8 @@ public class D2DTimeMatcher extends AbstractTimeMatcher implements
|
||||||
Iterator<ResourcePair> pairIterator = descriptor.getResourceList()
|
Iterator<ResourcePair> pairIterator = descriptor.getResourceList()
|
||||||
.listIterator();
|
.listIterator();
|
||||||
while (pairIterator.hasNext()) {
|
while (pairIterator.hasNext()) {
|
||||||
ResourcePair rp = pairIterator.next();
|
AbstractVizResource<?, ?> rsc = pairIterator.next()
|
||||||
AbstractVizResource<?, ?> rsc = rp
|
|
||||||
.getResource();
|
.getResource();
|
||||||
if (rsc == null && rp.getResourceData() instanceof AbstractRequestableResourceData)
|
|
||||||
needRetry = true;
|
|
||||||
recursiveOverlay(descriptor, new FramesInfo(timeSteps, -1,
|
recursiveOverlay(descriptor, new FramesInfo(timeSteps, -1,
|
||||||
resourceTimeMap), rsc);
|
resourceTimeMap), rsc);
|
||||||
}
|
}
|
||||||
|
@ -204,24 +194,18 @@ public class D2DTimeMatcher extends AbstractTimeMatcher implements
|
||||||
timeMatchUpdate(entry.getKey(), entry.getValue());
|
timeMatchUpdate(entry.getKey(), entry.getValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (needRetry) {
|
|
||||||
if (nRetries < 200) {
|
|
||||||
++nRetries;
|
|
||||||
TimeMatchingJob.scheduleTimeMatch(descriptor);
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
nRetries = 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private int indexToUpdateTo(IDescriptor descriptor, DataTime[] oldTimes,
|
private int indexToUpdateTo(IDescriptor descriptor, DataTime[] oldTimes,
|
||||||
int oldIndex, DataTime[] frames, int startFrame) {
|
int oldIndex, DataTime[] frames, int startFrame) {
|
||||||
int frameToUse = startFrame;
|
int frameToUse = startFrame;
|
||||||
IDisplayPaneContainer container = descriptor.getRenderableDisplay()
|
IRenderableDisplay display = descriptor.getRenderableDisplay();
|
||||||
.getContainer();
|
if (display != null && display.getContainer() != null) {
|
||||||
if (container != null && container.getLoopProperties().isLooping()) {
|
IDisplayPaneContainer container = display.getContainer();
|
||||||
return frameToUse;
|
if (container.getLoopProperties().isLooping()) {
|
||||||
|
return frameToUse;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
switch (descriptor.getFrameCoordinator().getAnimationMode()) {
|
switch (descriptor.getFrameCoordinator().getAnimationMode()) {
|
||||||
case Latest: {
|
case Latest: {
|
||||||
|
@ -322,8 +306,6 @@ public class D2DTimeMatcher extends AbstractTimeMatcher implements
|
||||||
if (rsc instanceof IResourceGroup) {
|
if (rsc instanceof IResourceGroup) {
|
||||||
for (ResourcePair rp : ((IResourceGroup) rsc).getResourceList()) {
|
for (ResourcePair rp : ((IResourceGroup) rsc).getResourceList()) {
|
||||||
AbstractVizResource<?, ?> rsc1 = rp.getResource();
|
AbstractVizResource<?, ?> rsc1 = rp.getResource();
|
||||||
if (rsc1 == null && rp.getResourceData() instanceof AbstractRequestableResourceData)
|
|
||||||
needRetry = true;
|
|
||||||
recursiveOverlay(descriptor, framesInfo, rsc1);
|
recursiveOverlay(descriptor, framesInfo, rsc1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -332,9 +314,7 @@ public class D2DTimeMatcher extends AbstractTimeMatcher implements
|
||||||
TimeMatchingConfiguration config = getConfiguration(rsc
|
TimeMatchingConfiguration config = getConfiguration(rsc
|
||||||
.getLoadProperties());
|
.getLoadProperties());
|
||||||
DataTime[] timeSteps = getFrameTimes(descriptor, framesInfo);
|
DataTime[] timeSteps = getFrameTimes(descriptor, framesInfo);
|
||||||
if (Arrays.equals(timeSteps, config.getLastBaseTimes()) &&
|
if (Arrays.equals(timeSteps, config.getLastBaseTimes())) {
|
||||||
config.getLastFrameTimes() != null &&
|
|
||||||
config.getLastFrameTimes().length > 0) {
|
|
||||||
framesInfo.getTimeMap().put(rsc, config.getLastFrameTimes());
|
framesInfo.getTimeMap().put(rsc, config.getLastFrameTimes());
|
||||||
} else {
|
} else {
|
||||||
config = config.clone();
|
config = config.clone();
|
||||||
|
@ -839,41 +819,6 @@ public class D2DTimeMatcher extends AbstractTimeMatcher implements
|
||||||
return timeMatchBasis;
|
return timeMatchBasis;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
*
|
|
||||||
* @see
|
|
||||||
* com.raytheon.uf.viz.core.AbstractTimeMatcher#setTimeList(com.raytheon
|
|
||||||
* .uf.common.time.DataTime[],
|
|
||||||
* com.raytheon.uf.viz.core.rsc.AbstractVizResource,
|
|
||||||
* com.raytheon.uf.viz.core.drawables.IDescriptor)
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void setTimeList(DataTime[] dataTimes,
|
|
||||||
AbstractVizResource<?, ?> rsc, IDescriptor descriptor)
|
|
||||||
throws VizException {
|
|
||||||
((AbstractDescriptor) descriptor).getTimeMatchingMap().put(rsc,
|
|
||||||
dataTimes);
|
|
||||||
|
|
||||||
// if the resource is the basis , set the time to the last
|
|
||||||
// time
|
|
||||||
if (dataTimes.length > 0
|
|
||||||
&& (rsc == timeMatchBasis || timeMatchBasis == null)) {
|
|
||||||
boolean setFrameTimes = true;
|
|
||||||
// If there are any null times we do not want to set this as the
|
|
||||||
// frame times, that means we were matched against a time match
|
|
||||||
// basis that has since been removed.
|
|
||||||
for (DataTime time : dataTimes) {
|
|
||||||
setFrameTimes = setFrameTimes && time != null;
|
|
||||||
}
|
|
||||||
if (setFrameTimes) {
|
|
||||||
descriptor.setFramesInfo(new FramesInfo(dataTimes,
|
|
||||||
dataTimes.length - 1));
|
|
||||||
changeTimeMatchBasis(rsc);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean hasTimeMatchBasis() {
|
public boolean hasTimeMatchBasis() {
|
||||||
return (timeMatchBasis != null);
|
return (timeMatchBasis != null);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1400,6 +1400,11 @@
|
||||||
<handler
|
<handler
|
||||||
class="com.raytheon.uf.viz.d2d.ui.actions.TimeOptionsAction"
|
class="com.raytheon.uf.viz.d2d.ui.actions.TimeOptionsAction"
|
||||||
commandId="com.raytheon.uf.viz.d2d.ui.actions.timeOptionsAction">
|
commandId="com.raytheon.uf.viz.d2d.ui.actions.timeOptionsAction">
|
||||||
|
<activeWhen>
|
||||||
|
<with variable="activeEditor">
|
||||||
|
<instanceof value="com.raytheon.uf.viz.core.IDisplayPaneContainer"/>
|
||||||
|
</with>
|
||||||
|
</activeWhen>
|
||||||
</handler>
|
</handler>
|
||||||
<handler
|
<handler
|
||||||
class="com.raytheon.uf.viz.d2d.ui.actions.LocateCursorAction"
|
class="com.raytheon.uf.viz.d2d.ui.actions.LocateCursorAction"
|
||||||
|
@ -1485,6 +1490,11 @@
|
||||||
<handler
|
<handler
|
||||||
class="com.raytheon.uf.viz.d2d.ui.actions.CopyOutAWIPSProcedure"
|
class="com.raytheon.uf.viz.d2d.ui.actions.CopyOutAWIPSProcedure"
|
||||||
commandId="com.raytheon.viz.ui.copyOutAWIPSProcedure">
|
commandId="com.raytheon.viz.ui.copyOutAWIPSProcedure">
|
||||||
|
<activeWhen>
|
||||||
|
<with variable="activeEditor">
|
||||||
|
<instanceof value="com.raytheon.uf.viz.core.IDisplayPaneContainer"/>
|
||||||
|
</with>
|
||||||
|
</activeWhen>
|
||||||
</handler>
|
</handler>
|
||||||
<handler
|
<handler
|
||||||
class="com.raytheon.uf.viz.d2d.ui.actions.SetPerspectiveHandler"
|
class="com.raytheon.uf.viz.d2d.ui.actions.SetPerspectiveHandler"
|
||||||
|
@ -1497,6 +1507,11 @@
|
||||||
<handler
|
<handler
|
||||||
class="com.raytheon.uf.viz.d2d.ui.actions.ShowPrintDialog"
|
class="com.raytheon.uf.viz.d2d.ui.actions.ShowPrintDialog"
|
||||||
commandId="com.raytheon.uf.viz.d2d.ui.actions.showPrintDialog">
|
commandId="com.raytheon.uf.viz.d2d.ui.actions.showPrintDialog">
|
||||||
|
<activeWhen>
|
||||||
|
<with variable="activeEditor">
|
||||||
|
<instanceof value="com.raytheon.uf.viz.core.IDisplayPaneContainer"/>
|
||||||
|
</with>
|
||||||
|
</activeWhen>
|
||||||
</handler>
|
</handler>
|
||||||
<handler
|
<handler
|
||||||
class="com.raytheon.uf.viz.d2d.ui.actions.IncreaseBlendAmount"
|
class="com.raytheon.uf.viz.d2d.ui.actions.IncreaseBlendAmount"
|
||||||
|
@ -1509,6 +1524,11 @@
|
||||||
<handler
|
<handler
|
||||||
class="com.raytheon.uf.viz.d2d.ui.actions.ToggleTool"
|
class="com.raytheon.uf.viz.d2d.ui.actions.ToggleTool"
|
||||||
commandId="com.raytheon.uf.viz.d2d.ui.actions.toggleTool">
|
commandId="com.raytheon.uf.viz.d2d.ui.actions.toggleTool">
|
||||||
|
<activeWhen>
|
||||||
|
<with variable="activeEditor">
|
||||||
|
<instanceof value="com.raytheon.uf.viz.core.IDisplayPaneContainer"/>
|
||||||
|
</with>
|
||||||
|
</activeWhen>
|
||||||
</handler>
|
</handler>
|
||||||
</extension>
|
</extension>
|
||||||
<extension
|
<extension
|
||||||
|
|
|
@ -68,6 +68,9 @@ public class TimeOptionsAction extends AbstractTool {
|
||||||
@Override
|
@Override
|
||||||
public Object execute(ExecutionEvent event) throws ExecutionException {
|
public Object execute(ExecutionEvent event) throws ExecutionException {
|
||||||
super.execute(event);
|
super.execute(event);
|
||||||
|
if (this.editor == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
IRenderableDisplay iDisplay = this.editor.getActiveDisplayPane()
|
IRenderableDisplay iDisplay = this.editor.getActiveDisplayPane()
|
||||||
.getRenderableDisplay();
|
.getRenderableDisplay();
|
||||||
D2DTimeMatcher matcher = ((D2DTimeMatcher) iDisplay.getDescriptor()
|
D2DTimeMatcher matcher = ((D2DTimeMatcher) iDisplay.getDescriptor()
|
||||||
|
|
|
@ -91,12 +91,16 @@ public class LocalizationSaveAsPopulator extends CompoundContributionItem {
|
||||||
protected IContributionItem[] getContributionItems() {
|
protected IContributionItem[] getContributionItems() {
|
||||||
MenuManager menuMgr = new MenuManager("SaveAs", "FileSaveAs");
|
MenuManager menuMgr = new MenuManager("SaveAs", "FileSaveAs");
|
||||||
final boolean enabled;
|
final boolean enabled;
|
||||||
|
final LocalizationLevel protectedLevel;
|
||||||
final IEditorPart active = EditorUtil.getActiveEditor();
|
final IEditorPart active = EditorUtil.getActiveEditor();
|
||||||
if (active != null
|
if (active != null
|
||||||
&& active.getEditorInput() instanceof LocalizationEditorInput) {
|
&& active.getEditorInput() instanceof LocalizationEditorInput) {
|
||||||
enabled = active.isDirty();
|
enabled = active.isDirty();
|
||||||
|
protectedLevel = ((LocalizationEditorInput) active.getEditorInput())
|
||||||
|
.getLocalizationFile().getProtectedLevel();
|
||||||
} else {
|
} else {
|
||||||
enabled = false;
|
enabled = false;
|
||||||
|
protectedLevel = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
LocalizationLevel[] levels = PathManagerFactory.getPathManager()
|
LocalizationLevel[] levels = PathManagerFactory.getPathManager()
|
||||||
|
@ -119,7 +123,9 @@ public class LocalizationSaveAsPopulator extends CompoundContributionItem {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isEnabled() {
|
public boolean isEnabled() {
|
||||||
return enabled;
|
return enabled
|
||||||
|
&& (protectedLevel == null || level
|
||||||
|
.compareTo(protectedLevel) <= 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,156 @@
|
||||||
|
/**
|
||||||
|
* This software was developed and / or modified by Raytheon Company,
|
||||||
|
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||||
|
*
|
||||||
|
* U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||||
|
* This software product contains export-restricted data whose
|
||||||
|
* export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||||
|
* to non-U.S. persons whether in the United States or abroad requires
|
||||||
|
* an export license or other authorization.
|
||||||
|
*
|
||||||
|
* Contractor Name: Raytheon Company
|
||||||
|
* Contractor Address: 6825 Pine Street, Suite 340
|
||||||
|
* Mail Stop B8
|
||||||
|
* Omaha, NE 68106
|
||||||
|
* 402.291.0100
|
||||||
|
*
|
||||||
|
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||||
|
* further licensing information.
|
||||||
|
**/
|
||||||
|
package com.raytheon.uf.viz.localization.perspective.view;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.eclipse.core.runtime.IConfigurationElement;
|
||||||
|
import org.eclipse.core.runtime.IExtension;
|
||||||
|
import org.eclipse.core.runtime.IExtensionPoint;
|
||||||
|
import org.eclipse.core.runtime.IExtensionRegistry;
|
||||||
|
import org.eclipse.core.runtime.Platform;
|
||||||
|
|
||||||
|
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationType;
|
||||||
|
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||||
|
import com.raytheon.uf.common.status.UFStatus;
|
||||||
|
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||||
|
import com.raytheon.uf.viz.localization.adapter.LocalizationPerspectiveAdapter;
|
||||||
|
import com.raytheon.uf.viz.localization.filetreeview.PathData;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Manager class for creating {@link PathData} objects for the localization path
|
||||||
|
* extension point entries
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
* SOFTWARE HISTORY
|
||||||
|
*
|
||||||
|
* Date Ticket# Engineer Description
|
||||||
|
* ------------ ---------- ----------- --------------------------
|
||||||
|
* Sep 7, 2012 mschenke Initial creation
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @author mschenke
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class PathDataExtManager {
|
||||||
|
|
||||||
|
private static final IUFStatusHandler statusHandler = UFStatus
|
||||||
|
.getHandler(PathDataExtManager.class);
|
||||||
|
|
||||||
|
/** Localization path extension point id */
|
||||||
|
private static final String PATH_DEFINITION_ID = "com.raytheon.uf.viz.localization.localizationpath";
|
||||||
|
|
||||||
|
private static final String APPLICATION_ATTR = "application";
|
||||||
|
|
||||||
|
private static final String NAME_ATTR = "name";
|
||||||
|
|
||||||
|
private static final String PATH_ATTR = "value";
|
||||||
|
|
||||||
|
private static final String TYPE_ATTR = "localizationType";
|
||||||
|
|
||||||
|
private static final String FILTER_ATTR = "extensionFilter";
|
||||||
|
|
||||||
|
private static final String ADAPTER_ATTR = "localizationAdapter";
|
||||||
|
|
||||||
|
private static final String RECURSIVE_ATTR = "recursive";
|
||||||
|
|
||||||
|
/** Default application name */
|
||||||
|
private static final String DEFAULT_APPLICATION = "Uncategorized";
|
||||||
|
|
||||||
|
/** Default localization perspective adapter */
|
||||||
|
private static final LocalizationPerspectiveAdapter DEFAULT_ADAPTER = new LocalizationPerspectiveAdapter();
|
||||||
|
|
||||||
|
public static Collection<PathData> getPathData() {
|
||||||
|
List<PathData> pathData = new ArrayList<PathData>();
|
||||||
|
IExtensionRegistry registry = Platform.getExtensionRegistry();
|
||||||
|
IExtensionPoint point = registry.getExtensionPoint(PATH_DEFINITION_ID);
|
||||||
|
if (point != null) {
|
||||||
|
for (IExtension ext : point.getExtensions()) {
|
||||||
|
for (IConfigurationElement element : ext
|
||||||
|
.getConfigurationElements()) {
|
||||||
|
PathData pd = new PathData();
|
||||||
|
pd.setApplication(element.getAttribute(APPLICATION_ATTR));
|
||||||
|
if (pd.getApplication() == null
|
||||||
|
|| pd.getApplication().trim().isEmpty()) {
|
||||||
|
pd.setApplication(DEFAULT_APPLICATION);
|
||||||
|
}
|
||||||
|
pd.setName(element.getAttribute(NAME_ATTR));
|
||||||
|
if (pd.getName() == null || pd.getName().trim().isEmpty()) {
|
||||||
|
statusHandler
|
||||||
|
.handle(Priority.PROBLEM,
|
||||||
|
"Skipping path extension entry with no name set");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
pd.setPath(element.getAttribute(PATH_ATTR));
|
||||||
|
if (pd.getPath() == null) {
|
||||||
|
statusHandler
|
||||||
|
.handle(Priority.PROBLEM,
|
||||||
|
"Skipping path extension entry with no path set");
|
||||||
|
}
|
||||||
|
pd.setFilter(element.getAttribute(FILTER_ATTR));
|
||||||
|
String recurse = element.getAttribute(RECURSIVE_ATTR);
|
||||||
|
pd.setRecursive(Boolean.parseBoolean(recurse));
|
||||||
|
|
||||||
|
pd.setType(LocalizationType.valueOf(element
|
||||||
|
.getAttribute(TYPE_ATTR)));
|
||||||
|
if (pd.getType() == null) {
|
||||||
|
// Skip if bad localization type specified
|
||||||
|
statusHandler.handle(
|
||||||
|
Priority.PROBLEM,
|
||||||
|
"Skipping path extension entry with name: "
|
||||||
|
+ pd.getName() + " and path: "
|
||||||
|
+ pd.getPath()
|
||||||
|
+ " with invalid localiation type: "
|
||||||
|
+ element.getAttribute(TYPE_ATTR));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
LocalizationPerspectiveAdapter adapter = DEFAULT_ADAPTER;
|
||||||
|
try {
|
||||||
|
if (element.getAttribute(ADAPTER_ATTR) != null) {
|
||||||
|
adapter = (LocalizationPerspectiveAdapter) element
|
||||||
|
.createExecutableExtension(ADAPTER_ATTR);
|
||||||
|
}
|
||||||
|
} catch (Throwable t) {
|
||||||
|
statusHandler
|
||||||
|
.handle(Priority.PROBLEM,
|
||||||
|
"Skipping path with name: "
|
||||||
|
+ pd.getName()
|
||||||
|
+ " and path: "
|
||||||
|
+ pd.getPath()
|
||||||
|
+ " due to error constructing adapter: "
|
||||||
|
+ t.getLocalizedMessage(), t);
|
||||||
|
}
|
||||||
|
pd.setAdapter(adapter);
|
||||||
|
pathData.add(pd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new RuntimeException("Could not find extension point ("
|
||||||
|
+ PATH_DEFINITION_ID
|
||||||
|
+ ") from the extension point registry");
|
||||||
|
}
|
||||||
|
return pathData;
|
||||||
|
}
|
||||||
|
}
|
|
@ -19,8 +19,6 @@
|
||||||
**/
|
**/
|
||||||
package com.raytheon.uf.viz.localization.perspective.view.actions;
|
package com.raytheon.uf.viz.localization.perspective.view.actions;
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
|
|
||||||
import org.eclipse.jface.action.Action;
|
import org.eclipse.jface.action.Action;
|
||||||
import org.eclipse.jface.action.ActionContributionItem;
|
import org.eclipse.jface.action.ActionContributionItem;
|
||||||
import org.eclipse.jface.action.IAction;
|
import org.eclipse.jface.action.IAction;
|
||||||
|
@ -127,8 +125,7 @@ public abstract class AbstractToAction extends Action implements IMenuCreator {
|
||||||
protected void fillMenu(Menu menu) {
|
protected void fillMenu(Menu menu) {
|
||||||
LocalizationLevel[] levels = PathManagerFactory.getPathManager()
|
LocalizationLevel[] levels = PathManagerFactory.getPathManager()
|
||||||
.getAvailableLevels();
|
.getAvailableLevels();
|
||||||
Arrays.sort(levels, LocalizationLevel.REVERSE_COMPARATOR);
|
for (int i = 0; i < levels.length; ++i) {
|
||||||
for (int i = levels.length - 1; i >= 0; --i) {
|
|
||||||
LocalizationLevel level = levels[i];
|
LocalizationLevel level = levels[i];
|
||||||
if (level.isSystemLevel() == false) {
|
if (level.isSystemLevel() == false) {
|
||||||
new ActionContributionItem(new AbstractToInternalAction(level))
|
new ActionContributionItem(new AbstractToInternalAction(level))
|
||||||
|
@ -137,6 +134,26 @@ public abstract class AbstractToAction extends Action implements IMenuCreator {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determines if the action for this level is enabled. By default, checks if
|
||||||
|
* the level is the same as the file level
|
||||||
|
*
|
||||||
|
* @param level
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
protected boolean isLevelEnabled(LocalizationLevel level) {
|
||||||
|
if (level == file.getContext().getLocalizationLevel()) {
|
||||||
|
String fileCtxName = file.getContext().getContextName();
|
||||||
|
String levelCtxName = LocalizationManager.getContextName(level);
|
||||||
|
if ((fileCtxName == null && levelCtxName == null)
|
||||||
|
|| (fileCtxName != null && fileCtxName.equals(levelCtxName))) {
|
||||||
|
// same context name
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
protected abstract void run(LocalizationLevel level);
|
protected abstract void run(LocalizationLevel level);
|
||||||
|
|
||||||
private class AbstractToInternalAction extends Action {
|
private class AbstractToInternalAction extends Action {
|
||||||
|
@ -145,16 +162,7 @@ public abstract class AbstractToAction extends Action implements IMenuCreator {
|
||||||
|
|
||||||
public AbstractToInternalAction(LocalizationLevel level) {
|
public AbstractToInternalAction(LocalizationLevel level) {
|
||||||
this.level = level;
|
this.level = level;
|
||||||
if (level == file.getContext().getLocalizationLevel()) {
|
this.setEnabled(isLevelEnabled(level));
|
||||||
String fileCtxName = file.getContext().getContextName();
|
|
||||||
String levelCtxName = LocalizationManager.getContextName(level);
|
|
||||||
if ((fileCtxName == null && levelCtxName == null)
|
|
||||||
|| (fileCtxName != null && fileCtxName
|
|
||||||
.equals(levelCtxName))) {
|
|
||||||
// same context name
|
|
||||||
this.setEnabled(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -63,11 +63,28 @@ public class CopyToAction extends AbstractToAction {
|
||||||
protected ILocalizationService service;
|
protected ILocalizationService service;
|
||||||
|
|
||||||
public CopyToAction(LocalizationFile file, ILocalizationService service) {
|
public CopyToAction(LocalizationFile file, ILocalizationService service) {
|
||||||
super(file.isProtected() ? "Copy To (Protected)" : "Copy To", file);
|
super("Copy To", file);
|
||||||
setEnabled(file.isProtected() == false);
|
|
||||||
this.service = service;
|
this.service = service;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see
|
||||||
|
* com.raytheon.uf.viz.localization.perspective.view.actions.AbstractToAction
|
||||||
|
* #isLevelEnabled(com.raytheon.uf.common.localization.LocalizationContext.
|
||||||
|
* LocalizationLevel)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected boolean isLevelEnabled(LocalizationLevel level) {
|
||||||
|
boolean enabled = super.isLevelEnabled(level);
|
||||||
|
if (enabled && file.isProtected()) {
|
||||||
|
// Ensure protected level is greater than copy to level
|
||||||
|
enabled = file.getProtectedLevel().compareTo(level) >= 0;
|
||||||
|
}
|
||||||
|
return enabled;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* (non-Javadoc)
|
* (non-Javadoc)
|
||||||
*
|
*
|
||||||
|
|
|
@ -70,14 +70,35 @@ public class MoveFileAction extends CopyToAction {
|
||||||
setEnabled(delete.isEnabled());
|
setEnabled(delete.isEnabled());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see
|
||||||
|
* com.raytheon.uf.viz.localization.perspective.view.actions.AbstractToAction
|
||||||
|
* #isLevelEnabled(com.raytheon.uf.common.localization.LocalizationContext.
|
||||||
|
* LocalizationLevel)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected boolean isLevelEnabled(LocalizationLevel level) {
|
||||||
|
boolean enabled = super.isLevelEnabled(level);
|
||||||
|
if (enabled && file.isProtected()) {
|
||||||
|
// Ensure protected level is greater than copy to level
|
||||||
|
enabled = file.getProtectedLevel().compareTo(level) >= 0;
|
||||||
|
}
|
||||||
|
return enabled;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void run(LocalizationLevel level) {
|
protected void run(LocalizationLevel level) {
|
||||||
boolean choice = MessageDialog.openQuestion(
|
boolean choice = MessageDialog
|
||||||
page.getWorkbenchWindow().getShell(),
|
.openQuestion(
|
||||||
"Move Confirmation",
|
page.getWorkbenchWindow().getShell(),
|
||||||
"Are you sure you want to move "
|
"Move Confirmation",
|
||||||
+ LocalizationUtil.extractName(file.getName()) + " to "
|
"Are you sure you want to move "
|
||||||
+ level + " replacing any existing file?");
|
+ LocalizationUtil.extractName(file.getName())
|
||||||
|
+ " to "
|
||||||
|
+ level
|
||||||
|
+ " replacing any existing file and deleting this file?");
|
||||||
if (choice) {
|
if (choice) {
|
||||||
IPathManager pm = PathManagerFactory.getPathManager();
|
IPathManager pm = PathManagerFactory.getPathManager();
|
||||||
final LocalizationFile newFile = pm.getLocalizationFile(
|
final LocalizationFile newFile = pm.getLocalizationFile(
|
||||||
|
|
|
@ -25,6 +25,7 @@ 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.PathManagerFactory;
|
import com.raytheon.uf.common.localization.PathManagerFactory;
|
||||||
|
import com.raytheon.uf.viz.localization.filetreeview.LocalizationFileEntryData;
|
||||||
import com.raytheon.uf.viz.localization.filetreeview.LocalizationFileGroupData;
|
import com.raytheon.uf.viz.localization.filetreeview.LocalizationFileGroupData;
|
||||||
import com.raytheon.uf.viz.localization.service.ILocalizationService;
|
import com.raytheon.uf.viz.localization.service.ILocalizationService;
|
||||||
|
|
||||||
|
@ -47,15 +48,35 @@ import com.raytheon.uf.viz.localization.service.ILocalizationService;
|
||||||
|
|
||||||
public class PasteFileAction extends CopyToAction {
|
public class PasteFileAction extends CopyToAction {
|
||||||
|
|
||||||
LocalizationFileGroupData dataToCopyTo;
|
private LocalizationFileGroupData dataToCopyTo;
|
||||||
|
|
||||||
|
private LocalizationLevel pasteToProtectedLevel;
|
||||||
|
|
||||||
public PasteFileAction(ILocalizationService service, LocalizationFile file,
|
public PasteFileAction(ILocalizationService service, LocalizationFile file,
|
||||||
LocalizationFileGroupData data) {
|
LocalizationFileGroupData data) {
|
||||||
super(file, service);
|
super(file, service);
|
||||||
setText(file.isProtected() ? "Paste To (Protected)" : "Paste To");
|
setText("Paste To");
|
||||||
this.dataToCopyTo = data;
|
this.dataToCopyTo = data;
|
||||||
|
// Grab the level this file is protected at (if any)
|
||||||
|
for (LocalizationFileEntryData entry : dataToCopyTo.getChildrenData()) {
|
||||||
|
pasteToProtectedLevel = entry.getFile().getProtectedLevel();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
setEnabled(file.isProtected() == false);
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see
|
||||||
|
* com.raytheon.uf.viz.localization.perspective.view.actions.CopyToAction
|
||||||
|
* #isLevelEnabled
|
||||||
|
* (com.raytheon.uf.common.localization.LocalizationContext.LocalizationLevel
|
||||||
|
* )
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected boolean isLevelEnabled(LocalizationLevel level) {
|
||||||
|
return pasteToProtectedLevel == null
|
||||||
|
|| level.compareTo(pasteToProtectedLevel) <= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -0,0 +1,149 @@
|
||||||
|
/**
|
||||||
|
* This software was developed and / or modified by Raytheon Company,
|
||||||
|
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||||
|
*
|
||||||
|
* U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||||
|
* This software product contains export-restricted data whose
|
||||||
|
* export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||||
|
* to non-U.S. persons whether in the United States or abroad requires
|
||||||
|
* an export license or other authorization.
|
||||||
|
*
|
||||||
|
* Contractor Name: Raytheon Company
|
||||||
|
* Contractor Address: 6825 Pine Street, Suite 340
|
||||||
|
* Mail Stop B8
|
||||||
|
* Omaha, NE 68106
|
||||||
|
* 402.291.0100
|
||||||
|
*
|
||||||
|
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||||
|
* further licensing information.
|
||||||
|
**/
|
||||||
|
package com.raytheon.uf.viz.localization.perspective.view.actions;
|
||||||
|
|
||||||
|
import org.eclipse.jface.action.Action;
|
||||||
|
import org.eclipse.jface.action.ActionContributionItem;
|
||||||
|
import org.eclipse.jface.action.IAction;
|
||||||
|
import org.eclipse.jface.action.IMenuCreator;
|
||||||
|
import org.eclipse.swt.widgets.Control;
|
||||||
|
import org.eclipse.swt.widgets.Menu;
|
||||||
|
|
||||||
|
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationLevel;
|
||||||
|
import com.raytheon.uf.common.localization.PathManagerFactory;
|
||||||
|
import com.raytheon.uf.viz.localization.perspective.view.FileTreeView;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Action for generating menu items for hiding/showing localization levels in
|
||||||
|
* the {@link FileTreeView}
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
* SOFTWARE HISTORY
|
||||||
|
*
|
||||||
|
* Date Ticket# Engineer Description
|
||||||
|
* ------------ ---------- ----------- --------------------------
|
||||||
|
* Sep 6, 2012 mschenke Initial creation
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @author mschenke
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class ShowLevelsAction extends Action implements IMenuCreator {
|
||||||
|
|
||||||
|
private FileTreeView view;
|
||||||
|
|
||||||
|
private Menu menu;
|
||||||
|
|
||||||
|
public ShowLevelsAction(FileTreeView view) {
|
||||||
|
super("Show", IAction.AS_DROP_DOWN_MENU);
|
||||||
|
this.view = view;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IMenuCreator getMenuCreator() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see org.eclipse.jface.action.IMenuCreator#dispose()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void dispose() {
|
||||||
|
if (menu != null) {
|
||||||
|
menu.dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see
|
||||||
|
* org.eclipse.jface.action.IMenuCreator#getMenu(org.eclipse.swt.widgets
|
||||||
|
* .Control)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Menu getMenu(Control parent) {
|
||||||
|
if (menu != null) {
|
||||||
|
menu.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
menu = new Menu(parent);
|
||||||
|
|
||||||
|
fillMenu(menu);
|
||||||
|
|
||||||
|
return menu;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see
|
||||||
|
* org.eclipse.jface.action.IMenuCreator#getMenu(org.eclipse.swt.widgets
|
||||||
|
* .Menu)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Menu getMenu(Menu parent) {
|
||||||
|
if (menu != null) {
|
||||||
|
menu.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
menu = new Menu(parent);
|
||||||
|
|
||||||
|
fillMenu(menu);
|
||||||
|
return menu;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private void fillMenu(Menu menu) {
|
||||||
|
// Use of LocalizationLevels.values() in this case should be okay since
|
||||||
|
// we are setting a property to display all context names for the level,
|
||||||
|
// doesn't matter if our local context for the level is set
|
||||||
|
for (LocalizationLevel level : PathManagerFactory.getPathManager()
|
||||||
|
.getAvailableLevels()) {
|
||||||
|
ActionContributionItem aci = new ActionContributionItem(
|
||||||
|
new ShowLevelInternalAction(level));
|
||||||
|
aci.fill(menu, -1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class ShowLevelInternalAction extends Action {
|
||||||
|
|
||||||
|
private LocalizationLevel level;
|
||||||
|
|
||||||
|
public ShowLevelInternalAction(LocalizationLevel level) {
|
||||||
|
super(level.name(), IAction.AS_CHECK_BOX);
|
||||||
|
this.level = level;
|
||||||
|
setChecked(view.isShown(level));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
view.toggleShowLevel(level);
|
||||||
|
setChecked(view.isShown(level));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -19,6 +19,8 @@
|
||||||
**/
|
**/
|
||||||
package com.raytheon.uf.viz.monitor.scan.commondialogs;
|
package com.raytheon.uf.viz.monitor.scan.commondialogs;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import org.eclipse.swt.SWT;
|
import org.eclipse.swt.SWT;
|
||||||
import org.eclipse.swt.events.FocusAdapter;
|
import org.eclipse.swt.events.FocusAdapter;
|
||||||
import org.eclipse.swt.events.FocusEvent;
|
import org.eclipse.swt.events.FocusEvent;
|
||||||
|
@ -40,8 +42,12 @@ import org.eclipse.swt.widgets.Text;
|
||||||
import com.raytheon.uf.common.monitor.scan.config.AbsConfigMgr;
|
import com.raytheon.uf.common.monitor.scan.config.AbsConfigMgr;
|
||||||
import com.raytheon.uf.common.monitor.scan.config.SCANConfig;
|
import com.raytheon.uf.common.monitor.scan.config.SCANConfig;
|
||||||
import com.raytheon.uf.common.monitor.scan.config.SCANConfigEnums.ScanTables;
|
import com.raytheon.uf.common.monitor.scan.config.SCANConfigEnums.ScanTables;
|
||||||
|
import com.raytheon.uf.viz.monitor.scan.ScanMonitor;
|
||||||
|
import com.raytheon.uf.viz.monitor.scan.tables.AbstractTableDlg;
|
||||||
import com.raytheon.uf.viz.monitor.scan.tables.SCANAlarmAlertManager;
|
import com.raytheon.uf.viz.monitor.scan.tables.SCANAlarmAlertManager;
|
||||||
|
import com.raytheon.uf.viz.monitor.scan.tables.SCANCellTableDlg;
|
||||||
import com.raytheon.uf.viz.monitor.scan.tables.SCANAlarmAlertManager.AlarmType;
|
import com.raytheon.uf.viz.monitor.scan.tables.SCANAlarmAlertManager.AlarmType;
|
||||||
|
import com.raytheon.uf.viz.monitor.scan.tables.SCANAlarmAlertManager.AlertedAlarms;
|
||||||
import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
|
import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
|
||||||
|
|
||||||
public class SCANAlarmThreshDlg extends CaveSWTDialog implements
|
public class SCANAlarmThreshDlg extends CaveSWTDialog implements
|
||||||
|
@ -239,6 +245,16 @@ public class SCANAlarmThreshDlg extends CaveSWTDialog implements
|
||||||
@Override
|
@Override
|
||||||
public void widgetSelected(SelectionEvent e) {
|
public void widgetSelected(SelectionEvent e) {
|
||||||
alarmChoiceChanged();
|
alarmChoiceChanged();
|
||||||
|
String columnName = attributeCbo.getText();
|
||||||
|
mgr.clearAlertedAlarms(site, scanTable);
|
||||||
|
AbstractTableDlg tableDlg = ScanMonitor.getInstance()
|
||||||
|
.getDialog(scanTable, site);
|
||||||
|
tableDlg.updateThresh(columnName);
|
||||||
|
if (mgr.getAlertedAlarmCount(site, scanTable) == 0) {
|
||||||
|
tableDlg.turnOffAlarm();
|
||||||
|
} else {
|
||||||
|
tableDlg.turnOnAlarm();
|
||||||
|
}
|
||||||
shell.dispose();
|
shell.dispose();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -157,7 +157,7 @@ public class ScanResource extends
|
||||||
VizApp.runAsync(new Runnable() {
|
VizApp.runAsync(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
if (getScanDrawer().font != null) {
|
if (gc != null && getScanDrawer().font != null) {
|
||||||
getScanDrawer().font.setMagnification(getCapability(
|
getScanDrawer().font.setMagnification(getCapability(
|
||||||
MagnificationCapability.class).getMagnification()
|
MagnificationCapability.class).getMagnification()
|
||||||
.floatValue());
|
.floatValue());
|
||||||
|
@ -560,7 +560,7 @@ public class ScanResource extends
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public ScanDrawer getScanDrawer() {
|
public ScanDrawer getScanDrawer() {
|
||||||
if (drawer == null) {
|
if (drawer == null && gc != null) {
|
||||||
if (getTable().equals(ScanTables.CELL)) {
|
if (getTable().equals(ScanTables.CELL)) {
|
||||||
drawer = new ScanDrawer(SCANConfig.getInstance()
|
drawer = new ScanDrawer(SCANConfig.getInstance()
|
||||||
.getStormCellConfig(), gc, getScan()
|
.getStormCellConfig(), gc, getScan()
|
||||||
|
|
|
@ -765,4 +765,8 @@ public abstract class AbstractTableDlg extends Dialog implements IMonitor,
|
||||||
protected abstract void handleRankMenuEvent(SelectionEvent event);
|
protected abstract void handleRankMenuEvent(SelectionEvent event);
|
||||||
|
|
||||||
public abstract void updateThresh(String attr);
|
public abstract void updateThresh(String attr);
|
||||||
|
|
||||||
|
public abstract void turnOffAlarm();
|
||||||
|
|
||||||
|
public abstract void turnOnAlarm();
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,10 +21,13 @@ package com.raytheon.uf.viz.monitor.scan.tables;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.CopyOnWriteArrayList;
|
import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
|
|
||||||
|
@ -36,6 +39,7 @@ import com.raytheon.uf.common.monitor.scan.config.SCANConfigEnums;
|
||||||
import com.raytheon.uf.common.monitor.scan.config.SCANConfigEnums.ScanTables;
|
import com.raytheon.uf.common.monitor.scan.config.SCANConfigEnums.ScanTables;
|
||||||
import com.raytheon.uf.viz.monitor.scan.ScanMonitor;
|
import com.raytheon.uf.viz.monitor.scan.ScanMonitor;
|
||||||
import com.raytheon.uf.viz.monitor.scan.data.ScanDataGenerator;
|
import com.raytheon.uf.viz.monitor.scan.data.ScanDataGenerator;
|
||||||
|
import com.raytheon.uf.viz.monitor.scan.tables.SCANAlarmAlertManager.AlarmType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Manager class to hold between scan dialog and alarming capabilities
|
* Manager class to hold between scan dialog and alarming capabilities
|
||||||
|
@ -74,11 +78,11 @@ public class SCANAlarmAlertManager {
|
||||||
|
|
||||||
private static SCANAlarmAlertManager instance = null;
|
private static SCANAlarmAlertManager instance = null;
|
||||||
|
|
||||||
private HashMap<String, HashMap<ScanTables, List<ScheduledAlarms>>> scheduledAlarmsMap;
|
private Map<String, Map<ScanTables, List<ScheduledAlarms>>> scheduledAlarmsMap;
|
||||||
|
|
||||||
private HashMap<String, HashMap<ScanTables, Set<AlertedAlarms>>> alertedAlarmsMap;
|
private Map<String, Map<ScanTables, Set<AlertedAlarms>>> alertedAlarmsMap;
|
||||||
|
|
||||||
private HashMap<String, HashMap<ScanTables, List<String>>> idents;
|
private Map<String, Map<ScanTables, List<String>>> idents;
|
||||||
|
|
||||||
private boolean ring = false;
|
private boolean ring = false;
|
||||||
|
|
||||||
|
@ -98,7 +102,7 @@ public class SCANAlarmAlertManager {
|
||||||
public void addSite(String site) {
|
public void addSite(String site) {
|
||||||
|
|
||||||
if (!scheduledAlarmsMap.containsKey(site)) {
|
if (!scheduledAlarmsMap.containsKey(site)) {
|
||||||
HashMap<ScanTables, List<ScheduledAlarms>> siteScheduledAlarmsMap = new HashMap<ScanTables, List<ScheduledAlarms>>();
|
Map<ScanTables, List<ScheduledAlarms>> siteScheduledAlarmsMap = Collections.synchronizedMap(new HashMap<ScanTables, List<ScheduledAlarms>>());
|
||||||
siteScheduledAlarmsMap.put(ScanTables.DMD,
|
siteScheduledAlarmsMap.put(ScanTables.DMD,
|
||||||
new CopyOnWriteArrayList<ScheduledAlarms>());
|
new CopyOnWriteArrayList<ScheduledAlarms>());
|
||||||
siteScheduledAlarmsMap.put(ScanTables.CELL,
|
siteScheduledAlarmsMap.put(ScanTables.CELL,
|
||||||
|
@ -107,7 +111,7 @@ public class SCANAlarmAlertManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!alertedAlarmsMap.containsKey(site)) {
|
if (!alertedAlarmsMap.containsKey(site)) {
|
||||||
HashMap<ScanTables, Set<AlertedAlarms>> siteAlertedAlarmsSet = new HashMap<ScanTables, Set<AlertedAlarms>>();
|
Map<ScanTables, Set<AlertedAlarms>> siteAlertedAlarmsSet = Collections.synchronizedMap(new HashMap<ScanTables, Set<AlertedAlarms>>());
|
||||||
siteAlertedAlarmsSet.put(ScanTables.DMD,
|
siteAlertedAlarmsSet.put(ScanTables.DMD,
|
||||||
new HashSet<AlertedAlarms>());
|
new HashSet<AlertedAlarms>());
|
||||||
siteAlertedAlarmsSet.put(ScanTables.CELL,
|
siteAlertedAlarmsSet.put(ScanTables.CELL,
|
||||||
|
@ -116,7 +120,7 @@ public class SCANAlarmAlertManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!idents.containsKey(site)) {
|
if (!idents.containsKey(site)) {
|
||||||
HashMap<ScanTables, List<String>> siteIdents = new HashMap<ScanTables, List<String>>();
|
Map<ScanTables, List<String>> siteIdents = new HashMap<ScanTables, List<String>>();
|
||||||
siteIdents.put(ScanTables.CELL, new ArrayList<String>());
|
siteIdents.put(ScanTables.CELL, new ArrayList<String>());
|
||||||
siteIdents.put(ScanTables.DMD, new ArrayList<String>());
|
siteIdents.put(ScanTables.DMD, new ArrayList<String>());
|
||||||
idents.put(site, siteIdents);
|
idents.put(site, siteIdents);
|
||||||
|
@ -126,15 +130,15 @@ public class SCANAlarmAlertManager {
|
||||||
private SCANAlarmAlertManager() {
|
private SCANAlarmAlertManager() {
|
||||||
|
|
||||||
if (scheduledAlarmsMap == null) {
|
if (scheduledAlarmsMap == null) {
|
||||||
scheduledAlarmsMap = new HashMap<String, HashMap<ScanTables, List<ScheduledAlarms>>>();
|
scheduledAlarmsMap = Collections.synchronizedMap(new HashMap<String, Map<ScanTables, List<ScheduledAlarms>>>());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (alertedAlarmsMap == null) {
|
if (alertedAlarmsMap == null) {
|
||||||
alertedAlarmsMap = new HashMap<String, HashMap<ScanTables, Set<AlertedAlarms>>>();
|
alertedAlarmsMap = Collections.synchronizedMap(new HashMap<String, Map<ScanTables, Set<AlertedAlarms>>>());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (idents == null) {
|
if (idents == null) {
|
||||||
idents = new HashMap<String, HashMap<ScanTables, List<String>>>();
|
idents = new HashMap<String, Map<ScanTables, List<String>>>();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -438,7 +442,7 @@ public class SCANAlarmAlertManager {
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean containsAlarm(String site, ScanTables tableType,
|
public boolean containsAlarm(String site, ScanTables tableType,
|
||||||
AlarmType type, String colName, String ident) {
|
AlarmType type, String colName, String ident) {
|
||||||
for (AlertedAlarms alarm : alertedAlarmsMap.get(site).get(tableType)) {
|
for (AlertedAlarms alarm : alertedAlarmsMap.get(site).get(tableType)) {
|
||||||
|
@ -493,9 +497,10 @@ public class SCANAlarmAlertManager {
|
||||||
alarm.cleared = true;
|
alarm.cleared = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeAlertedAlarms(String site, ScanTables tableType) {
|
public void removeAlertedAlarms(String site, ScanTables tableType) {
|
||||||
alertedAlarmsMap.get(site).get(tableType).clear();
|
alertedAlarmsMap.get(site).get(tableType).clear();
|
||||||
|
setRing(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -603,4 +608,5 @@ public class SCANAlarmAlertManager {
|
||||||
+ this.row + "\nCol #:" + this.col + "\nCleared: " + cleared + "\n";
|
+ this.row + "\nCol #:" + this.col + "\nCleared: " + cleared + "\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -475,8 +475,7 @@ public class SCANCellTableDlg extends AbstractTableDlg implements
|
||||||
alarmDlg.open();
|
alarmDlg.open();
|
||||||
if (!alarmBtn.isDisposed()
|
if (!alarmBtn.isDisposed()
|
||||||
&& (mgr.getAlertedAlarmCount(site, scanTable) == 0)) {
|
&& (mgr.getAlertedAlarmCount(site, scanTable) == 0)) {
|
||||||
alarmBtn.setVisible(false);
|
turnOffAlarm();
|
||||||
mgr.setRing(false);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -488,7 +487,23 @@ public class SCANCellTableDlg extends AbstractTableDlg implements
|
||||||
timeLbl.setLayoutData(gd);
|
timeLbl.setLayoutData(gd);
|
||||||
}
|
}
|
||||||
|
|
||||||
// private void resetButtonForegroundColor(Button btn)
|
@Override
|
||||||
|
public void turnOffAlarm() {
|
||||||
|
if (alarmBtn != null && !alarmBtn.isDisposed()) {
|
||||||
|
alarmBtn.setVisible(false);
|
||||||
|
}
|
||||||
|
mgr.setRing(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void turnOnAlarm() {
|
||||||
|
if (alarmBtn != null && !alarmBtn.isDisposed()) {
|
||||||
|
alarmBtn.setVisible(true);
|
||||||
|
}
|
||||||
|
mgr.setRing(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// private void resetButtonForegroundColor(Button btn)
|
||||||
// {
|
// {
|
||||||
// btn.setForeground(display.getSystemColor(SWT.COLOR_WHITE));
|
// btn.setForeground(display.getSystemColor(SWT.COLOR_WHITE));
|
||||||
// }
|
// }
|
||||||
|
|
|
@ -514,8 +514,7 @@ public class SCANDmdTableDlg extends AbstractTableDlg implements
|
||||||
alarmsDlg.open();
|
alarmsDlg.open();
|
||||||
if (!alarmBtn.isDisposed()
|
if (!alarmBtn.isDisposed()
|
||||||
&& mgr.getAlertedAlarms(site, scanTable).isEmpty()) {
|
&& mgr.getAlertedAlarms(site, scanTable).isEmpty()) {
|
||||||
alarmBtn.setVisible(false);
|
turnOffAlarm();
|
||||||
mgr.setRing(false);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -1299,4 +1298,19 @@ public class SCANDmdTableDlg extends AbstractTableDlg implements
|
||||||
dmdTableComp.alarmSelection(ident);
|
dmdTableComp.alarmSelection(ident);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void turnOffAlarm() {
|
||||||
|
if (alarmBtn != null && !alarmBtn.isDisposed()) {
|
||||||
|
alarmBtn.setVisible(false);
|
||||||
|
}
|
||||||
|
mgr.setRing(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void turnOnAlarm() {
|
||||||
|
if (alarmBtn != null && !alarmBtn.isDisposed()) {
|
||||||
|
alarmBtn.setVisible(true);
|
||||||
|
}
|
||||||
|
mgr.setRing(true);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -647,4 +647,14 @@ public class SCANMesoTableDlg extends AbstractTableDlg implements
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void turnOffAlarm() {
|
||||||
|
mgr.setRing(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void turnOnAlarm() {
|
||||||
|
mgr.setRing(true);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -609,4 +609,14 @@ public class SCANTvsTableDlg extends AbstractTableDlg implements
|
||||||
// Not currently used for TVS
|
// Not currently used for TVS
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void turnOffAlarm() {
|
||||||
|
mgr.setRing(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void turnOnAlarm() {
|
||||||
|
mgr.setRing(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,12 +20,11 @@ Developed on the Raytheon Visualization Environment (viz)
|
||||||
<launcherArgs>
|
<launcherArgs>
|
||||||
<programArgs>-data @user.home/caveData -user @user.home/caveData -clean</programArgs>
|
<programArgs>-data @user.home/caveData -user @user.home/caveData -clean</programArgs>
|
||||||
<programArgsLin>-consoleLog</programArgsLin>
|
<programArgsLin>-consoleLog</programArgsLin>
|
||||||
<vmArgs>-Xincgc -Xmx256M -Xss2024k -Dosgi.instance.area.readOnly=true -Dosgi.hook.configurators.exclude=org.eclipse.core.runtime.internal.adaptor.EclipseLogHook,org.eclipse.core.runtime.internal.adaptor.EclipseErrorHandler -Dorg.eclipse.update.reconcile=false -Dqpid.dest_syntax=BURL -Dorg.eclipse.update.reconcile=false -XX:MaxPermSize=128m -Dorg.eclipse.ui/KEY_CONFIGURATION_ID=com.raytheon.viz.ui.awips.scheme -Dawips.mode=pypies -Dqpid.dest_syntax=BURL -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false</vmArgs>
|
<vmArgs>-Xincgc -Xmx256M -Xss2024k -Dosgi.instance.area.readOnly=true -Dosgi.hook.configurators.exclude=org.eclipse.core.runtime.internal.adaptor.EclipseLogHook,org.eclipse.core.runtime.internal.adaptor.EclipseErrorHandler -Dorg.eclipse.update.reconcile=false -Dqpid.dest_syntax=BURL -Dorg.eclipse.update.reconcile=false -XX:MaxPermSize=128m -Dorg.eclipse.ui/KEY_CONFIGURATION_ID=com.raytheon.viz.ui.awips.scheme -Dawips.mode=pypies -Dqpid.dest_syntax=BURL -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dlog4j.configuration=log4j-alertviz.xml</vmArgs>
|
||||||
</launcherArgs>
|
</launcherArgs>
|
||||||
|
|
||||||
<windowImages/>
|
<windowImages/>
|
||||||
|
|
||||||
|
|
||||||
<launcher name="alertviz">
|
<launcher name="alertviz">
|
||||||
<solaris/>
|
<solaris/>
|
||||||
<win useIco="false">
|
<win useIco="false">
|
||||||
|
@ -39,7 +38,6 @@ Developed on the Raytheon Visualization Environment (viz)
|
||||||
</win>
|
</win>
|
||||||
</launcher>
|
</launcher>
|
||||||
|
|
||||||
|
|
||||||
<vm>
|
<vm>
|
||||||
<linux include="true">jdk1.6.0</linux>
|
<linux include="true">jdk1.6.0</linux>
|
||||||
<windows include="true">jdk1.6.0</windows>
|
<windows include="true">jdk1.6.0</windows>
|
||||||
|
|
|
@ -27,11 +27,15 @@ import java.util.Map;
|
||||||
import javax.xml.bind.annotation.XmlAccessType;
|
import javax.xml.bind.annotation.XmlAccessType;
|
||||||
import javax.xml.bind.annotation.XmlAccessorType;
|
import javax.xml.bind.annotation.XmlAccessorType;
|
||||||
|
|
||||||
|
import org.eclipse.ui.IEditorPart;
|
||||||
|
import org.eclipse.ui.IWorkbenchWindow;
|
||||||
|
|
||||||
import com.raytheon.uf.common.dataquery.requests.RequestConstraint;
|
import com.raytheon.uf.common.dataquery.requests.RequestConstraint;
|
||||||
import com.raytheon.uf.common.serialization.ISerializableObject;
|
import com.raytheon.uf.common.serialization.ISerializableObject;
|
||||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||||
import com.raytheon.uf.common.status.UFStatus;
|
import com.raytheon.uf.common.status.UFStatus;
|
||||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||||
|
import com.raytheon.uf.viz.core.DescriptorMap;
|
||||||
import com.raytheon.uf.viz.core.IDisplayPaneContainer;
|
import com.raytheon.uf.viz.core.IDisplayPaneContainer;
|
||||||
import com.raytheon.uf.viz.core.catalog.CatalogQuery;
|
import com.raytheon.uf.viz.core.catalog.CatalogQuery;
|
||||||
import com.raytheon.uf.viz.core.catalog.DbQuery;
|
import com.raytheon.uf.viz.core.catalog.DbQuery;
|
||||||
|
@ -39,6 +43,7 @@ import com.raytheon.uf.viz.core.drawables.AbstractRenderableDisplay;
|
||||||
import com.raytheon.uf.viz.core.drawables.IDescriptor;
|
import com.raytheon.uf.viz.core.drawables.IDescriptor;
|
||||||
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.map.MapDescriptor;
|
||||||
import com.raytheon.uf.viz.core.procedures.Bundle;
|
import com.raytheon.uf.viz.core.procedures.Bundle;
|
||||||
import com.raytheon.uf.viz.core.rsc.AbstractRequestableResourceData;
|
import com.raytheon.uf.viz.core.rsc.AbstractRequestableResourceData;
|
||||||
import com.raytheon.uf.viz.core.rsc.ResourceProperties;
|
import com.raytheon.uf.viz.core.rsc.ResourceProperties;
|
||||||
|
@ -46,7 +51,10 @@ import com.raytheon.uf.viz.core.rsc.ResourceType;
|
||||||
import com.raytheon.uf.viz.productbrowser.ProductBrowserPreference.PreferenceType;
|
import com.raytheon.uf.viz.productbrowser.ProductBrowserPreference.PreferenceType;
|
||||||
import com.raytheon.viz.ui.EditorUtil;
|
import com.raytheon.viz.ui.EditorUtil;
|
||||||
import com.raytheon.viz.ui.MenuLoader;
|
import com.raytheon.viz.ui.MenuLoader;
|
||||||
|
import com.raytheon.viz.ui.VizWorkbenchManager;
|
||||||
import com.raytheon.viz.ui.editor.AbstractEditor;
|
import com.raytheon.viz.ui.editor.AbstractEditor;
|
||||||
|
import com.raytheon.viz.ui.perspectives.AbstractVizPerspectiveManager;
|
||||||
|
import com.raytheon.viz.ui.perspectives.VizPerspectiveListener;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Product browser abstract requestable implementation
|
* Product browser abstract requestable implementation
|
||||||
|
@ -134,11 +142,11 @@ public abstract class AbstractRequestableProductBrowserDataDefinition<T extends
|
||||||
|
|
||||||
String[] temp = queryData(param, queryList);
|
String[] temp = queryData(param, queryList);
|
||||||
if (temp != null) {
|
if (temp != null) {
|
||||||
if ((Boolean) getPreference(FORMAT_DATA).getValue()) {
|
if ((Boolean) getPreference(FORMAT_DATA).getValue()) {
|
||||||
parameters = formatData(param, temp);
|
parameters = formatData(param, temp);
|
||||||
} else {
|
} else {
|
||||||
parameters = super.formatData(param, temp);
|
parameters = super.formatData(param, temp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (parameters != null) {
|
if (parameters != null) {
|
||||||
|
@ -194,7 +202,10 @@ public abstract class AbstractRequestableProductBrowserDataDefinition<T extends
|
||||||
IDescriptor currDesc = null;
|
IDescriptor currDesc = null;
|
||||||
// retrieves the correct editor
|
// retrieves the correct editor
|
||||||
getEditor();
|
getEditor();
|
||||||
IDisplayPaneContainer container = EditorUtil.getActiveVizContainer();
|
IDisplayPaneContainer container = getEditor();
|
||||||
|
if (container == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
AbstractRenderableDisplay display = (AbstractRenderableDisplay) container
|
AbstractRenderableDisplay display = (AbstractRenderableDisplay) container
|
||||||
.getActiveDisplayPane().getRenderableDisplay();
|
.getActiveDisplayPane().getRenderableDisplay();
|
||||||
display = (AbstractRenderableDisplay) display.createNewDisplay();
|
display = (AbstractRenderableDisplay) display.createNewDisplay();
|
||||||
|
@ -265,8 +276,39 @@ public abstract class AbstractRequestableProductBrowserDataDefinition<T extends
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void getEditor() {
|
protected IDisplayPaneContainer getEditor() {
|
||||||
// do nothing, if user wants a certain editor then overwrite this method
|
String id = DescriptorMap.getEditorId(getDescriptorClass().getName());
|
||||||
|
IEditorPart editorPart = EditorUtil.getActiveEditor();
|
||||||
|
if (editorPart != null && id.equals(editorPart.getEditorSite().getId())) {
|
||||||
|
return (AbstractEditor) editorPart;
|
||||||
|
}
|
||||||
|
editorPart = EditorUtil.findEditor(id);
|
||||||
|
if (editorPart != null) {
|
||||||
|
return (AbstractEditor) editorPart;
|
||||||
|
}
|
||||||
|
return openNewEditor(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected IDisplayPaneContainer openNewEditor(String editorId) {
|
||||||
|
IWorkbenchWindow window = VizWorkbenchManager.getInstance()
|
||||||
|
.getCurrentWindow();
|
||||||
|
AbstractVizPerspectiveManager mgr = VizPerspectiveListener.getInstance(
|
||||||
|
window).getActivePerspectiveManager();
|
||||||
|
if (mgr != null) {
|
||||||
|
AbstractEditor editor = mgr.openNewEditor();
|
||||||
|
if (editor == null) {
|
||||||
|
return null;
|
||||||
|
} else if (editorId.equals(editor.getEditorSite().getId())) {
|
||||||
|
return editor;
|
||||||
|
} else {
|
||||||
|
window.getActivePage().closeEditor(editor, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Class<? extends IDescriptor> getDescriptorClass() {
|
||||||
|
return MapDescriptor.class;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -121,7 +121,7 @@ public class ThinClientLocalizationAdapter extends CAVELocalizationAdapter
|
||||||
ListResponse response = new ListResponse();
|
ListResponse response = new ListResponse();
|
||||||
response.context = context;
|
response.context = context;
|
||||||
response.isDirectory = localFile.isDirectory();
|
response.isDirectory = localFile.isDirectory();
|
||||||
response.isProtected = false;
|
response.protectedLevel = null;
|
||||||
response.existsOnServer = false;
|
response.existsOnServer = false;
|
||||||
response.fileName = p;
|
response.fileName = p;
|
||||||
response.date = new Date(localFile.lastModified());
|
response.date = new Date(localFile.lastModified());
|
||||||
|
@ -155,7 +155,7 @@ public class ThinClientLocalizationAdapter extends CAVELocalizationAdapter
|
||||||
response.context = ctx;
|
response.context = ctx;
|
||||||
response.existsOnServer = false;
|
response.existsOnServer = false;
|
||||||
response.fileName = fileName;
|
response.fileName = fileName;
|
||||||
response.isProtected = false;
|
response.protectedLevel = null;
|
||||||
File file = getPath(ctx, fileName);
|
File file = getPath(ctx, fileName);
|
||||||
if (file == null) {
|
if (file == null) {
|
||||||
response.isDirectory = false;
|
response.isDirectory = false;
|
||||||
|
|
|
@ -197,7 +197,7 @@ public class GLStats {
|
||||||
" * GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX = %dMB\n",
|
" * GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX = %dMB\n",
|
||||||
nvxDedicatedMem / 1024));
|
nvxDedicatedMem / 1024));
|
||||||
output.append(String.format(
|
output.append(String.format(
|
||||||
" * GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX = %dMB\n",
|
" * GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX = %dMB\n",
|
||||||
nvxTotalAvailableMem / 1024));
|
nvxTotalAvailableMem / 1024));
|
||||||
output.append(String.format(
|
output.append(String.format(
|
||||||
" * GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX = %dMB\n",
|
" * GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX = %dMB\n",
|
||||||
|
|
|
@ -177,7 +177,7 @@ public class GLShadedShapeBase implements IShape {
|
||||||
|
|
||||||
for (FloatBuffer[] contours : polygons) {
|
for (FloatBuffer[] contours : polygons) {
|
||||||
glu.gluTessProperty(tessellator, GLU.GLU_TESS_WINDING_RULE,
|
glu.gluTessProperty(tessellator, GLU.GLU_TESS_WINDING_RULE,
|
||||||
GLU.GLU_TESS_WINDING_NONZERO);
|
GLU.GLU_TESS_WINDING_ODD);
|
||||||
glu.gluTessBeginPolygon(tessellator, (double[]) null);
|
glu.gluTessBeginPolygon(tessellator, (double[]) null);
|
||||||
int polygonStart = vertexBuffer.position() / 2;
|
int polygonStart = vertexBuffer.position() / 2;
|
||||||
for (FloatBuffer contour : contours) {
|
for (FloatBuffer contour : contours) {
|
||||||
|
|
|
@ -170,10 +170,8 @@ public class GriddedImageDisplay2 extends AbstractTileSet {
|
||||||
|
|
||||||
private IImage createShortTile(IGraphicsTarget target, Rectangle rect,
|
private IImage createShortTile(IGraphicsTarget target, Rectangle rect,
|
||||||
int width, int i, int j) {
|
int width, int i, int j) {
|
||||||
// short is 2 bytes
|
|
||||||
int elemSize = 2;
|
|
||||||
// buffer to copy into
|
// buffer to copy into
|
||||||
short[] dest = new short[rect.width * rect.height * elemSize];
|
short[] dest = new short[rect.width * rect.height];
|
||||||
ShortBuffer srcBuff = (ShortBuffer) data;
|
ShortBuffer srcBuff = (ShortBuffer) data;
|
||||||
|
|
||||||
short[] tmp = new short[rect.width];
|
short[] tmp = new short[rect.width];
|
||||||
|
|
|
@ -21,7 +21,6 @@ package com.raytheon.viz.gfe.dialogs;
|
||||||
|
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
@ -32,8 +31,6 @@ import java.util.TimeZone;
|
||||||
import com.raytheon.uf.common.dataplugin.gfe.db.objects.DatabaseID;
|
import com.raytheon.uf.common.dataplugin.gfe.db.objects.DatabaseID;
|
||||||
import com.raytheon.uf.common.dataplugin.gfe.db.objects.ParmID;
|
import com.raytheon.uf.common.dataplugin.gfe.db.objects.ParmID;
|
||||||
import com.raytheon.viz.core.mode.CAVEMode;
|
import com.raytheon.viz.core.mode.CAVEMode;
|
||||||
import com.raytheon.viz.gfe.GFEServerException;
|
|
||||||
import com.raytheon.viz.gfe.core.DataManager;
|
|
||||||
import com.raytheon.viz.gfe.core.IParmManager;
|
import com.raytheon.viz.gfe.core.IParmManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -48,6 +45,10 @@ import com.raytheon.viz.gfe.core.IParmManager;
|
||||||
* 04/30/2009 2282 rjpeter Refactored interfaces.
|
* 04/30/2009 2282 rjpeter Refactored interfaces.
|
||||||
* 08/19/2009 2547 rjpeter Implement Test/Prac database display.
|
* 08/19/2009 2547 rjpeter Implement Test/Prac database display.
|
||||||
* 02/22/2012 14351 mli update with incoming databases
|
* 02/22/2012 14351 mli update with incoming databases
|
||||||
|
* 09/12/2012 #1117 dgilling Revert previous changes, force
|
||||||
|
* source list to always rebuild to ensure
|
||||||
|
* up to date db list.
|
||||||
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author ebabin
|
* @author ebabin
|
||||||
|
@ -58,7 +59,7 @@ public class WEBrowserTypeRecord {
|
||||||
|
|
||||||
private String type;
|
private String type;
|
||||||
|
|
||||||
private java.util.List<String> sources = new ArrayList<String>();
|
private List<String> sources = new ArrayList<String>();
|
||||||
|
|
||||||
public static final SimpleDateFormat SOURCE_FORMAT = new SimpleDateFormat(
|
public static final SimpleDateFormat SOURCE_FORMAT = new SimpleDateFormat(
|
||||||
"dd/HHmm");
|
"dd/HHmm");
|
||||||
|
@ -77,12 +78,14 @@ public class WEBrowserTypeRecord {
|
||||||
*/
|
*/
|
||||||
private Map<String, Map<String, List<String>>> miscMap = new HashMap<String, Map<String, List<String>>>();
|
private Map<String, Map<String, List<String>>> miscMap = new HashMap<String, Map<String, List<String>>>();
|
||||||
|
|
||||||
private ParmID possibleParms[];
|
private ParmID[] possibleParms;
|
||||||
|
|
||||||
private ParmID fields[];
|
private ParmID[] fields;
|
||||||
|
|
||||||
private final CAVEMode mode;
|
private final CAVEMode mode;
|
||||||
|
|
||||||
|
private final IParmManager parmMgr;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
SOURCE_FORMAT.setTimeZone(TimeZone.getTimeZone("GMT"));
|
SOURCE_FORMAT.setTimeZone(TimeZone.getTimeZone("GMT"));
|
||||||
}
|
}
|
||||||
|
@ -90,9 +93,10 @@ public class WEBrowserTypeRecord {
|
||||||
/**
|
/**
|
||||||
* @return the type
|
* @return the type
|
||||||
*/
|
*/
|
||||||
public WEBrowserTypeRecord(String type, CAVEMode mode) {
|
public WEBrowserTypeRecord(String type, CAVEMode mode, IParmManager parmMgr) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
this.mode = mode;
|
this.mode = mode;
|
||||||
|
this.parmMgr = parmMgr;
|
||||||
// create and fill these entries on creation of this type.
|
// create and fill these entries on creation of this type.
|
||||||
makeSources();
|
makeSources();
|
||||||
// go ahead and fill the ParmID[] array.
|
// go ahead and fill the ParmID[] array.
|
||||||
|
@ -115,14 +119,7 @@ public class WEBrowserTypeRecord {
|
||||||
* @return the sources
|
* @return the sources
|
||||||
*/
|
*/
|
||||||
public java.util.List<String> getSources() {
|
public java.util.List<String> getSources() {
|
||||||
return sources;
|
makeSources();
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the sources
|
|
||||||
*/
|
|
||||||
public java.util.List<String> getUpdatedSources() {
|
|
||||||
makeSources();
|
|
||||||
return sources;
|
return sources;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -136,7 +133,7 @@ public class WEBrowserTypeRecord {
|
||||||
return fields;
|
return fields;
|
||||||
}
|
}
|
||||||
|
|
||||||
private ArrayList<DatabaseID> getDbsForType(String typeLabel) {
|
private List<DatabaseID> getDbsForType(String typeLabel) {
|
||||||
boolean pracFlag = false;
|
boolean pracFlag = false;
|
||||||
boolean testFlag = false;
|
boolean testFlag = false;
|
||||||
|
|
||||||
|
@ -145,19 +142,9 @@ public class WEBrowserTypeRecord {
|
||||||
pracFlag = mode.equals(CAVEMode.PRACTICE);
|
pracFlag = mode.equals(CAVEMode.PRACTICE);
|
||||||
testFlag = mode.equals(CAVEMode.TEST);
|
testFlag = mode.equals(CAVEMode.TEST);
|
||||||
}
|
}
|
||||||
// List<DatabaseID> dbs = DataManager.getCurrentInstance()
|
List<DatabaseID> dbs = parmMgr.getAvailableDbs();
|
||||||
// .getParmManager().getAvailableDbs();
|
|
||||||
|
|
||||||
// Always retrieve updated databases
|
List<DatabaseID> filtDB = new ArrayList<DatabaseID>();
|
||||||
List<DatabaseID> dbs = null;
|
|
||||||
try {
|
|
||||||
dbs = DataManager.getCurrentInstance().getClient().getAvailableDbs();
|
|
||||||
} catch (GFEServerException e) {
|
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
ArrayList<DatabaseID> filtDB = new ArrayList<DatabaseID>();
|
|
||||||
|
|
||||||
for (DatabaseID db : dbs) {
|
for (DatabaseID db : dbs) {
|
||||||
if (db.getDbType().equalsIgnoreCase(typeLabel)) {
|
if (db.getDbType().equalsIgnoreCase(typeLabel)) {
|
||||||
|
@ -167,88 +154,89 @@ public class WEBrowserTypeRecord {
|
||||||
} else if (db.getDbType().equalsIgnoreCase("Test") && testFlag) {
|
} else if (db.getDbType().equalsIgnoreCase("Test") && testFlag) {
|
||||||
filtDB.add(db);
|
filtDB.add(db);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return filtDB;
|
return filtDB;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void makeSources() {
|
private void makeSources() {
|
||||||
ArrayList<DatabaseID> databases = getDbsForType(type);
|
// clear all existing data as we will end up rebuilding it here...
|
||||||
IParmManager parmMgr = DataManager.getCurrentInstance()
|
sources.clear();
|
||||||
.getParmManager();
|
fieldMap.clear();
|
||||||
|
miscMap.clear();
|
||||||
|
pressureMap.clear();
|
||||||
|
|
||||||
// move mutable to front of list.
|
List<DatabaseID> databases = getDbsForType(type);
|
||||||
DatabaseID mutableDb = parmMgr.getMutableDatabase();
|
final DatabaseID mutableDb = parmMgr.getMutableDatabase();
|
||||||
if (databases.indexOf(mutableDb) > 0) {
|
|
||||||
databases.remove(mutableDb);
|
|
||||||
databases.add(0, mutableDb);
|
|
||||||
}
|
|
||||||
|
|
||||||
Collections.sort(databases, new Comparator<DatabaseID>() {
|
Collections.sort(databases, new Comparator<DatabaseID>() {
|
||||||
@Override
|
@Override
|
||||||
public int compare(DatabaseID left, DatabaseID right) {
|
public int compare(DatabaseID left, DatabaseID right) {
|
||||||
String compare1 = null == left.getModelName() ? "" : left
|
// sorting rules for WeatherElementBrowser:
|
||||||
.getModelName();
|
// mutable first
|
||||||
String compare2 = null == right.getModelName() ? "" : right
|
// singletons next in alpha order
|
||||||
.getModelName();
|
// rest in order first by name, then time (newest to oldest)
|
||||||
|
if (left.equals(right)) {
|
||||||
int returnValue = compare1.compareTo(compare2);
|
return 0;
|
||||||
if (0 == returnValue) {
|
|
||||||
compare1 = null == left.getModelTime() ? "" : left
|
|
||||||
.getModelTime();
|
|
||||||
compare2 = null == right.getModelTime() ? "" : right
|
|
||||||
.getModelTime();
|
|
||||||
returnValue = -1 * compare1.compareTo(compare2);
|
|
||||||
}
|
}
|
||||||
return returnValue;
|
|
||||||
|
if (left.equals(mutableDb)) {
|
||||||
|
return -1;
|
||||||
|
} else if (right.equals(mutableDb)) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
String leftModelTime = (left.getModelTime() != null ? left
|
||||||
|
.getModelTime() : "");
|
||||||
|
String rightModelTime = (right.getModelTime() != null ? right
|
||||||
|
.getModelTime() : "");
|
||||||
|
if (leftModelTime.equals(DatabaseID.NO_MODEL_TIME)
|
||||||
|
&& (!rightModelTime.equals(DatabaseID.NO_MODEL_TIME))) {
|
||||||
|
return -1;
|
||||||
|
} else if (!leftModelTime.equals(DatabaseID.NO_MODEL_TIME)
|
||||||
|
&& (rightModelTime.equals(DatabaseID.NO_MODEL_TIME))) {
|
||||||
|
return 1;
|
||||||
|
} else if (leftModelTime.equals(DatabaseID.NO_MODEL_TIME)
|
||||||
|
&& (rightModelTime.equals(DatabaseID.NO_MODEL_TIME))) {
|
||||||
|
return left.getModelName().compareTo(right.getModelName());
|
||||||
|
}
|
||||||
|
|
||||||
|
int modelNameCompare = left.getModelName().compareTo(
|
||||||
|
right.getModelName());
|
||||||
|
if (modelNameCompare != 0) {
|
||||||
|
return modelNameCompare;
|
||||||
|
}
|
||||||
|
return -1 * leftModelTime.compareTo(rightModelTime);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
for (DatabaseID dbase : databases) {
|
for (DatabaseID dbId : databases) {
|
||||||
String sourceTime = dbase.getModelName();
|
String sourceString = dbId.getModelName();
|
||||||
if (dbase.getModelDate() != null) {
|
if (dbId.getModelDate() != null) {
|
||||||
synchronized (SOURCE_FORMAT) {
|
synchronized (SOURCE_FORMAT) {
|
||||||
sourceTime += " "
|
sourceString += " "
|
||||||
+ SOURCE_FORMAT.format(dbase.getModelDate());
|
+ SOURCE_FORMAT.format(dbId.getModelDate());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
boolean srcAdded = false;
|
sources.add(sourceString);
|
||||||
ParmID[] availParms = parmMgr.getAvailableParms(dbase);
|
|
||||||
if (availParms != null) {
|
|
||||||
for (ParmID parm : availParms) {
|
|
||||||
if (parm.getParmLevel().startsWith("MB")) {
|
|
||||||
addToMap(pressureMap, sourceTime, parm.getParmName(),
|
|
||||||
parm.getParmLevel());
|
|
||||||
} else {
|
|
||||||
addToMap(miscMap, sourceTime, parm.getParmName(),
|
|
||||||
parm.getParmLevel());
|
|
||||||
}
|
|
||||||
DatabaseID parmDB = parm.getDbId();
|
|
||||||
if (parmDB.getModelName().equalsIgnoreCase(
|
|
||||||
dbase.getModelName())
|
|
||||||
&& parmDB.getModelTime().equalsIgnoreCase(
|
|
||||||
dbase.getModelTime())
|
|
||||||
&& parmDB.getDbType().equalsIgnoreCase(
|
|
||||||
dbase.getDbType())) {
|
|
||||||
if (!sources.contains(sourceTime)) {
|
|
||||||
sources.add(sourceTime);
|
|
||||||
srcAdded = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (srcAdded) {
|
|
||||||
// create a list...
|
|
||||||
ArrayList<ParmID> ids = new ArrayList<ParmID>();
|
|
||||||
for (ParmID parm : availParms) {
|
|
||||||
ids.add(parm);
|
|
||||||
}
|
|
||||||
java.util.Collections.sort(ids);
|
|
||||||
|
|
||||||
fieldMap.put(sourceTime,
|
ParmID[] availParms = parmMgr.getAvailableParms(dbId);
|
||||||
ids.toArray(new ParmID[ids.size()]));
|
List<ParmID> sortedParms = new ArrayList<ParmID>(availParms.length);
|
||||||
|
for (ParmID parm : availParms) {
|
||||||
|
if (parm.getParmLevel().startsWith("MB")) {
|
||||||
|
addToMap(pressureMap, sourceString, parm.getParmName(),
|
||||||
|
parm.getParmLevel());
|
||||||
|
} else {
|
||||||
|
addToMap(miscMap, sourceString, parm.getParmName(),
|
||||||
|
parm.getParmLevel());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sortedParms.add(parm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Collections.sort(sortedParms);
|
||||||
|
fieldMap.put(sourceString,
|
||||||
|
sortedParms.toArray(new ParmID[sortedParms.size()]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -420,11 +408,10 @@ public class WEBrowserTypeRecord {
|
||||||
*/
|
*/
|
||||||
public ParmID[] getPossibleParmIDs() {
|
public ParmID[] getPossibleParmIDs() {
|
||||||
if (possibleParms == null) {
|
if (possibleParms == null) {
|
||||||
ArrayList<DatabaseID> databases = getDbsForType(type);
|
List<DatabaseID> databases = getDbsForType(type);
|
||||||
ArrayList<ParmID> parmIds = new ArrayList<ParmID>();
|
ArrayList<ParmID> parmIds = new ArrayList<ParmID>();
|
||||||
for (DatabaseID db : databases) {
|
for (DatabaseID db : databases) {
|
||||||
ParmID ids[] = DataManager.getCurrentInstance()
|
ParmID ids[] = parmMgr.getAvailableParms(db);
|
||||||
.getParmManager().getAvailableParms(db);
|
|
||||||
for (int i = 0; i < ids.length; i++) {
|
for (int i = 0; i < ids.length; i++) {
|
||||||
parmIds.add(ids[i]);
|
parmIds.add(ids[i]);
|
||||||
}
|
}
|
||||||
|
@ -437,25 +424,6 @@ public class WEBrowserTypeRecord {
|
||||||
return possibleParms;
|
return possibleParms;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Add ParmIDs for new database
|
|
||||||
*/
|
|
||||||
public void addNewParmIDs(String newSource) {
|
|
||||||
ArrayList<ParmID> parmIds = new ArrayList<ParmID>();
|
|
||||||
possibleParms = getPossibleParmIDs();
|
|
||||||
parmIds.addAll(Arrays.asList(possibleParms));
|
|
||||||
|
|
||||||
ParmID ids[] = getFields(newSource);
|
|
||||||
for ( int i = 0; i < ids.length; i++) {
|
|
||||||
if (!parmIds.contains(ids[i])) {
|
|
||||||
parmIds.add(ids[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
possibleParms = new ParmID[parmIds.size()];
|
|
||||||
parmIds.toArray(possibleParms);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ArrayList<ParmID> getFilteredParmIDs(String sources[],
|
public ArrayList<ParmID> getFilteredParmIDs(String sources[],
|
||||||
String fields[], String planes[]) {
|
String fields[], String planes[]) {
|
||||||
ArrayList<ParmID> listToReturn = new ArrayList<ParmID>();
|
ArrayList<ParmID> listToReturn = new ArrayList<ParmID>();
|
||||||
|
|
|
@ -51,7 +51,6 @@ import org.eclipse.swt.widgets.ToolItem;
|
||||||
import com.raytheon.uf.common.dataplugin.gfe.db.objects.DatabaseID;
|
import com.raytheon.uf.common.dataplugin.gfe.db.objects.DatabaseID;
|
||||||
import com.raytheon.uf.common.dataplugin.gfe.db.objects.ParmID;
|
import com.raytheon.uf.common.dataplugin.gfe.db.objects.ParmID;
|
||||||
import com.raytheon.viz.core.mode.CAVEMode;
|
import com.raytheon.viz.core.mode.CAVEMode;
|
||||||
import com.raytheon.viz.gfe.GFEServerException;
|
|
||||||
import com.raytheon.viz.gfe.core.DataManager;
|
import com.raytheon.viz.gfe.core.DataManager;
|
||||||
import com.raytheon.viz.gfe.core.parm.Parm;
|
import com.raytheon.viz.gfe.core.parm.Parm;
|
||||||
import com.raytheon.viz.ui.dialogs.CaveJFACEDialog;
|
import com.raytheon.viz.ui.dialogs.CaveJFACEDialog;
|
||||||
|
@ -69,7 +68,10 @@ import com.raytheon.viz.ui.widgets.ToggleSelectList;
|
||||||
* 06/27/2008 ebabin Updated to properly add fields.
|
* 06/27/2008 ebabin Updated to properly add fields.
|
||||||
* 04/30/2009 2282 rjpeter Refactored.
|
* 04/30/2009 2282 rjpeter Refactored.
|
||||||
* 08/19/2009 2547 rjpeter Fix Test/Prac database display.
|
* 08/19/2009 2547 rjpeter Fix Test/Prac database display.
|
||||||
* 02/22/2012 14351 mli update with incoming new grids.
|
* 02/22/2012 14351 mli update with incoming new grids.
|
||||||
|
* 09/12/2012 #1117 dgilling Revert previous changes, retrieve
|
||||||
|
* database list from ParmManager
|
||||||
|
* not EDEX.
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author ebabin
|
* @author ebabin
|
||||||
|
@ -107,8 +109,6 @@ public class WeatherElementBrowserDialog extends CaveJFACEDialog {
|
||||||
|
|
||||||
private ParmID[] currentDisplayedParms;
|
private ParmID[] currentDisplayedParms;
|
||||||
|
|
||||||
private List<DatabaseID> databases;
|
|
||||||
|
|
||||||
private static final Point size = new Point(603, 778);
|
private static final Point size = new Point(603, 778);
|
||||||
|
|
||||||
private static final String IFP = "IFP";
|
private static final String IFP = "IFP";
|
||||||
|
@ -499,7 +499,6 @@ public class WeatherElementBrowserDialog extends CaveJFACEDialog {
|
||||||
* Automatically checks for dups, and sorts.
|
* Automatically checks for dups, and sorts.
|
||||||
*/
|
*/
|
||||||
private void updateSourceMenu() {
|
private void updateSourceMenu() {
|
||||||
sourceList.removeAll();
|
|
||||||
resetMenu(sourceMenu);
|
resetMenu(sourceMenu);
|
||||||
List<String> sortedSources = selectedType.getSources();
|
List<String> sortedSources = selectedType.getSources();
|
||||||
|
|
||||||
|
@ -519,48 +518,6 @@ public class WeatherElementBrowserDialog extends CaveJFACEDialog {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* check for incoming new databases
|
|
||||||
*/
|
|
||||||
private void checkForNewSource() {
|
|
||||||
List<String> sortedSources = selectedType.getUpdatedSources();
|
|
||||||
|
|
||||||
if (sortedSources != null) {
|
|
||||||
List<String> newSources = new ArrayList<String>();
|
|
||||||
|
|
||||||
// Check for new new database
|
|
||||||
for (String source : sortedSources) {
|
|
||||||
boolean found = false;
|
|
||||||
for (int i = 0; i < sourceMenu.getItemCount(); i++) {
|
|
||||||
if (sourceMenu.getItem(i).getText().equals(source)) {
|
|
||||||
found = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!found) {
|
|
||||||
newSources.add(source);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// create menuItem for new database
|
|
||||||
if (newSources != null) {
|
|
||||||
for (String s : newSources) {
|
|
||||||
selectedType.addNewParmIDs(s);
|
|
||||||
final MenuItem item = new MenuItem(sourceMenu, SWT.PUSH);
|
|
||||||
item.setText(s);
|
|
||||||
item.addSelectionListener(new SelectionAdapter() {
|
|
||||||
@Override
|
|
||||||
public void widgetSelected(SelectionEvent e) {
|
|
||||||
addToList(item.getText(), sourceList);
|
|
||||||
processSourceSelection();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void processSourceSelection() {
|
private void processSourceSelection() {
|
||||||
java.util.List<String> currentSourceSelection = java.util.Arrays
|
java.util.List<String> currentSourceSelection = java.util.Arrays
|
||||||
.asList(sourceList.getSelection());
|
.asList(sourceList.getSelection());
|
||||||
|
@ -858,9 +815,7 @@ public class WeatherElementBrowserDialog extends CaveJFACEDialog {
|
||||||
sourceToolItem.addSelectionListener(new SelectionAdapter() {
|
sourceToolItem.addSelectionListener(new SelectionAdapter() {
|
||||||
@Override
|
@Override
|
||||||
public void widgetSelected(SelectionEvent event) {
|
public void widgetSelected(SelectionEvent event) {
|
||||||
// Check for new source
|
updateSourceMenu();
|
||||||
checkForNewSource();
|
|
||||||
|
|
||||||
Rectangle rect = sourceToolItem.getBounds();
|
Rectangle rect = sourceToolItem.getBounds();
|
||||||
Point pt = new Point(rect.x, rect.y + rect.height);
|
Point pt = new Point(rect.x, rect.y + rect.height);
|
||||||
pt = sourceToolBar.toDisplay(pt);
|
pt = sourceToolBar.toDisplay(pt);
|
||||||
|
@ -1208,10 +1163,11 @@ public class WeatherElementBrowserDialog extends CaveJFACEDialog {
|
||||||
final CAVEMode mode = CAVEMode.getMode();
|
final CAVEMode mode = CAVEMode.getMode();
|
||||||
|
|
||||||
if (mutableID.getDbType().equalsIgnoreCase("")) {
|
if (mutableID.getDbType().equalsIgnoreCase("")) {
|
||||||
typeEntries.add(new WEBrowserTypeRecord(IFP, mode));
|
typeEntries.add(new WEBrowserTypeRecord(IFP, mode, dataManager
|
||||||
|
.getParmManager()));
|
||||||
} else {
|
} else {
|
||||||
typeEntries
|
typeEntries.add(new WEBrowserTypeRecord(mutableID.getDbType(),
|
||||||
.add(new WEBrowserTypeRecord(mutableID.getDbType(), mode));
|
mode, dataManager.getParmManager()));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (DatabaseID database : getDatabases()) {
|
for (DatabaseID database : getDatabases()) {
|
||||||
|
@ -1229,7 +1185,8 @@ public class WeatherElementBrowserDialog extends CaveJFACEDialog {
|
||||||
databaseType = IFP;
|
databaseType = IFP;
|
||||||
}
|
}
|
||||||
|
|
||||||
typeEntries.add(new WEBrowserTypeRecord(databaseType, mode));
|
typeEntries.add(new WEBrowserTypeRecord(databaseType, mode,
|
||||||
|
dataManager.getParmManager()));
|
||||||
}
|
}
|
||||||
if (!siteList.contains(database.getSiteId())) {
|
if (!siteList.contains(database.getSiteId())) {
|
||||||
siteList.add(database.getSiteId());
|
siteList.add(database.getSiteId());
|
||||||
|
@ -1251,19 +1208,7 @@ public class WeatherElementBrowserDialog extends CaveJFACEDialog {
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<DatabaseID> getDatabases() {
|
private List<DatabaseID> getDatabases() {
|
||||||
if (databases == null) {
|
return dataManager.getParmManager().getAvailableDbs();
|
||||||
// databases = dataManager.getParmManager().getAvailableDbs();
|
|
||||||
|
|
||||||
// Always Retrieve updated databases
|
|
||||||
try {
|
|
||||||
databases = DataManager.getCurrentInstance().getClient().getAvailableDbs();
|
|
||||||
} catch (GFEServerException e) {
|
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return databases;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private ParmID[] getSelectedParmIDS() {
|
private ParmID[] getSelectedParmIDS() {
|
||||||
|
@ -1294,6 +1239,7 @@ public class WeatherElementBrowserDialog extends CaveJFACEDialog {
|
||||||
*
|
*
|
||||||
* @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
|
* @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public int compare(String s1, String s2) {
|
public int compare(String s1, String s2) {
|
||||||
// we expect pressure strings to read MBnnnn (e.g., MB100 or
|
// we expect pressure strings to read MBnnnn (e.g., MB100 or
|
||||||
// MB1000), thus we'll strip the first two letters of the strings
|
// MB1000), thus we'll strip the first two letters of the strings
|
||||||
|
|
|
@ -235,7 +235,8 @@ public class MakeHazardDialog extends CaveSWTDialog implements
|
||||||
Map<String, List<String>> localEffectAreas,
|
Map<String, List<String>> localEffectAreas,
|
||||||
Map<String, List<Object>> localAreaData) {
|
Map<String, List<Object>> localAreaData) {
|
||||||
|
|
||||||
super(parent, SWT.DIALOG_TRIM | SWT.RESIZE, CAVE.DO_NOT_BLOCK);
|
super(parent, SWT.DIALOG_TRIM | SWT.RESIZE, CAVE.DO_NOT_BLOCK
|
||||||
|
| CAVE.NO_PACK);
|
||||||
this.dataManager = dataManager;
|
this.dataManager = dataManager;
|
||||||
this.defaultMapWidth = defaultMapWidth;
|
this.defaultMapWidth = defaultMapWidth;
|
||||||
this.timeScaleEndTime = timeScaleEndTime;
|
this.timeScaleEndTime = timeScaleEndTime;
|
||||||
|
@ -279,6 +280,7 @@ public class MakeHazardDialog extends CaveSWTDialog implements
|
||||||
protected void initializeComponents(Shell shell) {
|
protected void initializeComponents(Shell shell) {
|
||||||
// Initialize all of the controls and layouts
|
// Initialize all of the controls and layouts
|
||||||
initializeComponents();
|
initializeComponents();
|
||||||
|
shell.pack();
|
||||||
|
|
||||||
this.comboDict = new HashMap<String, Integer>();
|
this.comboDict = new HashMap<String, Integer>();
|
||||||
setHazardType(this.defaultHazardType);
|
setHazardType(this.defaultHazardType);
|
||||||
|
@ -1100,6 +1102,7 @@ public class MakeHazardDialog extends CaveSWTDialog implements
|
||||||
// create the start time slider
|
// create the start time slider
|
||||||
startTimeSlider = new Scale(startGroup, SWT.HORIZONTAL);
|
startTimeSlider = new Scale(startGroup, SWT.HORIZONTAL);
|
||||||
gd = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
|
gd = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
|
||||||
|
gd.minimumWidth = 200;
|
||||||
startTimeSlider.setLayoutData(gd);
|
startTimeSlider.setLayoutData(gd);
|
||||||
startTimeSlider.addSelectionListener(new SelectionListener() {
|
startTimeSlider.addSelectionListener(new SelectionListener() {
|
||||||
|
|
||||||
|
@ -1130,7 +1133,6 @@ public class MakeHazardDialog extends CaveSWTDialog implements
|
||||||
startTimeSlider.setMaximum(this.timeScaleEndTime);
|
startTimeSlider.setMaximum(this.timeScaleEndTime);
|
||||||
startTimeSlider.setIncrement(1);
|
startTimeSlider.setIncrement(1);
|
||||||
startTimeSlider.setPageIncrement(1);
|
startTimeSlider.setPageIncrement(1);
|
||||||
startTimeSlider.setLayoutData(new GridData(200, SWT.DEFAULT));
|
|
||||||
|
|
||||||
// Force start time to an hourly boundary
|
// Force start time to an hourly boundary
|
||||||
Calendar cal = Calendar.getInstance();
|
Calendar cal = Calendar.getInstance();
|
||||||
|
@ -1158,6 +1160,7 @@ public class MakeHazardDialog extends CaveSWTDialog implements
|
||||||
// Create the end time slider
|
// Create the end time slider
|
||||||
endTimeSlider = new Scale(endGroup, SWT.HORIZONTAL);
|
endTimeSlider = new Scale(endGroup, SWT.HORIZONTAL);
|
||||||
gd = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
|
gd = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
|
||||||
|
gd.minimumWidth = 200;
|
||||||
endTimeSlider.setLayoutData(gd);
|
endTimeSlider.setLayoutData(gd);
|
||||||
|
|
||||||
endTimeSlider.setMinimum(1);
|
endTimeSlider.setMinimum(1);
|
||||||
|
@ -1165,7 +1168,6 @@ public class MakeHazardDialog extends CaveSWTDialog implements
|
||||||
endTimeSlider.setIncrement(1);
|
endTimeSlider.setIncrement(1);
|
||||||
endTimeSlider.setPageIncrement(1);
|
endTimeSlider.setPageIncrement(1);
|
||||||
endTimeSlider.setSelection(1);
|
endTimeSlider.setSelection(1);
|
||||||
endTimeSlider.setLayoutData(new GridData(200, SWT.DEFAULT));
|
|
||||||
endTimeSlider.addSelectionListener(new SelectionListener() {
|
endTimeSlider.addSelectionListener(new SelectionListener() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1215,6 +1217,21 @@ public class MakeHazardDialog extends CaveSWTDialog implements
|
||||||
gd = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
|
gd = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
|
||||||
leCombo.setLayoutData(gd);
|
leCombo.setLayoutData(gd);
|
||||||
leCombo.addSelectionListener(selAdapt);
|
leCombo.addSelectionListener(selAdapt);
|
||||||
|
|
||||||
|
GC gc = new GC(this.getDisplay());
|
||||||
|
String longest = "";
|
||||||
|
int widest = 0;
|
||||||
|
for (List<String> list : localEffectAreas.values()) {
|
||||||
|
for (String s : list) {
|
||||||
|
int width = gc.stringExtent(s).x;
|
||||||
|
if (width > widest) {
|
||||||
|
widest = width;
|
||||||
|
longest = s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
gc.dispose();
|
||||||
|
leCombo.add(longest);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map<String, List<String>> getHazardsDictionary() {
|
private Map<String, List<String>> getHazardsDictionary() {
|
||||||
|
@ -1347,7 +1364,6 @@ public class MakeHazardDialog extends CaveSWTDialog implements
|
||||||
this.hazLocalEffect = "None";
|
this.hazLocalEffect = "None";
|
||||||
this.etnSegNumberField.setText("");
|
this.etnSegNumberField.setText("");
|
||||||
}
|
}
|
||||||
leGroup.getParent().pack();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1165,7 +1165,7 @@ public class TimeSeriesDisplayCanvas extends TimeSeriesGraphCanvas implements
|
||||||
/* loop through each trace and set the min and max values */
|
/* loop through each trace and set the min and max values */
|
||||||
for (int i = 0; i < gd.getTraces().size(); i++) {
|
for (int i = 0; i < gd.getTraces().size(); i++) {
|
||||||
td = gd.getTraceData(i);
|
td = gd.getTraceData(i);
|
||||||
if (td != null) {
|
if (td != null && td.isTraceOn()) {
|
||||||
TimeSeriesPoint[] points = null;
|
TimeSeriesPoint[] points = null;
|
||||||
if (zoomed) {
|
if (zoomed) {
|
||||||
points = td.getZoomedTsData();
|
points = td.getZoomedTsData();
|
||||||
|
@ -2572,9 +2572,7 @@ public class TimeSeriesDisplayCanvas extends TimeSeriesGraphCanvas implements
|
||||||
traceData.setName(name);
|
traceData.setName(name);
|
||||||
traceData.setBasistime(basisTime);
|
traceData.setBasistime(basisTime);
|
||||||
traceData.setProductTime(productTime);
|
traceData.setProductTime(productTime);
|
||||||
if (this.latestFcstFlag) {
|
traceData.setTraceOn(!this.latestFcstFlag);
|
||||||
traceData.setTraceOn(false);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
/* reached max fcst traces, break out of loop */
|
/* reached max fcst traces, break out of loop */
|
||||||
break;
|
break;
|
||||||
|
@ -2802,4 +2800,5 @@ public class TimeSeriesDisplayCanvas extends TimeSeriesGraphCanvas implements
|
||||||
public void setZoomed(boolean zoomed) {
|
public void setZoomed(boolean zoomed) {
|
||||||
this.zoomed = zoomed;
|
this.zoomed = zoomed;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -173,9 +173,9 @@ public class TimeSeriesDlg extends CaveHydroSWTDialog {
|
||||||
|
|
||||||
private static final String COLOR = "color";
|
private static final String COLOR = "color";
|
||||||
|
|
||||||
private static final String[] TS_LIST = { "RG", "RP", "RZ", "FF", "FX",
|
// private static final String[] TS_LIST = { "RG", "RP", "RZ", "FF", "FX",
|
||||||
"FZ" };
|
// "FZ" };
|
||||||
|
|
||||||
private final String[] TS_ORDER = { "R", "F", "P", "M", "C" };
|
private final String[] TS_ORDER = { "R", "F", "P", "M", "C" };
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -726,8 +726,7 @@ public class TimeSeriesDlg extends CaveHydroSWTDialog {
|
||||||
try {
|
try {
|
||||||
populateStationList();
|
populateStationList();
|
||||||
} catch (VizException e) {
|
} catch (VizException e) {
|
||||||
// TODO Auto-generated catch block
|
statusHandler.error("Failed to populate station list", e);
|
||||||
e.printStackTrace();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (startMode.equals("GROUP") && (displayGraph == false)) {
|
if (startMode.equals("GROUP") && (displayGraph == false)) {
|
||||||
|
@ -1143,8 +1142,7 @@ public class TimeSeriesDlg extends CaveHydroSWTDialog {
|
||||||
try {
|
try {
|
||||||
populateStationList();
|
populateStationList();
|
||||||
} catch (VizException e) {
|
} catch (VizException e) {
|
||||||
// TODO Auto-generated catch block
|
statusHandler.error("Failed to populate station list", e);
|
||||||
e.printStackTrace();
|
|
||||||
}
|
}
|
||||||
shell.setCursor(arrowCursor);
|
shell.setCursor(arrowCursor);
|
||||||
}
|
}
|
||||||
|
@ -1188,8 +1186,7 @@ public class TimeSeriesDlg extends CaveHydroSWTDialog {
|
||||||
try {
|
try {
|
||||||
populateStationList();
|
populateStationList();
|
||||||
} catch (VizException e) {
|
} catch (VizException e) {
|
||||||
// TODO Auto-generated catch block
|
statusHandler.error("Failed to populate station list", e);
|
||||||
e.printStackTrace();
|
|
||||||
}
|
}
|
||||||
shell.setCursor(arrowCursor);
|
shell.setCursor(arrowCursor);
|
||||||
}
|
}
|
||||||
|
@ -1629,8 +1626,7 @@ public class TimeSeriesDlg extends CaveHydroSWTDialog {
|
||||||
}
|
}
|
||||||
in.close();
|
in.close();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
// TODO add log statement about group_definition.cfg not found
|
statusHandler.error("Failed to read group definition configuration.", e);
|
||||||
e.printStackTrace();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1642,8 +1638,7 @@ public class TimeSeriesDlg extends CaveHydroSWTDialog {
|
||||||
try {
|
try {
|
||||||
populateStationList();
|
populateStationList();
|
||||||
} catch (VizException e) {
|
} catch (VizException e) {
|
||||||
// TODO Auto-generated catch block
|
statusHandler.error("Failed to populate station list", e);
|
||||||
e.printStackTrace();
|
|
||||||
}
|
}
|
||||||
filteredLidList = new ArrayList<String>();
|
filteredLidList = new ArrayList<String>();
|
||||||
topDataList.removeAll();
|
topDataList.removeAll();
|
||||||
|
@ -1668,8 +1663,7 @@ public class TimeSeriesDlg extends CaveHydroSWTDialog {
|
||||||
try {
|
try {
|
||||||
populateStationList();
|
populateStationList();
|
||||||
} catch (VizException e) {
|
} catch (VizException e) {
|
||||||
// TODO Auto-generated catch block
|
statusHandler.error("Failed to populate station list", e);
|
||||||
e.printStackTrace();
|
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
|
@ -1900,8 +1894,7 @@ public class TimeSeriesDlg extends CaveHydroSWTDialog {
|
||||||
} else if (values[0].equalsIgnoreCase(FUTUREHOURS)) {
|
} else if (values[0].equalsIgnoreCase(FUTUREHOURS)) {
|
||||||
groupInfo.setFutureHours(Integer.parseInt(values[1]));
|
groupInfo.setFutureHours(Integer.parseInt(values[1]));
|
||||||
} else {
|
} else {
|
||||||
// TODO log a message about invalid key/value pair
|
statusHandler.warn("Invalid key/value pair: " + s);
|
||||||
System.err.println("Invalid key/value pair: " + s);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1950,8 +1943,7 @@ public class TimeSeriesDlg extends CaveHydroSWTDialog {
|
||||||
graphData.setLatestfcstonly(false);
|
graphData.setLatestfcstonly(false);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// TODO log a message about invalid key/value pair
|
statusHandler.warn("Invalid key/value pair: " + s);
|
||||||
System.err.println("Invalid key/value pair: " + s);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1986,8 +1978,7 @@ public class TimeSeriesDlg extends CaveHydroSWTDialog {
|
||||||
graphData.setEndDate(endDate);
|
graphData.setEndDate(endDate);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// TODO log error here, invalid value
|
statusHandler.warn("Error in Group Definition Config file: " + line);
|
||||||
System.err.println("Error in Group Definition Config file: " + line);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// select the first item in the list
|
// select the first item in the list
|
||||||
|
@ -2518,8 +2509,7 @@ public class TimeSeriesDlg extends CaveHydroSWTDialog {
|
||||||
try {
|
try {
|
||||||
populateStationList();
|
populateStationList();
|
||||||
} catch (VizException e) {
|
} catch (VizException e) {
|
||||||
// TODO Auto-generated catch block
|
statusHandler.error("Failed to populate station list", e);
|
||||||
e.printStackTrace();
|
|
||||||
}
|
}
|
||||||
setCurrentData();
|
setCurrentData();
|
||||||
opened();
|
opened();
|
||||||
|
|
|
@ -142,7 +142,12 @@ public class LocalizationEditorInput implements IFileEditorInput,
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public String getToolTipText() {
|
public String getToolTipText() {
|
||||||
return localizationFile.getName();
|
String tip = localizationFile.getName();
|
||||||
|
if (localizationFile.isProtected()) {
|
||||||
|
tip += " (Protected @ " + localizationFile.getProtectedLevel()
|
||||||
|
+ ")";
|
||||||
|
}
|
||||||
|
return tip;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -99,4 +99,46 @@ public class FileTreeEntryData {
|
||||||
return resource instanceof IFolder;
|
return resource instanceof IFolder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see java.lang.Object#hashCode()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
final int prime = 31;
|
||||||
|
int result = 1;
|
||||||
|
result = prime * result + ((path == null) ? 0 : path.hashCode());
|
||||||
|
result = prime * result
|
||||||
|
+ ((pathData == null) ? 0 : pathData.hashCode());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see java.lang.Object#equals(java.lang.Object)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (this == obj)
|
||||||
|
return true;
|
||||||
|
if (obj == null)
|
||||||
|
return false;
|
||||||
|
if (getClass() != obj.getClass())
|
||||||
|
return false;
|
||||||
|
FileTreeEntryData other = (FileTreeEntryData) obj;
|
||||||
|
if (path == null) {
|
||||||
|
if (other.path != null)
|
||||||
|
return false;
|
||||||
|
} else if (!path.equals(other.path))
|
||||||
|
return false;
|
||||||
|
if (pathData == null) {
|
||||||
|
if (other.pathData != null)
|
||||||
|
return false;
|
||||||
|
} else if (!pathData.equals(other.pathData))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,4 +62,40 @@ public class LocalizationFileEntryData extends FileTreeEntryData {
|
||||||
return (IFile) super.getResource();
|
return (IFile) super.getResource();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see java.lang.Object#hashCode()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
final int prime = 31;
|
||||||
|
int result = super.hashCode();
|
||||||
|
result = prime * result
|
||||||
|
+ ((file == null) ? 0 : file.getContext().hashCode());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see java.lang.Object#equals(java.lang.Object)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (this == obj)
|
||||||
|
return true;
|
||||||
|
if (!super.equals(obj))
|
||||||
|
return false;
|
||||||
|
if (getClass() != obj.getClass())
|
||||||
|
return false;
|
||||||
|
LocalizationFileEntryData other = (LocalizationFileEntryData) obj;
|
||||||
|
if (file == null) {
|
||||||
|
if (other.file != null)
|
||||||
|
return false;
|
||||||
|
} else if (!file.getContext().equals(other.file.getContext()))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -198,21 +198,6 @@ public class PathData {
|
||||||
return application;
|
return application;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param element
|
|
||||||
* the element to set
|
|
||||||
*/
|
|
||||||
public void setElement(IConfigurationElement element) {
|
|
||||||
this.element = element;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the element
|
|
||||||
*/
|
|
||||||
public IConfigurationElement getElement() {
|
|
||||||
return element;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param recursive
|
* @param recursive
|
||||||
* the recursive to set
|
* the recursive to set
|
||||||
|
|
|
@ -145,26 +145,29 @@ public class PlotModelDataRequestJob extends Job {
|
||||||
// TODO need to determine if this type of plot is a combination or
|
// TODO need to determine if this type of plot is a combination or
|
||||||
// not
|
// not
|
||||||
combineData(stationQuery);
|
combineData(stationQuery);
|
||||||
if (monitor.isCanceled()) {
|
synchronized (this) {
|
||||||
break;
|
if (monitor.isCanceled()) {
|
||||||
}
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
for (PlotInfo[] infos : stationQuery) {
|
for (PlotInfo[] infos : stationQuery) {
|
||||||
// schedule next work for other jobs
|
// schedule next work for other jobs
|
||||||
// TODO investigate further, shouldn't be possible to get a null
|
// TODO investigate further, shouldn't be possible to get a
|
||||||
// here, but somehow we do
|
// null
|
||||||
if (infos[0].pdv != null) {
|
// here, but somehow we do
|
||||||
switch (task.getRequestType()) {
|
if (infos[0].pdv != null) {
|
||||||
case PLOT_ONLY:
|
switch (task.getRequestType()) {
|
||||||
this.generatorJob.enqueue(infos);
|
case PLOT_ONLY:
|
||||||
break;
|
this.generatorJob.enqueue(infos);
|
||||||
case SAMPLE_ONLY:
|
break;
|
||||||
this.sampleJob.enqueue(infos);
|
case SAMPLE_ONLY:
|
||||||
break;
|
this.sampleJob.enqueue(infos);
|
||||||
case PLOT_AND_SAMPLE:
|
break;
|
||||||
this.generatorJob.enqueue(infos);
|
case PLOT_AND_SAMPLE:
|
||||||
this.sampleJob.enqueue(infos);
|
this.generatorJob.enqueue(infos);
|
||||||
break;
|
this.sampleJob.enqueue(infos);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -342,13 +345,8 @@ public class PlotModelDataRequestJob extends Job {
|
||||||
&& generatorJob.isDone();
|
&& generatorJob.isDone();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void shutdown() {
|
public synchronized void shutdown() {
|
||||||
this.cancel();
|
this.cancel();
|
||||||
try {
|
|
||||||
join();
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(), e);
|
|
||||||
}
|
|
||||||
this.generatorJob.shutdown();
|
this.generatorJob.shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,6 @@ import org.eclipse.core.runtime.jobs.Job;
|
||||||
|
|
||||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||||
import com.raytheon.uf.common.status.UFStatus;
|
import com.raytheon.uf.common.status.UFStatus;
|
||||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
|
||||||
import com.raytheon.uf.viz.core.IGraphicsTarget;
|
import com.raytheon.uf.viz.core.IGraphicsTarget;
|
||||||
import com.raytheon.uf.viz.core.data.IRenderedImageCallback;
|
import com.raytheon.uf.viz.core.data.IRenderedImageCallback;
|
||||||
import com.raytheon.uf.viz.core.drawables.IImage;
|
import com.raytheon.uf.viz.core.drawables.IImage;
|
||||||
|
@ -119,10 +118,15 @@ public class PlotModelGeneratorJob extends Job {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (monitor.isCanceled()) {
|
synchronized (this) {
|
||||||
break;
|
if (monitor.isCanceled()) {
|
||||||
|
if(image != null){
|
||||||
|
image.dispose();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
caller.modelGenerated(infos, image);
|
||||||
}
|
}
|
||||||
caller.modelGenerated(infos, image);
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
statusHandler.error("Error creating plot", e);
|
statusHandler.error("Error creating plot", e);
|
||||||
}
|
}
|
||||||
|
@ -153,14 +157,9 @@ public class PlotModelGeneratorJob extends Job {
|
||||||
return getState() != Job.RUNNING && getState() != Job.WAITING;
|
return getState() != Job.RUNNING && getState() != Job.WAITING;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void shutdown() {
|
protected synchronized void shutdown() {
|
||||||
cancel();
|
cancel();
|
||||||
taskQueue.clear();
|
taskQueue.clear();
|
||||||
try {
|
|
||||||
join();
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(), e);
|
|
||||||
}
|
|
||||||
clearImageCache();
|
clearImageCache();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,7 +44,10 @@ import com.raytheon.uf.viz.core.rsc.ResourceList;
|
||||||
* Date Ticket# Engineer Description
|
* Date Ticket# Engineer Description
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* May 7, 2009 jsanchez Initial creation
|
* May 7, 2009 jsanchez Initial creation
|
||||||
*
|
* ======================================
|
||||||
|
* AWIPS2 DR Work
|
||||||
|
* 20120913 1172 jkorman Added code to call postAddListeners when
|
||||||
|
* creating sub-resources.
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author jsanchez
|
* @author jsanchez
|
||||||
|
@ -78,6 +81,18 @@ public class PlotBlendedResourceData extends AbstractResourceData implements
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a resource(s) from this resource data.
|
||||||
|
*
|
||||||
|
* @param loadProperties
|
||||||
|
* The load properties
|
||||||
|
* @param descriptor
|
||||||
|
* The descriptor that the resource will be loaded onto
|
||||||
|
* @throws VizException
|
||||||
|
* if construction fails
|
||||||
|
* @return The renderable capability. Will return null if any of the sub-resources
|
||||||
|
* fail to construct.
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public PlotBlendedResource construct(LoadProperties loadProperties,
|
public PlotBlendedResource construct(LoadProperties loadProperties,
|
||||||
IDescriptor descriptor) throws VizException {
|
IDescriptor descriptor) throws VizException {
|
||||||
|
@ -85,13 +100,16 @@ public class PlotBlendedResourceData extends AbstractResourceData implements
|
||||||
|
|
||||||
for (ResourcePair rp : resourceList) {
|
for (ResourcePair rp : resourceList) {
|
||||||
if (!rp.instantiateResource(descriptor, false)) {
|
if (!rp.instantiateResource(descriptor, false)) {
|
||||||
// failure to create any sub resources is a failure to construct
|
// failure to create any sub-resource is a failure to construct
|
||||||
// the blended resource.
|
// the blended resource.
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
this.addChangeListener((IResourceDataChanged) rp.getResource());
|
|
||||||
}
|
}
|
||||||
|
// All sub-resources have been instantiated, add the listeners.
|
||||||
|
for (ResourcePair rp : resourceList) {
|
||||||
|
addChangeListener((IResourceDataChanged) rp.getResource());
|
||||||
|
resourceList.firePostAddListeners(rp);
|
||||||
|
}
|
||||||
return rsc;
|
return rsc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -402,11 +402,11 @@ public class PlotResource2 extends
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void disposeInternal() {
|
protected void disposeInternal() {
|
||||||
|
resourceData.getPlotInfoRetriever().cancel();
|
||||||
|
progressiveDisclosure.shutdown();
|
||||||
if (generator != null) {
|
if (generator != null) {
|
||||||
generator.shutdown();
|
generator.shutdown();
|
||||||
}
|
}
|
||||||
resourceData.getPlotInfoRetriever().cancel();
|
|
||||||
progressiveDisclosure.shutdown();
|
|
||||||
clearImages();
|
clearImages();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
<programArgsLin>-consoleLog</programArgsLin>
|
<programArgsLin>-consoleLog</programArgsLin>
|
||||||
<vmArgs>-Xincgc -Xmx1280M -Dosgi.instance.area.readOnly=true
|
<vmArgs>-Xincgc -Xmx1280M -Dosgi.instance.area.readOnly=true
|
||||||
-Dosgi.hook.configurators.exclude=org.eclipse.core.runtime.internal.adaptor.EclipseLogHook,org.eclipse.core.runtime.internal.adaptor.EclipseErrorHandler
|
-Dosgi.hook.configurators.exclude=org.eclipse.core.runtime.internal.adaptor.EclipseLogHook,org.eclipse.core.runtime.internal.adaptor.EclipseErrorHandler
|
||||||
-XX:+UnlockDiagnosticVMOptions -XX:+UnsyncloadClass -Dorg.eclipse.update.reconcile=false -XX:MaxPermSize=128m -Dorg.eclipse.ui/KEY_CONFIGURATION_ID=com.raytheon.viz.ui.awips.scheme -Dawips.mode=pypies -Dqpid.dest_syntax=BURL -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -XX:OnOutOfMemoryError="capture -t no -p $pid &"</vmArgs>
|
-XX:+UnlockDiagnosticVMOptions -XX:+UnsyncloadClass -Dorg.eclipse.update.reconcile=false -XX:MaxPermSize=128m -Dorg.eclipse.ui/KEY_CONFIGURATION_ID=com.raytheon.viz.ui.awips.scheme -Dawips.mode=pypies -Dqpid.dest_syntax=BURL -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -XX:OnOutOfMemoryError="capture -t no -p $pid &" -Dlog4j.configuration=log4j-viz-core.xml</vmArgs>
|
||||||
<vmArgsWin>-Dfile.encoding=UTF-8</vmArgsWin>
|
<vmArgsWin>-Dfile.encoding=UTF-8</vmArgsWin>
|
||||||
</launcherArgs>
|
</launcherArgs>
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
<programArgs>-data @user.home/caveData -user @user.home/caveData -clean -consoleLog -alertviz</programArgs>
|
<programArgs>-data @user.home/caveData -user @user.home/caveData -clean -consoleLog -alertviz</programArgs>
|
||||||
<vmArgs>-Xincgc -Xmx1024M -Dosgi.instance.area.readOnly=true
|
<vmArgs>-Xincgc -Xmx1024M -Dosgi.instance.area.readOnly=true
|
||||||
-Dosgi.hook.configurators.exclude=org.eclipse.core.runtime.internal.adaptor.EclipseLogHook,org.eclipse.core.runtime.internal.adaptor.EclipseErrorHandler
|
-Dosgi.hook.configurators.exclude=org.eclipse.core.runtime.internal.adaptor.EclipseLogHook,org.eclipse.core.runtime.internal.adaptor.EclipseErrorHandler
|
||||||
-XX:+UnlockDiagnosticVMOptions -XX:+UnsyncloadClass -Dorg.eclipse.update.reconcile=false -XX:MaxPermSize=128m -Dorg.eclipse.ui/KEY_CONFIGURATION_ID=com.raytheon.viz.ui.awips.scheme -Dawips.mode=pypies -Dqpid.dest_syntax=BURL -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false</vmArgs>
|
-XX:+UnlockDiagnosticVMOptions -XX:+UnsyncloadClass -Dorg.eclipse.update.reconcile=false -XX:MaxPermSize=128m -Dorg.eclipse.ui/KEY_CONFIGURATION_ID=com.raytheon.viz.ui.awips.scheme -Dawips.mode=pypies -Dqpid.dest_syntax=BURL -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dlog4j.configuration=log4j-viz-core.xml</vmArgs>
|
||||||
<vmArgsWin>-Dfile.encoding=UTF-8</vmArgsWin>
|
<vmArgsWin>-Dfile.encoding=UTF-8</vmArgsWin>
|
||||||
</launcherArgs>
|
</launcherArgs>
|
||||||
|
|
||||||
|
@ -36,7 +36,6 @@
|
||||||
</launcher>
|
</launcher>
|
||||||
|
|
||||||
<vm>
|
<vm>
|
||||||
<linux include="true">jdk1.6.0</linux>
|
|
||||||
<windows include="true">jdk1.6.0</windows>
|
<windows include="true">jdk1.6.0</windows>
|
||||||
</vm>
|
</vm>
|
||||||
|
|
||||||
|
|
|
@ -27,15 +27,13 @@ import java.util.Collections;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.eclipse.ui.PartInitException;
|
|
||||||
import org.eclipse.ui.PlatformUI;
|
|
||||||
|
|
||||||
import com.raytheon.uf.common.dataplugin.radar.util.RadarInfoDict;
|
import com.raytheon.uf.common.dataplugin.radar.util.RadarInfoDict;
|
||||||
import com.raytheon.uf.common.localization.PathManagerFactory;
|
import com.raytheon.uf.common.localization.PathManagerFactory;
|
||||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||||
import com.raytheon.uf.common.status.UFStatus;
|
import com.raytheon.uf.common.status.UFStatus;
|
||||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
import com.raytheon.uf.viz.core.DescriptorMap;
|
||||||
import com.raytheon.uf.viz.core.drawables.IRenderableDisplay;
|
import com.raytheon.uf.viz.core.IDisplayPaneContainer;
|
||||||
|
import com.raytheon.uf.viz.core.drawables.IDescriptor;
|
||||||
import com.raytheon.uf.viz.core.rsc.DisplayType;
|
import com.raytheon.uf.viz.core.rsc.DisplayType;
|
||||||
import com.raytheon.uf.viz.core.rsc.LoadProperties;
|
import com.raytheon.uf.viz.core.rsc.LoadProperties;
|
||||||
import com.raytheon.uf.viz.core.rsc.ResourceType;
|
import com.raytheon.uf.viz.core.rsc.ResourceType;
|
||||||
|
@ -44,9 +42,11 @@ import com.raytheon.uf.viz.productbrowser.AbstractRequestableProductBrowserDataD
|
||||||
import com.raytheon.uf.viz.productbrowser.ProductBrowserLabel;
|
import com.raytheon.uf.viz.productbrowser.ProductBrowserLabel;
|
||||||
import com.raytheon.uf.viz.productbrowser.ProductBrowserPreference;
|
import com.raytheon.uf.viz.productbrowser.ProductBrowserPreference;
|
||||||
import com.raytheon.viz.radar.rsc.RadarResourceData;
|
import com.raytheon.viz.radar.rsc.RadarResourceData;
|
||||||
|
import com.raytheon.viz.radar.ui.xy.RadarGraphDescriptor;
|
||||||
import com.raytheon.viz.radar.ui.xy.RadarGraphDisplay;
|
import com.raytheon.viz.radar.ui.xy.RadarGraphDisplay;
|
||||||
|
import com.raytheon.viz.radar.ui.xy.RadarXYDescriptor;
|
||||||
import com.raytheon.viz.radar.ui.xy.RadarXYDisplay;
|
import com.raytheon.viz.radar.ui.xy.RadarXYDisplay;
|
||||||
import com.raytheon.viz.ui.editor.EditorInput;
|
import com.raytheon.viz.ui.UiUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Product browser implementation for radar
|
* Product browser implementation for radar
|
||||||
|
@ -174,40 +174,30 @@ public class RadarProductBrowserDataDefinition extends
|
||||||
return new RadarResourceData();
|
return new RadarResourceData();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
*
|
|
||||||
* @see
|
|
||||||
* com.raytheon.uf.viz.productbrowser.AbstractProductBrowserDataDefinition
|
|
||||||
* #getEditor()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public void getEditor() {
|
protected IDisplayPaneContainer openNewEditor(String editorId) {
|
||||||
|
if (editorId.equals(DescriptorMap.getEditorId(RadarXYDescriptor.class
|
||||||
|
.getName()))) {
|
||||||
|
return UiUtil.createEditor(editorId, new RadarXYDisplay());
|
||||||
|
} else if (editorId.equals(DescriptorMap
|
||||||
|
.getEditorId(RadarGraphDescriptor.class.getName()))) {
|
||||||
|
return UiUtil.createEditor(editorId, new RadarGraphDisplay());
|
||||||
|
} else {
|
||||||
|
return super.openNewEditor(editorId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<? extends IDescriptor> getDescriptorClass() {
|
||||||
int prodCode = Integer.parseInt((resourceData).getMetadataMap()
|
int prodCode = Integer.parseInt((resourceData).getMetadataMap()
|
||||||
.get("productCode").getConstraintValue());
|
.get("productCode").getConstraintValue());
|
||||||
String format = infoDict.getInfo(prodCode).getFormat();
|
String format = infoDict.getInfo(prodCode).getFormat();
|
||||||
if ("XY".equals(format)) {
|
if ("XY".equals(format)) {
|
||||||
String editor = "com.raytheon.viz.radar.ui.xy.RadarXYEditor";
|
return RadarXYDescriptor.class;
|
||||||
EditorInput cont = new EditorInput(
|
|
||||||
(IRenderableDisplay) new RadarXYDisplay());
|
|
||||||
try {
|
|
||||||
PlatformUI.getWorkbench().getActiveWorkbenchWindow()
|
|
||||||
.getActivePage().openEditor(cont, editor, true);
|
|
||||||
} catch (PartInitException e) {
|
|
||||||
statusHandler.handle(Priority.PROBLEM,
|
|
||||||
"Unable to open editor : " + editor, e);
|
|
||||||
}
|
|
||||||
} else if ("Graph".equals(format)) {
|
} else if ("Graph".equals(format)) {
|
||||||
String editor = "com.raytheon.viz.radar.ui.xy.RadarGraphEditor";
|
return RadarGraphDescriptor.class;
|
||||||
EditorInput cont = new EditorInput(
|
} else {
|
||||||
(IRenderableDisplay) new RadarGraphDisplay());
|
return super.getDescriptorClass();
|
||||||
try {
|
|
||||||
PlatformUI.getWorkbench().getActiveWorkbenchWindow()
|
|
||||||
.getActivePage().openEditor(cont, editor, true);
|
|
||||||
} catch (PartInitException e) {
|
|
||||||
statusHandler.handle(Priority.PROBLEM,
|
|
||||||
"Unable to open editor : " + editor, e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -102,9 +102,11 @@ public class RadarGraphDisplay extends AbstractNonMapDisplay {
|
||||||
GraphProperties graphProps) throws VizException {
|
GraphProperties graphProps) throws VizException {
|
||||||
// Plot the resource data on the graph
|
// Plot the resource data on the graph
|
||||||
for (ResourcePair rp : getDescriptor().getResourceList()) {
|
for (ResourcePair rp : getDescriptor().getResourceList()) {
|
||||||
graphProps = (GraphProperties) calcPaintDataTime(graphProps,
|
if (rp.getResource() != null) {
|
||||||
rp.getResource());
|
graphProps = (GraphProperties) calcPaintDataTime(graphProps,
|
||||||
rp.getResource().paint(target, graphProps);
|
rp.getResource());
|
||||||
|
rp.getResource().paint(target, graphProps);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -80,9 +80,11 @@ public class RadarXYDisplay extends AbstractNonMapDisplay {
|
||||||
|
|
||||||
// Plot the resource data on the graph
|
// Plot the resource data on the graph
|
||||||
for (ResourcePair rp : getDescriptor().getResourceList()) {
|
for (ResourcePair rp : getDescriptor().getResourceList()) {
|
||||||
graphProps = (GraphProperties) calcPaintDataTime(graphProps,
|
if (rp.getResource() != null) {
|
||||||
rp.getResource());
|
graphProps = (GraphProperties) calcPaintDataTime(graphProps,
|
||||||
rp.getResource().paint(target, graphProps);
|
rp.getResource());
|
||||||
|
rp.getResource().paint(target, graphProps);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,8 @@ import com.raytheon.uf.viz.core.localization.LocalizationManager;
|
||||||
import com.raytheon.viz.texteditor.TextWarningConstants;
|
import com.raytheon.viz.texteditor.TextWarningConstants;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO Add Description
|
* A grouping of static methods to obtain site id and to query for site
|
||||||
|
* information in various, seldom changed, tables.
|
||||||
*
|
*
|
||||||
* <pre>
|
* <pre>
|
||||||
*
|
*
|
||||||
|
@ -37,6 +38,7 @@ import com.raytheon.viz.texteditor.TextWarningConstants;
|
||||||
* Date Ticket# Engineer Description
|
* Date Ticket# Engineer Description
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* Mar 21, 2009 bwoodle Initial creation
|
* Mar 21, 2009 bwoodle Initial creation
|
||||||
|
* Sep 09, 2012 14668 rferrel Change default WMO ID to 'blank'.
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -103,8 +105,7 @@ public class SiteAbbreviationUtil {
|
||||||
public static String getTtaaii(String afosId) {
|
public static String getTtaaii(String afosId) {
|
||||||
String query = "SELECT wmottaaii FROM afos_to_awips WHERE afosid = '"
|
String query = "SELECT wmottaaii FROM afos_to_awips WHERE afosid = '"
|
||||||
+ afosId + "';";
|
+ afosId + "';";
|
||||||
// Keep the same default we previously had.
|
String rval = "-";
|
||||||
String rval = "SAUS43";
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
List<Object[]> results = DirectDbQuery.executeQuery(query,
|
List<Object[]> results = DirectDbQuery.executeQuery(query,
|
||||||
|
|
|
@ -208,6 +208,11 @@
|
||||||
<handler
|
<handler
|
||||||
class="com.raytheon.viz.ui.actions.ImagePropertiesAction"
|
class="com.raytheon.viz.ui.actions.ImagePropertiesAction"
|
||||||
commandId="com.raytheon.viz.ui.imageProperties">
|
commandId="com.raytheon.viz.ui.imageProperties">
|
||||||
|
<activeWhen>
|
||||||
|
<with variable="activeEditor">
|
||||||
|
<instanceof value="com.raytheon.uf.viz.core.IDisplayPaneContainer"/>
|
||||||
|
</with>
|
||||||
|
</activeWhen>
|
||||||
</handler>
|
</handler>
|
||||||
<handler
|
<handler
|
||||||
class="com.raytheon.viz.ui.personalities.awips.ClosePerspectiveHandler"
|
class="com.raytheon.viz.ui.personalities.awips.ClosePerspectiveHandler"
|
||||||
|
|
|
@ -70,22 +70,47 @@
|
||||||
<handler
|
<handler
|
||||||
class="com.raytheon.viz.ui.tools.looping.CombinedFrameTool"
|
class="com.raytheon.viz.ui.tools.looping.CombinedFrameTool"
|
||||||
commandId="com.raytheon.viz.ui.tools.looping.frameTool">
|
commandId="com.raytheon.viz.ui.tools.looping.frameTool">
|
||||||
|
<activeWhen>
|
||||||
|
<with variable="activeEditor">
|
||||||
|
<instanceof value="com.raytheon.uf.viz.core.IDisplayPaneContainer"/>
|
||||||
|
</with>
|
||||||
|
</activeWhen>
|
||||||
</handler>
|
</handler>
|
||||||
<handler
|
<handler
|
||||||
class="com.raytheon.viz.ui.tools.looping.LoopTool"
|
class="com.raytheon.viz.ui.tools.looping.LoopTool"
|
||||||
commandId="com.raytheon.viz.ui.tools.looping.loop">
|
commandId="com.raytheon.viz.ui.tools.looping.loop">
|
||||||
|
<activeWhen>
|
||||||
|
<with variable="activeEditor">
|
||||||
|
<instanceof value="com.raytheon.uf.viz.core.IDisplayPaneContainer"/>
|
||||||
|
</with>
|
||||||
|
</activeWhen>
|
||||||
</handler>
|
</handler>
|
||||||
<handler
|
<handler
|
||||||
class="com.raytheon.viz.ui.tools.looping.LoopPropertiesTool"
|
class="com.raytheon.viz.ui.tools.looping.LoopPropertiesTool"
|
||||||
commandId="com.raytheon.viz.ui.tools.looping.loopProperties">
|
commandId="com.raytheon.viz.ui.tools.looping.loopProperties">
|
||||||
|
<activeWhen>
|
||||||
|
<with variable="activeEditor">
|
||||||
|
<instanceof value="com.raytheon.uf.viz.core.IDisplayPaneContainer"/>
|
||||||
|
</with>
|
||||||
|
</activeWhen>
|
||||||
</handler>
|
</handler>
|
||||||
<handler
|
<handler
|
||||||
class="com.raytheon.viz.ui.tools.looping.FasterLoopSpeedTool"
|
class="com.raytheon.viz.ui.tools.looping.FasterLoopSpeedTool"
|
||||||
commandId="com.raytheon.viz.ui.tools.looping.fasterLoop">
|
commandId="com.raytheon.viz.ui.tools.looping.fasterLoop">
|
||||||
|
<activeWhen>
|
||||||
|
<with variable="activeEditor">
|
||||||
|
<instanceof value="com.raytheon.uf.viz.core.IDisplayPaneContainer"/>
|
||||||
|
</with>
|
||||||
|
</activeWhen>
|
||||||
</handler>
|
</handler>
|
||||||
<handler
|
<handler
|
||||||
class="com.raytheon.viz.ui.tools.looping.SlowerLoopSpeedTool"
|
class="com.raytheon.viz.ui.tools.looping.SlowerLoopSpeedTool"
|
||||||
commandId="com.raytheon.viz.ui.tools.looping.slowerLoop">
|
commandId="com.raytheon.viz.ui.tools.looping.slowerLoop">
|
||||||
|
<activeWhen>
|
||||||
|
<with variable="activeEditor">
|
||||||
|
<instanceof value="com.raytheon.uf.viz.core.IDisplayPaneContainer"/>
|
||||||
|
</with>
|
||||||
|
</activeWhen>
|
||||||
</handler>
|
</handler>
|
||||||
</extension>
|
</extension>
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,9 @@ public class FasterLoopSpeedTool extends AbstractTool {
|
||||||
@Override
|
@Override
|
||||||
public Object execute(ExecutionEvent arg0) throws ExecutionException {
|
public Object execute(ExecutionEvent arg0) throws ExecutionException {
|
||||||
super.execute(arg0);
|
super.execute(arg0);
|
||||||
PageUpDownKey.handlePageUp(editor);
|
if (editor != null) {
|
||||||
|
PageUpDownKey.handlePageUp(editor);
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,9 +58,9 @@ public class LoopPropertiesTool extends AbstractTool {
|
||||||
|
|
||||||
Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow()
|
Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow()
|
||||||
.getShell();
|
.getShell();
|
||||||
|
if (editor != null) {
|
||||||
LoopPropertiesDialog.openDialog(shell, this.editor);
|
LoopPropertiesDialog.openDialog(shell, this.editor);
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,9 @@ public class SlowerLoopSpeedTool extends AbstractTool {
|
||||||
@Override
|
@Override
|
||||||
public Object execute(ExecutionEvent arg0) throws ExecutionException {
|
public Object execute(ExecutionEvent arg0) throws ExecutionException {
|
||||||
super.execute(arg0);
|
super.execute(arg0);
|
||||||
PageUpDownKey.handlePageDown(editor);
|
if (editor != null) {
|
||||||
|
PageUpDownKey.handlePageDown(editor);
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -242,11 +242,20 @@ public class LoadSerializedXml extends AbstractHandler {
|
||||||
final boolean multiEditor = container instanceof IMultiPaneEditor;
|
final boolean multiEditor = container instanceof IMultiPaneEditor;
|
||||||
|
|
||||||
if (multiEditor) {
|
if (multiEditor) {
|
||||||
while (container.getDisplayPanes().length > b.getDisplays().length) {
|
if (container.getDisplayPanes().length > b.getDisplays().length) {
|
||||||
((IMultiPaneEditor) container)
|
VizApp.runSync(new Runnable() {
|
||||||
.removePane(container.getDisplayPanes()[container
|
@Override
|
||||||
.getDisplayPanes().length - 1]);
|
public void run() {
|
||||||
|
while (container.getDisplayPanes().length > b
|
||||||
|
.getDisplays().length) {
|
||||||
|
((IMultiPaneEditor) container).removePane(container
|
||||||
|
.getDisplayPanes()[container
|
||||||
|
.getDisplayPanes().length - 1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
List<AbstractRenderableDisplay> orderedDisplays = Arrays.asList(b
|
List<AbstractRenderableDisplay> orderedDisplays = Arrays.asList(b
|
||||||
.getDisplays());
|
.getDisplays());
|
||||||
|
|
|
@ -20,6 +20,8 @@
|
||||||
|
|
||||||
package com.raytheon.viz.ui.dialogs;
|
package com.raytheon.viz.ui.dialogs;
|
||||||
|
|
||||||
|
import java.util.concurrent.RejectedExecutionException;
|
||||||
|
|
||||||
import org.eclipse.jface.dialogs.Dialog;
|
import org.eclipse.jface.dialogs.Dialog;
|
||||||
import org.eclipse.swt.SWT;
|
import org.eclipse.swt.SWT;
|
||||||
import org.eclipse.swt.events.DisposeEvent;
|
import org.eclipse.swt.events.DisposeEvent;
|
||||||
|
@ -47,6 +49,9 @@ import com.raytheon.viz.ui.perspectives.VizPerspectiveListener;
|
||||||
* ---------- ---------- ----------- --------------------------
|
* ---------- ---------- ----------- --------------------------
|
||||||
* 12/20/07 561 Dan Fitch Initial Creation.
|
* 12/20/07 561 Dan Fitch Initial Creation.
|
||||||
* 04/22/08 1088 chammack Added dialog event propagation fix
|
* 04/22/08 1088 chammack Added dialog event propagation fix
|
||||||
|
* 09/13/12 1165 lvenable Update for the initial process
|
||||||
|
* of removing the dialog blocking capability.
|
||||||
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author Dan Fitch
|
* @author Dan Fitch
|
||||||
|
@ -55,10 +60,18 @@ import com.raytheon.viz.ui.perspectives.VizPerspectiveListener;
|
||||||
public class CaveJFACEDialog extends Dialog implements
|
public class CaveJFACEDialog extends Dialog implements
|
||||||
IPerspectiveSpecificDialog {
|
IPerspectiveSpecificDialog {
|
||||||
|
|
||||||
|
/** Dialog last location on the screen. */
|
||||||
protected Point lastLocation;
|
protected Point lastLocation;
|
||||||
|
|
||||||
|
/** Flag indicating of the dialog was visible. */
|
||||||
private boolean wasVisible = true;
|
private boolean wasVisible = true;
|
||||||
|
|
||||||
|
/** Callback called when the dialog is disposed. */
|
||||||
|
private ICloseCallback closeCallback = null;
|
||||||
|
|
||||||
|
/** Flag indicating if the dialog was blocked when opened. */
|
||||||
|
private boolean blockedOnOpen = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param parentShell
|
* @param parentShell
|
||||||
|
@ -111,6 +124,8 @@ public class CaveJFACEDialog extends Dialog implements
|
||||||
if (mgr != null) {
|
if (mgr != null) {
|
||||||
mgr.removePespectiveDialog(CaveJFACEDialog.this);
|
mgr.removePespectiveDialog(CaveJFACEDialog.this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
callCloseCallback();
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
@ -165,4 +180,71 @@ public class CaveJFACEDialog extends Dialog implements
|
||||||
shell.setLocation(lastLocation);
|
shell.setLocation(lastLocation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Call the callback method as this dialog has been disposed.
|
||||||
|
*/
|
||||||
|
private void callCloseCallback() {
|
||||||
|
if (closeCallback != null) {
|
||||||
|
closeCallback.dialogClosed(new Integer(getReturnCode()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether the dialog has been opened yet or not
|
||||||
|
*
|
||||||
|
* @return True if the dialog was opened, false otherwise.
|
||||||
|
*/
|
||||||
|
public final boolean isOpen() {
|
||||||
|
return (getShell() != null && !getShell().isDisposed());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a callback to the dialog. This callback will be called when the
|
||||||
|
* dialog is disposed.
|
||||||
|
*
|
||||||
|
* @param callback
|
||||||
|
* Callback to be called when the dialog is disposed.
|
||||||
|
*/
|
||||||
|
public void setCloseCallback(ICloseCallback callback) {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Since JFACE allows you to call setBlockOnOpen() after the
|
||||||
|
* constructor, if the open() method is called before setBlockOnOpen
|
||||||
|
* then the block is ignored. Here we are checking if the block was set
|
||||||
|
* and if the dialog is already open because that makes the callback
|
||||||
|
* pointless.
|
||||||
|
*/
|
||||||
|
if (blockedOnOpen && isOpen()) {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.append("The method setBlockOnOpen() was called and set to true. The callback method ");
|
||||||
|
sb.append("will not run correctly as the dialog has been opened and blocked before this ");
|
||||||
|
sb.append("method was called.");
|
||||||
|
throw new RejectedExecutionException(sb.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
this.closeCallback = callback;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method overrides the existing setBlockOnOpen() method. This will
|
||||||
|
* eventually be a catch method that will prevent blocking the dialog on
|
||||||
|
* open. At this time it serves as a placeholder for upcoming work.
|
||||||
|
*
|
||||||
|
* @param blockOnOpen
|
||||||
|
* Flag indicating if the dialog should block when opened.
|
||||||
|
*/
|
||||||
|
public void setBlockOnOpen(boolean blockOnOpen) {
|
||||||
|
/*
|
||||||
|
* If the dialog is already opened then just return because setting the
|
||||||
|
* block won't work. In JFACE the setBlockOnOpen needs to be set before
|
||||||
|
* the open() call, otherwise it is ignored.
|
||||||
|
*/
|
||||||
|
if (isOpen()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
super.setBlockOnOpen(blockOnOpen);
|
||||||
|
blockedOnOpen = blockOnOpen;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@ package com.raytheon.viz.ui.dialogs;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.concurrent.RejectedExecutionException;
|
||||||
|
|
||||||
import org.eclipse.swt.SWT;
|
import org.eclipse.swt.SWT;
|
||||||
import org.eclipse.swt.events.DisposeEvent;
|
import org.eclipse.swt.events.DisposeEvent;
|
||||||
|
@ -48,7 +49,9 @@ import org.eclipse.swt.widgets.Shell;
|
||||||
*
|
*
|
||||||
* Date Ticket# Engineer Description
|
* Date Ticket# Engineer Description
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* Nov 2, 2010 mschenke Initial creation
|
* Nov 2, 2010 mschenke Initial creation
|
||||||
|
* Sep 12, 2012 #1165 lvenable Update for the initial process
|
||||||
|
* of removing the dialog blocking capability.
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -113,20 +116,29 @@ public abstract class CaveSWTDialogBase extends Dialog {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Style used to determine how the dialog will function. */
|
||||||
private int caveStyle = CAVE.NONE;
|
private int caveStyle = CAVE.NONE;
|
||||||
|
|
||||||
|
/** Display reference. */
|
||||||
private Display display;
|
private Display display;
|
||||||
|
|
||||||
|
/** Dialog last location on the screen. */
|
||||||
protected Point lastLocation;
|
protected Point lastLocation;
|
||||||
|
|
||||||
|
/** Flag indicating of the dialog was visible. */
|
||||||
protected boolean wasVisible = true;
|
protected boolean wasVisible = true;
|
||||||
|
|
||||||
|
/** Return value. */
|
||||||
private Object returnValue;
|
private Object returnValue;
|
||||||
|
|
||||||
|
/** Shell reference. */
|
||||||
protected Shell shell;
|
protected Shell shell;
|
||||||
|
|
||||||
private List<ListenerPair> listenersToAdd;
|
private List<ListenerPair> listenersToAdd;
|
||||||
|
|
||||||
|
/** Callback called when the dialog is disposed. */
|
||||||
|
private ICloseCallback closeCallback = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct default cave dialog
|
* Construct default cave dialog
|
||||||
*
|
*
|
||||||
|
@ -220,6 +232,7 @@ public abstract class CaveSWTDialogBase extends Dialog {
|
||||||
@Override
|
@Override
|
||||||
public void widgetDisposed(DisposeEvent e) {
|
public void widgetDisposed(DisposeEvent e) {
|
||||||
disposed();
|
disposed();
|
||||||
|
callCloseCallback();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -282,6 +295,16 @@ public abstract class CaveSWTDialogBase extends Dialog {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Call the callback method as this dialog has been disposed. This action is
|
||||||
|
* in a separate method since the disposed method can be overridden.
|
||||||
|
*/
|
||||||
|
private void callCloseCallback() {
|
||||||
|
if (closeCallback != null) {
|
||||||
|
closeCallback.dialogClosed(returnValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct the layout for the shell. Defaults to a GridLayout with one
|
* Construct the layout for the shell. Defaults to a GridLayout with one
|
||||||
* column and margins set to 3
|
* column and margins set to 3
|
||||||
|
@ -405,10 +428,25 @@ public abstract class CaveSWTDialogBase extends Dialog {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the caveStyle contains a specified attribute.
|
||||||
|
*
|
||||||
|
* @param attribute
|
||||||
|
* Attribute to check for.
|
||||||
|
* @return True if caveStyle contains the attribute. False if it doesn't.
|
||||||
|
*/
|
||||||
protected boolean hasAttribute(int attribute) {
|
protected boolean hasAttribute(int attribute) {
|
||||||
return (caveStyle & attribute) == attribute;
|
return (caveStyle & attribute) == attribute;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the caveStyle does not contain a specified attribute.
|
||||||
|
*
|
||||||
|
* @param attribute
|
||||||
|
* Attribute to check for.
|
||||||
|
* @return True if caveStyle does not contain the attribute. False if it
|
||||||
|
* does.
|
||||||
|
*/
|
||||||
protected boolean doesNotHaveAttribute(int attribute) {
|
protected boolean doesNotHaveAttribute(int attribute) {
|
||||||
return (caveStyle & attribute) != attribute;
|
return (caveStyle & attribute) != attribute;
|
||||||
}
|
}
|
||||||
|
@ -443,4 +481,29 @@ public abstract class CaveSWTDialogBase extends Dialog {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a callback to the dialog. This callback will be called when the
|
||||||
|
* dialog is disposed. Also, the caveStyle is updated to include
|
||||||
|
* DO_NOT_BLOCK.
|
||||||
|
*
|
||||||
|
* @param callback
|
||||||
|
* Callback to be called when the dialog is disposed.
|
||||||
|
* @throws Throws
|
||||||
|
* a RejectedExecutionException with a message indicating that
|
||||||
|
* this method needs to be called before the open method.
|
||||||
|
*/
|
||||||
|
public void setCloseCallback(ICloseCallback callback) {
|
||||||
|
|
||||||
|
if (isOpen()) {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.append("The method addCloseCallback() needs to be called before the open(). ");
|
||||||
|
sb.append("This is due to addCloseCallback setting the caveStyle to DO_NOT_BLOCK");
|
||||||
|
throw new RejectedExecutionException(sb.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the DO_NOT_BLOCK on the cave style
|
||||||
|
this.caveStyle = caveStyle | CAVE.DO_NOT_BLOCK;
|
||||||
|
this.closeCallback = callback;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
/**
|
||||||
|
* This software was developed and / or modified by Raytheon Company,
|
||||||
|
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||||
|
*
|
||||||
|
* U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||||
|
* This software product contains export-restricted data whose
|
||||||
|
* export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||||
|
* to non-U.S. persons whether in the United States or abroad requires
|
||||||
|
* an export license or other authorization.
|
||||||
|
*
|
||||||
|
* Contractor Name: Raytheon Company
|
||||||
|
* Contractor Address: 6825 Pine Street, Suite 340
|
||||||
|
* Mail Stop B8
|
||||||
|
* Omaha, NE 68106
|
||||||
|
* 402.291.0100
|
||||||
|
*
|
||||||
|
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||||
|
* further licensing information.
|
||||||
|
**/
|
||||||
|
package com.raytheon.viz.ui.dialogs;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Callback interface used when a dialog using CaveSWTDialog is disposed.
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
* SOFTWARE HISTORY
|
||||||
|
*
|
||||||
|
* Date Ticket# Engineer Description
|
||||||
|
* ------------ ---------- ----------- --------------------------
|
||||||
|
* Sep 11, 2012 #1165 lvenable Initial creation
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @author lvenable
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
public interface ICloseCallback {
|
||||||
|
/**
|
||||||
|
* Method called when a dialog is closed.
|
||||||
|
*
|
||||||
|
* @param returnValue
|
||||||
|
* Return value set in a dialog.
|
||||||
|
*/
|
||||||
|
public void dialogClosed(Object returnValue);
|
||||||
|
}
|
|
@ -77,6 +77,8 @@ public abstract class AbstractWorkbenchPartContextActivator implements
|
||||||
private void activate(IWorkbenchPartReference partRef) {
|
private void activate(IWorkbenchPartReference partRef) {
|
||||||
if (isPerspectivePart(partRef)) {
|
if (isPerspectivePart(partRef)) {
|
||||||
contextManager.activateContexts(this);
|
contextManager.activateContexts(this);
|
||||||
|
} else {
|
||||||
|
contextManager.deactivateContexts(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,2 @@
|
||||||
source.. = .
|
|
||||||
output.. = .
|
|
||||||
bin.includes = META-INF/,\
|
bin.includes = META-INF/,\
|
||||||
ognl/,\
|
|
||||||
ognl-2.7.3.jar
|
ognl-2.7.3.jar
|
||||||
|
|
|
@ -44,15 +44,6 @@
|
||||||
</layout>
|
</layout>
|
||||||
</appender-->
|
</appender-->
|
||||||
|
|
||||||
<appender name="AlertVizInternalLogAppender" class="org.apache.log4j.rolling.RollingFileAppender">
|
|
||||||
<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
|
|
||||||
<param name="FileNamePattern" value="${user.home}/caveData/logs/alertviz-%d{yyyyMMdd}.log"/>
|
|
||||||
</rollingPolicy>
|
|
||||||
<layout class="org.apache.log4j.PatternLayout">
|
|
||||||
<param name="ConversionPattern" value="%-5p %d [%t] %c{1}: %m%n"/>
|
|
||||||
</layout>
|
|
||||||
</appender>
|
|
||||||
|
|
||||||
<logger name="gov.noaa.nws.ncep">
|
<logger name="gov.noaa.nws.ncep">
|
||||||
<level value="INFO"/>
|
<level value="INFO"/>
|
||||||
<appender-ref ref="NcepILogAppender"/>
|
<appender-ref ref="NcepILogAppender"/>
|
||||||
|
@ -65,11 +56,6 @@
|
||||||
<appender-ref ref="NcepDailyRollingFileAppender"/>
|
<appender-ref ref="NcepDailyRollingFileAppender"/>
|
||||||
</logger>
|
</logger>
|
||||||
|
|
||||||
<logger name="AlertVizLogger" additivity="false">
|
|
||||||
<level value="ALL"/>
|
|
||||||
<appender-ref ref="AlertVizInternalLogAppender"/>
|
|
||||||
</logger>
|
|
||||||
|
|
||||||
<logger name="com.raytheon">
|
<logger name="com.raytheon">
|
||||||
<level value="INFO"/>
|
<level value="INFO"/>
|
||||||
</logger>
|
</logger>
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
bin.includes = META-INF/,\
|
bin.includes = META-INF/,\
|
||||||
.,\
|
|
||||||
libjep.so
|
libjep.so
|
||||||
src.includes = libjep.so
|
src.includes = libjep.so
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
bin.includes = META-INF/,\
|
bin.includes = META-INF/,\
|
||||||
.,\
|
|
||||||
libjep.so
|
libjep.so
|
||||||
src.includes = libjep.so
|
src.includes = libjep.so
|
||||||
|
|
|
@ -1,3 +1,2 @@
|
||||||
bin.includes = META-INF/,\
|
bin.includes = META-INF/,\
|
||||||
.,\
|
|
||||||
jep.dll
|
jep.dll
|
||||||
|
|
73
deltaScripts/12.11.1/edex/removeObeGribParamInfoFiles.py
Normal file
73
deltaScripts/12.11.1/edex/removeObeGribParamInfoFiles.py
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
##
|
||||||
|
# This software was developed and / or modified by Raytheon Company,
|
||||||
|
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||||
|
#
|
||||||
|
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||||
|
# This software product contains export-restricted data whose
|
||||||
|
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||||
|
# to non-U.S. persons whether in the United States or abroad requires
|
||||||
|
# an export license or other authorization.
|
||||||
|
#
|
||||||
|
# Contractor Name: Raytheon Company
|
||||||
|
# Contractor Address: 6825 Pine Street, Suite 340
|
||||||
|
# Mail Stop B8
|
||||||
|
# Omaha, NE 68106
|
||||||
|
# 402.291.0100
|
||||||
|
#
|
||||||
|
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||||
|
# further licensing information.
|
||||||
|
##
|
||||||
|
|
||||||
|
import glob
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
import os.path
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
logger = None
|
||||||
|
|
||||||
|
def main():
|
||||||
|
__initLogger()
|
||||||
|
|
||||||
|
logger.info("Staring upgrade script for DR #1117...")
|
||||||
|
logger.info("All information will also be written to removeObeGribParamInfoFiles.log")
|
||||||
|
|
||||||
|
if not os.path.isdir('/awips2/edex/data/utility/edex_static/site/'):
|
||||||
|
logger.error("This script must be run on the EDEX server. Exiting.")
|
||||||
|
sys.exit(-1)
|
||||||
|
|
||||||
|
obsoleteFiles = glob.glob('/awips2/edex/data/utility/edex_static/site/*/grib/parameterInfo/*.xml')
|
||||||
|
|
||||||
|
logger.info("Deleting obsolete grib parameter info files.")
|
||||||
|
for file in obsoleteFiles:
|
||||||
|
try:
|
||||||
|
os.remove(file)
|
||||||
|
except (OSError, IOError):
|
||||||
|
logger.exception("Could not delete file [" + file + ". Please manually delete this file after the script has exited.")
|
||||||
|
|
||||||
|
logger.info("Upgrade script complete.")
|
||||||
|
logger.info("The following files will need to be regenerated before restarting EDEX: " + str(obsoleteFiles))
|
||||||
|
|
||||||
|
|
||||||
|
def __initLogger():
|
||||||
|
global logger
|
||||||
|
logger = logging.getLogger("removeObeGribParamInfoFiles")
|
||||||
|
logger.setLevel(logging.DEBUG)
|
||||||
|
format = "%(asctime)s %(name)s %(levelname)s: %(message)s", "%H:%M:%S"
|
||||||
|
|
||||||
|
ch = logging.StreamHandler()
|
||||||
|
ch.setLevel(logging.INFO)
|
||||||
|
formatter = logging.Formatter("%(asctime)s %(name)s %(levelname)s: %(message)s", "%H:%M:%S")
|
||||||
|
ch.setFormatter(formatter)
|
||||||
|
logger.addHandler(ch)
|
||||||
|
|
||||||
|
ch = logging.FileHandler('removeObeGribParamInfoFiles.log')
|
||||||
|
ch.setLevel(logging.INFO)
|
||||||
|
formatter = logging.Formatter("%(asctime)s %(name)s %(levelname)s: %(message)s", "%H:%M:%S")
|
||||||
|
ch.setFormatter(formatter)
|
||||||
|
logger.addHandler(ch)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
|
@ -98,17 +98,7 @@
|
||||||
<fileset dir="${esb.directory}">
|
<fileset dir="${esb.directory}">
|
||||||
<include name="**/bin/linux-x86-64/**" />
|
<include name="**/bin/linux-x86-64/**" />
|
||||||
</fileset>
|
</fileset>
|
||||||
</copy>
|
</copy>
|
||||||
|
|
||||||
<if>
|
|
||||||
<available file="${edex.root.directory}/lib/native/linux32/libjep.so"
|
|
||||||
type="file" />
|
|
||||||
<then>
|
|
||||||
<delete>
|
|
||||||
<fileset file="${edex.root.directory}/lib/native/linux32/libjep.so" />
|
|
||||||
</delete>
|
|
||||||
</then>
|
|
||||||
</if>
|
|
||||||
|
|
||||||
<!-- update permissions on the wrapper. -->
|
<!-- update permissions on the wrapper. -->
|
||||||
<chmod file="${edex.root.directory}/bin/linux-x86-64/wrapper"
|
<chmod file="${edex.root.directory}/bin/linux-x86-64/wrapper"
|
||||||
|
|
|
@ -30,7 +30,14 @@
|
||||||
</if>
|
</if>
|
||||||
</sequential>
|
</sequential>
|
||||||
</for>
|
</for>
|
||||||
|
|
||||||
|
<if>
|
||||||
|
<equals arg1="${project.dir}" arg2="" />
|
||||||
|
<then>
|
||||||
|
<fail message="Failed to find web project: @{web.project.dir}" />
|
||||||
|
</then>
|
||||||
|
</if>
|
||||||
|
|
||||||
<var name="war.file" value="@{war.name}.war" />
|
<var name="war.file" value="@{war.name}.war" />
|
||||||
|
|
||||||
<!-- delete old war file -->
|
<!-- delete old war file -->
|
||||||
|
|
|
@ -81,6 +81,13 @@
|
||||||
</if>
|
</if>
|
||||||
</sequential>
|
</sequential>
|
||||||
</for>
|
</for>
|
||||||
|
|
||||||
|
<if>
|
||||||
|
<equals arg1="${plugin.path}" arg2="" />
|
||||||
|
<then>
|
||||||
|
<fail message="Failed to find plugin: @{plugin.name}" />
|
||||||
|
</then>
|
||||||
|
</if>
|
||||||
|
|
||||||
<var name="plugin.base" value="${plugin.path}/@{plugin.name}" />
|
<var name="plugin.base" value="${plugin.path}/@{plugin.name}" />
|
||||||
<var name="plugin.bin" value="${plugin.base}/bin" />
|
<var name="plugin.bin" value="${plugin.base}/bin" />
|
||||||
|
@ -91,12 +98,11 @@
|
||||||
<if>
|
<if>
|
||||||
<equals arg1="@{plugin.type}" arg2="cots" />
|
<equals arg1="@{plugin.type}" arg2="cots" />
|
||||||
<then>
|
<then>
|
||||||
<!-- copy the cots jars to the destination -->
|
<!-- copy the cots jars to the destination -->
|
||||||
<copy todir="${destination.directory}"
|
<copyFOSS
|
||||||
overwrite="true" verbose="true">
|
plugin.directory323="${plugin.base}"
|
||||||
<fileset dir="${plugin.path}"
|
jar.file323="${jar.destfile}"
|
||||||
includes="@{original.pattern}" />
|
destination.directory323="${destination.directory}/@{plugin.name}" />
|
||||||
</copy>
|
|
||||||
|
|
||||||
<!-- jar any compiled cots source -->
|
<!-- jar any compiled cots source -->
|
||||||
<if>
|
<if>
|
||||||
|
@ -140,7 +146,7 @@
|
||||||
maintain uniqueness of variable names
|
maintain uniqueness of variable names
|
||||||
-->
|
-->
|
||||||
<attribute name="plugin.directory323" />
|
<attribute name="plugin.directory323" />
|
||||||
<attribute name="jar.file323" />
|
<attribute name="jar.file323" />
|
||||||
|
|
||||||
<sequential>
|
<sequential>
|
||||||
<!--
|
<!--
|
||||||
|
@ -209,4 +215,83 @@
|
||||||
</for>
|
</for>
|
||||||
</sequential>
|
</sequential>
|
||||||
</macrodef>
|
</macrodef>
|
||||||
|
|
||||||
|
<macrodef name="copyFOSS">
|
||||||
|
<!--
|
||||||
|
random character suffixes added to
|
||||||
|
maintain uniqueness of variable names
|
||||||
|
-->
|
||||||
|
<attribute name="plugin.directory323" />
|
||||||
|
<attribute name="jar.file323" />
|
||||||
|
<attribute name="destination.directory323" />
|
||||||
|
|
||||||
|
<sequential>
|
||||||
|
<mkdir dir="@{destination.directory323}" />
|
||||||
|
|
||||||
|
<!-- scan build.properties -->
|
||||||
|
<var file="@{plugin.directory323}/build.properties" />
|
||||||
|
|
||||||
|
<!--
|
||||||
|
* iterate through bin.includes
|
||||||
|
* '.' is seen as the ${output..} directory, itself
|
||||||
|
* artifacts are only deployed if they are present
|
||||||
|
-->
|
||||||
|
<for list="${bin.includes}" param="include"
|
||||||
|
delimiter="," trim="true">
|
||||||
|
<sequential>
|
||||||
|
<if>
|
||||||
|
<available file="@{plugin.directory323}/@{include}"
|
||||||
|
type="dir" />
|
||||||
|
<then>
|
||||||
|
<!-- deploy a directory -->
|
||||||
|
|
||||||
|
<!-- is this the output directory? -->
|
||||||
|
<if>
|
||||||
|
<equals arg1="@{include}" arg2="." />
|
||||||
|
<then>
|
||||||
|
<if>
|
||||||
|
<available file="@{plugin.directory323}/${output..}"
|
||||||
|
type="dir" />
|
||||||
|
<then>
|
||||||
|
<jar destfile="@{jar.file323}" update="true">
|
||||||
|
<fileset
|
||||||
|
dir="@{plugin.directory323}/${output..}"
|
||||||
|
includes="**" />
|
||||||
|
</jar>
|
||||||
|
</then>
|
||||||
|
</if>
|
||||||
|
</then>
|
||||||
|
<else>
|
||||||
|
<copy todir="@{destination.directory323}"
|
||||||
|
overwrite="true" verbose="true">
|
||||||
|
<fileset dir="@{plugin.directory323}"
|
||||||
|
includes="@{include}/**" />
|
||||||
|
</copy>
|
||||||
|
</else>
|
||||||
|
</if>
|
||||||
|
</then>
|
||||||
|
<else>
|
||||||
|
<!-- are we deploying a file? -->
|
||||||
|
<if>
|
||||||
|
<available file="@{plugin.directory323}/@{include}"
|
||||||
|
type="file" />
|
||||||
|
<then>
|
||||||
|
<copy todir="@{destination.directory323}"
|
||||||
|
overwrite="true" verbose="true">
|
||||||
|
<fileset dir="@{plugin.directory323}"
|
||||||
|
includes="@{include}" />
|
||||||
|
</copy>
|
||||||
|
</then>
|
||||||
|
<else>
|
||||||
|
<!-- fail: unknown deployment artifact -->
|
||||||
|
<fail
|
||||||
|
message="Unable to deploy '@{include}' specified in @{plugin.directory323}/build.properties; unable to find the file / directory." />
|
||||||
|
</else>
|
||||||
|
</if>
|
||||||
|
</else>
|
||||||
|
</if>
|
||||||
|
</sequential>
|
||||||
|
</for>
|
||||||
|
</sequential>
|
||||||
|
</macrodef>
|
||||||
</project>
|
</project>
|
|
@ -76,6 +76,12 @@
|
||||||
</for>
|
</for>
|
||||||
<!-- run includegen -->
|
<!-- run includegen -->
|
||||||
<echo message="Generating deployment list for feature: ${edex.feature}" />
|
<echo message="Generating deployment list for feature: ${edex.feature}" />
|
||||||
|
<!--
|
||||||
|
TODO: need to update the includegen ant task to recognize
|
||||||
|
plugin architecture restrictions. Plugins that should only
|
||||||
|
be deployed for a 64-bit system should not be deployed for
|
||||||
|
a 32-bit system, etc.
|
||||||
|
-->
|
||||||
<includegen providerfilter="${includegen.filter}"
|
<includegen providerfilter="${includegen.filter}"
|
||||||
basedirectories="${basedirectories}"
|
basedirectories="${basedirectories}"
|
||||||
featurefile="${feature}"
|
featurefile="${feature}"
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<project name="allElements Delegator">
|
<project name="allElements Delegator">
|
||||||
<property name="defaultAssemblyEnabled" value="true" />
|
<property name="defaultAssemblyEnabled" value="true" />
|
||||||
|
|
||||||
<!-- ===================================================================== -->
|
<!-- ===================================================================== -->
|
||||||
|
@ -67,6 +67,13 @@
|
||||||
</sequential>
|
</sequential>
|
||||||
</for>
|
</for>
|
||||||
|
|
||||||
|
<if>
|
||||||
|
<equals arg1="${feature.path}" arg2="" />
|
||||||
|
<then>
|
||||||
|
<fail message="Failed to find feature: ${topLevelElementId}" />
|
||||||
|
</then>
|
||||||
|
</if>
|
||||||
|
|
||||||
<mkdir dir="${builder}/tmp/features" />
|
<mkdir dir="${builder}/tmp/features" />
|
||||||
<!-- copy the feature -->
|
<!-- copy the feature -->
|
||||||
<copy todir="${builder}/tmp/features">
|
<copy todir="${builder}/tmp/features">
|
||||||
|
@ -205,15 +212,81 @@
|
||||||
<if>
|
<if>
|
||||||
<equals arg1="@{plugin.type}" arg2="cots" />
|
<equals arg1="@{plugin.type}" arg2="cots" />
|
||||||
<then>
|
<then>
|
||||||
<copy todir="${builder}/dependencies-stash">
|
<copyFOSS
|
||||||
<fileset dir="${plugin.directory}"
|
plugin.directory323="${plugin.directory}/${plugin.name}"
|
||||||
includes="@{plugin.pattern}" />
|
destination.directory323="${builder}/dependencies-stash/@{plugin.name}" />
|
||||||
</copy>
|
|
||||||
</then>
|
</then>
|
||||||
</if>
|
</if>
|
||||||
|
|
||||||
</sequential>
|
</sequential>
|
||||||
</macrodef>
|
</macrodef>
|
||||||
|
|
||||||
|
<macrodef name="copyFOSS">
|
||||||
|
<!--
|
||||||
|
random character suffixes added to
|
||||||
|
maintain uniqueness of variable names
|
||||||
|
-->
|
||||||
|
<attribute name="plugin.directory323" />
|
||||||
|
<attribute name="destination.directory323" />
|
||||||
|
|
||||||
|
<sequential>
|
||||||
|
<mkdir dir="@{destination.directory323}" />
|
||||||
|
|
||||||
|
<!-- scan build.properties -->
|
||||||
|
<var file="@{plugin.directory323}/build.properties" />
|
||||||
|
|
||||||
|
<!--
|
||||||
|
* iterate through bin.includes
|
||||||
|
* '.' is seen as the ${output..} directory, itself
|
||||||
|
* artifacts are only deployed if they are present
|
||||||
|
-->
|
||||||
|
<for list="${bin.includes}" param="include"
|
||||||
|
delimiter="," trim="true">
|
||||||
|
<sequential>
|
||||||
|
<if>
|
||||||
|
<available file="@{plugin.directory323}/@{include}"
|
||||||
|
type="dir" />
|
||||||
|
<then>
|
||||||
|
<!-- deploy a directory -->
|
||||||
|
|
||||||
|
<!-- is this the output directory? -->
|
||||||
|
<if>
|
||||||
|
<not>
|
||||||
|
<equals arg1="@{include}" arg2="." />
|
||||||
|
</not>
|
||||||
|
<then>
|
||||||
|
<copy todir="@{destination.directory323}"
|
||||||
|
overwrite="true" verbose="true">
|
||||||
|
<fileset dir="@{plugin.directory323}"
|
||||||
|
includes="@{include}/**" />
|
||||||
|
</copy>
|
||||||
|
</then>
|
||||||
|
</if>
|
||||||
|
</then>
|
||||||
|
<else>
|
||||||
|
<!-- are we deploying a file? -->
|
||||||
|
<if>
|
||||||
|
<available file="@{plugin.directory323}/@{include}"
|
||||||
|
type="file" />
|
||||||
|
<then>
|
||||||
|
<copy todir="@{destination.directory323}"
|
||||||
|
overwrite="true" verbose="true">
|
||||||
|
<fileset dir="@{plugin.directory323}"
|
||||||
|
includes="@{include}" />
|
||||||
|
</copy>
|
||||||
|
</then>
|
||||||
|
<else>
|
||||||
|
<!-- fail: unknown deployment artifact -->
|
||||||
|
<fail
|
||||||
|
message="Unable to deploy '@{include}' specified in @{plugin.directory323}/build.properties; unable to find the file / directory." />
|
||||||
|
</else>
|
||||||
|
</if>
|
||||||
|
</else>
|
||||||
|
</if>
|
||||||
|
</sequential>
|
||||||
|
</for>
|
||||||
|
</sequential>
|
||||||
|
</macrodef>
|
||||||
|
|
||||||
<!-- ====================================================================== -->
|
<!-- ====================================================================== -->
|
||||||
<!-- The default assemble target, this will be called to assemble each -->
|
<!-- The default assemble target, this will be called to assemble each -->
|
||||||
|
|
|
@ -23,4 +23,5 @@
|
||||||
|
|
||||||
# Java Library Path (location of Wrapper.DLL or libwrapper.so)
|
# Java Library Path (location of Wrapper.DLL or libwrapper.so)
|
||||||
wrapper.java.library.path.1=%EDEX_HOME%/bin/linux-x86-32/
|
wrapper.java.library.path.1=%EDEX_HOME%/bin/linux-x86-32/
|
||||||
|
wrapper.java.library.path.4=%EDEX_HOME%/lib/dependencies/org.jep.linux32/
|
||||||
|
|
||||||
|
|
|
@ -24,3 +24,4 @@
|
||||||
# Java Library Path (location of Wrapper.DLL or libwrapper.so)
|
# Java Library Path (location of Wrapper.DLL or libwrapper.so)
|
||||||
wrapper.java.library.path.1=%EDEX_HOME%/bin/linux-x86-64/
|
wrapper.java.library.path.1=%EDEX_HOME%/bin/linux-x86-64/
|
||||||
wrapper.java.library.path.4=%EDEX_HOME%/lib/native/linux64/
|
wrapper.java.library.path.4=%EDEX_HOME%/lib/native/linux64/
|
||||||
|
wrapper.java.library.path.5=%EDEX_HOME%/lib/dependencies/org.jep.linux64/
|
||||||
|
|
|
@ -32,11 +32,13 @@ Jul 08, 2008 1222 jelkins Modified for use within Java
|
||||||
Jul 09, 2008 1222 jelkins Split command line loader from class
|
Jul 09, 2008 1222 jelkins Split command line loader from class
|
||||||
Jul 24, 2012 #944 dgilling Refactored to support separate
|
Jul 24, 2012 #944 dgilling Refactored to support separate
|
||||||
generation of products and utilities.
|
generation of products and utilities.
|
||||||
|
Sep 07, 2012 #1150 dgilling Ensure all necessary dirs get created.
|
||||||
|
|
||||||
@author: jelkins
|
@author: jelkins
|
||||||
"""
|
"""
|
||||||
__version__ = "1.0"
|
__version__ = "1.0"
|
||||||
|
|
||||||
|
import errno
|
||||||
import os
|
import os
|
||||||
from os.path import basename
|
from os.path import basename
|
||||||
from os.path import join
|
from os.path import join
|
||||||
|
@ -129,14 +131,13 @@ class Generator():
|
||||||
@type value: string
|
@type value: string
|
||||||
|
|
||||||
@raise IOError: when the directory does not exist or is not writable
|
@raise IOError: when the directory does not exist or is not writable
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from os import makedirs
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
makedirs(value,0755)
|
os.makedirs(value, 0755)
|
||||||
except OSError, e:
|
except OSError, e:
|
||||||
LOG.warn("%s: '%s'" % (e.strerror,e.filename))
|
if e.errno != errno.EEXIST:
|
||||||
|
LOG.warn("%s: '%s'" % (e.strerror,e.filename))
|
||||||
|
|
||||||
self.__destination = value
|
self.__destination = value
|
||||||
|
|
||||||
|
@ -497,6 +498,13 @@ class Generator():
|
||||||
"""
|
"""
|
||||||
LOG.debug("Processing Formatter Templates.......")
|
LOG.debug("Processing Formatter Templates.......")
|
||||||
|
|
||||||
|
try:
|
||||||
|
os.makedirs(join(self.getDestination(), destDir))
|
||||||
|
except OSError, e:
|
||||||
|
if e.errno != errno.EEXIST:
|
||||||
|
LOG.error("%s: '%s'" % (e.strerror,e.filename))
|
||||||
|
return 0
|
||||||
|
|
||||||
siteid = self.__siteId
|
siteid = self.__siteId
|
||||||
productsWritten = 0
|
productsWritten = 0
|
||||||
|
|
||||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -243,8 +243,8 @@ public class EDEXLocalizationAdapter implements ILocalizationAdapter {
|
||||||
entry.fileName = fullPath.substring(fullPath.indexOf(basePath));
|
entry.fileName = fullPath.substring(fullPath.indexOf(basePath));
|
||||||
entry.date = new Date(file.lastModified());
|
entry.date = new Date(file.lastModified());
|
||||||
|
|
||||||
entry.isProtected = ProtectedFiles.getProtectedLevel(null,
|
entry.protectedLevel = ProtectedFiles.getProtectedLevel(null,
|
||||||
ctx.getLocalizationType(), entry.fileName) != null;
|
ctx.getLocalizationType(), entry.fileName);
|
||||||
|
|
||||||
return entry;
|
return entry;
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,13 +25,12 @@ 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.util.Collections;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
import java.util.LinkedHashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.TreeSet;
|
|
||||||
|
|
||||||
import com.raytheon.uf.common.localization.LocalizationContext;
|
import com.raytheon.uf.common.localization.LocalizationContext;
|
||||||
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationLevel;
|
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationLevel;
|
||||||
|
@ -58,6 +57,7 @@ import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class ProtectedFiles {
|
public class ProtectedFiles {
|
||||||
|
|
||||||
private static transient IUFStatusHandler statusHandler = UFStatus
|
private static transient IUFStatusHandler statusHandler = UFStatus
|
||||||
.getHandler(ProtectedFiles.class);
|
.getHandler(ProtectedFiles.class);
|
||||||
|
|
||||||
|
@ -83,23 +83,6 @@ public class ProtectedFiles {
|
||||||
|
|
||||||
private static Map<String, ProtectedFiles> sites = new HashMap<String, ProtectedFiles>();
|
private static Map<String, ProtectedFiles> sites = new HashMap<String, ProtectedFiles>();
|
||||||
|
|
||||||
private Set<String> protectedFiles;
|
|
||||||
|
|
||||||
private LocalizationLevel level;
|
|
||||||
|
|
||||||
private File file;
|
|
||||||
|
|
||||||
private long lastModifiedTime = 0;
|
|
||||||
|
|
||||||
private ProtectedFiles(LocalizationContext context) {
|
|
||||||
level = context.getLocalizationLevel();
|
|
||||||
file = PathManagerFactory.getPathManager()
|
|
||||||
.getLocalizationFile(context, PROTECTED_FILE).getFile();
|
|
||||||
protectedFiles = Collections
|
|
||||||
.synchronizedSortedSet(new TreeSet<String>());
|
|
||||||
reloadFile();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add the list of protected files into protectedFiles.txt for the site with
|
* Add the list of protected files into protectedFiles.txt for the site with
|
||||||
* siteId
|
* siteId
|
||||||
|
@ -126,19 +109,18 @@ public class ProtectedFiles {
|
||||||
*/
|
*/
|
||||||
public static LocalizationLevel getProtectedLevel(String localizedSite,
|
public static LocalizationLevel getProtectedLevel(String localizedSite,
|
||||||
LocalizationType type, String path) {
|
LocalizationType type, String path) {
|
||||||
// Check base first
|
LocalizationLevel protectedLevel = null;
|
||||||
if (base == null) {
|
if (localizedSite != null) {
|
||||||
return null;
|
ProtectedFiles site = getSiteLevelFiles(localizedSite);
|
||||||
|
protectedLevel = site.getProtectedLevelInternal(type, path);
|
||||||
}
|
}
|
||||||
LocalizationLevel level = base.getProtectedLevelInternal(type, path);
|
// base can be null when constructing the base ProtectedFile object and
|
||||||
|
// the ProtectedFiles constructor looks up it's localization file
|
||||||
// If not protected in base file, check the site
|
if (protectedLevel == null && base != null) {
|
||||||
if (level == null && localizedSite != null) {
|
protectedLevel = base.getProtectedLevelInternal(type, path);
|
||||||
ProtectedFiles files = getSiteLevelFiles(localizedSite);
|
|
||||||
level = files.getProtectedLevelInternal(type, path);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return level;
|
return protectedLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -157,27 +139,42 @@ public class ProtectedFiles {
|
||||||
return site;
|
return site;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Set<String> protectedFiles;
|
||||||
|
|
||||||
|
private LocalizationLevel level;
|
||||||
|
|
||||||
|
private File file;
|
||||||
|
|
||||||
|
private long lastModifiedTime = 0;
|
||||||
|
|
||||||
|
private ProtectedFiles(LocalizationContext context) {
|
||||||
|
this.level = context.getLocalizationLevel();
|
||||||
|
this.protectedFiles = new LinkedHashSet<String>();
|
||||||
|
this.file = PathManagerFactory.getPathManager()
|
||||||
|
.getLocalizationFile(context, PROTECTED_FILE).getFile();
|
||||||
|
reloadFile();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write the protectedFiles.txt file.
|
* Write the protectedFiles.txt file.
|
||||||
*/
|
*/
|
||||||
private synchronized void writeProtectedFile() {
|
private synchronized void writeProtectedFile() {
|
||||||
String str;
|
|
||||||
try {
|
try {
|
||||||
file.createNewFile();
|
file.createNewFile();
|
||||||
|
|
||||||
BufferedWriter out = new BufferedWriter(new FileWriter(file));
|
BufferedWriter out = new BufferedWriter(new FileWriter(file));
|
||||||
out.write(level == LocalizationLevel.BASE ? BASE_HEADER : String
|
out.write(level == LocalizationLevel.BASE ? BASE_HEADER : String
|
||||||
.format(LEVEL_HEADER, level.toString()));
|
.format(LEVEL_HEADER, level));
|
||||||
Iterator<String> iter = protectedFiles.iterator();
|
Iterator<String> iter = protectedFiles.iterator();
|
||||||
while (iter.hasNext()) {
|
while (iter.hasNext()) {
|
||||||
str = iter.next();
|
out.write(iter.next() + "\n");
|
||||||
out.write(str + "\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
out.flush();
|
out.flush();
|
||||||
out.close();
|
out.close();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
statusHandler.handle(Priority.PROBLEM,
|
||||||
|
"Error writing protected file list", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -230,11 +227,12 @@ public class ProtectedFiles {
|
||||||
LocalizationLevel[] levels = PathManagerFactory.getPathManager()
|
LocalizationLevel[] levels = PathManagerFactory.getPathManager()
|
||||||
.getAvailableLevels();
|
.getAvailableLevels();
|
||||||
|
|
||||||
for (LocalizationLevel level : levels) {
|
for (int i = levels.length - 1; i >= 0; --i) {
|
||||||
String levelPath = level.toString().toUpperCase() + ":" + path;
|
// Search backwards so we get highest protected level in case of
|
||||||
boolean isProtected = protectedFiles.contains(levelPath);
|
// duplicate entries at different levels
|
||||||
|
LocalizationLevel level = levels[i];
|
||||||
if (isProtected) {
|
String levelPath = level.name() + ":" + path;
|
||||||
|
if (protectedFiles.contains(levelPath)) {
|
||||||
protectionLevel = level;
|
protectionLevel = level;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,5 +3,6 @@
|
||||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||||
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
|
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
|
||||||
<classpathentry kind="src" path="src"/>
|
<classpathentry kind="src" path="src"/>
|
||||||
|
<classpathentry kind="src" path="unit-test"/>
|
||||||
<classpathentry kind="output" path="bin"/>
|
<classpathentry kind="output" path="bin"/>
|
||||||
</classpath>
|
</classpath>
|
||||||
|
|
|
@ -12,7 +12,8 @@ Require-Bundle: org.apache.commons.logging,
|
||||||
javax.measure,
|
javax.measure,
|
||||||
org.geotools,
|
org.geotools,
|
||||||
javax.persistence,
|
javax.persistence,
|
||||||
org.apache.camel;bundle-version="1.0.0";resolution:=optional
|
org.apache.camel;bundle-version="1.0.0";resolution:=optional,
|
||||||
|
org.junit;bundle-version="1.0.0"
|
||||||
Export-Package: com.raytheon.edex.plugin.airep,
|
Export-Package: com.raytheon.edex.plugin.airep,
|
||||||
com.raytheon.edex.plugin.airep.decoder
|
com.raytheon.edex.plugin.airep.decoder
|
||||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
|
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
|
||||||
|
|
|
@ -57,6 +57,9 @@ import com.raytheon.uf.edex.wmo.message.WMOHeader;
|
||||||
* 20080103 384 jkorman Initial Coding.
|
* 20080103 384 jkorman Initial Coding.
|
||||||
* 20080408 1039 jkorman Added traceId for tracing data.
|
* 20080408 1039 jkorman Added traceId for tracing data.
|
||||||
* 11/11/08 1684 chammack Camel Refactor
|
* 11/11/08 1684 chammack Camel Refactor
|
||||||
|
* ======================================
|
||||||
|
* AWIPS2 DR Work
|
||||||
|
* 20120911 1011 jkorman Added decode of AIREP turbulence.
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author jkorman
|
* @author jkorman
|
||||||
|
@ -99,10 +102,11 @@ public class AirepDecoder extends AbstractDecoder {
|
||||||
String traceId = null;
|
String traceId = null;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// traceId = getTraceId(hdrMap);
|
|
||||||
logger.debug(traceId + "- AirepDecoder.decode()");
|
|
||||||
WMOHeader wmoHeader = input.wmoHeader;
|
WMOHeader wmoHeader = input.wmoHeader;
|
||||||
if(wmoHeader != null) {
|
if(wmoHeader != null) {
|
||||||
|
traceId = wmoHeader.getWmoHeader().replace(" ", "_");
|
||||||
|
logger.info(traceId + "- AirepDecoder.decode()");
|
||||||
|
|
||||||
Calendar refTime = TimeTools.findDataTime(
|
Calendar refTime = TimeTools.findDataTime(
|
||||||
wmoHeader.getYYGGgg(), header);
|
wmoHeader.getYYGGgg(), header);
|
||||||
if(refTime != null) {
|
if(refTime != null) {
|
||||||
|
@ -170,11 +174,28 @@ public class AirepDecoder extends AbstractDecoder {
|
||||||
record.setLocation(location);
|
record.setLocation(location);
|
||||||
|
|
||||||
AIREPWeather wx = parser.getWeatherGroup();
|
AIREPWeather wx = parser.getWeatherGroup();
|
||||||
|
int flightConditions = -1;
|
||||||
if (wx != null) {
|
if (wx != null) {
|
||||||
record.setFlightConditions(wx.getFlightConditions());
|
flightConditions = wx.getFlightConditions();
|
||||||
record.setFlightHazard(wx.getHazard());
|
record.setFlightHazard(wx.getHazard());
|
||||||
record.setFlightWeather(wx.getWeather());
|
record.setFlightWeather(wx.getWeather());
|
||||||
}
|
}
|
||||||
|
AirepParser.Turbulence turb = parser.getTurbulence();
|
||||||
|
int t = -1;
|
||||||
|
if(turb != null) {
|
||||||
|
t = turb.getTurbulence() << 4;
|
||||||
|
}
|
||||||
|
if(flightConditions > -1) {
|
||||||
|
if(t > -1) {
|
||||||
|
record.setFlightConditions(flightConditions | t);
|
||||||
|
} else {
|
||||||
|
record.setFlightConditions(flightConditions);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(t > -1) {
|
||||||
|
record.setFlightConditions(t);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return record;
|
return record;
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue