Skip to content

Commit

Permalink
feat(DiscoveryV1): Add support for gateways
Browse files Browse the repository at this point in the history
  • Loading branch information
Anthony Oliveri committed Jan 17, 2019
1 parent ca01103 commit 39393fa
Show file tree
Hide file tree
Showing 6 changed files with 404 additions and 0 deletions.
196 changes: 196 additions & 0 deletions Source/DiscoveryV1/Discovery.swift
Original file line number Diff line number Diff line change
Expand Up @@ -3784,4 +3784,200 @@ public class Discovery {
request.responseObject(completionHandler: completionHandler)
}

/**
List Gateways.

List the currently configured gateways.

- parameter environmentID: The ID of the environment.
- parameter headers: A dictionary of request headers to be sent with this request.
- parameter completionHandler: A function executed when the request completes with a successful result or error
*/
public func listGateways(
environmentID: String,
headers: [String: String]? = nil,
completionHandler: @escaping (WatsonResponse<GatewayList>?, WatsonError?) -> Void)
{
// construct header parameters
var headerParameters = defaultHeaders
if let headers = headers {
headerParameters.merge(headers) { (_, new) in new }
}
headerParameters["Accept"] = "application/json"

// construct query parameters
var queryParameters = [URLQueryItem]()
queryParameters.append(URLQueryItem(name: "version", value: version))

// construct REST request
let path = "/v1/environments/\(environmentID)/gateways"
guard let encodedPath = path.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) else {
completionHandler(nil, WatsonError.urlEncoding(path: path))
return
}
let request = RestRequest(
session: session,
authMethod: authMethod,
errorResponseDecoder: errorResponseDecoder,
method: "GET",
url: serviceURL + encodedPath,
headerParameters: headerParameters,
queryItems: queryParameters
)

// execute REST request
request.responseObject(completionHandler: completionHandler)
}

/**
Create Gateway.

Create a gateway configuration to use with a remotely installed gateway.

- parameter environmentID: The ID of the environment.
- parameter name: User-defined name.
- parameter headers: A dictionary of request headers to be sent with this request.
- parameter completionHandler: A function executed when the request completes with a successful result or error
*/
public func createGateway(
environmentID: String,
name: String? = nil,
headers: [String: String]? = nil,
completionHandler: @escaping (WatsonResponse<Gateway>?, WatsonError?) -> Void)
{
// construct body
let createGatewayRequest = GatewayName(
name: name)
guard let body = try? JSONEncoder().encodeIfPresent(createGatewayRequest) else {
completionHandler(nil, WatsonError.serialization(values: "request body"))
return
}

// construct header parameters
var headerParameters = defaultHeaders
if let headers = headers {
headerParameters.merge(headers) { (_, new) in new }
}
headerParameters["Accept"] = "application/json"
headerParameters["Content-Type"] = "application/json"

// construct query parameters
var queryParameters = [URLQueryItem]()
queryParameters.append(URLQueryItem(name: "version", value: version))

// construct REST request
let path = "/v1/environments/\(environmentID)/gateways"
guard let encodedPath = path.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) else {
completionHandler(nil, WatsonError.urlEncoding(path: path))
return
}
let request = RestRequest(
session: session,
authMethod: authMethod,
errorResponseDecoder: errorResponseDecoder,
method: "POST",
url: serviceURL + encodedPath,
headerParameters: headerParameters,
queryItems: queryParameters,
messageBody: body
)

// execute REST request
request.responseObject(completionHandler: completionHandler)
}

/**
List Gateway Details.

List information about the specified gateway.

- parameter environmentID: The ID of the environment.
- parameter gatewayID: The requested gateway ID.
- parameter headers: A dictionary of request headers to be sent with this request.
- parameter completionHandler: A function executed when the request completes with a successful result or error
*/
public func getGateway(
environmentID: String,
gatewayID: String,
headers: [String: String]? = nil,
completionHandler: @escaping (WatsonResponse<Gateway>?, WatsonError?) -> Void)
{
// construct header parameters
var headerParameters = defaultHeaders
if let headers = headers {
headerParameters.merge(headers) { (_, new) in new }
}
headerParameters["Accept"] = "application/json"

// construct query parameters
var queryParameters = [URLQueryItem]()
queryParameters.append(URLQueryItem(name: "version", value: version))

// construct REST request
let path = "/v1/environments/\(environmentID)/gateways/\(gatewayID)"
guard let encodedPath = path.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) else {
completionHandler(nil, WatsonError.urlEncoding(path: path))
return
}
let request = RestRequest(
session: session,
authMethod: authMethod,
errorResponseDecoder: errorResponseDecoder,
method: "GET",
url: serviceURL + encodedPath,
headerParameters: headerParameters,
queryItems: queryParameters
)

