Merge branch 'omaha_14.4.1' into ncep_14.4.1

Former-commit-id: 752d081ba6 [formerly 858bacc6ca [formerly 339e27276d6332393dabd6f94b9ea63508b87b65]]
Former-commit-id: 858bacc6ca
Former-commit-id: 64471adac7
This commit is contained in:
Bradley.Mabe 2014-12-18 13:15:43 -05:00
commit 07c28f7ed8
869 changed files with 4279 additions and 132614 deletions

11
build/build.core/.project Normal file
View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>build.core</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
</buildSpec>
<natures>
</natures>
</projectDescription>

View file

@ -0,0 +1,108 @@
/**
* 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.
**/
/**
* POJO-based representation of the contents of an Eclipse feature file.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Dec 4, 2014 3836 bkowal Initial Commit
*
* </pre>
*
* @author bkowal
* @version 1.0
*/
class Feature
{
private String feature
private String featureDirectory
/*
* The first iteration of the build will assume that when includes
* are present, there will not be any plugins or dependencies
* because we will be working with the product feature
*/
private List includesList
private List dependenciesList
private List pluginsList
public Feature(String feature, String featureDirectory)
{
this.feature = feature
this.featureDirectory = featureDirectory
this.includesList = []
this.dependenciesList = []
this.pluginsList = []
}
public String getFeature()
{
return this.feature
}
public String getFeatureDirectory()
{
return this.featureDirectory
}
public void addInclude(String includedFeature)
{
this.includesList.add(includedFeature)
}
public List getIncludes()
{
return this.includesList
}
public boolean hasIncludes()
{
return this.includesList.size() > 0
}
public void addDependency(String dependency)
{
this.dependenciesList.add(dependency)
}
public List getDependencies()
{
return this.dependenciesList
}
public boolean hasDependencies()
{
return this.dependenciesList.size() > 0
}
public void addPlugin(String plugin)
{
this.pluginsList.add(plugin)
}
public List getPlugins()
{
return this.pluginsList
}
}

View file

@ -0,0 +1,52 @@
/**
* 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.
**/
/**
* Parses an Eclipse feature file (feature.xml) and returns a POJO representation
* of the contents of the feature file.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Dec 4, 2014 3836 bkowal Initial Commit
*
* </pre>
*
* @author bkowal
* @version 1.0
*/
class FeatureParser
{
public static Feature parseFeature(String featureFile, String featureDirectory)
{
Feature feature = new Feature(featureFile, featureDirectory)
def featureXML = new XmlSlurper().parse(new File(featureFile))
featureXML.includes.each {feature.addInclude(it.attributes().id)}
featureXML.requires.import.each {feature.addDependency(it.attributes().feature)}
featureXML.plugin.each {feature.addPlugin(it.attributes().id)}
return feature
}
}

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>deploy.edex</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
</buildSpec>
<natures>
</natures>
</projectDescription>

View file

@ -0,0 +1,51 @@
/**
* 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.
**/
/**
* Abstraction of a customized plugin deployer that provides access
* to a pre-configured groovy Ant Builder.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Dec 4, 2014 3836 bkowal Initial Commit
*
* </pre>
*
* @author bkowal
* @version 1.0
*/
abstract class AbstractAntBasedPluginCustomDeployer
implements IPluginCustomDeployer
{
protected AntBuilder ant
protected AbstractAntBasedPluginCustomDeployer()
{
this.ant = new AntBuilder()
// disable ant logging - based on:
// http://stackoverflow.com/questions/15143221/enable-verbose-output-from-groovys-antbuilder
this.ant.project.getBuildListeners().firstElement().setMessageOutputLevel(0)
}
}

View file

@ -0,0 +1,72 @@
/**
* 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.
**/
/**
* Abstraction of a customized plugin deployer that deploys
* plugin-specific files and directories that exist outside
* of the Java src directory. Files are deployed from
* the specified externalDirectory in the plugin (if it exists) to the
* specified destinationDirectoryTree located beneath the root edex directory.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Dec 4, 2014 3836 bkowal Initial Commit
*
* </pre>
*
* @author bkowal
* @version 1.0
*/
abstract class AbstractExternalPluginFilesDeployer
extends AbstractAntBasedPluginCustomDeployer {
private String externalDirectory
private String destinationDirectoryTree
protected AbstractExternalPluginFilesDeployer(String externalDirectory, String destinationDirectoryTree) {
super()
this.externalDirectory = externalDirectory
this.destinationDirectoryTree = destinationDirectoryTree
}
// Add plugin name if we want to add logging to this capability
protected void deployExternalFilesystem(String edexRootDirectory, String pluginFullPath)
{
String fullPluginExternalPath = pluginFullPath + File.separator + this.externalDirectory
// ensure that this plugin has an external directory
if (new File(fullPluginExternalPath).exists() == false)
{
return
}
String fullDestinationPath = edexRootDirectory + File.separator +
this.destinationDirectoryTree + File.separator + this.externalDirectory
// ensure that the destination directory exists
new File(fullDestinationPath).mkdirs()
// copy the files
ant.copy( todir : fullDestinationPath, overwrite : true )
{ fileset( dir : fullPluginExternalPath ) }
}
}

View file

@ -0,0 +1,61 @@
/**
* 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.
**/
/**
* Searches for and runs custom plugin-specific groovy scripts named plugin-deploy.groovy
* located directly within the plugin directory. The requirement is that the custom
* plugin deployments must only deploy files to a location relative to the EDEX root directory.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Dec 4, 2014 3836 bkowal Initial Commit
*
* </pre>
*
* @author bkowal
* @version 1.0
*/
class CustomDeploymentRunner
implements IPluginCustomDeployer {
private static final String PLUGIN_GROOVY_SCRIPT = "plugin-deploy.groovy"
private static final String BINDING_EDEX_ROOT = "__EDEX_ROOT__"
private static final String BINDING_PLUGIN = "__PLUGIN__"
private static final String BINDING_PLUGIN_PATH = "__PLUGIN_PATH__"
public void deploy(String edexRootDirectory, String plugin, String pluginFullPath) {
File groovyScript = new File(pluginFullPath + File.separator + PLUGIN_GROOVY_SCRIPT)
if (groovyScript.exists() == false) {
return
}
Binding binding = new Binding()
binding.setVariable(BINDING_EDEX_ROOT, edexRootDirectory)
binding.setVariable(BINDING_PLUGIN, plugin)
binding.setVariable(BINDING_PLUGIN_PATH, pluginFullPath)
def groovyShell = new GroovyShell(binding)
groovyShell.run(groovyScript)
}
}

View file

@ -0,0 +1,120 @@
/**
* 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 groovy.util.logging.*
/**
* Deploys the EDEX esb scripts, libraries, and other files.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Dec 4, 2014 3836 bkowal Initial Commit
*
* </pre>
*
* @author bkowal
* @version 1.0
*/
@Log
class DeployESB
{
private static final String SETUP_ENV = "setup.env"
private DeployESB()
{
}
public static void deploy(String edexRootDirectory, String esbDirectory, String overrideArchitecture)
{
if (new File(esbDirectory).exists() == false)
{
log.log(java.util.logging.Level.SEVERE,
"The specified esb directory does not exist - " + esbDirectory)
System.exit(-1)
}
new File(edexRootDirectory).mkdirs()
// deploy the ESB directory structure.
AntBuilder ant = new AntBuilder()
ant.project.getBuildListeners().firstElement().setMessageOutputLevel(0)
log.info "Deploying ESB ..."
ant.copy( todir : edexRootDirectory,
overwrite : true )
{
fileset( dir : esbDirectory )
}
// remove setup.env
new File(edexRootDirectory + File.separator + "bin" + File.separator + SETUP_ENV).delete()
// remove lib_illusion
new File(edexRootDirectory + File.separator + "lib" + File.separator + "lib_illusion").deleteDir()
// copy the correct lib_illusion based on architecture
// determine architecture?
// since this is only a temporary consideration since we will eventually be switching to a 64-bit
// EDEX, we will just look at the OS architecture since the JDK does not provide a simple way
// to retrieve the required information about the JVM process, itself. The -Darchitecture argument
// can be used to override the dynamically determined architecture
String architecture = overrideArchitecture
if (architecture == "")
{
architecture =
(System.getProperty("os.arch") == "amd64") ? "x86_64" : "x86"
}
String esbLibIllusionPath = esbDirectory + File.separator + "lib" + File.separator +
"lib_illusion" + File.separator + architecture
if (new File(esbLibIllusionPath).exists() == false)
{
log.log(java.util.logging.Level.SEVERE,
"Unable to find the illusion lib associated with architecture - " + architecture)
System.exit(-1)
}
String libIllusionDestination = edexRootDirectory + File.separator +
"lib" + File.separator + "lib_illusion"
new File(libIllusionDestination).mkdirs()
ant.copy( todir : libIllusionDestination, overwrite : true )
{
fileset( dir : esbLibIllusionPath )
}
}
public static void deployEdexConfiguration(String edexRootDirectory, String esbDirectory)
{
final String setupEnvSrc = esbDirectory + File.separator + "bin" + File.separator + SETUP_ENV
final String destinationDirectory = edexRootDirectory + File.separator + "bin"
AntBuilder ant = new AntBuilder()
ant.project.getBuildListeners().firstElement().setMessageOutputLevel(0)
ant.copy( todir : destinationDirectory,
overwrite : true )
{
fileset( file : setupEnvSrc )
}
}
}

View file

@ -0,0 +1,53 @@
/**
* 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.
**/
/**
* Deploys plugin-provided localization files.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Dec 4, 2014 3836 bkowal Initial Commit
*
* </pre>
*
* @author bkowal
* @version 1.0
*/
class DeployEdexLocalization
extends AbstractExternalPluginFilesDeployer
{
private static final String destinationDirectory = "utility"
private static final String destinationDirectoryTree = "data"
public DeployEdexLocalization()
{
super(destinationDirectory, destinationDirectoryTree)
}
public void deploy(String edexRootDirectory, String plugin, String pluginFullPath)
{
super.deployExternalFilesystem(edexRootDirectory, pluginFullPath)
}
}

View file

@ -0,0 +1,53 @@
/**
* 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.
**/
/**
* Deploys plugin-provided resource (properties) files.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Dec 4, 2014 3836 bkowal Initial Commit
*
* </pre>
*
* @author bkowal
* @version 1.0
*/
class DeployEdexResources
extends AbstractExternalPluginFilesDeployer
{
private static final String destinationDirectory = "resources"
private static final String destinationDirectoryTree = "conf"
public DeployEdexResources()
{
super(destinationDirectory, destinationDirectoryTree)
}
public void deploy(String edexRootDirectory, String plugin, String pluginFullPath)
{
super.deployExternalFilesystem(edexRootDirectory, pluginFullPath)
}
}

View 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 groovy.util.logging.*
import ProjectInformation
/**
* Deploys the sample EDEX localization files when requested.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Dec 4, 2014 3836 bkowal Initial Commit
*
* </pre>
*
* @author bkowal
* @version 1.0
*/
@Log
class DeployEdexSiteLocalization
{
private static final String EDEX_LOCALIZATION_DIRECTORY = "data" + File.separator +
"utility"
private DeployEdexSiteLocalization()
{
}
public static void deploy(String edexRootDirectory, ProjectInformation projectInformation, String site)
{
if (projectInformation == null)
{
log.log(java.util.logging.Level.WARNING,
"Unable to find the localization project associated with site " + site +
"; skipping localization deployment")
return
}
String localizationDestination = edexRootDirectory + File.separator + EDEX_LOCALIZATION_DIRECTORY
new File(localizationDestination).mkdirs()
AntBuilder ant = new AntBuilder()
ant.project.getBuildListeners().firstElement().setMessageOutputLevel(0)
log.info "Deploying localization for site ... " + site
ant.copy( todir : localizationDestination, overwrite : true )
{
fileset( dir : projectInformation.projectFullLocation + File.separator + "utility" )
}
}
}

View file

@ -0,0 +1,55 @@
/**
* 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 java.io.File
/**
* Deploys plugin-provided EDEX mode files.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Dec 4, 2014 3836 bkowal Initial Commit
*
* </pre>
*
* @author bkowal
* @version 1.0
*/
class DeployModes
extends AbstractExternalPluginFilesDeployer
{
private static final String destinationDirectory = 'modes'
private static final String destinationDirectoryTree = 'conf'
public DeployModes()
{
super(destinationDirectory, destinationDirectoryTree)
}
public void deploy(String edexRootDirectory, String plugin, String pluginFullPath)
{
super.deployExternalFilesystem(edexRootDirectory, pluginFullPath)
}
}

View file

@ -0,0 +1,118 @@
/**
* 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 groovy.util.logging.*
import java.util.regex.Pattern
import java.util.regex.Matcher
import ProjectInformation
/**
* Deploys the Raytheon-maintained Python Packages when requested.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Dec 4, 2014 3836 bkowal Initial Commit
*
* </pre>
*
* @author bkowal
* @version 1.0
*/
@Log
class DeployPythonPackages {
private static final String PYTHON_VERSION_PATTERN_STRING = "python([0-9].+)"
private static final Pattern pythonVersionPattern =
Pattern.compile(PYTHON_VERSION_PATTERN_STRING)
private DeployPythonPackages() {
}
public static deploy(String pythonRootDirectory, ProjectInformation projectInformation,
String[] pythonPackagesToDeploy) {
if (projectInformation == null) {
log.log(java.util.logging.Level.WARNING,
"Unable to find pythonPackages in the workspace; skipping python deployment")
return
}
if (pythonPackagesToDeploy.length == 0) {
log.info "No python packages have been specified for deployment; skipping python deployment."
return
}
// determine what the python version directory is
// loop through all directories in the python lib directory; attempt to find
// the one that matches our pattern
final String pythonLibDirectory = pythonRootDirectory + File.separator + "lib"
String pythonVersion = null
for (String libFile : new File(pythonLibDirectory).list())
{
Matcher matcher = pythonVersionPattern.matcher(libFile)
if (matcher.matches())
{
pythonVersion = matcher.group(1)
}
}
if (pythonVersion == null)
{
log.log(java.util.logging.Level.SEVERE,
"Unable to find the python version directory in " + pythonLibDirectory)
System.exit(-1)
}
AntBuilder ant = new AntBuilder()
ant.project.getBuildListeners().firstElement().setMessageOutputLevel(0)
log.info "Deploying pythonPackages ..."
final String pythonSitePackagesDirectory = pythonLibDirectory + File.separator +
"python" + pythonVersion + File.separator + "site-packages"
for (String pythonPackage : pythonPackagesToDeploy)
{
String pythonPackageDirectory = projectInformation.projectFullLocation + File.separator + pythonPackage
if (pythonPackage == "pypies")
{
// special case for pypies
pythonPackageDirectory += File.separator + "pypies"
}
if (new File(pythonPackageDirectory).exists() == false)
{
log.log(java.util.logging.Level.WARNING,
"Unable to find the " + pythonPackage + " python package in the workspace")
continue
}
String pythonPackageDestination = pythonSitePackagesDirectory + File.separator +
pythonPackage
log.info "Deploying pythonPackage ... " + pythonPackage
// Remove the existing deployment
new File(pythonPackageDestination).deleteDir()
// Create an empty destination directory
new File(pythonPackageDestination).mkdirs()
ant.copy( todir : pythonPackageDestination )
{ fileset( dir : pythonPackageDirectory ) }
}
}
}

View file

@ -0,0 +1,119 @@
/**
* 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 groovy.util.logging.*
import IPluginCustomDeployer
/**
* Deploys plugin-provided web applications as war files.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Dec 4, 2014 3836 bkowal Initial Commit
*
* </pre>
*
* @author bkowal
* @version 1.0
*/
@Log
class DeployWeb
extends AbstractAntBasedPluginCustomDeployer
{
private final String WEB_XML_PATH = "web" + File.separator + "WEB-INF" + File.separator + "web.xml"
public DeployWeb()
{
super()
}
public void deploy(String edexRootDirectory, String plugin, String pluginFullPath)
{
final String edexWebappsDirectory = edexRootDirectory + File.separator + "webapps"
// determine if the plugin encapsulates a web application
final String expectedWebXMLPath = pluginFullPath + File.separator + WEB_XML_PATH
if (new File(expectedWebXMLPath).exists() == false)
{
// no web application
return
}
String webAppRootKey = this.getWebAppRootKey(expectedWebXMLPath)
if (webAppRootKey == null)
{
log.log(java.util.logging.Level.WARNING,
"webAppRootKey not specified in web.xml for plugin - " + plugin + "; skipping web app deployment")
return
}
log.info "Deploying Web Application associated with plugin ... " + plugin
final String warFile = edexWebappsDirectory + File.separator + webAppRootKey + ".war"
final String unwarDirectory = edexWebappsDirectory + File.separator + webAppRootKey
this.cleanup(edexWebappsDirectory, warFile, unwarDirectory)
// produce the war file
this.ant.war( destfile : warFile,
webxml : expectedWebXMLPath )
{
fileset( dir : pluginFullPath + File.separator + "web",
excludes : "WEB-INF" + File.separator )
classes( dir : pluginFullPath + File.separator + "web" + File.separator +
"WEB-INF" + File.separator + "classes" )
webinf ( file : pluginFullPath + File.separator + "web" + File.separator +
"WEB-INF" + File.separator + "dwr.xml" )
}
// finally, unwar the war file
this.ant.unzip( src : warFile,
dest : unwarDirectory )
new File(warFile).delete()
}
private String getWebAppRootKey(String webXMLFile)
{
String webAppRootKey = null
def webXML = new XmlSlurper().parse(new File(webXMLFile))
webXML.'context-param'.each
{
String paramName = it.'param-name'.toString()
if (paramName == "webAppRootKey")
{
webAppRootKey = it.'param-value'.toString()
}
}
return webAppRootKey
}
private void cleanup(String edexWebappsDirectory, String warFile, String webAppDirectory)
{
// cleanup any previous deployments
new File(warFile).delete()
new File(webAppDirectory).deleteDir()
}
}

