├── .gitattributes ├── .gitignore ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE.txt ├── README.md ├── Samples ├── CSharpExamples │ ├── CSharpExamples.sln │ └── ImportObservationFile │ │ ├── ImportObsDemo.cs │ │ ├── ImportObservationFile.csproj │ │ ├── Program.cs │ │ └── ServiceModel │ │ └── ImportStatus.cs ├── DotNetSdk │ ├── DotNetSdkExamples.sln │ ├── LabFileImporter │ │ ├── App.config │ │ ├── Context.cs │ │ ├── CsvWriter.cs │ │ ├── DualLogger.cs │ │ ├── ExeHelper.cs │ │ ├── ExpectedException.cs │ │ ├── FileUploader.cs │ │ ├── FodyWeavers.xml │ │ ├── FodyWeavers.xsd │ │ ├── ImportClient.cs │ │ ├── ImportResultResponse.cs │ │ ├── ImportStatus.cs │ │ ├── Importer.cs │ │ ├── LabFileImporter.csproj │ │ ├── LabFileLoader.cs │ │ ├── MainForm.Designer.cs │ │ ├── MainForm.cs │ │ ├── MainForm.resx │ │ ├── ObservationV2.cs │ │ ├── Option.cs │ │ ├── Program.cs │ │ ├── Properties │ │ │ ├── AssemblyInfo.cs │ │ │ ├── Resources.Designer.cs │ │ │ └── Resources.resx │ │ ├── Readme.md │ │ ├── Samples.ico │ │ ├── Screenshot.png │ │ ├── log4net.config │ │ └── packages.config │ ├── NWFWMD-LabFileImporter │ │ ├── App.config │ │ ├── Context.cs │ │ ├── CsvWriter.cs │ │ ├── DualLogger.cs │ │ ├── ExeHelper.cs │ │ ├── ExpectedException.cs │ │ ├── FileUploader.cs │ │ ├── FodyWeavers.xml │ │ ├── FodyWeavers.xsd │ │ ├── ImportClient.cs │ │ ├── ImportResultResponse.cs │ │ ├── ImportStatus.cs │ │ ├── Importer.cs │ │ ├── LabFileLoader.cs │ │ ├── MainForm.Designer.cs │ │ ├── MainForm.cs │ │ ├── MainForm.resx │ │ ├── NWFWMD-LabFileImporter.csproj │ │ ├── ObservationV2.cs │ │ ├── Option.cs │ │ ├── Program.cs │ │ ├── Properties │ │ │ ├── AssemblyInfo.cs │ │ │ ├── Resources.Designer.cs │ │ │ └── Resources.resx │ │ ├── Readme.md │ │ ├── Samples.ico │ │ ├── Screenshot.png │ │ ├── log4net.config │ │ └── packages.config │ ├── ObservationReportExporter │ │ ├── App.config │ │ ├── Context.cs │ │ ├── ExeHelper.cs │ │ ├── ExpectedException.cs │ │ ├── Exporter.cs │ │ ├── ExtraApis │ │ │ ├── Samples │ │ │ │ └── GetExchangeConfigurations.cs │ │ │ └── TimeSeries │ │ │ │ ├── DeleteAttachmentById.cs │ │ │ │ └── HackTags.cs │ │ ├── FilenameGenerator.cs │ │ ├── FodyWeavers.xml │ │ ├── FodyWeavers.xsd │ │ ├── ObservationReportExporter.csproj │ │ ├── Option.cs │ │ ├── Program.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ ├── Readme.md │ │ ├── SingleInstanceGuard.cs │ │ ├── log4net.config │ │ └── packages.config │ ├── ObservationValidator │ │ ├── App.config │ │ ├── ComparisonSymbol.cs │ │ ├── Context.cs │ │ ├── DoubleHelper.cs │ │ ├── FilePathHelper.cs │ │ ├── LastRunTimeKeeper.cs │ │ ├── ObservationValidator.csproj │ │ ├── Program.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ ├── README.md │ │ ├── Rule.cs │ │ ├── RuleReader.cs │ │ ├── ValidationResult.cs │ │ ├── ValidationRules.txt │ │ ├── Validator.cs │ │ └── packages.config │ ├── SamplesObservationExporter │ │ ├── App.config │ │ ├── Context.cs │ │ ├── ExeHelper.cs │ │ ├── ExpectedException.cs │ │ ├── Exporter.cs │ │ ├── FodyWeavers.xml │ │ ├── FodyWeavers.xsd │ │ ├── Option.cs │ │ ├── Program.cs │ │ ├── ProgressBarReporter.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ ├── Readme.md │ │ ├── Samples.ico │ │ ├── SamplesObservationExporter.csproj │ │ ├── log4net.config │ │ └── packages.config │ ├── SamplesPlannedSpecimenInstantiator │ │ ├── App.config │ │ ├── Config.cs │ │ ├── CursorWait.cs │ │ ├── ExeHelper.cs │ │ ├── FodyWeavers.xml │ │ ├── MainForm.Designer.cs │ │ ├── MainForm.cs │ │ ├── MainForm.resx │ │ ├── PrivateApis │ │ │ ├── GetUserTokens.cs │ │ │ └── PostSpecimensFromPlannedActivity.cs │ │ ├── Program.cs │ │ ├── Properties │ │ │ ├── AssemblyInfo.cs │ │ │ ├── Resources.Designer.cs │ │ │ ├── Resources.resx │ │ │ ├── Settings.Designer.cs │ │ │ └── Settings.settings │ │ ├── Readme.md │ │ ├── Samples.ico │ │ ├── SamplesPlannedSpecimenInstantiator.csproj │ │ ├── Screenshot.png │ │ ├── log4net.config │ │ └── packages.config │ └── SondeFileImporter │ │ ├── App.config │ │ ├── Config.ini │ │ ├── Config │ │ ├── ConfigException.cs │ │ ├── ConfigLoader.cs │ │ ├── ConfigNames.cs │ │ └── Context.cs │ │ ├── ExampleDataFiles │ │ ├── Sonde file example.Converted.csv │ │ └── Sonde file example.csv │ │ ├── FileManagement │ │ ├── FileHelper.cs │ │ ├── FileInfoSet.cs │ │ └── SondeFileManager.cs │ │ ├── Importer │ │ └── Importer.cs │ │ ├── Program.cs │ │ ├── Properties │ │ └── AssemblyInfo.cs │ │ ├── Readme.md │ │ ├── ServiceClient │ │ ├── ImportClient.cs │ │ ├── ImportResult.cs │ │ ├── ImportResultResponse.cs │ │ └── ImportStatus.cs │ │ ├── SondeFileImporter.csproj │ │ ├── Transform │ │ ├── ColumnConstants.cs │ │ ├── DataTableExtensions.cs │ │ ├── SamplesFileTemplate.csv │ │ └── SondeFileConverter.cs │ │ └── packages.config ├── Java │ └── API Examples │ │ ├── Readme.md │ │ ├── pom.xml │ │ └── src │ │ └── main │ │ └── java │ │ └── ai │ │ └── aqsamples │ │ └── apiexamples │ │ ├── AqSamplesClient.java │ │ ├── ObservedPropertyExample.java │ │ └── dtos │ │ ├── ObservedProperty.java │ │ └── UnitGroup.java └── R │ ├── Readme.md │ └── samples_client.R ├── TimeSeries ├── PublicApis │ ├── FieldDataPlugins │ │ └── Readme.md │ ├── Python │ │ ├── ApprovalReport │ │ │ ├── Readme.md │ │ │ ├── approval_report.py │ │ │ └── timeseries_client.py │ │ ├── Readme.md │ │ ├── WindRose │ │ │ ├── AQTS-WindRose.py │ │ │ ├── Readme.md │ │ │ └── timeseries_client.py │ │ ├── images │ │ │ └── WindRose.png │ │ ├── setup.py │ │ └── timeseries_client.py │ ├── R │ │ ├── .gitignore │ │ ├── ExtremeValueAnalysis │ │ │ ├── Readme.md │ │ │ ├── app.R │ │ │ └── timeseries_client.R │ │ ├── FloodFrequencyAnalysis │ │ │ ├── AQTS-FFA-curves.R │ │ │ ├── Readme.md │ │ │ └── timeseries_client.R │ │ ├── FlowDurationCurve │ │ │ ├── AQTS-FDC.r │ │ │ ├── Readme.md │ │ │ └── timeseries_client.R │ │ ├── IntensityDurationFrequency │ │ │ ├── AQTS-IDF-curves.R │ │ │ ├── Gumplot-idf.R │ │ │ ├── Readme.md │ │ │ ├── idf-analysis.R │ │ │ └── timeseries_client.R │ │ ├── Readme.md │ │ ├── ShinyCorrelator │ │ │ ├── Readme.md │ │ │ ├── app.R │ │ │ └── timeseries_client.R │ │ ├── ShinyFlowDurationCurve │ │ │ ├── Readme.md │ │ │ ├── app.R │ │ │ └── timeseries_client.R │ │ ├── WDTF │ │ │ ├── Readme.md │ │ │ ├── config_file.json │ │ │ ├── data_frame_mapping.json │ │ │ ├── timeseries_client.R │ │ │ └── wdtfExport_v4.R │ │ ├── WindRose │ │ │ ├── AQTS-WindRose.R │ │ │ ├── Readme.md │ │ │ ├── timeseries_client.R │ │ │ └── wind_rose_ggplot.R │ │ ├── images │ │ │ ├── ExtremeValueAnalysis.png │ │ │ ├── FD-Curve.png │ │ │ ├── FD-Hydrograph.png │ │ │ ├── FFA-Curve.png │ │ │ ├── IDF-Distributions.png │ │ │ ├── IDF-Plot.png │ │ │ ├── ShinyCorrelator.png │ │ │ ├── ShinyFlowDuration.png │ │ │ ├── StageVsDischarge.png │ │ │ └── WindRose.png │ │ └── timeseries_client.R │ ├── SdkExamples │ │ ├── AppendPoints │ │ │ ├── App.config │ │ │ ├── AppendPoints.csproj │ │ │ ├── Program.cs │ │ │ ├── Properties │ │ │ │ └── AssemblyInfo.cs │ │ │ └── packages.config │ │ ├── ChangeVisitApprovals │ │ │ ├── App.config │ │ │ ├── ApprovalChanger.cs │ │ │ ├── ChangeVisitApprovals.csproj │ │ │ ├── Context.cs │ │ │ ├── ExpectedException.cs │ │ │ ├── FodyWeavers.xml │ │ │ ├── Option.cs │ │ │ ├── PrivateApis.cs │ │ │ ├── Program.cs │ │ │ ├── Properties │ │ │ │ └── AssemblyInfo.cs │ │ │ ├── Readme.md │ │ │ ├── log4net.config │ │ │ └── packages.config │ │ ├── ExcelCsvExtractor │ │ │ ├── App.config │ │ │ ├── Context.cs │ │ │ ├── ExcelCsvExtractor.csproj │ │ │ ├── ExpectedException.cs │ │ │ ├── FodyWeavers.xml │ │ │ ├── FodyWeavers.xsd │ │ │ ├── Option.cs │ │ │ ├── Program.cs │ │ │ ├── Properties │ │ │ │ └── AssemblyInfo.cs │ │ │ ├── Readme.md │ │ │ ├── Splitter.cs │ │ │ ├── log4net.config │ │ │ └── packages.config │ │ ├── ExternalProcessor │ │ │ ├── App.config │ │ │ ├── ExternalProcessor.csproj │ │ │ ├── Program.cs │ │ │ ├── Properties │ │ │ │ └── AssemblyInfo.cs │ │ │ └── packages.config │ │ ├── LocationDeleter │ │ │ ├── App.config │ │ │ ├── Context.cs │ │ │ ├── Deleter.cs │ │ │ ├── ExpectedException.cs │ │ │ ├── FodyWeavers.xml │ │ │ ├── InternalLibraries │ │ │ │ ├── AQService.Common.dll │ │ │ │ ├── AQSystemMLib.dll │ │ │ │ ├── CommunicationShared.dll │ │ │ │ ├── Newtonsoft.Json.dll │ │ │ │ └── Notes.txt │ │ │ ├── LegacyServiceClient.cs │ │ │ ├── LocationDeleter.csproj │ │ │ ├── Option.cs │ │ │ ├── PrivateApis.cs │ │ │ ├── Program.cs │ │ │ ├── Properties │ │ │ │ └── AssemblyInfo.cs │ │ │ ├── RatingModelIdentifier.cs │ │ │ ├── RatingModelIdentifierParser.cs │ │ │ ├── Readme.md │ │ │ ├── TimeSeriesIdentifier.cs │ │ │ ├── TimeSeriesIdentifierParser.cs │ │ │ ├── VisitIdentifier.cs │ │ │ ├── VisitIdentifierParser.cs │ │ │ ├── delete-all-the-things.jpg │ │ │ ├── log4net.config │ │ │ └── packages.config │ │ ├── NEM12PreProcessor │ │ │ ├── App.config │ │ │ ├── Context.cs │ │ │ ├── EmbeddedResource.cs │ │ │ ├── ExpectedException.cs │ │ │ ├── FodyWeavers.xml │ │ │ ├── FodyWeavers.xsd │ │ │ ├── NEM12PreProcessor.csproj │ │ │ ├── Option.cs │ │ │ ├── Parser.cs │ │ │ ├── Program.cs │ │ │ ├── Properties │ │ │ │ └── AssemblyInfo.cs │ │ │ ├── Readme.md │ │ │ ├── log4net.config │ │ │ └── packages.config │ │ ├── PointZilla │ │ │ ├── App.config │ │ │ ├── AquariusClientExtensions.cs │ │ │ ├── CommandType.cs │ │ │ ├── Context.cs │ │ │ ├── CreateMode.cs │ │ │ ├── CsvWriter.cs │ │ │ ├── DbClient │ │ │ │ ├── DbClientBase.cs │ │ │ │ ├── DbClientFactory.cs │ │ │ │ ├── DbType.cs │ │ │ │ ├── IDbClient.cs │ │ │ │ ├── MySqlClient.cs │ │ │ │ ├── OdbcClient.cs │ │ │ │ ├── PostgresDbClient.cs │ │ │ │ └── SqlServerClient.cs │ │ │ ├── DoubleHelper.cs │ │ │ ├── ExpectedException.cs │ │ │ ├── Field.cs │ │ │ ├── FodyWeavers.xml │ │ │ ├── Formats.cs │ │ │ ├── IntervalExtensions.cs │ │ │ ├── Option.cs │ │ │ ├── PointReaders │ │ │ │ ├── CsvNotesReader.cs │ │ │ │ ├── CsvReader.cs │ │ │ │ ├── CsvReaderBase.cs │ │ │ │ ├── DbPointsReader.cs │ │ │ │ ├── ExternalPointsReader.cs │ │ │ │ ├── IPointReader.cs │ │ │ │ ├── MetadataLookup.cs │ │ │ │ ├── PointReaderBase.cs │ │ │ │ └── PointSummarizer.cs │ │ │ ├── PointZilla.csproj │ │ │ ├── PointZilla.png │ │ │ ├── PointsAppender.cs │ │ │ ├── Program.cs │ │ │ ├── Properties │ │ │ │ └── AssemblyInfo.cs │ │ │ ├── QualifiersParser.cs │ │ │ ├── Readme.md │ │ │ ├── SaveNotesMode.cs │ │ │ ├── TextGenerator.cs │ │ │ ├── TimeSeriesCreator.cs │ │ │ ├── TimeSeriesIdentifier.cs │ │ │ ├── TimeSeriesIdentifierParser.cs │ │ │ ├── TimezoneHelper.cs │ │ │ ├── VectorFont.cs │ │ │ ├── WaveformGenerator.cs │ │ │ ├── WaveformType.cs │ │ │ ├── log4net.config │ │ │ └── packages.config │ │ ├── Readme.md │ │ ├── SdkExamples.sln │ │ ├── SharpShooterReportsRunner │ │ │ ├── App.config │ │ │ ├── AquariusChart.cs │ │ │ ├── Context.cs │ │ │ ├── DataSetBase.cs │ │ │ ├── DateTimeParser.cs │ │ │ ├── ExpectedException.cs │ │ │ ├── ExternalDataSet.cs │ │ │ ├── ExternalLibraries │ │ │ │ ├── Dundas │ │ │ │ │ └── DundasWinChart.dll │ │ │ │ └── Perpetuum │ │ │ │ │ ├── ComponentFactory.Krypton.Docking.dll │ │ │ │ │ ├── ComponentFactory.Krypton.Navigator.dll │ │ │ │ │ ├── ComponentFactory.Krypton.Ribbon.dll │ │ │ │ │ ├── ComponentFactory.Krypton.Toolkit.dll │ │ │ │ │ ├── ComponentFactory.Krypton.Workspace.dll │ │ │ │ │ ├── PerpetuumSoft.Charts.dll │ │ │ │ │ ├── PerpetuumSoft.Framework.Export.dll │ │ │ │ │ ├── PerpetuumSoft.Framework.Model.dll │ │ │ │ │ ├── PerpetuumSoft.Framework.dll │ │ │ │ │ ├── PerpetuumSoft.Instrumentation.dll │ │ │ │ │ ├── PerpetuumSoft.Reporting.Export.Csv.dll │ │ │ │ │ ├── PerpetuumSoft.Reporting.Export.Excel.dll │ │ │ │ │ ├── PerpetuumSoft.Reporting.Export.ExcelXml.dll │ │ │ │ │ ├── PerpetuumSoft.Reporting.Export.Html.dll │ │ │ │ │ ├── PerpetuumSoft.Reporting.Export.OpenXML.dll │ │ │ │ │ ├── PerpetuumSoft.Reporting.Export.Pdf.dll │ │ │ │ │ ├── PerpetuumSoft.Reporting.Export.Rtf.dll │ │ │ │ │ ├── PerpetuumSoft.Reporting.MSChart.dll │ │ │ │ │ ├── PerpetuumSoft.Reporting.dll │ │ │ │ │ ├── PerpetuumSoft.Writers.Excel.dll │ │ │ │ │ ├── PerpetuumSoft.Writers.Flash.dll │ │ │ │ │ ├── PerpetuumSoft.Writers.Pdf.dll │ │ │ │ │ ├── PerpetuumSoft.Writers.Svg.dll │ │ │ │ │ └── itextsharp.dll │ │ │ ├── GroupBy.cs │ │ │ ├── Option.cs │ │ │ ├── PrivateApis.cs │ │ │ ├── Program.cs │ │ │ ├── Properties │ │ │ │ └── AssemblyInfo.cs │ │ │ ├── RatingModel.cs │ │ │ ├── RatingModelLoader.cs │ │ │ ├── Readme.md │ │ │ ├── ReportRunner.cs │ │ │ ├── SharpShooterReportsRunner.csproj │ │ │ ├── TimeSeries.cs │ │ │ └── packages.config │ │ ├── SosExporter │ │ │ ├── App.config │ │ │ ├── Program.cs │ │ │ ├── Properties │ │ │ │ └── AssemblyInfo.cs │ │ │ ├── Readme.md │ │ │ ├── SosExporter.csproj │ │ │ ├── docker-proxy │ │ │ │ ├── Readme.md │ │ │ │ ├── docker-compose │ │ │ │ │ ├── docker-compose.yml │ │ │ │ │ └── nginx-proxy.conf │ │ │ │ └── images │ │ │ │ │ ├── ActivateHydrologyProfile.png │ │ │ │ │ ├── AddTheAdminCredentials.png │ │ │ │ │ ├── AdditionalQualifiers.png │ │ │ │ │ ├── AdminLoginScreen.png │ │ │ │ │ ├── AdminProfilesSubMenu.png │ │ │ │ │ ├── AdvanceToFinalSetupWizardScreen.png │ │ │ │ │ ├── AqtsQualifierExample.png │ │ │ │ │ ├── ClickHereToBeginSetup.png │ │ │ │ │ ├── ClickStartInLowerRightCorner.png │ │ │ │ │ ├── CompleteButNotComplete.png │ │ │ │ │ ├── ConfigureCorrectedOrRawPoints.png │ │ │ │ │ ├── ConfigureExtendedAttributeFilters.png │ │ │ │ │ ├── ConfigureLimitQualifiers.png │ │ │ │ │ ├── ConfigureProxyPollingIntervals.png │ │ │ │ │ ├── EnterAqtsUrlAndCredentials.png │ │ │ │ │ ├── FilterByPublishFlag.png │ │ │ │ │ ├── OldSosExporterExtendedAttributeSetup.png │ │ │ │ │ └── SelectProxyInMemory.png │ │ │ └── docker │ │ │ │ ├── AdminProfilesMenu.png │ │ │ │ ├── ClickHereToStartInstallation.png │ │ │ │ ├── ConfirmDataSourceStep.png │ │ │ │ ├── DisableTransactionalCheckbox.png │ │ │ │ ├── DockerSetup.md │ │ │ │ ├── FinishInstall.png │ │ │ │ ├── HydrologyProfileEnabled.png │ │ │ │ ├── InstallStartPage.png │ │ │ │ ├── ProfileConfigurationList.png │ │ │ │ ├── SelectDataSource.png │ │ │ │ ├── SelectTransactionalSecurityTab.png │ │ │ │ ├── SetupCompleted.png │ │ │ │ ├── StartButton.png │ │ │ │ └── docker-compose │ │ │ │ ├── .gitignore │ │ │ │ ├── docker-compose.yml │ │ │ │ └── nginx-proxy.conf │ │ ├── TimeSeriesChangeMonitor │ │ │ ├── App.config │ │ │ ├── ChangeEventType.cs │ │ │ ├── Context.cs │ │ │ ├── ExpectedException.cs │ │ │ ├── FodyWeavers.xml │ │ │ ├── Monitor.cs │ │ │ ├── Option.cs │ │ │ ├── Program.cs │ │ │ ├── Properties │ │ │ │ └── AssemblyInfo.cs │ │ │ ├── Readme.md │ │ │ ├── TimeSeriesChangeMonitor.csproj │ │ │ ├── TimeSeriesIdentifier.cs │ │ │ ├── TimeSeriesIdentifierParser.cs │ │ │ ├── log4net.config │ │ │ └── packages.config │ │ ├── TotalDischargeExternalProcessor │ │ │ ├── App.config │ │ │ ├── Config.cs │ │ │ ├── Config.json │ │ │ ├── ConfigLoader.cs │ │ │ ├── Context.cs │ │ │ ├── EventIntervalDetector.cs │ │ │ ├── ExeHelper.cs │ │ │ ├── ExpectedException.cs │ │ │ ├── ExternalProcessor.cs │ │ │ ├── FodyWeavers.xml │ │ │ ├── Option.cs │ │ │ ├── Point.cs │ │ │ ├── Processor.cs │ │ │ ├── Program.cs │ │ │ ├── Properties │ │ │ │ └── AssemblyInfo.cs │ │ │ ├── Readme.md │ │ │ ├── TimeSeriesIdentifier.cs │ │ │ ├── TimeSeriesIdentifierParser.cs │ │ │ ├── TotalDischargeExternalProcessor.csproj │ │ │ ├── log4net.config │ │ │ └── packages.config │ │ ├── UserImporter │ │ │ ├── App.config │ │ │ ├── ExeHelper.cs │ │ │ ├── ExpectedException.cs │ │ │ ├── FodyWeavers.xml │ │ │ ├── Helpers │ │ │ │ ├── CsvAuthenticationTypeConverter.cs │ │ │ │ ├── CsvBoolConverter.cs │ │ │ │ └── CsvFileReaderWriter.cs │ │ │ ├── Program.cs │ │ │ ├── Properties │ │ │ │ └── AssemblyInfo.cs │ │ │ ├── Readme.md │ │ │ ├── Records │ │ │ │ ├── AuthenticationType.cs │ │ │ │ └── UserRecord.cs │ │ │ ├── UserImporter.cs │ │ │ ├── UserImporter.csproj │ │ │ ├── UserImporterContext.cs │ │ │ ├── UserMapper.cs │ │ │ ├── UserRecordValidator.cs │ │ │ ├── log4net.config │ │ │ └── packages.config │ │ └── WaterWatchPreProcessor │ │ │ ├── App.config │ │ │ ├── Context.cs │ │ │ ├── Dtos │ │ │ ├── SavedState.cs │ │ │ └── WaterWatch │ │ │ │ ├── Alarm.cs │ │ │ │ ├── Config.cs │ │ │ │ ├── DisplayInfo.cs │ │ │ │ ├── GetMeasurementsRequest.cs │ │ │ │ ├── GetMeasurementsResponse.cs │ │ │ │ ├── GetSensorsRequest.cs │ │ │ │ ├── LatestData.cs │ │ │ │ ├── Measurement.cs │ │ │ │ ├── ReferenceLine.cs │ │ │ │ └── Sensor.cs │ │ │ ├── EmbeddedResource.cs │ │ │ ├── ExpectedException.cs │ │ │ ├── Exporter.cs │ │ │ ├── Filters │ │ │ ├── Filter.cs │ │ │ ├── IFilter.cs │ │ │ └── RegexFilter.cs │ │ │ ├── FodyWeavers.xml │ │ │ ├── Option.cs │ │ │ ├── OutputMode.cs │ │ │ ├── Program.cs │ │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ │ ├── Readme.md │ │ │ ├── WaterWatchPreProcessor.csproj │ │ │ ├── images │ │ │ ├── ConnectConnector.png │ │ │ ├── ConnectDataSetRule.png │ │ │ ├── ConnectExportRuleProfile.png │ │ │ ├── ConnectInboundConnectionProcessing.png │ │ │ ├── ConnectInboundConnectionRule.png │ │ │ ├── ConnectLocation.png │ │ │ ├── ConnectSchedule.png │ │ │ ├── ConnectTextFileExtractionRule.png │ │ │ ├── ScadaDataloggerConfig.png │ │ │ ├── ScadaObjectTree.png │ │ │ ├── ScadaSensorConfig.png │ │ │ ├── ScadaSensorExport.png │ │ │ └── ScadaSensorHistoric.png │ │ │ ├── log4net.config │ │ │ └── packages.config │ └── TableauConnector │ │ ├── AQDC_DataPhase2.js │ │ ├── AQDC_InteractivePhase2.js │ │ ├── AQDC_Stylesheet.css │ │ ├── AQUARIUSConnector2.html │ │ ├── Logo_Time-Series-Tag.jpg │ │ ├── Readme.html │ │ ├── Readme.md │ │ └── web.config └── SampleFiles │ └── FieldData │ ├── Plugin │ ├── CrossSectionSurvey │ │ ├── CrossSectionSample.csv │ │ ├── CrossSectionSampleWithPointOrder.csv │ │ └── Readme.md │ ├── PocketGauger │ │ ├── PGData.zip │ │ └── Readme.md │ └── StageDischarge │ │ ├── Readme.md │ │ └── StageDischargeSample.csv │ ├── Readme.md │ └── Stock │ ├── AquaCalc │ ├── AquaCalcSample.csv │ └── Readme.md │ ├── FlowTracker │ ├── FlowTrackerSample.dis │ └── Readme.md │ ├── HFC │ ├── HfcSample.MQ1 │ └── Readme.md │ ├── RiverSurveyor │ ├── Readme.md │ └── RiverSurveyorSample.dis │ ├── Scottech │ ├── Readme.md │ └── ScottechSample.glr │ ├── USGS │ ├── Readme.md │ └── UsgsHydroMLSample.xml │ └── WinRiver │ ├── Readme.md │ └── WinRiverSample.xml ├── WebPortal └── Python │ └── DownloadCsv │ ├── Readme.md │ └── download_csv.py ├── appveyor.yml └── images ├── AQTSTableauConnector.png └── aquatic-informatics.svg /.gitignore: -------------------------------------------------------------------------------- 1 | #Ignore thumbnails created by windows 2 | Thumbs.db 3 | #Ignore generated Python code 4 | *.pyc 5 | venv/ 6 | #Ignore merge conflict files 7 | *.orig 8 | #Ignore some common Java cruft 9 | .idea 10 | *.iml 11 | target 12 | #Ignore some MyGet cruft 13 | [Bb]uild/ 14 | msbuild.log 15 | #Ignore build output and Visual Studio temp file 16 | *.obj 17 | *.exe 18 | *.dll 19 | *.pdb 20 | *.user 21 | *.aps 22 | *.pch 23 | *.vspscc 24 | *_i.c 25 | *_p.c 26 | *_h.h 27 | *_i.h 28 | *.ncb 29 | *.suo 30 | *.tlb 31 | *.tlh 32 | *.bak 33 | *.cache 34 | *.ilk 35 | *.log 36 | *.log.* 37 | *.lib 38 | *.sbr 39 | [Bb]in/ 40 | [Oo]bj/ 41 | [Dd]ebug*/ 42 | [Rr]elease*/ 43 | _[Rr]eSharper*/ 44 | [Tt]est[Rr]esult*/ 45 | # MIDL generated file 46 | dlldata.c 47 | # Build log files 48 | *_Release_Log.txt 49 | *_Debug_Log.txt 50 | # intended to globally catch Visual Studio intellisense files. SQL Server files are overridden by .gitignore files in their own directory 51 | *.sdf 52 | *.opensdf 53 | ipch/ 54 | [Dd]eploy/ 55 | # Ignore NuGet Packages 56 | *.nupkg 57 | # Ignore the packages folder 58 | **/packages/* 59 | # except build/, which is used as an MSBuild target. 60 | !**/packages/build/ 61 | # Uncomment if necessary however generally it will be regenerated when needed 62 | #!**/packages/repositories.config 63 | .vs/ 64 | TestResult.xml 65 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # CONTRIBUTING 2 | 3 | Contributions are always welcome, no matter how large or small. Before contributing, 4 | please read the [code of conduct](CODE_OF_CONDUCT.md). 5 | 6 | ## Pull Requests 7 | 8 | We actively welcome your pull requests. 9 | 10 | 1. Fork the repo and create your branch from `master`. 11 | 2. Raise a pull request 12 | 13 | ## License 14 | 15 | By contributing to the Aquarius Examples repo, you agree that your contributions will be licensed 16 | under its [Apache 2.0 license](LICENSE.txt). 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AQUARIUS Examples Repo 2 | 3 | [![Build status](https://ci.appveyor.com/api/projects/status/g3c5e2j6fmxgukxy/branch/master?svg=true)](https://ci.appveyor.com/project/SystemsAdministrator/examples/branch/master) 4 | 5 | The **AQUARIUS Examples** repository contains example projects demonstrating various integration techniques with the [AQUARIUS Platform](http://aquaticinformatics.com/products/) of environmental monitoring products. 6 | 7 | ![AQUARIUS Platform](images/aquatic-informatics.svg) 8 | 9 | * [AQUARIUS Time-Series](http://aquaticinformatics.com/products/aquarius-time-series/) 10 | * [AQUARIUS Samples](http://aquaticinformatics.com/products/aquarius-samples/) 11 | * [AQUARIUS WebPortal](http://aquaticinformatics.com/products/aquarius-webportal/) 12 | 13 | ## Repo organization 14 | 15 | This repo is not a standard software git repository, with one branch building the latest-and-greatest version of the software. 16 | 17 | Instead, this repo is organized as a series of stand-alone project folders. 18 | 19 | Each project folder includes a README file that describes how to get started using the project. 20 | 21 | ## Getting Help 22 | 23 | See the [Wiki](https://github.com/AquaticInformatics/Examples/wiki) for an outline of the example projects. 24 | 25 | ## Contributing 26 | 27 | Contributions are always welcome, no matter how large or small. Before contributing, please read the [code of conduct](CODE_OF_CONDUCT.md). 28 | 29 | See [Contributing](CONTRIBUTING.md). 30 | 31 | -------------------------------------------------------------------------------- /Samples/CSharpExamples/CSharpExamples.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 17 4 | VisualStudioVersion = 17.0.31903.59 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImportObservationFile", "ImportObservationFile\ImportObservationFile.csproj", "{155BDCCA-6CC2-4D86-8053-F333C913958F}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(SolutionProperties) = preSolution 14 | HideSolutionNode = FALSE 15 | EndGlobalSection 16 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 17 | {155BDCCA-6CC2-4D86-8053-F333C913958F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 18 | {155BDCCA-6CC2-4D86-8053-F333C913958F}.Debug|Any CPU.Build.0 = Debug|Any CPU 19 | {155BDCCA-6CC2-4D86-8053-F333C913958F}.Release|Any CPU.ActiveCfg = Release|Any CPU 20 | {155BDCCA-6CC2-4D86-8053-F333C913958F}.Release|Any CPU.Build.0 = Release|Any CPU 21 | EndGlobalSection 22 | EndGlobal 23 | -------------------------------------------------------------------------------- /Samples/CSharpExamples/ImportObservationFile/ImportObservationFile.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exe 5 | net6.0 6 | enable 7 | enable 8 | C# example to use Samples API to import observation csv files 9 | Aquatic Informatics ULC 10 | Aquatic Informatics ULC 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /Samples/CSharpExamples/ImportObservationFile/Program.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * This is a CSharp .NET 6.0 console project that shows how to call Samples API to upload csv files 3 | * to import observations. 4 | * The example code is for demo only. 5 | * The author is not responsible for any consequence of using the code. 6 | */ 7 | 8 | //Get the URL of Samples and API token: 9 | 10 | using ImportObservationFile; 11 | 12 | Console.WriteLine("Please enter your Samples URL (example: https://myorg.aqsamples.ca/):"); 13 | var url = Console.ReadLine(); 14 | ArgumentNullException.ThrowIfNull(url,nameof(url)); 15 | 16 | Console.WriteLine("Please enter the auth token. You can get one from https://[your_aqsamples_url/api/:"); 17 | var token = Console.ReadLine(); 18 | ArgumentNullException.ThrowIfNull(token, nameof(token)); 19 | 20 | Console.WriteLine("Please enter the full path of a valid observation csv file. Refer to the help manual to create one:"); 21 | var csvFileFullPath = Console.ReadLine(); 22 | ArgumentNullException.ThrowIfNull(csvFileFullPath, nameof(csvFileFullPath)); 23 | if (!File.Exists(csvFileFullPath)) throw new ArgumentException($"File not found: {csvFileFullPath}"); 24 | 25 | try 26 | { 27 | ImportObsDemo.Run(url, token, csvFileFullPath); 28 | } 29 | catch (Exception e) 30 | { 31 | Console.WriteLine(e); 32 | } 33 | 34 | Console.WriteLine("Demo finished."); 35 | -------------------------------------------------------------------------------- /Samples/CSharpExamples/ImportObservationFile/ServiceModel/ImportStatus.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace ImportObservationFile.ServiceModel 3 | { 4 | /// 5 | ///ImportProcessorTransactionStatus will have these values: 6 | /// PENDING, 7 | /// IN_PROGRESS, 8 | /// COMPLETED, 9 | /// COMPLETED_WITH_ERRORS, 10 | /// BAD_REQUEST, 11 | /// SYSTEM_ERROR 12 | /// 13 | /// 14 | /// 15 | public record ImportStatus(string Id, string ImportProcessorTransactionStatus); 16 | } 17 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/LabFileImporter/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/LabFileImporter/ExeHelper.cs: -------------------------------------------------------------------------------- 1 | using System.Diagnostics; 2 | using System.IO; 3 | using System.Reflection; 4 | 5 | namespace LabFileImporter 6 | { 7 | public class ExeHelper 8 | { 9 | // ReSharper disable once PossibleNullReferenceException 10 | public static string ExeFullPath => Path.GetFullPath(Assembly.GetEntryAssembly().Location); 11 | public static string ExeDirectory => Path.GetDirectoryName(ExeFullPath); 12 | public static string ExeVersion => FileVersionInfo.GetVersionInfo(ExeFullPath).FileVersion; 13 | public static string ExeName => Path.GetFileNameWithoutExtension(ExeFullPath); 14 | public static string ExeNameAndVersion => $"{ExeName} (v{ExeVersion})"; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/LabFileImporter/ExpectedException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace LabFileImporter 4 | { 5 | public class ExpectedException : Exception 6 | { 7 | public ExpectedException(string message) 8 | : base(message) 9 | { 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/LabFileImporter/FodyWeavers.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/LabFileImporter/ImportResultResponse.cs: -------------------------------------------------------------------------------- 1 |  2 | 3 | // ReSharper disable InconsistentNaming 4 | 5 | using System.Collections.Generic; 6 | using Aquarius.Samples.Client.ServiceModel; 7 | 8 | namespace LabFileImporter 9 | { 10 | public class ImportResultResponse 11 | { 12 | public int SuccessCount { get; set; } 13 | public int SkippedCount { get; set; } 14 | public int ErrorCount { get; set; } 15 | public int NewCount { get; set; } 16 | public int UpdateCount { get; set; } 17 | public int ExpectedCount { get; set; } 18 | public string InvalidRowsCsvUrl { get; set; } 19 | public string SummaryReportText { get; set; } 20 | public List ImportJobErrors { get; set; } 21 | public List ErrorImportItems { get; set; } 22 | } 23 | 24 | public class ImportErrorItem 25 | { 26 | public Dictionary> Errors { get; set; } 27 | public string RowId { get; set; } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/LabFileImporter/ImportStatus.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Net; 3 | 4 | namespace LabFileImporter 5 | { 6 | public class ImportStatus 7 | { 8 | public HttpStatusCode HttpStatusCode { get; set; } 9 | public Uri ResultUri { get; set; } 10 | 11 | //If API is changed to not return redirect, we are still OK if result Uri is returned: 12 | public bool IsImportFinished => HttpStatusCode == HttpStatusCode.Redirect || ResultUri != null; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/LabFileImporter/Option.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace LabFileImporter 4 | { 5 | public class Option 6 | { 7 | public string Key { get; set; } 8 | public string Description { get; set; } 9 | public Action Setter { get; set; } 10 | public Func Getter { get; set; } 11 | 12 | public string UsageText() 13 | { 14 | if (string.IsNullOrEmpty(Key) && string.IsNullOrEmpty(Description)) 15 | return string.Empty; // Omits a blank line 16 | 17 | var key = string.IsNullOrEmpty(Key) ? SeparatorLine : "-" + Key.PadRight(KeyWidth); 18 | 19 | var defaultValue = Getter != null ? Getter() : string.Empty; 20 | 21 | if (!string.IsNullOrEmpty(defaultValue)) 22 | defaultValue = $" [default: {defaultValue}]"; 23 | 24 | return $"{key} {Description}{defaultValue}"; 25 | } 26 | 27 | private const int KeyWidth = 24; 28 | private static readonly string SeparatorLine = string.Empty.PadRight(KeyWidth + 1, '='); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/LabFileImporter/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("LabFileImporter")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("LabFileImporter")] 13 | [assembly: AssemblyCopyright("Copyright © 2020")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("d061d5a5-bb33-4689-8f86-b5a8d06ca879")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/LabFileImporter/Samples.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AquaticInformatics/examples/fa417675042ea1f1d08358f2c42244e7c4baac23/Samples/DotNetSdk/LabFileImporter/Samples.ico -------------------------------------------------------------------------------- /Samples/DotNetSdk/LabFileImporter/Screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AquaticInformatics/examples/fa417675042ea1f1d08358f2c42244e7c4baac23/Samples/DotNetSdk/LabFileImporter/Screenshot.png -------------------------------------------------------------------------------- /Samples/DotNetSdk/LabFileImporter/log4net.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/NWFWMD-LabFileImporter/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/NWFWMD-LabFileImporter/ExeHelper.cs: -------------------------------------------------------------------------------- 1 | using System.Diagnostics; 2 | using System.IO; 3 | using System.Reflection; 4 | 5 | namespace NWFWMDLabFileImporter 6 | { 7 | public class ExeHelper 8 | { 9 | // ReSharper disable once PossibleNullReferenceException 10 | public static string ExeFullPath => Path.GetFullPath(Assembly.GetEntryAssembly().Location); 11 | public static string ExeDirectory => Path.GetDirectoryName(ExeFullPath); 12 | public static string ExeVersion => FileVersionInfo.GetVersionInfo(ExeFullPath).FileVersion; 13 | public static string ExeName => Path.GetFileNameWithoutExtension(ExeFullPath); 14 | public static string ExeNameAndVersion => $"{ExeName} (v{ExeVersion})"; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/NWFWMD-LabFileImporter/ExpectedException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace NWFWMDLabFileImporter 4 | { 5 | public class ExpectedException : Exception 6 | { 7 | public ExpectedException(string message) 8 | : base(message) 9 | { 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/NWFWMD-LabFileImporter/FodyWeavers.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/NWFWMD-LabFileImporter/ImportResultResponse.cs: -------------------------------------------------------------------------------- 1 |  2 | 3 | // ReSharper disable InconsistentNaming 4 | 5 | using System.Collections.Generic; 6 | using Aquarius.Samples.Client.ServiceModel; 7 | 8 | namespace NWFWMDLabFileImporter 9 | { 10 | public class ImportResultResponse 11 | { 12 | public int SuccessCount { get; set; } 13 | public int SkippedCount { get; set; } 14 | public int ErrorCount { get; set; } 15 | public int NewCount { get; set; } 16 | public int UpdateCount { get; set; } 17 | public int ExpectedCount { get; set; } 18 | public string InvalidRowsCsvUrl { get; set; } 19 | public string SummaryReportText { get; set; } 20 | public List ImportJobErrors { get; set; } 21 | public List ErrorImportItems { get; set; } 22 | } 23 | 24 | public class ImportErrorItem 25 | { 26 | public Dictionary> Errors { get; set; } 27 | public string RowId { get; set; } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/NWFWMD-LabFileImporter/ImportStatus.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Net; 3 | 4 | namespace NWFWMDLabFileImporter 5 | { 6 | public class ImportStatus 7 | { 8 | public HttpStatusCode HttpStatusCode { get; set; } 9 | public Uri ResultUri { get; set; } 10 | 11 | //If API is changed to not return redirect, we are still OK if result Uri is returned: 12 | public bool IsImportFinished => HttpStatusCode == HttpStatusCode.Redirect || ResultUri != null; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/NWFWMD-LabFileImporter/Option.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace NWFWMDLabFileImporter 4 | { 5 | public class Option 6 | { 7 | public string Key { get; set; } 8 | public string Description { get; set; } 9 | public Action Setter { get; set; } 10 | public Func Getter { get; set; } 11 | 12 | public string UsageText() 13 | { 14 | if (string.IsNullOrEmpty(Key) && string.IsNullOrEmpty(Description)) 15 | return string.Empty; // Omits a blank line 16 | 17 | var key = string.IsNullOrEmpty(Key) ? SeparatorLine : "-" + Key.PadRight(KeyWidth); 18 | 19 | var defaultValue = Getter != null ? Getter() : string.Empty; 20 | 21 | if (!string.IsNullOrEmpty(defaultValue)) 22 | defaultValue = $" [default: {defaultValue}]"; 23 | 24 | return $"{key} {Description}{defaultValue}"; 25 | } 26 | 27 | private const int KeyWidth = 24; 28 | private static readonly string SeparatorLine = string.Empty.PadRight(KeyWidth + 1, '='); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/NWFWMD-LabFileImporter/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("LabFileImporter")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("LabFileImporter")] 13 | [assembly: AssemblyCopyright("Copyright © 2020")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("d061d5a5-bb33-4689-8f86-b5a8d06ca879")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/NWFWMD-LabFileImporter/Samples.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AquaticInformatics/examples/fa417675042ea1f1d08358f2c42244e7c4baac23/Samples/DotNetSdk/NWFWMD-LabFileImporter/Samples.ico -------------------------------------------------------------------------------- /Samples/DotNetSdk/NWFWMD-LabFileImporter/Screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AquaticInformatics/examples/fa417675042ea1f1d08358f2c42244e7c4baac23/Samples/DotNetSdk/NWFWMD-LabFileImporter/Screenshot.png -------------------------------------------------------------------------------- /Samples/DotNetSdk/NWFWMD-LabFileImporter/log4net.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/ObservationReportExporter/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/ObservationReportExporter/Context.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace ObservationReportExporter 5 | { 6 | public class Context 7 | { 8 | public string SamplesServer { get; set; } 9 | public string SamplesApiToken { get; set; } 10 | public string TimeSeriesServer { get; set; } 11 | public string TimeSeriesUsername { get; set; } 12 | public string TimeSeriesPassword { get; set; } 13 | public string ExportTemplateName { get; set; } 14 | public string AttachmentFilename { get; set; } = FilenameGenerator.DefaultAttachmentFilename; 15 | public bool DryRun { get; set; } 16 | public bool DeleteExistingAttachments { get; set; } = true; 17 | 18 | public Dictionary AttachmentTags { get; } = 19 | new Dictionary(StringComparer.InvariantCultureIgnoreCase); 20 | public List LocationIds { get; } = new List(); 21 | public List LocationGroupIds { get; } = new List(); 22 | public List AnalyticalGroupIds { get; } = new List(); 23 | public List ObservedPropertyIds { get; } = new List(); 24 | public DateTimeOffset? ExportTime { get; set; } 25 | public DateTimeOffset? StartTime { get; set; } 26 | public DateTimeOffset? EndTime { get; set; } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/ObservationReportExporter/ExeHelper.cs: -------------------------------------------------------------------------------- 1 | using System.Diagnostics; 2 | using System.IO; 3 | using System.Reflection; 4 | 5 | namespace ObservationReportExporter 6 | { 7 | public class ExeHelper 8 | { 9 | // ReSharper disable once PossibleNullReferenceException 10 | public static string ExeFullPath => Path.GetFullPath(Assembly.GetEntryAssembly().Location); 11 | public static string ExeDirectory => Path.GetDirectoryName(ExeFullPath); 12 | public static string ExeVersion => FileVersionInfo.GetVersionInfo(ExeFullPath).FileVersion; 13 | public static string ExeName => Path.GetFileNameWithoutExtension(ExeFullPath); 14 | public static string ExeNameAndVersion => $"{ExeName} (v{ExeVersion})"; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/ObservationReportExporter/ExpectedException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace ObservationReportExporter 4 | { 5 | public class ExpectedException : Exception 6 | { 7 | public ExpectedException(string message) 8 | : base(message) 9 | { 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/ObservationReportExporter/ExtraApis/Samples/GetExchangeConfigurations.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Aquarius.Samples.Client.ServiceModel; 3 | using ServiceStack; 4 | 5 | namespace ObservationReportExporter.ExtraApis.Samples 6 | { 7 | [Route("/v1/exchangeconfigurations", HttpMethods.Get)] 8 | public class GetExchangeConfigurations : IReturn 9 | { 10 | } 11 | 12 | public class SearchResultsExchangeConfigurations 13 | { 14 | public int TotalCount { get; set; } 15 | public List DomainObjects { get; set; } = new List(); 16 | 17 | } 18 | 19 | public class ExchangeConfiguration 20 | { 21 | public string Id { get; set; } 22 | public string CustomId { get; set; } 23 | public string Type { get; set; } 24 | public string Description { get; set; } 25 | 26 | public List SamplingLocationMappings { get; set; } = new List(); 27 | } 28 | 29 | public class SamplingLocationMapping 30 | { 31 | public string Id { get; set; } 32 | public SamplingLocation SamplingLocation { get; set; } 33 | public string ExternalLocation { get; set; } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/ObservationReportExporter/ExtraApis/TimeSeries/DeleteAttachmentById.cs: -------------------------------------------------------------------------------- 1 | using ServiceStack; 2 | 3 | namespace ObservationReportExporter.ExtraApis.TimeSeries 4 | { 5 | [Route("/attachments/{Id}", HttpMethods.Delete)] 6 | public class DeleteAttachmentById : IReturnVoid 7 | { 8 | public string Id { get; set; } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/ObservationReportExporter/FodyWeavers.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/ObservationReportExporter/Option.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace ObservationReportExporter 4 | { 5 | public class Option 6 | { 7 | public string Key { get; set; } 8 | public string Description { get; set; } 9 | public Action Setter { get; set; } 10 | public Func Getter { get; set; } 11 | 12 | public string UsageText() 13 | { 14 | if (string.IsNullOrEmpty(Key) && string.IsNullOrEmpty(Description)) 15 | return string.Empty; // Omits a blank line 16 | 17 | var key = string.IsNullOrEmpty(Key) ? SeparatorLine : "-" + Key.PadRight(KeyWidth); 18 | 19 | var defaultValue = Getter != null ? Getter() : string.Empty; 20 | 21 | if (!string.IsNullOrEmpty(defaultValue)) 22 | defaultValue = $" [default: {defaultValue}]"; 23 | 24 | return $"{key} {Description}{defaultValue}"; 25 | } 26 | 27 | private const int KeyWidth = 26; 28 | private static readonly string SeparatorLine = string.Empty.PadRight(KeyWidth + 1, '='); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/ObservationReportExporter/log4net.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/ObservationValidator/ComparisonSymbol.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace ObservationValidator 4 | { 5 | public static class ComparisonSymbol 6 | { 7 | public const string GreaterThan = ">"; 8 | public const string LessThan = "<"; 9 | public const string GreaterOrEqual = ">="; 10 | public const string LessOrEqual = "<="; 11 | public const string Equal = "="; 12 | 13 | public static IReadOnlyList AllSymbols = 14 | new List 15 | { 16 | GreaterThan, 17 | LessThan, 18 | GreaterOrEqual, 19 | LessOrEqual, 20 | Equal 21 | }; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/ObservationValidator/Context.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace ObservationValidator 4 | { 5 | public class Context 6 | { 7 | public static readonly string PredefinedFlag = "InvalidValue"; 8 | public static readonly int DefaultBatchSize = 100; 9 | 10 | public Context() 11 | { 12 | Flag = PredefinedFlag; 13 | BatchSize = DefaultBatchSize; 14 | } 15 | 16 | public string SamplesAuthToken { get; set; } 17 | public string SamplesApiBaseUrl { get; set; } 18 | public string Flag { get; set; } 19 | public int BatchSize { get; set; } 20 | public DateTimeOffset LastRunStartTimeUtc { get; set; } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/ObservationValidator/FilePathHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Reflection; 4 | 5 | namespace ObservationValidator 6 | { 7 | public static class FilePathHelper 8 | { 9 | public static string GetFullPathOfFileInExecutableFolder(string fileName) 10 | { 11 | var exeDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 12 | if (string.IsNullOrWhiteSpace(exeDirectory)) 13 | { 14 | throw new ArgumentException("Failed to get the directory of the executable."); 15 | } 16 | 17 | return Path.Combine(exeDirectory, fileName); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/ObservationValidator/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | 3 | [assembly: AssemblyTitle("Samples Observation Validator")] 4 | [assembly: AssemblyDescription("Validates results of observations and set quality flags.")] 5 | [assembly: AssemblyCompany("Aquatic Informatics Inc.")] 6 | [assembly: AssemblyProduct("AQUARIUS")] 7 | [assembly: AssemblyCopyright("Copyright © 2018")] 8 | 9 | [assembly: AssemblyVersion("1.0.0.0")] 10 | [assembly: AssemblyFileVersion("1.0.0.0")] 11 | 12 | [assembly: log4net.Config.XmlConfigurator(Watch = true)] 13 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/ObservationValidator/Rule.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Linq; 3 | 4 | namespace ObservationValidator 5 | { 6 | public class Rule 7 | { 8 | public string LeftParam { get; } 9 | public string ComparisonSymbol { get; } 10 | public string RightParam { get; } 11 | 12 | public Rule(string left, string comparisonSymbol, string right) 13 | { 14 | if (string.IsNullOrWhiteSpace(left)) 15 | { 16 | throw new ArgumentNullException(nameof(left), 17 | "Parameter name on the left side of a rule cannot be empty."); 18 | } 19 | 20 | if (string.IsNullOrWhiteSpace(right)) 21 | { 22 | throw new ArgumentNullException(nameof(left), 23 | "Parameter name on the right side of a rule cannot be empty."); 24 | } 25 | 26 | ValidateComparisonSymbolOrThrow(comparisonSymbol); 27 | 28 | LeftParam = left; 29 | RightParam = right; 30 | ComparisonSymbol = comparisonSymbol; 31 | } 32 | 33 | private void ValidateComparisonSymbolOrThrow(string symbol) 34 | { 35 | if (string.IsNullOrWhiteSpace(symbol) || 36 | !ObservationValidator.ComparisonSymbol.AllSymbols.Contains(symbol)) 37 | { 38 | throw new ArgumentException($"Invalid comparison symbol: {symbol}."); 39 | } 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/ObservationValidator/ValidationResult.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace ObservationValidator 5 | { 6 | public class ValidationResult 7 | { 8 | public HashSet ProcessedSpecimenNames => new HashSet(); 9 | public int ProcessedSpecimenCount { get; set; } 10 | public int ExaminedObservationsCount { get; set; } 11 | public int InvalidObservationsTotal { get; set; } 12 | public Exception FatalException { get; set; } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/ObservationValidator/ValidationRules.txt: -------------------------------------------------------------------------------- 1 | # Observations that match the following rules are determined as valid. 2 | # The format of the rule: ParamNameLeft ComparisonSymbol ParamNameRight 3 | # - ParamName is case sensitive. Cannot be null or empty string. Should not contain comparison symbols. 4 | # - 5 Supported comparison symbols: >, <, >=, <=, = 5 | # - One rule per line. 6 | # - Example: Ammonium Nitrogen < Total Nitrogen 7 | # Use # at the line start to indicate a comment line. 8 | # Empty lines are ignored. 9 | # More examples: 10 | # Nitrate < Total N 11 | # 4-4'-DDT < 4-4'-DDD 12 | # Nitrate 1 >= Total N 1 13 | # Nitrate 2<= Total N2 14 | # Nitrate 3 = Total N3 15 | 16 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/ObservationValidator/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/SamplesObservationExporter/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/SamplesObservationExporter/Context.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using NodaTime; 4 | 5 | namespace SamplesObservationExporter 6 | { 7 | public class Context 8 | { 9 | public string ServerUrl { get; set; } 10 | public string ApiToken { get; set; } 11 | public string CsvOutputPath { get; set; } 12 | public bool Overwrite { get; set; } 13 | public Offset UtcOffset { get; set; } = Offset.FromTicks(DateTimeOffset.Now.Offset.Ticks); 14 | public List LocationIds { get; } = new List(); 15 | public List AnalyticalGroupIds { get; } = new List(); 16 | public List ObservedPropertyIds { get; } = new List(); 17 | public List ProjectIds { get; } = new List(); 18 | public DateTimeOffset? StartTime { get; set; } 19 | public DateTimeOffset? EndTime { get; set; } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/SamplesObservationExporter/ExeHelper.cs: -------------------------------------------------------------------------------- 1 | using System.Diagnostics; 2 | using System.IO; 3 | using System.Reflection; 4 | 5 | namespace SamplesObservationExporter 6 | { 7 | public class ExeHelper 8 | { 9 | // ReSharper disable once PossibleNullReferenceException 10 | public static string ExeFullPath => Path.GetFullPath(Assembly.GetEntryAssembly().Location); 11 | public static string ExeDirectory => Path.GetDirectoryName(ExeFullPath); 12 | public static string ExeVersion => FileVersionInfo.GetVersionInfo(ExeFullPath).FileVersion; 13 | public static string ExeName => Path.GetFileNameWithoutExtension(ExeFullPath); 14 | public static string ExeNameAndVersion => $"{ExeName} (v{ExeVersion})"; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/SamplesObservationExporter/ExpectedException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace SamplesObservationExporter 4 | { 5 | public class ExpectedException : Exception 6 | { 7 | public ExpectedException(string message) 8 | : base(message) 9 | { 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/SamplesObservationExporter/FodyWeavers.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/SamplesObservationExporter/Option.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace SamplesObservationExporter 4 | { 5 | public class Option 6 | { 7 | public string Key { get; set; } 8 | public string Description { get; set; } 9 | public Action Setter { get; set; } 10 | public Func Getter { get; set; } 11 | 12 | public string UsageText() 13 | { 14 | if (string.IsNullOrEmpty(Key) && string.IsNullOrEmpty(Description)) 15 | return string.Empty; // Omits a blank line 16 | 17 | var key = string.IsNullOrEmpty(Key) ? SeparatorLine : "-" + Key.PadRight(KeyWidth); 18 | 19 | var defaultValue = Getter != null ? Getter() : string.Empty; 20 | 21 | if (!string.IsNullOrEmpty(defaultValue)) 22 | defaultValue = $" [default: {defaultValue}]"; 23 | 24 | return $"{key} {Description}{defaultValue}"; 25 | } 26 | 27 | private const int KeyWidth = 24; 28 | private static readonly string SeparatorLine = string.Empty.PadRight(KeyWidth + 1, '='); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/SamplesObservationExporter/Samples.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AquaticInformatics/examples/fa417675042ea1f1d08358f2c42244e7c4baac23/Samples/DotNetSdk/SamplesObservationExporter/Samples.ico -------------------------------------------------------------------------------- /Samples/DotNetSdk/SamplesObservationExporter/log4net.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/SamplesPlannedSpecimenInstantiator/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/SamplesPlannedSpecimenInstantiator/Config.cs: -------------------------------------------------------------------------------- 1 | namespace SamplesPlannedSpecimenInstantiator 2 | { 3 | public class Config 4 | { 5 | public string Server { get; set; } 6 | public string ApiToken { get; set; } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/SamplesPlannedSpecimenInstantiator/CursorWait.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | 4 | namespace SamplesPlannedSpecimenInstantiator 5 | { 6 | public class CursorWait : IDisposable 7 | { 8 | public CursorWait(bool appStarting = false, bool applicationCursor = false) 9 | { 10 | // Wait 11 | Cursor.Current = appStarting ? Cursors.AppStarting : Cursors.WaitCursor; 12 | if (applicationCursor) Application.UseWaitCursor = true; 13 | } 14 | 15 | public void Dispose() 16 | { 17 | // Reset 18 | Cursor.Current = Cursors.Default; 19 | Application.UseWaitCursor = false; 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/SamplesPlannedSpecimenInstantiator/ExeHelper.cs: -------------------------------------------------------------------------------- 1 | using System.Diagnostics; 2 | using System.IO; 3 | using System.Reflection; 4 | 5 | namespace SamplesPlannedSpecimenInstantiator 6 | { 7 | public class ExeHelper 8 | { 9 | // ReSharper disable once PossibleNullReferenceException 10 | public static string ExeFullPath => Path.GetFullPath(Assembly.GetEntryAssembly().Location); 11 | public static string ExeDirectory => Path.GetDirectoryName(ExeFullPath); 12 | public static string ExeVersion => FileVersionInfo.GetVersionInfo(ExeFullPath).FileVersion; 13 | public static string ExeName => Path.GetFileNameWithoutExtension(ExeFullPath); 14 | public static string ExeNameAndVersion => $"{ExeName} (v{ExeVersion})"; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/SamplesPlannedSpecimenInstantiator/FodyWeavers.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/SamplesPlannedSpecimenInstantiator/PrivateApis/GetUserTokens.cs: -------------------------------------------------------------------------------- 1 | using Aquarius.Samples.Client.ServiceModel; 2 | using ServiceStack; 3 | 4 | namespace SamplesPlannedSpecimenInstantiator.PrivateApis 5 | { 6 | [Route("/v1/usertokens")] 7 | public class GetUserTokens : IReturn 8 | { 9 | } 10 | 11 | public class UserTokensResponse 12 | { 13 | public User User { get; set; } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/SamplesPlannedSpecimenInstantiator/PrivateApis/PostSpecimensFromPlannedActivity.cs: -------------------------------------------------------------------------------- 1 | using Aquarius.Samples.Client.ServiceModel; 2 | using ServiceStack; 3 | 4 | namespace SamplesPlannedSpecimenInstantiator.PrivateApis 5 | { 6 | [Route("/v1/fieldvisits/{VisitId}/activityfromplannedactivity", "POST")] 7 | public class PostSpecimensFromPlannedActivity : IReturn 8 | { 9 | public string VisitId { get; set; } // Hack for ambiguous DTO in the Platform SDK. This separates the path parameter from the body parameter 10 | public string Id { get; set; } 11 | public ActivityTemplate ActivityTemplate { get; set; } 12 | public string Instruction { get; set; } 13 | public PlannedActivityActivityType? ActivityType { get; set; } 14 | public MediumType? Medium { get; set; } 15 | public CollectionMethod CollectionMethod { get; set; } 16 | public string HashForFieldsThatRequireUniqueness { get; set; } 17 | public AuditAttributes AuditAttributes { get; set; } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/SamplesPlannedSpecimenInstantiator/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("SamplesTripScheduler")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("SamplesTripScheduler")] 13 | [assembly: AssemblyCopyright("Copyright © 2019")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("c491945b-f4fd-4501-b8d6-b1cf671762f5")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/SamplesPlannedSpecimenInstantiator/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace SamplesPlannedSpecimenInstantiator.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.4.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/SamplesPlannedSpecimenInstantiator/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/SamplesPlannedSpecimenInstantiator/Readme.md: -------------------------------------------------------------------------------- 1 | # Samples Planned Specimen Instantiator 2 | 3 | Download the [latest SamplesPlannedSpecimenInstantiator.exe release here](../../../../../releases/latest) 4 | 5 | This Windows GUI tool will: 6 | 7 | - Retrieve all field trips with a field visit with a "Planned" status 8 | - Allow you to select multiple field visits 9 | - Change the selected field visits to "In Progress" and instantiate each specimen in the visit 10 | 11 | Once the planned specimens are instantiated, the Samples UI can be used to export and deliver a report of planned specimens to laboratories. 12 | 13 | ![Screenshot](Screenshot.png) -------------------------------------------------------------------------------- /Samples/DotNetSdk/SamplesPlannedSpecimenInstantiator/Samples.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AquaticInformatics/examples/fa417675042ea1f1d08358f2c42244e7c4baac23/Samples/DotNetSdk/SamplesPlannedSpecimenInstantiator/Samples.ico -------------------------------------------------------------------------------- /Samples/DotNetSdk/SamplesPlannedSpecimenInstantiator/Screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AquaticInformatics/examples/fa417675042ea1f1d08358f2c42244e7c4baac23/Samples/DotNetSdk/SamplesPlannedSpecimenInstantiator/Screenshot.png -------------------------------------------------------------------------------- /Samples/DotNetSdk/SamplesPlannedSpecimenInstantiator/log4net.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/SondeFileImporter/Config/ConfigException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Runtime.Serialization; 3 | 4 | namespace SondeFileImporter.Config 5 | { 6 | public class ConfigException : Exception 7 | { 8 | public ConfigException() 9 | { 10 | } 11 | 12 | public ConfigException(string message) : base(message) 13 | { 14 | } 15 | 16 | public ConfigException(string message, Exception innerException) : base(message, innerException) 17 | { 18 | } 19 | 20 | protected ConfigException(SerializationInfo info, StreamingContext context) : base(info, context) 21 | { 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/SondeFileImporter/Config/ConfigNames.cs: -------------------------------------------------------------------------------- 1 | namespace SondeFileImporter.Config 2 | { 3 | public static class ConfigNames 4 | { 5 | public const string SondeFileFolder = "SondeFileFolder"; 6 | public const string ArchiveFolder = "ArchiveFolder"; 7 | 8 | public const string SamplesApiBaseUrl = "SamplesApiBaseUrl"; 9 | public const string SamplesAuthToken = "SamplesAuthToken"; 10 | public const string DefaultUtcOffset = "DefaultUtcOffset"; 11 | public const string ArchiveWhenFileNumberIsLargerThan = "ArchiveWhenFileNumberIsLargerThan"; 12 | 13 | public const string MappingSection = "Mapping_Section"; 14 | public const string HeaderMappingSection = "[Header_" + MappingSection + "]"; 15 | public const string HeaderPropertyIdMappingSection = "[Header_PropertyId_" + MappingSection + "]"; 16 | public const string PropertyIdUnitMappingSection = "[PropertyId_Unit_" + MappingSection + "]"; 17 | 18 | public const string PlaceHolderYourAccount = "your_account"; 19 | public const string PlaceHolderYourToken = "your_samples_auth_token"; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/SondeFileImporter/ExampleDataFiles/Sonde file example.csv: -------------------------------------------------------------------------------- 1 | Date,Time,Site,Unit ID,User ID,°C,mmHg,DO %,DO mg/L,SPC-uS/cm,pH,pH mV,DEP m,Batt V,Lat,Lon,Date Time,Sample ID 2 | 5/20/2019,8:30:08,Cn,,JBG,27.57,760.4,51.6,4.07,124,7.25,-61.6,0.261,0,28.56602,-81.344,5/20/19 8:30,Cn20190520 3 | 5/20/2019,8:31:07,Cn,,JBG,27.54,760.5,50.3,3.97,124,7.03,-48.5,0.497,0,28.56604,-81.34399,5/20/19 8:31,Cn20190520 4 | 5/20/2019,8:32:02,Cn,,JBG,27.46,760.4,46.2,3.65,124,6.83,-37.2,1,0,28.56602,-81.34398,5/20/19 8:32,Cn20190520 5 | 5/20/2019,8:33:03,Cn,,JBG,25.96,760.4,4.2,0.34,122,6.52,-19,2.005,0,28.56603,-81.34398,5/20/19 8:33,Cn20190520 6 | 5/20/2019,8:33:51,Cn,,JBG,21.49,760.4,3.7,0.32,128,6.35,-9.3,3,0,28.56604,-81.344,5/20/19 8:33,Cn20190520 7 | 5/20/2019,8:34:44,Cn,,JBG,18.61,760.3,3.3,0.31,146,6.23,-2.6,4.002,0,28.56603,-81.34401,5/20/19 8:34,Cn20190520 8 | 5/20/2019,8:35:30,Cn,,JBG,17.66,760.4,3.2,0.3,151,6.19,-0.6,5.006,0,28.56603,-81.34401,5/20/19 8:35,Cn20190520 9 | 5/20/2019,8:36:44,Cn,,JBG,17.54,760.4,3,0.28,216,6.07,5.9,5.996,0,28.56603,-81.34399,5/20/19 8:36,Cn20190520 -------------------------------------------------------------------------------- /Samples/DotNetSdk/SondeFileImporter/FileManagement/FileInfoSet.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | 4 | namespace SondeFileImporter.FileManagement 5 | { 6 | public class FileInfoSet 7 | { 8 | public FileInfoSet(FileInfo originalFileInfo) 9 | { 10 | OriginalSondeFile = originalFileInfo ?? throw new ArgumentNullException(nameof(originalFileInfo)); 11 | } 12 | 13 | public FileInfo OriginalSondeFile { get; set; } 14 | public FileInfo ProcessingSondeFile { get; set; } 15 | public FileInfo ConvertedSamplesFile { get; set; } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/SondeFileImporter/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | 3 | [assembly: AssemblyTitle("Sonde File Importer")] 4 | [assembly: AssemblyDescription("Transforms sonde files to Samples observation csv file format and upload the file to Samples server.")] 5 | [assembly: AssemblyCompany("Aquatic Informatics Inc.")] 6 | [assembly: AssemblyVersion("1.0.0.0")] 7 | [assembly: AssemblyFileVersion("1.0.0.0")] 8 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/SondeFileImporter/ServiceClient/ImportResult.cs: -------------------------------------------------------------------------------- 1 | namespace SondeFileImporter.ServiceClient 2 | { 3 | public class ImportResult 4 | { 5 | public ImportResultResponse ResultResponse { get; set; } = new ImportResultResponse(); 6 | 7 | public ImportStatus ImportStatus { get; set; } = new ImportStatus(); 8 | 9 | public bool HasErrors => ResultResponse.errorCount > 0; 10 | public int SuccessCount => ResultResponse.successCount; 11 | public int UpdateCount => ResultResponse.updateCount; 12 | public int ErrorCount => ResultResponse.errorCount; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/SondeFileImporter/ServiceClient/ImportResultResponse.cs: -------------------------------------------------------------------------------- 1 |  2 | 3 | // ReSharper disable InconsistentNaming 4 | 5 | namespace SondeFileImporter.ServiceClient 6 | { 7 | public class ImportResultResponse 8 | { 9 | public int successCount { get; set; } 10 | public int skippedCount { get; set; } 11 | public int errorCount { get; set; } 12 | public int newCount { get; set; } 13 | public int updateCount { get; set; } 14 | public int expectedCount { get; set; } 15 | public string invalidRowsCsvUrl { get; set; } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/SondeFileImporter/ServiceClient/ImportStatus.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Net; 3 | 4 | namespace SondeFileImporter.ServiceClient 5 | { 6 | public class ImportStatus 7 | { 8 | public HttpStatusCode HttpStatusCode { get; set; } 9 | public Uri ResultUri { get; set; } 10 | 11 | //If API is changed to not return redirect, we are still OK if result Uri is returned: 12 | public bool IsImportFinished => HttpStatusCode == HttpStatusCode.Redirect || ResultUri != null; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/SondeFileImporter/Transform/ColumnConstants.cs: -------------------------------------------------------------------------------- 1 | namespace SondeFileImporter.Transform 2 | { 3 | public static class ColumnConstants 4 | { 5 | public const string PropertyId = "Observed Property ID"; 6 | public const string DepthUnit = "Depth Unit"; 7 | public const string ResultValue = "Result Value"; 8 | public const string ResultUnit = "Result Unit"; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Samples/DotNetSdk/SondeFileImporter/Transform/SamplesFileTemplate.csv: -------------------------------------------------------------------------------- 1 | Observation ID,Location ID,Observed Property ID,Observed DateTime,Analyzed DateTime,Depth,Depth Unit,Data Classification,Result Value,Result Unit,Result Status,Result Grade,Medium,Sample ID,Collection Method,Field: Device ID,Field: Device Type,Field: Comment,Lab: Specimen Name,Lab: Analysis Method,Lab: Detection Condition,Lab: Limit Type,Lab: MDL,Lab: MRL,Lab: Quality Flag,Lab: Received DateTime,Lab: Prepared DateTime,Lab: Sample Fraction,Lab: From Laboratory,Lab: Sample ID,Lab: Dilution Factor,Lab: Comment,QC: Type,QC: Source Sample ID 2 | -------------------------------------------------------------------------------- /Samples/Java/API Examples/Readme.md: -------------------------------------------------------------------------------- 1 | # Using the Samples API from Java 2 | 3 | [**Download** this project folder](https://minhaskamal.github.io/DownGit/#/home?url=https:%2F%2Fgithub.com%2FAquaticInformatics%2FExamples%2Ftree%2Fmaster%2FSamples%2FJava%2FAPI%20Examples) 4 | 5 | Requires: 6 | - Java 8 7 | - Maven 4 8 | -------------------------------------------------------------------------------- /Samples/Java/API Examples/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | AqSamplesApiExamples 8 | AqSamplesApiExamples 9 | 1.0-SNAPSHOT 10 | 11 | 12 | org.jboss.resteasy 13 | resteasy-client 14 | 4.6.0.Final 15 | 16 | 17 | org.jboss.resteasy 18 | resteasy-jackson-provider 19 | 3.0.19.Final 20 | 21 | 22 | 23 | 24 | 25 | org.apache.maven.plugins 26 | maven-compiler-plugin 27 | 28 | 1.8 29 | 1.8 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /Samples/Java/API Examples/src/main/java/ai/aqsamples/apiexamples/dtos/UnitGroup.java: -------------------------------------------------------------------------------- 1 | package ai.aqsamples.apiexamples.dtos; 2 | 3 | import org.codehaus.jackson.annotate.JsonIgnoreProperties; 4 | 5 | @JsonIgnoreProperties(ignoreUnknown = true) 6 | public class UnitGroup { 7 | 8 | private String id; 9 | private String customId; 10 | private boolean supportsConversion; 11 | 12 | public String getId() { 13 | return id; 14 | } 15 | 16 | public void setId(String id) { 17 | this.id = id; 18 | } 19 | 20 | public String getCustomId() { 21 | return customId; 22 | } 23 | 24 | public void setCustomId(String customId) { 25 | this.customId = customId; 26 | } 27 | 28 | public boolean isSupportsConversion() { 29 | return supportsConversion; 30 | } 31 | 32 | public void setSupportsConversion(boolean supportsConversion) { 33 | this.supportsConversion = supportsConversion; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Samples/R/Readme.md: -------------------------------------------------------------------------------- 1 | # An AQUARIUS Samples client for R 2 | 3 | ```R 4 | # Better finish writing this 5 | ``` -------------------------------------------------------------------------------- /TimeSeries/PublicApis/FieldDataPlugins/Readme.md: -------------------------------------------------------------------------------- 1 | ## Moved 2 | 3 | Check out these newer repos for field data plugin development: 4 | 5 | - https://github.com/AquaticInformatics/aquarius-field-data-framework 6 | - https://github.com/AquaticInformatics/flowtracker2-field-data-plugin 7 | - https://github.com/AquaticInformatics/stage-discharge-readings-field-data-plugin 8 | -------------------------------------------------------------------------------- /TimeSeries/PublicApis/Python/images/WindRose.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AquaticInformatics/examples/fa417675042ea1f1d08358f2c42244e7c4baac23/TimeSeries/PublicApis/Python/images/WindRose.png -------------------------------------------------------------------------------- /TimeSeries/PublicApis/Python/setup.py: -------------------------------------------------------------------------------- 1 | from setuptools import setup 2 | 3 | setup( 4 | name="aquarius-timeseries-client", 5 | py_modules=["timeseries_client"], 6 | version="0.1", 7 | description="Python client for Aquarius TimeSeries API", 8 | long_description=open("README.md").read(), 9 | long_description_content_type="text/markdown", 10 | url="https://github.com/AquaticInformatics/Examples", 11 | install_requires=( 12 | "requests", 13 | "pyrfc3339" 14 | ) 15 | ) 16 | -------------------------------------------------------------------------------- /TimeSeries/PublicApis/R/.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore common R cruft files 2 | .RHistory 3 | rsconnect/ 4 | -------------------------------------------------------------------------------- /TimeSeries/PublicApis/R/WDTF/Readme.md: -------------------------------------------------------------------------------- 1 | WDTF Project 2 | -------------------------------------------------------------------------------- /TimeSeries/PublicApis/R/images/ExtremeValueAnalysis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AquaticInformatics/examples/fa417675042ea1f1d08358f2c42244e7c4baac23/TimeSeries/PublicApis/R/images/ExtremeValueAnalysis.png -------------------------------------------------------------------------------- /TimeSeries/PublicApis/R/images/FD-Curve.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AquaticInformatics/examples/fa417675042ea1f1d08358f2c42244e7c4baac23/TimeSeries/PublicApis/R/images/FD-Curve.png -------------------------------------------------------------------------------- /TimeSeries/PublicApis/R/images/FD-Hydrograph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AquaticInformatics/examples/fa417675042ea1f1d08358f2c42244e7c4baac23/TimeSeries/PublicApis/R/images/FD-Hydrograph.png -------------------------------------------------------------------------------- /TimeSeries/PublicApis/R/images/FFA-Curve.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AquaticInformatics/examples/fa417675042ea1f1d08358f2c42244e7c4baac23/TimeSeries/PublicApis/R/images/FFA-Curve.png -------------------------------------------------------------------------------- /TimeSeries/PublicApis/R/images/IDF-Distributions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AquaticInformatics/examples/fa417675042ea1f1d08358f2c42244e7c4baac23/TimeSeries/PublicApis/R/images/IDF-Distributions.png -------------------------------------------------------------------------------- /TimeSeries/PublicApis/R/images/IDF-Plot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AquaticInformatics/examples/fa417675042ea1f1d08358f2c42244e7c4baac23/TimeSeries/PublicApis/R/images/IDF-Plot.png -------------------------------------------------------------------------------- /TimeSeries/PublicApis/R/images/ShinyCorrelator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AquaticInformatics/examples/fa417675042ea1f1d08358f2c42244e7c4baac23/TimeSeries/PublicApis/R/images/ShinyCorrelator.png -------------------------------------------------------------------------------- /TimeSeries/PublicApis/R/images/ShinyFlowDuration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AquaticInformatics/examples/fa417675042ea1f1d08358f2c42244e7c4baac23/TimeSeries/PublicApis/R/images/ShinyFlowDuration.png -------------------------------------------------------------------------------- /TimeSeries/PublicApis/R/images/StageVsDischarge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AquaticInformatics/examples/fa417675042ea1f1d08358f2c42244e7c4baac23/TimeSeries/PublicApis/R/images/StageVsDischarge.png -------------------------------------------------------------------------------- /TimeSeries/PublicApis/R/images/WindRose.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AquaticInformatics/examples/fa417675042ea1f1d08358f2c42244e7c4baac23/TimeSeries/PublicApis/R/images/WindRose.png -------------------------------------------------------------------------------- /TimeSeries/PublicApis/SdkExamples/AppendPoints/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /TimeSeries/PublicApis/SdkExamples/AppendPoints/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("AppendPoints")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("AppendPoints")] 13 | [assembly: AssemblyCopyright("Copyright © 2017")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("e2d7b054-9b51-4f15-b0aa-1a3565d0bad4")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /TimeSeries/PublicApis/SdkExamples/AppendPoints/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /TimeSeries/PublicApis/SdkExamples/ChangeVisitApprovals/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /TimeSeries/PublicApis/SdkExamples/ChangeVisitApprovals/Context.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace ChangeVisitApprovals 5 | { 6 | public class Context 7 | { 8 | public string Server { get; set; } 9 | public string Username { get; set; } = "admin"; 10 | public string Password { get; set; } = "admin"; 11 | public string SessionToken { get; set; } 12 | public int? ApprovalLevel { get; set; } 13 | public string ApprovalName { get; set; } 14 | public bool SkipConfirmation { get; set; } 15 | public bool DryRun { get; set; } 16 | public List Locations { get; set; } = new List(); 17 | public DateTimeOffset? VisitsBefore { get; set; } 18 | public DateTimeOffset? VisitsAfter { get; set; } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /TimeSeries/PublicApis/SdkExamples/ChangeVisitApprovals/ExpectedException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace ChangeVisitApprovals 4 | { 5 | public class ExpectedException : Exception 6 | { 7 | public ExpectedException(string message) 8 | : base(message) 9 | { 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /TimeSeries/PublicApis/SdkExamples/ChangeVisitApprovals/FodyWeavers.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /TimeSeries/PublicApis/SdkExamples/ChangeVisitApprovals/Option.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace ChangeVisitApprovals 4 | { 5 | public class Option 6 | { 7 | public string Key { get; set; } 8 | public string Description { get; set; } 9 | public Action Setter { get; set; } 10 | public Func Getter { get; set; } 11 | 12 | public string UsageText() 13 | { 14 | var defaultValue = Getter(); 15 | 16 | if (!string.IsNullOrEmpty(defaultValue)) 17 | defaultValue = $" [default: {defaultValue}]"; 18 | 19 | return $"{Key,-20} {Description}{defaultValue}"; 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /TimeSeries/PublicApis/SdkExamples/ChangeVisitApprovals/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | 3 | [assembly: AssemblyTitle("ChangeVisitApprovals")] 4 | [assembly: AssemblyDescription("")] 5 | [assembly: AssemblyConfiguration("")] 6 | [assembly: AssemblyCompany("")] 7 | [assembly: AssemblyProduct("ChangeVisitApprovals")] 8 | [assembly: AssemblyCopyright("Copyright © 2019")] 9 | [assembly: AssemblyTrademark("")] 10 | [assembly: AssemblyCulture("")] 11 | [assembly: AssemblyVersion("1.0.0.0")] 12 | [assembly: AssemblyFileVersion("1.0.0.0")] 13 | -------------------------------------------------------------------------------- /TimeSeries/PublicApis/SdkExamples/ChangeVisitApprovals/log4net.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /TimeSeries/PublicApis/SdkExamples/ExcelCsvExtractor/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /TimeSeries/PublicApis/SdkExamples/ExcelCsvExtractor/Context.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace ExcelCsvExtractor 4 | { 5 | public class Context 6 | { 7 | public string ExcelPath { get; set; } 8 | public List Sheets { get; } = new List(); 9 | public string OutputPath { get; set; } 10 | public bool Overwrite { get; set; } 11 | public string DateTimeFormat { get; set; } 12 | public bool TrimEmptyColumns { get; set; } = true; 13 | public string ColumnSeparator { get; set; } = ","; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /TimeSeries/PublicApis/SdkExamples/ExcelCsvExtractor/ExpectedException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace ExcelCsvExtractor 4 | { 5 | public class ExpectedException : Exception 6 | { 7 | public ExpectedException(string message) 8 | : base(message) 9 | { 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /TimeSeries/PublicApis/SdkExamples/ExcelCsvExtractor/FodyWeavers.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | -------------------------------------------------------------------------------- /TimeSeries/PublicApis/SdkExamples/ExcelCsvExtractor/Option.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace ExcelCsvExtractor 4 | { 5 | public class Option 6 | { 7 | public string Key { get; set; } 8 | public string Description { get; set; } 9 | public Action Setter { get; set; } 10 | public Func Getter { get; set; } 11 | 12 | public string UsageText() 13 | { 14 | if (string.IsNullOrEmpty(Key) && string.IsNullOrEmpty(Description)) 15 | return string.Empty; // Omits a blank line 16 | 17 | var key = string.IsNullOrEmpty(Key) ? SeparatorLine : "-" + Key.PadRight(KeyWidth); 18 | 19 | var defaultValue = Getter != null ? Getter() : string.Empty; 20 | 21 | if (!string.IsNullOrEmpty(defaultValue)) 22 | defaultValue = $" [default: {defaultValue}]"; 23 | 24 | return $"{key} {Description}{defaultValue}"; 25 | } 26 | 27 | private const int KeyWidth = 24; 28 | private static readonly string SeparatorLine = string.Empty.PadRight(KeyWidth + 1, '='); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /TimeSeries/PublicApis/SdkExamples/ExcelCsvExtractor/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("ExcelCsvExtractor")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("ExcelCsvExtractor")] 13 | [assembly: AssemblyCopyright("Copyright © 2022")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("657dc627-59d4-4910-b723-c7be8a70b43b")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /TimeSeries/PublicApis/SdkExamples/ExternalProcessor/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /TimeSeries/PublicApis/SdkExamples/ExternalProcessor/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("ExternalProcessor")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("ExternalProcessor")] 13 | [assembly: AssemblyCopyright("Copyright © 2017")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("b89a2d41-323b-4e48-ae24-357e215596d8")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /TimeSeries/PublicApis/SdkExamples/ExternalProcessor/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /TimeSeries/PublicApis/SdkExamples/LocationDeleter/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /TimeSeries/PublicApis/SdkExamples/LocationDeleter/Context.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace LocationDeleter 5 | { 6 | public class Context 7 | { 8 | public string Server { get; set; } 9 | public string Username { get; set; } = "admin"; 10 | public string Password { get; set; } = "admin"; 11 | public string SessionToken { get; set; } 12 | public bool SkipConfirmation { get; set; } 13 | public bool DryRun { get; set; } 14 | public bool RecreateLocations { get; set; } 15 | public List LocationsToDelete { get; set; } = new List(); 16 | public List TimeSeriesToDelete { get; set; } = new List(); 17 | public List RatingModelsToDelete { get; set; } = new List(); 18 | public List VisitsToDelete { get; set; } = new List(); 19 | public DateTimeOffset? VisitsBefore { get; set; } 20 | public DateTimeOffset? VisitsAfter { get; set; } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /TimeSeries/PublicApis/SdkExamples/LocationDeleter/ExpectedException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace LocationDeleter 4 | { 5 | public class ExpectedException : Exception 6 | { 7 | public ExpectedException(string message) 8 | : base(message) 9 | { 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /TimeSeries/PublicApis/SdkExamples/LocationDeleter/FodyWeavers.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /TimeSeries/PublicApis/SdkExamples/LocationDeleter/InternalLibraries/AQService.Common.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AquaticInformatics/examples/fa417675042ea1f1d08358f2c42244e7c4baac23/TimeSeries/PublicApis/SdkExamples/LocationDeleter/InternalLibraries/AQService.Common.dll -------------------------------------------------------------------------------- /TimeSeries/PublicApis/SdkExamples/LocationDeleter/InternalLibraries/AQSystemMLib.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AquaticInformatics/examples/fa417675042ea1f1d08358f2c42244e7c4baac23/TimeSeries/PublicApis/SdkExamples/LocationDeleter/InternalLibraries/AQSystemMLib.dll -------------------------------------------------------------------------------- /TimeSeries/PublicApis/SdkExamples/LocationDeleter/InternalLibraries/CommunicationShared.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AquaticInformatics/examples/fa417675042ea1f1d08358f2c42244e7c4baac23/TimeSeries/PublicApis/SdkExamples/LocationDeleter/InternalLibraries/CommunicationShared.dll -------------------------------------------------------------------------------- /TimeSeries/PublicApis/SdkExamples/LocationDeleter/InternalLibraries/Newtonsoft.Json.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AquaticInformatics/examples/fa417675042ea1f1d08358f2c42244e7c4baac23/TimeSeries/PublicApis/SdkExamples/LocationDeleter/InternalLibraries/Newtonsoft.Json.dll -------------------------------------------------------------------------------- /TimeSeries/PublicApis/SdkExamples/LocationDeleter/InternalLibraries/Notes.txt: -------------------------------------------------------------------------------- 1 | These internal libraries are provided as-is, with no external support from AquaticInformatics. 2 | -------------------------------------------------------------------------------- /TimeSeries/PublicApis/SdkExamples/LocationDeleter/Option.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace LocationDeleter 4 | { 5 | public class Option 6 | { 7 | public string Key { get; set; } 8 | public string Description { get; set; } 9 | public Action Setter { get; set; } 10 | public Func Getter { get; set; } 11 | 12 | public string UsageText() 13 | { 14 | var defaultValue = Getter(); 15 | 16 | if (!string.IsNullOrEmpty(defaultValue)) 17 | defaultValue = $" [default: {defaultValue}]"; 18 | 19 | return $"{Key,-20} {Description}{defaultValue}"; 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /TimeSeries/PublicApis/SdkExamples/LocationDeleter/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | 3 | [assembly: AssemblyTitle("LocationDeleter")] 4 | [assembly: AssemblyDescription("")] 5 | [assembly: AssemblyConfiguration("")] 6 | [assembly: AssemblyCompany("")] 7 | [assembly: AssemblyProduct("LocationDeleter")] 8 | [assembly: AssemblyCopyright("Copyright © 2018")] 9 | [assembly: AssemblyTrademark("")] 10 | [assembly: AssemblyCulture("")] 11 | [assembly: AssemblyVersion("1.0.0.0")] 12 | [assembly: AssemblyFileVersion("1.0.0.0")] 13 | -------------------------------------------------------------------------------- /TimeSeries/PublicApis/SdkExamples/LocationDeleter/RatingModelIdentifier.cs: -------------------------------------------------------------------------------- 1 | namespace LocationDeleter 2 | { 3 | public class RatingModelIdentifier 4 | { 5 | public string InputParameter { get; set; } 6 | public string OutputParameter { get; set; } 7 | public string Label { get; set; } 8 | public string Location { get; set; } 9 | public string Identifier { get; set; } 10 | 11 | public static bool TryParse(string text, out RatingModelIdentifier ratingModelIdentifier) 12 | { 13 | ratingModelIdentifier = RatingModelIdentifierParser.ParseIdentifier(text); 14 | 15 | return ratingModelIdentifier != null; 16 | } 17 | 18 | public override string ToString() 19 | { 20 | return Identifier; 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /TimeSeries/PublicApis/SdkExamples/LocationDeleter/RatingModelIdentifierParser.cs: -------------------------------------------------------------------------------- 1 | using System.Text.RegularExpressions; 2 | 3 | namespace LocationDeleter 4 | { 5 | public static class RatingModelIdentifierParser 6 | { 7 | public static string ParseLocationIdentifier(string ratingModelIdentifier) 8 | { 9 | var match = IdentifierRegex.Match(ratingModelIdentifier); 10 | 11 | if (!match.Success) 12 | throw new ExpectedException($"Can't parse '{ratingModelIdentifier}' as rating model identifier. Expecting -.