// execute REST request
request.responseObject(completionHandler: completionHandler)
}

/**
Delete Gateway.

Delete the specified gateway configuration.

- parameter environmentID: The ID of the environment.
- parameter gatewayID: The requested gateway ID.
- parameter headers: A dictionary of request headers to be sent with this request.
- parameter completionHandler: A function executed when the request completes with a successful result or error
*/
public func deleteGateway(
environmentID: String,
gatewayID: String,
headers: [String: String]? = nil,
completionHandler: @escaping (WatsonResponse<GatewayDelete>?, WatsonError?) -> Void)
{
// construct header parameters
var headerParameters = defaultHeaders
if let headers = headers {
headerParameters.merge(headers) { (_, new) in new }
}
headerParameters["Accept"] = "application/json"

// construct query parameters
var queryParameters = [URLQueryItem]()
queryParameters.append(URLQueryItem(name: "version", value: version))

// construct REST request
let path = "/v1/environments/\(environmentID)/gateways/\(gatewayID)"
guard let encodedPath = path.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) else {
completionHandler(nil, WatsonError.urlEncoding(path: path))
return
}
let request = RestRequest(
session: session,
authMethod: authMethod,
errorResponseDecoder: errorResponseDecoder,
method: "DELETE",
url: serviceURL + encodedPath,
headerParameters: headerParameters,
queryItems: queryParameters
)

// execute REST request
request.responseObject(completionHandler: completionHandler)
}

}
70 changes: 70 additions & 0 deletions Source/DiscoveryV1/Models/Gateway.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
/**
* Copyright IBM Corporation 2018
*
* 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.
**/

import Foundation

/**
Object describing a specific gateway.
*/
public struct Gateway: Codable, Equatable {

/**
The current status of the gateway. `connected` means the gateway is connected to the remotly installed gateway.
`idle` means this gateway is not currently in use.
*/
public enum Status: String {
case connected = "connected"
case idle = "idle"
}

/**
The gateway ID of the gateway.
*/
public var gatewayID: String?

/**
The user defined name of the gateway.
*/
public var name: String?

/**
The current status of the gateway. `connected` means the gateway is connected to the remotly installed gateway.
`idle` means this gateway is not currently in use.
*/
public var status: String?

/**
The generated **token** for this gateway. The value of this field is used when configuring the remotly installed
gateway.
*/
public var token: String?

/**
The generated **token_id** for this gateway. The value of this field is used when configuring the remotly installed
gateway.
*/
public var tokenID: String?

// Map each property name to the key that shall be used for encoding/decoding.
private enum CodingKeys: String, CodingKey {
case gatewayID = "gateway_id"
case name = "name"
case status = "status"
case token = "token"
case tokenID = "token_id"
}

}
40 changes: 40 additions & 0 deletions Source/DiscoveryV1/Models/GatewayDelete.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/**
* Copyright IBM Corporation 2018
*
* 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.
**/

import Foundation

/**
Gatway deletion confirmation.
*/
public struct GatewayDelete: Codable, Equatable {

/**
The gateway ID of the deleted gateway.
*/
public var gatewayID: String?

/**
The status of the request.
*/
public var status: String?

// Map each property name to the key that shall be used for encoding/decoding.
private enum CodingKeys: String, CodingKey {
case gatewayID = "gateway_id"
case status = "status"
}

}
34 changes: 34 additions & 0 deletions Source/DiscoveryV1/Models/GatewayList.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/**
* Copyright IBM Corporation 2018
*
* 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.
**/

import Foundation

/**
Object containing gateways array.
*/
public struct GatewayList: Codable, Equatable {

/**
Array of configured gateway connections.
*/
public var gateways: [Gateway]?

// Map each property name to the key that shall be used for encoding/decoding.
private enum CodingKeys: String, CodingKey {
case gateways = "gateways"
}

}
48 changes: 48 additions & 0 deletions Source/DiscoveryV1/Models/GatewayName.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/**
* Copyright IBM Corporation 2018
*
* 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.
**/

import Foundation

/**
Object containing user-defined name.
*/
internal struct GatewayName: Codable, Equatable {

/**
User-defined name.
*/
public var name: String?

// Map each property name to the key that shall be used for encoding/decoding.
private enum CodingKeys: String, CodingKey {
case name = "name"
}

/**
Initialize a `GatewayName` with member variables.

- parameter name: User-defined name.

- returns: An initialized `GatewayName`.
*/
public init(
name: String? = nil
)
{
self.name = name
}

}
Loading

0 comments on commit 39393fa

Please sign in to comment.