View file

@ -0,0 +1,42 @@
/**
* 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.
**/
/**
* Defines a customized plugin deployer. Customized Plugin deployers are
* used to deploy additional plugin-specific files that exist outside
* of a standard Java build.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Dec 4, 2014 3836 bkowal Initial Commit
*
* </pre>
*
* @author bkowal
* @version 1.0
*/
interface IPluginCustomDeployer {
void deploy(String edexRootDirectory, String plugin, String pluginFullPath)
}

View file

@ -0,0 +1,54 @@
/**
* 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.
**/
/**
* POJO representation of projects discovered in the Eclipse workspace.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Dec 4, 2014 3836 bkowal Initial Commit
*
* </pre>
*
* @author bkowal
* @version 1.0
*/
class ProjectInformation
{
// the name of the project as it is known to Eclipse
public String project
// the name of the project directory
// in most cases (not all) this will be the same as the project name
public String projectDirectory
// the full path to the plugin
public String projectFullLocation
public ProjectInformation()
{
this.project = null
this.projectDirectory = null
this.projectFullLocation = null
}
}

View file

@ -0,0 +1,15 @@
Run deploy-install.xml to execute the new groovy-based deployment mechanism.
The mechanism will need to remain ant-wrapped until the Groovy plugins are added
to the uframe Eclipse distribution.
One argument is required to run the script: -Dworkspace_loc=${workspace_loc}
Note: ENTER THE ARGUMENT EXACTLY AS IT IS WRITTEN ABOVE. ${workspace_loc} is
an Eclipse variable that references the actual location of the workspace.
deploy-install will deploy any EDEX features it finds in the workspace excluding:
com.raytheon.edex.wa.feature and com.raytheon.edex.feature.uframe
Currently, an EDEX feature is defined as a feature project that includes edex in
the name. Feature deployment options will most likely be more customizable when
the pure groovy version of this deployment can be used.

View file

@ -0,0 +1,563 @@
/**
* 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 groovy.util.logging.*
import ProjectInformation
import Feature
import FeatureParser
import java.util.Properties
import java.util.List
import java.util.ArrayList
import java.util.regex.Matcher
import java.util.regex.Pattern
import DeployESB
import DeployPythonPackages
import DeployEdexSiteLocalization
import IPluginCustomDeployer
/**
* Initial version of the deploy-install driver. Temporarily
* wrapped by and executed by an ant script until the Groovy
* plugins become a standard part of the uframe Eclipse distribution.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Dec 4, 2014 3836 bkowal Initial Commit
*
* </pre>
*
* @author bkowal
* @version 1.0
*/
@Log
class DeployInstall
{
private static final String edexFeatureRegex = '^.*\\.edex\\..*\\.feature$'
private static final Pattern EDEX_FEATURE_PATTERN =
Pattern.compile(edexFeatureRegex)
// temporarily have to declare and add this feature to the list of deployed features
// manually. there are improvements that can be made in 15.1.
private static final String COMMON_BASE_FEATURE = "com.raytheon.uf.common.base.feature"
// temporary. maintain backwards compatibility until baseline cleanup
private final List<String> blacklistedEdexFeatures
private projectInformationMap = [:]
private List<String> edexFeaturesToDeploy
private String edexRootDirectory
private String[] localizationSitesToDeploy = []
private boolean deployPythonPackages
private String pythonRootDirectory
private String[] pythonPackagesToDeploy = []
private String architecture
private List<IPluginCustomDeployer> customPluginDeployers
// a list of features that have been deployed to ensure that a feature is not deployed
// more than once.
private List featuresDeployed = []
// a list of the plugins that we will be deploying.
private List pluginsToDeploy = []
// used to track which feature a plugin was discovered in; will be used to
// verify that a plugin is not listed in more than one feature.
private pluginToFeatureMap = [:]
public DeployInstall(final String workspaceDirectory,
final String localizationSites, final boolean deployPythonPackages,
final String edexRootDirectory, final String pythonRootDirectory, final String pythonPackages,
final String architecture)
{
blacklistedEdexFeatures = new ArrayList<String>()
// never deploy these features
blacklistedEdexFeatures.add("com.raytheon.edex.wa.feature")
blacklistedEdexFeatures.add("com.raytheon.edex.feature.uframe")
this.init(workspaceDirectory.trim())
if (localizationSites.trim() != "")
{
this.localizationSitesToDeploy = localizationSites.trim().split(":")
}
this.deployPythonPackages = deployPythonPackages
this.edexRootDirectory = edexRootDirectory.trim()
this.pythonRootDirectory = pythonRootDirectory.trim()
if (pythonPackages.trim() != "")
{
this.pythonPackagesToDeploy = pythonPackages.trim().split(":")
}
this.architecture = architecture.trim()
}
public void deploy()
{
// recursively build the list of plugins that will be deployed.
for (String featureToDeploy : edexFeaturesToDeploy)
{
this.buildPluginList(featureToDeploy)
}
log.info "Found " + this.pluginsToDeploy.size() + " Plugins To Deploy."
this.cleanup()
this.deployPlugins()
// complete the esb deployment
// we need to determine the location of the build.edex project
ProjectInformation projectInformation = this.projectInformationMap["build.edex"]
if (projectInformation == null)
{
log.log(java.util.logging.Level.SEVERE,
"Unable to find project - build.edex")
System.exit(-1)
}
final String esbDirectory = projectInformation.projectFullLocation + File.separator + "esb"
DeployESB.deploy(this.edexRootDirectory, esbDirectory, this.architecture)
DeployESB.deployEdexConfiguration(this.edexRootDirectory, esbDirectory)
if (this.deployPythonPackages)
{
DeployPythonPackages.deploy(this.pythonRootDirectory,
this.projectInformationMap["pythonPackages"], this.pythonPackagesToDeploy)
}
if (this.localizationSitesToDeploy.length > 0)
{
for (String localizationSite : this.localizationSitesToDeploy)
{
String localizationProject = "localization." + localizationSite
DeployEdexSiteLocalization.deploy(this.edexRootDirectory,
this.projectInformationMap[localizationProject], localizationSite)
}
}
}
// remove the existing deployment
private void cleanup()
{
// remove the contents of the edex lib directory (execluding native)
log.info "Cleaning EDEX lib directory ..."
final String EDEX_LIB_DIRECTORY = this.edexRootDirectory + File.separator + "lib"
for (File file : new File(EDEX_LIB_DIRECTORY).listFiles())
{
if (file.getName() == "native")
{
continue
}
file.deleteDir()
}
// remove the shell scripts and the yajsw sub-directory from the edex bin directory
log.info "Cleaning EDEX bin directory ..."
final String EDEX_BIN_DIRECTORY = this.edexRootDirectory + File.separator + "bin"
for (File file : new File(EDEX_BIN_DIRECTORY).listFiles())
{
if (file.getName() == "yajsw")
{
file.deleteDir()
}
// we really should be checking the file extension here instead of just doing a
// basic String comparison
if (file.getName().endsWith(".sh") || file.getName() == "setup.env")
{
file.delete()
}
}
// remove the contents of the edex conf directory
log.info "Cleaning EDEX conf directory ..."
final String EDEX_CONF_DIRECTORY = this.edexRootDirectory + File.separator + "conf"
for (File file : new File(EDEX_CONF_DIRECTORY).listFiles())
{
if (file.isDirectory())
{
file.deleteDir()
}
else
{
file.delete()
}
}
}
private void deployPlugins()
{
// we will need ant to complete this
AntBuilder ant = new AntBuilder()
ant.project.getBuildListeners().firstElement().setMessageOutputLevel(0)
log.info "Deploying plugins ..."
for (String plugin : this.pluginsToDeploy)
{
this.deployPlugin(plugin, ant)
}
}
// FOSS plugins are plugins that include jar files.
private boolean isFOSSPlugin(ProjectInformation projectInformation)
{
final String jarSuffix = ".jar"
// loop through the files in the plugin directory; true if a single
// jar file is found.
for (String pluginFile : new File(projectInformation.projectFullLocation).listFiles())
{
if (pluginFile.endsWith(".jar"))
{
return true
}
}
return false
}
private void deployPlugin(String plugin, AntBuilder ant)
{
// first, attempt to find the plugin in the plugin map
ProjectInformation projectInformation = this.projectInformationMap[plugin]
if (projectInformation == null)
{
log.log(java.util.logging.Level.SEVERE,
"Unable to find plugin - " + plugin)
System.exit(-1)
}
// next, attempt to access the build.properties file for the plugin
final String PLUGIN_BUILD_PROPERTIES = projectInformation.projectFullLocation + File.separator +
"build.properties"
if (new File(PLUGIN_BUILD_PROPERTIES).exists() == false)
{
log.log(java.util.logging.Level.SEVERE,
"Unable to find the build.properties file for plugin - " + plugin)
System.exit(-1)
}
log.info "Deploying plugin ... " + plugin
// read the plugin build.properties file
BufferedReader br =
new BufferedReader(new FileReader(PLUGIN_BUILD_PROPERTIES))
Properties properties = new Properties()
properties.load(br)
final String output = properties.getProperty("output..")
final String binIncludes = properties.getProperty("bin.includes")
if (output == null)
{
// we will not be producing a jar file and are most likely deploying a FOSS plugin
this.deployFOSSPlugin(projectInformation, binIncludes, ant)
return
}
// jar the plugin
final String pluginJarName = plugin + ".jar"
final String edexLibPlugins = this.edexRootDirectory + File.separator + "lib" + File.separator +
"plugins"
new File(edexLibPlugins).mkdirs()
final String fullJarPath = edexLibPlugins + File.separator + pluginJarName
ant.jar( destfile : fullJarPath,
manifest : projectInformation.projectFullLocation + File.separator + "META-INF" +
File.separator + "MANIFEST.MF" )
{
fileset( dir : projectInformation.projectFullLocation + File.separator + output )
}
// is the plugin FOSS?
if (this.isFOSSPlugin(projectInformation))
{
this.deployFOSSPlugin(projectInformation, binIncludes, ant)
return
}
// finish the plugin based on build.properties
for (String binInclude : binIncludes.split(","))
{
binInclude = binInclude.trim()
if (binInclude == ".")
{
continue
}
// ensure that the artifact exists
final String artifact = projectInformation.projectFullLocation + File.separator + binInclude
if (new File(artifact).exists() == false)
{
log.log(java.util.logging.Level.SEVERE,
artifact + " specified in build.properties for plugin " + projectInformation.project + " was not found")
System.exit(-1)
}
// add the artifact to the jar
if (new File(artifact).isDirectory())
{
ant.jar( destfile : fullJarPath,
update : true )
{
fileset( dir : projectInformation.projectFullLocation,
includes : binInclude )
}
}
else
{
ant.jar( destfile : fullJarPath,
update : true )
{
fileset( file : artifact )
}
}
}
// run "custom" deployment steps
for (IPluginCustomDeployer pluginCustomDeployer : this.customPluginDeployers)
{
pluginCustomDeployer.deploy(this.edexRootDirectory, projectInformation.project,
projectInformation.projectFullLocation)
}
}
private void deployFOSSPlugin(ProjectInformation projectInformation, String binIncludes, AntBuilder ant)
{
final String edexLibDependencies = this.edexRootDirectory + File.separator + "lib" + File.separator +
"dependencies" + File.separator + projectInformation.project
// create the destination directory
new File(edexLibDependencies).mkdirs()
for (String binInclude : binIncludes.split(","))
{
binInclude = binInclude.trim()
if (binInclude == ".")
{
continue
}
// ensure that the artifact exists
final String artifact = projectInformation.projectFullLocation + File.separator + binInclude
if (new File(artifact).exists() == false)
{
log.log(java.util.logging.Level.SEVERE,
artifact + " specified in build.properties for plugin " + projectInformation.project + " was not found")
System.exit(-1)
}
if (new File(artifact).isDirectory())
{
ant.copy( todir : edexLibDependencies )
{
fileset( dir : artifact )
}
}
else
{
ant.copy( todir : edexLibDependencies, file : artifact )
}
}
}
private void buildPluginList(String featureName)
{
if (this.featuresDeployed.contains(featureName))
{
log.log(java.util.logging.Level.WARNING,
"Feature " + featureName + " has been included more than once; skipping the duplicate.")
return
}
log.info "Analyzing feature ... " + featureName
// first, attempt to find the feature in the project map
ProjectInformation projectInformation = this.projectInformationMap[featureName]
// verify that the feature exists
if (projectInformation == null)
{
log.log(java.util.logging.Level.SEVERE,
"Unable to find the specified feature - " + featureName)
System.exit(-1)
}
final String featureFullPath = projectInformation.projectFullLocation + File.separator + "feature.xml"
// verify that the feature exists
if (new File(featureFullPath).exists() == false)
{
log.log(java.util.logging.Level.SEVERE,
"Unable to find the specified feature - " + featureName + "; '" + featureFullPath + "' does not exist")
System.exit(-1)
}
Feature feature = FeatureParser.parseFeature(featureFullPath, featureName)
// first, process any features that the feature includes
for (String featureInclude : feature.getIncludes())
{
this.buildPluginList(featureInclude)
}
// should we also check dependencies?
// complete an initial analysis of the plugins that we will be deploying
for (String plugin : feature.getPlugins())
{
final String featureWithPlugin = this.pluginToFeatureMap[plugin]
if (featureWithPlugin == null)
{
// we have not seen this plugin yet
this.pluginToFeatureMap[plugin] = featureName
}
else
{
// we have seen this plugin before, verify that the plugin
// is not in more than one feature
if (featureWithPlugin != featureName)
{
log.log(java.util.logging.Level.SEVERE,
"Plugin is listed in more than one feature - " + featureWithPlugin + " AND " + featureName)
}
}
if (this.pluginsToDeploy.contains(plugin) == false)
{
this.pluginsToDeploy.add(plugin)
}
}
}
private void init(final String workspaceDirectory)
{
this.edexFeaturesToDeploy = new ArrayList<String>()
final String metadataProjectsDirectory = workspaceDirectory + File.separator +
".metadata" + File.separator + ".plugins" + File.separator + "org.eclipse.core.resources" +
File.separator + ".projects"
for (String project : new File(metadataProjectsDirectory).list())
{
// determine if the project is an EDEX feature.
Matcher matcher = EDEX_FEATURE_PATTERN.matcher(project)
if (matcher.matches() || project == COMMON_BASE_FEATURE)
{
// this is an EDEX feature.
if (blacklistedEdexFeatures.contains(project) == false)
{
this.edexFeaturesToDeploy.add(project)
log.log(java.util.logging.Level.INFO, 'Found EDEX Feature: ' + project)
}
}
final String expectedLocationFile = metadataProjectsDirectory +
File.separator + project + File.separator + ".location"
if (new File(expectedLocationFile).exists())
{
this.catalogProject(expectedLocationFile)
}
}
/*
* previously this was dynamically loaded via spring. However, spring
* was removed from groovy.
*/
this.customPluginDeployers = new ArrayList<IPluginCustomDeployer>()
this.customPluginDeployers.add(new DeployWeb())
this.customPluginDeployers.add(new DeployEdexLocalization())
this.customPluginDeployers.add(new DeployEdexResources())
this.customPluginDeployers.add(new CustomDeploymentRunner())
this.customPluginDeployers.add(new DeployModes())
}
private void catalogProject(String locationFile)
{
byte[] contents = new File(locationFile).getBytes()
final String FILE_ = "file:"
StringBuilder stringBuilder = new StringBuilder()
boolean buildLocationString = false
for (int i = 0; i < contents.length; i++)
{
if (contents[i] < 0 || contents[i] > 127)
{
continue
}
if (buildLocationString)
{
if (contents[i] == 0)
{
// the end of the file path (ideally).
break
}
char c = (char) contents[i]
stringBuilder.append(c)
}
else
{
// first: we want to find the letter 'f'
char c = (char) contents[i]
if ( c == 'f')
{
stringBuilder.append(c)
// we have found 'f'; determine if we have found "file:"
int counter = 0
while (counter < 4)
{
++i
c = (char) contents[i]
stringBuilder.append(c)
++counter
}
if (FILE_ == stringBuilder.toString())
{
buildLocationString = true
}
stringBuilder = new StringBuilder()
}
}
}
String projectLocationString = stringBuilder.toString()
// get the .project file
File projectMetadataFile =
new File(projectLocationString + File.separator + ".project")
// ensure that the project metadata file actually exists
if (projectMetadataFile.exists() == false)
{
return
}
// read the file
def projectMetadataXML = new XmlSlurper().parse(projectMetadataFile)
// extract the plugin name (as Eclipse sees it)
final String projectName = projectMetadataXML.name
ProjectInformation projectInformation = new ProjectInformation()
projectInformation.project = projectName
projectInformation.projectDirectory = new File(projectLocationString).getName()
projectInformation.projectFullLocation = projectLocationString
this.projectInformationMap[projectName] = projectInformation
}
}
DeployInstall deployInstall =
new DeployInstall(args[0], args[1], Boolean.parseBoolean(args[2]),
args[3], args[4], args[5], args[6])
deployInstall.deploy()

View file

