From 3573bc019314f4d35f0b6f6c4402a9cb6da886bc Mon Sep 17 00:00:00 2001 From: Mike Neilson Date: Fri, 5 Dec 2025 23:08:25 +0000 Subject: [PATCH 1/5] move sub projects to new locations. --- .github/workflows/publish.yml | 8 +- Dockerfile | 4 +- README.md | 6 +- .../rest-api}/README.md | 2 +- .../rest-api}/build.gradle | 16 +-- .../org/opendcs/odcsapi/fixtures/DbType.java | 0 .../odcsapi/fixtures/TomcatServer.java | 0 .../org/opendcs/odcsapi/owasp/OwaspZap.java | 0 .../fixtures/DatabaseContextProvider.java | 0 .../fixtures/DatabaseSetupExtension.java | 0 .../odcsapi/res/it/AlgorithmResourcesIT.java | 0 .../odcsapi/res/it/AppResourcesIT.java | 0 .../org/opendcs/odcsapi/res/it/BaseIT.java | 0 .../res/it/ComputationResourcesIT.java | 0 .../odcsapi/res/it/ConfigResourcesIT.java | 0 .../odcsapi/res/it/DataSourceResourcesIT.java | 0 .../res/it/DatatypeUnitResourcesIT.java | 0 .../odcsapi/res/it/NetlistResourcesIT.java | 0 .../odcsapi/res/it/OdcsapiResourceIT.java | 0 .../res/it/OrganizationResourcesIT.java | 0 .../odcsapi/res/it/PlatformResourcesIT.java | 0 .../res/it/PresentationResourcesIT.java | 0 .../odcsapi/res/it/ReflistResourcesIT.java | 0 .../odcsapi/res/it/RoutingResourcesIT.java | 0 .../odcsapi/res/it/SiteResourcesIT.java | 0 .../odcsapi/res/it/TimeSeriesResourcesIT.java | 0 .../odcsapi/sec/AuthorizationTestIT.java | 0 .../odcsapi/sec/basicauth/FormAuthIT.java | 0 .../odcsapi/sec/openid/OpenIdAuthIT.java | 0 .../src/test/manual/EUConversionsPage.feature | 0 .../src/test/manual/algorithmsEditor.feature | 0 .../src/test/manual/algorithmsPage.feature | 0 .../test/manual/computationsEditor.feature | 0 .../src/test/manual/computationsPage.feature | 0 .../src/test/manual/configsEditor.feature | 0 .../src/test/manual/configsPage.feature | 0 .../test/manual/engineeringUnitsPage.feature | 0 .../src/test/manual/enumerationsPage.feature | 0 .../rest-api}/src/test/manual/general.feature | 0 .../rest-api}/src/test/manual/login.feature | 0 .../src/test/manual/netlistsEditor.feature | 0 .../src/test/manual/netlistsPage.feature | 0 .../src/test/manual/platformsEditor.feature | 0 .../src/test/manual/platformsPage.feature | 0 .../manual/presentationElementEditor.feature | 0 .../src/test/manual/presentationPage.feature | 0 .../src/test/manual/processEditor.feature | 0 .../src/test/manual/processesPage.feature | 0 .../src/test/manual/routingEditor.feature | 0 .../src/test/manual/routingPage.feature | 0 .../test/manual/scheduleEntryEditor.feature | 0 .../src/test/manual/scheduleEntryPage.feature | 0 .../src/test/manual/seasonsPage.feature | 0 .../src/test/manual/sitesEditor.feature | 0 .../src/test/manual/sitesPage.feature | 0 .../src/test/manual/sourcesEditor.feature | 0 .../src/test/manual/sourcesPage.feature | 0 .../algorithm_ref_add_to_previous.json | 0 .../algorithm_tempstring_check.json | 0 .../it/CWMS-Oracle/config_get_expected.json | 0 .../res/it/CWMS-Oracle/config_input_data.json | 0 .../res/it/CWMS-Oracle/site_get_expected.json | 0 .../CWMS-Oracle/site_get_refs_expected.json | 0 .../res/it/CWMS-Oracle/ts_data_expected.json | 0 .../res/it/DEFAULT/app_get_expected.json | 0 .../res/it/DEFAULT/app_get_refs_expected.json | 0 .../res/it/DEFAULT/app_insert_data.json | 0 .../it/DEFAULT/app_post_delete_expected.json | 0 .../DEFAULT/app_post_delete_insert_data.json | 0 .../res/it/DEFAULT/app_stat_expected.json | 0 .../DEFAULT/computation_algorithm_data.json | 0 .../res/it/DEFAULT/computation_app_data.json | 0 .../it/DEFAULT/computation_insert_data.json | 0 .../computation_post_delete_insert_data.json | 0 .../it/DEFAULT/computation_refs_expected.json | 0 .../res/it/DEFAULT/computation_site_data.json | 0 .../res/it/DEFAULT/config_get_expected.json | 0 .../res/it/DEFAULT/config_input_data.json | 0 .../DEFAULT/config_post_delete_expected.json | 0 .../config_post_delete_input_data.json | 0 .../res/it/DEFAULT/config_refs_expected.json | 0 .../DEFAULT/datasource_get_refs_expected.json | 0 .../datasource_get_refs_member_expected.json | 0 .../it/DEFAULT/datasource_insert_data.json | 0 .../datasource_insert_parent_data.json | 0 .../datasource_post_delete_insert_data.json | 0 ...source_post_delete_insert_member_data.json | 0 ...peunit_engineering_unit_2_insert_data.json | 0 ...typeunit_engineering_unit_insert_data.json | 0 .../datatypeunit_eu_post_delete_data.json | 0 .../datatypeunit_euconv_post_delete_data.json | 0 ...unit_euconv_post_delete_new_unit_data.json | 0 ...datatypeunit_get_euconv_list_expected.json | 0 .../datatypeunit_get_type_list_expected.json | 0 ...eunit_get_type_list_expected_filtered.json | 0 .../datatypeunit_insert_euconv_data.json | 0 .../it/DEFAULT/netlist_cnvtanl_expected.json | 0 .../it/DEFAULT/netlist_cnvtanl_input_data.txt | 0 .../res/it/DEFAULT/netlist_get_expected.json | 0 .../res/it/DEFAULT/netlist_insert_data.json | 0 .../DEFAULT/netlist_platform_insert_data.json | 0 .../netlist_post_delete_insert_data.json | 0 .../it/DEFAULT/netlist_site_insert_data.json | 0 .../DEFAULT/odcsapi_decode_request_dto.json | 0 .../it/DEFAULT/odcsapi_decode_response.json | 0 .../res/it/DEFAULT/odcsapi_platform_dto.json | 0 .../it/DEFAULT/odcsapi_property_specs.json | 0 .../res/it/DEFAULT/odcsapi_site_dto.json | 0 .../DEFAULT/platform_config_insert_data.json | 0 ...form_create_delete_config_insert_data.json | 0 .../platform_datasource_insert_data.json | 0 .../res/it/DEFAULT/platform_get_expected.json | 0 .../DEFAULT/platform_get_refs_expected.json | 0 .../DEFAULT/platform_get_stats_expected.json | 0 .../res/it/DEFAULT/platform_insert_data.json | 0 .../DEFAULT/platform_netlist_insert_data.json | 0 .../platform_post_delete_expected.json | 0 .../platform_post_delete_insert_data.json | 0 .../platform_routingspec_insert_data.json | 0 .../platform_schedule_entry_insert_data.json | 0 .../res/it/DEFAULT/platform_site_data.json | 0 .../platform_site_post_delete_data.json | 0 .../presentation_get_refs_expected.json | 0 .../it/DEFAULT/presentation_insert_data.json | 0 .../presentation_insert_parent_data.json | 0 .../presentation_post_delete_insert_data.json | 0 .../it/DEFAULT/reflist_get_refs_expected.json | 0 .../res/it/DEFAULT/reflist_insert_data.json | 0 .../reflist_post_delete_insert_data.json | 0 .../reflist_season_from_abbr_insert_data.json | 0 .../DEFAULT/reflist_season_insert_data.json | 0 .../it/DEFAULT/routing_app_insert_data.json | 0 .../DEFAULT/routing_config_insert_data.json | 0 .../DEFAULT/routing_dacq_events_expected.json | 0 .../routing_datasource_insert_data.json | 0 .../DEFAULT/routing_exec_status_expected.json | 0 .../res/it/DEFAULT/routing_insert_data.json | 0 .../it/DEFAULT/routing_platform_insert.json | 0 .../DEFAULT/routing_post_delete_expected.json | 0 .../routing_post_delete_insert_data.json | 0 .../res/it/DEFAULT/routing_refs_expected.json | 0 .../DEFAULT/routing_schedule_insert_data.json | 0 ...routing_schedule_post_delete_expected.json | 0 ...ting_schedule_post_delete_insert_data.json | 0 .../res/it/DEFAULT/routing_site_insert.json | 0 .../it/DEFAULT/routing_status_expected.json | 0 .../res/it/DEFAULT/site_post_delete_dto.json | 0 .../res/it/DEFAULT/site_setup_dto.json | 0 .../res/it/DEFAULT/ts_group_expected.json | 0 .../res/it/DEFAULT/ts_group_insert_data.json | 0 .../ts_group_post_delete_expected.json | 0 .../ts_group_post_delete_insert_data.json | 0 .../res/it/DEFAULT/ts_group_ref_expected.json | 0 .../it/DEFAULT/ts_interval_insert_data.json | 0 .../res/it/DEFAULT/ts_ref_expected.json | 0 .../it/DEFAULT/ts_ref_expected_inactive.json | 0 .../res/it/DEFAULT/ts_site_insert_data.json | 0 .../res/it/DEFAULT/ts_site_insert_data2.json | 0 .../res/it/DEFAULT/ts_spec_expected.json | 0 .../algorithm_ref_add_to_previous.json | 0 .../algorithm_tempstring_check.json | 0 .../OpenDCS-Postgres/site_get_expected.json | 0 .../site_get_refs_expected.json | 0 .../it/OpenDCS-Postgres/ts_data_expected.json | 0 .../src/test/resources/owasp/logfilter.txt | 0 .../test/resources/tomcat/conf/context.xml | 0 .../test/resources/tomcat/conf/logfilter.txt | 0 .../resources/tomcat/conf/logging.properties | 0 .../resources/tomcat/conf/tomcat-server.xml | 0 .../src/test/resources/tomcat/conf/web.xml | 0 .../api-client-java/.openapi-generator-ignore | 0 .../api-clients}/api-client-java/build.gradle | 0 .../api-client-java/src/main/resources/.keep | 0 .../api-client-typescript/.gitignore | 0 .../.openapi-generator-ignore | 0 .../api-client-typescript/build.gradle | 0 .../api-client-typescript/package-lock.json | 0 .../api-client-typescript/package.json | 0 .../src/main/resources/.keep | 0 .../api-client-typescript/tsconfig.json | 0 .../api-client-typescript/vite.config.js | 0 .../opendcs-rest-api}/README.md | 0 .../opendcs-rest-api}/build.gradle | 0 .../src/main/java/org/opendcs/.DS_Store | Bin .../main/java/org/opendcs/odcsapi/.DS_Store | Bin .../opendcs/odcsapi/beans/ApiAlgoParm.java | 0 .../opendcs/odcsapi/beans/ApiAlgorithm.java | 0 .../odcsapi/beans/ApiAlgorithmRef.java | 0 .../odcsapi/beans/ApiAlgorithmScript.java | 0 .../org/opendcs/odcsapi/beans/ApiAppRef.java | 0 .../opendcs/odcsapi/beans/ApiAppStatus.java | 0 .../opendcs/odcsapi/beans/ApiCompParm.java | 0 .../opendcs/odcsapi/beans/ApiComputation.java | 0 .../odcsapi/beans/ApiComputationRef.java | 0 .../opendcs/odcsapi/beans/ApiConfigRef.java | 0 .../odcsapi/beans/ApiConfigScript.java | 0 .../odcsapi/beans/ApiConfigScriptSensor.java | 0 .../odcsapi/beans/ApiConfigSensor.java | 0 .../opendcs/odcsapi/beans/ApiDacqEvent.java | 0 .../opendcs/odcsapi/beans/ApiDataSource.java | 0 .../beans/ApiDataSourceGroupMember.java | 0 .../odcsapi/beans/ApiDataSourceRef.java | 0 .../opendcs/odcsapi/beans/ApiDataType.java | 0 .../odcsapi/beans/ApiDecodedMessage.java | 0 .../odcsapi/beans/ApiDecodesTSValue.java | 0 .../odcsapi/beans/ApiDecodesTimeSeries.java | 0 .../opendcs/odcsapi/beans/ApiInterval.java | 0 .../opendcs/odcsapi/beans/ApiLoadingApp.java | 0 .../opendcs/odcsapi/beans/ApiLogMessage.java | 0 .../org/opendcs/odcsapi/beans/ApiNetList.java | 0 .../opendcs/odcsapi/beans/ApiNetListItem.java | 0 .../opendcs/odcsapi/beans/ApiNetlistRef.java | 0 .../odcsapi/beans/ApiOrganization.java | 0 .../opendcs/odcsapi/beans/ApiPlatform.java | 0 .../odcsapi/beans/ApiPlatformConfig.java | 0 .../opendcs/odcsapi/beans/ApiPlatformRef.java | 0 .../odcsapi/beans/ApiPlatformSensor.java | 0 .../odcsapi/beans/ApiPlatformStatus.java | 0 .../odcsapi/beans/ApiPresentationElement.java | 0 .../odcsapi/beans/ApiPresentationGroup.java | 0 .../odcsapi/beans/ApiPresentationRef.java | 0 .../opendcs/odcsapi/beans/ApiPropSpec.java | 0 .../opendcs/odcsapi/beans/ApiRawMessage.java | 0 .../org/opendcs/odcsapi/beans/ApiRefList.java | 0 .../opendcs/odcsapi/beans/ApiRefListItem.java | 0 .../org/opendcs/odcsapi/beans/ApiRouting.java | 0 .../odcsapi/beans/ApiRoutingExecStatus.java | 0 .../opendcs/odcsapi/beans/ApiRoutingRef.java | 0 .../odcsapi/beans/ApiRoutingStatus.java | 0 .../odcsapi/beans/ApiScheduleEntry.java | 0 .../odcsapi/beans/ApiScheduleEntryRef.java | 0 .../beans/ApiScriptFormatStatement.java | 0 .../org/opendcs/odcsapi/beans/ApiSeason.java | 0 .../org/opendcs/odcsapi/beans/ApiSite.java | 0 .../org/opendcs/odcsapi/beans/ApiSiteRef.java | 0 .../odcsapi/beans/ApiTimeSeriesData.java | 0 .../beans/ApiTimeSeriesIdentifier.java | 0 .../odcsapi/beans/ApiTimeSeriesSpec.java | 0 .../odcsapi/beans/ApiTimeSeriesValue.java | 0 .../odcsapi/beans/ApiTokenPosition.java | 0 .../odcsapi/beans/ApiTransportMedium.java | 0 .../org/opendcs/odcsapi/beans/ApiTsGroup.java | 0 .../opendcs/odcsapi/beans/ApiTsGroupRef.java | 0 .../org/opendcs/odcsapi/beans/ApiUnit.java | 0 .../odcsapi/beans/ApiUnitConverter.java | 0 .../opendcs/odcsapi/beans/DecodeRequest.java | 0 .../org/opendcs/odcsapi/beans/Status.java | 0 .../odcsapi/dao/ApiAuthorizationDAI.java | 0 .../org/opendcs/odcsapi/dao/DbException.java | 0 .../odcsapi/dao/OpenDcsDatabaseFactory.java | 0 .../opendcs/odcsapi/dao/OrganizationDao.java | 0 .../odcsapi/dao/cwms/CwmsOrganizationDao.java | 0 .../dao/cwms/SessionOfficePreparer.java | 0 .../dao/datasource/ConnectionPreparer.java | 0 .../ConnectionPreparingDataSource.java | 0 .../DelegatingConnectionPreparer.java | 0 .../dao/datasource/DelegatingDataSource.java | 0 .../DatabaseItemNotFoundException.java | 0 .../MissingParameterException.java | 0 .../errorhandling/WebAppException.java | 0 .../odcsapi/hydrojson/DbInterface.java | 0 .../odcsapi/opendcs_dep/PropSpecHelper.java | 0 .../odcsapi/opendcs_dep/TestDecoder.java | 0 .../odcsapi/res/AlgorithmResources.java | 0 .../odcsapi/res/AppExceptionMapper.java | 0 .../org/opendcs/odcsapi/res/AppResources.java | 0 .../odcsapi/res/ComputationResources.java | 0 .../opendcs/odcsapi/res/ConfigResources.java | 0 .../odcsapi/res/ContextPropertySetup.java | 0 .../odcsapi/res/DataSourceContextCreator.java | 0 .../odcsapi/res/DataSourceResources.java | 0 .../odcsapi/res/DatatypeUnitResources.java | 0 .../opendcs/odcsapi/res/NetlistResources.java | 0 .../res/ObjectMapperContextResolver.java | 0 .../opendcs/odcsapi/res/OdcsapiResource.java | 0 .../opendcs/odcsapi/res/OpenDcsResource.java | 0 .../odcsapi/res/PlatformResources.java | 0 .../odcsapi/res/PresentationResources.java | 0 .../opendcs/odcsapi/res/ReflistResources.java | 0 .../opendcs/odcsapi/res/ResourceExamples.java | 0 .../org/opendcs/odcsapi/res/RestServices.java | 0 .../opendcs/odcsapi/res/RoutingResources.java | 0 .../opendcs/odcsapi/res/SiteResources.java | 0 .../odcsapi/res/TimeSeriesResources.java | 0 .../odcsapi/sec/AuthorizationCheck.java | 67 +++++++++ .../opendcs/odcsapi/sec/OpenDcsApiRoles.java | 0 .../opendcs/odcsapi/sec/OpenDcsPrincipal.java | 0 .../odcsapi/sec/OpenDcsSecurityContext.java | 0 .../odcsapi/sec/OrganizationResource.java | 0 .../opendcs/odcsapi/sec/SecurityFilter.java | 0 .../odcsapi/sec/SecurityHeadersFilter.java | 0 .../opendcs/odcsapi/sec/SessionResource.java | 0 .../odcsapi/sec/basicauth/BasicAuthCheck.java | 84 +++++++++++ .../sec/basicauth/BasicAuthResource.java | 0 .../odcsapi/sec/basicauth/Credentials.java | 0 .../basicauth/OpenTsdbAuthorizationDAO.java | 0 .../sec/cwms/CwmsAuthorizationDAO.java | 0 .../odcsapi/sec/openid/JwtVerifier.java | 0 .../odcsapi/sec/openid/OidcAuthCheck.java | 130 ++++++++++++++++++ .../opendcs/odcsapi/util/ApiConstants.java | 0 .../odcsapi/util/ApiPropertiesUtil.java | 0 .../src/main/webapp/WEB-INF/web.xml | 0 .../webapp/swaggerui/swagger-initializer.js | 0 .../opendcs_dep/PropSpecHelperTest.java | 0 .../odcsapi/res/AlgorithmResourcesTest.java | 0 .../opendcs/odcsapi/res/AppResourcesTest.java | 0 .../odcsapi/res/ComputationResourcesTest.java | 0 .../odcsapi/res/ConfigResourcesTest.java | 0 .../odcsapi/res/DataSourceResourcesTest.java | 0 .../res/DatatypeUnitResourcesTest.java | 0 .../odcsapi/res/NetlistResourcesTest.java | 0 .../odcsapi/res/PlatformResourcesTest.java | 0 .../res/PresentationResourcesTest.java | 0 .../odcsapi/res/ReflistResourcesTest.java | 0 .../odcsapi/res/RoutingResourcesTest.java | 0 .../odcsapi/res/SiteResourcesTest.java | 0 .../odcsapi/res/TimeSeriesResourcesTest.java | 0 .../opendcs-web-ui}/README.md | 0 .../opendcs-web-ui}/build.gradle | 0 .../opendcs-web-ui}/examples/api.conf | 2 +- .../java/filter/ContentSecurityPolicy.java | 0 .../opendcs/webui/themes/BootstrapTheme.java | 0 .../webui/themes/BootswatchThemes.java | 0 .../java/org/opendcs/webui/themes/Theme.java | 0 .../org/opendcs/webui/themes/ThemeSet.java | 0 .../src/main/java/portal/PortalBase.java | 0 .../java/portal/computations/Algorithms.java | 0 .../portal/computations/Computations.java | 0 .../java/portal/computations/Processes.java | 0 .../src/main/java/portal/decodes/Configs.java | 0 .../src/main/java/portal/decodes/Error.java | 0 .../src/main/java/portal/decodes/Login.java | 0 .../java/portal/decodes/MainDashboard.java | 0 .../src/main/java/portal/decodes/Netlist.java | 0 .../main/java/portal/decodes/Platforms.java | 0 .../java/portal/decodes/Presentation.java | 0 .../src/main/java/portal/decodes/Routing.java | 0 .../main/java/portal/decodes/Schedule.java | 0 .../src/main/java/portal/decodes/Sites.java | 0 .../src/main/java/portal/decodes/Sources.java | 0 .../java/portal/rledit/DataTypeEquiv.java | 0 .../java/portal/rledit/EngineeringUnits.java | 0 .../main/java/portal/rledit/Enumerations.java | 0 .../java/portal/rledit/EuConversions.java | 0 .../src/main/java/portal/rledit/Seasons.java | 0 .../webapp/WEB-INF/app_pages/algorithms.jsp | 0 .../webapp/WEB-INF/app_pages/computations.jsp | 0 .../main/webapp/WEB-INF/app_pages/configs.jsp | 0 .../WEB-INF/app_pages/engineering_units.jsp | 0 .../webapp/WEB-INF/app_pages/enumerations.jsp | 0 .../main/webapp/WEB-INF/app_pages/error.jsp | 0 .../WEB-INF/app_pages/eu_conversions.jsp | 0 .../main/webapp/WEB-INF/app_pages/login.jsp | 0 .../main/webapp/WEB-INF/app_pages/netlist.jsp | 0 .../webapp/WEB-INF/app_pages/platforms.jsp | 0 .../webapp/WEB-INF/app_pages/presentation.jsp | 0 .../webapp/WEB-INF/app_pages/processes.jsp | 0 .../main/webapp/WEB-INF/app_pages/routing.jsp | 0 .../webapp/WEB-INF/app_pages/schedule.jsp | 0 .../main/webapp/WEB-INF/app_pages/seasons.jsp | 0 .../main/webapp/WEB-INF/app_pages/sites.jsp | 0 .../main/webapp/WEB-INF/app_pages/sources.jsp | 0 .../main/webapp/WEB-INF/common/footer.jspf | 0 .../main/webapp/WEB-INF/common/header.jspf | 0 .../WEB-INF/common/modals/notification.jspf | 0 .../WEB-INF/common/modals/organizations.jspf | 0 .../webapp/WEB-INF/common/modals/waiting.jspf | 0 .../webapp/WEB-INF/common/modals/yesno.jspf | 0 .../main/webapp/WEB-INF/common/scripts.jspf | 0 .../main/webapp/WEB-INF/common/sidebar.jspf | 0 .../WEB-INF/common/theme-selection.jspf | 0 .../main/webapp/WEB-INF/common/top-bar.jspf | 0 .../WEB-INF/data_modals/algorithm_edit.jspf | 0 .../WEB-INF/data_modals/algorithm_select.jspf | 0 .../WEB-INF/data_modals/computation_edit.jspf | 0 .../webapp/WEB-INF/data_modals/config.jspf | 0 .../WEB-INF/data_modals/config_sensor.jspf | 0 .../WEB-INF/data_modals/data_source.jspf | 0 .../WEB-INF/data_modals/decodes_script.jspf | 0 .../webapp/WEB-INF/data_modals/netlist.jspf | 0 .../webapp/WEB-INF/data_modals/platform.jspf | 0 .../WEB-INF/data_modals/platform_select.jspf | 0 .../WEB-INF/data_modals/platform_sensor.jspf | 0 .../presentation_group_element.jspf | 0 .../webapp/WEB-INF/data_modals/process.jspf | 0 .../webapp/WEB-INF/data_modals/routing.jspf | 0 .../WEB-INF/data_modals/schedule_entry.jspf | 0 .../main/webapp/WEB-INF/data_modals/site.jspf | 0 .../WEB-INF/data_modals/transportmedia.jspf | 0 .../src/main/webapp/WEB-INF/web.xml | 0 .../src/main/webapp/index.html | 0 .../icons/material/fonts/material-icons.svg | 0 .../icons/material/fonts/material-icons.ttf | Bin .../icons/material/fonts/material-icons.woff | Bin .../css/icons/material/styles.min.css | 0 .../main/webapp/resources/css/login-form.css | 0 .../src/main/webapp/resources/css/main.css | 0 .../webapp/resources/css/opendcs-shim.css | 0 .../resources/css/select.dataTables.css | 0 .../webapp/resources/img/odcs-favicon.png | Bin .../src/main/webapp/resources/img/river_2.jpg | Bin .../img/user_profile_image_large.png | Bin .../main/webapp/resources/js/algorithms.js | 0 .../main/webapp/resources/js/computations.js | 0 .../src/main/webapp/resources/js/configs.js | 0 .../resources/js/datatables/datatables.js | 0 .../webapp/resources/js/datatables/helpers.js | 0 .../src/main/webapp/resources/js/decodes.js | 0 .../webapp/resources/js/engineering_units.js | 0 .../main/webapp/resources/js/enumerations.js | 0 .../webapp/resources/js/eu_conversions.js | 0 .../src/main/webapp/resources/js/layout.js | 0 .../webapp/resources/js/lib/date_utilities.js | 0 .../webapp/resources/js/lib/dom_utilities.js | 0 .../webapp/resources/js/lib/list_utilities.js | 0 .../resources/js/lib/object_utilities.js | 0 .../resources/js/lib/opendcs_utilities.js | 0 .../src/main/webapp/resources/js/lib/time.js | 0 .../webapp/resources/js/lib/web_utilities.js | 0 .../src/main/webapp/resources/js/login.js | 0 .../src/main/webapp/resources/js/main.js | 0 .../webapp/resources/js/modals/credentials.js | 0 .../resources/js/modals/notification.js | 0 .../resources/js/modals/organizations.js | 0 .../webapp/resources/js/modals/waiting.js | 0 .../main/webapp/resources/js/modals/yesno.js | 0 .../src/main/webapp/resources/js/netlist.js | 0 .../src/main/webapp/resources/js/platforms.js | 0 .../main/webapp/resources/js/presentation.js | 0 .../src/main/webapp/resources/js/processes.js | 0 .../src/main/webapp/resources/js/routing.js | 0 .../src/main/webapp/resources/js/schedule.js | 0 .../src/main/webapp/resources/js/seasons.js | 0 .../src/main/webapp/resources/js/sidebar.js | 0 .../src/main/webapp/resources/js/sites.js | 0 .../src/main/webapp/resources/js/sources.js | 0 .../src/test/java/portal/AlgorithmsTest.java | 0 settings.gradle | 18 ++- 438 files changed, 314 insertions(+), 23 deletions(-) rename {opendcs-integration-test => integrationtesting/rest-api}/README.md (96%) rename {opendcs-integration-test => integrationtesting/rest-api}/build.gradle (94%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/main/java/org/opendcs/odcsapi/fixtures/DbType.java (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/main/java/org/opendcs/odcsapi/fixtures/TomcatServer.java (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/main/java/org/opendcs/odcsapi/owasp/OwaspZap.java (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/java/org/opendcs/odcsapi/fixtures/DatabaseContextProvider.java (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/java/org/opendcs/odcsapi/fixtures/DatabaseSetupExtension.java (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/java/org/opendcs/odcsapi/res/it/AlgorithmResourcesIT.java (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/java/org/opendcs/odcsapi/res/it/AppResourcesIT.java (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/java/org/opendcs/odcsapi/res/it/BaseIT.java (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/java/org/opendcs/odcsapi/res/it/ComputationResourcesIT.java (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/java/org/opendcs/odcsapi/res/it/ConfigResourcesIT.java (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/java/org/opendcs/odcsapi/res/it/DataSourceResourcesIT.java (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/java/org/opendcs/odcsapi/res/it/DatatypeUnitResourcesIT.java (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/java/org/opendcs/odcsapi/res/it/NetlistResourcesIT.java (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/java/org/opendcs/odcsapi/res/it/OdcsapiResourceIT.java (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/java/org/opendcs/odcsapi/res/it/OrganizationResourcesIT.java (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/java/org/opendcs/odcsapi/res/it/PlatformResourcesIT.java (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/java/org/opendcs/odcsapi/res/it/PresentationResourcesIT.java (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/java/org/opendcs/odcsapi/res/it/ReflistResourcesIT.java (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/java/org/opendcs/odcsapi/res/it/RoutingResourcesIT.java (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/java/org/opendcs/odcsapi/res/it/SiteResourcesIT.java (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/java/org/opendcs/odcsapi/res/it/TimeSeriesResourcesIT.java (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/java/org/opendcs/odcsapi/sec/AuthorizationTestIT.java (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/java/org/opendcs/odcsapi/sec/basicauth/FormAuthIT.java (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/java/org/opendcs/odcsapi/sec/openid/OpenIdAuthIT.java (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/manual/EUConversionsPage.feature (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/manual/algorithmsEditor.feature (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/manual/algorithmsPage.feature (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/manual/computationsEditor.feature (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/manual/computationsPage.feature (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/manual/configsEditor.feature (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/manual/configsPage.feature (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/manual/engineeringUnitsPage.feature (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/manual/enumerationsPage.feature (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/manual/general.feature (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/manual/login.feature (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/manual/netlistsEditor.feature (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/manual/netlistsPage.feature (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/manual/platformsEditor.feature (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/manual/platformsPage.feature (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/manual/presentationElementEditor.feature (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/manual/presentationPage.feature (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/manual/processEditor.feature (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/manual/processesPage.feature (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/manual/routingEditor.feature (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/manual/routingPage.feature (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/manual/scheduleEntryEditor.feature (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/manual/scheduleEntryPage.feature (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/manual/seasonsPage.feature (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/manual/sitesEditor.feature (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/manual/sitesPage.feature (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/manual/sourcesEditor.feature (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/manual/sourcesPage.feature (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/CWMS-Oracle/algorithm_ref_add_to_previous.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/CWMS-Oracle/algorithm_tempstring_check.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/CWMS-Oracle/config_get_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/CWMS-Oracle/config_input_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/CWMS-Oracle/site_get_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/CWMS-Oracle/site_get_refs_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/CWMS-Oracle/ts_data_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/app_get_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/app_get_refs_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/app_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/app_post_delete_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/app_post_delete_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/app_stat_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/computation_algorithm_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/computation_app_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/computation_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/computation_post_delete_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/computation_refs_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/computation_site_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/config_get_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/config_input_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/config_post_delete_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/config_post_delete_input_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/config_refs_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datasource_get_refs_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datasource_get_refs_member_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datasource_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datasource_insert_parent_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datasource_post_delete_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datasource_post_delete_insert_member_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_engineering_unit_2_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_engineering_unit_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_eu_post_delete_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_euconv_post_delete_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_euconv_post_delete_new_unit_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_get_euconv_list_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_get_type_list_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_get_type_list_expected_filtered.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_insert_euconv_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/netlist_cnvtanl_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/netlist_cnvtanl_input_data.txt (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/netlist_get_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/netlist_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/netlist_platform_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/netlist_post_delete_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/netlist_site_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/odcsapi_decode_request_dto.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/odcsapi_decode_response.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/odcsapi_platform_dto.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/odcsapi_property_specs.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/odcsapi_site_dto.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_config_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_create_delete_config_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_datasource_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_get_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_get_refs_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_get_stats_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_netlist_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_post_delete_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_post_delete_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_routingspec_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_schedule_entry_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_site_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_site_post_delete_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/presentation_get_refs_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/presentation_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/presentation_insert_parent_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/presentation_post_delete_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/reflist_get_refs_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/reflist_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/reflist_post_delete_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/reflist_season_from_abbr_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/reflist_season_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_app_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_config_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_dacq_events_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_datasource_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_exec_status_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_platform_insert.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_post_delete_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_post_delete_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_refs_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_schedule_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_schedule_post_delete_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_schedule_post_delete_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_site_insert.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_status_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/site_post_delete_dto.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/site_setup_dto.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_group_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_group_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_group_post_delete_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_group_post_delete_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_group_ref_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_interval_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_ref_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_ref_expected_inactive.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_site_insert_data.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_site_insert_data2.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_spec_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/OpenDCS-Postgres/algorithm_ref_add_to_previous.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/OpenDCS-Postgres/algorithm_tempstring_check.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/OpenDCS-Postgres/site_get_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/OpenDCS-Postgres/site_get_refs_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/org/opendcs/odcsapi/res/it/OpenDCS-Postgres/ts_data_expected.json (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/owasp/logfilter.txt (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/tomcat/conf/context.xml (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/tomcat/conf/logfilter.txt (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/tomcat/conf/logging.properties (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/tomcat/conf/tomcat-server.xml (100%) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/resources/tomcat/conf/web.xml (100%) rename {api-clients => java/api-clients}/api-client-java/.openapi-generator-ignore (100%) rename {api-clients => java/api-clients}/api-client-java/build.gradle (100%) rename {api-clients => java/api-clients}/api-client-java/src/main/resources/.keep (100%) rename {api-clients => java/api-clients}/api-client-typescript/.gitignore (100%) rename {api-clients => java/api-clients}/api-client-typescript/.openapi-generator-ignore (100%) rename {api-clients => java/api-clients}/api-client-typescript/build.gradle (100%) rename {api-clients => java/api-clients}/api-client-typescript/package-lock.json (100%) rename {api-clients => java/api-clients}/api-client-typescript/package.json (100%) rename {api-clients => java/api-clients}/api-client-typescript/src/main/resources/.keep (100%) rename {api-clients => java/api-clients}/api-client-typescript/tsconfig.json (100%) rename {api-clients => java/api-clients}/api-client-typescript/vite.config.js (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/README.md (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/build.gradle (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/.DS_Store (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/.DS_Store (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiAlgoParm.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiAlgorithm.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiAlgorithmRef.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiAlgorithmScript.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiAppRef.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiAppStatus.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiCompParm.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiComputation.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiComputationRef.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiConfigRef.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiConfigScript.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiConfigScriptSensor.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiConfigSensor.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiDacqEvent.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiDataSource.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiDataSourceGroupMember.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiDataSourceRef.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiDataType.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiDecodedMessage.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiDecodesTSValue.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiDecodesTimeSeries.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiInterval.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiLoadingApp.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiLogMessage.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiNetList.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiNetListItem.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiNetlistRef.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiOrganization.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiPlatform.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiPlatformConfig.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiPlatformRef.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiPlatformSensor.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiPlatformStatus.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiPresentationElement.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiPresentationGroup.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiPresentationRef.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiPropSpec.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiRawMessage.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiRefList.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiRefListItem.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiRouting.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiRoutingExecStatus.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiRoutingRef.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiRoutingStatus.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiScheduleEntry.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiScheduleEntryRef.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiScriptFormatStatement.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiSeason.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiSite.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiSiteRef.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiTimeSeriesData.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiTimeSeriesIdentifier.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiTimeSeriesSpec.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiTimeSeriesValue.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiTokenPosition.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiTransportMedium.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiTsGroup.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiTsGroupRef.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiUnit.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/ApiUnitConverter.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/DecodeRequest.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/beans/Status.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/dao/ApiAuthorizationDAI.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/dao/DbException.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/dao/OpenDcsDatabaseFactory.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/dao/OrganizationDao.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/dao/cwms/CwmsOrganizationDao.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/dao/cwms/SessionOfficePreparer.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/dao/datasource/ConnectionPreparer.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/dao/datasource/ConnectionPreparingDataSource.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/dao/datasource/DelegatingConnectionPreparer.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/dao/datasource/DelegatingDataSource.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/errorhandling/DatabaseItemNotFoundException.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/errorhandling/MissingParameterException.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/errorhandling/WebAppException.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/hydrojson/DbInterface.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/opendcs_dep/PropSpecHelper.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/opendcs_dep/TestDecoder.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/res/AlgorithmResources.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/res/AppExceptionMapper.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/res/AppResources.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/res/ComputationResources.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/res/ConfigResources.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/res/ContextPropertySetup.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/res/DataSourceContextCreator.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/res/DataSourceResources.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/res/DatatypeUnitResources.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/res/NetlistResources.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/res/ObjectMapperContextResolver.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/res/OdcsapiResource.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/res/OpenDcsResource.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/res/PlatformResources.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/res/PresentationResources.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/res/ReflistResources.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/res/ResourceExamples.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/res/RestServices.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/res/RoutingResources.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/res/SiteResources.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/res/TimeSeriesResources.java (100%) create mode 100644 java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/AuthorizationCheck.java rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/sec/OpenDcsApiRoles.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/sec/OpenDcsPrincipal.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/sec/OpenDcsSecurityContext.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/sec/OrganizationResource.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/sec/SecurityFilter.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/sec/SecurityHeadersFilter.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/sec/SessionResource.java (100%) create mode 100644 java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/basicauth/BasicAuthCheck.java rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/sec/basicauth/BasicAuthResource.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/sec/basicauth/Credentials.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/sec/basicauth/OpenTsdbAuthorizationDAO.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/sec/cwms/CwmsAuthorizationDAO.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/sec/openid/JwtVerifier.java (100%) create mode 100644 java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/openid/OidcAuthCheck.java rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/util/ApiConstants.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/java/org/opendcs/odcsapi/util/ApiPropertiesUtil.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/webapp/WEB-INF/web.xml (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/main/webapp/swaggerui/swagger-initializer.js (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/test/java/org/opendcs/odcsapi/opendcs_dep/PropSpecHelperTest.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/test/java/org/opendcs/odcsapi/res/AlgorithmResourcesTest.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/test/java/org/opendcs/odcsapi/res/AppResourcesTest.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/test/java/org/opendcs/odcsapi/res/ComputationResourcesTest.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/test/java/org/opendcs/odcsapi/res/ConfigResourcesTest.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/test/java/org/opendcs/odcsapi/res/DataSourceResourcesTest.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/test/java/org/opendcs/odcsapi/res/DatatypeUnitResourcesTest.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/test/java/org/opendcs/odcsapi/res/NetlistResourcesTest.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/test/java/org/opendcs/odcsapi/res/PlatformResourcesTest.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/test/java/org/opendcs/odcsapi/res/PresentationResourcesTest.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/test/java/org/opendcs/odcsapi/res/ReflistResourcesTest.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/test/java/org/opendcs/odcsapi/res/RoutingResourcesTest.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/test/java/org/opendcs/odcsapi/res/SiteResourcesTest.java (100%) rename {opendcs-rest-api => java/opendcs-rest-api}/src/test/java/org/opendcs/odcsapi/res/TimeSeriesResourcesTest.java (100%) rename {opendcs-web-client => java/opendcs-web-ui}/README.md (100%) rename {opendcs-web-client => java/opendcs-web-ui}/build.gradle (100%) rename {opendcs-web-client => java/opendcs-web-ui}/examples/api.conf (52%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/java/filter/ContentSecurityPolicy.java (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/java/org/opendcs/webui/themes/BootstrapTheme.java (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/java/org/opendcs/webui/themes/BootswatchThemes.java (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/java/org/opendcs/webui/themes/Theme.java (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/java/org/opendcs/webui/themes/ThemeSet.java (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/java/portal/PortalBase.java (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/java/portal/computations/Algorithms.java (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/java/portal/computations/Computations.java (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/java/portal/computations/Processes.java (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/java/portal/decodes/Configs.java (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/java/portal/decodes/Error.java (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/java/portal/decodes/Login.java (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/java/portal/decodes/MainDashboard.java (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/java/portal/decodes/Netlist.java (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/java/portal/decodes/Platforms.java (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/java/portal/decodes/Presentation.java (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/java/portal/decodes/Routing.java (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/java/portal/decodes/Schedule.java (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/java/portal/decodes/Sites.java (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/java/portal/decodes/Sources.java (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/java/portal/rledit/DataTypeEquiv.java (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/java/portal/rledit/EngineeringUnits.java (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/java/portal/rledit/Enumerations.java (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/java/portal/rledit/EuConversions.java (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/java/portal/rledit/Seasons.java (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/app_pages/algorithms.jsp (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/app_pages/computations.jsp (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/app_pages/configs.jsp (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/app_pages/engineering_units.jsp (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/app_pages/enumerations.jsp (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/app_pages/error.jsp (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/app_pages/eu_conversions.jsp (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/app_pages/login.jsp (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/app_pages/netlist.jsp (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/app_pages/platforms.jsp (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/app_pages/presentation.jsp (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/app_pages/processes.jsp (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/app_pages/routing.jsp (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/app_pages/schedule.jsp (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/app_pages/seasons.jsp (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/app_pages/sites.jsp (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/app_pages/sources.jsp (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/common/footer.jspf (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/common/header.jspf (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/common/modals/notification.jspf (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/common/modals/organizations.jspf (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/common/modals/waiting.jspf (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/common/modals/yesno.jspf (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/common/scripts.jspf (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/common/sidebar.jspf (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/common/theme-selection.jspf (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/common/top-bar.jspf (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/data_modals/algorithm_edit.jspf (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/data_modals/algorithm_select.jspf (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/data_modals/computation_edit.jspf (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/data_modals/config.jspf (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/data_modals/config_sensor.jspf (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/data_modals/data_source.jspf (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/data_modals/decodes_script.jspf (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/data_modals/netlist.jspf (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/data_modals/platform.jspf (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/data_modals/platform_select.jspf (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/data_modals/platform_sensor.jspf (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/data_modals/presentation_group_element.jspf (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/data_modals/process.jspf (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/data_modals/routing.jspf (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/data_modals/schedule_entry.jspf (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/data_modals/site.jspf (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/data_modals/transportmedia.jspf (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/WEB-INF/web.xml (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/index.html (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/css/icons/material/fonts/material-icons.svg (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/css/icons/material/fonts/material-icons.ttf (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/css/icons/material/fonts/material-icons.woff (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/css/icons/material/styles.min.css (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/css/login-form.css (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/css/main.css (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/css/opendcs-shim.css (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/css/select.dataTables.css (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/img/odcs-favicon.png (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/img/river_2.jpg (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/img/user_profile_image_large.png (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/js/algorithms.js (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/js/computations.js (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/js/configs.js (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/js/datatables/datatables.js (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/js/datatables/helpers.js (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/js/decodes.js (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/js/engineering_units.js (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/js/enumerations.js (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/js/eu_conversions.js (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/js/layout.js (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/js/lib/date_utilities.js (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/js/lib/dom_utilities.js (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/js/lib/list_utilities.js (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/js/lib/object_utilities.js (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/js/lib/opendcs_utilities.js (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/js/lib/time.js (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/js/lib/web_utilities.js (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/js/login.js (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/js/main.js (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/js/modals/credentials.js (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/js/modals/notification.js (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/js/modals/organizations.js (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/js/modals/waiting.js (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/js/modals/yesno.js (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/js/netlist.js (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/js/platforms.js (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/js/presentation.js (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/js/processes.js (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/js/routing.js (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/js/schedule.js (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/js/seasons.js (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/js/sidebar.js (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/js/sites.js (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/main/webapp/resources/js/sources.js (100%) rename {opendcs-web-client => java/opendcs-web-ui}/src/test/java/portal/AlgorithmsTest.java (100%) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index dc8dba83f..967ae30d0 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -22,17 +22,17 @@ jobs: run: ./gradlew generateOpenAPI - name: Attach OpenDCS REST API WAR file run: | - gh release upload ${{ github.event.release.tag_name }} opendcs-rest-api/build/libs/opendcs-rest-api-${{ github.event.release.tag_name }}.war --repo ${{ github.repository }} + gh release upload ${{ github.event.release.tag_name }} java/opendcs-rest-api/build/libs/opendcs-rest-api-${{ github.event.release.tag_name }}.war --repo ${{ github.repository }} env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Attach OpenDCS Web Client WAR file + - name: Attach OpenDCS Web UI WAR file run: | - gh release upload ${{ github.event.release.tag_name }} opendcs-web-client/build/libs/opendcs-web-client-${{ github.event.release.tag_name }}.war --repo ${{ github.repository }} + gh release upload ${{ github.event.release.tag_name }} java/opendcs-web-ui/build/libs/opendcs-web-ui-${{ github.event.release.tag_name }}.war --repo ${{ github.repository }} env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Attach OpenAPI Specification run: | - gh release upload ${{ github.event.release.tag_name }} opendcs-rest-api/build/swagger/opendcs-openapi.json --repo ${{ github.repository }} + gh release upload ${{ github.event.release.tag_name }} java/opendcs-rest-api/build/swagger/opendcs-openapi.json --repo ${{ github.repository }} env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} container-release: diff --git a/Dockerfile b/Dockerfile index eab7d8930..8f975e898 100644 --- a/Dockerfile +++ b/Dockerfile @@ -27,8 +27,8 @@ CMD ["/usr/local/tomcat/bin/catalina.sh","run"] FROM tomcat_base AS api -COPY --from=builder /builddir/opendcs-rest-api/build/libs/*.war /usr/local/tomcat/webapps/odcsapi.war -COPY --from=builder /builddir/opendcs-web-client/build/libs/*.war /usr/local/tomcat/webapps/ROOT.war +COPY --from=builder /builddir/java/opendcs-rest-api/build/libs/*.war /usr/local/tomcat/webapps/odcsapi.war +COPY --from=builder /builddir/java/opendcs-web-ui/build/libs/*.war /usr/local/tomcat/webapps/ROOT.war COPY /docker_files/tomcat/conf/context.xml /usr/local/tomcat/conf/Catalina/localhost/odcsapi.xml COPY /docker_files/tomcat/conf/tomcat-server.xml /usr/local/tomcat/conf/server.xml COPY /docker_files/tomcat/conf/setenv.sh /usr/local/tomcat/bin diff --git a/README.md b/README.md index ce73499ba..9d7c24273 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,8 @@ OpenDCS Rest API is web application that provides access to the OpenDCS database OpenDCS Rest API is intended to run as a stand-alone Java program. It uses embedded JETTY to implement the web services. # Structure -./opendcs-rest-api - contains source files for the OpenDCS REST API -./opendcs-web-client - contains source files for the OpenDCS Web Application Client +./java/opendcs-rest-api - contains source files for the OpenDCS REST API +./java/opendcs-web-ui - contains source files for the OpenDCS Web Application Client ./opendcs-integration-test - contains scripts for running embedded tomcat to deploy the REST API and Web Client wars for testing. @@ -36,7 +36,7 @@ properties that should be configured for your system. - `opendcs.rest.api.authorization.jwt.issuer.url` - for openid authorization this is the Issuer URL ## OPENDCS Web Client -The gradle task `./gradlew :opendcs-web-client:war` will create a war file in the `build/libs` directory. +The gradle task `./gradlew :opendcs-web-ui:war` will create a war file in the `build/libs` directory. # CI/CD The GitHub Action workflow [default.yml](./.github/workflows/default.yml) contains the primary CI/CD pipeline for the project. diff --git a/opendcs-integration-test/README.md b/integrationtesting/rest-api/README.md similarity index 96% rename from opendcs-integration-test/README.md rename to integrationtesting/rest-api/README.md index 74251e209..a38d387fd 100644 --- a/opendcs-integration-test/README.md +++ b/integrationtesting/rest-api/README.md @@ -21,5 +21,5 @@ environment variables for the database connection information and CWMS office id REST API config files can be found at [src/test/resources/rest-api/conf](src/test/resources/rest-api/conf) which includes separate configurations for CWMS and OpenTSDB. -Web Client config files can be found at [src/test/resources/web-client/conf](src/test/resources/web-client/conf) +Web Client config files can be found at [src/test/resources/web-ui/conf](src/test/resources/web-ui/conf) which includes separate configurations for CWMS and OpenTSDB. diff --git a/opendcs-integration-test/build.gradle b/integrationtesting/rest-api/build.gradle similarity index 94% rename from opendcs-integration-test/build.gradle rename to integrationtesting/rest-api/build.gradle index d9f401e2c..636c3c4ea 100644 --- a/opendcs-integration-test/build.gradle +++ b/integrationtesting/rest-api/build.gradle @@ -88,10 +88,10 @@ tasks.register('generateConfig', Copy) { tasks.register('run', JavaExec) { dependsOn build def restWar = project(':opendcs-rest-api').tasks.named('war').get().archiveFile.get().asFile.getAbsolutePath() - def guiWar = project(':opendcs-web-client').tasks.named('war').get().archiveFile.get().asFile.getAbsolutePath() + def guiWar = project(':opendcs-web-ui').tasks.named('war').get().archiveFile.get().asFile.getAbsolutePath() inputs.files(restWar,guiWar) group "application" - dependsOn(':opendcs-rest-api:war', ':opendcs-web-client:war') + dependsOn(':opendcs-rest-api:war', ':opendcs-web-ui:war') dependsOn generateConfig dependsOn downloadAndUnzipInstaller classpath = sourceSets.main.runtimeClasspath @@ -116,9 +116,9 @@ tasks.register('run', JavaExec) { tasks.register('owaspZap', JavaExec) { dependsOn build def restWar = project(':opendcs-rest-api').tasks.named('war').get().archiveFile.get().asFile.getAbsolutePath() - def guiWar = project(':opendcs-web-client').tasks.named('war').get().archiveFile.get().asFile.getAbsolutePath() + def guiWar = project(':opendcs-web-ui').tasks.named('war').get().archiveFile.get().asFile.getAbsolutePath() group "application" - dependsOn(':opendcs-rest-api:war', ':opendcs-web-client:war') + dependsOn(':opendcs-rest-api:war', ':opendcs-web-ui:war') dependsOn generateConfig dependsOn downloadAndUnzipInstaller @@ -174,14 +174,14 @@ tasks.register('integrationTestOpenTSDB', Test) { classpath = sourceSets.test.runtimeClasspath shouldRunAfter test dependsOn(':opendcs-rest-api:war') - dependsOn(':opendcs-web-client:war') + dependsOn(':opendcs-web-ui:war') dependsOn generateConfig dependsOn downloadAndUnzipInstaller jvmArgs += "-Dorg.apache.tomcat.util.digester.PROPERTY_SOURCE=org.apache.tomcat.util.digester.EnvironmentPropertySource" jvmArgs += "-Dcatalina.base=${layout.buildDirectory.file("tomcat")}" jvmArgs += "-Dopendcs.test.integration.db=OpenDCS-Postgres" def restWar = project(':opendcs-rest-api').tasks.named('war').get().archiveFile.get().asFile.getAbsolutePath() - def guiWar = project(':opendcs-web-client').tasks.named('war').get().archiveFile.get().asFile.getAbsolutePath() + def guiWar = project(':opendcs-web-ui').tasks.named('war').get().archiveFile.get().asFile.getAbsolutePath() jvmArgs += "-Dopendcs.restapi.warfile=${restWar}" jvmArgs += "-Dopendcs.gui.warfile=${guiWar}" def outputDir = downloadAndUnzipInstaller.outputs.files.singleFile @@ -202,7 +202,7 @@ tasks.register('integrationTestCWMS', Test) { classpath = sourceSets.test.runtimeClasspath shouldRunAfter test dependsOn(':opendcs-rest-api:war') - dependsOn(':opendcs-web-client:war') + dependsOn(':opendcs-web-ui:war') dependsOn generateConfig dependsOn downloadAndUnzipInstaller jvmArgs += "-Dorg.apache.tomcat.util.digester.PROPERTY_SOURCE=org.apache.tomcat.util.digester.EnvironmentPropertySource" @@ -210,7 +210,7 @@ tasks.register('integrationTestCWMS', Test) { jvmArgs += "-Dopendcs.test.integration.db=CWMS-Oracle" jvmArgs += "-Dtestcontainer.cwms.bypass.cwms.pass=dcs_user" def restWar = project(':opendcs-rest-api').tasks.named('war').get().archiveFile.get().asFile.getAbsolutePath() - def guiWar = project(':opendcs-web-client').tasks.named('war').get().archiveFile.get().asFile.getAbsolutePath() + def guiWar = project(':opendcs-web-ui').tasks.named('war').get().archiveFile.get().asFile.getAbsolutePath() jvmArgs += "-Dopendcs.restapi.warfile=${restWar}" jvmArgs += "-Dopendcs.gui.warfile=${guiWar}" def outputDir = downloadAndUnzipInstaller.outputs.files.singleFile diff --git a/opendcs-integration-test/src/main/java/org/opendcs/odcsapi/fixtures/DbType.java b/integrationtesting/rest-api/src/main/java/org/opendcs/odcsapi/fixtures/DbType.java similarity index 100% rename from opendcs-integration-test/src/main/java/org/opendcs/odcsapi/fixtures/DbType.java rename to integrationtesting/rest-api/src/main/java/org/opendcs/odcsapi/fixtures/DbType.java diff --git a/opendcs-integration-test/src/main/java/org/opendcs/odcsapi/fixtures/TomcatServer.java b/integrationtesting/rest-api/src/main/java/org/opendcs/odcsapi/fixtures/TomcatServer.java similarity index 100% rename from opendcs-integration-test/src/main/java/org/opendcs/odcsapi/fixtures/TomcatServer.java rename to integrationtesting/rest-api/src/main/java/org/opendcs/odcsapi/fixtures/TomcatServer.java diff --git a/opendcs-integration-test/src/main/java/org/opendcs/odcsapi/owasp/OwaspZap.java b/integrationtesting/rest-api/src/main/java/org/opendcs/odcsapi/owasp/OwaspZap.java similarity index 100% rename from opendcs-integration-test/src/main/java/org/opendcs/odcsapi/owasp/OwaspZap.java rename to integrationtesting/rest-api/src/main/java/org/opendcs/odcsapi/owasp/OwaspZap.java diff --git a/opendcs-integration-test/src/test/java/org/opendcs/odcsapi/fixtures/DatabaseContextProvider.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/fixtures/DatabaseContextProvider.java similarity index 100% rename from opendcs-integration-test/src/test/java/org/opendcs/odcsapi/fixtures/DatabaseContextProvider.java rename to integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/fixtures/DatabaseContextProvider.java diff --git a/opendcs-integration-test/src/test/java/org/opendcs/odcsapi/fixtures/DatabaseSetupExtension.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/fixtures/DatabaseSetupExtension.java similarity index 100% rename from opendcs-integration-test/src/test/java/org/opendcs/odcsapi/fixtures/DatabaseSetupExtension.java rename to integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/fixtures/DatabaseSetupExtension.java diff --git a/opendcs-integration-test/src/test/java/org/opendcs/odcsapi/res/it/AlgorithmResourcesIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/AlgorithmResourcesIT.java similarity index 100% rename from opendcs-integration-test/src/test/java/org/opendcs/odcsapi/res/it/AlgorithmResourcesIT.java rename to integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/AlgorithmResourcesIT.java diff --git a/opendcs-integration-test/src/test/java/org/opendcs/odcsapi/res/it/AppResourcesIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/AppResourcesIT.java similarity index 100% rename from opendcs-integration-test/src/test/java/org/opendcs/odcsapi/res/it/AppResourcesIT.java rename to integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/AppResourcesIT.java diff --git a/opendcs-integration-test/src/test/java/org/opendcs/odcsapi/res/it/BaseIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/BaseIT.java similarity index 100% rename from opendcs-integration-test/src/test/java/org/opendcs/odcsapi/res/it/BaseIT.java rename to integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/BaseIT.java diff --git a/opendcs-integration-test/src/test/java/org/opendcs/odcsapi/res/it/ComputationResourcesIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/ComputationResourcesIT.java similarity index 100% rename from opendcs-integration-test/src/test/java/org/opendcs/odcsapi/res/it/ComputationResourcesIT.java rename to integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/ComputationResourcesIT.java diff --git a/opendcs-integration-test/src/test/java/org/opendcs/odcsapi/res/it/ConfigResourcesIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/ConfigResourcesIT.java similarity index 100% rename from opendcs-integration-test/src/test/java/org/opendcs/odcsapi/res/it/ConfigResourcesIT.java rename to integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/ConfigResourcesIT.java diff --git a/opendcs-integration-test/src/test/java/org/opendcs/odcsapi/res/it/DataSourceResourcesIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/DataSourceResourcesIT.java similarity index 100% rename from opendcs-integration-test/src/test/java/org/opendcs/odcsapi/res/it/DataSourceResourcesIT.java rename to integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/DataSourceResourcesIT.java diff --git a/opendcs-integration-test/src/test/java/org/opendcs/odcsapi/res/it/DatatypeUnitResourcesIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/DatatypeUnitResourcesIT.java similarity index 100% rename from opendcs-integration-test/src/test/java/org/opendcs/odcsapi/res/it/DatatypeUnitResourcesIT.java rename to integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/DatatypeUnitResourcesIT.java diff --git a/opendcs-integration-test/src/test/java/org/opendcs/odcsapi/res/it/NetlistResourcesIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/NetlistResourcesIT.java similarity index 100% rename from opendcs-integration-test/src/test/java/org/opendcs/odcsapi/res/it/NetlistResourcesIT.java rename to integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/NetlistResourcesIT.java diff --git a/opendcs-integration-test/src/test/java/org/opendcs/odcsapi/res/it/OdcsapiResourceIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/OdcsapiResourceIT.java similarity index 100% rename from opendcs-integration-test/src/test/java/org/opendcs/odcsapi/res/it/OdcsapiResourceIT.java rename to integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/OdcsapiResourceIT.java diff --git a/opendcs-integration-test/src/test/java/org/opendcs/odcsapi/res/it/OrganizationResourcesIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/OrganizationResourcesIT.java similarity index 100% rename from opendcs-integration-test/src/test/java/org/opendcs/odcsapi/res/it/OrganizationResourcesIT.java rename to integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/OrganizationResourcesIT.java diff --git a/opendcs-integration-test/src/test/java/org/opendcs/odcsapi/res/it/PlatformResourcesIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/PlatformResourcesIT.java similarity index 100% rename from opendcs-integration-test/src/test/java/org/opendcs/odcsapi/res/it/PlatformResourcesIT.java rename to integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/PlatformResourcesIT.java diff --git a/opendcs-integration-test/src/test/java/org/opendcs/odcsapi/res/it/PresentationResourcesIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/PresentationResourcesIT.java similarity index 100% rename from opendcs-integration-test/src/test/java/org/opendcs/odcsapi/res/it/PresentationResourcesIT.java rename to integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/PresentationResourcesIT.java diff --git a/opendcs-integration-test/src/test/java/org/opendcs/odcsapi/res/it/ReflistResourcesIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/ReflistResourcesIT.java similarity index 100% rename from opendcs-integration-test/src/test/java/org/opendcs/odcsapi/res/it/ReflistResourcesIT.java rename to integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/ReflistResourcesIT.java diff --git a/opendcs-integration-test/src/test/java/org/opendcs/odcsapi/res/it/RoutingResourcesIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/RoutingResourcesIT.java similarity index 100% rename from opendcs-integration-test/src/test/java/org/opendcs/odcsapi/res/it/RoutingResourcesIT.java rename to integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/RoutingResourcesIT.java diff --git a/opendcs-integration-test/src/test/java/org/opendcs/odcsapi/res/it/SiteResourcesIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/SiteResourcesIT.java similarity index 100% rename from opendcs-integration-test/src/test/java/org/opendcs/odcsapi/res/it/SiteResourcesIT.java rename to integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/SiteResourcesIT.java diff --git a/opendcs-integration-test/src/test/java/org/opendcs/odcsapi/res/it/TimeSeriesResourcesIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/TimeSeriesResourcesIT.java similarity index 100% rename from opendcs-integration-test/src/test/java/org/opendcs/odcsapi/res/it/TimeSeriesResourcesIT.java rename to integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/TimeSeriesResourcesIT.java diff --git a/opendcs-integration-test/src/test/java/org/opendcs/odcsapi/sec/AuthorizationTestIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/sec/AuthorizationTestIT.java similarity index 100% rename from opendcs-integration-test/src/test/java/org/opendcs/odcsapi/sec/AuthorizationTestIT.java rename to integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/sec/AuthorizationTestIT.java diff --git a/opendcs-integration-test/src/test/java/org/opendcs/odcsapi/sec/basicauth/FormAuthIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/sec/basicauth/FormAuthIT.java similarity index 100% rename from opendcs-integration-test/src/test/java/org/opendcs/odcsapi/sec/basicauth/FormAuthIT.java rename to integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/sec/basicauth/FormAuthIT.java diff --git a/opendcs-integration-test/src/test/java/org/opendcs/odcsapi/sec/openid/OpenIdAuthIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/sec/openid/OpenIdAuthIT.java similarity index 100% rename from opendcs-integration-test/src/test/java/org/opendcs/odcsapi/sec/openid/OpenIdAuthIT.java rename to integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/sec/openid/OpenIdAuthIT.java diff --git a/opendcs-integration-test/src/test/manual/EUConversionsPage.feature b/integrationtesting/rest-api/src/test/manual/EUConversionsPage.feature similarity index 100% rename from opendcs-integration-test/src/test/manual/EUConversionsPage.feature rename to integrationtesting/rest-api/src/test/manual/EUConversionsPage.feature diff --git a/opendcs-integration-test/src/test/manual/algorithmsEditor.feature b/integrationtesting/rest-api/src/test/manual/algorithmsEditor.feature similarity index 100% rename from opendcs-integration-test/src/test/manual/algorithmsEditor.feature rename to integrationtesting/rest-api/src/test/manual/algorithmsEditor.feature diff --git a/opendcs-integration-test/src/test/manual/algorithmsPage.feature b/integrationtesting/rest-api/src/test/manual/algorithmsPage.feature similarity index 100% rename from opendcs-integration-test/src/test/manual/algorithmsPage.feature rename to integrationtesting/rest-api/src/test/manual/algorithmsPage.feature diff --git a/opendcs-integration-test/src/test/manual/computationsEditor.feature b/integrationtesting/rest-api/src/test/manual/computationsEditor.feature similarity index 100% rename from opendcs-integration-test/src/test/manual/computationsEditor.feature rename to integrationtesting/rest-api/src/test/manual/computationsEditor.feature diff --git a/opendcs-integration-test/src/test/manual/computationsPage.feature b/integrationtesting/rest-api/src/test/manual/computationsPage.feature similarity index 100% rename from opendcs-integration-test/src/test/manual/computationsPage.feature rename to integrationtesting/rest-api/src/test/manual/computationsPage.feature diff --git a/opendcs-integration-test/src/test/manual/configsEditor.feature b/integrationtesting/rest-api/src/test/manual/configsEditor.feature similarity index 100% rename from opendcs-integration-test/src/test/manual/configsEditor.feature rename to integrationtesting/rest-api/src/test/manual/configsEditor.feature diff --git a/opendcs-integration-test/src/test/manual/configsPage.feature b/integrationtesting/rest-api/src/test/manual/configsPage.feature similarity index 100% rename from opendcs-integration-test/src/test/manual/configsPage.feature rename to integrationtesting/rest-api/src/test/manual/configsPage.feature diff --git a/opendcs-integration-test/src/test/manual/engineeringUnitsPage.feature b/integrationtesting/rest-api/src/test/manual/engineeringUnitsPage.feature similarity index 100% rename from opendcs-integration-test/src/test/manual/engineeringUnitsPage.feature rename to integrationtesting/rest-api/src/test/manual/engineeringUnitsPage.feature diff --git a/opendcs-integration-test/src/test/manual/enumerationsPage.feature b/integrationtesting/rest-api/src/test/manual/enumerationsPage.feature similarity index 100% rename from opendcs-integration-test/src/test/manual/enumerationsPage.feature rename to integrationtesting/rest-api/src/test/manual/enumerationsPage.feature diff --git a/opendcs-integration-test/src/test/manual/general.feature b/integrationtesting/rest-api/src/test/manual/general.feature similarity index 100% rename from opendcs-integration-test/src/test/manual/general.feature rename to integrationtesting/rest-api/src/test/manual/general.feature diff --git a/opendcs-integration-test/src/test/manual/login.feature b/integrationtesting/rest-api/src/test/manual/login.feature similarity index 100% rename from opendcs-integration-test/src/test/manual/login.feature rename to integrationtesting/rest-api/src/test/manual/login.feature diff --git a/opendcs-integration-test/src/test/manual/netlistsEditor.feature b/integrationtesting/rest-api/src/test/manual/netlistsEditor.feature similarity index 100% rename from opendcs-integration-test/src/test/manual/netlistsEditor.feature rename to integrationtesting/rest-api/src/test/manual/netlistsEditor.feature diff --git a/opendcs-integration-test/src/test/manual/netlistsPage.feature b/integrationtesting/rest-api/src/test/manual/netlistsPage.feature similarity index 100% rename from opendcs-integration-test/src/test/manual/netlistsPage.feature rename to integrationtesting/rest-api/src/test/manual/netlistsPage.feature diff --git a/opendcs-integration-test/src/test/manual/platformsEditor.feature b/integrationtesting/rest-api/src/test/manual/platformsEditor.feature similarity index 100% rename from opendcs-integration-test/src/test/manual/platformsEditor.feature rename to integrationtesting/rest-api/src/test/manual/platformsEditor.feature diff --git a/opendcs-integration-test/src/test/manual/platformsPage.feature b/integrationtesting/rest-api/src/test/manual/platformsPage.feature similarity index 100% rename from opendcs-integration-test/src/test/manual/platformsPage.feature rename to integrationtesting/rest-api/src/test/manual/platformsPage.feature diff --git a/opendcs-integration-test/src/test/manual/presentationElementEditor.feature b/integrationtesting/rest-api/src/test/manual/presentationElementEditor.feature similarity index 100% rename from opendcs-integration-test/src/test/manual/presentationElementEditor.feature rename to integrationtesting/rest-api/src/test/manual/presentationElementEditor.feature diff --git a/opendcs-integration-test/src/test/manual/presentationPage.feature b/integrationtesting/rest-api/src/test/manual/presentationPage.feature similarity index 100% rename from opendcs-integration-test/src/test/manual/presentationPage.feature rename to integrationtesting/rest-api/src/test/manual/presentationPage.feature diff --git a/opendcs-integration-test/src/test/manual/processEditor.feature b/integrationtesting/rest-api/src/test/manual/processEditor.feature similarity index 100% rename from opendcs-integration-test/src/test/manual/processEditor.feature rename to integrationtesting/rest-api/src/test/manual/processEditor.feature diff --git a/opendcs-integration-test/src/test/manual/processesPage.feature b/integrationtesting/rest-api/src/test/manual/processesPage.feature similarity index 100% rename from opendcs-integration-test/src/test/manual/processesPage.feature rename to integrationtesting/rest-api/src/test/manual/processesPage.feature diff --git a/opendcs-integration-test/src/test/manual/routingEditor.feature b/integrationtesting/rest-api/src/test/manual/routingEditor.feature similarity index 100% rename from opendcs-integration-test/src/test/manual/routingEditor.feature rename to integrationtesting/rest-api/src/test/manual/routingEditor.feature diff --git a/opendcs-integration-test/src/test/manual/routingPage.feature b/integrationtesting/rest-api/src/test/manual/routingPage.feature similarity index 100% rename from opendcs-integration-test/src/test/manual/routingPage.feature rename to integrationtesting/rest-api/src/test/manual/routingPage.feature diff --git a/opendcs-integration-test/src/test/manual/scheduleEntryEditor.feature b/integrationtesting/rest-api/src/test/manual/scheduleEntryEditor.feature similarity index 100% rename from opendcs-integration-test/src/test/manual/scheduleEntryEditor.feature rename to integrationtesting/rest-api/src/test/manual/scheduleEntryEditor.feature diff --git a/opendcs-integration-test/src/test/manual/scheduleEntryPage.feature b/integrationtesting/rest-api/src/test/manual/scheduleEntryPage.feature similarity index 100% rename from opendcs-integration-test/src/test/manual/scheduleEntryPage.feature rename to integrationtesting/rest-api/src/test/manual/scheduleEntryPage.feature diff --git a/opendcs-integration-test/src/test/manual/seasonsPage.feature b/integrationtesting/rest-api/src/test/manual/seasonsPage.feature similarity index 100% rename from opendcs-integration-test/src/test/manual/seasonsPage.feature rename to integrationtesting/rest-api/src/test/manual/seasonsPage.feature diff --git a/opendcs-integration-test/src/test/manual/sitesEditor.feature b/integrationtesting/rest-api/src/test/manual/sitesEditor.feature similarity index 100% rename from opendcs-integration-test/src/test/manual/sitesEditor.feature rename to integrationtesting/rest-api/src/test/manual/sitesEditor.feature diff --git a/opendcs-integration-test/src/test/manual/sitesPage.feature b/integrationtesting/rest-api/src/test/manual/sitesPage.feature similarity index 100% rename from opendcs-integration-test/src/test/manual/sitesPage.feature rename to integrationtesting/rest-api/src/test/manual/sitesPage.feature diff --git a/opendcs-integration-test/src/test/manual/sourcesEditor.feature b/integrationtesting/rest-api/src/test/manual/sourcesEditor.feature similarity index 100% rename from opendcs-integration-test/src/test/manual/sourcesEditor.feature rename to integrationtesting/rest-api/src/test/manual/sourcesEditor.feature diff --git a/opendcs-integration-test/src/test/manual/sourcesPage.feature b/integrationtesting/rest-api/src/test/manual/sourcesPage.feature similarity index 100% rename from opendcs-integration-test/src/test/manual/sourcesPage.feature rename to integrationtesting/rest-api/src/test/manual/sourcesPage.feature diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/CWMS-Oracle/algorithm_ref_add_to_previous.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/CWMS-Oracle/algorithm_ref_add_to_previous.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/CWMS-Oracle/algorithm_ref_add_to_previous.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/CWMS-Oracle/algorithm_ref_add_to_previous.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/CWMS-Oracle/algorithm_tempstring_check.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/CWMS-Oracle/algorithm_tempstring_check.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/CWMS-Oracle/algorithm_tempstring_check.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/CWMS-Oracle/algorithm_tempstring_check.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/CWMS-Oracle/config_get_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/CWMS-Oracle/config_get_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/CWMS-Oracle/config_get_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/CWMS-Oracle/config_get_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/CWMS-Oracle/config_input_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/CWMS-Oracle/config_input_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/CWMS-Oracle/config_input_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/CWMS-Oracle/config_input_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/CWMS-Oracle/site_get_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/CWMS-Oracle/site_get_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/CWMS-Oracle/site_get_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/CWMS-Oracle/site_get_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/CWMS-Oracle/site_get_refs_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/CWMS-Oracle/site_get_refs_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/CWMS-Oracle/site_get_refs_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/CWMS-Oracle/site_get_refs_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/CWMS-Oracle/ts_data_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/CWMS-Oracle/ts_data_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/CWMS-Oracle/ts_data_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/CWMS-Oracle/ts_data_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/app_get_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/app_get_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/app_get_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/app_get_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/app_get_refs_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/app_get_refs_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/app_get_refs_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/app_get_refs_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/app_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/app_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/app_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/app_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/app_post_delete_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/app_post_delete_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/app_post_delete_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/app_post_delete_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/app_post_delete_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/app_post_delete_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/app_post_delete_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/app_post_delete_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/app_stat_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/app_stat_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/app_stat_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/app_stat_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/computation_algorithm_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/computation_algorithm_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/computation_algorithm_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/computation_algorithm_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/computation_app_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/computation_app_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/computation_app_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/computation_app_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/computation_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/computation_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/computation_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/computation_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/computation_post_delete_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/computation_post_delete_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/computation_post_delete_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/computation_post_delete_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/computation_refs_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/computation_refs_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/computation_refs_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/computation_refs_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/computation_site_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/computation_site_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/computation_site_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/computation_site_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/config_get_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/config_get_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/config_get_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/config_get_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/config_input_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/config_input_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/config_input_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/config_input_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/config_post_delete_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/config_post_delete_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/config_post_delete_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/config_post_delete_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/config_post_delete_input_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/config_post_delete_input_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/config_post_delete_input_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/config_post_delete_input_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/config_refs_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/config_refs_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/config_refs_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/config_refs_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datasource_get_refs_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datasource_get_refs_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datasource_get_refs_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datasource_get_refs_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datasource_get_refs_member_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datasource_get_refs_member_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datasource_get_refs_member_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datasource_get_refs_member_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datasource_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datasource_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datasource_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datasource_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datasource_insert_parent_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datasource_insert_parent_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datasource_insert_parent_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datasource_insert_parent_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datasource_post_delete_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datasource_post_delete_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datasource_post_delete_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datasource_post_delete_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datasource_post_delete_insert_member_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datasource_post_delete_insert_member_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datasource_post_delete_insert_member_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datasource_post_delete_insert_member_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_engineering_unit_2_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_engineering_unit_2_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_engineering_unit_2_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_engineering_unit_2_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_engineering_unit_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_engineering_unit_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_engineering_unit_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_engineering_unit_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_eu_post_delete_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_eu_post_delete_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_eu_post_delete_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_eu_post_delete_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_euconv_post_delete_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_euconv_post_delete_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_euconv_post_delete_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_euconv_post_delete_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_euconv_post_delete_new_unit_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_euconv_post_delete_new_unit_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_euconv_post_delete_new_unit_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_euconv_post_delete_new_unit_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_get_euconv_list_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_get_euconv_list_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_get_euconv_list_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_get_euconv_list_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_get_type_list_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_get_type_list_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_get_type_list_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_get_type_list_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_get_type_list_expected_filtered.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_get_type_list_expected_filtered.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_get_type_list_expected_filtered.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_get_type_list_expected_filtered.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_insert_euconv_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_insert_euconv_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_insert_euconv_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_insert_euconv_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/netlist_cnvtanl_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/netlist_cnvtanl_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/netlist_cnvtanl_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/netlist_cnvtanl_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/netlist_cnvtanl_input_data.txt b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/netlist_cnvtanl_input_data.txt similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/netlist_cnvtanl_input_data.txt rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/netlist_cnvtanl_input_data.txt diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/netlist_get_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/netlist_get_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/netlist_get_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/netlist_get_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/netlist_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/netlist_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/netlist_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/netlist_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/netlist_platform_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/netlist_platform_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/netlist_platform_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/netlist_platform_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/netlist_post_delete_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/netlist_post_delete_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/netlist_post_delete_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/netlist_post_delete_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/netlist_site_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/netlist_site_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/netlist_site_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/netlist_site_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/odcsapi_decode_request_dto.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/odcsapi_decode_request_dto.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/odcsapi_decode_request_dto.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/odcsapi_decode_request_dto.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/odcsapi_decode_response.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/odcsapi_decode_response.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/odcsapi_decode_response.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/odcsapi_decode_response.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/odcsapi_platform_dto.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/odcsapi_platform_dto.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/odcsapi_platform_dto.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/odcsapi_platform_dto.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/odcsapi_property_specs.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/odcsapi_property_specs.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/odcsapi_property_specs.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/odcsapi_property_specs.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/odcsapi_site_dto.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/odcsapi_site_dto.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/odcsapi_site_dto.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/odcsapi_site_dto.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_config_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_config_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_config_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_config_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_create_delete_config_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_create_delete_config_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_create_delete_config_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_create_delete_config_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_datasource_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_datasource_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_datasource_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_datasource_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_get_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_get_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_get_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_get_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_get_refs_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_get_refs_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_get_refs_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_get_refs_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_get_stats_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_get_stats_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_get_stats_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_get_stats_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_netlist_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_netlist_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_netlist_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_netlist_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_post_delete_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_post_delete_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_post_delete_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_post_delete_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_post_delete_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_post_delete_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_post_delete_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_post_delete_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_routingspec_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_routingspec_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_routingspec_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_routingspec_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_schedule_entry_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_schedule_entry_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_schedule_entry_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_schedule_entry_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_site_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_site_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_site_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_site_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_site_post_delete_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_site_post_delete_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_site_post_delete_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/platform_site_post_delete_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/presentation_get_refs_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/presentation_get_refs_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/presentation_get_refs_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/presentation_get_refs_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/presentation_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/presentation_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/presentation_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/presentation_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/presentation_insert_parent_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/presentation_insert_parent_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/presentation_insert_parent_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/presentation_insert_parent_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/presentation_post_delete_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/presentation_post_delete_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/presentation_post_delete_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/presentation_post_delete_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/reflist_get_refs_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/reflist_get_refs_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/reflist_get_refs_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/reflist_get_refs_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/reflist_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/reflist_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/reflist_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/reflist_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/reflist_post_delete_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/reflist_post_delete_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/reflist_post_delete_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/reflist_post_delete_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/reflist_season_from_abbr_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/reflist_season_from_abbr_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/reflist_season_from_abbr_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/reflist_season_from_abbr_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/reflist_season_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/reflist_season_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/reflist_season_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/reflist_season_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_app_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_app_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_app_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_app_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_config_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_config_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_config_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_config_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_dacq_events_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_dacq_events_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_dacq_events_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_dacq_events_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_datasource_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_datasource_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_datasource_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_datasource_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_exec_status_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_exec_status_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_exec_status_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_exec_status_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_platform_insert.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_platform_insert.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_platform_insert.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_platform_insert.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_post_delete_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_post_delete_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_post_delete_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_post_delete_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_post_delete_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_post_delete_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_post_delete_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_post_delete_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_refs_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_refs_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_refs_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_refs_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_schedule_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_schedule_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_schedule_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_schedule_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_schedule_post_delete_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_schedule_post_delete_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_schedule_post_delete_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_schedule_post_delete_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_schedule_post_delete_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_schedule_post_delete_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_schedule_post_delete_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_schedule_post_delete_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_site_insert.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_site_insert.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_site_insert.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_site_insert.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_status_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_status_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_status_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/routing_status_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/site_post_delete_dto.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/site_post_delete_dto.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/site_post_delete_dto.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/site_post_delete_dto.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/site_setup_dto.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/site_setup_dto.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/site_setup_dto.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/site_setup_dto.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_group_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_group_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_group_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_group_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_group_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_group_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_group_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_group_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_group_post_delete_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_group_post_delete_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_group_post_delete_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_group_post_delete_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_group_post_delete_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_group_post_delete_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_group_post_delete_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_group_post_delete_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_group_ref_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_group_ref_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_group_ref_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_group_ref_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_interval_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_interval_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_interval_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_interval_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_ref_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_ref_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_ref_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_ref_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_ref_expected_inactive.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_ref_expected_inactive.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_ref_expected_inactive.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_ref_expected_inactive.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_site_insert_data.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_site_insert_data.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_site_insert_data.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_site_insert_data.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_site_insert_data2.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_site_insert_data2.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_site_insert_data2.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_site_insert_data2.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_spec_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_spec_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_spec_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/ts_spec_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/OpenDCS-Postgres/algorithm_ref_add_to_previous.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/OpenDCS-Postgres/algorithm_ref_add_to_previous.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/OpenDCS-Postgres/algorithm_ref_add_to_previous.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/OpenDCS-Postgres/algorithm_ref_add_to_previous.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/OpenDCS-Postgres/algorithm_tempstring_check.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/OpenDCS-Postgres/algorithm_tempstring_check.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/OpenDCS-Postgres/algorithm_tempstring_check.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/OpenDCS-Postgres/algorithm_tempstring_check.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/OpenDCS-Postgres/site_get_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/OpenDCS-Postgres/site_get_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/OpenDCS-Postgres/site_get_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/OpenDCS-Postgres/site_get_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/OpenDCS-Postgres/site_get_refs_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/OpenDCS-Postgres/site_get_refs_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/OpenDCS-Postgres/site_get_refs_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/OpenDCS-Postgres/site_get_refs_expected.json diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/OpenDCS-Postgres/ts_data_expected.json b/integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/OpenDCS-Postgres/ts_data_expected.json similarity index 100% rename from opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/OpenDCS-Postgres/ts_data_expected.json rename to integrationtesting/rest-api/src/test/resources/org/opendcs/odcsapi/res/it/OpenDCS-Postgres/ts_data_expected.json diff --git a/opendcs-integration-test/src/test/resources/owasp/logfilter.txt b/integrationtesting/rest-api/src/test/resources/owasp/logfilter.txt similarity index 100% rename from opendcs-integration-test/src/test/resources/owasp/logfilter.txt rename to integrationtesting/rest-api/src/test/resources/owasp/logfilter.txt diff --git a/opendcs-integration-test/src/test/resources/tomcat/conf/context.xml b/integrationtesting/rest-api/src/test/resources/tomcat/conf/context.xml similarity index 100% rename from opendcs-integration-test/src/test/resources/tomcat/conf/context.xml rename to integrationtesting/rest-api/src/test/resources/tomcat/conf/context.xml diff --git a/opendcs-integration-test/src/test/resources/tomcat/conf/logfilter.txt b/integrationtesting/rest-api/src/test/resources/tomcat/conf/logfilter.txt similarity index 100% rename from opendcs-integration-test/src/test/resources/tomcat/conf/logfilter.txt rename to integrationtesting/rest-api/src/test/resources/tomcat/conf/logfilter.txt diff --git a/opendcs-integration-test/src/test/resources/tomcat/conf/logging.properties b/integrationtesting/rest-api/src/test/resources/tomcat/conf/logging.properties similarity index 100% rename from opendcs-integration-test/src/test/resources/tomcat/conf/logging.properties rename to integrationtesting/rest-api/src/test/resources/tomcat/conf/logging.properties diff --git a/opendcs-integration-test/src/test/resources/tomcat/conf/tomcat-server.xml b/integrationtesting/rest-api/src/test/resources/tomcat/conf/tomcat-server.xml similarity index 100% rename from opendcs-integration-test/src/test/resources/tomcat/conf/tomcat-server.xml rename to integrationtesting/rest-api/src/test/resources/tomcat/conf/tomcat-server.xml diff --git a/opendcs-integration-test/src/test/resources/tomcat/conf/web.xml b/integrationtesting/rest-api/src/test/resources/tomcat/conf/web.xml similarity index 100% rename from opendcs-integration-test/src/test/resources/tomcat/conf/web.xml rename to integrationtesting/rest-api/src/test/resources/tomcat/conf/web.xml diff --git a/api-clients/api-client-java/.openapi-generator-ignore b/java/api-clients/api-client-java/.openapi-generator-ignore similarity index 100% rename from api-clients/api-client-java/.openapi-generator-ignore rename to java/api-clients/api-client-java/.openapi-generator-ignore diff --git a/api-clients/api-client-java/build.gradle b/java/api-clients/api-client-java/build.gradle similarity index 100% rename from api-clients/api-client-java/build.gradle rename to java/api-clients/api-client-java/build.gradle diff --git a/api-clients/api-client-java/src/main/resources/.keep b/java/api-clients/api-client-java/src/main/resources/.keep similarity index 100% rename from api-clients/api-client-java/src/main/resources/.keep rename to java/api-clients/api-client-java/src/main/resources/.keep diff --git a/api-clients/api-client-typescript/.gitignore b/java/api-clients/api-client-typescript/.gitignore similarity index 100% rename from api-clients/api-client-typescript/.gitignore rename to java/api-clients/api-client-typescript/.gitignore diff --git a/api-clients/api-client-typescript/.openapi-generator-ignore b/java/api-clients/api-client-typescript/.openapi-generator-ignore similarity index 100% rename from api-clients/api-client-typescript/.openapi-generator-ignore rename to java/api-clients/api-client-typescript/.openapi-generator-ignore diff --git a/api-clients/api-client-typescript/build.gradle b/java/api-clients/api-client-typescript/build.gradle similarity index 100% rename from api-clients/api-client-typescript/build.gradle rename to java/api-clients/api-client-typescript/build.gradle diff --git a/api-clients/api-client-typescript/package-lock.json b/java/api-clients/api-client-typescript/package-lock.json similarity index 100% rename from api-clients/api-client-typescript/package-lock.json rename to java/api-clients/api-client-typescript/package-lock.json diff --git a/api-clients/api-client-typescript/package.json b/java/api-clients/api-client-typescript/package.json similarity index 100% rename from api-clients/api-client-typescript/package.json rename to java/api-clients/api-client-typescript/package.json diff --git a/api-clients/api-client-typescript/src/main/resources/.keep b/java/api-clients/api-client-typescript/src/main/resources/.keep similarity index 100% rename from api-clients/api-client-typescript/src/main/resources/.keep rename to java/api-clients/api-client-typescript/src/main/resources/.keep diff --git a/api-clients/api-client-typescript/tsconfig.json b/java/api-clients/api-client-typescript/tsconfig.json similarity index 100% rename from api-clients/api-client-typescript/tsconfig.json rename to java/api-clients/api-client-typescript/tsconfig.json diff --git a/api-clients/api-client-typescript/vite.config.js b/java/api-clients/api-client-typescript/vite.config.js similarity index 100% rename from api-clients/api-client-typescript/vite.config.js rename to java/api-clients/api-client-typescript/vite.config.js diff --git a/opendcs-rest-api/README.md b/java/opendcs-rest-api/README.md similarity index 100% rename from opendcs-rest-api/README.md rename to java/opendcs-rest-api/README.md diff --git a/opendcs-rest-api/build.gradle b/java/opendcs-rest-api/build.gradle similarity index 100% rename from opendcs-rest-api/build.gradle rename to java/opendcs-rest-api/build.gradle diff --git a/opendcs-rest-api/src/main/java/org/opendcs/.DS_Store b/java/opendcs-rest-api/src/main/java/org/opendcs/.DS_Store similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/.DS_Store rename to java/opendcs-rest-api/src/main/java/org/opendcs/.DS_Store diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/.DS_Store b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/.DS_Store similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/.DS_Store rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/.DS_Store diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiAlgoParm.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiAlgoParm.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiAlgoParm.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiAlgoParm.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiAlgorithm.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiAlgorithm.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiAlgorithm.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiAlgorithm.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiAlgorithmRef.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiAlgorithmRef.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiAlgorithmRef.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiAlgorithmRef.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiAlgorithmScript.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiAlgorithmScript.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiAlgorithmScript.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiAlgorithmScript.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiAppRef.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiAppRef.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiAppRef.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiAppRef.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiAppStatus.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiAppStatus.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiAppStatus.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiAppStatus.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiCompParm.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiCompParm.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiCompParm.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiCompParm.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiComputation.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiComputation.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiComputation.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiComputation.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiComputationRef.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiComputationRef.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiComputationRef.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiComputationRef.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiConfigRef.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiConfigRef.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiConfigRef.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiConfigRef.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiConfigScript.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiConfigScript.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiConfigScript.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiConfigScript.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiConfigScriptSensor.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiConfigScriptSensor.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiConfigScriptSensor.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiConfigScriptSensor.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiConfigSensor.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiConfigSensor.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiConfigSensor.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiConfigSensor.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiDacqEvent.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiDacqEvent.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiDacqEvent.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiDacqEvent.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiDataSource.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiDataSource.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiDataSource.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiDataSource.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiDataSourceGroupMember.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiDataSourceGroupMember.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiDataSourceGroupMember.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiDataSourceGroupMember.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiDataSourceRef.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiDataSourceRef.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiDataSourceRef.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiDataSourceRef.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiDataType.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiDataType.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiDataType.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiDataType.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiDecodedMessage.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiDecodedMessage.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiDecodedMessage.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiDecodedMessage.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiDecodesTSValue.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiDecodesTSValue.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiDecodesTSValue.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiDecodesTSValue.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiDecodesTimeSeries.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiDecodesTimeSeries.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiDecodesTimeSeries.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiDecodesTimeSeries.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiInterval.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiInterval.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiInterval.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiInterval.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiLoadingApp.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiLoadingApp.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiLoadingApp.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiLoadingApp.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiLogMessage.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiLogMessage.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiLogMessage.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiLogMessage.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiNetList.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiNetList.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiNetList.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiNetList.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiNetListItem.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiNetListItem.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiNetListItem.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiNetListItem.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiNetlistRef.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiNetlistRef.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiNetlistRef.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiNetlistRef.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiOrganization.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiOrganization.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiOrganization.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiOrganization.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiPlatform.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiPlatform.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiPlatform.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiPlatform.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiPlatformConfig.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiPlatformConfig.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiPlatformConfig.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiPlatformConfig.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiPlatformRef.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiPlatformRef.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiPlatformRef.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiPlatformRef.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiPlatformSensor.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiPlatformSensor.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiPlatformSensor.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiPlatformSensor.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiPlatformStatus.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiPlatformStatus.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiPlatformStatus.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiPlatformStatus.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiPresentationElement.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiPresentationElement.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiPresentationElement.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiPresentationElement.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiPresentationGroup.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiPresentationGroup.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiPresentationGroup.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiPresentationGroup.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiPresentationRef.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiPresentationRef.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiPresentationRef.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiPresentationRef.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiPropSpec.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiPropSpec.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiPropSpec.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiPropSpec.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiRawMessage.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiRawMessage.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiRawMessage.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiRawMessage.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiRefList.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiRefList.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiRefList.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiRefList.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiRefListItem.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiRefListItem.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiRefListItem.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiRefListItem.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiRouting.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiRouting.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiRouting.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiRouting.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiRoutingExecStatus.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiRoutingExecStatus.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiRoutingExecStatus.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiRoutingExecStatus.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiRoutingRef.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiRoutingRef.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiRoutingRef.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiRoutingRef.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiRoutingStatus.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiRoutingStatus.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiRoutingStatus.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiRoutingStatus.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiScheduleEntry.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiScheduleEntry.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiScheduleEntry.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiScheduleEntry.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiScheduleEntryRef.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiScheduleEntryRef.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiScheduleEntryRef.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiScheduleEntryRef.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiScriptFormatStatement.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiScriptFormatStatement.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiScriptFormatStatement.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiScriptFormatStatement.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiSeason.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiSeason.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiSeason.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiSeason.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiSite.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiSite.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiSite.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiSite.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiSiteRef.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiSiteRef.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiSiteRef.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiSiteRef.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiTimeSeriesData.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiTimeSeriesData.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiTimeSeriesData.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiTimeSeriesData.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiTimeSeriesIdentifier.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiTimeSeriesIdentifier.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiTimeSeriesIdentifier.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiTimeSeriesIdentifier.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiTimeSeriesSpec.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiTimeSeriesSpec.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiTimeSeriesSpec.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiTimeSeriesSpec.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiTimeSeriesValue.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiTimeSeriesValue.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiTimeSeriesValue.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiTimeSeriesValue.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiTokenPosition.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiTokenPosition.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiTokenPosition.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiTokenPosition.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiTransportMedium.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiTransportMedium.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiTransportMedium.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiTransportMedium.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiTsGroup.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiTsGroup.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiTsGroup.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiTsGroup.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiTsGroupRef.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiTsGroupRef.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiTsGroupRef.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiTsGroupRef.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiUnit.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiUnit.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiUnit.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiUnit.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiUnitConverter.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiUnitConverter.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiUnitConverter.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/ApiUnitConverter.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/DecodeRequest.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/DecodeRequest.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/DecodeRequest.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/DecodeRequest.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/Status.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/Status.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/Status.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/beans/Status.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/ApiAuthorizationDAI.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/ApiAuthorizationDAI.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/ApiAuthorizationDAI.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/ApiAuthorizationDAI.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/DbException.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/DbException.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/DbException.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/DbException.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/OpenDcsDatabaseFactory.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/OpenDcsDatabaseFactory.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/OpenDcsDatabaseFactory.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/OpenDcsDatabaseFactory.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/OrganizationDao.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/OrganizationDao.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/OrganizationDao.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/OrganizationDao.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/cwms/CwmsOrganizationDao.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/cwms/CwmsOrganizationDao.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/cwms/CwmsOrganizationDao.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/cwms/CwmsOrganizationDao.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/cwms/SessionOfficePreparer.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/cwms/SessionOfficePreparer.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/cwms/SessionOfficePreparer.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/cwms/SessionOfficePreparer.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/datasource/ConnectionPreparer.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/datasource/ConnectionPreparer.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/datasource/ConnectionPreparer.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/datasource/ConnectionPreparer.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/datasource/ConnectionPreparingDataSource.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/datasource/ConnectionPreparingDataSource.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/datasource/ConnectionPreparingDataSource.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/datasource/ConnectionPreparingDataSource.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/datasource/DelegatingConnectionPreparer.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/datasource/DelegatingConnectionPreparer.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/datasource/DelegatingConnectionPreparer.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/datasource/DelegatingConnectionPreparer.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/datasource/DelegatingDataSource.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/datasource/DelegatingDataSource.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/datasource/DelegatingDataSource.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/dao/datasource/DelegatingDataSource.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/errorhandling/DatabaseItemNotFoundException.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/errorhandling/DatabaseItemNotFoundException.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/errorhandling/DatabaseItemNotFoundException.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/errorhandling/DatabaseItemNotFoundException.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/errorhandling/MissingParameterException.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/errorhandling/MissingParameterException.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/errorhandling/MissingParameterException.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/errorhandling/MissingParameterException.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/errorhandling/WebAppException.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/errorhandling/WebAppException.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/errorhandling/WebAppException.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/errorhandling/WebAppException.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/hydrojson/DbInterface.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/hydrojson/DbInterface.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/hydrojson/DbInterface.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/hydrojson/DbInterface.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/opendcs_dep/PropSpecHelper.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/opendcs_dep/PropSpecHelper.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/opendcs_dep/PropSpecHelper.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/opendcs_dep/PropSpecHelper.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/opendcs_dep/TestDecoder.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/opendcs_dep/TestDecoder.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/opendcs_dep/TestDecoder.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/opendcs_dep/TestDecoder.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/AlgorithmResources.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/AlgorithmResources.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/AlgorithmResources.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/AlgorithmResources.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/AppExceptionMapper.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/AppExceptionMapper.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/AppExceptionMapper.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/AppExceptionMapper.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/AppResources.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/AppResources.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/AppResources.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/AppResources.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/ComputationResources.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/ComputationResources.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/ComputationResources.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/ComputationResources.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/ConfigResources.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/ConfigResources.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/ConfigResources.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/ConfigResources.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/ContextPropertySetup.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/ContextPropertySetup.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/ContextPropertySetup.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/ContextPropertySetup.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/DataSourceContextCreator.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/DataSourceContextCreator.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/DataSourceContextCreator.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/DataSourceContextCreator.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/DataSourceResources.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/DataSourceResources.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/DataSourceResources.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/DataSourceResources.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/DatatypeUnitResources.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/DatatypeUnitResources.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/DatatypeUnitResources.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/DatatypeUnitResources.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/NetlistResources.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/NetlistResources.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/NetlistResources.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/NetlistResources.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/ObjectMapperContextResolver.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/ObjectMapperContextResolver.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/ObjectMapperContextResolver.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/ObjectMapperContextResolver.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/OdcsapiResource.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/OdcsapiResource.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/OdcsapiResource.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/OdcsapiResource.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/OpenDcsResource.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/OpenDcsResource.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/OpenDcsResource.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/OpenDcsResource.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/PlatformResources.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/PlatformResources.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/PlatformResources.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/PlatformResources.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/PresentationResources.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/PresentationResources.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/PresentationResources.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/PresentationResources.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/ReflistResources.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/ReflistResources.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/ReflistResources.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/ReflistResources.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/ResourceExamples.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/ResourceExamples.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/ResourceExamples.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/ResourceExamples.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/RestServices.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/RestServices.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/RestServices.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/RestServices.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/RoutingResources.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/RoutingResources.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/RoutingResources.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/RoutingResources.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/SiteResources.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/SiteResources.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/SiteResources.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/SiteResources.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/TimeSeriesResources.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/TimeSeriesResources.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/TimeSeriesResources.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/TimeSeriesResources.java diff --git a/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/AuthorizationCheck.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/AuthorizationCheck.java new file mode 100644 index 000000000..b8de3a96e --- /dev/null +++ b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/AuthorizationCheck.java @@ -0,0 +1,67 @@ +/* + * Copyright 2025 OpenDCS Consortium and its Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License") + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.opendcs.odcsapi.sec; + +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpServletRequest; +import javax.sql.DataSource; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.core.SecurityContext; + +import decodes.cwms.CwmsTimeSeriesDb; +import decodes.tsdb.TimeSeriesDb; +import opendcs.opentsdb.OpenTsdb; +import org.opendcs.database.api.OpenDcsDatabase; +import org.opendcs.odcsapi.dao.ApiAuthorizationDAI; +import org.opendcs.odcsapi.dao.OpenDcsDatabaseFactory; +import org.opendcs.odcsapi.sec.basicauth.OpenTsdbAuthorizationDAO; +import org.opendcs.odcsapi.sec.cwms.CwmsAuthorizationDAO; + +import static org.opendcs.odcsapi.res.DataSourceContextCreator.DATA_SOURCE_ATTRIBUTE_KEY; + +public abstract class AuthorizationCheck +{ + + /** + * Authorizes the current session returning the SecurityContext that will check user roles. + * + * @param requestContext context for the current session. + * @param httpServletRequest context for the current request. + */ + public abstract SecurityContext authorize(ContainerRequestContext requestContext, + HttpServletRequest httpServletRequest, ServletContext servletContext); + + public abstract boolean supports(String type, ContainerRequestContext requestContext, ServletContext servletContext); + + + protected final ApiAuthorizationDAI getAuthDao(ServletContext servletContext) + { + DataSource dataSource = (DataSource) servletContext.getAttribute(DATA_SOURCE_ATTRIBUTE_KEY); + OpenDcsDatabase db = OpenDcsDatabaseFactory.createDb(dataSource); + TimeSeriesDb timeSeriesDb = db.getLegacyDatabase(TimeSeriesDb.class) + .orElseThrow(() -> new UnsupportedOperationException("Endpoint is unsupported by the OpenDCS REST API.")); + //Need to figure out a better way to extend the toolkit API to be able to add dao's within the REST API + if(timeSeriesDb instanceof CwmsTimeSeriesDb) + { + return new CwmsAuthorizationDAO(timeSeriesDb); + } + else if(timeSeriesDb instanceof OpenTsdb) + { + return new OpenTsdbAuthorizationDAO(timeSeriesDb); + } + throw new UnsupportedOperationException("Endpoint is unsupported by the OpenDCS REST API."); + } +} diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/OpenDcsApiRoles.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/OpenDcsApiRoles.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/OpenDcsApiRoles.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/OpenDcsApiRoles.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/OpenDcsPrincipal.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/OpenDcsPrincipal.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/OpenDcsPrincipal.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/OpenDcsPrincipal.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/OpenDcsSecurityContext.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/OpenDcsSecurityContext.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/OpenDcsSecurityContext.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/OpenDcsSecurityContext.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/OrganizationResource.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/OrganizationResource.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/OrganizationResource.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/OrganizationResource.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/SecurityFilter.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/SecurityFilter.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/SecurityFilter.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/SecurityFilter.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/SecurityHeadersFilter.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/SecurityHeadersFilter.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/SecurityHeadersFilter.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/SecurityHeadersFilter.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/SessionResource.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/SessionResource.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/SessionResource.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/SessionResource.java diff --git a/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/basicauth/BasicAuthCheck.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/basicauth/BasicAuthCheck.java new file mode 100644 index 000000000..8167a5a4d --- /dev/null +++ b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/basicauth/BasicAuthCheck.java @@ -0,0 +1,84 @@ +/* + * Copyright 2025 OpenDCS Consortium and its Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License") + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.opendcs.odcsapi.sec.basicauth; + +import java.util.Set; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; +import javax.sql.DataSource; +import jakarta.ws.rs.NotAuthorizedException; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.core.SecurityContext; + +import com.google.auto.service.AutoService; +import decodes.tsdb.TimeSeriesDb; +import org.opendcs.database.api.OpenDcsDatabase; +import org.opendcs.odcsapi.dao.ApiAuthorizationDAI; +import org.opendcs.odcsapi.dao.OpenDcsDatabaseFactory; +import org.opendcs.odcsapi.sec.AuthorizationCheck; +import org.opendcs.odcsapi.sec.OpenDcsApiRoles; +import org.opendcs.odcsapi.sec.OpenDcsPrincipal; +import org.opendcs.odcsapi.sec.OpenDcsSecurityContext; + +import static org.opendcs.odcsapi.res.DataSourceContextCreator.DATA_SOURCE_ATTRIBUTE_KEY; + +@AutoService(AuthorizationCheck.class) +public final class BasicAuthCheck extends AuthorizationCheck +{ + + @Override + public OpenDcsSecurityContext authorize(ContainerRequestContext requestContext, HttpServletRequest httpServletRequest, ServletContext servletContext) + { + HttpSession session = httpServletRequest.getSession(false); + if(session == null) + { + throw new NotAuthorizedException("User has not yet established a session."); + } + Object attribute = session.getAttribute(OpenDcsPrincipal.USER_PRINCIPAL_SESSION_ATTRIBUTE); + if(!(attribute instanceof OpenDcsPrincipal)) + { + throw new NotAuthorizedException("User has not established an authenticated session."); + } + String username = ((OpenDcsPrincipal) attribute).getName(); + Set roles = getUserRoles(username, servletContext); + OpenDcsPrincipal principal = new OpenDcsPrincipal(username, roles); + return new OpenDcsSecurityContext(principal, + httpServletRequest.isSecure(), SecurityContext.BASIC_AUTH); + } + + @Override + public boolean supports(String type, ContainerRequestContext ignored, ServletContext servletContext) + { + DataSource dataSource = (DataSource) servletContext.getAttribute(DATA_SOURCE_ATTRIBUTE_KEY); + OpenDcsDatabase db = OpenDcsDatabaseFactory.createDb(dataSource); + TimeSeriesDb timeSeriesDb = db.getLegacyDatabase(TimeSeriesDb.class) + .orElseThrow(() -> new UnsupportedOperationException("Endpoint is unsupported by the OpenDCS REST API.")); + return "basic".equals(type) && timeSeriesDb.isOpenTSDB(); + } + + private Set getUserRoles(String username, ServletContext servletContext) + { + try(ApiAuthorizationDAI dao = getAuthDao(servletContext)) + { + return dao.getRoles(username); + } + catch(Exception ex) + { + throw new IllegalStateException("Unable to query the database for user authorization", ex); + } + } +} diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/basicauth/BasicAuthResource.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/basicauth/BasicAuthResource.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/basicauth/BasicAuthResource.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/basicauth/BasicAuthResource.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/basicauth/Credentials.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/basicauth/Credentials.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/basicauth/Credentials.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/basicauth/Credentials.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/basicauth/OpenTsdbAuthorizationDAO.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/basicauth/OpenTsdbAuthorizationDAO.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/basicauth/OpenTsdbAuthorizationDAO.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/basicauth/OpenTsdbAuthorizationDAO.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/cwms/CwmsAuthorizationDAO.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/cwms/CwmsAuthorizationDAO.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/cwms/CwmsAuthorizationDAO.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/cwms/CwmsAuthorizationDAO.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/openid/JwtVerifier.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/openid/JwtVerifier.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/openid/JwtVerifier.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/openid/JwtVerifier.java diff --git a/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/openid/OidcAuthCheck.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/openid/OidcAuthCheck.java new file mode 100644 index 000000000..b02a504d3 --- /dev/null +++ b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/openid/OidcAuthCheck.java @@ -0,0 +1,130 @@ +/* + * Copyright 2025 OpenDCS Consortium and its Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License") + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.opendcs.odcsapi.sec.openid; + +import java.net.MalformedURLException; +import java.net.URL; +import java.text.ParseException; +import java.util.Set; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.ws.rs.NotAuthorizedException; +import jakarta.ws.rs.ServerErrorException; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.core.Response; + +import com.google.auto.service.AutoService; +import com.nimbusds.jose.JOSEException; +import com.nimbusds.jose.jwk.source.JWKSource; +import com.nimbusds.jose.jwk.source.JWKSourceBuilder; +import com.nimbusds.jose.proc.BadJOSEException; +import com.nimbusds.jose.proc.SecurityContext; +import com.nimbusds.jwt.JWTClaimsSet; +import org.opendcs.odcsapi.dao.ApiAuthorizationDAI; +import org.opendcs.odcsapi.hydrojson.DbInterface; +import org.opendcs.odcsapi.sec.AuthorizationCheck; +import org.opendcs.odcsapi.sec.OpenDcsApiRoles; +import org.opendcs.odcsapi.sec.OpenDcsPrincipal; +import org.opendcs.odcsapi.sec.OpenDcsSecurityContext; +import org.slf4j.Logger; +import org.opendcs.utils.logging.OpenDcsLoggerFactory; + +@AutoService(AuthorizationCheck.class) +public final class OidcAuthCheck extends AuthorizationCheck +{ + + private static final Logger log = OpenDcsLoggerFactory.getLogger(); + static final String AUTHORIZATION_HEADER = "Authorization"; + static final String BEARER_PREFIX = "Bearer "; + private final JWKSource keySource; + + public OidcAuthCheck() + { + this.keySource = setupJwkSource(); + } + + //Used by unit tests + OidcAuthCheck(JWKSource keySource) + { + this.keySource = keySource; + } + + private static JWKSource setupJwkSource() + { + JWKSource keySource = null; + String property = "opendcs.rest.api.authorization.jwt.jwkset.url"; + try + { + String jwkSetUrl = DbInterface.decodesProperties.getProperty(property); + if(jwkSetUrl == null) + { + log.warn("Property: {} not set. OpenID Authorization is disabled.", property); + } + else + { + keySource = JWKSourceBuilder + .create(new URL(jwkSetUrl)) + .retrying(true) + .build(); + } + } + catch(MalformedURLException ex) + { + log.atWarn().setCause(ex).log("Property: {} is invalid. OpenID Authorization is disabled.", property); + } + return keySource; + } + + @Override + public OpenDcsSecurityContext authorize(ContainerRequestContext requestContext, HttpServletRequest httpServletRequest, ServletContext servletContext) + { + String authorizationHeader = requestContext.getHeaderString(AUTHORIZATION_HEADER); + try + { + String token = authorizationHeader.substring(BEARER_PREFIX.length()); + JWTClaimsSet claimsSet = JwtVerifier.getInstance().getClaimsSet(keySource, token); + String username = claimsSet.getStringClaim("preferred_username"); + OpenDcsPrincipal principal = createPrincipalFromSubject(username, servletContext); + return new OpenDcsSecurityContext(principal, httpServletRequest.isSecure(), BEARER_PREFIX); + } + catch(ParseException | JOSEException | BadJOSEException ex) + { + log.atWarn().setCause(ex).log("Token processing error."); + throw new NotAuthorizedException("Invalid JWT."); + } + } + + private OpenDcsPrincipal createPrincipalFromSubject(String subject, ServletContext servletContext) + { + try(ApiAuthorizationDAI authorizationDao = getAuthDao(servletContext)) + { + Set roles = authorizationDao.getRoles(subject); + return new OpenDcsPrincipal(subject, roles); + } + catch(Exception ex) + { + throw new ServerErrorException("Error accessing database to determine user roles", + Response.Status.INTERNAL_SERVER_ERROR, ex); + } + } + + @Override + public boolean supports(String type, ContainerRequestContext requestContext, ServletContext ignored) + { + String authorizationHeader = requestContext.getHeaderString(AUTHORIZATION_HEADER); + return keySource != null && "openid".equals(type) && authorizationHeader != null && authorizationHeader.startsWith(BEARER_PREFIX); + } +} diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/util/ApiConstants.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/util/ApiConstants.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/util/ApiConstants.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/util/ApiConstants.java diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/util/ApiPropertiesUtil.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/util/ApiPropertiesUtil.java similarity index 100% rename from opendcs-rest-api/src/main/java/org/opendcs/odcsapi/util/ApiPropertiesUtil.java rename to java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/util/ApiPropertiesUtil.java diff --git a/opendcs-rest-api/src/main/webapp/WEB-INF/web.xml b/java/opendcs-rest-api/src/main/webapp/WEB-INF/web.xml similarity index 100% rename from opendcs-rest-api/src/main/webapp/WEB-INF/web.xml rename to java/opendcs-rest-api/src/main/webapp/WEB-INF/web.xml diff --git a/opendcs-rest-api/src/main/webapp/swaggerui/swagger-initializer.js b/java/opendcs-rest-api/src/main/webapp/swaggerui/swagger-initializer.js similarity index 100% rename from opendcs-rest-api/src/main/webapp/swaggerui/swagger-initializer.js rename to java/opendcs-rest-api/src/main/webapp/swaggerui/swagger-initializer.js diff --git a/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/opendcs_dep/PropSpecHelperTest.java b/java/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/opendcs_dep/PropSpecHelperTest.java similarity index 100% rename from opendcs-rest-api/src/test/java/org/opendcs/odcsapi/opendcs_dep/PropSpecHelperTest.java rename to java/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/opendcs_dep/PropSpecHelperTest.java diff --git a/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/AlgorithmResourcesTest.java b/java/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/AlgorithmResourcesTest.java similarity index 100% rename from opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/AlgorithmResourcesTest.java rename to java/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/AlgorithmResourcesTest.java diff --git a/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/AppResourcesTest.java b/java/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/AppResourcesTest.java similarity index 100% rename from opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/AppResourcesTest.java rename to java/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/AppResourcesTest.java diff --git a/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/ComputationResourcesTest.java b/java/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/ComputationResourcesTest.java similarity index 100% rename from opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/ComputationResourcesTest.java rename to java/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/ComputationResourcesTest.java diff --git a/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/ConfigResourcesTest.java b/java/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/ConfigResourcesTest.java similarity index 100% rename from opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/ConfigResourcesTest.java rename to java/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/ConfigResourcesTest.java diff --git a/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/DataSourceResourcesTest.java b/java/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/DataSourceResourcesTest.java similarity index 100% rename from opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/DataSourceResourcesTest.java rename to java/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/DataSourceResourcesTest.java diff --git a/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/DatatypeUnitResourcesTest.java b/java/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/DatatypeUnitResourcesTest.java similarity index 100% rename from opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/DatatypeUnitResourcesTest.java rename to java/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/DatatypeUnitResourcesTest.java diff --git a/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/NetlistResourcesTest.java b/java/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/NetlistResourcesTest.java similarity index 100% rename from opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/NetlistResourcesTest.java rename to java/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/NetlistResourcesTest.java diff --git a/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/PlatformResourcesTest.java b/java/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/PlatformResourcesTest.java similarity index 100% rename from opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/PlatformResourcesTest.java rename to java/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/PlatformResourcesTest.java diff --git a/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/PresentationResourcesTest.java b/java/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/PresentationResourcesTest.java similarity index 100% rename from opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/PresentationResourcesTest.java rename to java/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/PresentationResourcesTest.java diff --git a/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/ReflistResourcesTest.java b/java/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/ReflistResourcesTest.java similarity index 100% rename from opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/ReflistResourcesTest.java rename to java/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/ReflistResourcesTest.java diff --git a/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/RoutingResourcesTest.java b/java/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/RoutingResourcesTest.java similarity index 100% rename from opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/RoutingResourcesTest.java rename to java/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/RoutingResourcesTest.java diff --git a/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/SiteResourcesTest.java b/java/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/SiteResourcesTest.java similarity index 100% rename from opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/SiteResourcesTest.java rename to java/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/SiteResourcesTest.java diff --git a/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/TimeSeriesResourcesTest.java b/java/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/TimeSeriesResourcesTest.java similarity index 100% rename from opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/TimeSeriesResourcesTest.java rename to java/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/TimeSeriesResourcesTest.java diff --git a/opendcs-web-client/README.md b/java/opendcs-web-ui/README.md similarity index 100% rename from opendcs-web-client/README.md rename to java/opendcs-web-ui/README.md diff --git a/opendcs-web-client/build.gradle b/java/opendcs-web-ui/build.gradle similarity index 100% rename from opendcs-web-client/build.gradle rename to java/opendcs-web-ui/build.gradle diff --git a/opendcs-web-client/examples/api.conf b/java/opendcs-web-ui/examples/api.conf similarity index 52% rename from opendcs-web-client/examples/api.conf rename to java/opendcs-web-ui/examples/api.conf index fd5991fa4..65a1fa61f 100644 --- a/opendcs-web-client/examples/api.conf +++ b/java/opendcs-web-ui/examples/api.conf @@ -1,4 +1,4 @@ -#This file goes in the conf directory of the opendcs-web-client application. It is not needed when being run on +#This file goes in the conf directory of the opendcs-web-ui application. It is not needed when being run on #embedded Jetty, as that information is acquired passed into the start script. url=http://127.0.0.1 port=8080 diff --git a/opendcs-web-client/src/main/java/filter/ContentSecurityPolicy.java b/java/opendcs-web-ui/src/main/java/filter/ContentSecurityPolicy.java similarity index 100% rename from opendcs-web-client/src/main/java/filter/ContentSecurityPolicy.java rename to java/opendcs-web-ui/src/main/java/filter/ContentSecurityPolicy.java diff --git a/opendcs-web-client/src/main/java/org/opendcs/webui/themes/BootstrapTheme.java b/java/opendcs-web-ui/src/main/java/org/opendcs/webui/themes/BootstrapTheme.java similarity index 100% rename from opendcs-web-client/src/main/java/org/opendcs/webui/themes/BootstrapTheme.java rename to java/opendcs-web-ui/src/main/java/org/opendcs/webui/themes/BootstrapTheme.java diff --git a/opendcs-web-client/src/main/java/org/opendcs/webui/themes/BootswatchThemes.java b/java/opendcs-web-ui/src/main/java/org/opendcs/webui/themes/BootswatchThemes.java similarity index 100% rename from opendcs-web-client/src/main/java/org/opendcs/webui/themes/BootswatchThemes.java rename to java/opendcs-web-ui/src/main/java/org/opendcs/webui/themes/BootswatchThemes.java diff --git a/opendcs-web-client/src/main/java/org/opendcs/webui/themes/Theme.java b/java/opendcs-web-ui/src/main/java/org/opendcs/webui/themes/Theme.java similarity index 100% rename from opendcs-web-client/src/main/java/org/opendcs/webui/themes/Theme.java rename to java/opendcs-web-ui/src/main/java/org/opendcs/webui/themes/Theme.java diff --git a/opendcs-web-client/src/main/java/org/opendcs/webui/themes/ThemeSet.java b/java/opendcs-web-ui/src/main/java/org/opendcs/webui/themes/ThemeSet.java similarity index 100% rename from opendcs-web-client/src/main/java/org/opendcs/webui/themes/ThemeSet.java rename to java/opendcs-web-ui/src/main/java/org/opendcs/webui/themes/ThemeSet.java diff --git a/opendcs-web-client/src/main/java/portal/PortalBase.java b/java/opendcs-web-ui/src/main/java/portal/PortalBase.java similarity index 100% rename from opendcs-web-client/src/main/java/portal/PortalBase.java rename to java/opendcs-web-ui/src/main/java/portal/PortalBase.java diff --git a/opendcs-web-client/src/main/java/portal/computations/Algorithms.java b/java/opendcs-web-ui/src/main/java/portal/computations/Algorithms.java similarity index 100% rename from opendcs-web-client/src/main/java/portal/computations/Algorithms.java rename to java/opendcs-web-ui/src/main/java/portal/computations/Algorithms.java diff --git a/opendcs-web-client/src/main/java/portal/computations/Computations.java b/java/opendcs-web-ui/src/main/java/portal/computations/Computations.java similarity index 100% rename from opendcs-web-client/src/main/java/portal/computations/Computations.java rename to java/opendcs-web-ui/src/main/java/portal/computations/Computations.java diff --git a/opendcs-web-client/src/main/java/portal/computations/Processes.java b/java/opendcs-web-ui/src/main/java/portal/computations/Processes.java similarity index 100% rename from opendcs-web-client/src/main/java/portal/computations/Processes.java rename to java/opendcs-web-ui/src/main/java/portal/computations/Processes.java diff --git a/opendcs-web-client/src/main/java/portal/decodes/Configs.java b/java/opendcs-web-ui/src/main/java/portal/decodes/Configs.java similarity index 100% rename from opendcs-web-client/src/main/java/portal/decodes/Configs.java rename to java/opendcs-web-ui/src/main/java/portal/decodes/Configs.java diff --git a/opendcs-web-client/src/main/java/portal/decodes/Error.java b/java/opendcs-web-ui/src/main/java/portal/decodes/Error.java similarity index 100% rename from opendcs-web-client/src/main/java/portal/decodes/Error.java rename to java/opendcs-web-ui/src/main/java/portal/decodes/Error.java diff --git a/opendcs-web-client/src/main/java/portal/decodes/Login.java b/java/opendcs-web-ui/src/main/java/portal/decodes/Login.java similarity index 100% rename from opendcs-web-client/src/main/java/portal/decodes/Login.java rename to java/opendcs-web-ui/src/main/java/portal/decodes/Login.java diff --git a/opendcs-web-client/src/main/java/portal/decodes/MainDashboard.java b/java/opendcs-web-ui/src/main/java/portal/decodes/MainDashboard.java similarity index 100% rename from opendcs-web-client/src/main/java/portal/decodes/MainDashboard.java rename to java/opendcs-web-ui/src/main/java/portal/decodes/MainDashboard.java diff --git a/opendcs-web-client/src/main/java/portal/decodes/Netlist.java b/java/opendcs-web-ui/src/main/java/portal/decodes/Netlist.java similarity index 100% rename from opendcs-web-client/src/main/java/portal/decodes/Netlist.java rename to java/opendcs-web-ui/src/main/java/portal/decodes/Netlist.java diff --git a/opendcs-web-client/src/main/java/portal/decodes/Platforms.java b/java/opendcs-web-ui/src/main/java/portal/decodes/Platforms.java similarity index 100% rename from opendcs-web-client/src/main/java/portal/decodes/Platforms.java rename to java/opendcs-web-ui/src/main/java/portal/decodes/Platforms.java diff --git a/opendcs-web-client/src/main/java/portal/decodes/Presentation.java b/java/opendcs-web-ui/src/main/java/portal/decodes/Presentation.java similarity index 100% rename from opendcs-web-client/src/main/java/portal/decodes/Presentation.java rename to java/opendcs-web-ui/src/main/java/portal/decodes/Presentation.java diff --git a/opendcs-web-client/src/main/java/portal/decodes/Routing.java b/java/opendcs-web-ui/src/main/java/portal/decodes/Routing.java similarity index 100% rename from opendcs-web-client/src/main/java/portal/decodes/Routing.java rename to java/opendcs-web-ui/src/main/java/portal/decodes/Routing.java diff --git a/opendcs-web-client/src/main/java/portal/decodes/Schedule.java b/java/opendcs-web-ui/src/main/java/portal/decodes/Schedule.java similarity index 100% rename from opendcs-web-client/src/main/java/portal/decodes/Schedule.java rename to java/opendcs-web-ui/src/main/java/portal/decodes/Schedule.java diff --git a/opendcs-web-client/src/main/java/portal/decodes/Sites.java b/java/opendcs-web-ui/src/main/java/portal/decodes/Sites.java similarity index 100% rename from opendcs-web-client/src/main/java/portal/decodes/Sites.java rename to java/opendcs-web-ui/src/main/java/portal/decodes/Sites.java diff --git a/opendcs-web-client/src/main/java/portal/decodes/Sources.java b/java/opendcs-web-ui/src/main/java/portal/decodes/Sources.java similarity index 100% rename from opendcs-web-client/src/main/java/portal/decodes/Sources.java rename to java/opendcs-web-ui/src/main/java/portal/decodes/Sources.java diff --git a/opendcs-web-client/src/main/java/portal/rledit/DataTypeEquiv.java b/java/opendcs-web-ui/src/main/java/portal/rledit/DataTypeEquiv.java similarity index 100% rename from opendcs-web-client/src/main/java/portal/rledit/DataTypeEquiv.java rename to java/opendcs-web-ui/src/main/java/portal/rledit/DataTypeEquiv.java diff --git a/opendcs-web-client/src/main/java/portal/rledit/EngineeringUnits.java b/java/opendcs-web-ui/src/main/java/portal/rledit/EngineeringUnits.java similarity index 100% rename from opendcs-web-client/src/main/java/portal/rledit/EngineeringUnits.java rename to java/opendcs-web-ui/src/main/java/portal/rledit/EngineeringUnits.java diff --git a/opendcs-web-client/src/main/java/portal/rledit/Enumerations.java b/java/opendcs-web-ui/src/main/java/portal/rledit/Enumerations.java similarity index 100% rename from opendcs-web-client/src/main/java/portal/rledit/Enumerations.java rename to java/opendcs-web-ui/src/main/java/portal/rledit/Enumerations.java diff --git a/opendcs-web-client/src/main/java/portal/rledit/EuConversions.java b/java/opendcs-web-ui/src/main/java/portal/rledit/EuConversions.java similarity index 100% rename from opendcs-web-client/src/main/java/portal/rledit/EuConversions.java rename to java/opendcs-web-ui/src/main/java/portal/rledit/EuConversions.java diff --git a/opendcs-web-client/src/main/java/portal/rledit/Seasons.java b/java/opendcs-web-ui/src/main/java/portal/rledit/Seasons.java similarity index 100% rename from opendcs-web-client/src/main/java/portal/rledit/Seasons.java rename to java/opendcs-web-ui/src/main/java/portal/rledit/Seasons.java diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/app_pages/algorithms.jsp b/java/opendcs-web-ui/src/main/webapp/WEB-INF/app_pages/algorithms.jsp similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/app_pages/algorithms.jsp rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/app_pages/algorithms.jsp diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/app_pages/computations.jsp b/java/opendcs-web-ui/src/main/webapp/WEB-INF/app_pages/computations.jsp similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/app_pages/computations.jsp rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/app_pages/computations.jsp diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/app_pages/configs.jsp b/java/opendcs-web-ui/src/main/webapp/WEB-INF/app_pages/configs.jsp similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/app_pages/configs.jsp rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/app_pages/configs.jsp diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/app_pages/engineering_units.jsp b/java/opendcs-web-ui/src/main/webapp/WEB-INF/app_pages/engineering_units.jsp similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/app_pages/engineering_units.jsp rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/app_pages/engineering_units.jsp diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/app_pages/enumerations.jsp b/java/opendcs-web-ui/src/main/webapp/WEB-INF/app_pages/enumerations.jsp similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/app_pages/enumerations.jsp rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/app_pages/enumerations.jsp diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/app_pages/error.jsp b/java/opendcs-web-ui/src/main/webapp/WEB-INF/app_pages/error.jsp similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/app_pages/error.jsp rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/app_pages/error.jsp diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/app_pages/eu_conversions.jsp b/java/opendcs-web-ui/src/main/webapp/WEB-INF/app_pages/eu_conversions.jsp similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/app_pages/eu_conversions.jsp rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/app_pages/eu_conversions.jsp diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/app_pages/login.jsp b/java/opendcs-web-ui/src/main/webapp/WEB-INF/app_pages/login.jsp similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/app_pages/login.jsp rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/app_pages/login.jsp diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/app_pages/netlist.jsp b/java/opendcs-web-ui/src/main/webapp/WEB-INF/app_pages/netlist.jsp similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/app_pages/netlist.jsp rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/app_pages/netlist.jsp diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/app_pages/platforms.jsp b/java/opendcs-web-ui/src/main/webapp/WEB-INF/app_pages/platforms.jsp similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/app_pages/platforms.jsp rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/app_pages/platforms.jsp diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/app_pages/presentation.jsp b/java/opendcs-web-ui/src/main/webapp/WEB-INF/app_pages/presentation.jsp similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/app_pages/presentation.jsp rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/app_pages/presentation.jsp diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/app_pages/processes.jsp b/java/opendcs-web-ui/src/main/webapp/WEB-INF/app_pages/processes.jsp similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/app_pages/processes.jsp rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/app_pages/processes.jsp diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/app_pages/routing.jsp b/java/opendcs-web-ui/src/main/webapp/WEB-INF/app_pages/routing.jsp similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/app_pages/routing.jsp rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/app_pages/routing.jsp diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/app_pages/schedule.jsp b/java/opendcs-web-ui/src/main/webapp/WEB-INF/app_pages/schedule.jsp similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/app_pages/schedule.jsp rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/app_pages/schedule.jsp diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/app_pages/seasons.jsp b/java/opendcs-web-ui/src/main/webapp/WEB-INF/app_pages/seasons.jsp similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/app_pages/seasons.jsp rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/app_pages/seasons.jsp diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/app_pages/sites.jsp b/java/opendcs-web-ui/src/main/webapp/WEB-INF/app_pages/sites.jsp similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/app_pages/sites.jsp rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/app_pages/sites.jsp diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/app_pages/sources.jsp b/java/opendcs-web-ui/src/main/webapp/WEB-INF/app_pages/sources.jsp similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/app_pages/sources.jsp rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/app_pages/sources.jsp diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/common/footer.jspf b/java/opendcs-web-ui/src/main/webapp/WEB-INF/common/footer.jspf similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/common/footer.jspf rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/common/footer.jspf diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/common/header.jspf b/java/opendcs-web-ui/src/main/webapp/WEB-INF/common/header.jspf similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/common/header.jspf rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/common/header.jspf diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/common/modals/notification.jspf b/java/opendcs-web-ui/src/main/webapp/WEB-INF/common/modals/notification.jspf similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/common/modals/notification.jspf rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/common/modals/notification.jspf diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/common/modals/organizations.jspf b/java/opendcs-web-ui/src/main/webapp/WEB-INF/common/modals/organizations.jspf similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/common/modals/organizations.jspf rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/common/modals/organizations.jspf diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/common/modals/waiting.jspf b/java/opendcs-web-ui/src/main/webapp/WEB-INF/common/modals/waiting.jspf similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/common/modals/waiting.jspf rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/common/modals/waiting.jspf diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/common/modals/yesno.jspf b/java/opendcs-web-ui/src/main/webapp/WEB-INF/common/modals/yesno.jspf similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/common/modals/yesno.jspf rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/common/modals/yesno.jspf diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/common/scripts.jspf b/java/opendcs-web-ui/src/main/webapp/WEB-INF/common/scripts.jspf similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/common/scripts.jspf rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/common/scripts.jspf diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/common/sidebar.jspf b/java/opendcs-web-ui/src/main/webapp/WEB-INF/common/sidebar.jspf similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/common/sidebar.jspf rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/common/sidebar.jspf diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/common/theme-selection.jspf b/java/opendcs-web-ui/src/main/webapp/WEB-INF/common/theme-selection.jspf similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/common/theme-selection.jspf rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/common/theme-selection.jspf diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/common/top-bar.jspf b/java/opendcs-web-ui/src/main/webapp/WEB-INF/common/top-bar.jspf similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/common/top-bar.jspf rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/common/top-bar.jspf diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/data_modals/algorithm_edit.jspf b/java/opendcs-web-ui/src/main/webapp/WEB-INF/data_modals/algorithm_edit.jspf similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/data_modals/algorithm_edit.jspf rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/data_modals/algorithm_edit.jspf diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/data_modals/algorithm_select.jspf b/java/opendcs-web-ui/src/main/webapp/WEB-INF/data_modals/algorithm_select.jspf similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/data_modals/algorithm_select.jspf rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/data_modals/algorithm_select.jspf diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/data_modals/computation_edit.jspf b/java/opendcs-web-ui/src/main/webapp/WEB-INF/data_modals/computation_edit.jspf similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/data_modals/computation_edit.jspf rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/data_modals/computation_edit.jspf diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/data_modals/config.jspf b/java/opendcs-web-ui/src/main/webapp/WEB-INF/data_modals/config.jspf similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/data_modals/config.jspf rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/data_modals/config.jspf diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/data_modals/config_sensor.jspf b/java/opendcs-web-ui/src/main/webapp/WEB-INF/data_modals/config_sensor.jspf similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/data_modals/config_sensor.jspf rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/data_modals/config_sensor.jspf diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/data_modals/data_source.jspf b/java/opendcs-web-ui/src/main/webapp/WEB-INF/data_modals/data_source.jspf similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/data_modals/data_source.jspf rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/data_modals/data_source.jspf diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/data_modals/decodes_script.jspf b/java/opendcs-web-ui/src/main/webapp/WEB-INF/data_modals/decodes_script.jspf similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/data_modals/decodes_script.jspf rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/data_modals/decodes_script.jspf diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/data_modals/netlist.jspf b/java/opendcs-web-ui/src/main/webapp/WEB-INF/data_modals/netlist.jspf similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/data_modals/netlist.jspf rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/data_modals/netlist.jspf diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/data_modals/platform.jspf b/java/opendcs-web-ui/src/main/webapp/WEB-INF/data_modals/platform.jspf similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/data_modals/platform.jspf rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/data_modals/platform.jspf diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/data_modals/platform_select.jspf b/java/opendcs-web-ui/src/main/webapp/WEB-INF/data_modals/platform_select.jspf similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/data_modals/platform_select.jspf rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/data_modals/platform_select.jspf diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/data_modals/platform_sensor.jspf b/java/opendcs-web-ui/src/main/webapp/WEB-INF/data_modals/platform_sensor.jspf similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/data_modals/platform_sensor.jspf rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/data_modals/platform_sensor.jspf diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/data_modals/presentation_group_element.jspf b/java/opendcs-web-ui/src/main/webapp/WEB-INF/data_modals/presentation_group_element.jspf similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/data_modals/presentation_group_element.jspf rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/data_modals/presentation_group_element.jspf diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/data_modals/process.jspf b/java/opendcs-web-ui/src/main/webapp/WEB-INF/data_modals/process.jspf similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/data_modals/process.jspf rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/data_modals/process.jspf diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/data_modals/routing.jspf b/java/opendcs-web-ui/src/main/webapp/WEB-INF/data_modals/routing.jspf similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/data_modals/routing.jspf rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/data_modals/routing.jspf diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/data_modals/schedule_entry.jspf b/java/opendcs-web-ui/src/main/webapp/WEB-INF/data_modals/schedule_entry.jspf similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/data_modals/schedule_entry.jspf rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/data_modals/schedule_entry.jspf diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/data_modals/site.jspf b/java/opendcs-web-ui/src/main/webapp/WEB-INF/data_modals/site.jspf similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/data_modals/site.jspf rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/data_modals/site.jspf diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/data_modals/transportmedia.jspf b/java/opendcs-web-ui/src/main/webapp/WEB-INF/data_modals/transportmedia.jspf similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/data_modals/transportmedia.jspf rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/data_modals/transportmedia.jspf diff --git a/opendcs-web-client/src/main/webapp/WEB-INF/web.xml b/java/opendcs-web-ui/src/main/webapp/WEB-INF/web.xml similarity index 100% rename from opendcs-web-client/src/main/webapp/WEB-INF/web.xml rename to java/opendcs-web-ui/src/main/webapp/WEB-INF/web.xml diff --git a/opendcs-web-client/src/main/webapp/index.html b/java/opendcs-web-ui/src/main/webapp/index.html similarity index 100% rename from opendcs-web-client/src/main/webapp/index.html rename to java/opendcs-web-ui/src/main/webapp/index.html diff --git a/opendcs-web-client/src/main/webapp/resources/css/icons/material/fonts/material-icons.svg b/java/opendcs-web-ui/src/main/webapp/resources/css/icons/material/fonts/material-icons.svg similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/css/icons/material/fonts/material-icons.svg rename to java/opendcs-web-ui/src/main/webapp/resources/css/icons/material/fonts/material-icons.svg diff --git a/opendcs-web-client/src/main/webapp/resources/css/icons/material/fonts/material-icons.ttf b/java/opendcs-web-ui/src/main/webapp/resources/css/icons/material/fonts/material-icons.ttf similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/css/icons/material/fonts/material-icons.ttf rename to java/opendcs-web-ui/src/main/webapp/resources/css/icons/material/fonts/material-icons.ttf diff --git a/opendcs-web-client/src/main/webapp/resources/css/icons/material/fonts/material-icons.woff b/java/opendcs-web-ui/src/main/webapp/resources/css/icons/material/fonts/material-icons.woff similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/css/icons/material/fonts/material-icons.woff rename to java/opendcs-web-ui/src/main/webapp/resources/css/icons/material/fonts/material-icons.woff diff --git a/opendcs-web-client/src/main/webapp/resources/css/icons/material/styles.min.css b/java/opendcs-web-ui/src/main/webapp/resources/css/icons/material/styles.min.css similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/css/icons/material/styles.min.css rename to java/opendcs-web-ui/src/main/webapp/resources/css/icons/material/styles.min.css diff --git a/opendcs-web-client/src/main/webapp/resources/css/login-form.css b/java/opendcs-web-ui/src/main/webapp/resources/css/login-form.css similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/css/login-form.css rename to java/opendcs-web-ui/src/main/webapp/resources/css/login-form.css diff --git a/opendcs-web-client/src/main/webapp/resources/css/main.css b/java/opendcs-web-ui/src/main/webapp/resources/css/main.css similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/css/main.css rename to java/opendcs-web-ui/src/main/webapp/resources/css/main.css diff --git a/opendcs-web-client/src/main/webapp/resources/css/opendcs-shim.css b/java/opendcs-web-ui/src/main/webapp/resources/css/opendcs-shim.css similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/css/opendcs-shim.css rename to java/opendcs-web-ui/src/main/webapp/resources/css/opendcs-shim.css diff --git a/opendcs-web-client/src/main/webapp/resources/css/select.dataTables.css b/java/opendcs-web-ui/src/main/webapp/resources/css/select.dataTables.css similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/css/select.dataTables.css rename to java/opendcs-web-ui/src/main/webapp/resources/css/select.dataTables.css diff --git a/opendcs-web-client/src/main/webapp/resources/img/odcs-favicon.png b/java/opendcs-web-ui/src/main/webapp/resources/img/odcs-favicon.png similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/img/odcs-favicon.png rename to java/opendcs-web-ui/src/main/webapp/resources/img/odcs-favicon.png diff --git a/opendcs-web-client/src/main/webapp/resources/img/river_2.jpg b/java/opendcs-web-ui/src/main/webapp/resources/img/river_2.jpg similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/img/river_2.jpg rename to java/opendcs-web-ui/src/main/webapp/resources/img/river_2.jpg diff --git a/opendcs-web-client/src/main/webapp/resources/img/user_profile_image_large.png b/java/opendcs-web-ui/src/main/webapp/resources/img/user_profile_image_large.png similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/img/user_profile_image_large.png rename to java/opendcs-web-ui/src/main/webapp/resources/img/user_profile_image_large.png diff --git a/opendcs-web-client/src/main/webapp/resources/js/algorithms.js b/java/opendcs-web-ui/src/main/webapp/resources/js/algorithms.js similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/js/algorithms.js rename to java/opendcs-web-ui/src/main/webapp/resources/js/algorithms.js diff --git a/opendcs-web-client/src/main/webapp/resources/js/computations.js b/java/opendcs-web-ui/src/main/webapp/resources/js/computations.js similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/js/computations.js rename to java/opendcs-web-ui/src/main/webapp/resources/js/computations.js diff --git a/opendcs-web-client/src/main/webapp/resources/js/configs.js b/java/opendcs-web-ui/src/main/webapp/resources/js/configs.js similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/js/configs.js rename to java/opendcs-web-ui/src/main/webapp/resources/js/configs.js diff --git a/opendcs-web-client/src/main/webapp/resources/js/datatables/datatables.js b/java/opendcs-web-ui/src/main/webapp/resources/js/datatables/datatables.js similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/js/datatables/datatables.js rename to java/opendcs-web-ui/src/main/webapp/resources/js/datatables/datatables.js diff --git a/opendcs-web-client/src/main/webapp/resources/js/datatables/helpers.js b/java/opendcs-web-ui/src/main/webapp/resources/js/datatables/helpers.js similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/js/datatables/helpers.js rename to java/opendcs-web-ui/src/main/webapp/resources/js/datatables/helpers.js diff --git a/opendcs-web-client/src/main/webapp/resources/js/decodes.js b/java/opendcs-web-ui/src/main/webapp/resources/js/decodes.js similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/js/decodes.js rename to java/opendcs-web-ui/src/main/webapp/resources/js/decodes.js diff --git a/opendcs-web-client/src/main/webapp/resources/js/engineering_units.js b/java/opendcs-web-ui/src/main/webapp/resources/js/engineering_units.js similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/js/engineering_units.js rename to java/opendcs-web-ui/src/main/webapp/resources/js/engineering_units.js diff --git a/opendcs-web-client/src/main/webapp/resources/js/enumerations.js b/java/opendcs-web-ui/src/main/webapp/resources/js/enumerations.js similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/js/enumerations.js rename to java/opendcs-web-ui/src/main/webapp/resources/js/enumerations.js diff --git a/opendcs-web-client/src/main/webapp/resources/js/eu_conversions.js b/java/opendcs-web-ui/src/main/webapp/resources/js/eu_conversions.js similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/js/eu_conversions.js rename to java/opendcs-web-ui/src/main/webapp/resources/js/eu_conversions.js diff --git a/opendcs-web-client/src/main/webapp/resources/js/layout.js b/java/opendcs-web-ui/src/main/webapp/resources/js/layout.js similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/js/layout.js rename to java/opendcs-web-ui/src/main/webapp/resources/js/layout.js diff --git a/opendcs-web-client/src/main/webapp/resources/js/lib/date_utilities.js b/java/opendcs-web-ui/src/main/webapp/resources/js/lib/date_utilities.js similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/js/lib/date_utilities.js rename to java/opendcs-web-ui/src/main/webapp/resources/js/lib/date_utilities.js diff --git a/opendcs-web-client/src/main/webapp/resources/js/lib/dom_utilities.js b/java/opendcs-web-ui/src/main/webapp/resources/js/lib/dom_utilities.js similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/js/lib/dom_utilities.js rename to java/opendcs-web-ui/src/main/webapp/resources/js/lib/dom_utilities.js diff --git a/opendcs-web-client/src/main/webapp/resources/js/lib/list_utilities.js b/java/opendcs-web-ui/src/main/webapp/resources/js/lib/list_utilities.js similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/js/lib/list_utilities.js rename to java/opendcs-web-ui/src/main/webapp/resources/js/lib/list_utilities.js diff --git a/opendcs-web-client/src/main/webapp/resources/js/lib/object_utilities.js b/java/opendcs-web-ui/src/main/webapp/resources/js/lib/object_utilities.js similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/js/lib/object_utilities.js rename to java/opendcs-web-ui/src/main/webapp/resources/js/lib/object_utilities.js diff --git a/opendcs-web-client/src/main/webapp/resources/js/lib/opendcs_utilities.js b/java/opendcs-web-ui/src/main/webapp/resources/js/lib/opendcs_utilities.js similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/js/lib/opendcs_utilities.js rename to java/opendcs-web-ui/src/main/webapp/resources/js/lib/opendcs_utilities.js diff --git a/opendcs-web-client/src/main/webapp/resources/js/lib/time.js b/java/opendcs-web-ui/src/main/webapp/resources/js/lib/time.js similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/js/lib/time.js rename to java/opendcs-web-ui/src/main/webapp/resources/js/lib/time.js diff --git a/opendcs-web-client/src/main/webapp/resources/js/lib/web_utilities.js b/java/opendcs-web-ui/src/main/webapp/resources/js/lib/web_utilities.js similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/js/lib/web_utilities.js rename to java/opendcs-web-ui/src/main/webapp/resources/js/lib/web_utilities.js diff --git a/opendcs-web-client/src/main/webapp/resources/js/login.js b/java/opendcs-web-ui/src/main/webapp/resources/js/login.js similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/js/login.js rename to java/opendcs-web-ui/src/main/webapp/resources/js/login.js diff --git a/opendcs-web-client/src/main/webapp/resources/js/main.js b/java/opendcs-web-ui/src/main/webapp/resources/js/main.js similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/js/main.js rename to java/opendcs-web-ui/src/main/webapp/resources/js/main.js diff --git a/opendcs-web-client/src/main/webapp/resources/js/modals/credentials.js b/java/opendcs-web-ui/src/main/webapp/resources/js/modals/credentials.js similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/js/modals/credentials.js rename to java/opendcs-web-ui/src/main/webapp/resources/js/modals/credentials.js diff --git a/opendcs-web-client/src/main/webapp/resources/js/modals/notification.js b/java/opendcs-web-ui/src/main/webapp/resources/js/modals/notification.js similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/js/modals/notification.js rename to java/opendcs-web-ui/src/main/webapp/resources/js/modals/notification.js diff --git a/opendcs-web-client/src/main/webapp/resources/js/modals/organizations.js b/java/opendcs-web-ui/src/main/webapp/resources/js/modals/organizations.js similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/js/modals/organizations.js rename to java/opendcs-web-ui/src/main/webapp/resources/js/modals/organizations.js diff --git a/opendcs-web-client/src/main/webapp/resources/js/modals/waiting.js b/java/opendcs-web-ui/src/main/webapp/resources/js/modals/waiting.js similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/js/modals/waiting.js rename to java/opendcs-web-ui/src/main/webapp/resources/js/modals/waiting.js diff --git a/opendcs-web-client/src/main/webapp/resources/js/modals/yesno.js b/java/opendcs-web-ui/src/main/webapp/resources/js/modals/yesno.js similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/js/modals/yesno.js rename to java/opendcs-web-ui/src/main/webapp/resources/js/modals/yesno.js diff --git a/opendcs-web-client/src/main/webapp/resources/js/netlist.js b/java/opendcs-web-ui/src/main/webapp/resources/js/netlist.js similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/js/netlist.js rename to java/opendcs-web-ui/src/main/webapp/resources/js/netlist.js diff --git a/opendcs-web-client/src/main/webapp/resources/js/platforms.js b/java/opendcs-web-ui/src/main/webapp/resources/js/platforms.js similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/js/platforms.js rename to java/opendcs-web-ui/src/main/webapp/resources/js/platforms.js diff --git a/opendcs-web-client/src/main/webapp/resources/js/presentation.js b/java/opendcs-web-ui/src/main/webapp/resources/js/presentation.js similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/js/presentation.js rename to java/opendcs-web-ui/src/main/webapp/resources/js/presentation.js diff --git a/opendcs-web-client/src/main/webapp/resources/js/processes.js b/java/opendcs-web-ui/src/main/webapp/resources/js/processes.js similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/js/processes.js rename to java/opendcs-web-ui/src/main/webapp/resources/js/processes.js diff --git a/opendcs-web-client/src/main/webapp/resources/js/routing.js b/java/opendcs-web-ui/src/main/webapp/resources/js/routing.js similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/js/routing.js rename to java/opendcs-web-ui/src/main/webapp/resources/js/routing.js diff --git a/opendcs-web-client/src/main/webapp/resources/js/schedule.js b/java/opendcs-web-ui/src/main/webapp/resources/js/schedule.js similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/js/schedule.js rename to java/opendcs-web-ui/src/main/webapp/resources/js/schedule.js diff --git a/opendcs-web-client/src/main/webapp/resources/js/seasons.js b/java/opendcs-web-ui/src/main/webapp/resources/js/seasons.js similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/js/seasons.js rename to java/opendcs-web-ui/src/main/webapp/resources/js/seasons.js diff --git a/opendcs-web-client/src/main/webapp/resources/js/sidebar.js b/java/opendcs-web-ui/src/main/webapp/resources/js/sidebar.js similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/js/sidebar.js rename to java/opendcs-web-ui/src/main/webapp/resources/js/sidebar.js diff --git a/opendcs-web-client/src/main/webapp/resources/js/sites.js b/java/opendcs-web-ui/src/main/webapp/resources/js/sites.js similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/js/sites.js rename to java/opendcs-web-ui/src/main/webapp/resources/js/sites.js diff --git a/opendcs-web-client/src/main/webapp/resources/js/sources.js b/java/opendcs-web-ui/src/main/webapp/resources/js/sources.js similarity index 100% rename from opendcs-web-client/src/main/webapp/resources/js/sources.js rename to java/opendcs-web-ui/src/main/webapp/resources/js/sources.js diff --git a/opendcs-web-client/src/test/java/portal/AlgorithmsTest.java b/java/opendcs-web-ui/src/test/java/portal/AlgorithmsTest.java similarity index 100% rename from opendcs-web-client/src/test/java/portal/AlgorithmsTest.java rename to java/opendcs-web-ui/src/test/java/portal/AlgorithmsTest.java diff --git a/settings.gradle b/settings.gradle index 0293dd8a4..315e25132 100644 --- a/settings.gradle +++ b/settings.gradle @@ -16,12 +16,22 @@ rootProject.name = "opendcs_rest_api" include ":opendcs-rest-api" -include ":opendcs-web-client" -include ":opendcs-integration-test" +project(":opendcs-rest-api").projectDir=file("java/opendcs-rest-api") + +include ":opendcs-web-ui" +project(":opendcs-web-ui").projectDir=file("java/opendcs-web-ui") + +include ":testing" +project(":testing").projectDir=file("integrationtesting") + +include ":testing:rest-api" +project(":testing:rest-api").projectDir=file("integrationtesting/rest-api") + include ":api-client-typescript" -project(":api-client-typescript").projectDir=file("api-clients/api-client-typescript") +project(":api-client-typescript").projectDir=file("java/api-clients/api-client-typescript") + include ":api-client-java" -project(":api-client-java").projectDir=file("api-clients/api-client-java") +project(":api-client-java").projectDir=file("java/api-clients/api-client-java") // Version override for local development if(hasProperty('librarySourcesDir')) { From d825ab9810cd111458705f460953e81360b3967b Mon Sep 17 00:00:00 2001 From: Mike Neilson Date: Fri, 5 Dec 2025 23:59:15 +0000 Subject: [PATCH 2/5] Update test tasks to match main code design. --- integrationtesting/rest-api/build.gradle | 170 +++++++++--------- .../odcsapi/fixtures/TomcatServer.java | 4 +- .../odcsapi/res/it/AlgorithmResourcesIT.java | 7 +- .../odcsapi/res/it/AppResourcesIT.java | 5 - .../org/opendcs/odcsapi/res/it/BaseIT.java | 4 + .../res/it/ComputationResourcesIT.java | 5 - .../odcsapi/res/it/ConfigResourcesIT.java | 5 - .../odcsapi/res/it/DataSourceResourcesIT.java | 5 - .../res/it/DatatypeUnitResourcesIT.java | 5 - .../odcsapi/res/it/NetlistResourcesIT.java | 5 - .../odcsapi/res/it/OdcsapiResourceIT.java | 5 - .../odcsapi/res/it/PlatformResourcesIT.java | 6 - .../res/it/PresentationResourcesIT.java | 5 - .../odcsapi/res/it/ReflistResourcesIT.java | 5 - .../odcsapi/res/it/RoutingResourcesIT.java | 5 - .../odcsapi/res/it/SiteResourcesIT.java | 5 - .../odcsapi/res/it/TimeSeriesResourcesIT.java | 5 - .../odcsapi/sec/AuthorizationTestIT.java | 5 - .../odcsapi/sec/basicauth/FormAuthIT.java | 7 +- .../odcsapi/sec/openid/OpenIdAuthIT.java | 5 - 20 files changed, 92 insertions(+), 176 deletions(-) diff --git a/integrationtesting/rest-api/build.gradle b/integrationtesting/rest-api/build.gradle index 636c3c4ea..1f59ec2ce 100644 --- a/integrationtesting/rest-api/build.gradle +++ b/integrationtesting/rest-api/build.gradle @@ -73,7 +73,7 @@ configurations.all { } -tasks.register('generateConfig', Copy) { +def genConfig = tasks.register('generateConfig', Copy) { doFirst { project.delete layout.buildDirectory.file("tomcat/") project.mkdir layout.buildDirectory.file("tomcat/logs") @@ -140,8 +140,8 @@ tasks.register('owaspZap', JavaExec) { systemProperties.put("DCSTOOL_HOME", outputDir) } - -tasks.register('downloadAndUnzipInstaller') { +// to be removed during merge into main code +def odcsInstall = tasks.register('downloadAndUnzipInstaller') { def zipUrl = "https://github.com/opendcs/opendcs/releases/download/${libs.versions.opendcs.get()}/opendcs-${libs.versions.opendcs.get()}.zip" def outputDir = project.layout.buildDirectory.dir("opendcs-install").get() def zipFile = project.layout.buildDirectory.dir("download/opendcs-install.zip").get().getAsFile() @@ -163,101 +163,97 @@ tasks.register('downloadAndUnzipInstaller') { } } -tasks.register('integrationTestOpenTSDB', Test) { - group "verification" - useJUnitPlatform { - includeTags "integration" - includeTags "integration-opentsdb-only" - } - // with gradle 9.2 it seems we need to set these manually - testClassesDirs = sourceSets.test.output.classesDirs - classpath = sourceSets.test.runtimeClasspath - shouldRunAfter test - dependsOn(':opendcs-rest-api:war') - dependsOn(':opendcs-web-ui:war') - dependsOn generateConfig - dependsOn downloadAndUnzipInstaller - jvmArgs += "-Dorg.apache.tomcat.util.digester.PROPERTY_SOURCE=org.apache.tomcat.util.digester.EnvironmentPropertySource" - jvmArgs += "-Dcatalina.base=${layout.buildDirectory.file("tomcat")}" - jvmArgs += "-Dopendcs.test.integration.db=OpenDCS-Postgres" - def restWar = project(':opendcs-rest-api').tasks.named('war').get().archiveFile.get().asFile.getAbsolutePath() - def guiWar = project(':opendcs-web-ui').tasks.named('war').get().archiveFile.get().asFile.getAbsolutePath() - jvmArgs += "-Dopendcs.restapi.warfile=${restWar}" - jvmArgs += "-Dopendcs.gui.warfile=${guiWar}" - def outputDir = downloadAndUnzipInstaller.outputs.files.singleFile - systemProperties.put("DCSTOOL_HOME", outputDir) - systemProperties.put("DCSTOOL_USERDIR", "build/resources/test/tomcat/conf") - systemProperties.put("java.util.logging.config.file", "build/tomcat/conf/logging.properties") - finalizedBy integrationTestReportOpenTSDB -} +def commonJacocoExcludes = [ + "**/easy_install/**", + "**/python_packages", + "**/certifi/**", + "**/chardet/**", + "**/urllib3/**", + "**/requests/**", + "**/idna/**", + "**/pkg_resources/**" +] -tasks.register('integrationTestCWMS', Test) { - group "verification" - useJUnitPlatform { - includeTags "integration" - includeTags "integration-cwms-only" +def testEngines = (project.findProperty("opendcs.test.engine")?: "OpenDCS-Postgres,OpenDCS-Oracle,CWMS-Oracle").split(",") + +testEngines.each { engine -> + + def tmpdir = "${project.layout.buildDirectory.get()}/runs/${engine}/tmp" + + def task = tasks.register("test"+engine.replace("-",""), Test) { task -> + group "verification" + dependsOn odcsInstall + dependsOn(':opendcs-rest-api:war') + dependsOn(':opendcs-web-ui:war') + dependsOn genConfig + useJUnitPlatform() + + // with gradle 9.2 it seems we need to set these manually + testClassesDirs = sourceSets.test.output.classesDirs + classpath = sourceSets.test.runtimeClasspath + + enabled = gradle.startParameter.taskNames.contains(":testing:" + project.name + ":test") || + gradle.startParameter.taskNames.contains(":testing:" + project.name + ":" +task.name) + doFirst { + project.mkdir(tmpdir) + } + + inputs.property "opendcs.test.engine", engine + + systemProperties += project.properties.findAll {k, v -> k.startsWith("opendcs")} + systemProperties += project.properties.findAll {k, v -> k.startsWith("testcontainer")} + systemProperties += ["opendcs.test.engine": engine] + + jvmArgs += "-Dorg.apache.tomcat.util.digester.PROPERTY_SOURCE=org.apache.tomcat.util.digester.EnvironmentPropertySource" + jvmArgs += "-Dcatalina.base=${layout.buildDirectory.file("tomcat")}" + jvmArgs += "-Dopendcs.test.integration.db=${engine}" + def restWar = project(':opendcs-rest-api').tasks.named('war').get().archiveFile.get().asFile.getAbsolutePath() + def guiWar = project(':opendcs-web-ui').tasks.named('war').get().archiveFile.get().asFile.getAbsolutePath() + jvmArgs += "-Dopendcs.restapi.warfile=${restWar}" + jvmArgs += "-Dopendcs.gui.warfile=${guiWar}" + def odcsInstallDir = downloadAndUnzipInstaller.outputs.files.singleFile + systemProperties.put("DCSTOOL_HOME", odcsInstallDir) + systemProperties.put("DCSTOOL_USERDIR", "build/resources/test/tomcat/conf") + systemProperties.put("java.util.logging.config.file", "build/tomcat/conf/logging.properties") + reports { + html {} + junitXml {} + } + jacoco { + excludes += commonJacocoExcludes + } } - // with gradle 9.2 it seems we need to set these manually - testClassesDirs = sourceSets.test.output.classesDirs - classpath = sourceSets.test.runtimeClasspath - shouldRunAfter test - dependsOn(':opendcs-rest-api:war') - dependsOn(':opendcs-web-ui:war') - dependsOn generateConfig - dependsOn downloadAndUnzipInstaller - jvmArgs += "-Dorg.apache.tomcat.util.digester.PROPERTY_SOURCE=org.apache.tomcat.util.digester.EnvironmentPropertySource" - jvmArgs += "-Dcatalina.base=${layout.buildDirectory.file("tomcat")}" - jvmArgs += "-Dopendcs.test.integration.db=CWMS-Oracle" - jvmArgs += "-Dtestcontainer.cwms.bypass.cwms.pass=dcs_user" - def restWar = project(':opendcs-rest-api').tasks.named('war').get().archiveFile.get().asFile.getAbsolutePath() - def guiWar = project(':opendcs-web-ui').tasks.named('war').get().archiveFile.get().asFile.getAbsolutePath() - jvmArgs += "-Dopendcs.restapi.warfile=${restWar}" - jvmArgs += "-Dopendcs.gui.warfile=${guiWar}" - def outputDir = downloadAndUnzipInstaller.outputs.files.singleFile - systemProperties.put("DCSTOOL_HOME", outputDir) - systemProperties.put("DCSTOOL_USERDIR", "build/resources/test/tomcat/conf") - systemProperties.put("java.util.logging.config.file", "build/tomcat/conf/logging.properties") - finalizedBy integrationTestReportCWMS -} + test.dependsOn task + + def jtr = tasks.register("jacocoTestReport"+engine.replace("-",""), JacocoReport) { + dependsOn task + sourceSets project(":opendcs-rest-api").sourceSets.main + executionData = files("${buildDir}/jacoco/test"+engine.replace("-","")+".exec") // Use the .exec file from the custom test task + reports { + html { + outputLocation = jacoco.reportsDirectory.dir("jacoco-${engine}-html") + } + xml { + outputLocation = jacoco.reportsDirectory.file("jacoco-${engine}.xml") + } + + } + classDirectories.setFrom(files(classDirectories.files.collect { + fileTree(dir: it, exclude: commonJacocoExcludes) + })) -tasks.register('integrationTestReportCWMS', JacocoReport) { - group = "verification" - dependsOn tasks.named('integrationTestCWMS') - additionalSourceDirs.setFrom(files(project(':opendcs-rest-api').sourceSets.main.allSource.srcDirs)) - executionData = files( - layout.buildDirectory.dir("jacoco/integrationTestCWMS.exec") - ) - classDirectories.setFrom(files( - project(':opendcs-rest-api').sourceSets.main.output, - sourceSets.main.output - )) - reports { - xml.required.set(true) } -} -tasks.register('integrationTestReportOpenTSDB', JacocoReport) { - group = "verification" - dependsOn tasks.named('integrationTestOpenTSDB') - additionalSourceDirs.setFrom(files(project(':opendcs-rest-api').sourceSets.main.allSource.srcDirs)) - executionData = files( - layout.buildDirectory.dir("jacoco/integrationTestOpenTSDB.exec") - ) - classDirectories.setFrom(files( - project(':opendcs-rest-api').sourceSets.main.output, - sourceSets.main.output - )) - reports { - xml.required.set(true) + task.configure { + finalizedBy jtr } + } test { useJUnitPlatform { - excludeTags "integration" - excludeTags "integration-opentsdb-only" - excludeTags "integration-cwms-only" + exclude '**/*' } } diff --git a/integrationtesting/rest-api/src/main/java/org/opendcs/odcsapi/fixtures/TomcatServer.java b/integrationtesting/rest-api/src/main/java/org/opendcs/odcsapi/fixtures/TomcatServer.java index fc9a3fbd4..e733a50b0 100644 --- a/integrationtesting/rest-api/src/main/java/org/opendcs/odcsapi/fixtures/TomcatServer.java +++ b/integrationtesting/rest-api/src/main/java/org/opendcs/odcsapi/fixtures/TomcatServer.java @@ -196,8 +196,8 @@ private static void setupDbForBypass(DbType dbType) System.setProperty(DB_DATASOURCE_CLASS, DataSourceFactory.class.getName()); System.setProperty(DB_VALIDATION_QUERY, "SELECT 1 FROM dual"); System.setProperty(DB_URL, System.getProperty("testcontainer.cwms.bypass.url")); - System.setProperty(DB_USERNAME, System.getProperty("testcontainer.cwms.bypass.office.eroc") + "WEBTEST"); - System.setProperty(DB_PASSWORD, System.getProperty("testcontainer.cwms.bypass.cwms.pass")); + System.setProperty(DB_USERNAME, System.getProperty("testcontainer.cwms.bypass.dcs.user", "dcs_user")); + System.setProperty(DB_PASSWORD, System.getProperty("testcontainer.cwms.bypass.dcs.pass", "dcs_user")); } else { diff --git a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/AlgorithmResourcesIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/AlgorithmResourcesIT.java index a8d6dbb18..1b4c1d56d 100644 --- a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/AlgorithmResourcesIT.java +++ b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/AlgorithmResourcesIT.java @@ -20,19 +20,14 @@ import io.restassured.filter.log.LogDetail; import io.restassured.filter.session.SessionFilter; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.BeforeEach;import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.TestTemplate; -import org.junit.jupiter.api.extension.ExtendWith; import org.opendcs.odcsapi.beans.ApiAlgorithm; -import org.opendcs.odcsapi.fixtures.DatabaseContextProvider; import static io.restassured.RestAssured.given; import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.Matchers.is; -@Tag("integration") -@ExtendWith(DatabaseContextProvider.class) final class AlgorithmResourcesIT extends BaseIT { @BeforeEach diff --git a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/AppResourcesIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/AppResourcesIT.java index 5fee97055..0266f3e7f 100644 --- a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/AppResourcesIT.java +++ b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/AppResourcesIT.java @@ -33,11 +33,8 @@ import opendcs.dai.LoadingAppDAI; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.TestTemplate; -import org.junit.jupiter.api.extension.ExtendWith; import org.opendcs.odcsapi.beans.ApiAppStatus; -import org.opendcs.odcsapi.fixtures.DatabaseContextProvider; import static io.restassured.RestAssured.given; import static org.hamcrest.Matchers.equalTo; @@ -47,8 +44,6 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; -@Tag("integration") -@ExtendWith(DatabaseContextProvider.class) final class AppResourcesIT extends BaseIT { private static Long appid = null; diff --git a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/BaseIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/BaseIT.java index a83bcce7f..d01790417 100644 --- a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/BaseIT.java +++ b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/BaseIT.java @@ -44,6 +44,8 @@ import opendcs.dai.ScheduleEntryDAI; import opendcs.dai.TimeSeriesDAI; import org.apache.catalina.session.StandardSession; +import org.junit.jupiter.api.extension.ExtendWith; +import org.opendcs.odcsapi.fixtures.DatabaseContextProvider; import org.opendcs.odcsapi.fixtures.DatabaseSetupExtension; import org.opendcs.odcsapi.fixtures.DbType; import org.opendcs.odcsapi.fixtures.TomcatServer; @@ -57,6 +59,8 @@ import static org.hamcrest.Matchers.is; import static org.opendcs.odcsapi.util.ApiConstants.ORGANIZATION_HEADER; + +@ExtendWith(DatabaseContextProvider.class) class BaseIT { protected static String authHeader = null; diff --git a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/ComputationResourcesIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/ComputationResourcesIT.java index 50e9a0d9d..f5eca8ef0 100644 --- a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/ComputationResourcesIT.java +++ b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/ComputationResourcesIT.java @@ -28,23 +28,18 @@ import io.restassured.response.Response; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.TestTemplate; -import org.junit.jupiter.api.extension.ExtendWith; import org.opendcs.odcsapi.beans.ApiAlgorithm; import org.opendcs.odcsapi.beans.ApiCompParm; import org.opendcs.odcsapi.beans.ApiComputation; import org.opendcs.odcsapi.beans.ApiLoadingApp; import org.opendcs.odcsapi.beans.ApiSite; -import org.opendcs.odcsapi.fixtures.DatabaseContextProvider; import static io.restassured.RestAssured.given; import static org.hamcrest.CoreMatchers.is; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; -@Tag("integration") -@ExtendWith(DatabaseContextProvider.class) final class ComputationResourcesIT extends BaseIT { private static final ObjectMapper MAPPER = new ObjectMapper(); diff --git a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/ConfigResourcesIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/ConfigResourcesIT.java index da488a7c8..8a4f51922 100644 --- a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/ConfigResourcesIT.java +++ b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/ConfigResourcesIT.java @@ -25,17 +25,12 @@ import io.restassured.response.Response; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.TestTemplate; -import org.junit.jupiter.api.extension.ExtendWith; -import org.opendcs.odcsapi.fixtures.DatabaseContextProvider; import static io.restassured.RestAssured.given; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; -@Tag("integration") -@ExtendWith(DatabaseContextProvider.class) final class ConfigResourcesIT extends BaseIT { private static SessionFilter sessionFilter; diff --git a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/DataSourceResourcesIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/DataSourceResourcesIT.java index 96f995f22..01290453f 100644 --- a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/DataSourceResourcesIT.java +++ b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/DataSourceResourcesIT.java @@ -28,19 +28,14 @@ import io.restassured.response.Response; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.TestTemplate; -import org.junit.jupiter.api.extension.ExtendWith; import org.opendcs.odcsapi.beans.ApiDataSource; -import org.opendcs.odcsapi.fixtures.DatabaseContextProvider; import static io.restassured.RestAssured.given; import static org.hamcrest.CoreMatchers.is; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; -@Tag("integration") -@ExtendWith(DatabaseContextProvider.class) final class DataSourceResourcesIT extends BaseIT { private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); diff --git a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/DatatypeUnitResourcesIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/DatatypeUnitResourcesIT.java index 8e53bae08..19a848fd2 100644 --- a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/DatatypeUnitResourcesIT.java +++ b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/DatatypeUnitResourcesIT.java @@ -28,12 +28,9 @@ import io.restassured.response.Response; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.TestTemplate; -import org.junit.jupiter.api.extension.ExtendWith; import org.opendcs.odcsapi.beans.ApiUnit; import org.opendcs.odcsapi.beans.ApiUnitConverter; -import org.opendcs.odcsapi.fixtures.DatabaseContextProvider; import static io.restassured.RestAssured.given; import static org.hamcrest.CoreMatchers.is; @@ -41,8 +38,6 @@ import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -@Tag("integration") -@ExtendWith(DatabaseContextProvider.class) final class DatatypeUnitResourcesIT extends BaseIT { private static Long converterId; diff --git a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/NetlistResourcesIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/NetlistResourcesIT.java index 0e0681969..73d4d7c56 100644 --- a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/NetlistResourcesIT.java +++ b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/NetlistResourcesIT.java @@ -28,12 +28,9 @@ import io.restassured.response.Response; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.TestTemplate; -import org.junit.jupiter.api.extension.ExtendWith; import org.opendcs.odcsapi.beans.ApiNetList; import org.opendcs.odcsapi.beans.ApiPlatform; -import org.opendcs.odcsapi.fixtures.DatabaseContextProvider; import static io.restassured.RestAssured.given; import static org.hamcrest.CoreMatchers.is; @@ -42,8 +39,6 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; -@Tag("integration") -@ExtendWith(DatabaseContextProvider.class) final class NetlistResourcesIT extends BaseIT { private Long netlistId; diff --git a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/OdcsapiResourceIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/OdcsapiResourceIT.java index c4e3f4b75..0b312d7b5 100644 --- a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/OdcsapiResourceIT.java +++ b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/OdcsapiResourceIT.java @@ -34,12 +34,9 @@ import io.restassured.response.Response; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.TestTemplate; -import org.junit.jupiter.api.extension.ExtendWith; import org.opendcs.odcsapi.beans.ApiPlatform; import org.opendcs.odcsapi.beans.DecodeRequest; -import org.opendcs.odcsapi.fixtures.DatabaseContextProvider; import static io.restassured.RestAssured.given; import static org.hamcrest.CoreMatchers.is; @@ -47,8 +44,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; -@Tag("integration") -@ExtendWith(DatabaseContextProvider.class) final class OdcsapiResourceIT extends BaseIT { private static final ObjectMapper MAPPER = new ObjectMapper(); diff --git a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/PlatformResourcesIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/PlatformResourcesIT.java index c1189e653..ac1fde016 100644 --- a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/PlatformResourcesIT.java +++ b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/PlatformResourcesIT.java @@ -27,16 +27,12 @@ import decodes.db.ScheduleEntryStatus; import decodes.sql.DbKey; import io.restassured.filter.log.LogDetail; -import io.restassured.filter.session.SessionFilter; import io.restassured.path.json.JsonPath; import io.restassured.response.ExtractableResponse; import io.restassured.response.Response; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.TestTemplate; -import org.junit.jupiter.api.extension.ExtendWith; -import org.opendcs.odcsapi.fixtures.DatabaseContextProvider; import static io.restassured.RestAssured.given; import static org.hamcrest.Matchers.equalTo; @@ -46,8 +42,6 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; -@Tag("integration") -@ExtendWith(DatabaseContextProvider.class) final class PlatformResourcesIT extends BaseIT { private static Long platformId; diff --git a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/PresentationResourcesIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/PresentationResourcesIT.java index 1e11b0d04..4eae7bf45 100644 --- a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/PresentationResourcesIT.java +++ b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/PresentationResourcesIT.java @@ -29,19 +29,14 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.TestTemplate; -import org.junit.jupiter.api.extension.ExtendWith; import org.opendcs.odcsapi.beans.ApiPresentationGroup; -import org.opendcs.odcsapi.fixtures.DatabaseContextProvider; import static io.restassured.RestAssured.given; import static org.hamcrest.CoreMatchers.is; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotEquals; -@Tag("integration") -@ExtendWith(DatabaseContextProvider.class) final class PresentationResourcesIT extends BaseIT { private static final ObjectMapper MAPPER = new ObjectMapper(); diff --git a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/ReflistResourcesIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/ReflistResourcesIT.java index 790b67397..300f3ab1f 100644 --- a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/ReflistResourcesIT.java +++ b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/ReflistResourcesIT.java @@ -26,18 +26,13 @@ import io.restassured.response.Response; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.TestTemplate; -import org.junit.jupiter.api.extension.ExtendWith; -import org.opendcs.odcsapi.fixtures.DatabaseContextProvider; import static io.restassured.RestAssured.given; import static org.hamcrest.Matchers.is; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; -@Tag("integration") -@ExtendWith(DatabaseContextProvider.class) final class ReflistResourcesIT extends BaseIT { private static SessionFilter sessionFilter; diff --git a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/RoutingResourcesIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/RoutingResourcesIT.java index 3ccda089e..226cdfa1c 100644 --- a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/RoutingResourcesIT.java +++ b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/RoutingResourcesIT.java @@ -39,9 +39,7 @@ import opendcs.dai.DacqEventDAI; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.TestTemplate; -import org.junit.jupiter.api.extension.ExtendWith; import org.opendcs.odcsapi.beans.ApiDacqEvent; import org.opendcs.odcsapi.beans.ApiDataSource; import org.opendcs.odcsapi.beans.ApiLoadingApp; @@ -49,7 +47,6 @@ import org.opendcs.odcsapi.beans.ApiRoutingStatus; import org.opendcs.odcsapi.beans.ApiScheduleEntry; import org.opendcs.odcsapi.beans.ApiScheduleEntryRef; -import org.opendcs.odcsapi.fixtures.DatabaseContextProvider; import static io.restassured.RestAssured.given; import static org.hamcrest.CoreMatchers.anyOf; @@ -60,8 +57,6 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; -@Tag("integration") -@ExtendWith(DatabaseContextProvider.class) final class RoutingResourcesIT extends BaseIT { private static final ObjectMapper MAPPER = new ObjectMapper(); diff --git a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/SiteResourcesIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/SiteResourcesIT.java index ab06e7b4a..2c8718fa3 100644 --- a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/SiteResourcesIT.java +++ b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/SiteResourcesIT.java @@ -28,11 +28,8 @@ import io.restassured.response.Response; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.TestTemplate; -import org.junit.jupiter.api.extension.ExtendWith; import org.opendcs.odcsapi.beans.ApiSite; -import org.opendcs.odcsapi.fixtures.DatabaseContextProvider; import static io.restassured.RestAssured.given; import static org.hamcrest.Matchers.equalTo; @@ -41,8 +38,6 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; -@Tag("integration") -@ExtendWith(DatabaseContextProvider.class) final class SiteResourcesIT extends BaseIT { private static Long siteId; diff --git a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/TimeSeriesResourcesIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/TimeSeriesResourcesIT.java index 888f46737..0fa0ed6da 100644 --- a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/TimeSeriesResourcesIT.java +++ b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/TimeSeriesResourcesIT.java @@ -38,11 +38,8 @@ import io.restassured.response.Response; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.TestTemplate; -import org.junit.jupiter.api.extension.ExtendWith; import org.opendcs.odcsapi.beans.ApiSite; -import org.opendcs.odcsapi.fixtures.DatabaseContextProvider; import static io.restassured.RestAssured.given; import static org.hamcrest.Matchers.is; @@ -51,8 +48,6 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; -@Tag("integration") -@ExtendWith(DatabaseContextProvider.class) final class TimeSeriesResourcesIT extends BaseIT { private Long tsGroupId; diff --git a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/sec/AuthorizationTestIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/sec/AuthorizationTestIT.java index 4dd5fedf0..8bd750905 100644 --- a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/sec/AuthorizationTestIT.java +++ b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/sec/AuthorizationTestIT.java @@ -32,16 +32,11 @@ import io.swagger.v3.oas.models.parameters.RequestBody; import io.swagger.v3.oas.models.responses.ApiResponse; import io.swagger.v3.parser.OpenAPIV3Parser; -import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.TestTemplate; -import org.junit.jupiter.api.extension.ExtendWith; -import org.opendcs.odcsapi.fixtures.DatabaseContextProvider; import static io.restassured.RestAssured.given; import static org.junit.jupiter.api.Assertions.assertAll; -@Tag("integration") -@ExtendWith(DatabaseContextProvider.class) final class AuthorizationTestIT { diff --git a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/sec/basicauth/FormAuthIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/sec/basicauth/FormAuthIT.java index 1a1c57ebe..ba767d46f 100644 --- a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/sec/basicauth/FormAuthIT.java +++ b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/sec/basicauth/FormAuthIT.java @@ -21,17 +21,14 @@ import io.restassured.filter.log.LogDetail; import io.restassured.filter.session.SessionFilter; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.TestTemplate; -import org.junit.jupiter.api.extension.ExtendWith; -import org.opendcs.odcsapi.fixtures.DatabaseContextProvider; +import org.opendcs.fixtures.annotations.EnableIfTsDb; import static io.restassured.RestAssured.given; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.is; -@Tag("integration-opentsdb-only") -@ExtendWith(DatabaseContextProvider.class) +@EnableIfTsDb({"OpenDCS-Postgres"}) final class FormAuthIT { diff --git a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/sec/openid/OpenIdAuthIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/sec/openid/OpenIdAuthIT.java index dc16a5741..5fcade0f9 100644 --- a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/sec/openid/OpenIdAuthIT.java +++ b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/sec/openid/OpenIdAuthIT.java @@ -40,10 +40,7 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.TestTemplate; -import org.junit.jupiter.api.extension.ExtendWith; -import org.opendcs.odcsapi.fixtures.DatabaseContextProvider; import org.opendcs.odcsapi.hydrojson.DbInterface; import static io.restassured.RestAssured.given; @@ -52,8 +49,6 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -@ExtendWith(DatabaseContextProvider.class) -@Tag("integration") @Disabled final class OpenIdAuthIT { From 05ef5c6764410bc2d3103635c28fb353a9387e90 Mon Sep 17 00:00:00 2001 From: Mike Neilson Date: Sat, 6 Dec 2025 07:27:19 -0800 Subject: [PATCH 3/5] Alter build tasks to match main code. Remove not needed setup logic. --- .github/workflows/build.yml | 4 +-- integrationtesting/rest-api/build.gradle | 3 +- .../odcsapi/fixtures/TomcatServer.java | 28 ++----------------- .../fixtures/DatabaseSetupExtension.java | 25 +---------------- .../odcsapi/sec/AuthorizationTestIT.java | 3 ++ .../odcsapi/sec/basicauth/FormAuthIT.java | 3 ++ 6 files changed, 13 insertions(+), 53 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c90bc79a0..c0b76f2de 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -42,10 +42,10 @@ jobs: run: ./gradlew build - name: Integration Tests CWMS if: always() - run: ./gradlew integrationTestCWMS --stacktrace --info + run: ./gradlew :testing:rest-api:testCWMSOracle --stacktrace --info - name: Integration Tests OpenTSDB if: always() - run: ./gradlew integrationTestOpenTSDB --stacktrace --info + run: ./gradlew :testing:rest-api:testOpenDCSPostgres --stacktrace --info - name: Upload WAR files uses: actions/upload-artifact@v5.0.0 with: diff --git a/integrationtesting/rest-api/build.gradle b/integrationtesting/rest-api/build.gradle index 1f59ec2ce..76b0d7e59 100644 --- a/integrationtesting/rest-api/build.gradle +++ b/integrationtesting/rest-api/build.gradle @@ -174,7 +174,8 @@ def commonJacocoExcludes = [ "**/pkg_resources/**" ] -def testEngines = (project.findProperty("opendcs.test.engine")?: "OpenDCS-Postgres,OpenDCS-Oracle,CWMS-Oracle").split(",") +// do need to add OpenDCS-Oracle support eventually. +def testEngines = (project.findProperty("opendcs.test.engine")?: "OpenDCS-Postgres,CWMS-Oracle").split(",") testEngines.each { engine -> diff --git a/integrationtesting/rest-api/src/main/java/org/opendcs/odcsapi/fixtures/TomcatServer.java b/integrationtesting/rest-api/src/main/java/org/opendcs/odcsapi/fixtures/TomcatServer.java index e733a50b0..f5349624d 100644 --- a/integrationtesting/rest-api/src/main/java/org/opendcs/odcsapi/fixtures/TomcatServer.java +++ b/integrationtesting/rest-api/src/main/java/org/opendcs/odcsapi/fixtures/TomcatServer.java @@ -223,11 +223,10 @@ private static ConfigurationProvider getProvider(DbType dbType) Iterator configs = loader.iterator(); ConfigurationProvider configProvider = null; - System.out.println("DbType " + dbType.name()); + log.info("DbType {}", dbType.name()); while(configs.hasNext()) { ConfigurationProvider configProviderTmp = configs.next(); - System.out.println("Current provider: " + configProviderTmp.getImplementation()); if(configProviderTmp.getImplementation().equals(dbType.getProvider())) { configProvider = configProviderTmp; @@ -292,30 +291,7 @@ private static void startDbContainer(Configuration config, DbType dbType) throws private static void setupClientUser(DbType dbType) { - if(CwmsOracleConfiguration.NAME.equals(dbType.getProvider())) - { - // I have no idea why this is suddenly required but it was also affecting operations in - // runtime test environments where the required entries weren't present. - String userPermissions = "begin execute immediate 'grant web_user to ' || ?; end;"; - String userPermissions2 = "begin cwms_sec.ADD_USER_TO_GROUP(?, 'CWMS PD Users', 'HQ'); end;"; - try(Connection connection = DriverManager.getConnection(System.getProperty(DB_URL), "CWMS_20", - System.getProperty(DB_PASSWORD))) - { - try(PreparedStatement stmt1 = connection.prepareStatement(userPermissions); - PreparedStatement stmt2 = connection.prepareStatement(userPermissions2)) - { - String username = System.getProperty(DB_USERNAME); - stmt1.setString(1, username); - stmt1.executeQuery(); - stmt2.setString(1, username); - stmt2.executeQuery(); - } - } - catch(SQLException ex) - { - log.atDebug().setCause(ex).log("Error setting up web user"); - } - } + // logic will get moved to baseline configuration after merge } public Manager getTestSessionManager() diff --git a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/fixtures/DatabaseSetupExtension.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/fixtures/DatabaseSetupExtension.java index b63c3fc01..7ef677945 100644 --- a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/fixtures/DatabaseSetupExtension.java +++ b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/fixtures/DatabaseSetupExtension.java @@ -135,29 +135,6 @@ private static void healthCheck() throws InterruptedException private void setupClientUser() { - if(dbType == DbType.CWMS_ORACLE) - { - String userPermissions = "begin execute immediate 'grant web_user to " + System.getProperty("DB_USERNAME") + "'; end;"; - String dbOffice = System.getProperty("DB_OFFICE"); - String setWebUserPermissions = """ - begin - cwms_sec.add_user_to_group(?, 'CWMS User Admins',?) ; - commit; - end;"""; - try(Connection connection = DriverManager.getConnection(System.getProperty("DB_URL"), "CWMS_20", - System.getProperty("DB_PASSWORD")); - PreparedStatement stmt1 = connection.prepareStatement(userPermissions); - PreparedStatement stmt2 = connection.prepareStatement(setWebUserPermissions)) - { - stmt1.executeQuery(); - stmt2.setString(1, System.getProperty("DB_USERNAME")); - stmt2.setString(2, dbOffice); - stmt2.executeQuery(); - } - catch(SQLException ex) - { - throw new RuntimeException(ex); - } - } + // logic will get moved to baseline Configuration when merged. } } \ No newline at end of file diff --git a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/sec/AuthorizationTestIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/sec/AuthorizationTestIT.java index 8bd750905..592c4e274 100644 --- a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/sec/AuthorizationTestIT.java +++ b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/sec/AuthorizationTestIT.java @@ -33,10 +33,13 @@ import io.swagger.v3.oas.models.responses.ApiResponse; import io.swagger.v3.parser.OpenAPIV3Parser; import org.junit.jupiter.api.TestTemplate; +import org.junit.jupiter.api.extension.ExtendWith; +import org.opendcs.odcsapi.fixtures.DatabaseContextProvider; import static io.restassured.RestAssured.given; import static org.junit.jupiter.api.Assertions.assertAll; +@ExtendWith(DatabaseContextProvider.class) final class AuthorizationTestIT { diff --git a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/sec/basicauth/FormAuthIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/sec/basicauth/FormAuthIT.java index ba767d46f..41a362c25 100644 --- a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/sec/basicauth/FormAuthIT.java +++ b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/sec/basicauth/FormAuthIT.java @@ -22,13 +22,16 @@ import io.restassured.filter.session.SessionFilter; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.TestTemplate; +import org.junit.jupiter.api.extension.ExtendWith; import org.opendcs.fixtures.annotations.EnableIfTsDb; +import org.opendcs.odcsapi.fixtures.DatabaseContextProvider; import static io.restassured.RestAssured.given; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.is; @EnableIfTsDb({"OpenDCS-Postgres"}) +@ExtendWith(DatabaseContextProvider.class) final class FormAuthIT { From dd7c6eeb904123b68c0347d7c8c34493b577e7a6 Mon Sep 17 00:00:00 2001 From: Mike Neilson Date: Sat, 6 Dec 2025 07:30:18 -0800 Subject: [PATCH 4/5] Correct owasp workflow for new locations. --- .github/workflows/owasp_zap.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/owasp_zap.yml b/.github/workflows/owasp_zap.yml index e00c13a64..f53b7c39c 100644 --- a/.github/workflows/owasp_zap.yml +++ b/.github/workflows/owasp_zap.yml @@ -25,17 +25,17 @@ jobs: key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }} restore-keys: ${{ runner.os }}-gradle - name: Run OWASP Zap - run: ./gradlew :opendcs-integration-test:owaspZap --stacktrace + run: ./gradlew :testing:rest-api:owaspZap --stacktrace - name: Upload Full HTML Report uses: actions/upload-artifact@v5.0.0 with: name: zap_report.html - path: opendcs-integration-test/build/test-results/owasp_zap/zap_report.html + path: integrationtesting/rest-api/build/test-results/owasp_zap/zap_report.html retention-days: 1 if-no-files-found: error - name: Trim Summary Report run: | - sudo sed '/## Alert Detail/Q' opendcs-integration-test/build/test-results/owasp_zap/zap_report.md > ./zap_report_summary.md + sudo sed '/## Alert Detail/Q' integrationtesting/rest-api/build/test-results/owasp_zap/zap_report.md > ./zap_report_summary.md - name: Generate GitHub Job Summary uses: x-color/github-actions-job-summary@v0.1.1 with: From a638454ea59c941939ebd2ff6c9aa77a4cb8cc8b Mon Sep 17 00:00:00 2001 From: Mike Neilson Date: Wed, 10 Dec 2025 23:41:28 +0000 Subject: [PATCH 5/5] Cleanup after merging main. --- integrationtesting/rest-api/build.gradle | 3 + .../odcsapi/fixtures/TomcatServer.java | 25 +++- .../fixtures/DatabaseSetupExtension.java | 25 +++- .../odcsapi/gui/login/LoginPageTest.java | 0 .../res/it/OrganizationResourcesIT.java | 9 +- .../odcsapi/sec/AuthorizationCheck.java | 67 --------- .../odcsapi/sec/basicauth/BasicAuthCheck.java | 84 ----------- .../odcsapi/sec/openid/OidcAuthCheck.java | 130 ------------------ 8 files changed, 54 insertions(+), 289 deletions(-) rename {opendcs-integration-test => integrationtesting/rest-api}/src/test/java/org/opendcs/odcsapi/gui/login/LoginPageTest.java (100%) delete mode 100644 java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/AuthorizationCheck.java delete mode 100644 java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/basicauth/BasicAuthCheck.java delete mode 100644 java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/openid/OidcAuthCheck.java diff --git a/integrationtesting/rest-api/build.gradle b/integrationtesting/rest-api/build.gradle index 76b0d7e59..1a4e707b6 100644 --- a/integrationtesting/rest-api/build.gradle +++ b/integrationtesting/rest-api/build.gradle @@ -212,6 +212,9 @@ testEngines.each { engine -> def guiWar = project(':opendcs-web-ui').tasks.named('war').get().archiveFile.get().asFile.getAbsolutePath() jvmArgs += "-Dopendcs.restapi.warfile=${restWar}" jvmArgs += "-Dopendcs.gui.warfile=${guiWar}" + // not needed for the Postgres setup but it doesn't get in the way and we need to make some tweaks to the fixture + // that we can't make in this PR. + jvmArgs += "-Dtestcontainer.cwms.bypass.cwms.pass=dcs_user" def odcsInstallDir = downloadAndUnzipInstaller.outputs.files.singleFile systemProperties.put("DCSTOOL_HOME", odcsInstallDir) systemProperties.put("DCSTOOL_USERDIR", "build/resources/test/tomcat/conf") diff --git a/integrationtesting/rest-api/src/main/java/org/opendcs/odcsapi/fixtures/TomcatServer.java b/integrationtesting/rest-api/src/main/java/org/opendcs/odcsapi/fixtures/TomcatServer.java index f5349624d..9ea313a64 100644 --- a/integrationtesting/rest-api/src/main/java/org/opendcs/odcsapi/fixtures/TomcatServer.java +++ b/integrationtesting/rest-api/src/main/java/org/opendcs/odcsapi/fixtures/TomcatServer.java @@ -291,7 +291,30 @@ private static void startDbContainer(Configuration config, DbType dbType) throws private static void setupClientUser(DbType dbType) { - // logic will get moved to baseline configuration after merge + if(CwmsOracleConfiguration.NAME.equals(dbType.getProvider())) + { + // I have no idea why this is suddenly required but it was also affecting operations in + // runtime test environments where the required entries weren't present. + String userPermissions = "begin execute immediate 'grant web_user to ' || ?; end;"; + String userPermissions2 = "begin cwms_sec.ADD_USER_TO_GROUP(?, 'CWMS PD Users', 'HQ'); end;"; + try(Connection connection = DriverManager.getConnection(System.getProperty(DB_URL), "CWMS_20", + System.getProperty(DB_PASSWORD))) + { + try(PreparedStatement stmt1 = connection.prepareStatement(userPermissions); + PreparedStatement stmt2 = connection.prepareStatement(userPermissions2)) + { + String username = System.getProperty(DB_USERNAME); + stmt1.setString(1, username); + stmt1.executeQuery(); + stmt2.setString(1, username); + stmt2.executeQuery(); + } + } + catch(SQLException ex) + { + log.atDebug().setCause(ex).log("Error setting up web user"); + } + } } public Manager getTestSessionManager() diff --git a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/fixtures/DatabaseSetupExtension.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/fixtures/DatabaseSetupExtension.java index 7ef677945..b63c3fc01 100644 --- a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/fixtures/DatabaseSetupExtension.java +++ b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/fixtures/DatabaseSetupExtension.java @@ -135,6 +135,29 @@ private static void healthCheck() throws InterruptedException private void setupClientUser() { - // logic will get moved to baseline Configuration when merged. + if(dbType == DbType.CWMS_ORACLE) + { + String userPermissions = "begin execute immediate 'grant web_user to " + System.getProperty("DB_USERNAME") + "'; end;"; + String dbOffice = System.getProperty("DB_OFFICE"); + String setWebUserPermissions = """ + begin + cwms_sec.add_user_to_group(?, 'CWMS User Admins',?) ; + commit; + end;"""; + try(Connection connection = DriverManager.getConnection(System.getProperty("DB_URL"), "CWMS_20", + System.getProperty("DB_PASSWORD")); + PreparedStatement stmt1 = connection.prepareStatement(userPermissions); + PreparedStatement stmt2 = connection.prepareStatement(setWebUserPermissions)) + { + stmt1.executeQuery(); + stmt2.setString(1, System.getProperty("DB_USERNAME")); + stmt2.setString(2, dbOffice); + stmt2.executeQuery(); + } + catch(SQLException ex) + { + throw new RuntimeException(ex); + } + } } } \ No newline at end of file diff --git a/opendcs-integration-test/src/test/java/org/opendcs/odcsapi/gui/login/LoginPageTest.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/gui/login/LoginPageTest.java similarity index 100% rename from opendcs-integration-test/src/test/java/org/opendcs/odcsapi/gui/login/LoginPageTest.java rename to integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/gui/login/LoginPageTest.java diff --git a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/OrganizationResourcesIT.java b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/OrganizationResourcesIT.java index 8a0e50ee6..64bb9edac 100644 --- a/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/OrganizationResourcesIT.java +++ b/integrationtesting/rest-api/src/test/java/org/opendcs/odcsapi/res/it/OrganizationResourcesIT.java @@ -19,22 +19,19 @@ import io.restassured.filter.log.LogDetail; import jakarta.servlet.http.HttpServletResponse; import jakarta.ws.rs.core.MediaType; -import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.TestTemplate; -import org.junit.jupiter.api.extension.ExtendWith; -import org.opendcs.odcsapi.fixtures.DatabaseContextProvider; +import org.opendcs.fixtures.annotations.EnableIfTsDb; import static io.restassured.RestAssured.given; import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.Matchers.is; -@Tag("integration-cwms-only") -@ExtendWith(DatabaseContextProvider.class) +@EnableIfTsDb({"CWMS-Oracle"}) final class OrganizationResourcesIT extends BaseIT { @TestTemplate - void getAlgorithmRefs() + void getOrganizations() { given() .log().ifValidationFails(LogDetail.ALL, true) diff --git a/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/AuthorizationCheck.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/AuthorizationCheck.java deleted file mode 100644 index b8de3a96e..000000000 --- a/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/AuthorizationCheck.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright 2025 OpenDCS Consortium and its Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License") - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.opendcs.odcsapi.sec; - -import jakarta.servlet.ServletContext; -import jakarta.servlet.http.HttpServletRequest; -import javax.sql.DataSource; -import jakarta.ws.rs.container.ContainerRequestContext; -import jakarta.ws.rs.core.SecurityContext; - -import decodes.cwms.CwmsTimeSeriesDb; -import decodes.tsdb.TimeSeriesDb; -import opendcs.opentsdb.OpenTsdb; -import org.opendcs.database.api.OpenDcsDatabase; -import org.opendcs.odcsapi.dao.ApiAuthorizationDAI; -import org.opendcs.odcsapi.dao.OpenDcsDatabaseFactory; -import org.opendcs.odcsapi.sec.basicauth.OpenTsdbAuthorizationDAO; -import org.opendcs.odcsapi.sec.cwms.CwmsAuthorizationDAO; - -import static org.opendcs.odcsapi.res.DataSourceContextCreator.DATA_SOURCE_ATTRIBUTE_KEY; - -public abstract class AuthorizationCheck -{ - - /** - * Authorizes the current session returning the SecurityContext that will check user roles. - * - * @param requestContext context for the current session. - * @param httpServletRequest context for the current request. - */ - public abstract SecurityContext authorize(ContainerRequestContext requestContext, - HttpServletRequest httpServletRequest, ServletContext servletContext); - - public abstract boolean supports(String type, ContainerRequestContext requestContext, ServletContext servletContext); - - - protected final ApiAuthorizationDAI getAuthDao(ServletContext servletContext) - { - DataSource dataSource = (DataSource) servletContext.getAttribute(DATA_SOURCE_ATTRIBUTE_KEY); - OpenDcsDatabase db = OpenDcsDatabaseFactory.createDb(dataSource); - TimeSeriesDb timeSeriesDb = db.getLegacyDatabase(TimeSeriesDb.class) - .orElseThrow(() -> new UnsupportedOperationException("Endpoint is unsupported by the OpenDCS REST API.")); - //Need to figure out a better way to extend the toolkit API to be able to add dao's within the REST API - if(timeSeriesDb instanceof CwmsTimeSeriesDb) - { - return new CwmsAuthorizationDAO(timeSeriesDb); - } - else if(timeSeriesDb instanceof OpenTsdb) - { - return new OpenTsdbAuthorizationDAO(timeSeriesDb); - } - throw new UnsupportedOperationException("Endpoint is unsupported by the OpenDCS REST API."); - } -} diff --git a/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/basicauth/BasicAuthCheck.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/basicauth/BasicAuthCheck.java deleted file mode 100644 index 8167a5a4d..000000000 --- a/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/basicauth/BasicAuthCheck.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright 2025 OpenDCS Consortium and its Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License") - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.opendcs.odcsapi.sec.basicauth; - -import java.util.Set; -import jakarta.servlet.ServletContext; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpSession; -import javax.sql.DataSource; -import jakarta.ws.rs.NotAuthorizedException; -import jakarta.ws.rs.container.ContainerRequestContext; -import jakarta.ws.rs.core.SecurityContext; - -import com.google.auto.service.AutoService; -import decodes.tsdb.TimeSeriesDb; -import org.opendcs.database.api.OpenDcsDatabase; -import org.opendcs.odcsapi.dao.ApiAuthorizationDAI; -import org.opendcs.odcsapi.dao.OpenDcsDatabaseFactory; -import org.opendcs.odcsapi.sec.AuthorizationCheck; -import org.opendcs.odcsapi.sec.OpenDcsApiRoles; -import org.opendcs.odcsapi.sec.OpenDcsPrincipal; -import org.opendcs.odcsapi.sec.OpenDcsSecurityContext; - -import static org.opendcs.odcsapi.res.DataSourceContextCreator.DATA_SOURCE_ATTRIBUTE_KEY; - -@AutoService(AuthorizationCheck.class) -public final class BasicAuthCheck extends AuthorizationCheck -{ - - @Override - public OpenDcsSecurityContext authorize(ContainerRequestContext requestContext, HttpServletRequest httpServletRequest, ServletContext servletContext) - { - HttpSession session = httpServletRequest.getSession(false); - if(session == null) - { - throw new NotAuthorizedException("User has not yet established a session."); - } - Object attribute = session.getAttribute(OpenDcsPrincipal.USER_PRINCIPAL_SESSION_ATTRIBUTE); - if(!(attribute instanceof OpenDcsPrincipal)) - { - throw new NotAuthorizedException("User has not established an authenticated session."); - } - String username = ((OpenDcsPrincipal) attribute).getName(); - Set roles = getUserRoles(username, servletContext); - OpenDcsPrincipal principal = new OpenDcsPrincipal(username, roles); - return new OpenDcsSecurityContext(principal, - httpServletRequest.isSecure(), SecurityContext.BASIC_AUTH); - } - - @Override - public boolean supports(String type, ContainerRequestContext ignored, ServletContext servletContext) - { - DataSource dataSource = (DataSource) servletContext.getAttribute(DATA_SOURCE_ATTRIBUTE_KEY); - OpenDcsDatabase db = OpenDcsDatabaseFactory.createDb(dataSource); - TimeSeriesDb timeSeriesDb = db.getLegacyDatabase(TimeSeriesDb.class) - .orElseThrow(() -> new UnsupportedOperationException("Endpoint is unsupported by the OpenDCS REST API.")); - return "basic".equals(type) && timeSeriesDb.isOpenTSDB(); - } - - private Set getUserRoles(String username, ServletContext servletContext) - { - try(ApiAuthorizationDAI dao = getAuthDao(servletContext)) - { - return dao.getRoles(username); - } - catch(Exception ex) - { - throw new IllegalStateException("Unable to query the database for user authorization", ex); - } - } -} diff --git a/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/openid/OidcAuthCheck.java b/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/openid/OidcAuthCheck.java deleted file mode 100644 index b02a504d3..000000000 --- a/java/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/openid/OidcAuthCheck.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright 2025 OpenDCS Consortium and its Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License") - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.opendcs.odcsapi.sec.openid; - -import java.net.MalformedURLException; -import java.net.URL; -import java.text.ParseException; -import java.util.Set; -import jakarta.servlet.ServletContext; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.ws.rs.NotAuthorizedException; -import jakarta.ws.rs.ServerErrorException; -import jakarta.ws.rs.container.ContainerRequestContext; -import jakarta.ws.rs.core.Response; - -import com.google.auto.service.AutoService; -import com.nimbusds.jose.JOSEException; -import com.nimbusds.jose.jwk.source.JWKSource; -import com.nimbusds.jose.jwk.source.JWKSourceBuilder; -import com.nimbusds.jose.proc.BadJOSEException; -import com.nimbusds.jose.proc.SecurityContext; -import com.nimbusds.jwt.JWTClaimsSet; -import org.opendcs.odcsapi.dao.ApiAuthorizationDAI; -import org.opendcs.odcsapi.hydrojson.DbInterface; -import org.opendcs.odcsapi.sec.AuthorizationCheck; -import org.opendcs.odcsapi.sec.OpenDcsApiRoles; -import org.opendcs.odcsapi.sec.OpenDcsPrincipal; -import org.opendcs.odcsapi.sec.OpenDcsSecurityContext; -import org.slf4j.Logger; -import org.opendcs.utils.logging.OpenDcsLoggerFactory; - -@AutoService(AuthorizationCheck.class) -public final class OidcAuthCheck extends AuthorizationCheck -{ - - private static final Logger log = OpenDcsLoggerFactory.getLogger(); - static final String AUTHORIZATION_HEADER = "Authorization"; - static final String BEARER_PREFIX = "Bearer "; - private final JWKSource keySource; - - public OidcAuthCheck() - { - this.keySource = setupJwkSource(); - } - - //Used by unit tests - OidcAuthCheck(JWKSource keySource) - { - this.keySource = keySource; - } - - private static JWKSource setupJwkSource() - { - JWKSource keySource = null; - String property = "opendcs.rest.api.authorization.jwt.jwkset.url"; - try - { - String jwkSetUrl = DbInterface.decodesProperties.getProperty(property); - if(jwkSetUrl == null) - { - log.warn("Property: {} not set. OpenID Authorization is disabled.", property); - } - else - { - keySource = JWKSourceBuilder - .create(new URL(jwkSetUrl)) - .retrying(true) - .build(); - } - } - catch(MalformedURLException ex) - { - log.atWarn().setCause(ex).log("Property: {} is invalid. OpenID Authorization is disabled.", property); - } - return keySource; - } - - @Override - public OpenDcsSecurityContext authorize(ContainerRequestContext requestContext, HttpServletRequest httpServletRequest, ServletContext servletContext) - { - String authorizationHeader = requestContext.getHeaderString(AUTHORIZATION_HEADER); - try - { - String token = authorizationHeader.substring(BEARER_PREFIX.length()); - JWTClaimsSet claimsSet = JwtVerifier.getInstance().getClaimsSet(keySource, token); - String username = claimsSet.getStringClaim("preferred_username"); - OpenDcsPrincipal principal = createPrincipalFromSubject(username, servletContext); - return new OpenDcsSecurityContext(principal, httpServletRequest.isSecure(), BEARER_PREFIX); - } - catch(ParseException | JOSEException | BadJOSEException ex) - { - log.atWarn().setCause(ex).log("Token processing error."); - throw new NotAuthorizedException("Invalid JWT."); - } - } - - private OpenDcsPrincipal createPrincipalFromSubject(String subject, ServletContext servletContext) - { - try(ApiAuthorizationDAI authorizationDao = getAuthDao(servletContext)) - { - Set roles = authorizationDao.getRoles(subject); - return new OpenDcsPrincipal(subject, roles); - } - catch(Exception ex) - { - throw new ServerErrorException("Error accessing database to determine user roles", - Response.Status.INTERNAL_SERVER_ERROR, ex); - } - } - - @Override - public boolean supports(String type, ContainerRequestContext requestContext, ServletContext ignored) - { - String authorizationHeader = requestContext.getHeaderString(AUTHORIZATION_HEADER); - return keySource != null && "openid".equals(type) && authorizationHeader != null && authorizationHeader.startsWith(BEARER_PREFIX); - } -}