From 60bea7e8533a07f31345e1bd8d67a35c79f8849a Mon Sep 17 00:00:00 2001 From: Ajiemar Santiago Date: Tue, 13 Nov 2018 16:23:25 -0600 Subject: [PATCH] feat(Compare and Comply): Generated Compare and Comply service and write integration tests --- IBM.WatsonDeveloperCloud.sln | 19 +- .../CompareComplyService.cs | 925 ++++++++++++++++++ ...tsonDeveloperCloud.CompareComply.v1.csproj | 36 + .../ICompareComplyService.cs | 39 + .../Model/Address.cs | 40 + .../Model/AlignedElement.cs | 45 + .../Model/Attribute.cs | 76 ++ .../Model/BatchStatus.cs | 116 +++ .../Model/BodyCells.cs | 97 ++ .../Model/Category.cs | 197 ++++ .../Model/ClassifyReturn.cs | 81 ++ .../Model/ColumnHeaderIds.cs | 34 + .../Model/ColumnHeaderTexts.cs | 34 + .../Model/ColumnHeaderTextsNormalized.cs | 35 + .../Model/ColumnHeaders.cs | 73 ++ .../Model/CompareReturn.cs | 56 ++ .../Model/Contact.cs | 39 + .../Model/ContractAmts.cs | 40 + .../Model/DocCounts.cs | 49 + .../Model/DocInfo.cs | 45 + .../Model/DocStructure.cs | 41 + .../Model/Document.cs | 49 + .../Model/EffectiveDates.cs | 40 + .../Model/Element.cs | 57 ++ .../Model/ElementLocations.cs | 39 + .../Model/ElementPair.cs | 63 ++ .../Model/FeedbackDataInput.cs | 80 ++ .../Model/FeedbackDataOutput.cs | 75 ++ .../Model/FeedbackDeleted.cs | 39 + .../Model/FeedbackInput.cs | 44 + .../Model/FeedbackList.cs | 35 + .../Model/FeedbackReturn.cs | 55 ++ .../Model/GetFeedback.cs | 50 + .../Model/HTMLReturn.cs | 54 + .../Model/Label.cs | 40 + .../Model/LeadingSentence.cs | 46 + .../Model/Location.cs | 40 + .../Model/OriginalLabelsIn.cs | 41 + .../Model/OriginalLabelsOut.cs | 80 ++ .../Model/Pagination.cs | 54 + .../Model/Parties.cs | 50 + .../Model/RowHeaderIds.cs | 34 + .../Model/RowHeaderTexts.cs | 34 + .../Model/RowHeaderTextsNormalized.cs | 35 + .../Model/RowHeaders.cs | 72 ++ .../Model/SectionTitle.cs | 40 + .../Model/SectionTitles.cs | 54 + .../Model/ShortDoc.cs | 39 + .../Model/TableHeaders.cs | 66 ++ .../Model/TableReturn.cs | 50 + .../Model/Tables.cs | 69 ++ .../Model/TerminationDates.cs | 40 + .../Model/TypeLabel.cs | 41 + .../Model/UnalignedElement.cs | 63 ++ .../Model/UpdatedLabelsIn.cs | 41 + .../Model/UpdatedLabelsOut.cs | 80 ++ .../CompareComplyServiceIntegrationTests.cs | 310 ++++++ .../CompareComplyTestData/TestTable.pdf | Bin 0 -> 18613 bytes .../CompareComplyTestData/contract_A.pdf | Bin 0 -> 85659 bytes .../CompareComplyTestData/contract_B.pdf | Bin 0 -> 85628 bytes ...nDeveloperCloud.CompareComply.v1.IT.csproj | 60 ++ 61 files changed, 4275 insertions(+), 1 deletion(-) create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/CompareComplyService.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/IBM.WatsonDeveloperCloud.CompareComply.v1.csproj create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/ICompareComplyService.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Address.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/AlignedElement.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Attribute.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/BatchStatus.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/BodyCells.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Category.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/ClassifyReturn.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/ColumnHeaderIds.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/ColumnHeaderTexts.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/ColumnHeaderTextsNormalized.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/ColumnHeaders.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/CompareReturn.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Contact.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/ContractAmts.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/DocCounts.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/DocInfo.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/DocStructure.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Document.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/EffectiveDates.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Element.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/ElementLocations.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/ElementPair.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/FeedbackDataInput.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/FeedbackDataOutput.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/FeedbackDeleted.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/FeedbackInput.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/FeedbackList.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/FeedbackReturn.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/GetFeedback.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/HTMLReturn.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Label.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/LeadingSentence.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Location.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/OriginalLabelsIn.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/OriginalLabelsOut.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Pagination.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Parties.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/RowHeaderIds.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/RowHeaderTexts.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/RowHeaderTextsNormalized.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/RowHeaders.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/SectionTitle.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/SectionTitles.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/ShortDoc.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/TableHeaders.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/TableReturn.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Tables.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/TerminationDates.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/TypeLabel.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/UnalignedElement.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/UpdatedLabelsIn.cs create mode 100644 src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/UpdatedLabelsOut.cs create mode 100644 test/IBM.WatsonDeveloperCloud.CompareComply.v1.IT/CompareComplyServiceIntegrationTests.cs create mode 100644 test/IBM.WatsonDeveloperCloud.CompareComply.v1.IT/CompareComplyTestData/TestTable.pdf create mode 100644 test/IBM.WatsonDeveloperCloud.CompareComply.v1.IT/CompareComplyTestData/contract_A.pdf create mode 100644 test/IBM.WatsonDeveloperCloud.CompareComply.v1.IT/CompareComplyTestData/contract_B.pdf create mode 100644 test/IBM.WatsonDeveloperCloud.CompareComply.v1.IT/IBM.WatsonDeveloperCloud.CompareComply.v1.IT.csproj diff --git a/IBM.WatsonDeveloperCloud.sln b/IBM.WatsonDeveloperCloud.sln index 3c46921fb8..b6158624d4 100644 --- a/IBM.WatsonDeveloperCloud.sln +++ b/IBM.WatsonDeveloperCloud.sln @@ -129,7 +129,13 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IBM.WatsonDeveloperCloud.As EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IBM.WatsonDeveloperCloud.Assistant.v2.IntTests", "test\IBM.WatsonDeveloperCloud.Assistant.v2.IntTests\IBM.WatsonDeveloperCloud.Assistant.v2.IntTests.csproj", "{200FC8C7-ED91-4F66-8674-D678588FC450}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IBM.WatsonDeveloperCloud.Assistant.v2.Example", "examples\IBM.WatsonDeveloperCloud.Assistant.v2.Example\IBM.WatsonDeveloperCloud.Assistant.v2.Example.csproj", "{125A4EB4-D769-4EA7-A18D-8D7D568B5B33}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IBM.WatsonDeveloperCloud.Assistant.v2.Example", "examples\IBM.WatsonDeveloperCloud.Assistant.v2.Example\IBM.WatsonDeveloperCloud.Assistant.v2.Example.csproj", "{125A4EB4-D769-4EA7-A18D-8D7D568B5B33}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CompareComplyV1", "CompareComplyV1", "{B368DCF7-FB57-4302-8467-4EB142394A29}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IBM.WatsonDeveloperCloud.CompareComply.v1", "src\IBM.WatsonDeveloperCloud.CompareComply.v1\IBM.WatsonDeveloperCloud.CompareComply.v1.csproj", "{0287B6FD-D28A-47C9-9686-C4658EBD2129}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IBM.WatsonDeveloperCloud.CompareComply.v1.IT", "test\IBM.WatsonDeveloperCloud.CompareComply.v1.IT\IBM.WatsonDeveloperCloud.CompareComply.v1.IT.csproj", "{42258A9B-CE18-4C39-BAA5-19F8C5DE041B}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -325,6 +331,14 @@ Global {125A4EB4-D769-4EA7-A18D-8D7D568B5B33}.Debug|Any CPU.Build.0 = Debug|Any CPU {125A4EB4-D769-4EA7-A18D-8D7D568B5B33}.Release|Any CPU.ActiveCfg = Release|Any CPU {125A4EB4-D769-4EA7-A18D-8D7D568B5B33}.Release|Any CPU.Build.0 = Release|Any CPU + {0287B6FD-D28A-47C9-9686-C4658EBD2129}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0287B6FD-D28A-47C9-9686-C4658EBD2129}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0287B6FD-D28A-47C9-9686-C4658EBD2129}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0287B6FD-D28A-47C9-9686-C4658EBD2129}.Release|Any CPU.Build.0 = Release|Any CPU + {42258A9B-CE18-4C39-BAA5-19F8C5DE041B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {42258A9B-CE18-4C39-BAA5-19F8C5DE041B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {42258A9B-CE18-4C39-BAA5-19F8C5DE041B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {42258A9B-CE18-4C39-BAA5-19F8C5DE041B}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -392,6 +406,9 @@ Global {5FBF32E9-0352-4D8B-BED2-D6EE04363A47} = {90E09BF8-A647-43B8-B721-05CAECFADD72} {200FC8C7-ED91-4F66-8674-D678588FC450} = {90E09BF8-A647-43B8-B721-05CAECFADD72} {125A4EB4-D769-4EA7-A18D-8D7D568B5B33} = {90E09BF8-A647-43B8-B721-05CAECFADD72} + {B368DCF7-FB57-4302-8467-4EB142394A29} = {28E61676-E9FF-4DA9-99CC-5E0D16F02380} + {0287B6FD-D28A-47C9-9686-C4658EBD2129} = {B368DCF7-FB57-4302-8467-4EB142394A29} + {42258A9B-CE18-4C39-BAA5-19F8C5DE041B} = {B368DCF7-FB57-4302-8467-4EB142394A29} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {B9D9D17B-1C17-402F-B701-DC671528690A} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/CompareComplyService.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/CompareComplyService.cs new file mode 100644 index 0000000000..0e3f801d0e --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/CompareComplyService.cs @@ -0,0 +1,925 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using System.Collections.Generic; +using System.IO; +using System.Net.Http; +using System.Text; +using IBM.WatsonDeveloperCloud.CompareComply.v1.Model; +using IBM.WatsonDeveloperCloud.Http; +using IBM.WatsonDeveloperCloud.Http.Extensions; +using IBM.WatsonDeveloperCloud.Service; +using IBM.WatsonDeveloperCloud.Util; +using Newtonsoft.Json; +using System; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1 +{ + public partial class CompareComplyService : WatsonService, ICompareComplyService + { + const string SERVICE_NAME = "compare_comply"; + const string URL = "https://gateway.watsonplatform.net/compare-comply/api"; + private string _versionDate; + public string VersionDate + { + get { return _versionDate; } + set { _versionDate = value; } + } + + public CompareComplyService() : base(SERVICE_NAME, URL) + { + if(!string.IsNullOrEmpty(this.Endpoint)) + this.Endpoint = URL; + } + + public CompareComplyService(string userName, string password, string versionDate) : this() + { + if (string.IsNullOrEmpty(userName)) + throw new ArgumentNullException(nameof(userName)); + + if (string.IsNullOrEmpty(password)) + throw new ArgumentNullException(nameof(password)); + + this.SetCredential(userName, password); + if (string.IsNullOrEmpty(versionDate)) + throw new ArgumentNullException("versionDate cannot be null."); + + VersionDate = versionDate; + } + + public CompareComplyService(TokenOptions options, string versionDate) : this() + { + if (string.IsNullOrEmpty(options.IamApiKey) && string.IsNullOrEmpty(options.IamAccessToken)) + throw new ArgumentNullException(nameof(options.IamAccessToken) + ", " + nameof(options.IamApiKey)); + if(string.IsNullOrEmpty(versionDate)) + throw new ArgumentNullException("versionDate cannot be null."); + + VersionDate = versionDate; + + if (!string.IsNullOrEmpty(options.ServiceUrl)) + { + this.Endpoint = options.ServiceUrl; + } + else + { + options.ServiceUrl = this.Endpoint; + } + + _tokenManager = new TokenManager(options); + } + + public CompareComplyService(IClient httpClient) : this() + { + if (httpClient == null) + throw new ArgumentNullException(nameof(httpClient)); + + this.Client = httpClient; + } + + /// + /// Convert file to HTML. + /// + /// Uploads an input file to the service instance, which returns an HTML version of the document. + /// + /// The file to convert. + /// The analysis model to be used by the service. For the `/v1/element_classification` and + /// `/v1/comparison` methods, the default is `contracts`. For the `/v1/tables` method, the default is `tables`. + /// These defaults apply to the standalone methods as well as to the methods' use in batch-processing requests. + /// (optional) + /// The content type of file. (optional) + /// Custom data object to pass data including custom request headers. + /// HTMLReturn + public HTMLReturn ConvertToHtml(System.IO.FileStream file, string modelId = null, string fileContentType = null, Dictionary customData = null) + { + if (file == null) + throw new ArgumentNullException(nameof(file)); + + if (string.IsNullOrEmpty(VersionDate)) + throw new ArgumentNullException("versionDate cannot be null."); + + HTMLReturn result = null; + + try + { + var formData = new MultipartFormDataContent(); + + if (file != null) + { + var fileContent = new ByteArrayContent((file as Stream).ReadAllBytes()); + System.Net.Http.Headers.MediaTypeHeaderValue contentType; + System.Net.Http.Headers.MediaTypeHeaderValue.TryParse(fileContentType, out contentType); + fileContent.Headers.ContentType = contentType; + formData.Add(fileContent, "file", file.Name); + } + + IClient client; + if(_tokenManager == null) + { + client = this.Client.WithAuthentication(this.UserName, this.Password); + } + else + { + client = this.Client.WithAuthentication(_tokenManager.GetToken()); + } + var restRequest = client.PostAsync($"{this.Endpoint}/v1/html_conversion"); + + restRequest.WithArgument("version", VersionDate); + if (!string.IsNullOrEmpty(modelId)) + restRequest.WithArgument("model_id", modelId); + restRequest.WithBodyContent(formData); + if (customData != null) + restRequest.WithCustomData(customData); + result = restRequest.As().Result; + if(result == null) + result = new HTMLReturn(); + result.CustomData = restRequest.CustomData; + } + catch(AggregateException ae) + { + throw ae.Flatten(); + } + + return result; + } + /// + /// Classify the elements of a document. + /// + /// Uploads a file to the service instance, which returns an analysis of the document's structural and semantic + /// elements. + /// + /// The PDF file to convert. + /// The analysis model to be used by the service. For the `/v1/element_classification` and + /// `/v1/comparison` methods, the default is `contracts`. For the `/v1/tables` method, the default is `tables`. + /// These defaults apply to the standalone methods as well as to the methods' use in batch-processing requests. + /// (optional) + /// Custom data object to pass data including custom request headers. + /// ClassifyReturn + public ClassifyReturn ClassifyElements(System.IO.FileStream file, string modelId = null, Dictionary customData = null) + { + if (file == null) + throw new ArgumentNullException(nameof(file)); + + if (string.IsNullOrEmpty(VersionDate)) + throw new ArgumentNullException("versionDate cannot be null."); + + ClassifyReturn result = null; + + try + { + var formData = new MultipartFormDataContent(); + + if (file != null) + { + var fileContent = new ByteArrayContent((file as Stream).ReadAllBytes()); + System.Net.Http.Headers.MediaTypeHeaderValue contentType; + System.Net.Http.Headers.MediaTypeHeaderValue.TryParse("application/pdf", out contentType); + fileContent.Headers.ContentType = contentType; + formData.Add(fileContent, "file", file.Name); + } + + IClient client; + if(_tokenManager == null) + { + client = this.Client.WithAuthentication(this.UserName, this.Password); + } + else + { + client = this.Client.WithAuthentication(_tokenManager.GetToken()); + } + var restRequest = client.PostAsync($"{this.Endpoint}/v1/element_classification"); + + restRequest.WithArgument("version", VersionDate); + if (!string.IsNullOrEmpty(modelId)) + restRequest.WithArgument("model_id", modelId); + restRequest.WithBodyContent(formData); + if (customData != null) + restRequest.WithCustomData(customData); + result = restRequest.As().Result; + if(result == null) + result = new ClassifyReturn(); + result.CustomData = restRequest.CustomData; + } + catch(AggregateException ae) + { + throw ae.Flatten(); + } + + return result; + } + /// + /// Extract a document's tables. + /// + /// Uploads a document file to the service instance, which extracts the contents of the document's tables. + /// + /// The PDF file on which to run table extraction. + /// The analysis model to be used by the service. For the `/v1/element_classification` and + /// `/v1/comparison` methods, the default is `contracts`. For the `/v1/tables` method, the default is `tables`. + /// These defaults apply to the standalone methods as well as to the methods' use in batch-processing requests. + /// (optional) + /// Custom data object to pass data including custom request headers. + /// TableReturn + public TableReturn ExtractTables(System.IO.FileStream file, string modelId = null, Dictionary customData = null) + { + if (file == null) + throw new ArgumentNullException(nameof(file)); + + if (string.IsNullOrEmpty(VersionDate)) + throw new ArgumentNullException("versionDate cannot be null."); + + TableReturn result = null; + + try + { + var formData = new MultipartFormDataContent(); + + if (file != null) + { + var fileContent = new ByteArrayContent((file as Stream).ReadAllBytes()); + System.Net.Http.Headers.MediaTypeHeaderValue contentType; + System.Net.Http.Headers.MediaTypeHeaderValue.TryParse("application/pdf", out contentType); + fileContent.Headers.ContentType = contentType; + formData.Add(fileContent, "file", file.Name); + } + + IClient client; + if(_tokenManager == null) + { + client = this.Client.WithAuthentication(this.UserName, this.Password); + } + else + { + client = this.Client.WithAuthentication(_tokenManager.GetToken()); + } + var restRequest = client.PostAsync($"{this.Endpoint}/v1/tables"); + + restRequest.WithArgument("version", VersionDate); + if (!string.IsNullOrEmpty(modelId)) + restRequest.WithArgument("model_id", modelId); + restRequest.WithBodyContent(formData); + if (customData != null) + restRequest.WithCustomData(customData); + result = restRequest.As().Result; + if(result == null) + result = new TableReturn(); + result.CustomData = restRequest.CustomData; + } + catch(AggregateException ae) + { + throw ae.Flatten(); + } + + return result; + } + /// + /// Compare two documents. + /// + /// Uploads two input files to the service instance, which analyzes the content and returns parsed JSON + /// comparing the two documents. Uploaded files must be in the same file format. + /// + /// The first file to compare. + /// The second file to compare. + /// A text label for the first file. The label cannot exceed 64 characters in length. + /// The default is `file_1`. (optional) + /// A text label for the second file. The label cannot exceed 64 characters in length. + /// The default is `file_2`. (optional) + /// The analysis model to be used by the service. For the `/v1/element_classification` and + /// `/v1/comparison` methods, the default is `contracts`. For the `/v1/tables` method, the default is `tables`. + /// These defaults apply to the standalone methods as well as to the methods' use in batch-processing requests. + /// (optional) + /// The content type of file1. (optional) + /// The content type of file2. (optional) + /// Custom data object to pass data including custom request headers. + /// CompareReturn + public CompareReturn CompareDocuments(System.IO.FileStream file1, System.IO.FileStream file2, string file1Label = null, string file2Label = null, string modelId = null, string file1ContentType = null, string file2ContentType = null, Dictionary customData = null) + { + if (file1 == null) + throw new ArgumentNullException(nameof(file1)); + if (file2 == null) + throw new ArgumentNullException(nameof(file2)); + + if (string.IsNullOrEmpty(VersionDate)) + throw new ArgumentNullException("versionDate cannot be null."); + + CompareReturn result = null; + + try + { + var formData = new MultipartFormDataContent(); + + if (file1 != null) + { + var file1Content = new ByteArrayContent((file1 as Stream).ReadAllBytes()); + System.Net.Http.Headers.MediaTypeHeaderValue contentType; + System.Net.Http.Headers.MediaTypeHeaderValue.TryParse(file1ContentType, out contentType); + file1Content.Headers.ContentType = contentType; + formData.Add(file1Content, "file_1", file1.Name); + } + + if (file2 != null) + { + var file2Content = new ByteArrayContent((file2 as Stream).ReadAllBytes()); + System.Net.Http.Headers.MediaTypeHeaderValue contentType; + System.Net.Http.Headers.MediaTypeHeaderValue.TryParse(file2ContentType, out contentType); + file2Content.Headers.ContentType = contentType; + formData.Add(file2Content, "file_2", file2.Name); + } + + IClient client; + if(_tokenManager == null) + { + client = this.Client.WithAuthentication(this.UserName, this.Password); + } + else + { + client = this.Client.WithAuthentication(_tokenManager.GetToken()); + } + var restRequest = client.PostAsync($"{this.Endpoint}/v1/comparison"); + + restRequest.WithArgument("version", VersionDate); + if (!string.IsNullOrEmpty(file1Label)) + restRequest.WithArgument("file_1_label", file1Label); + if (!string.IsNullOrEmpty(file2Label)) + restRequest.WithArgument("file_2_label", file2Label); + if (!string.IsNullOrEmpty(modelId)) + restRequest.WithArgument("model_id", modelId); + restRequest.WithBodyContent(formData); + if (customData != null) + restRequest.WithCustomData(customData); + result = restRequest.As().Result; + if(result == null) + result = new CompareReturn(); + result.CustomData = restRequest.CustomData; + } + catch(AggregateException ae) + { + throw ae.Flatten(); + } + + return result; + } + /// + /// Add feedback. + /// + /// Adds feedback in the form of _labels_ from a subject-matter expert (SME) to a governing document. + /// **Important:** Feedback is not immediately incorporated into the training model, nor is it guaranteed to be + /// incorporated at a later date. Instead, submitted feedback is used to suggest future updates to the training + /// model. + /// + /// An object that defines the feedback to be submitted. + /// Custom data object to pass data including custom request headers. + /// FeedbackReturn + public FeedbackReturn AddFeedback(FeedbackInput feedbackData, Dictionary customData = null) + { + if (feedbackData == null) + throw new ArgumentNullException(nameof(feedbackData)); + + if (string.IsNullOrEmpty(VersionDate)) + throw new ArgumentNullException("versionDate cannot be null."); + + FeedbackReturn result = null; + + try + { + IClient client; + if(_tokenManager == null) + { + client = this.Client.WithAuthentication(this.UserName, this.Password); + } + else + { + client = this.Client.WithAuthentication(_tokenManager.GetToken()); + } + var restRequest = client.PostAsync($"{this.Endpoint}/v1/feedback"); + + restRequest.WithArgument("version", VersionDate); + restRequest.WithBody(feedbackData); + if (customData != null) + restRequest.WithCustomData(customData); + result = restRequest.As().Result; + if(result == null) + result = new FeedbackReturn(); + result.CustomData = restRequest.CustomData; + } + catch(AggregateException ae) + { + throw ae.Flatten(); + } + + return result; + } + + /// + /// Deletes a specified feedback entry. + /// + /// An string that specifies the feedback entry to be deleted from the + /// document. + /// The analysis model to be used by the service. For the `/v1/element_classification` and + /// `/v1/comparison` methods, the default is `contracts`. For the `/v1/tables` method, the default is `tables`. + /// These defaults apply to the standalone methods as well as to the methods' use in batch-processing requests. + /// (optional) + /// Custom data object to pass data including custom request headers. + /// FeedbackDeleted + public FeedbackDeleted DeleteFeedback(string feedbackId, string modelId = null, Dictionary customData = null) + { + if (string.IsNullOrEmpty(feedbackId)) + throw new ArgumentNullException(nameof(feedbackId)); + + if (string.IsNullOrEmpty(VersionDate)) + throw new ArgumentNullException("versionDate cannot be null."); + + FeedbackDeleted result = null; + + try + { + IClient client; + if(_tokenManager == null) + { + client = this.Client.WithAuthentication(this.UserName, this.Password); + } + else + { + client = this.Client.WithAuthentication(_tokenManager.GetToken()); + } + var restRequest = client.DeleteAsync($"{this.Endpoint}/v1/feedback/{feedbackId}"); + + restRequest.WithArgument("version", VersionDate); + if (!string.IsNullOrEmpty(modelId)) + restRequest.WithArgument("model_id", modelId); + if (customData != null) + restRequest.WithCustomData(customData); + result = restRequest.As().Result; + if(result == null) + result = new FeedbackDeleted(); + result.CustomData = restRequest.CustomData; + } + catch(AggregateException ae) + { + throw ae.Flatten(); + } + + return result; + } + + /// + /// List a specified feedback entry. + /// + /// An string that specifies the feedback entry to be included in the output. + /// The analysis model to be used by the service. For the `/v1/element_classification` and + /// `/v1/comparison` methods, the default is `contracts`. For the `/v1/tables` method, the default is `tables`. + /// These defaults apply to the standalone methods as well as to the methods' use in batch-processing requests. + /// (optional) + /// Custom data object to pass data including custom request headers. + /// GetFeedback + public GetFeedback GetFeedback(string feedbackId, string modelId = null, Dictionary customData = null) + { + if (string.IsNullOrEmpty(feedbackId)) + throw new ArgumentNullException(nameof(feedbackId)); + + if (string.IsNullOrEmpty(VersionDate)) + throw new ArgumentNullException("versionDate cannot be null."); + + GetFeedback result = null; + + try + { + IClient client; + if(_tokenManager == null) + { + client = this.Client.WithAuthentication(this.UserName, this.Password); + } + else + { + client = this.Client.WithAuthentication(_tokenManager.GetToken()); + } + var restRequest = client.GetAsync($"{this.Endpoint}/v1/feedback/{feedbackId}"); + + restRequest.WithArgument("version", VersionDate); + if (!string.IsNullOrEmpty(modelId)) + restRequest.WithArgument("model_id", modelId); + if (customData != null) + restRequest.WithCustomData(customData); + result = restRequest.As().Result; + if(result == null) + result = new GetFeedback(); + result.CustomData = restRequest.CustomData; + } + catch(AggregateException ae) + { + throw ae.Flatten(); + } + + return result; + } + + /// + /// List the feedback in documents. + /// + /// An optional string that filters the output to include only feedback with the + /// specified feedback type. The only permitted value is `element_classification`. (optional) + /// An optional string in the format `YYYY-MM-DD` that filters the output to include only + /// feedback that was added before the specified date. (optional) + /// An optional string in the format `YYYY-MM-DD` that filters the output to include only + /// feedback that was added after the specified date. (optional) + /// An optional string that filters the output to include only feedback from the + /// document with the specified `document_title`. (optional) + /// An optional string that filters the output to include only feedback with the specified + /// `model_id`. The only permitted value is `contracts`. (optional) + /// An optional string that filters the output to include only feedback with the + /// specified `model_version`. (optional) + /// An optional string in the form of a comma-separated list of categories. If + /// this is specified, the service filters the output to include only feedback that has at least one category + /// from the list removed. (optional) + /// An optional string in the form of a comma-separated list of categories. If this + /// is specified, the service filters the output to include only feedback that has at least one category from + /// the list added. (optional) + /// An optional string in the form of a comma-separated list of categories. If + /// this is specified, the service filters the output to include only feedback that has at least one category + /// from the list unchanged. (optional) + /// An optional string of comma-separated `nature`:`party` pairs. If this is + /// specified, the service filters the output to include only feedback that has at least one `nature`:`party` + /// pair from the list removed. (optional) + /// An optional string of comma-separated `nature`:`party` pairs. If this is specified, + /// the service filters the output to include only feedback that has at least one `nature`:`party` pair from the + /// list removed. (optional) + /// An optional string of comma-separated `nature`:`party` pairs. If this is + /// specified, the service filters the output to include only feedback that has at least one `nature`:`party` + /// pair from the list unchanged. (optional) + /// An optional integer specifying the number of documents returned by the service. The + /// default is `200`. The sum of the `count` and `offset` values in any single query cannot exceed `10000`. + /// (optional) + /// An optional integer specifying the number of documents returned by the service. The + /// default is `0`. The sum of the `count` and `offset` values in any single query cannot exceed `10000`. + /// (optional) + /// An optional comma-separated list of fields in the document to sort on. You can optionally + /// specify the sort direction by prefixing the value of the field with `-` for descending order or `+` for + /// ascending order (the default). Currently permitted sorting fields are `created` and `document_title`. + /// (optional) + /// Custom data object to pass data including custom request headers. + /// FeedbackList + public FeedbackList ListFeedback(string feedbackType = null, DateTime? before = null, DateTime? after = null, string documentTitle = null, string modelId = null, string modelVersion = null, string categoryRemoved = null, string categoryAdded = null, string categoryUnchanged = null, string typeRemoved = null, string typeAdded = null, string typeUnchanged = null, long? count = null, long? offset = null, string sort = null, Dictionary customData = null) + { + + if (string.IsNullOrEmpty(VersionDate)) + throw new ArgumentNullException("versionDate cannot be null."); + + FeedbackList result = null; + + try + { + IClient client; + if(_tokenManager == null) + { + client = this.Client.WithAuthentication(this.UserName, this.Password); + } + else + { + client = this.Client.WithAuthentication(_tokenManager.GetToken()); + } + var restRequest = client.GetAsync($"{this.Endpoint}/v1/feedback"); + + restRequest.WithArgument("version", VersionDate); + if (!string.IsNullOrEmpty(feedbackType)) + restRequest.WithArgument("feedback_type", feedbackType); + if (before != null) + restRequest.WithArgument("before", before); + if (after != null) + restRequest.WithArgument("after", after); + if (!string.IsNullOrEmpty(documentTitle)) + restRequest.WithArgument("document_title", documentTitle); + if (!string.IsNullOrEmpty(modelId)) + restRequest.WithArgument("model_id", modelId); + if (!string.IsNullOrEmpty(modelVersion)) + restRequest.WithArgument("model_version", modelVersion); + if (!string.IsNullOrEmpty(categoryRemoved)) + restRequest.WithArgument("category_removed", categoryRemoved); + if (!string.IsNullOrEmpty(categoryAdded)) + restRequest.WithArgument("category_added", categoryAdded); + if (!string.IsNullOrEmpty(categoryUnchanged)) + restRequest.WithArgument("category_unchanged", categoryUnchanged); + if (!string.IsNullOrEmpty(typeRemoved)) + restRequest.WithArgument("type_removed", typeRemoved); + if (!string.IsNullOrEmpty(typeAdded)) + restRequest.WithArgument("type_added", typeAdded); + if (!string.IsNullOrEmpty(typeUnchanged)) + restRequest.WithArgument("type_unchanged", typeUnchanged); + if (count != null) + restRequest.WithArgument("count", count); + if (offset != null) + restRequest.WithArgument("offset", offset); + if (!string.IsNullOrEmpty(sort)) + restRequest.WithArgument("sort", sort); + if (customData != null) + restRequest.WithCustomData(customData); + result = restRequest.As().Result; + if(result == null) + result = new FeedbackList(); + result.CustomData = restRequest.CustomData; + } + catch(AggregateException ae) + { + throw ae.Flatten(); + } + + return result; + } + /// + /// Submit a batch-processing request. + /// + /// Run Compare and Comply methods over a collection of input documents. + /// **Important:** Batch processing requires the use of the [IBM Cloud Object Storage + /// service](https://console.bluemix.net/docs/services/cloud-object-storage/about-cos.html#about-ibm-cloud-object-storage). + /// The use of IBM Cloud Object Storage with Compare and Comply is discussed at [Using batch + /// processing](https://console.bluemix.net/docs/services/compare-comply/batching.html#before-you-batch). + /// + /// The Compare and Comply method to run across the submitted input documents. Possible + /// values are `html_conversion`, `element_classification`, and `tables`. + /// A JSON file containing the input Cloud Object Storage credentials. At a + /// minimum, the credentials must enable `READ` permissions on the bucket defined by the `input_bucket_name` + /// parameter. + /// The geographical location of the Cloud Object Storage input bucket as + /// listed on the **Endpoint** tab of your Cloud Object Storage instance; for example, `us-geo`, `eu-geo`, or + /// `ap-geo`. + /// The name of the Cloud Object Storage input bucket. + /// A JSON file that lists the Cloud Object Storage output credentials. At a + /// minimum, the credentials must enable `READ` and `WRITE` permissions on the bucket defined by the + /// `output_bucket_name` parameter. + /// The geographical location of the Cloud Object Storage output bucket as + /// listed on the **Endpoint** tab of your Cloud Object Storage instance; for example, `us-geo`, `eu-geo`, or + /// `ap-geo`. + /// The name of the Cloud Object Storage output bucket. + /// The analysis model to be used by the service. For the `/v1/element_classification` and + /// `/v1/comparison` methods, the default is `contracts`. For the `/v1/tables` method, the default is `tables`. + /// These defaults apply to the standalone methods as well as to the methods' use in batch-processing requests. + /// (optional) + /// Custom data object to pass data including custom request headers. + /// BatchStatus + public BatchStatus CreateBatch(string function, System.IO.FileStream inputCredentialsFile, string inputBucketLocation, string inputBucketName, System.IO.FileStream outputCredentialsFile, string outputBucketLocation, string outputBucketName, string modelId = null, Dictionary customData = null) + { + if (string.IsNullOrEmpty(function)) + throw new ArgumentNullException(nameof(function)); + if (inputCredentialsFile == null) + throw new ArgumentNullException(nameof(inputCredentialsFile)); + if (string.IsNullOrEmpty(inputBucketLocation)) + throw new ArgumentNullException(nameof(inputBucketLocation)); + if (string.IsNullOrEmpty(inputBucketName)) + throw new ArgumentNullException(nameof(inputBucketName)); + if (outputCredentialsFile == null) + throw new ArgumentNullException(nameof(outputCredentialsFile)); + if (string.IsNullOrEmpty(outputBucketLocation)) + throw new ArgumentNullException(nameof(outputBucketLocation)); + if (string.IsNullOrEmpty(outputBucketName)) + throw new ArgumentNullException(nameof(outputBucketName)); + + if (string.IsNullOrEmpty(VersionDate)) + throw new ArgumentNullException("versionDate cannot be null."); + + BatchStatus result = null; + + try + { + var formData = new MultipartFormDataContent(); + + if (inputCredentialsFile != null) + { + var inputCredentialsFileContent = new ByteArrayContent((inputCredentialsFile as Stream).ReadAllBytes()); + System.Net.Http.Headers.MediaTypeHeaderValue contentType; + System.Net.Http.Headers.MediaTypeHeaderValue.TryParse("application/json", out contentType); + inputCredentialsFileContent.Headers.ContentType = contentType; + formData.Add(inputCredentialsFileContent, "input_credentials_file", inputCredentialsFile.Name); + } + + if (inputBucketLocation != null) + { + var inputBucketLocationContent = new StringContent(inputBucketLocation, Encoding.UTF8, HttpMediaType.TEXT_PLAIN); + inputBucketLocationContent.Headers.ContentType = null; + formData.Add(inputBucketLocationContent, "input_bucket_location"); + } + + if (inputBucketName != null) + { + var inputBucketNameContent = new StringContent(inputBucketName, Encoding.UTF8, HttpMediaType.TEXT_PLAIN); + inputBucketNameContent.Headers.ContentType = null; + formData.Add(inputBucketNameContent, "input_bucket_name"); + } + + if (outputCredentialsFile != null) + { + var outputCredentialsFileContent = new ByteArrayContent((outputCredentialsFile as Stream).ReadAllBytes()); + System.Net.Http.Headers.MediaTypeHeaderValue contentType; + System.Net.Http.Headers.MediaTypeHeaderValue.TryParse("application/json", out contentType); + outputCredentialsFileContent.Headers.ContentType = contentType; + formData.Add(outputCredentialsFileContent, "output_credentials_file", outputCredentialsFile.Name); + } + + if (outputBucketLocation != null) + { + var outputBucketLocationContent = new StringContent(outputBucketLocation, Encoding.UTF8, HttpMediaType.TEXT_PLAIN); + outputBucketLocationContent.Headers.ContentType = null; + formData.Add(outputBucketLocationContent, "output_bucket_location"); + } + + if (outputBucketName != null) + { + var outputBucketNameContent = new StringContent(outputBucketName, Encoding.UTF8, HttpMediaType.TEXT_PLAIN); + outputBucketNameContent.Headers.ContentType = null; + formData.Add(outputBucketNameContent, "output_bucket_name"); + } + + IClient client; + if(_tokenManager == null) + { + client = this.Client.WithAuthentication(this.UserName, this.Password); + } + else + { + client = this.Client.WithAuthentication(_tokenManager.GetToken()); + } + var restRequest = client.PostAsync($"{this.Endpoint}/v1/batches"); + + restRequest.WithArgument("version", VersionDate); + if (!string.IsNullOrEmpty(function)) + restRequest.WithArgument("function", function); + if (!string.IsNullOrEmpty(modelId)) + restRequest.WithArgument("model_id", modelId); + restRequest.WithBodyContent(formData); + if (customData != null) + restRequest.WithCustomData(customData); + result = restRequest.As().Result; + if(result == null) + result = new BatchStatus(); + result.CustomData = restRequest.CustomData; + } + catch(AggregateException ae) + { + throw ae.Flatten(); + } + + return result; + } + + /// + /// Gets information about a specific batch-processing request. + /// + /// Gets information about a batch-processing request with a specified ID. + /// + /// The ID of the batch-processing request whose information you want to retrieve. + /// Custom data object to pass data including custom request headers. + /// BatchStatus + public BatchStatus GetBatch(string batchId, Dictionary customData = null) + { + if (string.IsNullOrEmpty(batchId)) + throw new ArgumentNullException(nameof(batchId)); + + if (string.IsNullOrEmpty(VersionDate)) + throw new ArgumentNullException("versionDate cannot be null."); + + BatchStatus result = null; + + try + { + IClient client; + if(_tokenManager == null) + { + client = this.Client.WithAuthentication(this.UserName, this.Password); + } + else + { + client = this.Client.WithAuthentication(_tokenManager.GetToken()); + } + var restRequest = client.GetAsync($"{this.Endpoint}/v1/batches/{batchId}"); + + restRequest.WithArgument("version", VersionDate); + if (customData != null) + restRequest.WithCustomData(customData); + result = restRequest.As().Result; + if(result == null) + result = new BatchStatus(); + result.CustomData = restRequest.CustomData; + } + catch(AggregateException ae) + { + throw ae.Flatten(); + } + + return result; + } + + /// + /// Gets the list of submitted batch-processing jobs. + /// + /// Gets the list of batch-processing jobs submitted by users. + /// + /// Custom data object to pass data including custom request headers. + /// BatchStatus + public BatchStatus GetBatches(Dictionary customData = null) + { + + if (string.IsNullOrEmpty(VersionDate)) + throw new ArgumentNullException("versionDate cannot be null."); + + BatchStatus result = null; + + try + { + IClient client; + if(_tokenManager == null) + { + client = this.Client.WithAuthentication(this.UserName, this.Password); + } + else + { + client = this.Client.WithAuthentication(_tokenManager.GetToken()); + } + var restRequest = client.GetAsync($"{this.Endpoint}/v1/batches"); + + restRequest.WithArgument("version", VersionDate); + if (customData != null) + restRequest.WithCustomData(customData); + result = restRequest.As().Result; + if(result == null) + result = new BatchStatus(); + result.CustomData = restRequest.CustomData; + } + catch(AggregateException ae) + { + throw ae.Flatten(); + } + + return result; + } + + /// + /// Updates a pending or active batch-processing request. + /// + /// Updates a pending or active batch-processing request. You can rescan the input bucket to check for new + /// documents or cancel a request. + /// + /// The ID of the batch-processing request you want to update. + /// The action you want to perform on the specified batch-processing request. Possible + /// values are `rescan` and `cancel`. + /// The analysis model to be used by the service. For the `/v1/element_classification` and + /// `/v1/comparison` methods, the default is `contracts`. For the `/v1/tables` method, the default is `tables`. + /// These defaults apply to the standalone methods as well as to the methods' use in batch-processing requests. + /// (optional) + /// Custom data object to pass data including custom request headers. + /// BatchStatus + public BatchStatus UpdateBatch(string batchId, string action, string modelId = null, Dictionary customData = null) + { + if (string.IsNullOrEmpty(batchId)) + throw new ArgumentNullException(nameof(batchId)); + if (string.IsNullOrEmpty(action)) + throw new ArgumentNullException(nameof(action)); + + if (string.IsNullOrEmpty(VersionDate)) + throw new ArgumentNullException("versionDate cannot be null."); + + BatchStatus result = null; + + try + { + IClient client; + if(_tokenManager == null) + { + client = this.Client.WithAuthentication(this.UserName, this.Password); + } + else + { + client = this.Client.WithAuthentication(_tokenManager.GetToken()); + } + var restRequest = client.PutAsync($"{this.Endpoint}/v1/batches/{batchId}"); + + restRequest.WithArgument("version", VersionDate); + if (!string.IsNullOrEmpty(action)) + restRequest.WithArgument("action", action); + if (!string.IsNullOrEmpty(modelId)) + restRequest.WithArgument("model_id", modelId); + if (customData != null) + restRequest.WithCustomData(customData); + result = restRequest.As().Result; + if(result == null) + result = new BatchStatus(); + result.CustomData = restRequest.CustomData; + } + catch(AggregateException ae) + { + throw ae.Flatten(); + } + + return result; + } + } +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/IBM.WatsonDeveloperCloud.CompareComply.v1.csproj b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/IBM.WatsonDeveloperCloud.CompareComply.v1.csproj new file mode 100644 index 0000000000..dae0162821 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/IBM.WatsonDeveloperCloud.CompareComply.v1.csproj @@ -0,0 +1,36 @@ + + + + IBM.WatsonDeveloperCloud.CompareComply.v1 wraps the Watson Developer Cloud Compare Comply service (http://www.ibm.com/watson/developercloud/compare-comply.html) + IBM.WatsonDeveloperCloud.CompareComply.v1 + 2.11.0 + Watson Developer Cloud + netstandard1.3 + IBM.WatsonDeveloperCloud.CompareComply.v1 + IBM.WatsonDeveloperCloud.CompareComply.v1 + watson;cognitive;speech;vision;machine-learning;ml;ai;artificial-intelligence;.NET;.NET-Standard + https://watson-developer-cloud.github.io/dotnet-standard-sdk/img/Watson_Avatar_Pos_RGB.png + https://github.com/watson-developer-cloud/dotnet-standard-sdk + 1.6.0 + 2.11.0 + + + + full + true + + + + full + true + + + + + + + + + + + diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/ICompareComplyService.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/ICompareComplyService.cs new file mode 100644 index 0000000000..c0f211aebc --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/ICompareComplyService.cs @@ -0,0 +1,39 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using System; +using System.Collections.Generic; +using IBM.WatsonDeveloperCloud.CompareComply.v1.Model; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1 +{ + public partial interface ICompareComplyService + { + HTMLReturn ConvertToHtml(System.IO.FileStream file, string modelId = null, string fileContentType = null, Dictionary customData = null); + ClassifyReturn ClassifyElements(System.IO.FileStream file, string modelId = null, Dictionary customData = null); + TableReturn ExtractTables(System.IO.FileStream file, string modelId = null, Dictionary customData = null); + CompareReturn CompareDocuments(System.IO.FileStream file1, System.IO.FileStream file2, string file1Label = null, string file2Label = null, string modelId = null, string file1ContentType = null, string file2ContentType = null, Dictionary customData = null); + FeedbackReturn AddFeedback(FeedbackInput feedbackData, Dictionary customData = null); + FeedbackDeleted DeleteFeedback(string feedbackId, string modelId = null, Dictionary customData = null); + GetFeedback GetFeedback(string feedbackId, string modelId = null, Dictionary customData = null); + FeedbackList ListFeedback(string feedbackType = null, DateTime? before = null, DateTime? after = null, string documentTitle = null, string modelId = null, string modelVersion = null, string categoryRemoved = null, string categoryAdded = null, string categoryUnchanged = null, string typeRemoved = null, string typeAdded = null, string typeUnchanged = null, long? count = null, long? offset = null, string sort = null, Dictionary customData = null); + BatchStatus CreateBatch(string function, System.IO.FileStream inputCredentialsFile, string inputBucketLocation, string inputBucketName, System.IO.FileStream outputCredentialsFile, string outputBucketLocation, string outputBucketName, string modelId = null, Dictionary customData = null); + BatchStatus GetBatch(string batchId, Dictionary customData = null); + BatchStatus GetBatches(Dictionary customData = null); + BatchStatus UpdateBatch(string batchId, string action, string modelId = null, Dictionary customData = null); + } +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Address.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Address.cs new file mode 100644 index 0000000000..0a625dbc5e --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Address.cs @@ -0,0 +1,40 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// A party's address. + /// + public class Address : BaseModel + { + /// + /// A string listing the address. + /// + [JsonProperty("text", NullValueHandling = NullValueHandling.Ignore)] + public string Text { get; set; } + /// + /// The numeric location of the identified element in the document, represented with two integers labeled + /// `begin` and `end`. + /// + [JsonProperty("location", NullValueHandling = NullValueHandling.Ignore)] + public Location Location { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/AlignedElement.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/AlignedElement.cs new file mode 100644 index 0000000000..20a7bda23d --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/AlignedElement.cs @@ -0,0 +1,45 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using System.Collections.Generic; +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// AlignedElement. + /// + public class AlignedElement : BaseModel + { + /// + /// Identifies two elements that semantically align between the compared documents. + /// + [JsonProperty("element_pair", NullValueHandling = NullValueHandling.Ignore)] + public List ElementPair { get; set; } + /// + /// Specifies whether the text is identical. + /// + [JsonProperty("identical_text", NullValueHandling = NullValueHandling.Ignore)] + public bool? IdenticalText { get; set; } + /// + /// One or more hashed values that you can send to IBM to provide feedback or receive support. + /// + [JsonProperty("provenance_ids", NullValueHandling = NullValueHandling.Ignore)] + public List ProvenanceIds { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Attribute.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Attribute.cs new file mode 100644 index 0000000000..2bf5a41d78 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Attribute.cs @@ -0,0 +1,76 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// List of document attributes. + /// + public class Attribute : BaseModel + { + /// + /// The type of attribute. Possible values are `Currency`, `DateTime`, and `Location`. + /// + /// + /// The type of attribute. Possible values are `Currency`, `DateTime`, and `Location`. + /// + [JsonConverter(typeof(StringEnumConverter))] + public enum TypeEnum + { + + /// + /// Enum CURRENCY for Currency + /// + [EnumMember(Value = "Currency")] + CURRENCY, + + /// + /// Enum DATETIME for DateTime + /// + [EnumMember(Value = "DateTime")] + DATETIME, + + /// + /// Enum LOCATION for Location + /// + [EnumMember(Value = "Location")] + LOCATION + } + + /// + /// The type of attribute. Possible values are `Currency`, `DateTime`, and `Location`. + /// + [JsonProperty("type", NullValueHandling = NullValueHandling.Ignore)] + public TypeEnum? Type { get; set; } + /// + /// The text associated with the attribute. + /// + [JsonProperty("text", NullValueHandling = NullValueHandling.Ignore)] + public string Text { get; set; } + /// + /// The numeric location of the identified element in the document, represented with two integers labeled + /// `begin` and `end`. + /// + [JsonProperty("location", NullValueHandling = NullValueHandling.Ignore)] + public Location Location { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/BatchStatus.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/BatchStatus.cs new file mode 100644 index 0000000000..be3847b836 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/BatchStatus.cs @@ -0,0 +1,116 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using System; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// The batch-request status. + /// + public class BatchStatus : BaseModel + { + /// + /// The method to be run against the documents. Possible values are `html_conversion`, `element_classification`, + /// and `tables`. + /// + /// + /// The method to be run against the documents. Possible values are `html_conversion`, `element_classification`, + /// and `tables`. + /// + [JsonConverter(typeof(StringEnumConverter))] + public enum FunctionEnum + { + + /// + /// Enum ELEMENT_CLASSIFICATION for element_classification + /// + [EnumMember(Value = "element_classification")] + ELEMENT_CLASSIFICATION, + + /// + /// Enum HTML_CONVERSION for html_conversion + /// + [EnumMember(Value = "html_conversion")] + HTML_CONVERSION, + + /// + /// Enum TABLES for tables + /// + [EnumMember(Value = "tables")] + TABLES + } + + /// + /// The method to be run against the documents. Possible values are `html_conversion`, `element_classification`, + /// and `tables`. + /// + [JsonProperty("function", NullValueHandling = NullValueHandling.Ignore)] + public FunctionEnum? Function { get; set; } + /// + /// The geographical location of the Cloud Object Storage input bucket as listed on the **Endpoint** tab of your + /// COS instance; for example, `us-geo`, `eu-geo`, or `ap-geo`. + /// + [JsonProperty("input_bucket_location", NullValueHandling = NullValueHandling.Ignore)] + public string InputBucketLocation { get; set; } + /// + /// The name of the Cloud Object Storage input bucket. + /// + [JsonProperty("input_bucket_name", NullValueHandling = NullValueHandling.Ignore)] + public string InputBucketName { get; set; } + /// + /// The geographical location of the Cloud Object Storage output bucket as listed on the **Endpoint** tab of + /// your COS instance; for example, `us-geo`, `eu-geo`, or `ap-geo`. + /// + [JsonProperty("output_bucket_location", NullValueHandling = NullValueHandling.Ignore)] + public string OutputBucketLocation { get; set; } + /// + /// The name of the Cloud Object Storage output bucket. + /// + [JsonProperty("output_bucket_name", NullValueHandling = NullValueHandling.Ignore)] + public string OutputBucketName { get; set; } + /// + /// The unique identifier for the batch request. + /// + [JsonProperty("batch_id", NullValueHandling = NullValueHandling.Ignore)] + public string BatchId { get; set; } + /// + /// Document counts. + /// + [JsonProperty("document_counts", NullValueHandling = NullValueHandling.Ignore)] + public DocCounts DocumentCounts { get; set; } + /// + /// The status of the batch request. + /// + [JsonProperty("status", NullValueHandling = NullValueHandling.Ignore)] + public string Status { get; set; } + /// + /// The creation time of the batch request. + /// + [JsonProperty("created", NullValueHandling = NullValueHandling.Ignore)] + public DateTime? Created { get; set; } + /// + /// The time of the most recent update to the batch request. + /// + [JsonProperty("updated", NullValueHandling = NullValueHandling.Ignore)] + public DateTime? Updated { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/BodyCells.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/BodyCells.cs new file mode 100644 index 0000000000..5b08e7347c --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/BodyCells.cs @@ -0,0 +1,97 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using System.Collections.Generic; +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// Cells that are not table header, column header, or row header cells. + /// + public class BodyCells : BaseModel + { + /// + /// A string value in the format `columnHeader-x-y`, where `x` and `y` are the begin and end offsets of this + /// column header cell in the input document. + /// + [JsonProperty("cell_id", NullValueHandling = NullValueHandling.Ignore)] + public string CellId { get; set; } + /// + /// The numeric location of the identified element in the document, represented with two integers labeled + /// `begin` and `end`. + /// + [JsonProperty("location", NullValueHandling = NullValueHandling.Ignore)] + public Location Location { get; set; } + /// + /// The textual contents of this cell from the input document without associated markup content. + /// + [JsonProperty("text", NullValueHandling = NullValueHandling.Ignore)] + public string Text { get; set; } + /// + /// The `begin` index of this cell's `row` location in the current table. + /// + [JsonProperty("row_index_begin", NullValueHandling = NullValueHandling.Ignore)] + public long? RowIndexBegin { get; set; } + /// + /// The `end` index of this cell's `row` location in the current table. + /// + [JsonProperty("row_index_end", NullValueHandling = NullValueHandling.Ignore)] + public long? RowIndexEnd { get; set; } + /// + /// The `begin` index of this cell's `column` location in the current table. + /// + [JsonProperty("column_index_begin", NullValueHandling = NullValueHandling.Ignore)] + public long? ColumnIndexBegin { get; set; } + /// + /// The `end` index of this cell's `column` location in the current table. + /// + [JsonProperty("column_index_end", NullValueHandling = NullValueHandling.Ignore)] + public long? ColumnIndexEnd { get; set; } + /// + /// Gets or Sets RowHeaderIds + /// + [JsonProperty("row_header_ids", NullValueHandling = NullValueHandling.Ignore)] + public List RowHeaderIds { get; set; } + /// + /// Gets or Sets RowHeaderTexts + /// + [JsonProperty("row_header_texts", NullValueHandling = NullValueHandling.Ignore)] + public List RowHeaderTexts { get; set; } + /// + /// Gets or Sets RowHeaderTextsNormalized + /// + [JsonProperty("row_header_texts_normalized", NullValueHandling = NullValueHandling.Ignore)] + public List RowHeaderTextsNormalized { get; set; } + /// + /// Gets or Sets ColumnHeaderIds + /// + [JsonProperty("column_header_ids", NullValueHandling = NullValueHandling.Ignore)] + public List ColumnHeaderIds { get; set; } + /// + /// Gets or Sets ColumnHeaderTexts + /// + [JsonProperty("column_header_texts", NullValueHandling = NullValueHandling.Ignore)] + public List ColumnHeaderTexts { get; set; } + /// + /// Gets or Sets ColumnHeaderTextsNormalized + /// + [JsonProperty("column_header_texts_normalized", NullValueHandling = NullValueHandling.Ignore)] + public List ColumnHeaderTextsNormalized { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Category.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Category.cs new file mode 100644 index 0000000000..0ab60eec84 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Category.cs @@ -0,0 +1,197 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using System.Collections.Generic; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// Information defining an element's subject matter. + /// + public class Category : BaseModel + { + /// + /// The category of the associated element. + /// + /// + /// The category of the associated element. + /// + [JsonConverter(typeof(StringEnumConverter))] + public enum LabelEnum + { + + /// + /// Enum AMENDMENTS for Amendments + /// + [EnumMember(Value = "Amendments")] + AMENDMENTS, + + /// + /// Enum ASSET_USE for Asset Use + /// + [EnumMember(Value = "Asset Use")] + ASSET_USE, + + /// + /// Enum ASSIGNMENTS for Assignments + /// + [EnumMember(Value = "Assignments")] + ASSIGNMENTS, + + /// + /// Enum AUDITS for Audits + /// + [EnumMember(Value = "Audits")] + AUDITS, + + /// + /// Enum BUSINESS_CONTINUITY for Business Continuity + /// + [EnumMember(Value = "Business Continuity")] + BUSINESS_CONTINUITY, + + /// + /// Enum COMMUNICATION for Communication + /// + [EnumMember(Value = "Communication")] + COMMUNICATION, + + /// + /// Enum CONFIDENTIALITY for Confidentiality + /// + [EnumMember(Value = "Confidentiality")] + CONFIDENTIALITY, + + /// + /// Enum DELIVERABLES for Deliverables + /// + [EnumMember(Value = "Deliverables")] + DELIVERABLES, + + /// + /// Enum DELIVERY for Delivery + /// + [EnumMember(Value = "Delivery")] + DELIVERY, + + /// + /// Enum DISPUTE_RESOLUTION for Dispute Resolution + /// + [EnumMember(Value = "Dispute Resolution")] + DISPUTE_RESOLUTION, + + /// + /// Enum FORCE_MAJEURE for Force Majeure + /// + [EnumMember(Value = "Force Majeure")] + FORCE_MAJEURE, + + /// + /// Enum INDEMNIFICATION for Indemnification + /// + [EnumMember(Value = "Indemnification")] + INDEMNIFICATION, + + /// + /// Enum INSURANCE for Insurance + /// + [EnumMember(Value = "Insurance")] + INSURANCE, + + /// + /// Enum INTELLECTUAL_PROPERTY for Intellectual Property + /// + [EnumMember(Value = "Intellectual Property")] + INTELLECTUAL_PROPERTY, + + /// + /// Enum LIABILITY for Liability + /// + [EnumMember(Value = "Liability")] + LIABILITY, + + /// + /// Enum PAYMENT_TERMS_&_BILLING for Payment Terms & Billing + /// + [EnumMember(Value = "Payment Terms & Billing")] + PAYMENT_TERMS_AND_BILLING, + + /// + /// Enum PRICING_&_TAXES for Pricing & Taxes + /// + [EnumMember(Value = "Pricing & Taxes")] + PRICING_AND_TAXES, + + /// + /// Enum PRIVACY for Privacy + /// + [EnumMember(Value = "Privacy")] + PRIVACY, + + /// + /// Enum RESPONSIBILITIES for Responsibilities + /// + [EnumMember(Value = "Responsibilities")] + RESPONSIBILITIES, + + /// + /// Enum SAFETY_AND_SECURITY for Safety and Security + /// + [EnumMember(Value = "Safety and Security")] + SAFETY_AND_SECURITY, + + /// + /// Enum SCOPE_OF_WORK for Scope of Work + /// + [EnumMember(Value = "Scope of Work")] + SCOPE_OF_WORK, + + /// + /// Enum SUBCONTRACTS for Subcontracts + /// + [EnumMember(Value = "Subcontracts")] + SUBCONTRACTS, + + /// + /// Enum TERM_&_TERMINATION for Term & Termination + /// + [EnumMember(Value = "Term & Termination")] + TERM_AND_TERMINATION, + + /// + /// Enum WARRANTIES for Warranties + /// + [EnumMember(Value = "Warranties")] + WARRANTIES + } + + /// + /// The category of the associated element. + /// + [JsonProperty("label", NullValueHandling = NullValueHandling.Ignore)] + public LabelEnum? Label { get; set; } + /// + /// One or more hashed values that you can send to IBM to provide feedback or receive support. + /// + [JsonProperty("provenance_ids", NullValueHandling = NullValueHandling.Ignore)] + public List ProvenanceIds { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/ClassifyReturn.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/ClassifyReturn.cs new file mode 100644 index 0000000000..d9a3a7673f --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/ClassifyReturn.cs @@ -0,0 +1,81 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using System.Collections.Generic; +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// The analysis of objects returned by the `/v1/element_classification` method. + /// + public class ClassifyReturn : BaseModel + { + /// + /// Basic information about the input document. + /// + [JsonProperty("document", NullValueHandling = NullValueHandling.Ignore)] + public Document Document { get; set; } + /// + /// The analysis model used to classify the input document. For the `/v1/element_classification` method, the + /// only valid value is `contracts`. + /// + [JsonProperty("model_id", NullValueHandling = NullValueHandling.Ignore)] + public string ModelId { get; set; } + /// + /// The version of the analysis model identified by the value of the `model_id` key. + /// + [JsonProperty("model_version", NullValueHandling = NullValueHandling.Ignore)] + public string ModelVersion { get; set; } + /// + /// Document elements identified by the service. + /// + [JsonProperty("elements", NullValueHandling = NullValueHandling.Ignore)] + public List Elements { get; set; } + /// + /// Definition of tables identified in the input document. + /// + [JsonProperty("tables", NullValueHandling = NullValueHandling.Ignore)] + public List Tables { get; set; } + /// + /// The structure of the input document. + /// + [JsonProperty("document_structure", NullValueHandling = NullValueHandling.Ignore)] + public DocStructure DocumentStructure { get; set; } + /// + /// Definitions of the parties identified in the input document. + /// + [JsonProperty("parties", NullValueHandling = NullValueHandling.Ignore)] + public List Parties { get; set; } + /// + /// The effective dates of the input document. + /// + [JsonProperty("effective_dates", NullValueHandling = NullValueHandling.Ignore)] + public List EffectiveDates { get; set; } + /// + /// The monetary amounts identified in the input document. + /// + [JsonProperty("contract_amounts", NullValueHandling = NullValueHandling.Ignore)] + public List ContractAmounts { get; set; } + /// + /// The input document's termination dates. + /// + [JsonProperty("termination_dates", NullValueHandling = NullValueHandling.Ignore)] + public List TerminationDates { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/ColumnHeaderIds.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/ColumnHeaderIds.cs new file mode 100644 index 0000000000..35fc6075ae --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/ColumnHeaderIds.cs @@ -0,0 +1,34 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// An array of values, each being the `id` value of a column header that is applicable to the current cell. + /// + public class ColumnHeaderIds : BaseModel + { + /// + /// The `id` value of a column header. + /// + [JsonProperty("id", NullValueHandling = NullValueHandling.Ignore)] + public string Id { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/ColumnHeaderTexts.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/ColumnHeaderTexts.cs new file mode 100644 index 0000000000..bbfffbae16 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/ColumnHeaderTexts.cs @@ -0,0 +1,34 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// An array of values, each being the `text` value of a column header that is applicable to the current cell. + /// + public class ColumnHeaderTexts : BaseModel + { + /// + /// The `text` value of a column header. + /// + [JsonProperty("text", NullValueHandling = NullValueHandling.Ignore)] + public string Text { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/ColumnHeaderTextsNormalized.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/ColumnHeaderTextsNormalized.cs new file mode 100644 index 0000000000..7a3287a24a --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/ColumnHeaderTextsNormalized.cs @@ -0,0 +1,35 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// If you provide customization input, the normalized version of the column header texts according to the + /// customization; otherwise, the same value as `column_header_texts`. + /// + public class ColumnHeaderTextsNormalized : BaseModel + { + /// + /// The normalized version of a column header text. + /// + [JsonProperty("text_normalized", NullValueHandling = NullValueHandling.Ignore)] + public string TextNormalized { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/ColumnHeaders.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/ColumnHeaders.cs new file mode 100644 index 0000000000..2c736c0deb --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/ColumnHeaders.cs @@ -0,0 +1,73 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// Column-level cells, each applicable as a header to other cells in the same column as itself, of the current + /// table. + /// + public class ColumnHeaders : BaseModel + { + /// + /// A string value in the format `columnHeader-x-y`, where `x` and `y` are the begin and end offsets of this + /// column header cell in the input document. + /// + [JsonProperty("cell_id", NullValueHandling = NullValueHandling.Ignore)] + public string CellId { get; set; } + /// + /// The numeric location of the identified element in the document, represented with two integers labeled + /// `begin` and `end`. + /// + [JsonProperty("location", NullValueHandling = NullValueHandling.Ignore)] + public Location Location { get; set; } + /// + /// The textual contents of this cell from the input document without associated markup content. + /// + [JsonProperty("text", NullValueHandling = NullValueHandling.Ignore)] + public string Text { get; set; } + /// + /// If you provide customization input, the normalized version of the cell text according to the customization; + /// otherwise, the same value as `text`. + /// + [JsonProperty("text_normalized", NullValueHandling = NullValueHandling.Ignore)] + public string TextNormalized { get; set; } + /// + /// The `begin` index of this cell's `row` location in the current table. + /// + [JsonProperty("row_index_begin", NullValueHandling = NullValueHandling.Ignore)] + public long? RowIndexBegin { get; set; } + /// + /// The `end` index of this cell's `row` location in the current table. + /// + [JsonProperty("row_index_end", NullValueHandling = NullValueHandling.Ignore)] + public long? RowIndexEnd { get; set; } + /// + /// The `begin` index of this cell's `column` location in the current table. + /// + [JsonProperty("column_index_begin", NullValueHandling = NullValueHandling.Ignore)] + public long? ColumnIndexBegin { get; set; } + /// + /// The `end` index of this cell's `column` location in the current table. + /// + [JsonProperty("column_index_end", NullValueHandling = NullValueHandling.Ignore)] + public long? ColumnIndexEnd { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/CompareReturn.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/CompareReturn.cs new file mode 100644 index 0000000000..858e5b1f07 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/CompareReturn.cs @@ -0,0 +1,56 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using System.Collections.Generic; +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// The comparison of the two submitted documents. + /// + public class CompareReturn : BaseModel + { + /// + /// Information about the documents being compared. + /// + [JsonProperty("documents", NullValueHandling = NullValueHandling.Ignore)] + public List Documents { get; set; } + /// + /// A list of pairs of elements that semantically align between the compared documents. + /// + [JsonProperty("aligned_elements", NullValueHandling = NullValueHandling.Ignore)] + public List AlignedElements { get; set; } + /// + /// A list of elements that do not semantically align between the compared documents. + /// + [JsonProperty("unaligned_elements", NullValueHandling = NullValueHandling.Ignore)] + public List UnalignedElements { get; set; } + /// + /// The analysis model used to classify the input document. For the `/v1/element_classification` method, the + /// only valid value is `contracts`. + /// + [JsonProperty("model_id", NullValueHandling = NullValueHandling.Ignore)] + public string ModelId { get; set; } + /// + /// The version of the analysis model identified by the value of the `model_id` key. + /// + [JsonProperty("model_version", NullValueHandling = NullValueHandling.Ignore)] + public string ModelVersion { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Contact.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Contact.cs new file mode 100644 index 0000000000..d3423757a5 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Contact.cs @@ -0,0 +1,39 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// A contact. + /// + public class Contact : BaseModel + { + /// + /// A string listing the name of the contact. + /// + [JsonProperty("name", NullValueHandling = NullValueHandling.Ignore)] + public string Name { get; set; } + /// + /// A string listing the role of the contact. + /// + [JsonProperty("role", NullValueHandling = NullValueHandling.Ignore)] + public string Role { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/ContractAmts.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/ContractAmts.cs new file mode 100644 index 0000000000..8124b9ea10 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/ContractAmts.cs @@ -0,0 +1,40 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// A monetary amount identified in the input document. + /// + public class ContractAmts : BaseModel + { + /// + /// The monetary amount. + /// + [JsonProperty("text", NullValueHandling = NullValueHandling.Ignore)] + public string Text { get; set; } + /// + /// The numeric location of the identified element in the document, represented with two integers labeled + /// `begin` and `end`. + /// + [JsonProperty("location", NullValueHandling = NullValueHandling.Ignore)] + public Location Location { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/DocCounts.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/DocCounts.cs new file mode 100644 index 0000000000..bd216078c5 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/DocCounts.cs @@ -0,0 +1,49 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// Document counts. + /// + public class DocCounts : BaseModel + { + /// + /// Total number of documents. + /// + [JsonProperty("total", NullValueHandling = NullValueHandling.Ignore)] + public long? Total { get; set; } + /// + /// Number of pending documents. + /// + [JsonProperty("pending", NullValueHandling = NullValueHandling.Ignore)] + public long? Pending { get; set; } + /// + /// Number of documents successfully processed. + /// + [JsonProperty("successful", NullValueHandling = NullValueHandling.Ignore)] + public long? Successful { get; set; } + /// + /// Number of documents not successfully processed. + /// + [JsonProperty("failed", NullValueHandling = NullValueHandling.Ignore)] + public long? Failed { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/DocInfo.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/DocInfo.cs new file mode 100644 index 0000000000..37c0d47783 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/DocInfo.cs @@ -0,0 +1,45 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// Information about the parsed input document. + /// + public class DocInfo : BaseModel + { + /// + /// The full text of the parsed document in HTML format. + /// + [JsonProperty("html", NullValueHandling = NullValueHandling.Ignore)] + public string Html { get; set; } + /// + /// The title of the parsed document. If the service did not detect a title, the value of this element is + /// `null`. + /// + [JsonProperty("title", NullValueHandling = NullValueHandling.Ignore)] + public string Title { get; set; } + /// + /// The MD5 hash of the input document. + /// + [JsonProperty("hash", NullValueHandling = NullValueHandling.Ignore)] + public string Hash { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/DocStructure.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/DocStructure.cs new file mode 100644 index 0000000000..b9212d8a5d --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/DocStructure.cs @@ -0,0 +1,41 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using System.Collections.Generic; +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// The structure of the input document. + /// + public class DocStructure : BaseModel + { + /// + /// An array containing one object per section or subsection identified in the input document. + /// + [JsonProperty("section_titles", NullValueHandling = NullValueHandling.Ignore)] + public List SectionTitles { get; set; } + /// + /// An array containing one object per section or subsection, in parallel with the `section_titles` array, that + /// details the leading sentences in the corresponding section or subsection. + /// + [JsonProperty("leading_sentences", NullValueHandling = NullValueHandling.Ignore)] + public List LeadingSentences { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Document.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Document.cs new file mode 100644 index 0000000000..9b35e2d708 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Document.cs @@ -0,0 +1,49 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// Basic information about the input document. + /// + public class Document : BaseModel + { + /// + /// Document title, if detected. + /// + [JsonProperty("title", NullValueHandling = NullValueHandling.Ignore)] + public string Title { get; set; } + /// + /// The input document converted into HTML format. + /// + [JsonProperty("html", NullValueHandling = NullValueHandling.Ignore)] + public string Html { get; set; } + /// + /// The MD5 hash value of the input document. + /// + [JsonProperty("hash", NullValueHandling = NullValueHandling.Ignore)] + public string Hash { get; set; } + /// + /// The label applied to the input document with the calling method's `file1_label` or `file2_label` value. + /// + [JsonProperty("label", NullValueHandling = NullValueHandling.Ignore)] + public string Label { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/EffectiveDates.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/EffectiveDates.cs new file mode 100644 index 0000000000..8853628e66 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/EffectiveDates.cs @@ -0,0 +1,40 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// An effective date. + /// + public class EffectiveDates : BaseModel + { + /// + /// The effective date, listed as a string. + /// + [JsonProperty("text", NullValueHandling = NullValueHandling.Ignore)] + public string Text { get; set; } + /// + /// The numeric location of the identified element in the document, represented with two integers labeled + /// `begin` and `end`. + /// + [JsonProperty("location", NullValueHandling = NullValueHandling.Ignore)] + public Location Location { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Element.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Element.cs new file mode 100644 index 0000000000..6a81e0243f --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Element.cs @@ -0,0 +1,57 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using System.Collections.Generic; +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// A component part of the document. + /// + public class Element : BaseModel + { + /// + /// The numeric location of the identified element in the document, represented with two integers labeled + /// `begin` and `end`. + /// + [JsonProperty("location", NullValueHandling = NullValueHandling.Ignore)] + public Location Location { get; set; } + /// + /// The text of the element. + /// + [JsonProperty("text", NullValueHandling = NullValueHandling.Ignore)] + public string Text { get; set; } + /// + /// Description of the action specified by the element and whom it affects. + /// + [JsonProperty("types", NullValueHandling = NullValueHandling.Ignore)] + public List Types { get; set; } + /// + /// List of functional categories into which the element falls; in other words, the subject matter of the + /// element. + /// + [JsonProperty("categories", NullValueHandling = NullValueHandling.Ignore)] + public List Categories { get; set; } + /// + /// List of document attributes. + /// + [JsonProperty("attributes", NullValueHandling = NullValueHandling.Ignore)] + public List Attributes { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/ElementLocations.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/ElementLocations.cs new file mode 100644 index 0000000000..efe33b4852 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/ElementLocations.cs @@ -0,0 +1,39 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// A list of `begin` and `end` indexes that indicate the locations of the elements in the input document. + /// + public class ElementLocations : BaseModel + { + /// + /// An integer that indicates the starting position of the element in the input document. + /// + [JsonProperty("begin", NullValueHandling = NullValueHandling.Ignore)] + public long? Begin { get; set; } + /// + /// An integer that indicates the ending position of the element in the input document. + /// + [JsonProperty("end", NullValueHandling = NullValueHandling.Ignore)] + public long? End { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/ElementPair.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/ElementPair.cs new file mode 100644 index 0000000000..b7b1491c04 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/ElementPair.cs @@ -0,0 +1,63 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using System.Collections.Generic; +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// Details of semantically aligned elements. + /// + public class ElementPair : BaseModel + { + /// + /// The label of the document (that is, the value of either the `file_1_label` or `file_2_label` parameters) in + /// which the element occurs. + /// + [JsonProperty("document_label", NullValueHandling = NullValueHandling.Ignore)] + public string DocumentLabel { get; set; } + /// + /// The text of the element. + /// + [JsonProperty("text", NullValueHandling = NullValueHandling.Ignore)] + public string Text { get; set; } + /// + /// The numeric location of the identified element in the document, represented with two integers labeled + /// `begin` and `end`. + /// + [JsonProperty("location", NullValueHandling = NullValueHandling.Ignore)] + public Location Location { get; set; } + /// + /// Description of the action specified by the element and whom it affects. + /// + [JsonProperty("types", NullValueHandling = NullValueHandling.Ignore)] + public List Types { get; set; } + /// + /// List of functional categories into which the element falls; in other words, the subject matter of the + /// element. + /// + [JsonProperty("categories", NullValueHandling = NullValueHandling.Ignore)] + public List Categories { get; set; } + /// + /// List of document attributes. + /// + [JsonProperty("attributes", NullValueHandling = NullValueHandling.Ignore)] + public List Attributes { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/FeedbackDataInput.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/FeedbackDataInput.cs new file mode 100644 index 0000000000..e81d25f2a5 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/FeedbackDataInput.cs @@ -0,0 +1,80 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// Feedback data for submission. + /// + public class FeedbackDataInput : BaseModel + { + /// + /// An optional identifier of the user submitting feedback. + /// + [JsonProperty("user_id", NullValueHandling = NullValueHandling.Ignore)] + public string UserId { get; set; } + /// + /// An optional comment about the feedback. + /// + [JsonProperty("comment", NullValueHandling = NullValueHandling.Ignore)] + public string Comment { get; set; } + /// + /// The type of feedback. The only permitted value is `element_classification`. + /// + [JsonProperty("feedback_type", NullValueHandling = NullValueHandling.Ignore)] + public string FeedbackType { get; set; } + /// + /// Brief information about the input document. + /// + [JsonProperty("document", NullValueHandling = NullValueHandling.Ignore)] + public ShortDoc Document { get; set; } + /// + /// An optional string identifying the model ID. The only permitted value is `contracts`. + /// + [JsonProperty("model_id", NullValueHandling = NullValueHandling.Ignore)] + public string ModelId { get; set; } + /// + /// An optional string identifying the version of the model used. + /// + [JsonProperty("model_version", NullValueHandling = NullValueHandling.Ignore)] + public string ModelVersion { get; set; } + /// + /// The numeric location of the identified element in the document, represented with two integers labeled + /// `begin` and `end`. + /// + [JsonProperty("location", NullValueHandling = NullValueHandling.Ignore)] + public Location Location { get; set; } + /// + /// The text on which to submit feedback. + /// + [JsonProperty("text", NullValueHandling = NullValueHandling.Ignore)] + public string Text { get; set; } + /// + /// The original labeling from the input document, without the submitted feedback. + /// + [JsonProperty("original_labels", NullValueHandling = NullValueHandling.Ignore)] + public OriginalLabelsIn OriginalLabels { get; set; } + /// + /// The updated labeling from the input document, accounting for the submitted feedback. + /// + [JsonProperty("updated_labels", NullValueHandling = NullValueHandling.Ignore)] + public UpdatedLabelsIn UpdatedLabels { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/FeedbackDataOutput.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/FeedbackDataOutput.cs new file mode 100644 index 0000000000..1157d10820 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/FeedbackDataOutput.cs @@ -0,0 +1,75 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// Information returned from the `POST /v1/feedback` method. + /// + public class FeedbackDataOutput : BaseModel + { + /// + /// A string identifying the user adding the feedback. The only permitted value is `element_classification`. + /// + [JsonProperty("feedback_type", NullValueHandling = NullValueHandling.Ignore)] + public string FeedbackType { get; set; } + /// + /// Brief information about the input document. + /// + [JsonProperty("document", NullValueHandling = NullValueHandling.Ignore)] + public ShortDoc Document { get; set; } + /// + /// An optional string identifying the model ID. The only permitted value is `contracts`. + /// + [JsonProperty("model_id", NullValueHandling = NullValueHandling.Ignore)] + public string ModelId { get; set; } + /// + /// An optional string identifying the version of the model used. + /// + [JsonProperty("model_version", NullValueHandling = NullValueHandling.Ignore)] + public string ModelVersion { get; set; } + /// + /// The numeric location of the identified element in the document, represented with two integers labeled + /// `begin` and `end`. + /// + [JsonProperty("location", NullValueHandling = NullValueHandling.Ignore)] + public Location Location { get; set; } + /// + /// The text to which the feedback applies. + /// + [JsonProperty("text", NullValueHandling = NullValueHandling.Ignore)] + public string Text { get; set; } + /// + /// The original labeling from the input document, without the submitted feedback. + /// + [JsonProperty("original_labels", NullValueHandling = NullValueHandling.Ignore)] + public OriginalLabelsOut OriginalLabels { get; set; } + /// + /// The updated labeling from the input document, accounting for the submitted feedback. + /// + [JsonProperty("updated_labels", NullValueHandling = NullValueHandling.Ignore)] + public UpdatedLabelsOut UpdatedLabels { get; set; } + /// + /// Pagination details, if required by the length of the output. + /// + [JsonProperty("pagination", NullValueHandling = NullValueHandling.Ignore)] + public Pagination Pagination { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/FeedbackDeleted.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/FeedbackDeleted.cs new file mode 100644 index 0000000000..49b50d1d3d --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/FeedbackDeleted.cs @@ -0,0 +1,39 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// The status and message of the deletion request. + /// + public class FeedbackDeleted : BaseModel + { + /// + /// HTTP return code. + /// + [JsonProperty("status", NullValueHandling = NullValueHandling.Ignore)] + public long? Status { get; set; } + /// + /// Status message returned from the service. + /// + [JsonProperty("message", NullValueHandling = NullValueHandling.Ignore)] + public string Message { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/FeedbackInput.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/FeedbackInput.cs new file mode 100644 index 0000000000..bcf4ce6519 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/FeedbackInput.cs @@ -0,0 +1,44 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// The feedback to be added to an element in the document. + /// + public class FeedbackInput : BaseModel + { + /// + /// An optional string identifying the user. + /// + [JsonProperty("user_id", NullValueHandling = NullValueHandling.Ignore)] + public string UserId { get; set; } + /// + /// An optional comment on or description of the feedback. + /// + [JsonProperty("comment", NullValueHandling = NullValueHandling.Ignore)] + public string Comment { get; set; } + /// + /// Feedback data for submission. + /// + [JsonProperty("feedback_data", NullValueHandling = NullValueHandling.Ignore)] + public FeedbackDataInput FeedbackData { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/FeedbackList.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/FeedbackList.cs new file mode 100644 index 0000000000..bee9300d61 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/FeedbackList.cs @@ -0,0 +1,35 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using System.Collections.Generic; +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// The results of a successful `GET /v1/feedback` request. + /// + public class FeedbackList : BaseModel + { + /// + /// A list of all feedback for the document. + /// + [JsonProperty("feedback", NullValueHandling = NullValueHandling.Ignore)] + public List Feedback { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/FeedbackReturn.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/FeedbackReturn.cs new file mode 100644 index 0000000000..2a4e5e701c --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/FeedbackReturn.cs @@ -0,0 +1,55 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using Newtonsoft.Json; +using System; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// Information about the document and the submitted feedback. + /// + public class FeedbackReturn : BaseModel + { + /// + /// The unique ID of the feedback object. + /// + [JsonProperty("feedback_id", NullValueHandling = NullValueHandling.Ignore)] + public string FeedbackId { get; set; } + /// + /// An optional string identifying the person submitting feedback. + /// + [JsonProperty("user_id", NullValueHandling = NullValueHandling.Ignore)] + public string UserId { get; set; } + /// + /// An optional comment from the person submitting the feedback. + /// + [JsonProperty("comment", NullValueHandling = NullValueHandling.Ignore)] + public string Comment { get; set; } + /// + /// Timestamp listing the creation time of the feedback submission. + /// + [JsonProperty("created", NullValueHandling = NullValueHandling.Ignore)] + public DateTime? Created { get; set; } + /// + /// Information returned from the `POST /v1/feedback` method. + /// + [JsonProperty("feedback_data", NullValueHandling = NullValueHandling.Ignore)] + public FeedbackDataOutput FeedbackData { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/GetFeedback.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/GetFeedback.cs new file mode 100644 index 0000000000..581b4cce8c --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/GetFeedback.cs @@ -0,0 +1,50 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using Newtonsoft.Json; +using System; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// The results of a single feedback query. + /// + public class GetFeedback : BaseModel + { + /// + /// A string uniquely identifying the feedback entry. + /// + [JsonProperty("feedback_id", NullValueHandling = NullValueHandling.Ignore)] + public string FeedbackId { get; set; } + /// + /// A timestamp identifying the creation time of the feedback entry. + /// + [JsonProperty("created", NullValueHandling = NullValueHandling.Ignore)] + public DateTime? Created { get; set; } + /// + /// A string containing the user's comment about the feedback entry. + /// + [JsonProperty("comment", NullValueHandling = NullValueHandling.Ignore)] + public string Comment { get; set; } + /// + /// Information returned from the `POST /v1/feedback` method. + /// + [JsonProperty("feedback_data", NullValueHandling = NullValueHandling.Ignore)] + public FeedbackDataOutput FeedbackData { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/HTMLReturn.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/HTMLReturn.cs new file mode 100644 index 0000000000..fdc15472b8 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/HTMLReturn.cs @@ -0,0 +1,54 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// The HTML converted from an input document. + /// + public class HTMLReturn : BaseModel + { + /// + /// The number of pages in the input document. + /// + [JsonProperty("num_pages", NullValueHandling = NullValueHandling.Ignore)] + public string NumPages { get; set; } + /// + /// The author of the input document, if identified. + /// + [JsonProperty("author", NullValueHandling = NullValueHandling.Ignore)] + public string Author { get; set; } + /// + /// The publication date of the input document, if identified. + /// + [JsonProperty("publication_date", NullValueHandling = NullValueHandling.Ignore)] + public string PublicationDate { get; set; } + /// + /// The title of the input document, if identified. + /// + [JsonProperty("title", NullValueHandling = NullValueHandling.Ignore)] + public string Title { get; set; } + /// + /// The HTML version of the input document. + /// + [JsonProperty("html", NullValueHandling = NullValueHandling.Ignore)] + public string Html { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Label.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Label.cs new file mode 100644 index 0000000000..3d7729e73a --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Label.cs @@ -0,0 +1,40 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// A pair of `nature` and `party` objects. The `nature` object identifies the effect of the element on the + /// identified `party`, and the `party` object identifies the affected party. + /// + public class Label : BaseModel + { + /// + /// The identified `nature` of the element. + /// + [JsonProperty("nature", NullValueHandling = NullValueHandling.Ignore)] + public string Nature { get; set; } + /// + /// The identified `party` of the element. + /// + [JsonProperty("party", NullValueHandling = NullValueHandling.Ignore)] + public string Party { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/LeadingSentence.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/LeadingSentence.cs new file mode 100644 index 0000000000..8f47bdc868 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/LeadingSentence.cs @@ -0,0 +1,46 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using System.Collections.Generic; +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// The leading sentences in a section or subsection of the input document. + /// + public class LeadingSentence : BaseModel + { + /// + /// The text of the leading sentence. + /// + [JsonProperty("text", NullValueHandling = NullValueHandling.Ignore)] + public string Text { get; set; } + /// + /// The numeric location of the identified element in the document, represented with two integers labeled + /// `begin` and `end`. + /// + [JsonProperty("location", NullValueHandling = NullValueHandling.Ignore)] + public Location Location { get; set; } + /// + /// An array of `location` objects listing the locations of detected leading sentences. + /// + [JsonProperty("element_locations", NullValueHandling = NullValueHandling.Ignore)] + public List ElementLocations { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Location.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Location.cs new file mode 100644 index 0000000000..36f4e6d2f6 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Location.cs @@ -0,0 +1,40 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// The numeric location of the identified element in the document, represented with two integers labeled `begin` + /// and `end`. + /// + public class Location : BaseModel + { + /// + /// The element's `begin` index. + /// + [JsonProperty("begin", NullValueHandling = NullValueHandling.Ignore)] + public long? Begin { get; set; } + /// + /// The element's `end` index. + /// + [JsonProperty("end", NullValueHandling = NullValueHandling.Ignore)] + public long? End { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/OriginalLabelsIn.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/OriginalLabelsIn.cs new file mode 100644 index 0000000000..6a8693bfe6 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/OriginalLabelsIn.cs @@ -0,0 +1,41 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using System.Collections.Generic; +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// The original labeling from the input document, without the submitted feedback. + /// + public class OriginalLabelsIn : BaseModel + { + /// + /// Description of the action specified by the element and whom it affects. + /// + [JsonProperty("types", NullValueHandling = NullValueHandling.Ignore)] + public List Types { get; set; } + /// + /// List of functional categories into which the element falls; in other words, the subject matter of the + /// element. + /// + [JsonProperty("categories", NullValueHandling = NullValueHandling.Ignore)] + public List Categories { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/OriginalLabelsOut.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/OriginalLabelsOut.cs new file mode 100644 index 0000000000..6953eb8100 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/OriginalLabelsOut.cs @@ -0,0 +1,80 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using System.Collections.Generic; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// The original labeling from the input document, without the submitted feedback. + /// + public class OriginalLabelsOut : BaseModel + { + /// + /// A string identifying the type of modification the feedback entry in the `updated_labels` array. Possible + /// values are `added`, `not_changed`, and `removed`. + /// + /// + /// A string identifying the type of modification the feedback entry in the `updated_labels` array. Possible + /// values are `added`, `not_changed`, and `removed`. + /// + [JsonConverter(typeof(StringEnumConverter))] + public enum ModificationEnum + { + + /// + /// Enum ADDED for added + /// + [EnumMember(Value = "added")] + ADDED, + + /// + /// Enum NOT_CHANGED for not_changed + /// + [EnumMember(Value = "not_changed")] + NOT_CHANGED, + + /// + /// Enum REMOVED for removed + /// + [EnumMember(Value = "removed")] + REMOVED + } + + /// + /// A string identifying the type of modification the feedback entry in the `updated_labels` array. Possible + /// values are `added`, `not_changed`, and `removed`. + /// + [JsonProperty("modification", NullValueHandling = NullValueHandling.Ignore)] + public ModificationEnum? Modification { get; set; } + /// + /// Description of the action specified by the element and whom it affects. + /// + [JsonProperty("types", NullValueHandling = NullValueHandling.Ignore)] + public List Types { get; set; } + /// + /// List of functional categories into which the element falls; in other words, the subject matter of the + /// element. + /// + [JsonProperty("categories", NullValueHandling = NullValueHandling.Ignore)] + public List Categories { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Pagination.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Pagination.cs new file mode 100644 index 0000000000..4b4e820d13 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Pagination.cs @@ -0,0 +1,54 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// Pagination details, if required by the length of the output. + /// + public class Pagination : BaseModel + { + /// + /// A token identifying the current page of results. + /// + [JsonProperty("refresh_cursor", NullValueHandling = NullValueHandling.Ignore)] + public string RefreshCursor { get; set; } + /// + /// A token identifying the next page of results. + /// + [JsonProperty("next_cursor", NullValueHandling = NullValueHandling.Ignore)] + public string NextCursor { get; set; } + /// + /// The URL that returns the current page of results. + /// + [JsonProperty("refresh_url", NullValueHandling = NullValueHandling.Ignore)] + public string RefreshUrl { get; set; } + /// + /// The URL that returns the next page of results. + /// + [JsonProperty("next_url", NullValueHandling = NullValueHandling.Ignore)] + public string NextUrl { get; set; } + /// + /// Reserved for future use. + /// + [JsonProperty("total", NullValueHandling = NullValueHandling.Ignore)] + public long? Total { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Parties.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Parties.cs new file mode 100644 index 0000000000..8d599f3ad7 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Parties.cs @@ -0,0 +1,50 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using System.Collections.Generic; +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// A party and its corresponding role, including address and contact information if identified. + /// + public class Parties : BaseModel + { + /// + /// A string identifying the party. + /// + [JsonProperty("party", NullValueHandling = NullValueHandling.Ignore)] + public string Party { get; set; } + /// + /// A string identifying the party's role. + /// + [JsonProperty("role", NullValueHandling = NullValueHandling.Ignore)] + public string Role { get; set; } + /// + /// List of the party's address or addresses. + /// + [JsonProperty("addresses", NullValueHandling = NullValueHandling.Ignore)] + public List
Addresses { get; set; } + /// + /// List of the names and roles of contacts identified in the input document. + /// + [JsonProperty("contacts", NullValueHandling = NullValueHandling.Ignore)] + public List Contacts { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/RowHeaderIds.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/RowHeaderIds.cs new file mode 100644 index 0000000000..65393e1519 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/RowHeaderIds.cs @@ -0,0 +1,34 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// An array of values, each being the `id` value of a row header that is applicable to this body cell. + /// + public class RowHeaderIds : BaseModel + { + /// + /// The `id` values of a row header. + /// + [JsonProperty("id", NullValueHandling = NullValueHandling.Ignore)] + public string Id { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/RowHeaderTexts.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/RowHeaderTexts.cs new file mode 100644 index 0000000000..1be9a5d6b7 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/RowHeaderTexts.cs @@ -0,0 +1,34 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// An array of values, each being the `text` value of a row header that is applicable to this body cell. + /// + public class RowHeaderTexts : BaseModel + { + /// + /// The `text` value of a row header. + /// + [JsonProperty("text", NullValueHandling = NullValueHandling.Ignore)] + public string Text { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/RowHeaderTextsNormalized.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/RowHeaderTextsNormalized.cs new file mode 100644 index 0000000000..4354403d16 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/RowHeaderTextsNormalized.cs @@ -0,0 +1,35 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// If you provide customization input, the normalized version of the row header texts according to the + /// customization; otherwise, the same value as `row_header_texts`. + /// + public class RowHeaderTextsNormalized : BaseModel + { + /// + /// The normalized version of a row header text. + /// + [JsonProperty("text_normalized", NullValueHandling = NullValueHandling.Ignore)] + public string TextNormalized { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/RowHeaders.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/RowHeaders.cs new file mode 100644 index 0000000000..feb47e821f --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/RowHeaders.cs @@ -0,0 +1,72 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// Row-level cells, each applicable as a header to other cells in the same row as itself, of the current table. + /// + public class RowHeaders : BaseModel + { + /// + /// A string value in the format `rowHeader-x-y`, where `x` and `y` are the begin and end offsets of this row + /// header cell in the input document. + /// + [JsonProperty("cell_id", NullValueHandling = NullValueHandling.Ignore)] + public string CellId { get; set; } + /// + /// The numeric location of the identified element in the document, represented with two integers labeled + /// `begin` and `end`. + /// + [JsonProperty("location", NullValueHandling = NullValueHandling.Ignore)] + public Location Location { get; set; } + /// + /// The textual contents of this cell from the input document without associated markup content. + /// + [JsonProperty("text", NullValueHandling = NullValueHandling.Ignore)] + public string Text { get; set; } + /// + /// If you provide customization input, the normalized version of the cell text according to the customization; + /// otherwise, the same value as `text`. + /// + [JsonProperty("text_normalized", NullValueHandling = NullValueHandling.Ignore)] + public string TextNormalized { get; set; } + /// + /// The `begin` index of this cell's `row` location in the current table. + /// + [JsonProperty("row_index_begin", NullValueHandling = NullValueHandling.Ignore)] + public long? RowIndexBegin { get; set; } + /// + /// The `end` index of this cell's `row` location in the current table. + /// + [JsonProperty("row_index_end", NullValueHandling = NullValueHandling.Ignore)] + public long? RowIndexEnd { get; set; } + /// + /// The `begin` index of this cell's `column` location in the current table. + /// + [JsonProperty("column_index_begin", NullValueHandling = NullValueHandling.Ignore)] + public long? ColumnIndexBegin { get; set; } + /// + /// The `end` index of this cell's `column` location in the current table. + /// + [JsonProperty("column_index_end", NullValueHandling = NullValueHandling.Ignore)] + public long? ColumnIndexEnd { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/SectionTitle.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/SectionTitle.cs new file mode 100644 index 0000000000..107430a9d1 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/SectionTitle.cs @@ -0,0 +1,40 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// The table's section title, if identified. + /// + public class SectionTitle : BaseModel + { + /// + /// The text of the section title, if identified. + /// + [JsonProperty("text", NullValueHandling = NullValueHandling.Ignore)] + public string Text { get; set; } + /// + /// The numeric location of the identified element in the document, represented with two integers labeled + /// `begin` and `end`. + /// + [JsonProperty("location", NullValueHandling = NullValueHandling.Ignore)] + public Location Location { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/SectionTitles.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/SectionTitles.cs new file mode 100644 index 0000000000..e8611f4067 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/SectionTitles.cs @@ -0,0 +1,54 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using System.Collections.Generic; +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// An array containing one object per section or subsection detected in the input document. Sections and + /// subsections are not nested; instead, they are flattened out and can be placed back in order by using the `begin` + /// and `end` values of the element and the `level` value of the section. + /// + public class SectionTitles : BaseModel + { + /// + /// The text of the section title, if identified. + /// + [JsonProperty("text", NullValueHandling = NullValueHandling.Ignore)] + public string Text { get; set; } + /// + /// The numeric location of the identified element in the document, represented with two integers labeled + /// `begin` and `end`. + /// + [JsonProperty("location", NullValueHandling = NullValueHandling.Ignore)] + public Location Location { get; set; } + /// + /// An integer indicating the level at which the section is located in the input document. For example, `1` + /// represents a top-level section, `2` represents a subsection within the level `1` section, and so forth. + /// + [JsonProperty("level", NullValueHandling = NullValueHandling.Ignore)] + public long? Level { get; set; } + /// + /// An array of `location` objects listing the locations of detected section titles. + /// + [JsonProperty("element_locations", NullValueHandling = NullValueHandling.Ignore)] + public List ElementLocations { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/ShortDoc.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/ShortDoc.cs new file mode 100644 index 0000000000..93a79b28d6 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/ShortDoc.cs @@ -0,0 +1,39 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// Brief information about the input document. + /// + public class ShortDoc : BaseModel + { + /// + /// The title of the input document, if identified. + /// + [JsonProperty("title", NullValueHandling = NullValueHandling.Ignore)] + public string Title { get; set; } + /// + /// The MD5 hash of the input document. + /// + [JsonProperty("hash", NullValueHandling = NullValueHandling.Ignore)] + public string Hash { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/TableHeaders.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/TableHeaders.cs new file mode 100644 index 0000000000..f3a1a50813 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/TableHeaders.cs @@ -0,0 +1,66 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// The contents of the current table's header. + /// + public class TableHeaders : BaseModel + { + /// + /// String value in the format `tableHeader-x-y` where `x` and `y` are the `begin` and `end` offsets, + /// respectfully, of the cell value in the input document. + /// + [JsonProperty("cell_id", NullValueHandling = NullValueHandling.Ignore)] + public string CellId { get; set; } + /// + /// The numeric location of the identified element in the document, represented with two integers labeled + /// `begin` and `end`. + /// + [JsonProperty("location", NullValueHandling = NullValueHandling.Ignore)] + public Location Location { get; set; } + /// + /// The textual contents of the cell from the input document without associated markup content. + /// + [JsonProperty("text", NullValueHandling = NullValueHandling.Ignore)] + public string Text { get; set; } + /// + /// The `begin` index of this cell's `row` location in the current table. + /// + [JsonProperty("row_index_begin", NullValueHandling = NullValueHandling.Ignore)] + public long? RowIndexBegin { get; set; } + /// + /// The `end` index of this cell's `row` location in the current table. + /// + [JsonProperty("row_index_end", NullValueHandling = NullValueHandling.Ignore)] + public long? RowIndexEnd { get; set; } + /// + /// The `begin` index of this cell's `column` location in the current table. + /// + [JsonProperty("column_index_begin", NullValueHandling = NullValueHandling.Ignore)] + public long? ColumnIndexBegin { get; set; } + /// + /// The `end` index of this cell's `column` location in the current table. + /// + [JsonProperty("column_index_end", NullValueHandling = NullValueHandling.Ignore)] + public long? ColumnIndexEnd { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/TableReturn.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/TableReturn.cs new file mode 100644 index 0000000000..33a91bb5af --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/TableReturn.cs @@ -0,0 +1,50 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using System.Collections.Generic; +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// The analysis of the document's tables. + /// + public class TableReturn : BaseModel + { + /// + /// Information about the parsed input document. + /// + [JsonProperty("document", NullValueHandling = NullValueHandling.Ignore)] + public DocInfo Document { get; set; } + /// + /// The ID of the model used to extract the table contents. The value for table extraction is `tables`. + /// + [JsonProperty("model_id", NullValueHandling = NullValueHandling.Ignore)] + public string ModelId { get; set; } + /// + /// The version of the `tables` model ID. + /// + [JsonProperty("model_version", NullValueHandling = NullValueHandling.Ignore)] + public string ModelVersion { get; set; } + /// + /// Definitions of the tables identified in the input document. + /// + [JsonProperty("tables", NullValueHandling = NullValueHandling.Ignore)] + public List Tables { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Tables.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Tables.cs new file mode 100644 index 0000000000..cb2720c582 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/Tables.cs @@ -0,0 +1,69 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using System.Collections.Generic; +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// The contents of the tables extracted from a document. + /// + public class Tables : BaseModel + { + /// + /// The numeric location of the identified element in the document, represented with two integers labeled + /// `begin` and `end`. + /// + [JsonProperty("location", NullValueHandling = NullValueHandling.Ignore)] + public Location Location { get; set; } + /// + /// The textual contents of the current table from the input document without associated markup content. + /// + [JsonProperty("text", NullValueHandling = NullValueHandling.Ignore)] + public string Text { get; set; } + /// + /// The table's section title, if identified. + /// + [JsonProperty("section_title", NullValueHandling = NullValueHandling.Ignore)] + public SectionTitle SectionTitle { get; set; } + /// + /// An array of table-level cells that apply as headers to all the other cells in the current table. + /// + [JsonProperty("table_headers", NullValueHandling = NullValueHandling.Ignore)] + public List TableHeaders { get; set; } + /// + /// An array of row-level cells, each applicable as a header to other cells in the same row as itself, of the + /// current table. + /// + [JsonProperty("row_headers", NullValueHandling = NullValueHandling.Ignore)] + public List RowHeaders { get; set; } + /// + /// An array of column-level cells, each applicable as a header to other cells in the same column as itself, of + /// the current table. + /// + [JsonProperty("column_headers", NullValueHandling = NullValueHandling.Ignore)] + public List ColumnHeaders { get; set; } + /// + /// An array of cells that are neither table header nor column header nor row header cells, of the current table + /// with corresponding row and column header associations. + /// + [JsonProperty("body_cells", NullValueHandling = NullValueHandling.Ignore)] + public List BodyCells { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/TerminationDates.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/TerminationDates.cs new file mode 100644 index 0000000000..76ec4581c9 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/TerminationDates.cs @@ -0,0 +1,40 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// Termination dates identified in the input document. + /// + public class TerminationDates : BaseModel + { + /// + /// The termination date. + /// + [JsonProperty("text", NullValueHandling = NullValueHandling.Ignore)] + public string Text { get; set; } + /// + /// The numeric location of the identified element in the document, represented with two integers labeled + /// `begin` and `end`. + /// + [JsonProperty("location", NullValueHandling = NullValueHandling.Ignore)] + public Location Location { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/TypeLabel.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/TypeLabel.cs new file mode 100644 index 0000000000..8450619d52 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/TypeLabel.cs @@ -0,0 +1,41 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using System.Collections.Generic; +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// Identification of a specific type. + /// + public class TypeLabel : BaseModel + { + /// + /// A pair of `nature` and `party` objects. The `nature` object identifies the effect of the element on the + /// identified `party`, and the `party` object identifies the affected party. + /// + [JsonProperty("label", NullValueHandling = NullValueHandling.Ignore)] + public Label Label { get; set; } + /// + /// One or more hash values that you can send to IBM to provide feedback or receive support. + /// + [JsonProperty("provenance_ids", NullValueHandling = NullValueHandling.Ignore)] + public List ProvenanceIds { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/UnalignedElement.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/UnalignedElement.cs new file mode 100644 index 0000000000..6f48020867 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/UnalignedElement.cs @@ -0,0 +1,63 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using System.Collections.Generic; +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// Element that does not align semantically between two compared documents. + /// + public class UnalignedElement : BaseModel + { + /// + /// The label assigned to the document by the value of the `file_1_label` or `file_2_label` parameters on the + /// `/v1/compare` method. + /// + [JsonProperty("document_label", NullValueHandling = NullValueHandling.Ignore)] + public string DocumentLabel { get; set; } + /// + /// The numeric location of the identified element in the document, represented with two integers labeled + /// `begin` and `end`. + /// + [JsonProperty("location", NullValueHandling = NullValueHandling.Ignore)] + public Location Location { get; set; } + /// + /// The text of the element. + /// + [JsonProperty("text", NullValueHandling = NullValueHandling.Ignore)] + public string Text { get; set; } + /// + /// Description of the action specified by the element and whom it affects. + /// + [JsonProperty("types", NullValueHandling = NullValueHandling.Ignore)] + public List Types { get; set; } + /// + /// List of functional categories into which the element falls; in other words, the subject matter of the + /// element. + /// + [JsonProperty("categories", NullValueHandling = NullValueHandling.Ignore)] + public List Categories { get; set; } + /// + /// List of document attributes. + /// + [JsonProperty("attributes", NullValueHandling = NullValueHandling.Ignore)] + public List Attributes { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/UpdatedLabelsIn.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/UpdatedLabelsIn.cs new file mode 100644 index 0000000000..5c363f7639 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/UpdatedLabelsIn.cs @@ -0,0 +1,41 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using System.Collections.Generic; +using Newtonsoft.Json; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// The updated labeling from the input document, accounting for the submitted feedback. + /// + public class UpdatedLabelsIn : BaseModel + { + /// + /// Description of the action specified by the element and whom it affects. + /// + [JsonProperty("types", NullValueHandling = NullValueHandling.Ignore)] + public List Types { get; set; } + /// + /// List of functional categories into which the element falls; in other words, the subject matter of the + /// element. + /// + [JsonProperty("categories", NullValueHandling = NullValueHandling.Ignore)] + public List Categories { get; set; } + } + +} diff --git a/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/UpdatedLabelsOut.cs b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/UpdatedLabelsOut.cs new file mode 100644 index 0000000000..5c133585d8 --- /dev/null +++ b/src/IBM.WatsonDeveloperCloud.CompareComply.v1/Model/UpdatedLabelsOut.cs @@ -0,0 +1,80 @@ +/** +* Copyright 2018 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using System.Collections.Generic; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.Model +{ + /// + /// The updated labeling from the input document, accounting for the submitted feedback. + /// + public class UpdatedLabelsOut : BaseModel + { + /// + /// The type of modification the feedback entry in the `updated_labels` array. Possible values are `added`, + /// `not_changed`, and `removed`. + /// + /// + /// The type of modification the feedback entry in the `updated_labels` array. Possible values are `added`, + /// `not_changed`, and `removed`. + /// + [JsonConverter(typeof(StringEnumConverter))] + public enum ModificationEnum + { + + /// + /// Enum ADDED for added + /// + [EnumMember(Value = "added")] + ADDED, + + /// + /// Enum NOT_CHANGED for not_changed + /// + [EnumMember(Value = "not_changed")] + NOT_CHANGED, + + /// + /// Enum REMOVED for removed + /// + [EnumMember(Value = "removed")] + REMOVED + } + + /// + /// The type of modification the feedback entry in the `updated_labels` array. Possible values are `added`, + /// `not_changed`, and `removed`. + /// + [JsonProperty("modification", NullValueHandling = NullValueHandling.Ignore)] + public ModificationEnum? Modification { get; set; } + /// + /// Description of the action specified by the element and whom it affects. + /// + [JsonProperty("types", NullValueHandling = NullValueHandling.Ignore)] + public List Types { get; set; } + /// + /// List of functional categories into which the element falls; in other words, the subject matter of the + /// element. + /// + [JsonProperty("categories", NullValueHandling = NullValueHandling.Ignore)] + public List Categories { get; set; } + } + +} diff --git a/test/IBM.WatsonDeveloperCloud.CompareComply.v1.IT/CompareComplyServiceIntegrationTests.cs b/test/IBM.WatsonDeveloperCloud.CompareComply.v1.IT/CompareComplyServiceIntegrationTests.cs new file mode 100644 index 0000000000..1661aa7195 --- /dev/null +++ b/test/IBM.WatsonDeveloperCloud.CompareComply.v1.IT/CompareComplyServiceIntegrationTests.cs @@ -0,0 +1,310 @@ +/** +* Copyright 2017 IBM Corp. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +using IBM.WatsonDeveloperCloud.CompareComply.v1.Model; +using IBM.WatsonDeveloperCloud.Util; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.IO; + +namespace IBM.WatsonDeveloperCloud.CompareComply.v1.IT +{ + [TestClass] + public class CompareComplyServiceIntegrationTests + { + private static string username; + private static string password; + private static string endpoint; + private CompareComplyService service; + private static string credentials = string.Empty; + private readonly string versionDate = "2018-11-12"; + + private string contract_a = @"CompareComplyTestData/contract_A.pdf"; + private string contract_b = @"CompareComplyTestData/contract_B.pdf"; + private string tableFilePath = @"CompareComplyTestData/TestTable.pdf"; + private string objectStorageCredentialsInputFilepath; + private string objectStorageCredentialsOutputFilepath; + + [TestInitialize] + public void Setup() + { + #region Get Credentials + if (string.IsNullOrEmpty(credentials)) + { + var parentDirectory = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.Parent.Parent.Parent.Parent.FullName; + string credentialsFilepath = parentDirectory + Path.DirectorySeparatorChar + "sdk-credentials" + Path.DirectorySeparatorChar + "credentials.json"; + + objectStorageCredentialsInputFilepath = parentDirectory + Path.DirectorySeparatorChar + "sdk-credentials" + Path.DirectorySeparatorChar + "cloud-object-storage-credentials-input.json"; + objectStorageCredentialsOutputFilepath = parentDirectory + Path.DirectorySeparatorChar + "sdk-credentials" + Path.DirectorySeparatorChar + "cloud-object-storage-credentials-output.json"; + + //if (File.Exists(credentialsFilepath)) + //{ + // try + // { + // credentials = File.ReadAllText(credentialsFilepath); + // credentials = Utility.AddTopLevelObjectToJson(credentials, "VCAP_SERVICES"); + // } + // catch (Exception e) + // { + // throw new Exception(string.Format("Failed to load credentials: {0}", e.Message)); + // } + //} + //else + //{ + // Console.WriteLine("Credentials file does not exist."); + //} + + //VcapCredentials vcapCredentials = JsonConvert.DeserializeObject(credentials); + //var vcapServices = JObject.Parse(credentials); + + //Credential credential = vcapCredentials.GetCredentialByname("compare-comply-sdk")[0].Credentials; + //endpoint = credential.Url; + //username = credential.Username; + //password = credential.Password; + } + #endregion + + TokenOptions tokenOptions = new TokenOptions() + { + ServiceUrl = "https://gateway-s.watsonplatform.net/compare-comply/api", + IamUrl = "https://iam.stage1.bluemix.net/identity/token" + }; + + service = new CompareComplyService(tokenOptions, versionDate); + } + + #region HTML Conversion + [TestMethod] + public void HtmlConversion_Success() + { + using (FileStream fs = File.OpenRead(contract_a)) + { + var htmlConversionResult = service.ConvertToHtml(fs); + + Assert.IsNotNull(htmlConversionResult); + Assert.IsTrue(htmlConversionResult.Html != null); + Assert.IsTrue(htmlConversionResult.Html.Contains("AGREEMENT BETWEEN OWNER AND CONTRACTOR")); + } + } + #endregion + + #region Element Classification + [TestMethod] + public void ElementClassification_Success() + { + using (FileStream fs = File.OpenRead(contract_a)) + { + var elementClassificationResult = service.ClassifyElements(fs); + + Assert.IsNotNull(elementClassificationResult); + Assert.IsTrue(elementClassificationResult.Document.Title.Contains("Microsoft Word - contract_A.doc")); + } + } + #endregion + + #region Tables + [TestMethod] + public void ExtractTables_Success() + { + using (FileStream fs = File.OpenRead(tableFilePath)) + { + var extractTablesResult = service.ExtractTables(fs); + + Assert.IsNotNull(extractTablesResult); + Assert.IsTrue(extractTablesResult.Document.Title.Contains("Untitled spreadsheet")); + } + } + #endregion + + #region Comparision + [TestMethod] + public void Comparison_Success() + { + using (FileStream fs0 = File.OpenRead(contract_a)) + { + using (FileStream fs1 = File.OpenRead(contract_b)) + { + var comparisonResults = service.CompareDocuments(fs0, fs1); + + Assert.IsNotNull(comparisonResults); + Assert.IsTrue(comparisonResults.Documents[0].Title == "Microsoft Word - contract_A.doc"); + Assert.IsTrue(comparisonResults.Documents[1].Title == "Microsoft Word - contract_B.doc"); + } + } + } + #endregion + + #region Feedback + [TestMethod] + public void Feedback_Success() + { + var ListFeedbackResult = service.ListFeedback(); + + FeedbackInput feedbackData = new FeedbackInput() + { + UserId = "user_id_123x", + Comment = "Test feedback comment", + FeedbackData = new FeedbackDataInput() + { + FeedbackType = "element_classification", + Document = new ShortDoc() + { + Hash = "", + Title = "doc title" + }, + ModelId = "contracts", + ModelVersion = "11.00", + Location = new Location() + { + Begin = 241, + End = 237 + }, + Text = "1. IBM will provide a Senior Managing Consultant / expert resource, for up to 80 hours, to assist Florida Power & Light (FPL) with the creation of an IT infrastructure unit cost model for existing infrastructure.", + OriginalLabels = new OriginalLabelsIn() + { + Types = new List() + { + new TypeLabel() + { + Label = new Label() + { + Nature = "Obligation", + Party= "IBM" + }, + ProvenanceIds = new List() + { + "85f5981a-ba91-44f5-9efa-0bd22e64b7bc", + "ce0480a1-5ef1-4c3e-9861-3743b5610795" + } + }, + new TypeLabel() + { + Label = new Label() + { + Nature = "End User", + Party= "Exclusion" + }, + ProvenanceIds = new List() + { + "85f5981a-ba91-44f5-9efa-0bd22e64b7bc", + "ce0480a1-5ef1-4c3e-9861-3743b5610795" + } + } + }, + Categories = new List() + { + new Category() + { + Label = Category.LabelEnum.RESPONSIBILITIES, + ProvenanceIds = new List(){ } + }, + new Category() + { + Label = Category.LabelEnum.AMENDMENTS, + ProvenanceIds = new List(){ } + } + } + }, + UpdatedLabels = new UpdatedLabelsIn() + { + Types = new List() + { + new TypeLabel() + { + Label = new Label() + { + Nature = "Obligation", + Party = "IBM" + } + }, + new TypeLabel() + { + Label = new Label() + { + Nature = "Disclaimer", + Party = "buyer" + } + } + }, + Categories = new List() + { + new Category() + { + Label = Category.LabelEnum.RESPONSIBILITIES, + }, + new Category() + { + Label = Category.LabelEnum.AUDITS + } + } + } + } + }; + var addFeedbackResult = service.AddFeedback(feedbackData); + string feedbackId = addFeedbackResult.FeedbackId; + + var getFeedbackResult = service.GetFeedback(feedbackId); + + var deleteFeedbackResult = service.DeleteFeedback(feedbackId); + + Assert.IsNotNull(deleteFeedbackResult); + Assert.IsNotNull(getFeedbackResult); + Assert.IsNotNull(addFeedbackResult); + Assert.IsNotNull(ListFeedbackResult); + } + #endregion + + #region Batches + [TestMethod] + public void Batches_Success() + { + var getBatchesResult = service.GetBatches(); + string batchId = ""; + + using (FileStream fsInput = File.OpenRead(objectStorageCredentialsInputFilepath)) + { + using (FileStream fsOutput = File.OpenRead(objectStorageCredentialsOutputFilepath)) + { + var createBatchResult = service.CreateBatch( + "html_conversion", + fsInput, + "us-south", + "compare-comply-integration-test-bucket-input", + fsOutput, + "us-south", + "compare-comply-integration-test-bucket-output" + ); + batchId = createBatchResult.BatchId; + Assert.IsNotNull(createBatchResult); + Assert.IsTrue(!string.IsNullOrEmpty(createBatchResult.BatchId)); + } + } + + var getBatchResult = service.GetBatch(batchId); + var updateBatchResult = service.UpdateBatch(batchId, "cancel"); + + Assert.IsNotNull(updateBatchResult); + Assert.IsNotNull(getBatchResult); + Assert.IsTrue(getBatchResult.BatchId == batchId); + Assert.IsNotNull(getBatchesResult); + } + #endregion + } +} diff --git a/test/IBM.WatsonDeveloperCloud.CompareComply.v1.IT/CompareComplyTestData/TestTable.pdf b/test/IBM.WatsonDeveloperCloud.CompareComply.v1.IT/CompareComplyTestData/TestTable.pdf new file mode 100644 index 0000000000000000000000000000000000000000..34985d494d0dd80cdfa77d7e288874b2068eaa12 GIT binary patch literal 18613 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 GBK`#f@EflH literal 0 HcmV?d00001 diff --git a/test/IBM.WatsonDeveloperCloud.CompareComply.v1.IT/CompareComplyTestData/contract_A.pdf b/test/IBM.WatsonDeveloperCloud.CompareComply.v1.IT/CompareComplyTestData/contract_A.pdf new file mode 100644 index 0000000000000000000000000000000000000000..09f4999b5a1f462c33995da739f65ac85efd72ef GIT binary patch literal 85659 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 literal 0 HcmV?d00001 diff --git a/test/IBM.WatsonDeveloperCloud.CompareComply.v1.IT/CompareComplyTestData/contract_B.pdf b/test/IBM.WatsonDeveloperCloud.CompareComply.v1.IT/CompareComplyTestData/contract_B.pdf new file mode 100644 index 0000000000000000000000000000000000000000..13433fad52e4f0c4872b441b4b902589492a53da GIT binary patch literal 85628 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 literal 0 HcmV?d00001 diff --git a/test/IBM.WatsonDeveloperCloud.CompareComply.v1.IT/IBM.WatsonDeveloperCloud.CompareComply.v1.IT.csproj b/test/IBM.WatsonDeveloperCloud.CompareComply.v1.IT/IBM.WatsonDeveloperCloud.CompareComply.v1.IT.csproj new file mode 100644 index 0000000000..985be355c9 --- /dev/null +++ b/test/IBM.WatsonDeveloperCloud.CompareComply.v1.IT/IBM.WatsonDeveloperCloud.CompareComply.v1.IT.csproj @@ -0,0 +1,60 @@ + + + + 2.10.0 + netcoreapp1.0 + IBM.WatsonDeveloperCloud.CompareComply.v1.IntTests + IBM.WatsonDeveloperCloud.CompareComply.v1.IntTests + true + $(PackageTargetFallback);dotnet5.4;portable-net451+win8 + 1.0.4 + false + false + false + 2.10.0 + + + + full + true + + + + full + true + + + + + PreserveNewest + + + + + + + + + + PreserveNewest + + + + + + + + + + + + + + + + + + + + +