@ -0,0 +1,79 @@
<project default="main" basedir=".">
<property name="localization.sites" value="" />
<property name="deploy.python" value="true" />
<!--
The python packages to deploy - provided that
deploy.python is true
-->
<property name="python.packages"
value="pypies:ufpy:dynamicserialize" />
<!-- EDEX root directory - defaults to /awips2/edex -->
<property name="edex.root" value="/awips2/edex" />
<!-- Python root directory - defaults to /awips2/python -->
<property name="python.root" value="/awips2/python" />
<!--
if groovy.path is not manually set, groovy must be
on the PATH.
-->
<property name="groovy.path" value="" />
<property name="architecture" value="x86_64" />
<condition property="requiredPropertiesSet">
<and>
<isset property="workspace_loc" />
</and>
</condition>
<available property="groovyPathSet"
file="${groovy.path}/groovy" type="file" />
<target name="main">
<antcall target="usage" />
<antcall target="deploy-using-specific-groovy" />
<antcall target="deploy-using-environment-groovy" />
</target>
<target name="usage" unless="${requiredPropertiesSet}">
<echo message="Usage: the following parameters are available when running deploy-install.xml." />
<echo message="REQUIRED PARAMETERS:" />
<echo message=" -Dworkspace_loc the location of the Eclipse workspace; use the 'workspace_loc' variable provided by Eclipse" />
<echo message="OPTIONAL PARAMETERS:" />
<echo message=" -Dlocalization.sites a colon delimited list of sites to deploy localization for" />
<echo message=" -Dedex.root the root of the EDEX installation; defaults to /awips2/edex" />
<echo message=" -Ddeploy.python a boolean value {true, false} indicating if python should be deployed" />
<echo message=" -Dpython.root the root of the python installation; defaults to /awips2/python" />
<echo message=" -Dpython.packages a colon delimited list of python packages to deploy; defaults to pypies:ufpy:dynamicserialize" />
<echo message=" -Darchitecture used to override the deployment architecture; use one of: {x86_64, x86}." />
<fail message="All required parameters have not been specified. Refer to the usage message above." />
</target>
<target name="deploy-using-specific-groovy" if="${groovyPathSet}">
<deploy
groovy.executable="${groovy.path}/groovy" />
</target>
<target name="deploy-using-environment-groovy" unless="${groovyPathSet}">
<deploy
groovy.executable="groovy" />
</target>
<macrodef name="deploy">
<attribute name="groovy.executable" />
<sequential>
<exec executable="@{groovy.executable}">
<arg value="-cp" />
<arg value="${basedir}${path.separator}${basedir}/../build.core" />
<arg value="${basedir}/RunDeployInstall.groovy" />
<arg value="${workspace_loc}" />
<arg value="${localization.sites}" />
<arg value="${deploy.python}" />
<arg value="${edex.root}" />
<arg value="${python.root}" />
<arg value="${python.packages}" />
<arg value="${architecture}" />
</exec>
</sequential>
</macrodef>
</project>

View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="customPluginDeployersList" class="java.util.ArrayList">
<constructor-arg>
<list>
<ref bean="customLocalizationDeploy" />
<ref bean="customResourcesDeploy" />
<ref bean="customWebDeploy" />
<ref bean="customDeploymentRunner" />
</list>
</constructor-arg>
</bean>
<bean id="customWebDeploy" class="DeployWeb" />
<bean id="customLocalizationDeploy" class="DeployEdexLocalization" />
<bean id="customResourcesDeploy" class="DeployEdexResources" />
<bean id="customDeploymentRunner" class="CustomDeploymentRunner" />
</beans>

View file

@ -3,8 +3,6 @@ package com.raytheon.uf.viz.collaboration.ui;
import java.util.HashMap;
import java.util.Map;
import javax.swing.plaf.synth.ColorType;
import org.eclipse.swt.graphics.RGB;
import com.raytheon.uf.common.localization.IPathManager;
@ -19,7 +17,7 @@ import com.raytheon.uf.common.serialization.SingleTypeJAXBManager;
import com.raytheon.uf.viz.collaboration.ui.ColorInfoMap.ColorInfo;
/**
* Abstract class collaboration chat coloring configuration managers
* Abstract class for collaboration chat coloring configuration managers
*
* <pre>
*
@ -28,6 +26,7 @@ import com.raytheon.uf.viz.collaboration.ui.ColorInfoMap.ColorInfo;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Nov 13, 2014 3709 mapeters Initial creation.
* Dec 09, 2014 3709 mapeters setColors() sets foreground and background together.
*
* </pre>
*
@ -40,19 +39,16 @@ public abstract class AbstractColorConfigManager {
.createWithoutException(ColorInfoMap.class);
/**
* Set and store the color type of the given user/site to be the given rgb
* at the given file location. If creating new {@link ColorInfo} and setting
* background, set foreground to defaultForeground to prevent it from
* incorrectly defaulting.
* Set and store the given foreground and background colors for the given
* user/site at the given file location.
*
* @param key
* @param type
* @param rgb
* @param defaultForeground
* @param foreground
* @param background
* @param filePath
*/
protected void setColor(String key, ColorType type, RGB rgb,
RGB defaultForeground, String filePath) {
protected void setColors(String key, RGB foreground, RGB background,
String filePath) {
ColorInfoMap colorInfoMap = this.getColorInfoMap();
if (colorInfoMap == null) {
colorInfoMap = new ColorInfoMap();
@ -66,11 +62,11 @@ public abstract class AbstractColorConfigManager {
ColorInfo colorInfo = colors.get(key);
if (colorInfo != null) {
colorInfo.setColor(type, rgb, defaultForeground);
colorInfo.setColors(foreground, background);
} else {
ColorInfo color = new ColorInfo();
color.setColor(type, rgb, defaultForeground);
colors.put(key, color);
ColorInfo newColorInfo = new ColorInfo();
newColorInfo.setColors(foreground, background);
colors.put(key, newColorInfo);
}
IPathManager pathMgr = PathManagerFactory.getPathManager();
@ -124,8 +120,7 @@ public abstract class AbstractColorConfigManager {
return null;
}
public abstract void setColor(String key, ColorType type, RGB rgb,
RGB defaultForeground);
public abstract void setColors(String key, RGB foreground, RGB background);
public abstract ColorInfo getColor(String key);

View file

@ -104,6 +104,7 @@ import com.raytheon.uf.viz.collaboration.ui.actions.ChangeRoleAction;
import com.raytheon.uf.viz.collaboration.ui.actions.ChangeSiteAction;
import com.raytheon.uf.viz.collaboration.ui.actions.ChangeStatusAction;
import com.raytheon.uf.viz.collaboration.ui.actions.ChangeStatusMessageAction;
import com.raytheon.uf.viz.collaboration.ui.actions.ChangeTextColorAction;
import com.raytheon.uf.viz.collaboration.ui.actions.CreateSessionAction;
import com.raytheon.uf.viz.collaboration.ui.actions.DeleteGroupAction;
import com.raytheon.uf.viz.collaboration.ui.actions.DisplayFeedAction;
@ -162,6 +163,7 @@ import com.raytheon.viz.ui.views.CaveWorkbenchPageManager;
* Oct 08, 2014 3705 bclement added room search and bookmarking
* Oct 14, 2014 3709 mapeters Added change background/foreground color actions to menu.
* Nov 14, 2014 3709 mapeters Removed change background/foreground color actions from menu.
* Dec 08, 2014 3709 mapeters Added MB3 change user text color actions to contacts list.
*
* </pre>
*
@ -363,7 +365,7 @@ public class CollaborationGroupView extends CaveFloatingView implements
mgr.add(roomSearchAction);
mgr.add(new Separator());
mgr.add(new ChangeFontAction());
mgr.add(new Separator());
mgr.add(new Separator("afterFont"));
mgr.add(new ChangeStatusAction());
mgr.add(new ChangeStatusMessageAction());
mgr.add(new ChangePasswordAction());
@ -461,6 +463,9 @@ public class CollaborationGroupView extends CaveFloatingView implements
manager.add(new SendSubReqAction(entry));
}
manager.add(new AddNotifierAction(this));
manager.add(new Separator());
manager.add(new ChangeTextColorAction(user.getName(), false, false,
null, new UserColorConfigManager()));
} else if (o instanceof UserId) {
// the user
UserId user = (UserId) o;
@ -469,6 +474,9 @@ public class CollaborationGroupView extends CaveFloatingView implements
UserId me = connection.getUser();
if (me.isSameUser(user)) {
createMenu(manager);
manager.insertBefore("afterFont", new ChangeTextColorAction(
user.getName(), true, true, null,
new UserColorConfigManager()));
}
} else if (o instanceof RosterGroup || o instanceof SharedGroup) {
Action inviteAction = new InviteAction(getSelectedUsers());

View file

@ -21,13 +21,13 @@ package com.raytheon.uf.viz.collaboration.ui;
import java.util.Map;
import javax.swing.plaf.synth.ColorType;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.RGB;
/**
@ -37,10 +37,12 @@ import org.eclipse.swt.graphics.RGB;
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Nov 13, 2014 3709 mapeters Initial creation.
* Nov 26, 2014 3709 mapeters Renamed from UserColorInformation, added fgSet getter.
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Nov 13, 2014 3709 mapeters Initial creation.
* Nov 26, 2014 3709 mapeters Renamed from UserColorInformation, added fgSet getter.
* Dec 08, 2014 3709 mapeters Removed fgSet and individual colors' getters/setters,
* set foreground and background together.
*
* </pre>
*
@ -72,12 +74,6 @@ public class ColorInfoMap {
@XmlAccessorType(XmlAccessType.NONE)
public static class ColorInfo {
/**
* tells {@link #setColor()} when to use defaultForeground
*/
@XmlAttribute
private boolean fgSet;
@XmlAttribute
private int fgRed;
@ -87,90 +83,24 @@ public class ColorInfoMap {
@XmlAttribute
private int fgBlue;
/**
* background should default to white
*/
@XmlAttribute
private int bgRed = 255;
private int bgRed;
@XmlAttribute
private int bgGreen = 255;
private int bgGreen;
@XmlAttribute
private int bgBlue = 255;
private int bgBlue;
public ColorInfo() {
}
/**
* @param type
* @return the red
*/
public int getRed(ColorType type) {
return type == ColorType.FOREGROUND ? fgRed : bgRed;
}
/**
* @param type
* @param red
* the red to set
*/
public void setRed(ColorType type, int red) {
if (type == ColorType.FOREGROUND) {
this.fgRed = red;
} else {
this.bgRed = red;
}
}
/**
* @param type
* @return the green
*/
public int getGreen(ColorType type) {
return type == ColorType.FOREGROUND ? fgGreen : bgGreen;
}
/**
* @param type
* @param green
* the green to set
*/
public void setGreen(ColorType type, int green) {
if (type == ColorType.FOREGROUND) {
this.fgGreen = green;
} else {
this.bgGreen = green;
}
}
/**
* @param type
* @return the blue
*/
public int getBlue(ColorType type) {
return type == ColorType.FOREGROUND ? fgBlue : bgBlue;
}
/**
* @param type
* @param blue
* the blue to set
*/
public void setBlue(ColorType type, int blue) {
if (type == ColorType.FOREGROUND) {
this.fgBlue = blue;
} else {
this.bgBlue = blue;
}
}
/**
* @param type
* @return the RGB color of the given type
*/
public RGB getColor(ColorType type) {
if (type == ColorType.FOREGROUND) {
public RGB getColor(int type) {
if (type == SWT.FOREGROUND) {
return new RGB(fgRed, fgGreen, fgBlue);
} else {
return new RGB(bgRed, bgGreen, bgBlue);
@ -178,38 +108,17 @@ public class ColorInfoMap {
}
/**
* Set the color of the given type to the given rgb
*
* @param type
* @param rgb
* @param defaultForeground
* @param fg
* @param bg
*/
public void setColor(ColorType type, RGB rgb, RGB defaultForeground) {
if (type == ColorType.FOREGROUND) {
fgRed = rgb.red;
fgGreen = rgb.green;
fgBlue = rgb.blue;
fgSet = true;
} else {
bgRed = rgb.red;
bgGreen = rgb.green;
bgBlue = rgb.blue;
if (!fgSet) {
/*
* if creating new UserColor, set fgColor to default
* foreground color, otherwise it defaults to black
*/
setColor(ColorType.FOREGROUND, defaultForeground, null);
fgSet = false;
}
}
}
public void setColors(RGB fg, RGB bg) {
fgRed = fg.red;
fgGreen = fg.green;
fgBlue = fg.blue;
bgRed = bg.red;
bgGreen = bg.green;
bgBlue = bg.blue;
/**
* @return whether the foreground has been set
*/
public boolean isForegroundSet() {
return fgSet;
}
}
}

View file

@ -19,8 +19,6 @@
**/
package com.raytheon.uf.viz.collaboration.ui;
import javax.swing.plaf.synth.ColorType;
import org.eclipse.swt.graphics.RGB;
import com.raytheon.uf.common.localization.IPathManager;
@ -39,6 +37,7 @@ import com.raytheon.uf.viz.collaboration.ui.ColorInfoMap.ColorInfo;
* Oct 10, 2014 3708 bclement Moved color methods from SiteConfigurationManager
* Nov 26, 2014 3709 mapeters Abstracted out code to {@link AbstractColorConfigManager},
* renamed from SiteColorConfigManager.
* Dec 08, 2014 3709 mapeters Set foreground and background colors together.
*
* </pre>
*
@ -53,17 +52,16 @@ public class FeedColorConfigManager extends AbstractColorConfigManager {
private static ColorInfoMap colorInfoMap;
/**
* Set and store the color type of the given site to be the given rgb.
* Set and store the given colors for the given site.
*
* @param site
* @param type
* @param rgb
* @param defaultForeground
* @param foreground
* @param background
*/
@Override
public synchronized void setColor(String site,
ColorType type, RGB rgb, RGB defaultForeground) {
super.setColor(site, type, rgb, defaultForeground, FILE_PATH);
public synchronized void setColors(String site, RGB foreground,
RGB background) {
super.setColors(site, foreground, background, FILE_PATH);
}
/**

View file

@ -0,0 +1,291 @@
/**
* 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.collaboration.ui;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Layout;
import org.eclipse.swt.widgets.Shell;
import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
import com.raytheon.viz.ui.dialogs.colordialog.ColorWheelComp;
import com.raytheon.viz.ui.dialogs.colordialog.IColorWheelChange;
/**
* A dialog that displays a label with settable foreground and background colors
* using a color control.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Dec 4, 2014 3709 lvenable Initial creation
*
* </pre>
*
* @author lvenable
* @version 1.0
*/
public class ForegroundBackgroundColorDlg extends CaveSWTDialog implements
IColorWheelChange {
/** Color wheel composite. */
private ColorWheelComp colorWheelComp;
/** Foreground color. */
private Color foregroundClr = null;
/** Background color. */
private Color backgroundClr = null;
/** Foreground/Background label control. */
private Label fgbgLabel = null;
/** Fond for the foreground/background label. */
private Font labelFont = null;
private Button foregroundRdo;
/**
* Constructor.
*
* @param parentShell
* Parent shell.
*/
public ForegroundBackgroundColorDlg(Shell parentShell) {
this(parentShell, null, null);
}
/**
* Constructor.
*
* @param parentShell
* Parent shell.
* @param fgRGB
* Foreground RGB.
* @param bgRGB
* Background RGB.
*/
public ForegroundBackgroundColorDlg(Shell parentShell, RGB fgRGB, RGB bgRGB) {
super(parentShell, SWT.DIALOG_TRIM | SWT.MIN, CAVE.DO_NOT_BLOCK
| CAVE.PERSPECTIVE_INDEPENDENT);
setText("Foreground/Background Color Chooser");
/*
* If the foreground RGB is null then set it to a blue color.
*/
if (fgRGB == null) {
foregroundClr = new Color(parentShell.getDisplay(), new RGB(0, 0,
255));
} else {
foregroundClr = new Color(parentShell.getDisplay(), fgRGB);
}
/*
* If the background RGB is null then set it to a white color.
*/
if (bgRGB == null) {
backgroundClr = new Color(parentShell.getDisplay(), new RGB(255,
255, 255));
} else {
backgroundClr = new Color(parentShell.getDisplay(), bgRGB);
}
}
@Override
protected Layout constructShellLayout() {
GridLayout mainLayout = new GridLayout(1, false);
mainLayout.verticalSpacing = 3;
return mainLayout;
}
@Override
protected Object constructShellLayoutData() {
GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
return gd;
}
@Override
protected void disposed() {
if (foregroundClr != null) {
foregroundClr.dispose();
}
if (backgroundClr != null) {
backgroundClr.dispose();
}
if (labelFont != null) {
labelFont.dispose();
}
}
@Override
protected void initializeComponents(Shell shell) {
createColorWheelControl();
createColorControls();
addSeparator();
createBottomButtons();
colorWheelComp.setColor(foregroundClr.getRGB());
}
/**
* Create the color wheel controls.
*/
private void createColorWheelControl() {
colorWheelComp = new ColorWheelComp(shell, this, " Color Chooser: ",
true);
}
/**
* Create the color controls.
*/
private void createColorControls() {
Composite colorControlComp = new Composite(shell, SWT.NONE);
colorControlComp.setLayout(new GridLayout(3, false));
colorControlComp.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT,
true, false));
/*
* Foreground/background radio buttons.
*/
foregroundRdo = new Button(colorControlComp, SWT.RADIO);
foregroundRdo.setText("Foreground Color");
foregroundRdo.setSelection(true);
foregroundRdo.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
colorWheelComp.setColor(foregroundClr.getRGB());
}
});
GridData gd = new GridData();
gd.horizontalIndent = 13;
Button backgroundRdo = new Button(colorControlComp, SWT.RADIO);
backgroundRdo.setText("Background Color");
backgroundRdo.setLayoutData(gd);
backgroundRdo.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
colorWheelComp.setColor(backgroundClr.getRGB());
}
});
/*
* Label displaying the foreground/background colors.
*/
gd = new GridData();
gd.horizontalIndent = 13;
fgbgLabel = new Label(colorControlComp, SWT.BORDER);
FontData fd = fgbgLabel.getFont().getFontData()[0];
fd.setHeight(16);
fd.setStyle(SWT.BOLD);
labelFont = new Font(getDisplay(), fd);
fgbgLabel.setFont(labelFont);
fgbgLabel.setText(" Sample Text ");
fgbgLabel.setLayoutData(gd);
fgbgLabel.setForeground(foregroundClr);
fgbgLabel.setBackground(backgroundClr);
}
/**
* Create the bottom OK/Cancel buttons.
*/
private void createBottomButtons() {
Composite buttonComp = new Composite(shell, SWT.NONE);
buttonComp.setLayout(new GridLayout(2, false));
buttonComp.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true,
false));
int buttonWidth = 70;
GridData gd = new GridData(SWT.RIGHT, SWT.DEFAULT, true, false);
gd.widthHint = buttonWidth;
Button okBtn = new Button(buttonComp, SWT.PUSH);
okBtn.setText(" OK ");
okBtn.setLayoutData(gd);
okBtn.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
RGB[] rgbArray = new RGB[] { foregroundClr.getRGB(),
backgroundClr.getRGB() };
setReturnValue(rgbArray);
close();
}
});
gd = new GridData(SWT.LEFT, SWT.DEFAULT, true, false);
gd.widthHint = buttonWidth;
Button cancelBtn = new Button(buttonComp, SWT.PUSH);
cancelBtn.setText(" Cancel ");
cancelBtn.setLayoutData(gd);
cancelBtn.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
setReturnValue(null);
close();
}
});
}
/**
* Add a separator line to the dialog.
*/
private void addSeparator() {
GridData gd = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
Label sepLbl = new Label(shell, SWT.SEPARATOR | SWT.HORIZONTAL);
sepLbl.setLayoutData(gd);
}
/*
* (non-Javadoc)
*
* @see
* com.raytheon.viz.ui.dialogs.colordialog.IColorWheelChange#colorChange
* (org.eclipse.swt.graphics.RGB, java.lang.String)
*/
@Override
public void colorChange(RGB rgb, String colorWheelTitle) {
if (foregroundRdo.getSelection()) {
foregroundClr.dispose();
foregroundClr = new Color(getDisplay(), rgb);
fgbgLabel.setForeground(foregroundClr);
} else {
backgroundClr.dispose();
backgroundClr = new Color(getDisplay(), rgb);
fgbgLabel.setBackground(backgroundClr);
}
}
}

