Home

Awesome

current build

OpenDCS

OpenDCS is a tool for doing the following:

OpenDCS is currently used by:

And others.

If you're agency/company/etc uses OpenDCS and wishes that to be known, please submit either an issue indicating you would like the name added, or a pull request that updates the list above. Company/Agency Logos are welcome in place of plain text.

Getting started

Documentation on how to use OpenDCS is available at https://opendcs-env.readthedocs.io/en/latest/index.html

Getting help

We have a mailing list at https://www.freelists.org/list/opendcs.

Additionally you can open a discussion at https://github.com/opendcs/opendcs/discussions

Contributing

First of, if you feel a desire to contribute - which to us includes trying to use the software and reporting issues - thanks!

Checkout the CONTRIBUTING.md file, and don't be too scared by all the legalese; the project started at several government agencies who have chosen to properly open source the project and we felt a little solid copy-pasting from other government contributing documents was a good idea.

The short version is, add you're name to the CONTRIBUTORS.md file, and submit changes to the default branch, currently named master.

As for what to contribute: https://github.com/opendcs/opendcs/projects shows our current major projects, as well as a project each for tracking bugs and features; Wiki (https://github.com/opendcs/opendcs) pages prefixed with "Project -" will have more information about some projects. If you want to contribute and aren't sure where to start that should be a good place to see our plans and priorities; please do not hesitate to ask questions on the mailing list, discussions, or within an issue itself.

We are currently in the process of some major overhauls to various subsystems and while that can be scary we would like to encourage you to join us anyways.

Compiling

in the following examples replace ./gradlew with gradlew if you are using windows.

To build the file opendcs.jar run the following command:

./gradlew :opendcs:jar

output is here:

java/opendcs/build/libs/opendcs-main.99.main-SNAPSHOT.jar

If you want to build a distribution run:

./gradlew distZip

or

./gradlew distTar

output is here:

opendcs/install/build/distributions/opendcs-main.99.main-SNAPSHOT.zip

To get a simple baseline environment going:

./gradlew runApp --info

This will start the "launcher_start" application and do an initial setup of an XML database suitable for DECODES operations going that you can use for manual and exploratory testing.

General Development

To verify everything can work on your system run the following:

# General tests
ant test
# NOTE: this will flash a few interfaces onto your display, let the task finish or the tests get stuck. 
# However, you can just run through the GUIs to finish the tests. Though be aware if you don't follow the 
# programmed script the task may return failure.

# Test the GUI (NOTE: leave your hands off the keyboard and mouse or the runner gets confused.)
./gradlew test -Pno.docs=true

# Tests of a "live" system.
./gradlew testing:opendcs-tests:test -Pno.docs=true -Popendcs.test.engine=OpenDCS-XML
# and if you have docker
./gradlew testing:opendcs-tests:test -Pno.docs=true -Popendcs.test.engine=OpenDCS-Postgres

#To test the LRGS
gradlew testing:lrgs:test -Pno.docs=true

This will run all of the various tests and let you know you have everything setup such that you can start development.

For all test tasks you can add -DdebugPort=<a port number> and the JVMs started will wait for a debug connection. Beware that gui-test and integration-test depend on test running, so you will have to attach the remote debugger twice. This is a current limitation of the ant build.

To run a specific test only use:

./gradlew <test target> --tests # See [gradle documentation ](https://docs.gradle.org/current/userguide/java_testing.html#simple_name_pattern) for more detail

It is possible a file glob will work in the tests parameter above but we have not tested this.

See https://opendcs-env.readthedocs.io/en/latest/dev-docs.html for guidance on some of the newer components.

IDE integration

While the OpenDCS maintainers don't have time to maintain files for other IDEs, we want to make it as easy as possible for anyone to help and will welcome baseline configuration for others. If you wish to help in this way please created additional targets and required files to generate them.

Visual Studio Code or Eclipse

To create the appropriate project files for VS Code or Eclipse you can run the following task:

./gradlew opendcs:eclipse

Or you can use the VS Code gradle integration.

This will create the appropriate .project and .classpath files for intellisense to behave correctly.

Intellij

Intellij detects the gradle project and has a Gradle tool window.

Some gradle tasks require a python environment. Here is an example that launches inteliJ from a conda environment to have python enabled. (base) C:>conda activate karl (karl) C:\project\opendcs>C:\Programs\ideaIC-2022.1.win\bin\idea64.exe