View file

@ -19,8 +19,6 @@
**/
package com.raytheon.uf.viz.collaboration.ui;
import javax.swing.plaf.synth.ColorType;
import org.eclipse.swt.graphics.RGB;
import com.raytheon.uf.common.localization.IPathManager;
@ -37,6 +35,7 @@ import com.raytheon.uf.viz.collaboration.ui.ColorInfoMap.ColorInfo;
* ------------ ---------- ----------- --------------------------
* Nov 13, 2014 3709 mapeters Initial creation.
* Nov 26, 2014 3709 mapeters Abstracted out code to {@link AbstractColorConfigManager}.
* Dec 08, 2014 3709 mapeters Set foreground and background colors together.
*
* </pre>
*
@ -51,17 +50,16 @@ public class UserColorConfigManager extends AbstractColorConfigManager {
private static ColorInfoMap colorInfoMap;
/**
* Set and store the color type of the given user to be the given rgb.
* Set and store the given colors for the given user.
*
* @param user
* @param type
* @param rgb
* @param defaultForeground
* @param foreground
* @param background
*/
@Override
public synchronized void setColor(String user,
ColorType type, RGB rgb, RGB defaultForeground) {
super.setColor(user, type, rgb, defaultForeground, FILE_PATH);
public synchronized void setColors(String user, RGB foreground,
RGB background) {
super.setColors(user, foreground, background, FILE_PATH);
}
/**

View file

@ -0,0 +1,137 @@
package com.raytheon.uf.viz.collaboration.ui.actions;
/**
* 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 org.eclipse.jface.action.Action;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Display;
import com.raytheon.uf.viz.collaboration.ui.AbstractColorConfigManager;
import com.raytheon.uf.viz.collaboration.ui.Activator;
import com.raytheon.uf.viz.collaboration.ui.ColorInfoMap.ColorInfo;
import com.raytheon.uf.viz.collaboration.ui.FeedColorConfigManager;
import com.raytheon.uf.viz.collaboration.ui.ForegroundBackgroundColorDlg;
import com.raytheon.uf.viz.collaboration.ui.UserColorConfigManager;
import com.raytheon.uf.viz.core.icon.IconUtil;
import com.raytheon.viz.ui.dialogs.ICloseCallback;
/**
* Action to change the foreground and background chat colors of a selected
* user/site.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 12/02/14 3709 mapeters Initial creation.
* 12/09/14 3709 mapeters Uses {@link ForegroundBackgroundColorDlg}, renamed from
* ChangeUserColorAction, support both user and site colors.
*
* </pre>
*
* @author mapeters
* @version 1.0
*/
public class ChangeTextColorAction extends Action {
private final String key;
private RGB defaultForeground;
private AbstractColorConfigManager colorConfigManager;
/**
* Constructor for changing user colors.
*
* @param user
* @param me
* @param displayName
* @param defaultForeground
* @param colorConfigManager
*/
public ChangeTextColorAction(String user, boolean me, boolean displayName,
RGB defaultForeground, UserColorConfigManager colorConfigManager) {
this("Change " + (displayName ? (me ? "Your" : (user + "'s")) : "User")
+ " Text Colors...", user, defaultForeground,
colorConfigManager);
}
/**
* Constructor for changing site colors.
*
* @param site
* @param defaultForeground
* @param colorConfigManager
*/
public ChangeTextColorAction(String site, RGB defaultForeground,
FeedColorConfigManager colorConfigManager) {
this("Change Site Text Colors...", site, defaultForeground,
colorConfigManager);
}
private ChangeTextColorAction(String text, String key,
RGB defaultForeground, AbstractColorConfigManager colorConfigManager) {
super(text, IconUtil.getImageDescriptor(Activator.getDefault()
.getBundle(), "change_color.gif"));
this.key = key;
this.defaultForeground = defaultForeground;
this.colorConfigManager = colorConfigManager;
}
@Override
public void run() {
ColorInfo colorInfo = colorConfigManager.getColor(key);
RGB background;
RGB foreground;
if (colorInfo != null) {
background = colorInfo.getColor(SWT.BACKGROUND);
foreground = colorInfo.getColor(SWT.FOREGROUND);
} else {
/*
* Set dialog to display default colors (if defaultForeground is
* null, ForegroundBackgroundColorDlg uses blue)
*/
background = new RGB(255, 255, 255);
foreground = defaultForeground;
}
ForegroundBackgroundColorDlg dialog = new ForegroundBackgroundColorDlg(
Display.getCurrent().getActiveShell(), foreground, background);
dialog.setCloseCallback(new ICloseCallback() {
@Override
public void dialogClosed(Object returnValue) {
if (returnValue == null) {
return;
}
if (returnValue instanceof RGB[]) {
RGB[] colors = (RGB[]) returnValue;
colorConfigManager.setColors(key, colors[0], colors[1]);
}
}
});
dialog.open();
}
}

View file

@ -142,10 +142,9 @@ public class PeerToPeerChatAction extends Action {
if (p2pView.getPeer() == null) {
p2pView.setPeer(user);
/*
* add color change actions to P2P right click menu upon first
* creation of P2P chat.
* once peer is set, add action to change peer text colors
*/
p2pView.addChangeUserColorActions();
p2pView.addChangePeerColorAction();
}
return p2pView;
} catch (PartInitException e) {

View file

@ -98,6 +98,7 @@ import com.raytheon.viz.ui.views.CaveFloatingView;
* Nov 14, 2014 3709 mapeters Changing foreground/background colors no longer
* implemented here, added messagesTextMenuMgr.
* Nov 26, 2014 3709 mapeters Added {@link #getColorFromRGB()}.
* Dec 08, 2014 3709 mapeters Removed messagesTextMenuMgr.
* </pre>
*
* @author rferrel
@ -127,8 +128,6 @@ public abstract class AbstractSessionView<T extends IUser> extends
/** Font used with the messagesText control. */
private Font messagesTextFont;
protected MenuManager messagesTextMenuMgr;
private StyledText composeText;
protected SessionMsgArchive msgArchive;
@ -230,9 +229,9 @@ public abstract class AbstractSessionView<T extends IUser> extends
// adding a menu item so that Paste can be found when clicking on the
// composeText styledtext
messagesTextMenuMgr = new MenuManager();
messagesTextMenuMgr.add(new CopyTextAction(messagesText));
Menu menu = messagesTextMenuMgr.createContextMenu(messagesText);
MenuManager menuMgr = new MenuManager();
menuMgr.add(new CopyTextAction(messagesText));
Menu menu = menuMgr.createContextMenu(messagesText);
messagesText.setMenu(menu);
}

View file

@ -106,6 +106,7 @@ import com.raytheon.viz.ui.input.EditableManager;
* Apr 15, 2014 2822 bclement only allow transfer leader if participant is using shared display
* May 05, 2014 3076 bclement added clear all action
* Jun 30, 2014 1798 bclement added disableCurrentLayer()
* Dev 02, 2014 3709 mapeters added {@link #initComponents()} override
*
* </pre>
*
@ -234,6 +235,19 @@ public class CollaborationSessionView extends SessionView implements
}
}
/*
* (non-Javadoc)
*
* @see
* com.raytheon.uf.viz.collaboration.ui.session.SessionView#initComponents
* (org.eclipse.swt.widgets.Composite)
*/
@Override
protected void initComponents(Composite parent) {
enableUserColors = false;
super.initComponents(parent);
}
@Override
protected void createActions() {
super.createActions();

View file

@ -24,10 +24,8 @@ import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.List;
import javax.swing.plaf.synth.ColorType;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
@ -35,7 +33,6 @@ import org.eclipse.swt.custom.StyleRange;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.ColorDialog;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.jivesoftware.smack.packet.Presence.Type;
@ -52,13 +49,12 @@ import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationC
import com.raytheon.uf.viz.collaboration.comm.provider.user.RosterItem;
import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
import com.raytheon.uf.viz.collaboration.comm.provider.user.VenueParticipant;
import com.raytheon.uf.viz.collaboration.ui.Activator;
import com.raytheon.uf.viz.collaboration.ui.ColorInfoMap.ColorInfo;
import com.raytheon.uf.viz.collaboration.ui.UserColorConfigManager;
import com.raytheon.uf.viz.collaboration.ui.actions.ChangeTextColorAction;
import com.raytheon.uf.viz.collaboration.ui.actions.PrintLogActionContributionItem;
import com.raytheon.uf.viz.collaboration.ui.notifier.NotifierTask;
import com.raytheon.uf.viz.collaboration.ui.notifier.NotifierTools;
import com.raytheon.uf.viz.core.icon.IconUtil;
import com.raytheon.uf.viz.core.sounds.SoundUtil;
/**
@ -78,6 +74,7 @@ import com.raytheon.uf.viz.core.sounds.SoundUtil;
* Nov 14, 2014 3709 mapeters support foregound/background color
* settings for each user
* Nov 26, 2014 3709 mapeters add colorConfigManager, use parent's colors map
* Dec 08, 2014 3709 mapeters move color change actions to menu bar.
*
* </pre>
*
@ -236,10 +233,8 @@ public class PeerToPeerView extends AbstractSessionView<IUser> implements
ColorInfo userColor = colorConfigManager.getColor(userId
.getName());
if (userColor != null) {
fgColor = getColorFromRGB(userColor
.getColor(ColorType.FOREGROUND));
bgColor = getColorFromRGB(userColor
.getColor(ColorType.BACKGROUND));
fgColor = getColorFromRGB(userColor.getColor(SWT.FOREGROUND));
bgColor = getColorFromRGB(userColor.getColor(SWT.BACKGROUND));
}
}
@ -382,67 +377,32 @@ public class PeerToPeerView extends AbstractSessionView<IUser> implements
}
}
@Override
public void createPartControl(Composite parent) {
super.createPartControl(parent);
createDropDownMenu();
}
/**
* add right-click menu options for changing foreground/background colors
* for each user
* Initialize drop-down menu with action to change user text colors.
*/
public void addChangeUserColorActions() {
private void createDropDownMenu() {
IMenuManager mgr = getViewSite().getActionBars().getMenuManager();
String myName = CollaborationConnection.getConnection().getUser()
.getName();
String peerName = peer.getName();
messagesTextMenuMgr.add(new ChangeUserColorAction(ColorType.BACKGROUND,
myName, true));
messagesTextMenuMgr.add(new ChangeUserColorAction(ColorType.FOREGROUND,
myName, true));
messagesTextMenuMgr.add(new ChangeUserColorAction(ColorType.BACKGROUND,
peerName, false));
messagesTextMenuMgr.add(new ChangeUserColorAction(ColorType.FOREGROUND,
peerName, false));
RGB defaultUserForeground = DEFAULT_USER_FOREGROUND_COLOR.getRGB();
mgr.add(new ChangeTextColorAction(myName, true, true,
defaultUserForeground, colorConfigManager));
}
/*
* action for changing foreground/background color for a given user
/**
* Add action to change peer text colors to drop-down menu once peer is set.
*/
private class ChangeUserColorAction extends Action {
private ColorType type;
private String user;
private boolean me;
private ChangeUserColorAction(ColorType type, String user,
boolean me) {
super("Change " + (me ? "Your " : (user + "'s "))
+ type.toString() + " Color...", IconUtil
.getImageDescriptor(Activator.getDefault().getBundle(),
"change_color.gif"));
this.type = type;
this.user = user;
this.me = me;
}
@Override
public void run() {
ColorDialog dialog = new ColorDialog(Display.getCurrent()
.getActiveShell());
RGB defaultForeground = me ? DEFAULT_USER_FOREGROUND_COLOR.getRGB()
: DEFAULT_PEER_FOREGROUND_COLOR.getRGB();
ColorInfo colorInfo = colorConfigManager.getColor(user);
if (colorInfo != null) {
dialog.setRGB(colorInfo.getColor(type));
} else if (type == ColorType.FOREGROUND) {
/*
* set the dialog to display default foreground color as
* currently selected
*/
dialog.setRGB(defaultForeground);
}
RGB rgb = dialog.open();
if (rgb != null) {
colorConfigManager.setColor(user, type, rgb,
defaultForeground);
}
}
public void addChangePeerColorAction() {
IMenuManager mgr = getViewSite().getActionBars().getMenuManager();
String peerName = peer.getName();
RGB defaultPeerForeground = DEFAULT_PEER_FOREGROUND_COLOR.getRGB();
mgr.add(new ChangeTextColorAction(peerName, false, true,
defaultPeerForeground, colorConfigManager));
}
}

View file

@ -22,8 +22,6 @@ package com.raytheon.uf.viz.collaboration.ui.session;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import javax.swing.plaf.synth.ColorType;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
@ -34,9 +32,7 @@ import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyleRange;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.ColorDialog;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.jivesoftware.smack.packet.Presence;
import com.google.common.eventbus.Subscribe;
@ -48,8 +44,8 @@ import com.raytheon.uf.viz.collaboration.ui.Activator;
import com.raytheon.uf.viz.collaboration.ui.ColorInfoMap.ColorInfo;
import com.raytheon.uf.viz.collaboration.ui.FeedColorConfigManager;
import com.raytheon.uf.viz.collaboration.ui.SiteConfigurationManager;
import com.raytheon.uf.viz.collaboration.ui.actions.ChangeTextColorAction;
import com.raytheon.uf.viz.collaboration.ui.prefs.CollabPrefConstants;
import com.raytheon.uf.viz.core.icon.IconUtil;
/**
* Built for the session in which everyone joins
@ -78,6 +74,7 @@ import com.raytheon.uf.viz.core.icon.IconUtil;
* Apr 22, 2014 3038 bclement added initialized flag to differentiate between roster population and new joins
* Oct 10, 2014 3708 bclement SiteConfigurationManager refactor
* Nov 26, 2014 3709 mapeters support foreground/background color preferences for each site
* Dec 08, 2014 3709 mapeters Removed ChangeSiteColorAction, uses {@link ChangeTextColorAction}.
*
* </pre>
*
@ -95,10 +92,6 @@ public class SessionFeedView extends SessionView {
private Action userRemoveSiteAction;
private Action bgColorChangeAction;
private Action fgColorChangeAction;
private static FeedColorConfigManager colorConfigManager;
private String actingSite;
@ -129,6 +122,7 @@ public class SessionFeedView extends SessionView {
*/
@Override
protected void initComponents(Composite parent) {
enableUserColors = false;
super.initComponents(parent);
colorConfigManager = new FeedColorConfigManager();
@ -150,10 +144,6 @@ public class SessionFeedView extends SessionView {
protected void createActions() {
super.createActions();
bgColorChangeAction = new ChangeSiteColorAction(ColorType.BACKGROUND);
fgColorChangeAction = new ChangeSiteColorAction(ColorType.FOREGROUND);
autoJoinAction = new Action(CollabPrefConstants.AUTO_JOIN, SWT.TOGGLE) {
@Override
public void run() {
@ -208,9 +198,11 @@ public class SessionFeedView extends SessionView {
@Override
protected void fillContextMenu(IMenuManager manager) {
super.fillContextMenu(manager);
manager.add(bgColorChangeAction);
manager.add(fgColorChangeAction);
String site = getSelectedSite();
RGB defaultForeground = colorManager
.getColorForUser(getSelectedParticipant());
manager.add(new ChangeTextColorAction(site, defaultForeground,
colorConfigManager));
if (!SiteConfigurationManager.isVisible(actingSite, site)) {
userAddSiteAction
.setText("Show Messages from " + getSelectedSite());
@ -300,12 +292,8 @@ public class SessionFeedView extends SessionView {
if (site != null) {
ColorInfo siteColor = colorConfigManager.getColor(site);
if (siteColor != null) {
if (siteColor.isForegroundSet()) {
fgColor = getColorFromRGB(siteColor
.getColor(ColorType.FOREGROUND));
}
bgColor = getColorFromRGB(siteColor
.getColor(ColorType.BACKGROUND));
fgColor = getColorFromRGB(siteColor.getColor(SWT.FOREGROUND));
bgColor = getColorFromRGB(siteColor.getColor(SWT.BACKGROUND));
}
}
super.styleAndAppendText(sb, offset, name, userId, ranges, fgColor,
@ -483,46 +471,4 @@ public class SessionFeedView extends SessionView {
super.participantDeparted(participant, description);
}
}
/*
* action for changing foreground/background color for a selected site
*/
private class ChangeSiteColorAction extends Action {
private ColorType type;
private ChangeSiteColorAction(ColorType type) {
super("Change Site " + type.toString() + " Color...", IconUtil
.getImageDescriptor(Activator.getDefault().getBundle(),
"change_color.gif"));
this.type = type;
}
@Override
public void run() {
ColorDialog dialog = new ColorDialog(Display.getCurrent()
.getActiveShell());
RGB defaultForeground = colorManager
.getColorForUser(getSelectedParticipant());
String site = getSelectedSite();
ColorInfo colorInfo = colorConfigManager.getColor(site);
if (colorInfo != null
&& (type != ColorType.FOREGROUND || colorInfo.isForegroundSet())) {
/*
* don't set dialog from colorInfo if null or type is foreground
* and foreground hasn't been set (use default)
*/
dialog.setRGB(colorInfo.getColor(type));
} else if (type == ColorType.FOREGROUND) {
dialog.setRGB(defaultForeground);
}
RGB rgb = dialog.open();
if (rgb != null) {
colorConfigManager.setColor(site, type, rgb,
defaultForeground);
}
usersTable.refresh();
}
}
}

View file

@ -81,6 +81,9 @@ import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
import com.raytheon.uf.viz.collaboration.comm.provider.user.VenueParticipant;
import com.raytheon.uf.viz.collaboration.display.data.SessionColorManager;
import com.raytheon.uf.viz.collaboration.ui.Activator;
import com.raytheon.uf.viz.collaboration.ui.ColorInfoMap.ColorInfo;
import com.raytheon.uf.viz.collaboration.ui.UserColorConfigManager;
import com.raytheon.uf.viz.collaboration.ui.actions.ChangeTextColorAction;
import com.raytheon.uf.viz.collaboration.ui.actions.PeerToPeerChatAction;
import com.raytheon.uf.viz.collaboration.ui.actions.PrintLogActionContributionItem;
import com.raytheon.uf.viz.collaboration.ui.prefs.CollabPrefConstants;
@ -115,6 +118,7 @@ import com.raytheon.uf.viz.core.sounds.SoundUtil;
* Jul 03, 2014 3342 bclement added count to participants label
* Nov 26, 2014 3709 mapeters added styleAndAppendText() taking fg and bg colors,
* use parent's colors map.
* Dec 02, 2014 3709 mapeters added color actions for group chats without shared display.
*
* </pre>
*
@ -148,6 +152,10 @@ public class SessionView extends AbstractSessionView<VenueParticipant>
protected SessionColorManager colorManager;
private static UserColorConfigManager colorConfigManager;
protected boolean enableUserColors = true;
public SessionView() {
super();
}
@ -169,6 +177,9 @@ public class SessionView extends AbstractSessionView<VenueParticipant>
protected void initComponents(Composite parent) {
initColorManager();
super.initComponents(parent);
if (enableUserColors) {
colorConfigManager = new UserColorConfigManager();
}
// unfortunately this code cannot be a part of createToolbarButton
// because I cannot instantiate the ACI until after the messagesText
@ -218,9 +229,17 @@ public class SessionView extends AbstractSessionView<VenueParticipant>
IStructuredSelection selection = (IStructuredSelection) usersTable
.getSelection();
VenueParticipant entry = (VenueParticipant) selection.getFirstElement();
if (!entry.isSameUser(session.getUserID())) {
boolean me = entry.isSameUser(session.getUserID());
if (!me) {
manager.add(new PeerToPeerChatAction(entry));
}
if (enableUserColors) {
// add color actions if in group chat room without shared display
String user = entry.getName();
RGB defaultForeground = colorManager.getColorForUser(entry);
manager.add(new ChangeTextColorAction(user, me, me,
defaultForeground, colorConfigManager));
}
}
@Subscribe
@ -484,6 +503,14 @@ public class SessionView extends AbstractSessionView<VenueParticipant>
protected void styleAndAppendText(StringBuilder sb, int offset,
String name, VenueParticipant userId, List<StyleRange> ranges,
Color fgColor, Color bgColor, String subject) {
if (enableUserColors && name != null) {
// Color text by user if in group chat room without shared display
ColorInfo userColor = colorConfigManager.getColor(name);
if (userColor != null) {
fgColor = getColorFromRGB(userColor.getColor(SWT.FOREGROUND));
bgColor = getColorFromRGB(userColor.getColor(SWT.BACKGROUND));
}
}
StyleRange range = new StyleRange(messagesText.getCharCount(),
sb.length(), fgColor, null, SWT.NORMAL);
ranges.add(range);

View file

@ -3,7 +3,6 @@ Bundle-ManifestVersion: 2
Bundle-Name: Tcs Plug-in
Bundle-SymbolicName: com.raytheon.uf.viz.tcs
Bundle-Version: 1.14.0.qualifier
Bundle-Activator: com.raytheon.uf.viz.tcs.Activator
Bundle-Vendor: RAYTHEON
Require-Bundle: org.eclipse.ui,
com.raytheon.uf.viz.core,
@ -35,5 +34,4 @@ Import-Package: com.raytheon.uf.common.dataplugin,
org.eclipse.swt.graphics,
org.eclipse.ui.plugin,
org.osgi.framework
Export-Package: com.raytheon.uf.viz.tcs,
com.raytheon.uf.viz.tcs.rsc
Export-Package: com.raytheon.uf.viz.tcs.rsc

View file

@ -1,69 +0,0 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
*
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
*
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8
* Omaha, NE 68106
* 402.291.0100
*
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
package com.raytheon.uf.viz.tcs;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
/**
* The activator class controls the plug-in life cycle
*/
public class Activator extends AbstractUIPlugin {
// The plug-in ID
public static final String PLUGIN_ID = "com.raytheon.uf.viz.tcs";
// The shared instance
private static Activator plugin;
/**
* The constructor
*/
public Activator() {
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext context) throws Exception {
plugin = null;
super.stop(context);
}
/**
* Returns the shared instance
*
* @return the shared instance
*/
public static Activator getDefault() {
return plugin;
}
}

View file

@ -34,8 +34,6 @@ import com.raytheon.uf.viz.core.exception.VizException;
import com.raytheon.uf.viz.core.rsc.AbstractRequestableResourceData;
import com.raytheon.uf.viz.core.rsc.AbstractVizResource;
import com.raytheon.uf.viz.core.rsc.LoadProperties;
import com.raytheon.uf.viz.core.status.StatusConstants;
import com.raytheon.uf.viz.tcs.Activator;
/**
*
@ -55,7 +53,9 @@ import com.raytheon.uf.viz.tcs.Activator;
@XmlAccessorType(XmlAccessType.NONE)
@XmlType(name = "tcsResourceData")
public class TCSResourceData extends AbstractRequestableResourceData {
private static final transient IUFStatusHandler statusHandler = UFStatus.getHandler(TCSResourceData.class);
private static final transient IUFStatusHandler statusHandler = UFStatus
.getHandler(TCSResourceData.class);
@XmlAttribute
protected String plotSource = null;

View file

@ -2,8 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Thinclient Alertviz
Bundle-SymbolicName: com.raytheon.uf.viz.thinclient.alertviz;singleton:=true
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: com.raytheon.uf.viz.thinclient.alertviz.Activator
Bundle-Version: 1.14.0.qualifier
Bundle-Vendor: RAYTHEON
Require-Bundle: com.raytheon.uf.viz.core,
com.raytheon.uf.viz.application;bundle-version="1.0.0",
@ -15,5 +14,5 @@ Require-Bundle: com.raytheon.uf.viz.core,
com.raytheon.uf.viz.alertviz;bundle-version="1.12.1174",
com.raytheon.uf.common.message;bundle-version="1.12.1174",
com.raytheon.uf.common.comm
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Bundle-ActivationPolicy: lazy

View file

@ -1,50 +0,0 @@
package com.raytheon.uf.viz.thinclient.alertviz;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
/**
* The activator class controls the plug-in life cycle
*/
public class Activator extends AbstractUIPlugin {
// The plug-in ID
public static final String PLUGIN_ID = "com.raytheon.uf.viz.thinclient.alertviz"; //$NON-NLS-1$
// The shared instance
private static Activator plugin;
/**
* The constructor
*/
public Activator() {
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext context) throws Exception {
plugin = null;
super.stop(context);
}
/**
* Returns the shared instance
*
* @return the shared instance
*/
public static Activator getDefault() {
return plugin;
}
}

View file

@ -2,8 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: True Color GL
Bundle-SymbolicName: com.raytheon.uf.viz.truecolor.gl;singleton:=true
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: com.raytheon.uf.viz.truecolor.gl.Activator
Bundle-Version: 1.14.0.qualifier
Bundle-Vendor: RAYTHEON
Require-Bundle: org.eclipse.core.runtime,
com.raytheon.uf.viz.core;bundle-version="1.12.1174",
@ -12,5 +11,5 @@ Require-Bundle: org.eclipse.core.runtime,
javax.media.opengl;bundle-version="1.1.0",
com.raytheon.uf.common.util;bundle-version="1.12.1174",
com.raytheon.uf.common.colormap;bundle-version="1.12.1174"
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Bundle-ActivationPolicy: lazy

View file

@ -1,30 +0,0 @@
package com.raytheon.uf.viz.truecolor.gl;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
public class Activator implements BundleActivator {
private static BundleContext context;
static BundleContext getContext() {
return context;
}
/*
* (non-Javadoc)
* @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext bundleContext) throws Exception {
Activator.context = bundleContext;
}
/*
* (non-Javadoc)
* @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext bundleContext) throws Exception {
Activator.context = null;
}
}

View file

@ -2,8 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Useradmin
Bundle-SymbolicName: com.raytheon.uf.viz.useradmin;singleton:=true
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: com.raytheon.uf.viz.useradmin.Activator
Bundle-Version: 1.14.0.qualifier
Bundle-Vendor: RAYTHEON
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime,
@ -13,6 +12,6 @@ Require-Bundle: org.eclipse.ui,
com.raytheon.uf.common.auth;bundle-version="1.12.1174",
com.raytheon.uf.common.useradmin;bundle-version="1.0.0",
com.raytheon.uf.viz.plugin.nwsauth;bundle-version="1.12.1174"
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Bundle-ActivationPolicy: lazy
Import-Package: com.raytheon.uf.common.plugin.nwsauth.xml

View file

@ -1,50 +0,0 @@
package com.raytheon.uf.viz.useradmin;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
/**
* The activator class controls the plug-in life cycle
*/
public class Activator extends AbstractUIPlugin {
// The plug-in ID
public static final String PLUGIN_ID = "com.raytheon.uf.viz.useradmin"; //$NON-NLS-1$
// The shared instance
private static Activator plugin;
/**
* The constructor
*/
public Activator() {
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext context) throws Exception {
plugin = null;
super.stop(context);
}
/**
* Returns the shared instance
*
* @return the shared instance
*/
public static Activator getDefault() {
return plugin;
}
}

View file

@ -54,20 +54,25 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
/**
* Main User Administration Dialog.
*
*
* <pre>
*
*
* SOFTWARE HISTORY
*
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* May 23, 2012 mpduff Initial creation.
* Nov 26, 2012 1347 mpduff Make resizable.
* Jan 09, 2013 1412 djohnson Listen for user authentication data changes.
* Aug 12, 2013 2247 mpduff Dialog cleanup and consistency.
*
* Dec 05, 2014 3801 nabowle Check if widgets are disposed in populate
* lists. Hide Description menu when nothing
* is selected. Better enable/disable edit
* and delete buttons. Give delete dialogs
* a title.
*
* </pre>
*
*
* @author mpduff
* @version 1.0
*/
@ -104,7 +109,7 @@ public class UserAdminSelectDlg extends CaveSWTDialog implements
/**
* Constructor.
*
*
* @param parent
* The parent shell
*/
@ -227,7 +232,7 @@ public class UserAdminSelectDlg extends CaveSWTDialog implements
/*
* (non-Javadoc)
*
*
* @see com.raytheon.viz.ui.dialogs.CaveSWTDialog#preOpened()
*/
@Override
@ -473,6 +478,11 @@ public class UserAdminSelectDlg extends CaveSWTDialog implements
private void populateLists() {
NwsRoleDataManager man = NwsRoleDataManager.getInstance();
if (appCombo.isDisposed() || userList.isDisposed()
|| userTab.isDisposed() || roleTab.isDisposed()
|| roleList.isDisposed()) {
return;
}
String app = appCombo.getItem(appCombo.getSelectionIndex());
userTab.setText(app + " Users");
@ -486,6 +496,11 @@ public class UserAdminSelectDlg extends CaveSWTDialog implements
userList.setItems(man.getRoleData(app).getUsers());
if (selection < userList.getItemCount()) {
userList.select(selection);
editUserBtn.setEnabled(true);
deleteUserBtn.setEnabled(true);
} else {
editUserBtn.setEnabled(false);
deleteUserBtn.setEnabled(false);
}
populateUserRoleList();
@ -498,12 +513,21 @@ public class UserAdminSelectDlg extends CaveSWTDialog implements
roleList.setItems(man.getRoleData(app).getRoles());
if (selection < roleList.getItemCount()) {
roleList.select(selection);
editRoleBtn.setEnabled(true);
deleteRoleBtn.setEnabled(true);
} else {
editRoleBtn.setEnabled(false);
deleteRoleBtn.setEnabled(false);
}
populatePermissionList();
}
private void populateUserRoleList() {
NwsRoleDataManager man = NwsRoleDataManager.getInstance();
if (appCombo.isDisposed() || userList.isDisposed()
|| userPermList.isDisposed()) {
return;
}
String app = appCombo.getItem(appCombo.getSelectionIndex());
if (userList.getSelectionIndex() != -1) {
@ -547,7 +571,7 @@ public class UserAdminSelectDlg extends CaveSWTDialog implements
String user = userList.getItem(userList.getSelectionIndex());
MessageBox messageDialog = new MessageBox(this.shell, SWT.YES | SWT.NO);
messageDialog.setText("Title");
messageDialog.setText("Delete user - " + user);
messageDialog
.setMessage("Are you sure you wish to delete user " + user);
int response = messageDialog.open();
@ -576,7 +600,7 @@ public class UserAdminSelectDlg extends CaveSWTDialog implements
String role = roleList.getItem(roleList.getSelectionIndex());
MessageBox messageDialog = new MessageBox(this.shell, SWT.YES | SWT.NO);
messageDialog.setText("Title");
messageDialog.setText("Delete role - " + role);
messageDialog
.setMessage("Are you sure you wish to delete role " + role);
int response = messageDialog.open();
@ -615,51 +639,53 @@ public class UserAdminSelectDlg extends CaveSWTDialog implements
}
private void showPermissionMenu(final List list) {
Menu menu = new Menu(shell, SWT.POP_UP);
MenuItem item1 = new MenuItem(menu, SWT.PUSH);
item1.setText("Description...");
item1.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent arg0) {
String selection = list.getItem(list.getSelectionIndex());
StringBuilder messageText = new StringBuilder();
boolean roleFlag = false;
NwsRoleDataManager man = NwsRoleDataManager.getInstance();
for (RoleXML role : man.getRoleData(selectedApplication)
.getRoleList()) {
if (selection.equals(role.getRoleId())) {
messageText.append(getRoleDetails(role));
roleFlag = true;
break;
}
}
if (!roleFlag) {
for (PermissionXML perm : man.getRoleData(
selectedApplication).getPermissionList()) {
if (perm.getId().equals(selection)) {
messageText.append(getPermissionDetails(perm));
if (list.getSelectionCount() > 0) {
Menu menu = new Menu(shell, SWT.POP_UP);
MenuItem item1 = new MenuItem(menu, SWT.PUSH);
item1.setText("Description...");
item1.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent arg0) {
String selection = list.getItem(list.getSelectionIndex());
StringBuilder messageText = new StringBuilder();
boolean roleFlag = false;
NwsRoleDataManager man = NwsRoleDataManager.getInstance();
for (RoleXML role : man.getRoleData(selectedApplication)
.getRoleList()) {
if (selection.equals(role.getRoleId())) {
messageText.append(getRoleDetails(role));
roleFlag = true;
break;
}
}
}
if (messageText.length() == 0) {
messageText.append("No Description");
}
MessageBox messageDialog = new MessageBox(shell,
SWT.ICON_INFORMATION);
if (roleFlag) {
messageDialog.setText("Role Description");
} else {
messageDialog.setText("Permission Description");
}
messageDialog.setMessage(messageText.toString());
messageDialog.open();
}
});
shell.setMenu(menu);
menu.setVisible(true);
if (!roleFlag) {
for (PermissionXML perm : man.getRoleData(
selectedApplication).getPermissionList()) {
if (perm.getId().equals(selection)) {
messageText.append(getPermissionDetails(perm));
break;
}
}
}
if (messageText.length() == 0) {
messageText.append("No Description");
}
MessageBox messageDialog = new MessageBox(shell,
SWT.ICON_INFORMATION);
if (roleFlag) {
messageDialog.setText("Role Description");
} else {
messageDialog.setText("Permission Description");
}
messageDialog.setMessage(messageText.toString());
messageDialog.open();
}
});
shell.setMenu(menu);
menu.setVisible(true);
}
}
private String getRoleDetails(RoleXML role) {

View file

@ -3,7 +3,6 @@ Bundle-ManifestVersion: 2
Bundle-Name: VAA Plug-in
Bundle-SymbolicName: com.raytheon.uf.viz.vaa;singleton:=true
Bundle-Version: 1.14.0.qualifier
Bundle-Activator: com.raytheon.uf.viz.vaa.Activator
Bundle-Vendor: RAYTHEON
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Bundle-ActivationPolicy: lazy

View file

@ -1,69 +0,0 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
*
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
*
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8
* Omaha, NE 68106
* 402.291.0100
*
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
package com.raytheon.uf.viz.vaa;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
/**
* The activator class controls the plug-in life cycle
*/
public class Activator extends AbstractUIPlugin {
// The plug-in ID
public static final String PLUGIN_ID = "com.raytheon.uf.viz.vaa";
// The shared instance
private static Activator plugin;
/**
* The constructor
*/
public Activator() {
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext context) throws Exception {
plugin = null;
super.stop(context);
}
/**
* Returns the shared instance
*
* @return the shared instance
*/
public static Activator getDefault() {
return plugin;
}
}

View file

@ -32,8 +32,6 @@ import com.raytheon.uf.viz.core.exception.VizException;
import com.raytheon.uf.viz.core.rsc.AbstractRequestableResourceData;
import com.raytheon.uf.viz.core.rsc.AbstractVizResource;
import com.raytheon.uf.viz.core.rsc.LoadProperties;
import com.raytheon.uf.viz.core.status.StatusConstants;
import com.raytheon.uf.viz.vaa.Activator;
/**
* ResourceData for VAA Forecast Ash Clouds data
@ -52,13 +50,15 @@ import com.raytheon.uf.viz.vaa.Activator;
*/
@XmlAccessorType(XmlAccessType.NONE)
@XmlType(name = "forecastAshCloudsResourceData")
public class ForecastAshCloudsResourceData extends AbstractRequestableResourceData {
private static final transient IUFStatusHandler statusHandler = UFStatus.getHandler(ForecastAshCloudsResourceData.class);
public class ForecastAshCloudsResourceData extends
AbstractRequestableResourceData {
private static final transient IUFStatusHandler statusHandler = UFStatus
.getHandler(ForecastAshCloudsResourceData.class);
public ForecastAshCloudsResourceData() {
// TODO Auto-generated constructor stub
}
@Override
public boolean equals(Object obj) {
if (!super.equals(obj)) {
@ -68,7 +68,7 @@ public class ForecastAshCloudsResourceData extends AbstractRequestableResourceDa
if (obj instanceof ForecastAshCloudsResourceData == false) {
return false;
}
return true;
}

View file

@ -32,8 +32,6 @@ import com.raytheon.uf.viz.core.exception.VizException;
import com.raytheon.uf.viz.core.rsc.AbstractRequestableResourceData;
import com.raytheon.uf.viz.core.rsc.AbstractVizResource;
import com.raytheon.uf.viz.core.rsc.LoadProperties;
import com.raytheon.uf.viz.core.status.StatusConstants;
import com.raytheon.uf.viz.vaa.Activator;
/**
* ResourceData for Volcanic Ash Advisories data
@ -53,12 +51,13 @@ import com.raytheon.uf.viz.vaa.Activator;
@XmlAccessorType(XmlAccessType.NONE)
@XmlType(name = "vaaResourceData")
public class VAAResourceData extends AbstractRequestableResourceData {
private static final transient IUFStatusHandler statusHandler = UFStatus.getHandler(VAAResourceData.class);
private static final transient IUFStatusHandler statusHandler = UFStatus
.getHandler(VAAResourceData.class);
public VAAResourceData() {
// TODO Auto-generated constructor stub
}
@Override
public boolean equals(Object obj) {
if (!super.equals(obj)) {
@ -68,7 +67,7 @@ public class VAAResourceData extends AbstractRequestableResourceData {
if (obj instanceof VAAResourceData == false) {
return false;
}
return true;
}
@ -90,6 +89,6 @@ public class VAAResourceData extends AbstractRequestableResourceData {
}
}
return rsc;
}
}
}

View file

@ -3,7 +3,6 @@ Bundle-ManifestVersion: 2
Bundle-Name: Vil Plug-in
Bundle-SymbolicName: com.raytheon.uf.viz.vil;singleton:=true
Bundle-Version: 1.14.0.qualifier
Bundle-Activator: com.raytheon.uf.viz.vil.Activator
Bundle-Vendor: RAYTHEON
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime,

View file

@ -1,69 +0,0 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
*
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
*
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8
* Omaha, NE 68106
* 402.291.0100
*
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
package com.raytheon.uf.viz.vil;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
/**
* The activator class controls the plug-in life cycle
*/
public class Activator extends AbstractUIPlugin {
// The plug-in ID
public static final String PLUGIN_ID = "com.raytheon.uf.viz.vil";
// The shared instance
private static Activator plugin;
/**
* The constructor
*/
public Activator() {
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext context) throws Exception {
plugin = null;
super.stop(context);
}
/**
* Returns the shared instance
*
* @return the shared instance
*/
public static Activator getDefault() {
return plugin;
}
}

View file

@ -3,7 +3,6 @@ Bundle-ManifestVersion: 2
Bundle-Name: BCD Plug-in
Bundle-SymbolicName: com.raytheon.viz.bcd;singleton:=true
Bundle-Version: 1.14.0.qualifier
Bundle-Activator: com.raytheon.viz.bcd.Activator
Bundle-Vendor: Raytheon
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime,

View file

@ -1,69 +0,0 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
*
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
*
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8
* Omaha, NE 68106
* 402.291.0100
*
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
package com.raytheon.viz.bcd;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
/**
* The activator class controls the plug-in life cycle
*/
public class Activator extends AbstractUIPlugin {
// The plug-in ID
public static final String PLUGIN_ID = "com.raytheon.viz.bcd";
// The shared instance
private static Activator plugin;
/**
* The constructor
*/
public Activator() {
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext context) throws Exception {
plugin = null;
super.stop(context);
}
/**
* Returns the shared instance
*
* @return the shared instance
*/
public static Activator getDefault() {
return plugin;
}
}

View file

@ -3,7 +3,6 @@ Bundle-ManifestVersion: 2
Bundle-Name: Graphing Plug-in
Bundle-SymbolicName: com.raytheon.viz.core.graphing;singleton:=true
Bundle-Version: 1.14.0.qualifier
Bundle-Activator: com.raytheon.viz.core.graphing.Activator
Bundle-Vendor: Raytheon
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime,

View file

@ -1,69 +0,0 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
*
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
*
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8
* Omaha, NE 68106
* 402.291.0100
*
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
package com.raytheon.viz.core.graphing;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
/**
* The activator class controls the plug-in life cycle
*/
public class Activator extends AbstractUIPlugin {
// The plug-in ID
public static final String PLUGIN_ID = "com.raytheon.viz.core.graphing";
// The shared instance
private static Activator plugin;
/**
* The constructor
*/
public Activator() {
plugin = this;
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext context) throws Exception {
super.start(context);
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext context) throws Exception {
plugin = null;
super.stop(context);
}
/**
* Returns the shared instance
*
* @return the shared instance
*/
public static Activator getDefault() {
return plugin;
}
}

View file

@ -1,27 +1,25 @@
/**
* 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.geotiff.ui;
import java.io.File;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.runtime.Status;
@ -44,15 +42,16 @@ import com.raytheon.viz.ui.EditorUtil;
/**
* Open an GeoTIFF image
*
*
* <pre>
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 7/1/06 chammack Initial Creation.
*
* Dec 04, 2014 3848 nabowle Fix file dialog being cancelled.
*
* </pre>
*
*
* @author chammack
* @version 1
*/
@ -70,43 +69,44 @@ public class OpenImageAction extends AbstractMapHandler {
FileDialog fd = new FileDialog(shell, SWT.OPEN);
fd.setFilterExtensions(new String[] { "*.tif;*.tiff" });
fd.open();
final String fileName = fd.getFilterPath() + File.separator
+ fd.getFileName();
final String fileName = fd.open();
VizApp.runAsync(new Runnable() {
@Override
public void run() {
try {
IDescriptor mapDesc = container.getActiveDisplayPane()
.getRenderableDisplay().getDescriptor();
if (fileName != null) {
VizApp.runAsync(new Runnable() {
@Override
public void run() {
try {
IDescriptor mapDesc = container.getActiveDisplayPane()
.getRenderableDisplay().getDescriptor();
if (mapDesc == null) {
Activator
.getDefault()
.getLog()
.log(new Status(Status.ERROR,
Activator.PLUGIN_ID,
"Map does not support GeoTIFFs", null));
if (mapDesc == null) {
Activator
.getDefault()
.getLog()
.log(new Status(Status.ERROR,
Activator.PLUGIN_ID,
"Map does not support GeoTIFFs",
null));
}
GeoTiffResourceData data = new GeoTiffResourceData(
fileName);
LoadProperties lProps = new LoadProperties();
GeoTiffResource gtiff = data.construct(lProps, mapDesc);
ResourceProperties rProps = new ResourceProperties();
rProps.setMapLayer(true);
rProps.setVisible(true);
rProps.setPdProps(new ProgressiveDisclosureProperties());
mapDesc.getResourceList().add(gtiff);
} catch (Exception e) {
e.printStackTrace();
}
GeoTiffResourceData data = new GeoTiffResourceData(fileName);
LoadProperties lProps = new LoadProperties();
GeoTiffResource gtiff = data.construct(lProps, mapDesc);
ResourceProperties rProps = new ResourceProperties();
rProps.setMapLayer(true);
rProps.setVisible(true);
rProps.setPdProps(new ProgressiveDisclosureProperties());
mapDesc.getResourceList().add(gtiff);
} catch (Exception e) {
e.printStackTrace();
}
}
});
});
}
return null;
}
}

View file

@ -23,6 +23,7 @@ import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TimeZone;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
@ -38,7 +39,6 @@ import org.eclipse.swt.widgets.ProgressBar;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import com.raytheon.uf.common.activetable.PracticeProductOfftimeRequest;
import com.raytheon.uf.common.activetable.SendPracticeProductRequest;
import com.raytheon.uf.common.activetable.response.GetNextEtnResponse;
import com.raytheon.uf.common.dissemination.OUPRequest;
@ -84,6 +84,7 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
* Dec 18, 2013 2641 dgilling Support changes to GFEVtecUtil.getVtecLinesThatNeedEtn().
* Jan 06, 2014 2649 dgilling Make ETN assignment process optional.
* Feb 17, 2014 2774 dgilling Merge changes from 14.1 baseline to 14.2.
* Nov 14, 2014 4953 randerso Cleaned up practice product requests
*
* </pre>
*
@ -541,26 +542,27 @@ public class StoreTransmitDlg extends CaveSWTDialog implements
/**
* Method to transmit the product.
*
* @param practice
* true if we are transmitting a practice product
*/
private void transmitProduct(boolean decode) {
private void transmitProduct(boolean practice) {
IServerRequest req = null;
if (decode) {
if (SimulatedTime.getSystemTime().isRealTime()) {
req = new SendPracticeProductRequest();
((SendPracticeProductRequest) req).setProductText(productText);
} else {
req = new PracticeProductOfftimeRequest();
((PracticeProductOfftimeRequest) req)
.setProductText(productText);
((PracticeProductOfftimeRequest) req).setNotifyGFE(true);
if (practice) {
SendPracticeProductRequest practiceReq = new SendPracticeProductRequest();
practiceReq.setNotifyGFE(true);
practiceReq.setProductText(productText);
if (!SimulatedTime.getSystemTime().isRealTime()) {
SimpleDateFormat dateFormatter = new SimpleDateFormat(
"yyyyMMdd_HHmm");
((PracticeProductOfftimeRequest) req)
.setDrtString(dateFormatter.format(SimulatedTime
.getSystemTime().getTime()));
dateFormatter.setTimeZone(TimeZone.getTimeZone("GMT"));
practiceReq.setDrtString(dateFormatter.format(SimulatedTime
.getSystemTime().getTime()));
}
req = practiceReq;
} else {
req = new OUPRequest();
OUPRequest oupReq = new OUPRequest();
OfficialUserProduct oup = new OfficialUserProduct();
// make sure the awipsWanPil is exactly 10 characters space-padded
// long
@ -580,8 +582,10 @@ public class StoreTransmitDlg extends CaveSWTDialog implements
// oup.setAddress(parentEditor.getAutoSendAddress());
oup.setNeedsWmoHeader(false);
oup.setSource("GFE");
((OUPRequest) req).setProduct(oup);
((OUPRequest) req).setUser(UserController.getUserObject());
oupReq.setProduct(oup);
oupReq.setUser(UserController.getUserObject());
req = oupReq;
}
try {

View file

@ -2,8 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Hydrobase Plug-in
Bundle-SymbolicName: com.raytheon.viz.hydrobase;singleton:=true
Bundle-Version: 1.12.1174.qualifier
Bundle-Activator: com.raytheon.viz.hydrobase.Activator
Bundle-Version: 1.14.0.qualifier
Bundle-Vendor: Raytheon
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime,
@ -16,5 +15,5 @@ Require-Bundle: org.eclipse.ui,
com.raytheon.uf.common.serialization.comm,
com.raytheon.uf.viz.localization;bundle-version="1.12.1174"
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Import-Package: com.raytheon.uf.common.ohd

View file

@ -1,69 +0,0 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
*
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
*
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8
* Omaha, NE 68106
* 402.291.0100
*
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
package com.raytheon.viz.hydrobase;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
/**
* The activator class controls the plug-in life cycle
*/
public class Activator extends AbstractUIPlugin {
// The plug-in ID
public static final String PLUGIN_ID = "com.raytheon.viz.hydrobase";
// The shared instance
private static Activator plugin;
/**
* The constructor
*/
public Activator() {
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext context) throws Exception {
plugin = null;
super.stop(context);
}
/**
* Returns the shared instance
*
* @return the shared instance
*/
public static Activator getDefault() {
return plugin;
}
}

View file

@ -1,19 +1,19 @@
/**
* 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.
**/
@ -62,8 +62,9 @@ import com.raytheon.viz.ui.dialogs.CaveJFACEDialog;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 08/04/2009 2191 rjpeter Initial implementation.
* 04/14/2010 4734 mhuang Corrected StdTextProduct import
* 04/14/2010 4734 mhuang Corrected StdTextProduct import
* 09/11/2014 3580 mapeters Removed IQueryTransport usage (no longer exists).
* 12/08/2014 1231 nabowle Fix selecting an AWIPS ID.
* </pre>
*
* @author rjpeter
@ -71,7 +72,7 @@ import com.raytheon.viz.ui.dialogs.CaveJFACEDialog;
public class AwipsBrowserDlg extends CaveJFACEDialog {
private static final transient IUFStatusHandler statusHandler = UFStatus.getHandler(AwipsBrowserDlg.class);
/**
*
*
*/
private Composite top;
@ -122,7 +123,7 @@ public class AwipsBrowserDlg extends CaveJFACEDialog {
private StdTextProduct currentProduct = null;
/**
*
*
* @param parent
* @param browserHdr
* @param cbClient
@ -215,7 +216,7 @@ public class AwipsBrowserDlg extends CaveJFACEDialog {
}
/**
*
*
*/
@Override
protected Control createDialogArea(Composite parent) {
@ -239,7 +240,7 @@ public class AwipsBrowserDlg extends CaveJFACEDialog {
}
/**
*
*
*/
@Override
protected void configureShell(Shell shell) {
@ -248,7 +249,7 @@ public class AwipsBrowserDlg extends CaveJFACEDialog {
}
/**
*
*
*/
@Override
protected void buttonPressed(int buttonId) {
@ -282,7 +283,7 @@ public class AwipsBrowserDlg extends CaveJFACEDialog {
}
/**
*
*
*/
@Override
protected void createButtonsForButtonBar(Composite parent) {
@ -334,7 +335,7 @@ public class AwipsBrowserDlg extends CaveJFACEDialog {
awipsIdList.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
loadInitialLists();
loadSelectedAwipsId();
}
});
@ -406,11 +407,24 @@ public class AwipsBrowserDlg extends CaveJFACEDialog {
awipsIdList.add(id);
}
Map<String, String> timesToLoad = new HashMap<String, String>();
awipsIdList.select(0);
for (Entry<String, TreeMap<String, TreeMap<String, StdTextProduct>>> ttaaiiCCCCEntry : availableProducts
.firstEntry().getValue().entrySet()) {
loadSelectedAwipsId();
}
private void loadSelectedAwipsId() {
ttaaiiCcccList.removeAll();
ddhhmmList.removeAll();
bbbList.removeAll();
setLoadBtnEnabled(false);
Map<String, String> timesToLoad = new HashMap<String, String>();
String awipsId = awipsIdList.getItem(awipsIdList.getSelectionIndex());
Map<String, TreeMap<String, TreeMap<String, StdTextProduct>>> selectedMap = availableProducts
.get(awipsId);
for (Entry<String, TreeMap<String, TreeMap<String, StdTextProduct>>> ttaaiiCCCCEntry : selectedMap
.entrySet()) {
String ttaaiiCccc = ttaaiiCCCCEntry.getKey();
ttaaiiCcccList.add(ttaaiiCccc);

View file

@ -2,8 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Textworkstation Plug-in
Bundle-SymbolicName: com.raytheon.viz.textworkstation;singleton:=true
Bundle-Version: 1.12.1174.qualifier
Bundle-Activator: com.raytheon.viz.textworkstation.Activator
Bundle-Version: 1.14.0.qualifier
Bundle-Vendor: Raytheon
Require-Bundle: org.eclipse.ui,
com.raytheon.viz.core,
@ -14,4 +13,4 @@ Require-Bundle: org.eclipse.ui,
com.raytheon.uf.viz.application;bundle-version="1.0.0"
Bundle-ActivationPolicy: lazy
Export-Package: com.raytheon.viz.textworkstation
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-RequiredExecutionEnvironment: JavaSE-1.7

View file

@ -1,85 +0,0 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
*
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
*
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8
* Omaha, NE 68106
* 402.291.0100
*
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
package com.raytheon.viz.textworkstation;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
/**
* The activator class controls the plug-in life cycle
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 10/11/2007 482 grichard Initial creation.
*
* </pre>
*
* @author grichard
*
*/
public class Activator extends AbstractUIPlugin {
// The plug-in ID
public static final String PLUGIN_ID = "com.raytheon.viz.textworkstation";
// The shared instance
private static Activator plugin;
/**
* The constructor
*/
public Activator() {
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext context) throws Exception {
plugin = null;
super.stop(context);
}
/**
* Returns the shared instance
*
* @return the shared instance
*/
public static Activator getDefault() {
return plugin;
}
}

View file

@ -2,8 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Looping Plug-in
Bundle-SymbolicName: com.raytheon.viz.ui.tools.looping;singleton:=true
Bundle-Version: 1.12.1174.qualifier
Bundle-Activator: com.raytheon.viz.ui.tools.looping.Activator
Bundle-Version: 1.14.0.qualifier
Bundle-Vendor: Raytheon
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime,
@ -11,4 +10,4 @@ Require-Bundle: org.eclipse.ui,
com.raytheon.viz.core,
org.geotools
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-RequiredExecutionEnvironment: JavaSE-1.7

View file

@ -1,69 +0,0 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
*
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
*
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8
* Omaha, NE 68106
* 402.291.0100
*
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
package com.raytheon.viz.ui.tools.looping;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
/**
* The activator class controls the plug-in life cycle
*/
public class Activator extends AbstractUIPlugin {
// The plug-in ID
public static final String PLUGIN_ID = "com.raytheon.viz.ui.tools.looping";
// The shared instance
private static Activator plugin;
/**
* The constructor
*/
public Activator() {
plugin = this;
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext context) throws Exception {
super.start(context);
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext context) throws Exception {
plugin = null;
super.stop(context);
}
/**
* Returns the shared instance
*
* @return the shared instance
*/
public static Activator getDefault() {
return plugin;
}
}

View file

@ -2,8 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Map Tools Plug-in
Bundle-SymbolicName: com.raytheon.viz.ui.tools.map;singleton:=true
Bundle-Version: 1.12.1174.qualifier
Bundle-Activator: com.raytheon.viz.ui.tools.map.Activator
Bundle-Version: 1.14.0.qualifier
Bundle-Vendor: Raytheon
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime,
@ -11,4 +10,4 @@ Require-Bundle: org.eclipse.ui,
com.raytheon.viz.core
Bundle-ActivationPolicy: lazy
Export-Package: com.raytheon.viz.ui.tools.map
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-RequiredExecutionEnvironment: JavaSE-1.7

View file

@ -1,70 +0,0 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
*
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
*
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8
* Omaha, NE 68106
* 402.291.0100
*
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
package com.raytheon.viz.ui.tools.map;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
/**
* The activator class controls the plug-in life cycle
*/
public class Activator extends AbstractUIPlugin {
// The plug-in ID
public static final String PLUGIN_ID = "com.raytheon.viz.ui.tools.map";
// The shared instance
private static Activator plugin;
/**
* The constructor
*/
public Activator() {
plugin = this;
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext context) throws Exception {
super.start(context);
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext context) throws Exception {
plugin = null;
super.stop(context);
}
/**
* Returns the shared instance
*
* @return the shared instance
*/
public static Activator getDefault() {
return plugin;
}
}

View file

@ -3,7 +3,6 @@ Bundle-ManifestVersion: 2
Bundle-Name: Warnings Plug-in
Bundle-SymbolicName: com.raytheon.viz.warnings;singleton:=true
Bundle-Version: 1.14.0.qualifier
Bundle-Activator: com.raytheon.viz.warnings.Activator
Bundle-Vendor: Raytheon
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime,

View file

@ -1,69 +0,0 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
*
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
*
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8
* Omaha, NE 68106
* 402.291.0100
*
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
package com.raytheon.viz.warnings;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
/**
* The activator class controls the plug-in life cycle
*/
public class Activator extends AbstractUIPlugin {
// The plug-in ID
public static final String PLUGIN_ID = "com.raytheon.viz.warnings";
// The shared instance
private static Activator plugin;
/**
* The constructor
*/
public Activator() {
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext context) throws Exception {
plugin = null;
super.stop(context);
}
/**
* Returns the shared instance
*
* @return the shared instance
*/
public static Activator getDefault() {
return plugin;
}
}

View file

@ -2,8 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Xdat Plug-in
Bundle-SymbolicName: com.raytheon.viz.xdat;singleton:=true
Bundle-Version: 1.12.1174.qualifier
Bundle-Activator: com.raytheon.viz.xdat.Activator
Bundle-Version: 1.14.0.qualifier
Bundle-Vendor: Raytheon
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime,

View file

@ -1,75 +0,0 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
*
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
*
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8
* Omaha, NE 68106
* 402.291.0100
*
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
package com.raytheon.viz.xdat;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
/**
* The activator class controls the plug-in life cycle
*/
public class Activator extends AbstractUIPlugin {
// The plug-in ID
public static final String PLUGIN_ID = "com.raytheon.viz.xdat";
// The shared instance
private static Activator plugin;
/**
* The constructor
*/
public Activator() {
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext
* )
*/
public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext
* )
*/
public void stop(BundleContext context) throws Exception {
plugin = null;
super.stop(context);
}
/**
* Returns the shared instance
*
* @return the shared instance
*/
public static Activator getDefault() {
return plugin;
}
}

View file

@ -108,7 +108,6 @@
<!-- set executable permissions - start.sh. -->
<chmod file="${edex.root.directory}/bin/start.sh" perm="ugo+rx" />
<chmod file="${edex.root.directory}/bin/yajsw/scripts/wrapperCapture.sh" perm="ugo+rx" />
</target>
<target name="deploy.esb-data">

View file

@ -45,6 +45,13 @@ if [ -z "${SKIP_RPM_CHECK}" ]; then
echo "Unable To Continue ... Terminating."
exit 1
fi
rpm -q awips2-yajsw > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo "ERROR: awips2-yajsw Must Be Installed."
echo "Unable To Continue ... Terminating."
exit 1
fi
fi
path_to_script=`readlink -f $0`
@ -58,6 +65,7 @@ awips_home=$(dirname $EDEX_HOME)
if [ -z "$PYTHON_INSTALL" ]; then PYTHON_INSTALL="$awips_home/python"; fi
if [ -z "$JAVA_INSTALL" ]; then JAVA_INSTALL="$awips_home/java"; fi
if [ -z "$PSQL_INSTALL" ]; then PSQL_INSTALL="$awips_home/psql"; fi
if [ -z "$YAJSW_HOME" ]; then YAJSW_HOME="$awips_home/yajsw"; fi
# Source The File With The Localization Information
source ${dir}/setup.env
@ -150,4 +158,4 @@ if [ $DEBUG_FLAG == "on" ]; then
echo "To Debug ... Connect to Port: ${EDEX_DEBUG_PORT}."
fi
java -Xmx32m -XX:MaxPermSize=12m -XX:ReservedCodeCacheSize=4m -jar ${EDEX_HOME}/bin/yajsw/wrapper.jar -c ${EDEX_HOME}/conf/${CONF_FILE} ${WRAPPER_ARGS}
java -Xmx32m -XX:MaxPermSize=12m -XX:ReservedCodeCacheSize=4m -jar ${YAJSW_HOME}/wrapper.jar -c ${EDEX_HOME}/conf/${CONF_FILE} ${WRAPPER_ARGS}

View file

@ -1,180 +0,0 @@
#!/bin/sh
#####################################################################
# 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.
#####################################################################
#####################################################################
# Script for capturing data from a wrapper java process when the
# wrapper restarts the process
#
# SOFTWARE HISTORY
#
# Date Ticket# Engineer Description
# ------------- -------- ----------- --------------------------
# Aug 07, 2014 3470 rjpeter Initial creation
#
#####################################################################
# NOTE: Script must be located at /awips2/qpid/bin/yajsw/scripts for it to work
# base path to save capture data to, will create subdirectory for each server
basePath="/data/fxa/cave"
state=$1
string_state=$2
pid=$4
path_to_script=`readlink -f $0`
curTime=`date +%Y%m%d_%H%M%S`
echo "$curTime: Wrapper running $path_to_script due to state transition for pid $pid. New State $state|$string_state"
# ensure directory is created and has write permissions
checkDir() {
dir="$1"
if [ ! -d "$dir" ]; then
mkdir -p $dir
if [ ! -d "$dir" ]; then
message="Unable to create qpid capture data directory\n$dir"
echo -e "Capture failed: $message"
exit 1
fi
fi
if [ ! -w "$dir" ]; then
message="Do not have write permissions to qpid capture data directory\n$dir"
echo -e "Capture failed: $message"
exit 1
fi
}
# gets top output of local server
runTop() {
local curTime=`date "+%Y%m%d_%H:%M:%S"`
echo "$curTime: Capturing top"
echo "$curTime: Capturing top" >> $processFile
local out_file="${dataPath}/top.log"
export COLUMNS=160
top -b -c -n1 >> $out_file 2>&1
curTime=`date +%Y%m%d_%H%M%S`
echo "$curTime: top captured"
}
# runs jstack 10 times, if it fails will run again with -F
runJstack() {
local curTime=`date +%Y%m%d_%H%M%S`
echo "$curTime: Capturing jstacks"
local pid="$1"
local count=1
local cmd="/awips2/java/bin/jstack"
local prePath="${dataPath}/pid_${pid}_"
local log=""
while [ "$count" -le "10" ]; do
curTime=`date "+%Y%m%d_%H:%M:%S"`
log="${prePath}jstack_${count}.log"
echo "${curTime}: Running command: ${cmd} ${pid} >> ${log} 2>&1" >> $processFile
echo "Running for $curTime" >> $log
${cmd} ${pid} >> ${log} 2>&1
if [[ "$?" != "0" && $FORCE != "y" ]]; then
curTime=`date "+%Y%m%d_%H:%M:%S"`
echo "${curTime}: jstack for $pid failed to connect, rerunning with -F" >> $processFile
${cmd} -F ${pid} >> ${log} 2>&1
fi
let "count+=1"
done
curTime=`date +%Y%m%d_%H%M%S`
echo "$curTime: jstacks captured"
}
# runs jmap -heap
runJmapHeap() {
local curTime=`date +%Y%m%d_%H%M%S`
echo "$curTime: Capturing jmap -heap"
local pid=$1
local prePath="${dataPath}/pid_${pid}_"
local log="${prePath}jmapHeap.log"
local cmd="/awips2/java/bin/jmap -heap"
echo "${curTime}: Running command: $cmd $pid >> $log 2>&1" >> $processFile
$cmd $pid >> $log 2>&1
if [[ "$?" != "0" && $FORCE != "y" ]]; then
curTime=`date "+%Y%m%d_%H:%M:%S"`
echo "${curTime}: jmap for $pid failed to connect, rerunning with -F" >> $processFile
$cmd -F $pid >> $log 2>&1
fi
curTime=`date +%Y%m%d_%H%M%S`
echo "$curTime: jmap -heap captured"
}
# runs jmap, if it fails will run again with -F
runJmap() {
local curTime=`date +%Y%m%d_%H%M%S`
echo "$curTime: Capturing jmap -dump"
local pid=$1
local prePath="${dataPath}/pid_${pid}_jmap"
local log="${prePath}.log"
local dumpPath="${prePath}.hprof"
local cmd="/awips2/java/bin/jmap -dump:format=b,file=${dumpPath}"
echo "${curTime}: Running command: $cmd $pid >> $log 2>&1" >> $processFile
$cmd $pid >> $log 2>&1
if [[ "$?" != "0" && $FORCE != "y" ]]; then
curTime=`date "+%Y%m%d_%H:%M:%S"`
echo "${curTime}: jmap for $pid failed to connect, rerunning with -F" >> $processFile
$cmd -F $pid >> $log 2>&1
fi
curTime=`date +%Y%m%d_%H%M%S`
echo "$curTime: jmap -dump captured"
}
if [[ "$pid" != "-1" ]]; then
process=`ps -ef | grep $pid | grep java`
if [[ "$process" != "" ]]; then
hostName=`hostname -s`
dataPath="${basePath}/${hostName}/wrapperCaptureData_${curTime}_pid_$pid"
checkDir $dataPath
processFile=${dataPath}/capture_info.log
echo "Wrapper running $0 due to state transition for pid $pid. New State $state|$string_state" >> $processFile
echo "Process information:" >> $processFile
ps -ef | grep $pid >> $processFile
runTop &
runJstack $pid &
runJmapHeap $pid &
# TODO: Double check if jvm already dumped one
runJmap $pid &
wait
curTime=`date +%Y%m%d_%H%M%S`
echo "$curTime: Data captured to $dataPath"
else
curTime=`date +%Y%m%d_%H%M%S`
echo "$curTime: PID $pid is no longer running, nothing to capture"
fi
else
curTime=`date +%Y%m%d_%H%M%S`
echo "$curTime: PID was -1, process no longer running, nothing to capture"
fi

View file

@ -42,13 +42,11 @@ wrapper.pidfile=${EDEX_HOME}/bin/${EDEX_RUN_MODE}.pid
# use system java instead of awips2 java
wrapper.app.env.use.system.java=${WRAPPER_USE_SYSTEM_JAVA}
# Java Classpath (include wrapper.jar) Add class path elements as
# needed starting from 1
wrapper.java.classpath.1=${EDEX_HOME}/bin/yajsw/wrapper.jar
wrapper.java.classpath.2=${EDEX_HOME}/conf/
wrapper.java.classpath.3=${EDEX_HOME}/conf/cache/
wrapper.java.classpath.4=${EDEX_HOME}/conf/spring/
wrapper.java.classpath.5=${EDEX_HOME}/conf/resources/
# Java Classpath. Add class path elements as needed starting from 1.
wrapper.java.classpath.1=${EDEX_HOME}/conf/
wrapper.java.classpath.2=${EDEX_HOME}/conf/cache/
wrapper.java.classpath.3=${EDEX_HOME}/conf/spring/
wrapper.java.classpath.4=${EDEX_HOME}/conf/resources/
# include ANY jar files that are found in the locations denoted by
# wrapper.search.java.classpath.#

View file

@ -1,5 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<aliasList caseSensitive="true" namespace="gfeParamInfo">
<alias base="GFS217">gfs20km</alias>
<alias base="GFS215">gfs20km</alias>
<alias base="GFS20-PAC">gfs20km</alias>
<alias base="GFS20-PRICO">gfs20km</alias>
<alias base="estofsUS">ESTOFS</alias>
<alias base="estofsPR">ESTOFS</alias>
<alias base="GLERL">glerl</alias>

View file

@ -45,6 +45,7 @@
#
# 05/29/2014 #3224 randerso Added "SPC":8 to D2DDBVERSIONS
# 07/09/2014 #3146 randerso Removed unused import
# 12/03/2014 #3866 rferrel Added GFS20
########################################################################
#----------------------------------------------------------------------------
@ -1082,6 +1083,7 @@ if SID in ALASKA_SITES:
'AKHwave10',
'AKHwave4',
'GLOBHwave',
('GFS217', 'GFS20'),
]
# Hawaii OCONUS
@ -1104,6 +1106,7 @@ elif SID == "HFO":
'WPHwave10',
'NPHwave4',
'GLOBHwave',
('GFS20-PAC', 'GFS20'),
]
# San Juan OCONUS
@ -1132,6 +1135,7 @@ elif SID == "SJU":
'NAHwave10',
'NAHwave4',
'GLOBHwave',
('GFS20-PRICO', 'GFS20'),
]
# Guam OCONUS
@ -1144,6 +1148,7 @@ elif SID == "GUM":
'RTOFS-Guam',
'WPHwave10',
'GLOBHwave',
('GFS20-PAC', 'GFS20'),
]
#CONUS sites
@ -1204,6 +1209,7 @@ elif SID in CONUS_EAST_SITES:
'WPHwave10',
'GLOBHwave',
'URMA25',
('GFS215', 'GFS20'),
]
else: #######DCS3501 WEST_CONUS
@ -1264,6 +1270,7 @@ else: #######DCS3501 WEST_CONUS
'WPHwave10',
'GLOBHwave',
'URMA25',
('GFS215', 'GFS20'),
]
if SID in GreatLake_SITES:

View file

@ -26,8 +26,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>vss</short_name>
<long_name>vertical speed shear</long_name>
<units>l/s</units>
<udunits>l/second</udunits>
<units>/s</units>
<udunits>1/second</udunits>
<uiname>vertSpeedShear</uiname>
<valid_range>-0.10000000149</valid_range>
<valid_range>0.10000000149</valid_range>

View file

@ -26,8 +26,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>vss</short_name>
<long_name>vertical speed shear</long_name>
<units>l/s</units>
<udunits>l/second</udunits>
<units>/s</units>
<udunits>1/second</udunits>
<uiname>vertSpeedShear</uiname>
<valid_range>-0.10000000149</valid_range>
<valid_range>0.10000000149</valid_range>

View file

@ -26,8 +26,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>vss</short_name>
<long_name>vertical speed shear</long_name>
<units>l/s</units>
<udunits>l/second</udunits>
<units>/s</units>
<udunits>1/second</udunits>
<uiname>vertSpeedShear</uiname>
<valid_range>-0.10000000149</valid_range>
<valid_range>0.10000000149</valid_range>

View file

@ -46,8 +46,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>vss</short_name>
<long_name>vertical speed shear</long_name>
<units>l/s</units>
<udunits>l/second</udunits>
<units>/s</units>
<udunits>1/second</udunits>
<uiname>vertSpeedShear</uiname>
<valid_range>-0.10000000149</valid_range>
<valid_range>0.10000000149</valid_range>

View file

@ -26,8 +26,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>vss</short_name>
<long_name>vertical speed shear</long_name>
<units>l/s</units>
<udunits>l/second</udunits>
<units>/s</units>
<udunits>1/second</udunits>
<uiname>vertSpeedShear</uiname>
<valid_range>-0.10000000149</valid_range>
<valid_range>0.10000000149</valid_range>

View file

@ -82,8 +82,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>vss</short_name>
<long_name>vertical speed shear</long_name>
<units>l/s</units>
<udunits>l/second</udunits>
<units>/s</units>
<udunits>1/second</udunits>
<uiname>vertSpeedShear</uiname>
<valid_range>-0.10000000149</valid_range>
<valid_range>0.10000000149</valid_range>

View file

@ -82,8 +82,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>vss</short_name>
<long_name>vertical speed shear</long_name>
<units>l/s</units>
<udunits>l/second</udunits>
<units>/s</units>
<udunits>1/second</udunits>
<uiname>vertSpeedShear</uiname>
<valid_range>-0.10000000149</valid_range>
<valid_range>0.10000000149</valid_range>

View file

@ -46,8 +46,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>vss</short_name>
<long_name>vertical speed shear</long_name>
<units>l/s</units>
<udunits>l/second</udunits>
<units>/s</units>
<udunits>1/second</udunits>
<uiname>vertSpeedShear</uiname>
<valid_range>-0.10000000149</valid_range>
<valid_range>0.10000000149</valid_range>

View file

@ -0,0 +1,667 @@
<?xml version="1.0" encoding="UTF-8"?>
<gridParamInfo xmlns:ns2="group">
<valtimeMINUSreftime>
<!-- Every 3 hours 000-084 -->
<fcst>0</fcst>
<fcst>10800</fcst>
<fcst>21600</fcst>
<fcst>32400</fcst>
<fcst>43200</fcst>
<fcst>54000</fcst>
<fcst>64800</fcst>
<fcst>75600</fcst>
<fcst>86400</fcst>
<fcst>97200</fcst>
<fcst>108000</fcst>
<fcst>118800</fcst>
<fcst>129600</fcst>
<fcst>140400</fcst>
<fcst>151200</fcst>
<fcst>162000</fcst>
<fcst>172800</fcst>
<fcst>183600</fcst>
<fcst>194400</fcst>
<fcst>205200</fcst>
<fcst>216000</fcst>
<fcst>226800</fcst>
<fcst>237600</fcst>
<fcst>248400</fcst>
<fcst>259200</fcst>
<fcst>270000</fcst>
<fcst>280800</fcst>
<fcst>291600</fcst>
<fcst>302400</fcst>
<!-- Every 6 hours 090 - 240 -->
<fcst>324000</fcst>
<fcst>345600</fcst>
<fcst>367200</fcst>
<fcst>388800</fcst>
<fcst>410400</fcst>
<fcst>432000</fcst>
<fcst>453600</fcst>
<fcst>475200</fcst>
<fcst>496800</fcst>
<fcst>518400</fcst>
<fcst>540000</fcst>
<fcst>561600</fcst>
<fcst>583200</fcst>
<fcst>604800</fcst>
<fcst>626400</fcst>
<fcst>648000</fcst>
<fcst>669600</fcst>
<fcst>691200</fcst>
<fcst>712800</fcst>
<fcst>734400</fcst>
<fcst>756000</fcst>
<fcst>777600</fcst>
<fcst>799200</fcst>
<fcst>820800</fcst>
<fcst>842400</fcst>
<fcst>864000</fcst>
</valtimeMINUSreftime>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>crain</short_name>
<long_name>Categorical rain</long_name>
<units>yn</units>
<udunits/>
<uiname>CategoricalRain</uiname>
<valid_range>0.0</valid_range>
<valid_range>1.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>0</n3D>
<levelsDesc>SFC</levelsDesc>
<levels>
<level>SFC</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>cfrzr</short_name>
<long_name>Categorical freezing rain</long_name>
<units>yn</units>
<udunits/>
<uiname>CategoricalFrzRain</uiname>
<valid_range>0.0</valid_range>
<valid_range>1.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>0</n3D>
<levelsDesc>SFC</levelsDesc>
<levels>
<level>SFC</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>vss</short_name>
<long_name>vertical speed shear</long_name>
<units>/s</units>
<udunits>1/second</udunits>
<uiname>vertSpeedShear</uiname>
<valid_range>-0.10000000149</valid_range>
<valid_range>0.10000000149</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>0</n3D>
<levelsDesc>TROP</levelsDesc>
<levels>
<level>TROP</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>pvv</short_name>
<long_name>Pressure vertical velocity</long_name>
<units>Pa/s</units>
<udunits>pascal/second</udunits>
<uiname>Pvv</uiname>
<valid_range>-2.5</valid_range>
<valid_range>2.5</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>29</n3D>
<levelsDesc>MB 1000-500 by 25 MB 450-100 by 50</levelsDesc>
<levels>
<level>MB1000</level>
<level>MB975</level>
<level>MB950</level>
<level>MB925</level>
<level>MB900</level>
<level>MB875</level>
<level>MB850</level>
<level>MB825</level>
<level>MB800</level>
<level>MB775</level>
<level>MB750</level>
<level>MB725</level>
<level>MB700</level>
<level>MB675</level>
<level>MB650</level>
<level>MB625</level>
<level>MB600</level>
<level>MB575</level>
<level>MB550</level>
<level>MB525</level>
<level>MB500</level>
<level>MB450</level>
<level>MB400</level>
<level>MB350</level>
<level>MB300</level>
<level>MB250</level>
<level>MB200</level>
<level>MB150</level>
<level>MB100</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>vw</short_name>
<long_name>v-component wind</long_name>
<units>m/s</units>
<udunits>meter/sec</udunits>
<uiname>vWind</uiname>
<valid_range>-150.0</valid_range>
<valid_range>150.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>30</n3D>
<levelsDesc>10 FHAG MB 1000-500 by 25 450-100 by 50 BL 0&gt;30 30&gt;60 60&gt;90
90&gt;120 120&gt;150 150&gt;180 TROP MAXW PV 5 10 15 20</levelsDesc>
<levels>
<level>FHAG10</level>
<level>MB1000</level>
<level>MB975</level>
<level>MB950</level>
<level>MB925</level>
<level>MB900</level>
<level>MB875</level>
<level>MB850</level>
<level>MB825</level>
<level>MB800</level>
<level>MB775</level>
<level>MB750</level>
<level>MB725</level>
<level>MB700</level>
<level>MB675</level>
<level>MB650</level>
<level>MB625</level>
<level>MB600</level>
<level>MB575</level>
<level>MB550</level>
<level>MB525</level>
<level>MB500</level>
<level>MB450</level>
<level>MB400</level>
<level>MB350</level>
<level>MB300</level>
<level>MB250</level>
<level>MB200</level>
<level>MB150</level>
<level>MB100</level>
<level>BL030</level>
<level>BL3060</level>
<level>BL6090</level>
<level>BL90120</level>
<level>BL120150</level>
<level>BL150180</level>
<level>TROP</level>
<level>MAXW</level>
<level>PV5</level>
<level>PV10</level>
<level>PV15</level>
<level>PV20</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>weasd</short_name>
<long_name>water equivalent of accumulated snow depth</long_name>
<units>mm</units>
<udunits>millimeter</udunits>
<uiname>waterEqvAccSnowDepth</uiname>
<valid_range>0.0</valid_range>
<valid_range>1000.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>0</n3D>
<levelsDesc>SFC</levelsDesc>
<levels>
<level>SFC</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticSpacing</short_name>
<long_name>Grid spacing</long_name>
<units>meters</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>av</short_name>
<long_name>absolute vorticity</long_name>
<units>/s</units>
<udunits>1/second</udunits>
<uiname>absVort</uiname>
<valid_range>-0.00999999977648</valid_range>
<valid_range>0.00999999977648</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>4</n3D>
<levelsDesc>MB 850 700 500 250</levelsDesc>
<levels>
<level>MB850</level>
<level>MB700</level>
<level>MB500</level>
<level>MB250</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>cp</short_name>
<long_name>convective precipitation</long_name>
<units>mm</units>
<udunits>millimeter</udunits>
<uiname>convPrecip</uiname>
<valid_range>0.0</valid_range>
<valid_range>1000.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>0</n3D>
<levelsDesc>SFC</levelsDesc>
<levels>
<level>SFC</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticTopo</short_name>
<long_name>Topography</long_name>
<units>meters</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>gh</short_name>
<long_name>geopotential height</long_name>
<units>m</units>
<udunits>meters</udunits>
<uiname>geoPotHt</uiname>
<valid_range>-2000.0</valid_range>
<valid_range>20000.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>29</n3D>
<levelsDesc>MB 1000-500 by 25 450-100 by 50 BL 0&gt;30 30&gt;60 60&gt;90 90&gt;120
120&gt;150 150&gt;180 FRZ PV 5 10 15 20</levelsDesc>
<levels>
<level>MB1000</level>
<level>MB975</level>
<level>MB950</level>
<level>MB925</level>
<level>MB900</level>
<level>MB875</level>
<level>MB850</level>
<level>MB825</level>
<level>MB800</level>
<level>MB775</level>
<level>MB750</level>
<level>MB725</level>
<level>MB700</level>
<level>MB675</level>
<level>MB650</level>
<level>MB625</level>
<level>MB600</level>
<level>MB575</level>
<level>MB550</level>
<level>MB525</level>
<level>MB500</level>
<level>MB450</level>
<level>MB400</level>
<level>MB350</level>
<level>MB300</level>
<level>MB250</level>
<level>MB200</level>
<level>MB150</level>
<level>MB100</level>
<level>BL030</level>
<level>BL3060</level>
<level>BL6090</level>
<level>BL90120</level>
<level>BL120150</level>
<level>BL150180</level>
<level>FRZ</level>
<level>PV5</level>
<level>PV10</level>
<level>PV15</level>
<level>PV20</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>pw</short_name>
<long_name>precipitable water</long_name>
<units>mm</units>
<udunits>millimeter</udunits>
<uiname>precipH2O</uiname>
<valid_range>0.0</valid_range>
<valid_range>300.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>0</n3D>
<levelsDesc>EA</levelsDesc>
<levels>
<level>EA</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>wgh</short_name>
<long_name>Five-wave height</long_name>
<units>m</units>
<udunits>meters</udunits>
<uiname>fiveWaveHt</uiname>
<valid_range>0.0</valid_range>
<valid_range>20000.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>1</n3D>
<levelsDesc>MB 500</levelsDesc>
<levels>
<level>MB500</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>tp</short_name>
<long_name>total precipitation</long_name>
<units>mm</units>
<udunits>millimeter</udunits>
<uiname>totPrecip</uiname>
<valid_range>0.0</valid_range>
<valid_range>1000.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>0</n3D>
<levelsDesc>SFC</levelsDesc>
<levels>
<level>SFC</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>bli</short_name>
<long_name>Best lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<uiname>bestLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>0</n3D>
<levelsDesc>SFC</levelsDesc>
<levels>
<level>SFC</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>staticCoriolis</short_name>
<long_name>Coriolis parameter</long_name>
<units>/s</units>
<fillValue>-99999.0</fillValue>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>csnow</short_name>
<long_name>Categorical snow</long_name>
<units>yn</units>
<udunits/>
<uiname>CategoricalSnow</uiname>
<valid_range>0.0</valid_range>
<valid_range>1.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>0</n3D>
<levelsDesc>SFC</levelsDesc>
<levels>
<level>SFC</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>rh</short_name>
<long_name>relative humidity</long_name>
<units>%</units>
<udunits>percent</udunits>
<uiname>rh</uiname>
<valid_range>0.0</valid_range>
<valid_range>100.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>29</n3D>
<levelsDesc>2 FHAG MB 1000-500 by 25 450-100 by 50 BL 0&gt;30 30&gt;60 60&gt;90 90&gt;120 120&gt;150 150&gt;180 FRZ</levelsDesc>
<levels>
<level>FHAG2</level>
<level>MB1000</level>
<level>MB975</level>
<level>MB950</level>
<level>MB925</level>
<level>MB900</level>
<level>MB875</level>
<level>MB850</level>
<level>MB825</level>
<level>MB800</level>
<level>MB775</level>
<level>MB750</level>
<level>MB725</level>
<level>MB700</level>
<level>MB675</level>
<level>MB650</level>
<level>MB625</level>
<level>MB600</level>
<level>MB575</level>
<level>MB550</level>
<level>MB525</level>
<level>MB500</level>
<level>MB450</level>
<level>MB400</level>
<level>MB350</level>
<level>MB300</level>
<level>MB250</level>
<level>MB200</level>
<level>MB150</level>
<level>MB100</level>
<level>BL030</level>
<level>BL3060</level>
<level>BL6090</level>
<level>BL90120</level>
<level>BL120150</level>
<level>BL150180</level>
<level>FRZ</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>sli</short_name>
<long_name>Surface lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<uiname>LftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>0</n3D>
<levelsDesc>MB 0&gt;500</levelsDesc>
<levels>
<level>SFC</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>cicep</short_name>
<long_name>Categorical ice pellets</long_name>
<units>yn</units>
<udunits/>
<uiname>CategoricalIcePlt</uiname>
<valid_range>0.0</valid_range>
<valid_range>1.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>0</n3D>
<levelsDesc>SFC</levelsDesc>
<levels>
<level>SFC</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>cape</short_name>
<long_name>Convective Available Potential Energy</long_name>
<units>J/kg</units>
<udunits>joule/Kilogram</udunits>
<uiname>CAPE</uiname>
<valid_range>0.0</valid_range>
<valid_range>6000.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>0</n3D>
<levelsDesc>SFC BL 0&gt;180</levelsDesc>
<levels>
<level>SFC</level>
<level>BL0180</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>pmsl</short_name>
<long_name>pressure at mean sea level</long_name>
<units>Pa</units>
<udunits>pascal</udunits>
<uiname>PMSL</uiname>
<valid_range>80000.0</valid_range>
<valid_range>110000.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>0</n3D>
<levelsDesc>MSL</levelsDesc>
<levels>
<level>MSL</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>uw</short_name>
<long_name>u-component wind</long_name>
<units>m/s</units>
<udunits>meter/sec</udunits>
<uiname>uWind</uiname>
<valid_range>-150.0</valid_range>
<valid_range>150.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>30</n3D>
<levelsDesc>10 FHAG MB 1000-500 by 25 450-100 by 50 BL 0&gt;30 30&gt;60 60&gt;90
90&gt;120 120&gt;150 150&gt;180 TROP MAXW PV 5 10 15 20</levelsDesc>
<levels>
<level>FHAG10</level>
<level>MB1000</level>
<level>MB975</level>
<level>MB950</level>
<level>MB925</level>
<level>MB900</level>
<level>MB875</level>
<level>MB850</level>
<level>MB825</level>
<level>MB800</level>
<level>MB775</level>
<level>MB750</level>
<level>MB725</level>
<level>MB700</level>
<level>MB675</level>
<level>MB650</level>
<level>MB625</level>
<level>MB600</level>
<level>MB575</level>
<level>MB550</level>
<level>MB525</level>
<level>MB500</level>
<level>MB450</level>
<level>MB400</level>
<level>MB350</level>
<level>MB300</level>
<level>MB250</level>
<level>MB200</level>
<level>MB150</level>
<level>MB100</level>
<level>BL030</level>
<level>BL3060</level>
<level>BL6090</level>
<level>BL90120</level>
<level>BL120150</level>
<level>BL150180</level>
<level>TROP</level>
<level>MAXW</level>
<level>PV5</level>
<level>PV10</level>
<level>PV15</level>
<level>PV20</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>cin</short_name>
<long_name>Convective Inhibition</long_name>
<units>J/kg</units>
<udunits>joule/Kilogram</udunits>
<uiname>convInhib</uiname>
<valid_range>-1000.0</valid_range>
<valid_range>1000.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>0</n3D>
<levelsDesc>SFC BL 0&gt;180</levelsDesc>
<levels>
<level>SFC</level>
<level>BL0180</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>p</short_name>
<long_name>pressure</long_name>
<units>Pa</units>
<udunits>pascal</udunits>
<uiname>atmP</uiname>
<valid_range>0.0</valid_range>
<valid_range>110000.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>1</n3D>
<levelsDesc>SFC, TROP, MAXW, PV 5 10 15 20, LCB, MCB, HCB</levelsDesc>
<levels>
<level>SFC</level>
<level>TROP</level>
<level>MAXW</level>
<level>PV5</level>
<level>PV10</level>
<level>PV15</level>
<level>PV20</level>
<level>LCBL</level>
<level>MCBL</level>
<level>HCBL</level>
</levels>
</gridParameterInfo>
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>t</short_name>
<long_name>temperature</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<uiname>T</uiname>
<valid_range>180.0</valid_range>
<valid_range>330.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>30</n3D>
<levelsDesc>2 FHAG MB 1000-500 by 25 450-100 by 50 BL 0&gt;30 30&gt;60 60&gt;90
90&gt;120 120&gt;150 150&gt;180 PV 5 10 15 20</levelsDesc>
<levels>
<level>FHAG2</level>
<level>MB1000</level>
<level>MB975</level>
<level>MB950</level>
<level>MB925</level>
<level>MB900</level>
<level>MB875</level>
<level>MB850</level>
<level>MB825</level>
<level>MB800</level>
<level>MB775</level>
<level>MB750</level>
<level>MB725</level>
<level>MB700</level>
<level>MB675</level>
<level>MB650</level>
<level>MB625</level>
<level>MB600</level>
<level>MB575</level>
<level>MB550</level>
<level>MB525</level>
<level>MB500</level>
<level>MB450</level>
<level>MB400</level>
<level>MB350</level>
<level>MB300</level>
<level>MB250</level>
<level>MB200</level>
<level>MB150</level>
<level>MB100</level>
<level>BL030</level>
<level>BL3060</level>
<level>BL6090</level>
<level>BL90120</level>
<level>BL120150</level>
<level>BL150180</level>
<level>PV5</level>
<level>PV10</level>
<level>PV15</level>
<level>PV20</level>
</levels>
</gridParameterInfo>
</gridParamInfo>

View file

@ -76,8 +76,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>vss</short_name>
<long_name>vertical speed shear</long_name>
<units>l/s</units>
<udunits>l/second</udunits>
<units>/s</units>
<udunits>1/second</udunits>
<uiname>vertSpeedShear</uiname>
<valid_range>-0.10000000149</valid_range>
<valid_range>0.10000000149</valid_range>

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