commit c39e022e41a27e226cfff37b0b562d1541ac450e Author: Thilo Schwarz Date: Sun Mar 23 12:12:53 2025 +0100 Initial commit diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml new file mode 100644 index 0000000..977bc68 --- /dev/null +++ b/.github/workflows/build-and-test.yml @@ -0,0 +1,34 @@ +name: Build and Test + +on: + push: + branches: + - develop + - feature* + pull_request: + types: [ opened, synchronize, reopened ] + +jobs: + + mvn-test: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Set up JDK 17 + uses: actions/setup-java@v4.5.0 + with: + java-version: '17' + distribution: 'corretto' + - name: Cache maven repository + uses: actions/cache@v4.2.0 + with: + path: ~/.m2/repository + key: maven + restore-keys: maven + - name: Build with Maven and Test + env: + API_EMAIL: ${{ secrets.API_EMAIL }} + API_KEY: ${{ secrets.API_KEY }} + API_TOKEN: ${{ secrets.API_TOKEN }} + run: mvn clean test diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0b31158 --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +/.settings/ +/target/ +/.classpath +/.project +/.factorypath +/.springBeans +/.idea + +# local files +/info.txt +cf.yml + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..04e0121 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 Thilo Schwarz + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..dd1f3d2 --- /dev/null +++ b/README.md @@ -0,0 +1,198 @@ +# CloudflareDNS-java + +[![Build and Test](https://github.com/th-schwarz/CloudflareDNS-java/actions/workflows/build-and-test.yml/badge.svg)](https://github.com/th-schwarz/CloudflareDNS-java/actions/workflows/build-and-test.yml) + +## Preface + +This project offers minimalistic access to the Cloudflare API, focused on managing DNS settings like creating, updating, +and deleting DNS records. Supported types include A, CNAME, MX, TXT, and more. + +If you encounter any bugs or find missing features, feel free to report them on +the [GitHub Issues page](https://github.com/th-schwarz/CloudflareDNS-java/issues). + +--- + +## Disclaimer + +This guide comes without any warranty. Use at your own risk. The author is not responsible for potential data loss, +hardware damage, or keyboard mishaps! + +--- + +## State of the Project + +BETA + +--- + +## Methods Overview + +### 1. `zoneListAll` + +Retrieve all zones within the Cloudflare account. + +- **Returns**: A list of `ZoneEntity` objects. + +**Example:** + +```java +List zones = cfDnsClient.zoneListAll(); +zones.forEach(zone -> System.out.println("Zone: " + zone.getName())); +``` + +--- + +### 2. `zoneInfo` + +Get detailed information about a specific zone by its name. + +- **Parameters**: + - `String name` - The zone name (e.g., "example.com"). +- **Returns**: A `ZoneEntity` object. + +**Example:** + +```java +ZoneEntity zone = cfDnsClient.zoneInfo("example.com"); +System.out.println("Zone ID: " + zone.getId()); +``` + +--- + +### 3. `sldListAll` + +Retrieve all records for a specific second-level domain (SLD) under a given zone. + +- **Parameters**: + - `ZoneEntity zone` - The zone object. + - `String sld` - Second-level domain (e.g., "www" in "www.example.com"). +- **Returns**: A list of `RecordEntity` objects. + +**Example:** + +```java +List records = cfDnsClient.sldListAll(zone, "sld"); +records.forEach(record -> + System.out.println("Record Type: " + record.getType() + ", Value: " + record.getContent()) +); +``` + +--- + +### 4. `sldInfo` + +Retrieve DNS record details for a specific SLD, zone, and record type. + +- **Parameters**: + - `ZoneEntity zone` - The zone object. + - `String sld` - The second-level domain. + - `RecordType type` - Record type (e.g., A, CNAME). + +**Example:** + +```java +RecordEntity record = cfDnsClient.sldInfo(zone, "www", RecordType.A); +System.out.println("Record IP: " + record.getContent()); +``` + +--- + +### 5. `recordCreate` + +Create a new DNS record in a specific zone. + +- **Parameters**: + - `ZoneEntity zone` - DNS zone object. + - `RecordEntity rec` - Details of the new record (name, type, content). + +**Example:** + +```java +RecordEntity newRecord = new RecordEntity("api.example.com", RecordType.A, "192.168.1.1"); +RecordEntity created = cfDnsClient.recordCreate(zone, newRecord); +System.out.println("Created Record ID: " + created.getId()); +``` + +--- + +### 6. `recordUpdate` + +Update an existing DNS record. + +- **Parameters**: + - `ZoneEntity zone` - The zone that contains the record. + - `RecordEntity rec` - Updated record data. + +**Example:** + +```java +record.setContent("192.168.1.2"); +RecordEntity updated = cfDnsClient.recordUpdate(zone, record); +System.out.println("Updated Record: " + updated.getContent()); +``` + +--- + +### 7. `recordDelete` + +Delete a DNS record from a zone. + +- **Parameters**: + - `ZoneEntity zone` - The parent zone. + - `RecordEntity rec` - Record to delete. + +**Example:** + +```java +boolean isDeleted = cfDnsClient.recordDelete(zone, record); +System.out.println(isDeleted ? "Deletion successful." : "Deletion failed."); +``` + +--- + +### 8. `recordDeleteTypeIfExists` + +Delete a DNS record of a specific type if it exists. + +- **Parameters**: + - `ZoneEntity zone` - Target zone. + - `String sld` - Second-level domain. + - `RecordType type` - Record type. + +**Example:** + +```java +cfDnsClient.recordDeleteTypeIfExists(zone, "api", RecordType.A); +System.out.println("Deletion attempt completed."); +``` + +--- + +### Notes on Error Handling + +The `CfDnsClient` provides internal error-handling mechanisms through exceptions. For example: +- `CloudflareApiException` is thrown for errors during API communication or invalid responses. +- `CloudflareNotFoundException` is thrown when the requested single resource is not found, if enabled via the `emptyResultThrowsException` flag during initialization. + +#### Example: + +```java +try { + RecordEntity record = cfDnsClient.sldInfo(zone, "www", RecordType.A); + System.out.println("Record IP: " + record.getContent()); +} catch (CloudflareApiException e) { + if (e instanceof CloudflareNotFoundException) { + log.warn("Sld not found: www"); + } else { + log.error("Error while getting sld info of www", e); + throw e; + } +} +``` + +--- + +### Summary + +`CfDnsClient` offers a simple interface for managing DNS entries via Cloudflare's public API, allowing seamless CRUD +operations and automation-friendly workflows. \ No newline at end of file diff --git a/docs/README.MD b/docs/README.MD new file mode 100644 index 0000000..8f901d1 --- /dev/null +++ b/docs/README.MD @@ -0,0 +1,3 @@ +# Documents for CloudflareDNS-java + +- [api](apidocs/index.html) \ No newline at end of file diff --git a/docs/apidocs/allclasses-index.html b/docs/apidocs/allclasses-index.html new file mode 100644 index 0000000..4dc1605 --- /dev/null +++ b/docs/apidocs/allclasses-index.html @@ -0,0 +1,142 @@ + + + + +Alle Klassen und Schnittstellen (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+
+

Alle Klassen und Schnittstellen

+
+
+
+
+
+
Klasse
+
Beschreibung
+ +
+
Represents a base abstract entity class for modeling domain objects with a unique identifier.
+
+ +
+
Abstract base class for response models that contain multiple result entries.
+
+ +
+
Abstract base class for API response models.
+
+ +
+
Represents a base abstract response model for handling single response entities within an API + response.
+
+ +
+
CfDnsClient is a client interface to interact with Cloudflare DNS service.
+
+ +
+
Enum CfRequest encapsulates various API endpoint paths for managing DNS zones and records in a + cohesive and reusable manner.
+
+ +
+
Represents a custom exception for errors encountered while interacting with the Cloudflare API.
+
+ +
+
This exception is thrown to indicate that a requested resource was not found during interaction + with the Cloudflare API.
+
+ +
+
Represents a request model for paginated data.
+
+ +
+
Represents a DNS record entity within a specific zone.
+
+ +
+
Represents the API response of the Cloudflare API containing multiple DNS record entities.
+
+ +
+
Represents the API response of the Cloudflare API containing a single DNS record entity.
+
+ +
+
Enum representing various DNS record types.
+
+ +
+
Represents a contract for entities that have a unique identifier.
+
+ +
+
Represents metadata for paginated results.
+
+ +
+
Represents a DNS zone entity in the Cloudflare DNS system.
+
+ +
+
Represents a response model that contains multiple ZoneEntity instances.
+
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/allpackages-index.html b/docs/apidocs/allpackages-index.html new file mode 100644 index 0000000..477e736 --- /dev/null +++ b/docs/apidocs/allpackages-index.html @@ -0,0 +1,75 @@ + + + + +Alle Packages (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+
+

Alle Packages

+
+
Packageübersicht
+
+
Package
+
Beschreibung
+ +
+
The base package of CloudflareDNS-java.
+
+ +
+
The model of CloudflareDNS-java.
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/CfDnsClient.html b/docs/apidocs/codes/thischwa/cf/CfDnsClient.html new file mode 100644 index 0000000..3fd9d13 --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/CfDnsClient.html @@ -0,0 +1,627 @@ + + + + +CfDnsClient (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Klasse CfDnsClient

+
+
java.lang.Object +
codes.thischwa.cf.CfDnsClient
+
+
+
+
public class CfDnsClient +extends Object
+
CfDnsClient is a client interface to interact with Cloudflare DNS service. It allows managing DNS + records and zones within the Cloudflare system, including creating, updating, retrieving, and + deleting DNS records.
+
+
+ +
+
+
    + +
  • +
    +

    Konstruktordetails

    +
      +
    • +
      +

      CfDnsClient

      +
      public CfDnsClient(String authEmail, + String authKey, + String authToken)
      +
      Constructs a CfDnsClient instance for interacting with the Cloudflare DNS API.
      +
      +
      Parameter:
      +
      authEmail - The email address associated with the Cloudflare account, used for + authentication.
      +
      authKey - The API key of the Cloudflare account, used as part of the authentication + process.
      +
      authToken - The API token for accessing specific resources within the Cloudflare account.
      +
      +
      +
    • +
    • +
      +

      CfDnsClient

      +
      public CfDnsClient(String baseUrl, + String authEmail, + String authKey, + String authToken)
      +
      Constructs a CfDnsClient instance for interacting with the Cloudflare DNS API.
      +
      +
      Parameter:
      +
      baseUrl - The base URL of the Cloudflare API to be used for requests.
      +
      authEmail - The email address associated with the Cloudflare account, used for + authentication.
      +
      authKey - The API key of the Cloudflare account, used as part of the authentication + process.
      +
      authToken - The API token for accessing specific resources within the Cloudflare account.
      +
      +
      +
    • +
    • +
      +

      CfDnsClient

      +
      public CfDnsClient(boolean emptyResultThrowsException, + String baseUrl, + String authEmail, + String authKey, + String authToken)
      +
      Constructs a new instance of CfDnsClient, which facilitates interactions with the + Cloudflare DNS API.
      +
      +
      Parameter:
      +
      emptyResultThrowsException - Specifies if an exception should be thrown when the API + response is empty. Default is true.
      +
      baseUrl - The base URL for the Cloudflare API endpoint.
      +
      authEmail - The email associated with the Cloudflare account for authentication.
      +
      authKey - The API key for authenticating the client with Cloudflare services.
      +
      authToken - The authentication token used for authorized access to Cloudflare API.
      +
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Methodendetails

    +
      +
    • +
      +

      zoneListAll

      +
      public List<ZoneEntity> zoneListAll() + throws CloudflareApiException
      +
      Retrieves a list of all zones from the Cloudflare API.
      + This method sends a GET request to the Cloudflare API endpoint for listing zones, processes the + response, and returns the resulting list of ZoneEntity objects.
      +
      +
      Gibt zurück:
      +
      A list of ZoneEntity objects representing the zones retrieved from the Cloudflare API.
      +
      Löst aus:
      +
      CloudflareApiException - If an error occurs during the API request or response handling.
      +
      +
      +
    • +
    • +
      +

      zoneListAll

      +
      public List<ZoneEntity> zoneListAll(PagingRequest pagingRequest) + throws CloudflareApiException
      +
      Retrieves a list of all zones from the Cloudflare API.
      + This method sends a GET request to the Cloudflare API endpoint for listing zones, processes the + response, and returns the resulting list of ZoneEntity objects.
      +
      +
      Gibt zurück:
      +
      A list of ZoneEntity objects representing the zones retrieved from the Cloudflare API.
      +
      Löst aus:
      +
      CloudflareApiException - If an error occurs during the API request or response handling.
      +
      +
      +
    • +
    • +
      +

      zoneInfo

      +
      public ZoneEntity zoneInfo(String name) + throws CloudflareApiException
      +
      Retrieves detailed information about a specific zone by its name.
      +
      +
      Parameter:
      +
      name - The name of the zone to retrieve information for.
      +
      Gibt zurück:
      +
      A ZoneEntity object that contains details of the specified zone.
      +
      Löst aus:
      +
      CloudflareApiException - If an error occurs while making the API request or processing + the response.
      +
      +
      +
    • +
    • +
      +

      sldListAll

      +
      public List<RecordEntity> sldListAll(ZoneEntity zone, + String sld) + throws CloudflareApiException
      +
      Retrieves all record entities for a specific second-level domain (SLD) within a given DNS zone.
      +
      +
      Parameter:
      +
      zone - The DNS zone entity for which the SLD records are to be fetched.
      +
      sld - The second-level domain name for which the records are retrieved.
      +
      Gibt zurück:
      +
      A list of RecordEntity objects representing the DNS records associated with the + provided SLD.
      +
      Löst aus:
      +
      CloudflareApiException - If an error occurs while interacting with the Cloudflare API.
      +
      +
      +
    • +
    • +
      +

      sldListAll

      +
      public List<RecordEntity> sldListAll(ZoneEntity zone, + String sld, + PagingRequest pagingRequest) + throws CloudflareApiException
      +
      Retrieves all record entities for a specific second-level domain (SLD) within a given DNS zone.
      +
      +
      Parameter:
      +
      zone - The DNS zone entity for which the SLD records are to be fetched.
      +
      sld - The second-level domain name for which the records are retrieved.
      +
      pagingRequest - The paging request.
      +
      Gibt zurück:
      +
      A list of RecordEntity objects representing the DNS records associated with the + provided SLD.
      +
      Löst aus:
      +
      CloudflareApiException - If an error occurs while interacting with the Cloudflare API.
      +
      +
      +
    • +
    • +
      +

      sldInfo

      +
      public RecordEntity sldInfo(ZoneEntity zone, + String sld, + RecordType type) + throws CloudflareApiException
      +
      Retrieves detailed information about a specific second-level domain (SLD) record for a given + zone and record type from the Cloudflare API.
      +
      +
      Parameter:
      +
      zone - the zone entity that contains information about the DNS zone
      +
      sld - the second-level domain (SLD) for which the record information is requested
      +
      type - the type of DNS record (e.g., A, AAAA, CNAME) being queried
      +
      Gibt zurück:
      +
      the record entity containing detailed information about the requested SLD and record + type
      +
      Löst aus:
      +
      CloudflareApiException - if an error occurs during interaction with the Cloudflare API
      +
      +
      +
    • +
    • +
      +

      recordCreate

      +
      public RecordEntity recordCreate(ZoneEntity zone, + RecordEntity rec) + throws CloudflareApiException
      +
      Creates a new DNS record in the specified zone using the Cloudflare API.
      +
      +
      Parameter:
      +
      zone - The zone entity where the record will be created. Contains details such as zone ID.
      +
      rec - The record entity representing the DNS record to be created, including its + attributes.
      +
      Gibt zurück:
      +
      The created record entity as returned by the Cloudflare API.
      +
      Löst aus:
      +
      CloudflareApiException - If an error occurs while interacting with the Cloudflare API.
      +
      +
      +
    • +
    • +
      +

      recordDelete

      +
      public boolean recordDelete(ZoneEntity zone, + RecordEntity rec) + throws CloudflareApiException
      +
      Deletes a DNS record of the specified type within a given zone on the Cloudflare API.
      +
      +
      Parameter:
      +
      zone - The zone entity that specifies the zone in which the record exists.
      +
      rec - The record entity that represents the DNS record to be deleted.
      +
      Gibt zurück:
      +
      true if the DNS record was successfully deleted; false otherwise.
      +
      Löst aus:
      +
      CloudflareApiException - if there is an issue during the API communication or the request + fails for any reason.
      +
      +
      +
    • +
    • +
      +

      recordDelete

      +
      public boolean recordDelete(ZoneEntity zone, + String id) + throws CloudflareApiException
      +
      Deletes a DNS record of the specified type within a given zone on the Cloudflare API.
      +
      +
      Parameter:
      +
      zone - The zone entity that specifies the zone in which the record exists.
      +
      id - The record entity that represents the DNS record to be deleted.
      +
      Gibt zurück:
      +
      true if the DNS record was successfully deleted; false otherwise.
      +
      Löst aus:
      +
      CloudflareApiException - if there is an issue during the API communication or the request + fails for any reason.
      +
      +
      +
    • +
    • +
      +

      recordUpdate

      +
      public RecordEntity recordUpdate(ZoneEntity zone, + RecordEntity rec) + throws CloudflareApiException
      +
      Updates an existing DNS record in a specified Cloudflare zone.
      +
      +
      Parameter:
      +
      zone - the zone entity containing the ID of the target zone
      +
      rec - the record entity containing the ID of the DNS record to be updated and its updated + data
      +
      Gibt zurück:
      +
      the updated record entity as returned by the Cloudflare API
      +
      Löst aus:
      +
      CloudflareApiException - if an error occurs while interacting with the Cloudflare API
      +
      +
      +
    • +
    • +
      +

      recordDeleteTypeIfExists

      +
      public void recordDeleteTypeIfExists(ZoneEntity zone, + String sld, + RecordType type) + throws CloudflareApiException
      +
      Attempts to delete a DNS record of a specific type for a given zone and second-level domain + (SLD), if it exists.
      +
      +
      Parameter:
      +
      zone - The zone in which the DNS record resides. It provides information about the domain.
      +
      sld - The second-level domain (SLD) of the fully qualified domain name (FQDN) for which + the record is being deleted.
      +
      type - The type of the DNS record to be deleted (e.g., A, CNAME, TXT).
      +
      Löst aus:
      +
      CloudflareApiException - If an error occurs while interacting with the Cloudflare API.
      +
      +
      +
    • +
    • +
      +

      getRequest

      +
      protected <T extends AbstractResponse> T getRequest(String endpoint, + Class<T> responseType) + throws CloudflareApiException
      +
      Sends a GET request to the given endpoint and maps the response.
      +
      +
      Löst aus:
      +
      CloudflareApiException
      +
      +
      +
    • +
    • +
      +

      deleteRequest

      +
      protected <T extends AbstractResponse> T deleteRequest(String endpoint, + Class<T> responseType) + throws CloudflareApiException
      +
      Sends a DELETE request to the given endpoint and maps the response.
      +
      +
      Löst aus:
      +
      CloudflareApiException
      +
      +
      +
    • +
    • +
      +

      postRequest

      +
      protected <T extends AbstractResponse, +R extends AbstractEntity> +T postRequest(String endpoint, + R requestPayload, + Class<T> responseType) + throws CloudflareApiException
      +
      Sends a POST request with a payload to the given endpoint and maps the response.
      +
      +
      Löst aus:
      +
      CloudflareApiException
      +
      +
      +
    • +
    • +
      +

      putRequest

      +
      protected <T extends AbstractResponse, +R extends AbstractEntity> +T putRequest(String endpoint, + R requestPayload, + Class<T> responseType) + throws CloudflareApiException
      +
      Sends a PUT request with a payload to the given endpoint and maps the response.
      +
      +
      Löst aus:
      +
      CloudflareApiException
      +
      +
      +
    • +
    • +
      +

      patchRequest

      +
      protected <T extends AbstractResponse, +R extends AbstractEntity> +T patchRequest(String endpoint, + R requestPayload, + Class<T> responseType) + throws CloudflareApiException
      +
      Sends a PATCH request with a payload to the given endpoint and maps the response.
      +
      +
      Löst aus:
      +
      CloudflareApiException
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/CfRequest.html b/docs/apidocs/codes/thischwa/cf/CfRequest.html new file mode 100644 index 0000000..dfe0388 --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/CfRequest.html @@ -0,0 +1,278 @@ + + + + +CfRequest (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Enum-Klasse CfRequest

+
+
java.lang.Object +
java.lang.Enum<CfRequest> +
codes.thischwa.cf.CfRequest
+
+
+
+
+
Alle implementierten Schnittstellen:
+
Serializable, Comparable<CfRequest>, Constable
+
+
+
public enum CfRequest +extends Enum<CfRequest>
+
Enum CfRequest encapsulates various API endpoint paths for managing DNS zones and records in a + cohesive and reusable manner. Each enum constant represents a specific API request path.
+
+
+ +
+
+
    + +
  • +
    +

    Enum-Konstanten - Details

    +
      +
    • +
      +

      ZONE_LIST

      +
      public static final CfRequest ZONE_LIST
      +
      +
    • +
    • +
      +

      ZONE_INFO

      +
      public static final CfRequest ZONE_INFO
      +
      +
    • +
    • +
      +

      RECORD_CREATE

      +
      public static final CfRequest RECORD_CREATE
      +
      +
    • +
    • +
      +

      RECORD_INFO_NAME

      +
      public static final CfRequest RECORD_INFO_NAME
      +
      +
    • +
    • +
      +

      RECORD_INFO_NAME_TYPE

      +
      public static final CfRequest RECORD_INFO_NAME_TYPE
      +
      +
    • +
    • +
      +

      RECORD_UPDATE

      +
      public static final CfRequest RECORD_UPDATE
      +
      +
    • +
    • +
      +

      RECORD_DELETE

      +
      public static final CfRequest RECORD_DELETE
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Methodendetails

    +
      +
    • +
      +

      values

      +
      public static CfRequest[] values()
      +
      Gibt ein Array mit den Konstanten dieser Enum-Klasse in +der Reihenfolge ihrer Deklaration zurück.
      +
      +
      Gibt zurück:
      +
      ein Array mit den Konstanten dieser Enum-Klasse in der Reihenfolge ihrer Deklaration
      +
      +
      +
    • +
    • +
      +

      valueOf

      +
      public static CfRequest valueOf(String name)
      +
      Gibt die Enum-Konstante dieser Klasse mit dem angegebenen Namen zurück. +Die Zeichenfolge muss exakt mit einer ID übereinstimmen, +mit der eine Enum-Konstante in dieser Klasse deklariert wird. +(Zusätzliche Leerzeichen sind nicht zulässig.)
      +
      +
      Parameter:
      +
      name - Name der zurückzugebenden Enumerationskonstante.
      +
      Gibt zurück:
      +
      Enumerationskonstante mit dem angegebenen Namen
      +
      Löst aus:
      +
      IllegalArgumentException - wenn diese Enum-Klasse keine Konstante mit dem angegebenen Namen enthält
      +
      NullPointerException - wenn das Argument nicht angegeben wird
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/CloudflareApiException.html b/docs/apidocs/codes/thischwa/cf/CloudflareApiException.html new file mode 100644 index 0000000..3250ac4 --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/CloudflareApiException.html @@ -0,0 +1,215 @@ + + + + +CloudflareApiException (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Klasse CloudflareApiException

+
+
java.lang.Object +
java.lang.Throwable +
java.lang.Exception +
codes.thischwa.cf.CloudflareApiException
+
+
+
+
+
+
Alle implementierten Schnittstellen:
+
Serializable
+
+
+
Bekannte direkte Unterklassen:
+
CloudflareNotFoundException
+
+
+
public class CloudflareApiException +extends Exception
+
Represents a custom exception for errors encountered while interacting with the Cloudflare API.
+
+
Siehe auch:
+
+ +
+
+
+
+ +
+
+
    + +
  • +
    +

    Konstruktordetails

    +
      +
    • +
      +

      CloudflareApiException

      +
      public CloudflareApiException(String message)
      +
      Constructs a new CloudflareApiException with the specified detail message.
      +
      +
      Parameter:
      +
      message - the detail message, which provides more information about the exception.
      +
      +
      +
    • +
    • +
      +

      CloudflareApiException

      +
      public CloudflareApiException(String message, + Throwable cause)
      +
      Constructs a new CloudflareApiException with the specified detail message and cause.
      +
      +
      Parameter:
      +
      message - the detail message, which provides additional context or information about the exception.
      +
      cause - the cause of this exception, which is the underlying throwable that triggered this exception.
      +
      +
      +
    • +
    • +
      +

      CloudflareApiException

      +
      public CloudflareApiException(Throwable cause)
      +
      Constructs a new CloudflareApiException with the specified cause.
      +
      +
      Parameter:
      +
      cause - the cause of this exception, which is the underlying throwable + that triggered this exception.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/CloudflareNotFoundException.html b/docs/apidocs/codes/thischwa/cf/CloudflareNotFoundException.html new file mode 100644 index 0000000..91cf25d --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/CloudflareNotFoundException.html @@ -0,0 +1,219 @@ + + + + +CloudflareNotFoundException (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Klasse CloudflareNotFoundException

+
+ +
+
+
Alle implementierten Schnittstellen:
+
Serializable
+
+
+
public class CloudflareNotFoundException +extends CloudflareApiException
+
This exception is thrown to indicate that a requested resource was not found during interaction + with the Cloudflare API. + +

It extends CloudflareApiException to provide specific errors related to situations + where Cloudflare responds with a "not found" operation.

+
+
Siehe auch:
+
+ +
+
+
+
+ +
+
+
    + +
  • +
    +

    Konstruktordetails

    +
      +
    • +
      +

      CloudflareNotFoundException

      +
      public CloudflareNotFoundException(String message)
      +
      Constructs a new CloudflareNotFoundException with the specified detail message.
      +
      +
      Parameter:
      +
      message - the detail message, which provides additional context about the "not found" error + encountered during interaction with the Cloudflare API.
      +
      +
      +
    • +
    • +
      +

      CloudflareNotFoundException

      +
      public CloudflareNotFoundException(String message, + Throwable cause)
      +
      Constructs a new CloudflareNotFoundException with the specified detail message and cause.
      +
      +
      Parameter:
      +
      message - the detail message, which provides additional context about the "not found" error + encountered during interaction with the Cloudflare API.
      +
      cause - the cause of this exception, which is the underlying throwable that triggered this exception.
      +
      +
      +
    • +
    • +
      +

      CloudflareNotFoundException

      +
      public CloudflareNotFoundException(Throwable cause)
      +
      Constructs a new CloudflareNotFoundException with the specified cause.
      +
      +
      Parameter:
      +
      cause - the cause of this exception, which is the underlying throwable + that triggered this exception.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/class-use/CfDnsClient.html b/docs/apidocs/codes/thischwa/cf/class-use/CfDnsClient.html new file mode 100644 index 0000000..595f12a --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/class-use/CfDnsClient.html @@ -0,0 +1,62 @@ + + + + +Verwendungsweise von Klasse codes.thischwa.cf.CfDnsClient (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+
+

Verwendungen von Klasse
codes.thischwa.cf.CfDnsClient

+
+Keine Verwendung von codes.thischwa.cf.CfDnsClient
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/class-use/CfRequest.html b/docs/apidocs/codes/thischwa/cf/class-use/CfRequest.html new file mode 100644 index 0000000..26fdc3d --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/class-use/CfRequest.html @@ -0,0 +1,97 @@ + + + + +Verwendungsweise von Enum-Klasse codes.thischwa.cf.CfRequest (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+
+

Verwendungen von Enum-Klasse
codes.thischwa.cf.CfRequest

+
+
Packages, die CfRequest verwenden
+
+
Package
+
Beschreibung
+ +
+
The base package of CloudflareDNS-java.
+
+
+
+ +
+
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/class-use/CloudflareApiException.html b/docs/apidocs/codes/thischwa/cf/class-use/CloudflareApiException.html new file mode 100644 index 0000000..f4e2f10 --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/class-use/CloudflareApiException.html @@ -0,0 +1,166 @@ + + + + +Verwendungsweise von Klasse codes.thischwa.cf.CloudflareApiException (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+
+

Verwendungen von Klasse
codes.thischwa.cf.CloudflareApiException

+
+
Packages, die CloudflareApiException verwenden
+
+
Package
+
Beschreibung
+ +
+
The base package of CloudflareDNS-java.
+
+
+
+ +
+
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/class-use/CloudflareNotFoundException.html b/docs/apidocs/codes/thischwa/cf/class-use/CloudflareNotFoundException.html new file mode 100644 index 0000000..3f23d35 --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/class-use/CloudflareNotFoundException.html @@ -0,0 +1,62 @@ + + + + +Verwendungsweise von Klasse codes.thischwa.cf.CloudflareNotFoundException (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+
+

Verwendungen von Klasse
codes.thischwa.cf.CloudflareNotFoundException

+
+Keine Verwendung von codes.thischwa.cf.CloudflareNotFoundException
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/model/AbstractEntity.html b/docs/apidocs/codes/thischwa/cf/model/AbstractEntity.html new file mode 100644 index 0000000..bee45a0 --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/model/AbstractEntity.html @@ -0,0 +1,169 @@ + + + + +AbstractEntity (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Klasse AbstractEntity

+
+
java.lang.Object +
codes.thischwa.cf.model.AbstractEntity
+
+
+
+
Alle implementierten Schnittstellen:
+
ResponseEntity
+
+
+
Bekannte direkte Unterklassen:
+
RecordEntity, ZoneEntity
+
+
+
public class AbstractEntity +extends Object +implements ResponseEntity
+
Represents a base abstract entity class for modeling domain objects with a unique identifier. + +

This class provides a fundamental contract for entities by implementing the ResponseEntity interface. The primary attribute of this class is the `id` field, which serves as + a unique identifier for all derived entities. + +

Commonly extended by other entity classes to maintain a consistent entity structure across the + domain models. This encourages code reusability and consistency within the system.

+
+
+ +
+
+
    + +
  • +
    +

    Konstruktordetails

    +
      +
    • +
      +

      AbstractEntity

      +
      public AbstractEntity()
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/model/AbstractMultipleResponse.html b/docs/apidocs/codes/thischwa/cf/model/AbstractMultipleResponse.html new file mode 100644 index 0000000..ab60b16 --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/model/AbstractMultipleResponse.html @@ -0,0 +1,173 @@ + + + + +AbstractMultipleResponse (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Klasse AbstractMultipleResponse<T extends ResponseEntity>

+
+
java.lang.Object +
codes.thischwa.cf.model.AbstractResponse +
codes.thischwa.cf.model.AbstractMultipleResponse<T>
+
+
+
+
+
Bekannte direkte Unterklassen:
+
RecordMultipleResponse, ZoneMultipleResponse
+
+
+
public abstract class AbstractMultipleResponse<T extends ResponseEntity> +extends AbstractResponse
+
Abstract base class for response models that contain multiple result entries. + +

This class is designed to handle API responses where multiple entities are part of the result + set, such as paginated or batched data. It extends AbstractResponse to include additional + attributes specific to multi-entity responses. + +

Attributes: + +

    +
  • `resultInfo`: Provides metadata about the result set, such as pagination details like page + number, total count, number of results per page, etc. +
  • `result`: A list of entities representing the main body of the response. The type of + entities in the result list is determined by the generic parameter T, which must + extend ResponseEntity. +
+ +

Subclasses can be created by specifying the entity type that the response should handle.

+
+
+ +
+
+
    + +
  • +
    +

    Konstruktordetails

    +
      +
    • +
      +

      AbstractMultipleResponse

      +
      public AbstractMultipleResponse()
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/model/AbstractResponse.html b/docs/apidocs/codes/thischwa/cf/model/AbstractResponse.html new file mode 100644 index 0000000..d24503e --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/model/AbstractResponse.html @@ -0,0 +1,169 @@ + + + + +AbstractResponse (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Klasse AbstractResponse

+
+
java.lang.Object +
codes.thischwa.cf.model.AbstractResponse
+
+
+
+
Bekannte direkte Unterklassen:
+
AbstractMultipleResponse, AbstractSingleResponse
+
+
+
public abstract class AbstractResponse +extends Object
+
Abstract base class for API response models. + +

This class encapsulates common attributes used to represent the result of an API request. It + can be extended to define more specific response structures. + +

Attributes: + +

    +
  1. success: Indicates whether the API request was successful. +
  2. errors: A list of error messages, if any, returned by the API. +
  3. messages: A list of informational or status messages accompanying the response. +
+ +

This structure is designed for consistency and ease of extending response models in + applications that require uniform response structures.

+
+
+ +
+
+
    + +
  • +
    +

    Konstruktordetails

    +
      +
    • +
      +

      AbstractResponse

      +
      public AbstractResponse()
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/model/AbstractSingleResponse.html b/docs/apidocs/codes/thischwa/cf/model/AbstractSingleResponse.html new file mode 100644 index 0000000..5bbe257 --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/model/AbstractSingleResponse.html @@ -0,0 +1,170 @@ + + + + +AbstractSingleResponse (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Klasse AbstractSingleResponse<T extends ResponseEntity>

+
+
java.lang.Object +
codes.thischwa.cf.model.AbstractResponse +
codes.thischwa.cf.model.AbstractSingleResponse<T>
+
+
+
+
+
Typparameter:
+
T - The type of the response entity that extends ResponseEntity.
+
+
+
Bekannte direkte Unterklassen:
+
RecordSingleResponse
+
+
+
public abstract class AbstractSingleResponse<T extends ResponseEntity> +extends AbstractResponse
+
Represents a base abstract response model for handling single response entities within an API + response. + +

This class extends AbstractResponse, inheriting common response attributes such as + success status, error messages, and informational messages. It introduces a single generic type + parameter <T> which extends ResponseEntity, enforcing type consistency for the + result attribute. + +

Primary Attribute: result: Represents the single entity result of the response. This + is a generic type that ensures flexibility and adaptability for different entity models.

+
+
+ +
+
+
    + +
  • +
    +

    Konstruktordetails

    +
      +
    • +
      +

      AbstractSingleResponse

      +
      public AbstractSingleResponse()
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/model/PagingRequest.html b/docs/apidocs/codes/thischwa/cf/model/PagingRequest.html new file mode 100644 index 0000000..db5997c --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/model/PagingRequest.html @@ -0,0 +1,229 @@ + + + + +PagingRequest (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Klasse PagingRequest

+
+
java.lang.Object +
codes.thischwa.cf.model.PagingRequest
+
+
+
+
public class PagingRequest +extends Object
+
Represents a request model for paginated data. + +

This class encapsulates the page number and the number of items per page for a paginated + request, along with utility methods for constructing and retrieving pagination parameters. + +

Key functionalities: + +

    +
  • Creating a PagingRequest instance with specific pagination values using the + of method. +
  • Creating a default PagingRequest with predefined pagination values. +
  • Retrieving pagination parameters as a key-value map. +
  • Generating a query string representation for the pagination parameters. +
+
+
+
    + +
  • +
    +

    Methodenübersicht

    +
    +
    +
    +
    +
    Modifizierer und Typ
    +
    Methode
    +
    Beschreibung
    + + +
    +
    Appends a query string with pagination parameters (page and perPage) to the provided endpoint.
    +
    + + +
    +
    Creates a default PagingRequest instance with a page number set to 1 and a high number + of items per page (5,000,000) to accommodate large dataset requests.
    +
    + + +
    +
    Retrieves the pagination parameters in a key-value map format.
    +
    + +
    of(int page, + int perPage)
    +
    +
    Creates a new PagingRequest instance with the specified page number and items per page.
    +
    +
    +
    +
    +
    +

    Von Klasse geerbte Methoden java.lang.Object

    +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +
    +
  • +
+
+
+
    + +
  • +
    +

    Methodendetails

    +
      +
    • +
      +

      of

      +
      public static PagingRequest of(int page, + int perPage)
      +
      Creates a new PagingRequest instance with the specified page number and items per page.
      +
      +
      Parameter:
      +
      page - the page number to be requested
      +
      perPage - the number of items to be included per page
      +
      Gibt zurück:
      +
      a new PagingRequest instance with the provided parameters
      +
      +
      +
    • +
    • +
      +

      defaultPaging

      +
      public static PagingRequest defaultPaging()
      +
      Creates a default PagingRequest instance with a page number set to 1 and a high number + of items per page (5,000,000) to accommodate large dataset requests.
      +
      +
      Gibt zurück:
      +
      a default PagingRequest instance with predefined pagination parameters
      +
      +
      +
    • +
    • +
      +

      getPagingParams

      +
      public Map<String,String> getPagingParams()
      +
      Retrieves the pagination parameters in a key-value map format.
      +
      +
      Gibt zurück:
      +
      a map containing the pagination parameters, where the key "page" indicates the current + page number and the key "perPage" indicates the number of items per page.
      +
      +
      +
    • +
    • +
      +

      addQueryString

      +
      public String addQueryString(String endpoint)
      +
      Appends a query string with pagination parameters (page and perPage) to the provided endpoint.
      +
      +
      Parameter:
      +
      endpoint - the base URL or API endpoint to which the query string will be appended
      +
      Gibt zurück:
      +
      the complete URL with the appended query string for pagination
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/model/RecordEntity.html b/docs/apidocs/codes/thischwa/cf/model/RecordEntity.html new file mode 100644 index 0000000..a92936d --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/model/RecordEntity.html @@ -0,0 +1,221 @@ + + + + +RecordEntity (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Klasse RecordEntity

+
+
java.lang.Object +
codes.thischwa.cf.model.AbstractEntity +
codes.thischwa.cf.model.RecordEntity
+
+
+
+
+
Alle implementierten Schnittstellen:
+
ResponseEntity
+
+
+
public class RecordEntity +extends AbstractEntity
+
Represents a DNS record entity within a specific zone. + +

Attributes defined in this class include: + +

    +
  • DNS record type such as "A" or "CNAME". +
  • Name of the DNS record. +
  • Content of the DNS record, such as an IP address. +
  • Flags indicating whether the record is proxiable or proxied. +
  • TTL (Time-To-Live) for the DNS record. +
  • A locked status to indicate immutability of the record. +
  • Zone-specific metadata including zone ID and name. +
  • Timestamps for creation and modification. +
+ +

Provides a static factory method build for creating a DNS record with specific + attributes.

+
+
+ +
+
+
    + +
  • +
    +

    Konstruktordetails

    +
      +
    • +
      +

      RecordEntity

      +
      public RecordEntity()
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Methodendetails

    +
      +
    • +
      +

      build

      +
      public static RecordEntity build(String name, + RecordType type, + Integer ttl, + String ip)
      +
      Builds and returns a RecordEntity instance with the specified attributes.
      +
      +
      Parameter:
      +
      name - the name of the DNS record
      +
      type - the RecordType of the DNS record
      +
      ttl - the time-to-live (TTL) value for the DNS record
      +
      ip - the content of the DNS record, typically an IP address
      +
      Gibt zurück:
      +
      a RecordEntity populated with the provided attributes
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/model/RecordMultipleResponse.html b/docs/apidocs/codes/thischwa/cf/model/RecordMultipleResponse.html new file mode 100644 index 0000000..44ee4c7 --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/model/RecordMultipleResponse.html @@ -0,0 +1,155 @@ + + + + +RecordMultipleResponse (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Klasse RecordMultipleResponse

+
+ +
+
+
public class RecordMultipleResponse +extends AbstractMultipleResponse<RecordEntity>
+
Represents the API response of the Cloudflare API containing multiple DNS record entities.
+
+
+ +
+
+
    + +
  • +
    +

    Konstruktordetails

    +
      +
    • +
      +

      RecordMultipleResponse

      +
      public RecordMultipleResponse()
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/model/RecordSingleResponse.html b/docs/apidocs/codes/thischwa/cf/model/RecordSingleResponse.html new file mode 100644 index 0000000..bb8e47d --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/model/RecordSingleResponse.html @@ -0,0 +1,155 @@ + + + + +RecordSingleResponse (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Klasse RecordSingleResponse

+
+ +
+
+
public class RecordSingleResponse +extends AbstractSingleResponse<RecordEntity>
+
Represents the API response of the Cloudflare API containing a single DNS record entity.
+
+
+ +
+
+
    + +
  • +
    +

    Konstruktordetails

    +
      +
    • +
      +

      RecordSingleResponse

      +
      public RecordSingleResponse()
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/model/RecordType.html b/docs/apidocs/codes/thischwa/cf/model/RecordType.html new file mode 100644 index 0000000..2a482ca --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/model/RecordType.html @@ -0,0 +1,406 @@ + + + + +RecordType (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Enum-Klasse RecordType

+
+
java.lang.Object +
java.lang.Enum<RecordType> +
codes.thischwa.cf.model.RecordType
+
+
+
+
+
Alle implementierten Schnittstellen:
+
Serializable, Comparable<RecordType>, Constable
+
+
+
public enum RecordType +extends Enum<RecordType>
+
Enum representing various DNS record types. + +

Each constant in this enum corresponds to a specific DNS record type, such as "A", "AAAA", + "CNAME", or "TXT". This enum provides a means to standardize the representation of these record + types throughout the application while allowing easy retrieval of their string representation.

+
+
+ +
+
+
    + +
  • +
    +

    Enum-Konstanten - Details

    +
      +
    • +
      +

      A

      +
      public static final RecordType A
      +
      +
    • +
    • +
      +

      AAAA

      +
      public static final RecordType AAAA
      +
      +
    • +
    • +
      +

      CAA

      +
      public static final RecordType CAA
      +
      +
    • +
    • +
      +

      CERT

      +
      public static final RecordType CERT
      +
      +
    • +
    • +
      +

      CNAME

      +
      public static final RecordType CNAME
      +
      +
    • +
    • +
      +

      DNSKEY

      +
      public static final RecordType DNSKEY
      +
      +
    • +
    • +
      +

      DS

      +
      public static final RecordType DS
      +
      +
    • +
    • +
      +

      HTTPS

      +
      public static final RecordType HTTPS
      +
      +
    • +
    • +
      +

      LOC

      +
      public static final RecordType LOC
      +
      +
    • +
    • +
      +

      MX

      +
      public static final RecordType MX
      +
      +
    • +
    • +
      +

      NAPTR

      +
      public static final RecordType NAPTR
      +
      +
    • +
    • +
      +

      NS

      +
      public static final RecordType NS
      +
      +
    • +
    • +
      +

      OPENPGPKEY

      +
      public static final RecordType OPENPGPKEY
      +
      +
    • +
    • +
      +

      PTR

      +
      public static final RecordType PTR
      +
      +
    • +
    • +
      +

      SMIMEA

      +
      public static final RecordType SMIMEA
      +
      +
    • +
    • +
      +

      SRV

      +
      public static final RecordType SRV
      +
      +
    • +
    • +
      +

      SSHFP

      +
      public static final RecordType SSHFP
      +
      +
    • +
    • +
      +

      SVCB

      +
      public static final RecordType SVCB
      +
      +
    • +
    • +
      +

      TLSA

      +
      public static final RecordType TLSA
      +
      +
    • +
    • +
      +

      TXT

      +
      public static final RecordType TXT
      +
      +
    • +
    • +
      +

      URI

      +
      public static final RecordType URI
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Methodendetails

    +
      +
    • +
      +

      values

      +
      public static RecordType[] values()
      +
      Gibt ein Array mit den Konstanten dieser Enum-Klasse in +der Reihenfolge ihrer Deklaration zurück.
      +
      +
      Gibt zurück:
      +
      ein Array mit den Konstanten dieser Enum-Klasse in der Reihenfolge ihrer Deklaration
      +
      +
      +
    • +
    • +
      +

      valueOf

      +
      public static RecordType valueOf(String name)
      +
      Gibt die Enum-Konstante dieser Klasse mit dem angegebenen Namen zurück. +Die Zeichenfolge muss exakt mit einer ID übereinstimmen, +mit der eine Enum-Konstante in dieser Klasse deklariert wird. +(Zusätzliche Leerzeichen sind nicht zulässig.)
      +
      +
      Parameter:
      +
      name - Name der zurückzugebenden Enumerationskonstante.
      +
      Gibt zurück:
      +
      Enumerationskonstante mit dem angegebenen Namen
      +
      Löst aus:
      +
      IllegalArgumentException - wenn diese Enum-Klasse keine Konstante mit dem angegebenen Namen enthält
      +
      NullPointerException - wenn das Argument nicht angegeben wird
      +
      +
      +
    • +
    • +
      +

      toString

      +
      public String toString()
      +
      +
      Setzt außer Kraft:
      +
      toString in Klasse Enum<RecordType>
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/model/ResponseEntity.html b/docs/apidocs/codes/thischwa/cf/model/ResponseEntity.html new file mode 100644 index 0000000..c8fbf5f --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/model/ResponseEntity.html @@ -0,0 +1,158 @@ + + + + +ResponseEntity (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Schnittstelle ResponseEntity

+
+
+
+
Alle bekannten Implementierungsklassen:
+
AbstractEntity, RecordEntity, ZoneEntity
+
+
+
public interface ResponseEntity
+
Represents a contract for entities that have a unique identifier. + +

This interface is primarily used as a common abstraction for domain objects that require a + unique identifier, enabling type consistency and code reusability.

+
+
+
    + +
  • +
    +

    Methodenübersicht

    +
    +
    +
    +
    +
    Modifizierer und Typ
    +
    Methode
    +
    Beschreibung
    + + +
    +
    Retrieves the unique identifier of the entity.
    +
    +
    +
    +
    +
    +
  • +
+
+
+
    + +
  • +
    +

    Methodendetails

    +
      +
    • +
      +

      getId

      +
      String getId()
      +
      Retrieves the unique identifier of the entity.
      +
      +
      Gibt zurück:
      +
      the unique identifier as a String
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/model/ResultInfo.html b/docs/apidocs/codes/thischwa/cf/model/ResultInfo.html new file mode 100644 index 0000000..56f57b8 --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/model/ResultInfo.html @@ -0,0 +1,162 @@ + + + + +ResultInfo (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Klasse ResultInfo

+
+
java.lang.Object +
codes.thischwa.cf.model.ResultInfo
+
+
+
+
public class ResultInfo +extends Object
+
Represents metadata for paginated results. + +

This class contains information about the current page, page size, total pages, and result + counts, which can be utilized in managing and navigating through paginated data. + +

    +
  • page: The current page number. +
  • perPage: The number of results per page. +
  • totalPages: The total number of pages available. +
  • count: The number of results on the current page. +
  • totalCount: The total number of results across all pages. +
+
+
+ +
+
+
    + +
  • +
    +

    Konstruktordetails

    +
      +
    • +
      +

      ResultInfo

      +
      public ResultInfo()
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/model/ZoneEntity.html b/docs/apidocs/codes/thischwa/cf/model/ZoneEntity.html new file mode 100644 index 0000000..62f6688 --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/model/ZoneEntity.html @@ -0,0 +1,176 @@ + + + + +ZoneEntity (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Klasse ZoneEntity

+
+
java.lang.Object +
codes.thischwa.cf.model.AbstractEntity +
codes.thischwa.cf.model.ZoneEntity
+
+
+
+
+
Alle implementierten Schnittstellen:
+
ResponseEntity
+
+
+
public class ZoneEntity +extends AbstractEntity
+
Represents a DNS zone entity in the Cloudflare DNS system.
+ +

This class encapsulates all relevant data and metadata associated with a zone, including but + not limited to the following attributes: + +

    +
  • Zone name. +
  • Development mode status. +
  • Active and original name servers linked to the zone. +
  • Timestamps indicating when the zone was created, modified, or activated. +
  • Current operational status of the zone (e.g., active, inactive). +
  • Boolean flag indicating whether the zone is paused. +
  • Zone type, representing the nature of the DNS zone (e.g., full, partial). +
+ +

This class extends AbstractEntity to inherit basic entity properties and to provide a + consistent interface across domain models.

+
+
+ +
+
+
    + +
  • +
    +

    Konstruktordetails

    +
      +
    • +
      +

      ZoneEntity

      +
      public ZoneEntity()
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/model/ZoneMultipleResponse.html b/docs/apidocs/codes/thischwa/cf/model/ZoneMultipleResponse.html new file mode 100644 index 0000000..b2cc41a --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/model/ZoneMultipleResponse.html @@ -0,0 +1,155 @@ + + + + +ZoneMultipleResponse (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Klasse ZoneMultipleResponse

+
+ +
+
+
public class ZoneMultipleResponse +extends AbstractMultipleResponse<ZoneEntity>
+
Represents a response model that contains multiple ZoneEntity instances.
+
+
+ +
+
+
    + +
  • +
    +

    Konstruktordetails

    +
      +
    • +
      +

      ZoneMultipleResponse

      +
      public ZoneMultipleResponse()
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/model/class-use/AbstractEntity.html b/docs/apidocs/codes/thischwa/cf/model/class-use/AbstractEntity.html new file mode 100644 index 0000000..a5c49b3 --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/model/class-use/AbstractEntity.html @@ -0,0 +1,96 @@ + + + + +Verwendungsweise von Klasse codes.thischwa.cf.model.AbstractEntity (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+
+

Verwendungen von Klasse
codes.thischwa.cf.model.AbstractEntity

+
+
Packages, die AbstractEntity verwenden
+
+
Package
+
Beschreibung
+ +
+
The model of CloudflareDNS-java.
+
+
+
+ +
+
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/model/class-use/AbstractMultipleResponse.html b/docs/apidocs/codes/thischwa/cf/model/class-use/AbstractMultipleResponse.html new file mode 100644 index 0000000..8886e0c --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/model/class-use/AbstractMultipleResponse.html @@ -0,0 +1,96 @@ + + + + +Verwendungsweise von Klasse codes.thischwa.cf.model.AbstractMultipleResponse (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+
+

Verwendungen von Klasse
codes.thischwa.cf.model.AbstractMultipleResponse

+
+
Packages, die AbstractMultipleResponse verwenden
+
+
Package
+
Beschreibung
+ +
+
The model of CloudflareDNS-java.
+
+
+
+ +
+
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/model/class-use/AbstractResponse.html b/docs/apidocs/codes/thischwa/cf/model/class-use/AbstractResponse.html new file mode 100644 index 0000000..87db884 --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/model/class-use/AbstractResponse.html @@ -0,0 +1,112 @@ + + + + +Verwendungsweise von Klasse codes.thischwa.cf.model.AbstractResponse (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+
+

Verwendungen von Klasse
codes.thischwa.cf.model.AbstractResponse

+
+
Packages, die AbstractResponse verwenden
+
+
Package
+
Beschreibung
+ +
+
The model of CloudflareDNS-java.
+
+
+
+ +
+
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/model/class-use/AbstractSingleResponse.html b/docs/apidocs/codes/thischwa/cf/model/class-use/AbstractSingleResponse.html new file mode 100644 index 0000000..97e16f2 --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/model/class-use/AbstractSingleResponse.html @@ -0,0 +1,91 @@ + + + + +Verwendungsweise von Klasse codes.thischwa.cf.model.AbstractSingleResponse (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+
+

Verwendungen von Klasse
codes.thischwa.cf.model.AbstractSingleResponse

+
+
Packages, die AbstractSingleResponse verwenden
+
+
Package
+
Beschreibung
+ +
+
The model of CloudflareDNS-java.
+
+
+
+ +
+
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/model/class-use/PagingRequest.html b/docs/apidocs/codes/thischwa/cf/model/class-use/PagingRequest.html new file mode 100644 index 0000000..69495e5 --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/model/class-use/PagingRequest.html @@ -0,0 +1,125 @@ + + + + +Verwendungsweise von Klasse codes.thischwa.cf.model.PagingRequest (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+
+

Verwendungen von Klasse
codes.thischwa.cf.model.PagingRequest

+
+
Packages, die PagingRequest verwenden
+
+
Package
+
Beschreibung
+ +
+
The base package of CloudflareDNS-java.
+
+ +
+
The model of CloudflareDNS-java.
+
+
+
+ +
+
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/model/class-use/RecordEntity.html b/docs/apidocs/codes/thischwa/cf/model/class-use/RecordEntity.html new file mode 100644 index 0000000..069e6b7 --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/model/class-use/RecordEntity.html @@ -0,0 +1,172 @@ + + + + +Verwendungsweise von Klasse codes.thischwa.cf.model.RecordEntity (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+
+

Verwendungen von Klasse
codes.thischwa.cf.model.RecordEntity

+
+
Packages, die RecordEntity verwenden
+
+
Package
+
Beschreibung
+ +
+
The base package of CloudflareDNS-java.
+
+ +
+
The model of CloudflareDNS-java.
+
+
+
+ +
+
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/model/class-use/RecordMultipleResponse.html b/docs/apidocs/codes/thischwa/cf/model/class-use/RecordMultipleResponse.html new file mode 100644 index 0000000..111a7b4 --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/model/class-use/RecordMultipleResponse.html @@ -0,0 +1,62 @@ + + + + +Verwendungsweise von Klasse codes.thischwa.cf.model.RecordMultipleResponse (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+
+

Verwendungen von Klasse
codes.thischwa.cf.model.RecordMultipleResponse

+
+Keine Verwendung von codes.thischwa.cf.model.RecordMultipleResponse
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/model/class-use/RecordSingleResponse.html b/docs/apidocs/codes/thischwa/cf/model/class-use/RecordSingleResponse.html new file mode 100644 index 0000000..7d33793 --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/model/class-use/RecordSingleResponse.html @@ -0,0 +1,62 @@ + + + + +Verwendungsweise von Klasse codes.thischwa.cf.model.RecordSingleResponse (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+
+

Verwendungen von Klasse
codes.thischwa.cf.model.RecordSingleResponse

+
+Keine Verwendung von codes.thischwa.cf.model.RecordSingleResponse
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/model/class-use/RecordType.html b/docs/apidocs/codes/thischwa/cf/model/class-use/RecordType.html new file mode 100644 index 0000000..2b8c42e --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/model/class-use/RecordType.html @@ -0,0 +1,142 @@ + + + + +Verwendungsweise von Enum-Klasse codes.thischwa.cf.model.RecordType (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+
+

Verwendungen von Enum-Klasse
codes.thischwa.cf.model.RecordType

+
+
Packages, die RecordType verwenden
+
+
Package
+
Beschreibung
+ +
+
The base package of CloudflareDNS-java.
+
+ +
+
The model of CloudflareDNS-java.
+
+
+
+ +
+
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/model/class-use/ResponseEntity.html b/docs/apidocs/codes/thischwa/cf/model/class-use/ResponseEntity.html new file mode 100644 index 0000000..7d95328 --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/model/class-use/ResponseEntity.html @@ -0,0 +1,118 @@ + + + + +Verwendungsweise von Schnittstelle codes.thischwa.cf.model.ResponseEntity (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+
+

Verwendungen von Schnittstelle
codes.thischwa.cf.model.ResponseEntity

+
+
Packages, die ResponseEntity verwenden
+
+
Package
+
Beschreibung
+ +
+
The model of CloudflareDNS-java.
+
+
+
+ +
+
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/model/class-use/ResultInfo.html b/docs/apidocs/codes/thischwa/cf/model/class-use/ResultInfo.html new file mode 100644 index 0000000..bdb8501 --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/model/class-use/ResultInfo.html @@ -0,0 +1,62 @@ + + + + +Verwendungsweise von Klasse codes.thischwa.cf.model.ResultInfo (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+
+

Verwendungen von Klasse
codes.thischwa.cf.model.ResultInfo

+
+Keine Verwendung von codes.thischwa.cf.model.ResultInfo
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/model/class-use/ZoneEntity.html b/docs/apidocs/codes/thischwa/cf/model/class-use/ZoneEntity.html new file mode 100644 index 0000000..edd022a --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/model/class-use/ZoneEntity.html @@ -0,0 +1,166 @@ + + + + +Verwendungsweise von Klasse codes.thischwa.cf.model.ZoneEntity (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+
+

Verwendungen von Klasse
codes.thischwa.cf.model.ZoneEntity

+
+
Packages, die ZoneEntity verwenden
+
+
Package
+
Beschreibung
+ +
+
The base package of CloudflareDNS-java.
+
+
+
+ +
+
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/model/class-use/ZoneMultipleResponse.html b/docs/apidocs/codes/thischwa/cf/model/class-use/ZoneMultipleResponse.html new file mode 100644 index 0000000..4f19ba2 --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/model/class-use/ZoneMultipleResponse.html @@ -0,0 +1,62 @@ + + + + +Verwendungsweise von Klasse codes.thischwa.cf.model.ZoneMultipleResponse (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+
+

Verwendungen von Klasse
codes.thischwa.cf.model.ZoneMultipleResponse

+
+Keine Verwendung von codes.thischwa.cf.model.ZoneMultipleResponse
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/model/package-summary.html b/docs/apidocs/codes/thischwa/cf/model/package-summary.html new file mode 100644 index 0000000..2e3518d --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/model/package-summary.html @@ -0,0 +1,165 @@ + + + + +codes.thischwa.cf.model (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+
+

Package codes.thischwa.cf.model

+
+
+
package codes.thischwa.cf.model
+
+
The model of CloudflareDNS-java.
+
+
+
    +
  • + +
  • +
  • +
    +
    +
    +
    +
    Klasse
    +
    Beschreibung
    + +
    +
    Represents a base abstract entity class for modeling domain objects with a unique identifier.
    +
    + +
    +
    Abstract base class for response models that contain multiple result entries.
    +
    + +
    +
    Abstract base class for API response models.
    +
    + +
    +
    Represents a base abstract response model for handling single response entities within an API + response.
    +
    + +
    +
    Represents a request model for paginated data.
    +
    + +
    +
    Represents a DNS record entity within a specific zone.
    +
    + +
    +
    Represents the API response of the Cloudflare API containing multiple DNS record entities.
    +
    + +
    +
    Represents the API response of the Cloudflare API containing a single DNS record entity.
    +
    + +
    +
    Enum representing various DNS record types.
    +
    + +
    +
    Represents a contract for entities that have a unique identifier.
    +
    + +
    +
    Represents metadata for paginated results.
    +
    + +
    +
    Represents a DNS zone entity in the Cloudflare DNS system.
    +
    + +
    +
    Represents a response model that contains multiple ZoneEntity instances.
    +
    +
    +
    +
    +
  • +
+
+
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/model/package-tree.html b/docs/apidocs/codes/thischwa/cf/model/package-tree.html new file mode 100644 index 0000000..9579b8c --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/model/package-tree.html @@ -0,0 +1,118 @@ + + + + +codes.thischwa.cf.model Klassenhierarchie (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchie für Package codes.thischwa.cf.model

+
+Packagehierarchien: + +
+

Klassenhierarchie

+ +
+
+

Schnittstellenhierarchie

+ +
+
+

Enum-Klassenhierarchie

+ +
+
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/model/package-use.html b/docs/apidocs/codes/thischwa/cf/model/package-use.html new file mode 100644 index 0000000..09bb69b --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/model/package-use.html @@ -0,0 +1,146 @@ + + + + +Verwendungsweise von Package codes.thischwa.cf.model (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+
+

Verwendungen von Package
codes.thischwa.cf.model

+
+
Packages, die codes.thischwa.cf.model verwenden
+
+
Package
+
Beschreibung
+ +
+
The base package of CloudflareDNS-java.
+
+ +
+
The model of CloudflareDNS-java.
+
+
+
+ +
+
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/package-summary.html b/docs/apidocs/codes/thischwa/cf/package-summary.html new file mode 100644 index 0000000..f3f5ece --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/package-summary.html @@ -0,0 +1,130 @@ + + + + +codes.thischwa.cf (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+
+

Package codes.thischwa.cf

+
+
+
package codes.thischwa.cf
+
+
The base package of CloudflareDNS-java.
+
+
+
    +
  • + +
  • +
  • +
    +
    +
    +
    +
    Klasse
    +
    Beschreibung
    + +
    +
    CfDnsClient is a client interface to interact with Cloudflare DNS service.
    +
    + +
    +
    Enum CfRequest encapsulates various API endpoint paths for managing DNS zones and records in a + cohesive and reusable manner.
    +
    + +
    +
    Represents a custom exception for errors encountered while interacting with the Cloudflare API.
    +
    + +
    +
    This exception is thrown to indicate that a requested resource was not found during interaction + with the Cloudflare API.
    +
    +
    +
    +
    +
  • +
+
+
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/package-tree.html b/docs/apidocs/codes/thischwa/cf/package-tree.html new file mode 100644 index 0000000..bd4e346 --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/package-tree.html @@ -0,0 +1,103 @@ + + + + +codes.thischwa.cf Klassenhierarchie (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchie für Package codes.thischwa.cf

+
+Packagehierarchien: + +
+

Klassenhierarchie

+ +
+
+

Enum-Klassenhierarchie

+ +
+
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/codes/thischwa/cf/package-use.html b/docs/apidocs/codes/thischwa/cf/package-use.html new file mode 100644 index 0000000..8c9fd10 --- /dev/null +++ b/docs/apidocs/codes/thischwa/cf/package-use.html @@ -0,0 +1,93 @@ + + + + +Verwendungsweise von Package codes.thischwa.cf (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+
+

Verwendungen von Package
codes.thischwa.cf

+
+
Packages, die codes.thischwa.cf verwenden
+
+
Package
+
Beschreibung
+ +
+
The base package of CloudflareDNS-java.
+
+
+
+
    +
  • +
    +
    Von codes.thischwa.cf verwendete Klassen in codes.thischwa.cf
    +
    +
    Klasse
    +
    Beschreibung
    + +
    +
    Enum CfRequest encapsulates various API endpoint paths for managing DNS zones and records in a + cohesive and reusable manner.
    +
    + +
    +
    Represents a custom exception for errors encountered while interacting with the Cloudflare API.
    +
    +
    +
    +
  • +
+
+
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/copy.svg b/docs/apidocs/copy.svg new file mode 100644 index 0000000..7c46ab1 --- /dev/null +++ b/docs/apidocs/copy.svg @@ -0,0 +1,33 @@ + + + + + + + + diff --git a/docs/apidocs/element-list b/docs/apidocs/element-list new file mode 100644 index 0000000..9decf90 --- /dev/null +++ b/docs/apidocs/element-list @@ -0,0 +1,2 @@ +codes.thischwa.cf +codes.thischwa.cf.model diff --git a/docs/apidocs/help-doc.html b/docs/apidocs/help-doc.html new file mode 100644 index 0000000..988e7d0 --- /dev/null +++ b/docs/apidocs/help-doc.html @@ -0,0 +1,198 @@ + + + + +API-Hilfe (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+

Hilfe zu JavaDoc

+ +
+
+

Navigation

+Ausgehend von der Seite Überblick können Sie die Dokumentation mithilfe der Links durchsuchen, die sich auf jeder Seite und in der Navigationsleiste oben auf jeder Seite befinden. Mit Index und dem Suchfeld können Sie zu spezifischen Deklarationen und Übersichtsseiten navigieren, wie Alle Packages, Alle Klassen und Schnittstellen + +
+
+
+

Seitenarten

+Die folgenden Abschnitte beschreiben die verschiedenen Seitenarten in dieser Collection. +
+

Überblick

+

Die Seite Überblick ist die Titelseite dieses API-Dokuments und enthält eine Liste aller Packages mit einer Übersicht für jedes Packages. Diese Seite kann auch eine Gesamtbeschreibung des Packagesets enthalten.

+
+
+

Package

+

Für jedes Package ist eine Seite vorhanden, die eine Liste der Klassen und Schnittstellen mit jeweils einer Übersicht dafür enthält. Diese Seiten können die folgenden Kategorien enthalten:

+
    +
  • Schnittstellen
  • +
  • Klassen
  • +
  • Enum-Klassen
  • +
  • Ausnahmeklassen
  • +
  • Annotationsschnittstellen
  • +
+
+
+

Klasse oder Schnittstelle

+

Für jede Klasse, Schnittstelle, verschachtelte Klasse und verschachtelte Schnittstelle ist eine separate Seite vorhanden. Jede dieser Seiten enthält drei Abschnitte, die aus einer Deklaration und Beschreibung, Mitgliederübersichtstabellen und detaillierten Mitgliederbeschreibungen bestehen. Die Einträge in diesen Abschnitten werden weggelassen, wenn sie leer oder nicht anwendbar sind.

+
    +
  • Klassenvererbungsdiagramm
  • +
  • Direkte Unterklassen
  • +
  • Alle bekannten Unterschnittstellen
  • +
  • Alle bekannten Implementierungsklassen
  • +
  • Klassen- oder Schnittstellendeklaration
  • +
  • Klassen- oder Schnittstellenbeschreibung
  • +
+
+
    +
  • Verschachtelte Klassen - Übersicht
  • +
  • Enum-Konstanten - Übersicht
  • +
  • Feldübersicht
  • +
  • Eigenschaftsübersicht
  • +
  • Konstruktorübersicht
  • +
  • Methodenübersicht
  • +
  • Erforderliche Elemente - Übersicht
  • +
  • Optionale Elemente - Übersicht
  • +
+
+
    +
  • Enum-Konstanten - Details
  • +
  • Felddetails
  • +
  • Eigenschaftsdetails
  • +
  • Konstruktordetails
  • +
  • Methodendetails
  • +
  • Elementdetails
  • +
+

Hinweis: Annotationsschnittstellen haben erforderliche und optionale Elemente, aber nicht Methoden. Nur Enum-Klassen haben Enum-Konstanten. Die Komponenten einer Datensatzklasse werden als Teil der Deklaration der Datensatzklasse angezeigt. Eigenschaften sind ein Feature von JavaFX.

+

Die Übersichtseinträge sind alphabetisch geordnet, während die detaillierten Beschreibungen in der Reihenfolge aufgeführt werden, in der sie im Quellcode auftreten. So werden die vom Programmierer festgelegten logischen Gruppierungen beibehalten.

+
+
+

Weitere Dateien

+

Packages und Module können Seiten mit weiteren Informationen zu den Deklarationen in der Nähe enthalten.

+
+
+

Verwendung

+

Für jedes dokumentierte Package sowie jede Klasse und jede Schnittstelle ist eine eigene Verwendungsseite vorhanden. Auf dieser Seite wird beschrieben, welche Packages, Klassen, Methoden, Konstruktoren und Felder einen Teil der angegebenen Klasse oder des angegebenen Packages verwenden. Bei der Klasse oder Schnittstelle A enthält die Verwendungsseite die Unterklassen von A, als A deklarierte Felder, Methoden, die A zurückgeben, sowie Methoden und Konstruktoren mit Parametern des Typs A. Sie können diese Seite aufrufen, indem Sie zunächst das Package, die Klasse oder die Schnittstelle aufrufen und anschließend in der Navigationsleiste auf den Link "Verwendung" klicken.

+
+
+

Baum (Klassenhierarchie)

+

Es gibt eine Seite Klassenhierarchie für alle Packages, und für jedes Package gibt es eine Hierarchie. Jede Hierarchieseite enthält eine Klassen- und eine Schnittstellenliste. Die Klassen sind nach Vererbungsstruktur organisiert, beginnend mit java.lang.Object. Die Schnittstellen erben nicht von java.lang.Object.

+
    +
  • Wenn Sie auf der Übersichtsseite auf "Baum" klicken, wird die Hierarchie für alle Packages angezeigt.
  • +
  • Wenn Sie eine bestimmte Package-, Klassen- oder Schnittstellenseite anzeigen und auf "Baum" klicken, wird die Hierarchie nur für dieses Package angezeigt.
  • +
+
+
+

Serialisierte Form

+

Jede serialisierbare oder externalisierbare Klasse verfügt über eine Beschreibung der zugehörigen Serialisierungsfelder und -methoden. Diese Informationen sind eher für Implementierer als für Benutzer der API von Interesse. Die Navigationsleiste enthält zwar keinen Link, Sie können diese Informationen jedoch abrufen, indem Sie zu einer beliebigen serialisierten Klasse navigieren und im Abschnitt "Siehe auch" der Klassenbeschreibung auf "Serialisierte Form" klicken.

+
+
+

Alle Packages

+

Die Seite Alle Packages enthält einen alphabetischen Index aller Packages, die in der Dokumentation enthalten sind.

+
+
+

Alle Klassen und Schnittstellen

+

Die Seite Alle Klassen und Schnittstellen enthält einen alphabetischen Index aller Klassen und Schnittstellen in der Dokumentation, einschließlich Annotationsschnittstellen, Enum-Klassen und Datensatzklassen.

+
+
+

Index

+

Die Index enthält einen alphabetischen Index aller Klassen, Schnittstellen, Konstruktoren, Methoden und Felder in der Dokumentation sowie Übersichtsseiten wie Alle Packages, Alle Klassen und Schnittstellen.

+
+
+
+Diese Hilfedatei gilt für die vom Standard-Doclet generierte API-Dokumentation.
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/index-all.html b/docs/apidocs/index-all.html new file mode 100644 index 0000000..40d0952 --- /dev/null +++ b/docs/apidocs/index-all.html @@ -0,0 +1,417 @@ + + + + +Index (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A B C D G H L M N O P R S T U V Z 
Alle Klassen und Schnittstellen|Alle Packages|Serialisierte Form +

A

+
+
A - Enum-Konstante in Enum-Klasse codes.thischwa.cf.model.RecordType
+
 
+
AAAA - Enum-Konstante in Enum-Klasse codes.thischwa.cf.model.RecordType
+
 
+
AbstractEntity - Klasse in codes.thischwa.cf.model
+
+
Represents a base abstract entity class for modeling domain objects with a unique identifier.
+
+
AbstractEntity() - Konstruktor für Klasse codes.thischwa.cf.model.AbstractEntity
+
 
+
AbstractMultipleResponse<T> - Klasse in codes.thischwa.cf.model
+
+
Abstract base class for response models that contain multiple result entries.
+
+
AbstractMultipleResponse() - Konstruktor für Klasse codes.thischwa.cf.model.AbstractMultipleResponse
+
 
+
AbstractResponse - Klasse in codes.thischwa.cf.model
+
+
Abstract base class for API response models.
+
+
AbstractResponse() - Konstruktor für Klasse codes.thischwa.cf.model.AbstractResponse
+
 
+
AbstractSingleResponse<T> - Klasse in codes.thischwa.cf.model
+
+
Represents a base abstract response model for handling single response entities within an API + response.
+
+
AbstractSingleResponse() - Konstruktor für Klasse codes.thischwa.cf.model.AbstractSingleResponse
+
 
+
addQueryString(String) - Methode in Klasse codes.thischwa.cf.model.PagingRequest
+
+
Appends a query string with pagination parameters (page and perPage) to the provided endpoint.
+
+
+

B

+
+
build(String, RecordType, Integer, String) - Statische Methode in Klasse codes.thischwa.cf.model.RecordEntity
+
+
Builds and returns a RecordEntity instance with the specified attributes.
+
+
+

C

+
+
CAA - Enum-Konstante in Enum-Klasse codes.thischwa.cf.model.RecordType
+
 
+
CERT - Enum-Konstante in Enum-Klasse codes.thischwa.cf.model.RecordType
+
 
+
CfDnsClient - Klasse in codes.thischwa.cf
+
+
CfDnsClient is a client interface to interact with Cloudflare DNS service.
+
+
CfDnsClient(boolean, String, String, String, String) - Konstruktor für Klasse codes.thischwa.cf.CfDnsClient
+
+
Constructs a new instance of CfDnsClient, which facilitates interactions with the + Cloudflare DNS API.
+
+
CfDnsClient(String, String, String) - Konstruktor für Klasse codes.thischwa.cf.CfDnsClient
+
+
Constructs a CfDnsClient instance for interacting with the Cloudflare DNS API.
+
+
CfDnsClient(String, String, String, String) - Konstruktor für Klasse codes.thischwa.cf.CfDnsClient
+
+
Constructs a CfDnsClient instance for interacting with the Cloudflare DNS API.
+
+
CfRequest - Enum-Klasse in codes.thischwa.cf
+
+
Enum CfRequest encapsulates various API endpoint paths for managing DNS zones and records in a + cohesive and reusable manner.
+
+
CloudflareApiException - Ausnahmeklasse in codes.thischwa.cf
+
+
Represents a custom exception for errors encountered while interacting with the Cloudflare API.
+
+
CloudflareApiException(String) - Konstruktor für Ausnahmeklasse codes.thischwa.cf.CloudflareApiException
+
+
Constructs a new CloudflareApiException with the specified detail message.
+
+
CloudflareApiException(String, Throwable) - Konstruktor für Ausnahmeklasse codes.thischwa.cf.CloudflareApiException
+
+
Constructs a new CloudflareApiException with the specified detail message and cause.
+
+
CloudflareApiException(Throwable) - Konstruktor für Ausnahmeklasse codes.thischwa.cf.CloudflareApiException
+
+
Constructs a new CloudflareApiException with the specified cause.
+
+
CloudflareNotFoundException - Ausnahmeklasse in codes.thischwa.cf
+
+
This exception is thrown to indicate that a requested resource was not found during interaction + with the Cloudflare API.
+
+
CloudflareNotFoundException(String) - Konstruktor für Ausnahmeklasse codes.thischwa.cf.CloudflareNotFoundException
+
+
Constructs a new CloudflareNotFoundException with the specified detail message.
+
+
CloudflareNotFoundException(String, Throwable) - Konstruktor für Ausnahmeklasse codes.thischwa.cf.CloudflareNotFoundException
+
+
Constructs a new CloudflareNotFoundException with the specified detail message and cause.
+
+
CloudflareNotFoundException(Throwable) - Konstruktor für Ausnahmeklasse codes.thischwa.cf.CloudflareNotFoundException
+
+
Constructs a new CloudflareNotFoundException with the specified cause.
+
+
CNAME - Enum-Konstante in Enum-Klasse codes.thischwa.cf.model.RecordType
+
 
+
codes.thischwa.cf - Package codes.thischwa.cf
+
+
The base package of CloudflareDNS-java.
+
+
codes.thischwa.cf.model - Package codes.thischwa.cf.model
+
+
The model of CloudflareDNS-java.
+
+
+

D

+
+
defaultPaging() - Statische Methode in Klasse codes.thischwa.cf.model.PagingRequest
+
+
Creates a default PagingRequest instance with a page number set to 1 and a high number + of items per page (5,000,000) to accommodate large dataset requests.
+
+
deleteRequest(String, Class<T>) - Methode in Klasse codes.thischwa.cf.CfDnsClient
+
+
Sends a DELETE request to the given endpoint and maps the response.
+
+
DNSKEY - Enum-Konstante in Enum-Klasse codes.thischwa.cf.model.RecordType
+
 
+
DS - Enum-Konstante in Enum-Klasse codes.thischwa.cf.model.RecordType
+
 
+
+

G

+
+
getId() - Methode in Schnittstelle codes.thischwa.cf.model.ResponseEntity
+
+
Retrieves the unique identifier of the entity.
+
+
getPagingParams() - Methode in Klasse codes.thischwa.cf.model.PagingRequest
+
+
Retrieves the pagination parameters in a key-value map format.
+
+
getRequest(String, Class<T>) - Methode in Klasse codes.thischwa.cf.CfDnsClient
+
+
Sends a GET request to the given endpoint and maps the response.
+
+
+

H

+
+
HTTPS - Enum-Konstante in Enum-Klasse codes.thischwa.cf.model.RecordType
+
 
+
+

L

+
+
LOC - Enum-Konstante in Enum-Klasse codes.thischwa.cf.model.RecordType
+
 
+
+

M

+
+
MX - Enum-Konstante in Enum-Klasse codes.thischwa.cf.model.RecordType
+
 
+
+

N

+
+
NAPTR - Enum-Konstante in Enum-Klasse codes.thischwa.cf.model.RecordType
+
 
+
NS - Enum-Konstante in Enum-Klasse codes.thischwa.cf.model.RecordType
+
 
+
+

O

+
+
of(int, int) - Statische Methode in Klasse codes.thischwa.cf.model.PagingRequest
+
+
Creates a new PagingRequest instance with the specified page number and items per page.
+
+
OPENPGPKEY - Enum-Konstante in Enum-Klasse codes.thischwa.cf.model.RecordType
+
 
+
+

P

+
+
PagingRequest - Klasse in codes.thischwa.cf.model
+
+
Represents a request model for paginated data.
+
+
patchRequest(String, R, Class<T>) - Methode in Klasse codes.thischwa.cf.CfDnsClient
+
+
Sends a PATCH request with a payload to the given endpoint and maps the response.
+
+
postRequest(String, R, Class<T>) - Methode in Klasse codes.thischwa.cf.CfDnsClient
+
+
Sends a POST request with a payload to the given endpoint and maps the response.
+
+
PTR - Enum-Konstante in Enum-Klasse codes.thischwa.cf.model.RecordType
+
 
+
putRequest(String, R, Class<T>) - Methode in Klasse codes.thischwa.cf.CfDnsClient
+
+
Sends a PUT request with a payload to the given endpoint and maps the response.
+
+
+

R

+
+
RECORD_CREATE - Enum-Konstante in Enum-Klasse codes.thischwa.cf.CfRequest
+
 
+
RECORD_DELETE - Enum-Konstante in Enum-Klasse codes.thischwa.cf.CfRequest
+
 
+
RECORD_INFO_NAME - Enum-Konstante in Enum-Klasse codes.thischwa.cf.CfRequest
+
 
+
RECORD_INFO_NAME_TYPE - Enum-Konstante in Enum-Klasse codes.thischwa.cf.CfRequest
+
 
+
RECORD_UPDATE - Enum-Konstante in Enum-Klasse codes.thischwa.cf.CfRequest
+
 
+
recordCreate(ZoneEntity, RecordEntity) - Methode in Klasse codes.thischwa.cf.CfDnsClient
+
+
Creates a new DNS record in the specified zone using the Cloudflare API.
+
+
recordDelete(ZoneEntity, RecordEntity) - Methode in Klasse codes.thischwa.cf.CfDnsClient
+
+
Deletes a DNS record of the specified type within a given zone on the Cloudflare API.
+
+
recordDelete(ZoneEntity, String) - Methode in Klasse codes.thischwa.cf.CfDnsClient
+
+
Deletes a DNS record of the specified type within a given zone on the Cloudflare API.
+
+
recordDeleteTypeIfExists(ZoneEntity, String, RecordType) - Methode in Klasse codes.thischwa.cf.CfDnsClient
+
+
Attempts to delete a DNS record of a specific type for a given zone and second-level domain + (SLD), if it exists.
+
+
RecordEntity - Klasse in codes.thischwa.cf.model
+
+
Represents a DNS record entity within a specific zone.
+
+
RecordEntity() - Konstruktor für Klasse codes.thischwa.cf.model.RecordEntity
+
 
+
RecordMultipleResponse - Klasse in codes.thischwa.cf.model
+
+
Represents the API response of the Cloudflare API containing multiple DNS record entities.
+
+
RecordMultipleResponse() - Konstruktor für Klasse codes.thischwa.cf.model.RecordMultipleResponse
+
 
+
RecordSingleResponse - Klasse in codes.thischwa.cf.model
+
+
Represents the API response of the Cloudflare API containing a single DNS record entity.
+
+
RecordSingleResponse() - Konstruktor für Klasse codes.thischwa.cf.model.RecordSingleResponse
+
 
+
RecordType - Enum-Klasse in codes.thischwa.cf.model
+
+
Enum representing various DNS record types.
+
+
recordUpdate(ZoneEntity, RecordEntity) - Methode in Klasse codes.thischwa.cf.CfDnsClient
+
+
Updates an existing DNS record in a specified Cloudflare zone.
+
+
ResponseEntity - Schnittstelle in codes.thischwa.cf.model
+
+
Represents a contract for entities that have a unique identifier.
+
+
ResultInfo - Klasse in codes.thischwa.cf.model
+
+
Represents metadata for paginated results.
+
+
ResultInfo() - Konstruktor für Klasse codes.thischwa.cf.model.ResultInfo
+
 
+
+

S

+
+
sldInfo(ZoneEntity, String, RecordType) - Methode in Klasse codes.thischwa.cf.CfDnsClient
+
+
Retrieves detailed information about a specific second-level domain (SLD) record for a given + zone and record type from the Cloudflare API.
+
+
sldListAll(ZoneEntity, String) - Methode in Klasse codes.thischwa.cf.CfDnsClient
+
+
Retrieves all record entities for a specific second-level domain (SLD) within a given DNS zone.
+
+
sldListAll(ZoneEntity, String, PagingRequest) - Methode in Klasse codes.thischwa.cf.CfDnsClient
+
+
Retrieves all record entities for a specific second-level domain (SLD) within a given DNS zone.
+
+
SMIMEA - Enum-Konstante in Enum-Klasse codes.thischwa.cf.model.RecordType
+
 
+
SRV - Enum-Konstante in Enum-Klasse codes.thischwa.cf.model.RecordType
+
 
+
SSHFP - Enum-Konstante in Enum-Klasse codes.thischwa.cf.model.RecordType
+
 
+
SVCB - Enum-Konstante in Enum-Klasse codes.thischwa.cf.model.RecordType
+
 
+
+

T

+
+
TLSA - Enum-Konstante in Enum-Klasse codes.thischwa.cf.model.RecordType
+
 
+
toString() - Methode in Enum-Klasse codes.thischwa.cf.model.RecordType
+
 
+
TXT - Enum-Konstante in Enum-Klasse codes.thischwa.cf.model.RecordType
+
 
+
+

U

+
+
URI - Enum-Konstante in Enum-Klasse codes.thischwa.cf.model.RecordType
+
 
+
+

V

+
+
valueOf(String) - Statische Methode in Enum-Klasse codes.thischwa.cf.CfRequest
+
+
Gibt die Enum-Konstante dieser Klasse mit dem angegebenen Namen zurück.
+
+
valueOf(String) - Statische Methode in Enum-Klasse codes.thischwa.cf.model.RecordType
+
+
Gibt die Enum-Konstante dieser Klasse mit dem angegebenen Namen zurück.
+
+
values() - Statische Methode in Enum-Klasse codes.thischwa.cf.CfRequest
+
+
Gibt ein Array mit den Konstanten dieser Enum-Klasse in +der Reihenfolge ihrer Deklaration zurück.
+
+
values() - Statische Methode in Enum-Klasse codes.thischwa.cf.model.RecordType
+
+
Gibt ein Array mit den Konstanten dieser Enum-Klasse in +der Reihenfolge ihrer Deklaration zurück.
+
+
+

Z

+
+
ZONE_INFO - Enum-Konstante in Enum-Klasse codes.thischwa.cf.CfRequest
+
 
+
ZONE_LIST - Enum-Konstante in Enum-Klasse codes.thischwa.cf.CfRequest
+
 
+
ZoneEntity - Klasse in codes.thischwa.cf.model
+
+
Represents a DNS zone entity in the Cloudflare DNS system.
+
+
ZoneEntity() - Konstruktor für Klasse codes.thischwa.cf.model.ZoneEntity
+
 
+
zoneInfo(String) - Methode in Klasse codes.thischwa.cf.CfDnsClient
+
+
Retrieves detailed information about a specific zone by its name.
+
+
zoneListAll() - Methode in Klasse codes.thischwa.cf.CfDnsClient
+
+
Retrieves a list of all zones from the Cloudflare API.
+
+
zoneListAll(PagingRequest) - Methode in Klasse codes.thischwa.cf.CfDnsClient
+
+
Retrieves a list of all zones from the Cloudflare API.
+
+
ZoneMultipleResponse - Klasse in codes.thischwa.cf.model
+
+
Represents a response model that contains multiple ZoneEntity instances.
+
+
ZoneMultipleResponse() - Konstruktor für Klasse codes.thischwa.cf.model.ZoneMultipleResponse
+
 
+
+A B C D G H L M N O P R S T U V Z 
Alle Klassen und Schnittstellen|Alle Packages|Serialisierte Form
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/index.html b/docs/apidocs/index.html new file mode 100644 index 0000000..7637f7d --- /dev/null +++ b/docs/apidocs/index.html @@ -0,0 +1,77 @@ + + + + +Überblick (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+
+

CloudflareDNS-java 0.1.0-SNAPSHOT API

+
+
+
Packages
+
+
Package
+
Beschreibung
+ +
+
The base package of CloudflareDNS-java.
+
+ +
+
The model of CloudflareDNS-java.
+
+
+
+
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/legal/ADDITIONAL_LICENSE_INFO b/docs/apidocs/legal/ADDITIONAL_LICENSE_INFO new file mode 100644 index 0000000..ff700cd --- /dev/null +++ b/docs/apidocs/legal/ADDITIONAL_LICENSE_INFO @@ -0,0 +1,37 @@ + ADDITIONAL INFORMATION ABOUT LICENSING + +Certain files distributed by Oracle America, Inc. and/or its affiliates are +subject to the following clarification and special exception to the GPLv2, +based on the GNU Project exception for its Classpath libraries, known as the +GNU Classpath Exception. + +Note that Oracle includes multiple, independent programs in this software +package. Some of those programs are provided under licenses deemed +incompatible with the GPLv2 by the Free Software Foundation and others. +For example, the package includes programs licensed under the Apache +License, Version 2.0 and may include FreeType. Such programs are licensed +to you under their original licenses. + +Oracle facilitates your further distribution of this package by adding the +Classpath Exception to the necessary parts of its GPLv2 code, which permits +you to use that code in combination with other independent modules not +licensed under the GPLv2. However, note that this would not permit you to +commingle code under an incompatible license with Oracle's GPLv2 licensed +code by, for example, cutting and pasting such code into a file also +containing Oracle's GPLv2 licensed code and then distributing the result. + +Additionally, if you were to remove the Classpath Exception from any of the +files to which it applies and distribute the result, you would likely be +required to license some or all of the other code in that distribution under +the GPLv2 as well, and since the GPLv2 is incompatible with the license terms +of some items included in the distribution by Oracle, removing the Classpath +Exception could therefore effectively compromise your ability to further +distribute the package. + +Failing to distribute notices associated with some files may also create +unexpected legal consequences. + +Proceed with caution and we recommend that you obtain the advice of a lawyer +skilled in open source matters before removing the Classpath Exception or +making modifications to this package which may subsequently be redistributed +and/or involve the use of third party software. diff --git a/docs/apidocs/legal/ASSEMBLY_EXCEPTION b/docs/apidocs/legal/ASSEMBLY_EXCEPTION new file mode 100644 index 0000000..4296666 --- /dev/null +++ b/docs/apidocs/legal/ASSEMBLY_EXCEPTION @@ -0,0 +1,27 @@ + +OPENJDK ASSEMBLY EXCEPTION + +The OpenJDK source code made available by Oracle America, Inc. (Oracle) at +openjdk.org ("OpenJDK Code") is distributed under the terms of the GNU +General Public License version 2 +only ("GPL2"), with the following clarification and special exception. + + Linking this OpenJDK Code statically or dynamically with other code + is making a combined work based on this library. Thus, the terms + and conditions of GPL2 cover the whole combination. + + As a special exception, Oracle gives you permission to link this + OpenJDK Code with certain code licensed by Oracle as indicated at + https://openjdk.org/legal/exception-modules-2007-05-08.html + ("Designated Exception Modules") to produce an executable, + regardless of the license terms of the Designated Exception Modules, + and to copy and distribute the resulting executable under GPL2, + provided that the Designated Exception Modules continue to be + governed by the licenses under which they were offered by Oracle. + +As such, it allows licensees and sublicensees of Oracle's GPL2 OpenJDK Code +to build an executable that includes those portions of necessary code that +Oracle could not provide under GPL2 (or that Oracle has provided under GPL2 +with the Classpath exception). If you modify or add to the OpenJDK code, +that new GPL2 code may still be combined with Designated Exception Modules +if the new code is made subject to this exception by its copyright holder. diff --git a/docs/apidocs/legal/LICENSE b/docs/apidocs/legal/LICENSE new file mode 100644 index 0000000..8b400c7 --- /dev/null +++ b/docs/apidocs/legal/LICENSE @@ -0,0 +1,347 @@ +The GNU General Public License (GPL) + +Version 2, June 1991 + +Copyright (C) 1989, 1991 Free Software Foundation, Inc. +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Everyone is permitted to copy and distribute verbatim copies of this license +document, but changing it is not allowed. + +Preamble + +The licenses for most software are designed to take away your freedom to share +and change it. By contrast, the GNU General Public License is intended to +guarantee your freedom to share and change free software--to make sure the +software is free for all its users. This General Public License applies to +most of the Free Software Foundation's software and to any other program whose +authors commit to using it. (Some other Free Software Foundation software is +covered by the GNU Library General Public License instead.) You can apply it to +your programs, too. + +When we speak of free software, we are referring to freedom, not price. Our +General Public Licenses are designed to make sure that you have the freedom to +distribute copies of free software (and charge for this service if you wish), +that you receive source code or can get it if you want it, that you can change +the software or use pieces of it in new free programs; and that you know you +can do these things. + +To protect your rights, we need to make restrictions that forbid anyone to deny +you these rights or to ask you to surrender the rights. These restrictions +translate to certain responsibilities for you if you distribute copies of the +software, or if you modify it. + +For example, if you distribute copies of such a program, whether gratis or for +a fee, you must give the recipients all the rights that you have. You must +make sure that they, too, receive or can get the source code. And you must +show them these terms so they know their rights. + +We protect your rights with two steps: (1) copyright the software, and (2) +offer you this license which gives you legal permission to copy, distribute +and/or modify the software. + +Also, for each author's protection and ours, we want to make certain that +everyone understands that there is no warranty for this free software. If the +software is modified by someone else and passed on, we want its recipients to +know that what they have is not the original, so that any problems introduced +by others will not reflect on the original authors' reputations. + +Finally, any free program is threatened constantly by software patents. We +wish to avoid the danger that redistributors of a free program will +individually obtain patent licenses, in effect making the program proprietary. +To prevent this, we have made it clear that any patent must be licensed for +everyone's free use or not licensed at all. + +The precise terms and conditions for copying, distribution and modification +follow. + +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. This License applies to any program or other work which contains a notice +placed by the copyright holder saying it may be distributed under the terms of +this General Public License. The "Program", below, refers to any such program +or work, and a "work based on the Program" means either the Program or any +derivative work under copyright law: that is to say, a work containing the +Program or a portion of it, either verbatim or with modifications and/or +translated into another language. (Hereinafter, translation is included +without limitation in the term "modification".) Each licensee is addressed as +"you". + +Activities other than copying, distribution and modification are not covered by +this License; they are outside its scope. The act of running the Program is +not restricted, and the output from the Program is covered only if its contents +constitute a work based on the Program (independent of having been made by +running the Program). Whether that is true depends on what the Program does. + +1. You may copy and distribute verbatim copies of the Program's source code as +you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this License +and to the absence of any warranty; and give any other recipients of the +Program a copy of this License along with the Program. + +You may charge a fee for the physical act of transferring a copy, and you may +at your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Program or any portion of it, thus +forming a work based on the Program, and copy and distribute such modifications +or work under the terms of Section 1 above, provided that you also meet all of +these conditions: + + a) You must cause the modified files to carry prominent notices stating + that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in whole or + in part contains or is derived from the Program or any part thereof, to be + licensed as a whole at no charge to all third parties under the terms of + this License. + + c) If the modified program normally reads commands interactively when run, + you must cause it, when started running for such interactive use in the + most ordinary way, to print or display an announcement including an + appropriate copyright notice and a notice that there is no warranty (or + else, saying that you provide a warranty) and that users may redistribute + the program under these conditions, and telling the user how to view a copy + of this License. (Exception: if the Program itself is interactive but does + not normally print such an announcement, your work based on the Program is + not required to print an announcement.) + +These requirements apply to the modified work as a whole. If identifiable +sections of that work are not derived from the Program, and can be reasonably +considered independent and separate works in themselves, then this License, and +its terms, do not apply to those sections when you distribute them as separate +works. But when you distribute the same sections as part of a whole which is a +work based on the Program, the distribution of the whole must be on the terms +of this License, whose permissions for other licensees extend to the entire +whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest your +rights to work written entirely by you; rather, the intent is to exercise the +right to control the distribution of derivative or collective works based on +the Program. + +In addition, mere aggregation of another work not based on the Program with the +Program (or with a work based on the Program) on a volume of a storage or +distribution medium does not bring the other work under the scope of this +License. + +3. You may copy and distribute the Program (or a work based on it, under +Section 2) in object code or executable form under the terms of Sections 1 and +2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable source + code, which must be distributed under the terms of Sections 1 and 2 above + on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three years, to + give any third party, for a charge no more than your cost of physically + performing source distribution, a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of Sections 1 + and 2 above on a medium customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer to + distribute corresponding source code. (This alternative is allowed only + for noncommercial distribution and only if you received the program in + object code or executable form with such an offer, in accord with + Subsection b above.) + +The source code for a work means the preferred form of the work for making +modifications to it. For an executable work, complete source code means all +the source code for all modules it contains, plus any associated interface +definition files, plus the scripts used to control compilation and installation +of the executable. However, as a special exception, the source code +distributed need not include anything that is normally distributed (in either +source or binary form) with the major components (compiler, kernel, and so on) +of the operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the source +code from the same place counts as distribution of the source code, even though +third parties are not compelled to copy the source along with the object code. + +4. You may not copy, modify, sublicense, or distribute the Program except as +expressly provided under this License. Any attempt otherwise to copy, modify, +sublicense or distribute the Program is void, and will automatically terminate +your rights under this License. However, parties who have received copies, or +rights, from you under this License will not have their licenses terminated so +long as such parties remain in full compliance. + +5. You are not required to accept this License, since you have not signed it. +However, nothing else grants you permission to modify or distribute the Program +or its derivative works. These actions are prohibited by law if you do not +accept this License. Therefore, by modifying or distributing the Program (or +any work based on the Program), you indicate your acceptance of this License to +do so, and all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + +6. Each time you redistribute the Program (or any work based on the Program), +the recipient automatically receives a license from the original licensor to +copy, distribute or modify the Program subject to these terms and conditions. +You may not impose any further restrictions on the recipients' exercise of the +rights granted herein. You are not responsible for enforcing compliance by +third parties to this License. + +7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), conditions +are imposed on you (whether by court order, agreement or otherwise) that +contradict the conditions of this License, they do not excuse you from the +conditions of this License. If you cannot distribute so as to satisfy +simultaneously your obligations under this License and any other pertinent +obligations, then as a consequence you may not distribute the Program at all. +For example, if a patent license would not permit royalty-free redistribution +of the Program by all those who receive copies directly or indirectly through +you, then the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply and +the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any patents or +other property right claims or to contest validity of any such claims; this +section has the sole purpose of protecting the integrity of the free software +distribution system, which is implemented by public license practices. Many +people have made generous contributions to the wide range of software +distributed through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing to +distribute software through any other system and a licensee cannot impose that +choice. + +This section is intended to make thoroughly clear what is believed to be a +consequence of the rest of this License. + +8. If the distribution and/or use of the Program is restricted in certain +countries either by patents or by copyrighted interfaces, the original +copyright holder who places the Program under this License may add an explicit +geographical distribution limitation excluding those countries, so that +distribution is permitted only in or among countries not thus excluded. In +such case, this License incorporates the limitation as if written in the body +of this License. + +9. The Free Software Foundation may publish revised and/or new versions of the +General Public License from time to time. Such new versions will be similar in +spirit to the present version, but may differ in detail to address new problems +or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any later +version", you have the option of following the terms and conditions either of +that version or of any later version published by the Free Software Foundation. +If the Program does not specify a version number of this License, you may +choose any version ever published by the Free Software Foundation. + +10. If you wish to incorporate parts of the Program into other free programs +whose distribution conditions are different, write to the author to ask for +permission. For software which is copyrighted by the Free Software Foundation, +write to the Free Software Foundation; we sometimes make exceptions for this. +Our decision will be guided by the two goals of preserving the free status of +all derivatives of our free software and of promoting the sharing and reuse of +software generally. + +NO WARRANTY + +11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR +THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE +STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE +PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND +PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, +YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL +ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE +PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR +INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA +BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER +OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +END OF TERMS AND CONDITIONS + +How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest possible +use to the public, the best way to achieve this is to make it free software +which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest to attach +them to the start of each source file to most effectively convey the exclusion +of warranty; and each file should have at least the "copyright" line and a +pointer to where the full notice is found. + + One line to give the program's name and a brief idea of what it does. + + Copyright (C) + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this when it +starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author Gnomovision comes + with ABSOLUTELY NO WARRANTY; for details type 'show w'. This is free + software, and you are welcome to redistribute it under certain conditions; + type 'show c' for details. + +The hypothetical commands 'show w' and 'show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may be +called something other than 'show w' and 'show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your school, +if any, to sign a "copyright disclaimer" for the program, if necessary. Here +is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + 'Gnomovision' (which makes passes at compilers) written by James Hacker. + + signature of Ty Coon, 1 April 1989 + + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General Public +License instead of this License. + + +"CLASSPATH" EXCEPTION TO THE GPL + +Certain source files distributed by Oracle America and/or its affiliates are +subject to the following clarification and special exception to the GPL, but +only where Oracle has expressly included in the particular source file's header +the words "Oracle designates this particular file as subject to the "Classpath" +exception as provided by Oracle in the LICENSE file that accompanied this code." + + Linking this library statically or dynamically with other modules is making + a combined work based on this library. Thus, the terms and conditions of + the GNU General Public License cover the whole combination. + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules, + and to copy and distribute the resulting executable under terms of your + choice, provided that you also meet, for each linked independent module, + the terms and conditions of the license of that module. An independent + module is a module which is not derived from or based on this library. If + you modify this library, you may extend this exception to your version of + the library, but you are not obligated to do so. If you do not wish to do + so, delete this exception statement from your version. diff --git a/docs/apidocs/legal/jquery.md b/docs/apidocs/legal/jquery.md new file mode 100644 index 0000000..d468b31 --- /dev/null +++ b/docs/apidocs/legal/jquery.md @@ -0,0 +1,72 @@ +## jQuery v3.6.1 + +### jQuery License +``` +jQuery v 3.6.1 +Copyright OpenJS Foundation and other contributors, https://openjsf.org/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +****************************************** + +The jQuery JavaScript Library v3.6.1 also includes Sizzle.js + +Sizzle.js includes the following license: + +Copyright JS Foundation and other contributors, https://js.foundation/ + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/jquery/sizzle + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +All files located in the node_modules and external directories are +externally maintained libraries used by this software which have their +own licenses; we recommend you read them, as their terms may differ from +the terms above. + +********************* + +``` diff --git a/docs/apidocs/legal/jqueryUI.md b/docs/apidocs/legal/jqueryUI.md new file mode 100644 index 0000000..8bda9d7 --- /dev/null +++ b/docs/apidocs/legal/jqueryUI.md @@ -0,0 +1,49 @@ +## jQuery UI v1.13.2 + +### jQuery UI License +``` +Copyright jQuery Foundation and other contributors, https://jquery.org/ + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/jquery/jquery-ui + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +Copyright and related rights for sample code are waived via CC0. Sample +code is defined as all source code contained within the demos directory. + +CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +==== + +All files located in the node_modules and external directories are +externally maintained libraries used by this software which have their +own licenses; we recommend you read them, as their terms may differ from +the terms above. + +``` diff --git a/docs/apidocs/link.svg b/docs/apidocs/link.svg new file mode 100644 index 0000000..7ccc5ed --- /dev/null +++ b/docs/apidocs/link.svg @@ -0,0 +1,31 @@ + + + + + + + + diff --git a/docs/apidocs/member-search-index.js b/docs/apidocs/member-search-index.js new file mode 100644 index 0000000..04eacb9 --- /dev/null +++ b/docs/apidocs/member-search-index.js @@ -0,0 +1 @@ +memberSearchIndex = [{"p":"codes.thischwa.cf.model","c":"RecordType","l":"A"},{"p":"codes.thischwa.cf.model","c":"RecordType","l":"AAAA"},{"p":"codes.thischwa.cf.model","c":"AbstractEntity","l":"AbstractEntity()","u":"%3Cinit%3E()"},{"p":"codes.thischwa.cf.model","c":"AbstractMultipleResponse","l":"AbstractMultipleResponse()","u":"%3Cinit%3E()"},{"p":"codes.thischwa.cf.model","c":"AbstractResponse","l":"AbstractResponse()","u":"%3Cinit%3E()"},{"p":"codes.thischwa.cf.model","c":"AbstractSingleResponse","l":"AbstractSingleResponse()","u":"%3Cinit%3E()"},{"p":"codes.thischwa.cf.model","c":"PagingRequest","l":"addQueryString(String)","u":"addQueryString(java.lang.String)"},{"p":"codes.thischwa.cf.model","c":"RecordEntity","l":"build(String, RecordType, Integer, String)","u":"build(java.lang.String,codes.thischwa.cf.model.RecordType,java.lang.Integer,java.lang.String)"},{"p":"codes.thischwa.cf.model","c":"RecordType","l":"CAA"},{"p":"codes.thischwa.cf.model","c":"RecordType","l":"CERT"},{"p":"codes.thischwa.cf","c":"CfDnsClient","l":"CfDnsClient(boolean, String, String, String, String)","u":"%3Cinit%3E(boolean,java.lang.String,java.lang.String,java.lang.String,java.lang.String)"},{"p":"codes.thischwa.cf","c":"CfDnsClient","l":"CfDnsClient(String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String)"},{"p":"codes.thischwa.cf","c":"CfDnsClient","l":"CfDnsClient(String, String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String)"},{"p":"codes.thischwa.cf","c":"CloudflareApiException","l":"CloudflareApiException(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"codes.thischwa.cf","c":"CloudflareApiException","l":"CloudflareApiException(String, Throwable)","u":"%3Cinit%3E(java.lang.String,java.lang.Throwable)"},{"p":"codes.thischwa.cf","c":"CloudflareApiException","l":"CloudflareApiException(Throwable)","u":"%3Cinit%3E(java.lang.Throwable)"},{"p":"codes.thischwa.cf","c":"CloudflareNotFoundException","l":"CloudflareNotFoundException(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"codes.thischwa.cf","c":"CloudflareNotFoundException","l":"CloudflareNotFoundException(String, Throwable)","u":"%3Cinit%3E(java.lang.String,java.lang.Throwable)"},{"p":"codes.thischwa.cf","c":"CloudflareNotFoundException","l":"CloudflareNotFoundException(Throwable)","u":"%3Cinit%3E(java.lang.Throwable)"},{"p":"codes.thischwa.cf.model","c":"RecordType","l":"CNAME"},{"p":"codes.thischwa.cf.model","c":"PagingRequest","l":"defaultPaging()"},{"p":"codes.thischwa.cf","c":"CfDnsClient","l":"deleteRequest(String, Class)","u":"deleteRequest(java.lang.String,java.lang.Class)"},{"p":"codes.thischwa.cf.model","c":"RecordType","l":"DNSKEY"},{"p":"codes.thischwa.cf.model","c":"RecordType","l":"DS"},{"p":"codes.thischwa.cf.model","c":"ResponseEntity","l":"getId()"},{"p":"codes.thischwa.cf.model","c":"PagingRequest","l":"getPagingParams()"},{"p":"codes.thischwa.cf","c":"CfDnsClient","l":"getRequest(String, Class)","u":"getRequest(java.lang.String,java.lang.Class)"},{"p":"codes.thischwa.cf.model","c":"RecordType","l":"HTTPS"},{"p":"codes.thischwa.cf.model","c":"RecordType","l":"LOC"},{"p":"codes.thischwa.cf.model","c":"RecordType","l":"MX"},{"p":"codes.thischwa.cf.model","c":"RecordType","l":"NAPTR"},{"p":"codes.thischwa.cf.model","c":"RecordType","l":"NS"},{"p":"codes.thischwa.cf.model","c":"PagingRequest","l":"of(int, int)","u":"of(int,int)"},{"p":"codes.thischwa.cf.model","c":"RecordType","l":"OPENPGPKEY"},{"p":"codes.thischwa.cf","c":"CfDnsClient","l":"patchRequest(String, R, Class)","u":"patchRequest(java.lang.String,R,java.lang.Class)"},{"p":"codes.thischwa.cf","c":"CfDnsClient","l":"postRequest(String, R, Class)","u":"postRequest(java.lang.String,R,java.lang.Class)"},{"p":"codes.thischwa.cf.model","c":"RecordType","l":"PTR"},{"p":"codes.thischwa.cf","c":"CfDnsClient","l":"putRequest(String, R, Class)","u":"putRequest(java.lang.String,R,java.lang.Class)"},{"p":"codes.thischwa.cf","c":"CfRequest","l":"RECORD_CREATE"},{"p":"codes.thischwa.cf","c":"CfRequest","l":"RECORD_DELETE"},{"p":"codes.thischwa.cf","c":"CfRequest","l":"RECORD_INFO_NAME"},{"p":"codes.thischwa.cf","c":"CfRequest","l":"RECORD_INFO_NAME_TYPE"},{"p":"codes.thischwa.cf","c":"CfRequest","l":"RECORD_UPDATE"},{"p":"codes.thischwa.cf","c":"CfDnsClient","l":"recordCreate(ZoneEntity, RecordEntity)","u":"recordCreate(codes.thischwa.cf.model.ZoneEntity,codes.thischwa.cf.model.RecordEntity)"},{"p":"codes.thischwa.cf","c":"CfDnsClient","l":"recordDelete(ZoneEntity, RecordEntity)","u":"recordDelete(codes.thischwa.cf.model.ZoneEntity,codes.thischwa.cf.model.RecordEntity)"},{"p":"codes.thischwa.cf","c":"CfDnsClient","l":"recordDelete(ZoneEntity, String)","u":"recordDelete(codes.thischwa.cf.model.ZoneEntity,java.lang.String)"},{"p":"codes.thischwa.cf","c":"CfDnsClient","l":"recordDeleteTypeIfExists(ZoneEntity, String, RecordType)","u":"recordDeleteTypeIfExists(codes.thischwa.cf.model.ZoneEntity,java.lang.String,codes.thischwa.cf.model.RecordType)"},{"p":"codes.thischwa.cf.model","c":"RecordEntity","l":"RecordEntity()","u":"%3Cinit%3E()"},{"p":"codes.thischwa.cf.model","c":"RecordMultipleResponse","l":"RecordMultipleResponse()","u":"%3Cinit%3E()"},{"p":"codes.thischwa.cf.model","c":"RecordSingleResponse","l":"RecordSingleResponse()","u":"%3Cinit%3E()"},{"p":"codes.thischwa.cf","c":"CfDnsClient","l":"recordUpdate(ZoneEntity, RecordEntity)","u":"recordUpdate(codes.thischwa.cf.model.ZoneEntity,codes.thischwa.cf.model.RecordEntity)"},{"p":"codes.thischwa.cf.model","c":"ResultInfo","l":"ResultInfo()","u":"%3Cinit%3E()"},{"p":"codes.thischwa.cf","c":"CfDnsClient","l":"sldInfo(ZoneEntity, String, RecordType)","u":"sldInfo(codes.thischwa.cf.model.ZoneEntity,java.lang.String,codes.thischwa.cf.model.RecordType)"},{"p":"codes.thischwa.cf","c":"CfDnsClient","l":"sldListAll(ZoneEntity, String)","u":"sldListAll(codes.thischwa.cf.model.ZoneEntity,java.lang.String)"},{"p":"codes.thischwa.cf","c":"CfDnsClient","l":"sldListAll(ZoneEntity, String, PagingRequest)","u":"sldListAll(codes.thischwa.cf.model.ZoneEntity,java.lang.String,codes.thischwa.cf.model.PagingRequest)"},{"p":"codes.thischwa.cf.model","c":"RecordType","l":"SMIMEA"},{"p":"codes.thischwa.cf.model","c":"RecordType","l":"SRV"},{"p":"codes.thischwa.cf.model","c":"RecordType","l":"SSHFP"},{"p":"codes.thischwa.cf.model","c":"RecordType","l":"SVCB"},{"p":"codes.thischwa.cf.model","c":"RecordType","l":"TLSA"},{"p":"codes.thischwa.cf.model","c":"RecordType","l":"toString()"},{"p":"codes.thischwa.cf.model","c":"RecordType","l":"TXT"},{"p":"codes.thischwa.cf.model","c":"RecordType","l":"URI"},{"p":"codes.thischwa.cf","c":"CfRequest","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"codes.thischwa.cf.model","c":"RecordType","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"codes.thischwa.cf","c":"CfRequest","l":"values()"},{"p":"codes.thischwa.cf.model","c":"RecordType","l":"values()"},{"p":"codes.thischwa.cf","c":"CfRequest","l":"ZONE_INFO"},{"p":"codes.thischwa.cf","c":"CfRequest","l":"ZONE_LIST"},{"p":"codes.thischwa.cf.model","c":"ZoneEntity","l":"ZoneEntity()","u":"%3Cinit%3E()"},{"p":"codes.thischwa.cf","c":"CfDnsClient","l":"zoneInfo(String)","u":"zoneInfo(java.lang.String)"},{"p":"codes.thischwa.cf","c":"CfDnsClient","l":"zoneListAll()"},{"p":"codes.thischwa.cf","c":"CfDnsClient","l":"zoneListAll(PagingRequest)","u":"zoneListAll(codes.thischwa.cf.model.PagingRequest)"},{"p":"codes.thischwa.cf.model","c":"ZoneMultipleResponse","l":"ZoneMultipleResponse()","u":"%3Cinit%3E()"}];updateSearchResults(); \ No newline at end of file diff --git a/docs/apidocs/module-search-index.js b/docs/apidocs/module-search-index.js new file mode 100644 index 0000000..0d59754 --- /dev/null +++ b/docs/apidocs/module-search-index.js @@ -0,0 +1 @@ +moduleSearchIndex = [];updateSearchResults(); \ No newline at end of file diff --git a/docs/apidocs/overview-summary.html b/docs/apidocs/overview-summary.html new file mode 100644 index 0000000..ff328fd --- /dev/null +++ b/docs/apidocs/overview-summary.html @@ -0,0 +1,26 @@ + + + + +CloudflareDNS-java 0.1.0-SNAPSHOT API + + + + + + + + + + + +
+ +

index.html

+
+ + diff --git a/docs/apidocs/overview-tree.html b/docs/apidocs/overview-tree.html new file mode 100644 index 0000000..034d7b7 --- /dev/null +++ b/docs/apidocs/overview-tree.html @@ -0,0 +1,134 @@ + + + + +Klassenhierarchie (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchie für alle Packages

+
+Packagehierarchien: + +
+

Klassenhierarchie

+ +
+
+

Schnittstellenhierarchie

+ +
+
+

Enum-Klassenhierarchie

+ +
+
+
+
+ +
+
+
+ + diff --git a/docs/apidocs/package-search-index.js b/docs/apidocs/package-search-index.js new file mode 100644 index 0000000..7acffd4 --- /dev/null +++ b/docs/apidocs/package-search-index.js @@ -0,0 +1 @@ +packageSearchIndex = [{"l":"Alle Packages","u":"allpackages-index.html"},{"l":"codes.thischwa.cf"},{"l":"codes.thischwa.cf.model"}];updateSearchResults(); \ No newline at end of file diff --git a/docs/apidocs/resources/glass.png b/docs/apidocs/resources/glass.png new file mode 100644 index 0000000..a7f591f Binary files /dev/null and b/docs/apidocs/resources/glass.png differ diff --git a/docs/apidocs/resources/x.png b/docs/apidocs/resources/x.png new file mode 100644 index 0000000..30548a7 Binary files /dev/null and b/docs/apidocs/resources/x.png differ diff --git a/docs/apidocs/script-dir/jquery-3.6.1.min.js b/docs/apidocs/script-dir/jquery-3.6.1.min.js new file mode 100644 index 0000000..2c69bc9 --- /dev/null +++ b/docs/apidocs/script-dir/jquery-3.6.1.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.6.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,y=n.hasOwnProperty,a=y.toString,l=a.call(Object),v={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&v(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!y||!y.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ve(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ye(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ve(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],y=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||y.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||y.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||y.push(".#.+[+~]"),e.querySelectorAll("\\\f"),y.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),y=y.length&&new RegExp(y.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),v=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&v(p,e)?-1:t==C||t.ownerDocument==p&&v(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!y||!y.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),v.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",v.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",v.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),v.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(v.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return B(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=_e(v.pixelPosition,function(e,t){if(t)return t=Be(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return B(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=x(e||this.defaultElement||this)[0],this.element=x(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=x(),this.hoverable=x(),this.focusable=x(),this.classesElementLookup={},e!==this&&(x.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=x(e.style?e.ownerDocument:e.document||e),this.window=x(this.document[0].defaultView||this.document[0].parentWindow)),this.options=x.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:x.noop,_create:x.noop,_init:x.noop,destroy:function(){var i=this;this._destroy(),x.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:x.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return x.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=x.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return x("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthC(E(s),E(n))?o.important="horizontal":o.important="vertical",c.using.call(this,t,o)}),l.offset(x.extend(u,{using:t}))})},x.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,l=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.lastMousePosition={x:null,y:null},this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault(),this._activateItem(t)},"click .ui-menu-item":function(t){var e=x(t.target),i=x(x.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&e.not(".ui-state-disabled").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),e.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&&i.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":"_activateItem","mousemove .ui-menu-item":"_activateItem",mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this._menuItems().first();e||this.focus(t,i)},blur:function(t){this._delay(function(){x.contains(this.element[0],x.ui.safeActiveElement(this.document[0]))||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t,!0),this.mouseHandled=!1}})},_activateItem:function(t){var e,i;this.previousFilter||t.clientX===this.lastMousePosition.x&&t.clientY===this.lastMousePosition.y||(this.lastMousePosition={x:t.clientX,y:t.clientY},e=x(t.target).closest(".ui-menu-item"),i=x(t.currentTarget),e[0]===i[0]&&(i.is(".ui-state-active")||(this._removeClass(i.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(t,i))))},_destroy:function(){var t=this.element.find(".ui-menu-item").removeAttr("role aria-disabled").children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),t.children().each(function(){var t=x(this);t.data("ui-menu-submenu-caret")&&t.remove()})},_keydown:function(t){var e,i,s,n=!0;switch(t.keyCode){case x.ui.keyCode.PAGE_UP:this.previousPage(t);break;case x.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case x.ui.keyCode.HOME:this._move("first","first",t);break;case x.ui.keyCode.END:this._move("last","last",t);break;case x.ui.keyCode.UP:this.previous(t);break;case x.ui.keyCode.DOWN:this.next(t);break;case x.ui.keyCode.LEFT:this.collapse(t);break;case x.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case x.ui.keyCode.ENTER:case x.ui.keyCode.SPACE:this._activate(t);break;case x.ui.keyCode.ESCAPE:this.collapse(t);break;default:e=this.previousFilter||"",s=n=!1,i=96<=t.keyCode&&t.keyCode<=105?(t.keyCode-96).toString():String.fromCharCode(t.keyCode),clearTimeout(this.filterTimer),i===e?s=!0:i=e+i,e=this._filterMenuItems(i),(e=s&&-1!==e.index(this.active.next())?this.active.nextAll(".ui-menu-item"):e).length||(i=String.fromCharCode(t.keyCode),e=this._filterMenuItems(i)),e.length?(this.focus(t,e),this.previousFilter=i,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}n&&t.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var t,e,s=this,n=this.options.icons.submenu,i=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),e=i.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=x(this),e=t.prev(),i=x("").data("ui-menu-submenu-caret",!0);s._addClass(i,"ui-menu-icon","ui-icon "+n),e.attr("aria-haspopup","true").prepend(i),t.attr("aria-labelledby",e.attr("id"))}),this._addClass(e,"ui-menu","ui-widget ui-widget-content ui-front"),(t=i.add(this.element).find(this.options.items)).not(".ui-menu-item").each(function(){var t=x(this);s._isDivider(t)&&s._addClass(t,"ui-menu-divider","ui-widget-content")}),i=(e=t.not(".ui-menu-item, .ui-menu-divider")).children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(e,"ui-menu-item")._addClass(i,"ui-menu-item-wrapper"),t.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!x.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){var i;"icons"===t&&(i=this.element.find(".ui-menu-icon"),this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",String(t)),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),i=this.active.children(".ui-menu-item-wrapper"),this._addClass(i,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",i.attr("id")),i=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(i,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),(i=e.children(".ui-menu")).length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(t){var e,i,s;this._hasScroll()&&(i=parseFloat(x.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(x.css(this.activeMenu[0],"paddingTop"))||0,e=t.offset().top-this.activeMenu.offset().top-i-s,i=this.activeMenu.scrollTop(),s=this.activeMenu.height(),t=t.outerHeight(),e<0?this.activeMenu.scrollTop(i+e):s",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,liveRegionTimer:null,_create:function(){var i,s,n,t=this.element[0].nodeName.toLowerCase(),e="textarea"===t,t="input"===t;this.isMultiLine=e||!t&&this._isContentEditable(this.element),this.valueMethod=this.element[e||t?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(t){if(this.element.prop("readOnly"))s=n=i=!0;else{s=n=i=!1;var e=x.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:i=!0,this._move("previousPage",t);break;case e.PAGE_DOWN:i=!0,this._move("nextPage",t);break;case e.UP:i=!0,this._keyEvent("previous",t);break;case e.DOWN:i=!0,this._keyEvent("next",t);break;case e.ENTER:this.menu.active&&(i=!0,t.preventDefault(),this.menu.select(t));break;case e.TAB:this.menu.active&&this.menu.select(t);break;case e.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(t),t.preventDefault());break;default:s=!0,this._searchTimeout(t)}}},keypress:function(t){if(i)return i=!1,void(this.isMultiLine&&!this.menu.element.is(":visible")||t.preventDefault());if(!s){var e=x.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:this._move("previousPage",t);break;case e.PAGE_DOWN:this._move("nextPage",t);break;case e.UP:this._keyEvent("previous",t);break;case e.DOWN:this._keyEvent("next",t)}}},input:function(t){if(n)return n=!1,void t.preventDefault();this._searchTimeout(t)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){clearTimeout(this.searching),this.close(t),this._change(t)}}),this._initSource(),this.menu=x("
    ").appendTo(this._appendTo()).menu({role:null}).hide().attr({unselectable:"on"}).menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault()},menufocus:function(t,e){var i,s;if(this.isNewMenu&&(this.isNewMenu=!1,t.originalEvent&&/^mouse/.test(t.originalEvent.type)))return this.menu.blur(),void this.document.one("mousemove",function(){x(t.target).trigger(t.originalEvent)});s=e.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",t,{item:s})&&t.originalEvent&&/^key/.test(t.originalEvent.type)&&this._value(s.value),(i=e.item.attr("aria-label")||s.value)&&String.prototype.trim.call(i).length&&(clearTimeout(this.liveRegionTimer),this.liveRegionTimer=this._delay(function(){this.liveRegion.html(x("
    ").text(i))},100))},menuselect:function(t,e){var i=e.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==x.ui.safeActiveElement(this.document[0])&&(this.element.trigger("focus"),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",t,{item:i})&&this._value(i.value),this.term=this._value(),this.close(t),this.selectedItem=i}}),this.liveRegion=x("
    ",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(t){var e=this.menu.element[0];return t.target===this.element[0]||t.target===e||x.contains(e,t.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var t=this.options.appendTo;return t=!(t=!(t=t&&(t.jquery||t.nodeType?x(t):this.document.find(t).eq(0)))||!t[0]?this.element.closest(".ui-front, dialog"):t).length?this.document[0].body:t},_initSource:function(){var i,s,n=this;Array.isArray(this.options.source)?(i=this.options.source,this.source=function(t,e){e(x.ui.autocomplete.filter(i,t.term))}):"string"==typeof this.options.source?(s=this.options.source,this.source=function(t,e){n.xhr&&n.xhr.abort(),n.xhr=x.ajax({url:s,data:t,dataType:"json",success:function(t){e(t)},error:function(){e([])}})}):this.source=this.options.source},_searchTimeout:function(s){clearTimeout(this.searching),this.searching=this._delay(function(){var t=this.term===this._value(),e=this.menu.element.is(":visible"),i=s.altKey||s.ctrlKey||s.metaKey||s.shiftKey;t&&(e||i)||(this.selectedItem=null,this.search(null,s))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length").append(x("
    ").text(e.label)).appendTo(t)},_move:function(t,e){if(this.menu.element.is(":visible"))return this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),void this.menu.blur()):void this.menu[t](e);this.search(null,e)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){this.isMultiLine&&!this.menu.element.is(":visible")||(this._move(t,e),e.preventDefault())},_isContentEditable:function(t){if(!t.length)return!1;var e=t.prop("contentEditable");return"inherit"===e?this._isContentEditable(t.parent()):"true"===e}}),x.extend(x.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(t,e){var i=new RegExp(x.ui.autocomplete.escapeRegex(e),"i");return x.grep(t,function(t){return i.test(t.label||t.value||t)})}}),x.widget("ui.autocomplete",x.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(1").text(e))},100))}});x.ui.autocomplete}); \ No newline at end of file diff --git a/docs/apidocs/script.js b/docs/apidocs/script.js new file mode 100644 index 0000000..bb9c8a2 --- /dev/null +++ b/docs/apidocs/script.js @@ -0,0 +1,253 @@ +/* + * Copyright (c) 2013, 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +var moduleSearchIndex; +var packageSearchIndex; +var typeSearchIndex; +var memberSearchIndex; +var tagSearchIndex; + +var oddRowColor = "odd-row-color"; +var evenRowColor = "even-row-color"; +var sortAsc = "sort-asc"; +var sortDesc = "sort-desc"; +var tableTab = "table-tab"; +var activeTableTab = "active-table-tab"; + +function loadScripts(doc, tag) { + createElem(doc, tag, 'search.js'); + + createElem(doc, tag, 'module-search-index.js'); + createElem(doc, tag, 'package-search-index.js'); + createElem(doc, tag, 'type-search-index.js'); + createElem(doc, tag, 'member-search-index.js'); + createElem(doc, tag, 'tag-search-index.js'); +} + +function createElem(doc, tag, path) { + var script = doc.createElement(tag); + var scriptElement = doc.getElementsByTagName(tag)[0]; + script.src = pathtoroot + path; + scriptElement.parentNode.insertBefore(script, scriptElement); +} + +// Helper for making content containing release names comparable lexicographically +function makeComparable(s) { + return s.toLowerCase().replace(/(\d+)/g, + function(n, m) { + return ("000" + m).slice(-4); + }); +} + +// Switches between two styles depending on a condition +function toggleStyle(classList, condition, trueStyle, falseStyle) { + if (condition) { + classList.remove(falseStyle); + classList.add(trueStyle); + } else { + classList.remove(trueStyle); + classList.add(falseStyle); + } +} + +// Sorts the rows in a table lexicographically by the content of a specific column +function sortTable(header, columnIndex, columns) { + var container = header.parentElement; + var descending = header.classList.contains(sortAsc); + container.querySelectorAll("div.table-header").forEach( + function(header) { + header.classList.remove(sortAsc); + header.classList.remove(sortDesc); + } + ) + var cells = container.children; + var rows = []; + for (var i = columns; i < cells.length; i += columns) { + rows.push(Array.prototype.slice.call(cells, i, i + columns)); + } + var comparator = function(a, b) { + var ka = makeComparable(a[columnIndex].textContent); + var kb = makeComparable(b[columnIndex].textContent); + if (ka < kb) + return descending ? 1 : -1; + if (ka > kb) + return descending ? -1 : 1; + return 0; + }; + var sorted = rows.sort(comparator); + var visible = 0; + sorted.forEach(function(row) { + if (row[0].style.display !== 'none') { + var isEvenRow = visible++ % 2 === 0; + } + row.forEach(function(cell) { + toggleStyle(cell.classList, isEvenRow, evenRowColor, oddRowColor); + container.appendChild(cell); + }) + }); + toggleStyle(header.classList, descending, sortDesc, sortAsc); +} + +// Toggles the visibility of a table category in all tables in a page +function toggleGlobal(checkbox, selected, columns) { + var display = checkbox.checked ? '' : 'none'; + document.querySelectorAll("div.table-tabs").forEach(function(t) { + var id = t.parentElement.getAttribute("id"); + var selectedClass = id + "-tab" + selected; + // if selected is empty string it selects all uncategorized entries + var selectUncategorized = !Boolean(selected); + var visible = 0; + document.querySelectorAll('div.' + id) + .forEach(function(elem) { + if (selectUncategorized) { + if (elem.className.indexOf(selectedClass) === -1) { + elem.style.display = display; + } + } else if (elem.classList.contains(selectedClass)) { + elem.style.display = display; + } + if (elem.style.display === '') { + var isEvenRow = visible++ % (columns * 2) < columns; + toggleStyle(elem.classList, isEvenRow, evenRowColor, oddRowColor); + } + }); + var displaySection = visible === 0 ? 'none' : ''; + t.parentElement.style.display = displaySection; + document.querySelector("li#contents-" + id).style.display = displaySection; + }) +} + +// Shows the elements of a table belonging to a specific category +function show(tableId, selected, columns) { + if (tableId !== selected) { + document.querySelectorAll('div.' + tableId + ':not(.' + selected + ')') + .forEach(function(elem) { + elem.style.display = 'none'; + }); + } + document.querySelectorAll('div.' + selected) + .forEach(function(elem, index) { + elem.style.display = ''; + var isEvenRow = index % (columns * 2) < columns; + toggleStyle(elem.classList, isEvenRow, evenRowColor, oddRowColor); + }); + updateTabs(tableId, selected); +} + +function updateTabs(tableId, selected) { + document.getElementById(tableId + '.tabpanel') + .setAttribute('aria-labelledby', selected); + document.querySelectorAll('button[id^="' + tableId + '"]') + .forEach(function(tab, index) { + if (selected === tab.id || (tableId === selected && index === 0)) { + tab.className = activeTableTab; + tab.setAttribute('aria-selected', true); + tab.setAttribute('tabindex',0); + } else { + tab.className = tableTab; + tab.setAttribute('aria-selected', false); + tab.setAttribute('tabindex',-1); + } + }); +} + +function switchTab(e) { + var selected = document.querySelector('[aria-selected=true]'); + if (selected) { + if ((e.keyCode === 37 || e.keyCode === 38) && selected.previousSibling) { + // left or up arrow key pressed: move focus to previous tab + selected.previousSibling.click(); + selected.previousSibling.focus(); + e.preventDefault(); + } else if ((e.keyCode === 39 || e.keyCode === 40) && selected.nextSibling) { + // right or down arrow key pressed: move focus to next tab + selected.nextSibling.click(); + selected.nextSibling.focus(); + e.preventDefault(); + } + } +} + +var updateSearchResults = function() {}; + +function indexFilesLoaded() { + return moduleSearchIndex + && packageSearchIndex + && typeSearchIndex + && memberSearchIndex + && tagSearchIndex; +} +// Copy the contents of the local snippet to the clipboard +function copySnippet(button) { + copyToClipboard(button.nextElementSibling.innerText); + switchCopyLabel(button, button.firstElementChild); +} +function copyToClipboard(content) { + var textarea = document.createElement("textarea"); + textarea.style.height = 0; + document.body.appendChild(textarea); + textarea.value = content; + textarea.select(); + document.execCommand("copy"); + document.body.removeChild(textarea); +} +function switchCopyLabel(button, span) { + var copied = span.getAttribute("data-copied"); + button.classList.add("visible"); + var initialLabel = span.innerHTML; + span.innerHTML = copied; + setTimeout(function() { + button.classList.remove("visible"); + setTimeout(function() { + if (initialLabel !== copied) { + span.innerHTML = initialLabel; + } + }, 100); + }, 1900); +} +// Workaround for scroll position not being included in browser history (8249133) +document.addEventListener("DOMContentLoaded", function(e) { + var contentDiv = document.querySelector("div.flex-content"); + window.addEventListener("popstate", function(e) { + if (e.state !== null) { + contentDiv.scrollTop = e.state; + } + }); + window.addEventListener("hashchange", function(e) { + history.replaceState(contentDiv.scrollTop, document.title); + }); + var timeoutId; + contentDiv.addEventListener("scroll", function(e) { + if (timeoutId) { + clearTimeout(timeoutId); + } + timeoutId = setTimeout(function() { + history.replaceState(contentDiv.scrollTop, document.title); + }, 100); + }); + if (!location.hash) { + history.replaceState(contentDiv.scrollTop, document.title); + } +}); diff --git a/docs/apidocs/search-page.js b/docs/apidocs/search-page.js new file mode 100644 index 0000000..540c90f --- /dev/null +++ b/docs/apidocs/search-page.js @@ -0,0 +1,284 @@ +/* + * Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +"use strict"; +$(function() { + var copy = $("#page-search-copy"); + var expand = $("#page-search-expand"); + var searchLink = $("span#page-search-link"); + var redirect = $("input#search-redirect"); + function setSearchUrlTemplate() { + var href = document.location.href.split(/[#?]/)[0]; + href += "?q=" + "%s"; + if (redirect.is(":checked")) { + href += "&r=1"; + } + searchLink.html(href); + copy[0].onmouseenter(); + } + function copyLink(e) { + copyToClipboard(this.previousSibling.innerText); + switchCopyLabel(this, this.lastElementChild); + } + copy.click(copyLink); + copy[0].onmouseenter = function() {}; + redirect.click(setSearchUrlTemplate); + setSearchUrlTemplate(); + copy.prop("disabled", false); + redirect.prop("disabled", false); + expand.click(function (e) { + var searchInfo = $("div.page-search-info"); + if(this.parentElement.hasAttribute("open")) { + searchInfo.attr("style", "border-width: 0;"); + } else { + searchInfo.attr("style", "border-width: 1px;").height(searchInfo.prop("scrollHeight")); + } + }); +}); +$(window).on("load", function() { + var input = $("#page-search-input"); + var reset = $("#page-search-reset"); + var notify = $("#page-search-notify"); + var resultSection = $("div#result-section"); + var resultContainer = $("div#result-container"); + var searchTerm = ""; + var activeTab = ""; + var fixedTab = false; + var visibleTabs = []; + var feelingLucky = false; + function renderResults(result) { + if (!result.length) { + notify.html(messages.noResult); + } else if (result.length === 1) { + notify.html(messages.oneResult); + } else { + notify.html(messages.manyResults.replace("{0}", result.length)); + } + resultContainer.empty(); + var r = { + "types": [], + "members": [], + "packages": [], + "modules": [], + "searchTags": [] + }; + for (var i in result) { + var item = result[i]; + var arr = r[item.category]; + arr.push(item); + } + if (!activeTab || r[activeTab].length === 0 || !fixedTab) { + Object.keys(r).reduce(function(prev, curr) { + if (r[curr].length > 0 && r[curr][0].score > prev) { + activeTab = curr; + return r[curr][0].score; + } + return prev; + }, 0); + } + if (feelingLucky && activeTab) { + notify.html(messages.redirecting) + var firstItem = r[activeTab][0]; + window.location = getURL(firstItem.indexItem, firstItem.category); + return; + } + if (result.length > 20) { + if (searchTerm[searchTerm.length - 1] === ".") { + if (activeTab === "types" && r["members"].length > r["types"].length) { + activeTab = "members"; + } else if (activeTab === "packages" && r["types"].length > r["packages"].length) { + activeTab = "types"; + } + } + } + var categoryCount = Object.keys(r).reduce(function(prev, curr) { + return prev + (r[curr].length > 0 ? 1 : 0); + }, 0); + visibleTabs = []; + var tabContainer = $("
    ").appendTo(resultContainer); + for (var key in r) { + var id = "#result-tab-" + key.replace("searchTags", "search_tags"); + if (r[key].length) { + var count = r[key].length >= 1000 ? "999+" : r[key].length; + if (result.length > 20 && categoryCount > 1) { + var button = $("").appendTo(tabContainer); + button.click(key, function(e) { + fixedTab = true; + renderResult(e.data, $(this)); + }); + visibleTabs.push(key); + } else { + $("" + categories[key] + + " (" + count + ")").appendTo(tabContainer); + renderTable(key, r[key]).appendTo(resultContainer); + tabContainer = $("
    ").appendTo(resultContainer); + + } + } + } + if (activeTab && result.length > 20 && categoryCount > 1) { + $("button#result-tab-" + activeTab).addClass("active-table-tab"); + renderTable(activeTab, r[activeTab]).appendTo(resultContainer); + } + resultSection.show(); + function renderResult(category, button) { + activeTab = category; + setSearchUrl(); + resultContainer.find("div.summary-table").remove(); + renderTable(activeTab, r[activeTab]).appendTo(resultContainer); + button.siblings().removeClass("active-table-tab"); + button.addClass("active-table-tab"); + } + } + function selectTab(category) { + $("button#result-tab-" + category).click(); + } + function renderTable(category, items) { + var table = $("
    ") + .addClass(category === "modules" + ? "one-column-search-results" + : "two-column-search-results"); + var col1, col2; + if (category === "modules") { + col1 = "Module"; + } else if (category === "packages") { + col1 = "Module"; + col2 = "Package"; + } else if (category === "types") { + col1 = "Package"; + col2 = "Class" + } else if (category === "members") { + col1 = "Class"; + col2 = "Member"; + } else if (category === "searchTags") { + col1 = "Location"; + col2 = "Name"; + } + $("
    " + col1 + "
    ").appendTo(table); + if (category !== "modules") { + $("
    " + col2 + "
    ").appendTo(table); + } + $.each(items, function(index, item) { + var rowColor = index % 2 ? "odd-row-color" : "even-row-color"; + renderItem(item, table, rowColor); + }); + return table; + } + function renderItem(item, table, rowColor) { + var label = getHighlightedText(item.input, item.boundaries, item.prefix.length, item.input.length); + var link = $("") + .attr("href", getURL(item.indexItem, item.category)) + .attr("tabindex", "0") + .addClass("search-result-link") + .html(label); + var container = getHighlightedText(item.input, item.boundaries, 0, item.prefix.length - 1); + if (item.category === "searchTags") { + container = item.indexItem.h || ""; + } + if (item.category !== "modules") { + $("
    ").html(container).addClass("col-plain").addClass(rowColor).appendTo(table); + } + $("
    ").html(link).addClass("col-last").addClass(rowColor).appendTo(table); + } + var timeout; + function schedulePageSearch() { + if (timeout) { + clearTimeout(timeout); + } + timeout = setTimeout(function () { + doPageSearch() + }, 100); + } + function doPageSearch() { + setSearchUrl(); + var term = searchTerm = input.val().trim(); + if (term === "") { + notify.html(messages.enterTerm); + activeTab = ""; + fixedTab = false; + resultContainer.empty(); + resultSection.hide(); + } else { + notify.html(messages.searching); + doSearch({ term: term, maxResults: 1200 }, renderResults); + } + } + function setSearchUrl() { + var query = input.val().trim(); + var url = document.location.pathname; + if (query) { + url += "?q=" + encodeURI(query); + if (activeTab && fixedTab) { + url += "&c=" + activeTab; + } + } + history.replaceState({query: query}, "", url); + } + input.on("input", function(e) { + feelingLucky = false; + schedulePageSearch(); + }); + $(document).keydown(function(e) { + if ((e.ctrlKey || e.metaKey) && (e.key === "ArrowLeft" || e.key === "ArrowRight")) { + if (activeTab && visibleTabs.length > 1) { + var idx = visibleTabs.indexOf(activeTab); + idx += e.key === "ArrowLeft" ? visibleTabs.length - 1 : 1; + selectTab(visibleTabs[idx % visibleTabs.length]); + return false; + } + } + }); + reset.click(function() { + notify.html(messages.enterTerm); + resultSection.hide(); + activeTab = ""; + fixedTab = false; + resultContainer.empty(); + input.val('').focus(); + setSearchUrl(); + }); + input.prop("disabled", false); + reset.prop("disabled", false); + + var urlParams = new URLSearchParams(window.location.search); + if (urlParams.has("q")) { + input.val(urlParams.get("q")) + } + if (urlParams.has("c")) { + activeTab = urlParams.get("c"); + fixedTab = true; + } + if (urlParams.get("r")) { + feelingLucky = true; + } + if (input.val()) { + doPageSearch(); + } else { + notify.html(messages.enterTerm); + } + input.select().focus(); +}); diff --git a/docs/apidocs/search.html b/docs/apidocs/search.html new file mode 100644 index 0000000..adc5541 --- /dev/null +++ b/docs/apidocs/search.html @@ -0,0 +1,77 @@ + + + + +Suchen (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
    + +
    +
    +

    Suchen

    +
    + + +
    +Zusätzliche Ressourcen +
    +
    +
    +

    Die Hilfeseite enthält eine Einführung in den Umfang und die Syntax der JavaDoc-Suche.

    +

    Sie können die <STRG>- oder <CMD>-Taste zusammen mit den Pfeiltasten nach links und rechts verwenden, um zwischen Ergebnisregisterkarten auf dieser Seite zu wechseln.

    +

    Mit der URL-Vorlage unten können Sie diese Seite als Suchmaschine in Browsern konfigurieren, die dieses Feature unterstützen. Das Feature wurde erfolgreich mit Google Chrome und Mozilla Firefox getestet. Beachten Sie, dass andere Browser dieses Feature möglicherweise nicht unterstützen oder ein anderes URL-Format erfordern.

    +link +

    + +

    +
    +

    Suchindex wird geladen...

    + +
    +
    +
    + +
    +
    +
    + + diff --git a/docs/apidocs/search.js b/docs/apidocs/search.js new file mode 100644 index 0000000..613e348 --- /dev/null +++ b/docs/apidocs/search.js @@ -0,0 +1,458 @@ +/* + * Copyright (c) 2015, 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +"use strict"; +const messages = { + enterTerm: "Geben Sie einen Suchbegriff ein", + noResult: "Keine Ergebnisse gefunden", + oneResult: "Ein Ergebnis gefunden", + manyResults: "{0} Ergebnisse gefunden", + loading: "Suchindex wird geladen...", + searching: "Suche wird ausgeführt...", + redirecting: "Zum ersten Ergebnis wird umgeleitet...", + linkIcon: "Linksymbol", + linkToSection: "Link zu diesem Abschnitt" +} +const categories = { + modules: "Module", + packages: "Packages", + types: "Klassen und Schnittstellen", + members: "Mitglieder", + searchTags: "Tags suchen" +}; +const highlight = "$&"; +const NO_MATCH = {}; +const MAX_RESULTS = 300; +function checkUnnamed(name, separator) { + return name === "" || !name ? "" : name + separator; +} +function escapeHtml(str) { + return str.replace(//g, ">"); +} +function getHighlightedText(str, boundaries, from, to) { + var start = from; + var text = ""; + for (var i = 0; i < boundaries.length; i += 2) { + var b0 = boundaries[i]; + var b1 = boundaries[i + 1]; + if (b0 >= to || b1 <= from) { + continue; + } + text += escapeHtml(str.slice(start, Math.max(start, b0))); + text += ""; + text += escapeHtml(str.slice(Math.max(start, b0), Math.min(to, b1))); + text += ""; + start = Math.min(to, b1); + } + text += escapeHtml(str.slice(start, to)); + return text; +} +function getURLPrefix(item, category) { + var urlPrefix = ""; + var slash = "/"; + if (category === "modules") { + return item.l + slash; + } else if (category === "packages" && item.m) { + return item.m + slash; + } else if (category === "types" || category === "members") { + if (item.m) { + urlPrefix = item.m + slash; + } else { + $.each(packageSearchIndex, function(index, it) { + if (it.m && item.p === it.l) { + urlPrefix = it.m + slash; + } + }); + } + } + return urlPrefix; +} +function getURL(item, category) { + if (item.url) { + return item.url; + } + var url = getURLPrefix(item, category); + if (category === "modules") { + url += "module-summary.html"; + } else if (category === "packages") { + if (item.u) { + url = item.u; + } else { + url += item.l.replace(/\./g, '/') + "/package-summary.html"; + } + } else if (category === "types") { + if (item.u) { + url = item.u; + } else { + url += checkUnnamed(item.p, "/").replace(/\./g, '/') + item.l + ".html"; + } + } else if (category === "members") { + url += checkUnnamed(item.p, "/").replace(/\./g, '/') + item.c + ".html" + "#"; + if (item.u) { + url += item.u; + } else { + url += item.l; + } + } else if (category === "searchTags") { + url += item.u; + } + item.url = url; + return url; +} +function createMatcher(term, camelCase) { + if (camelCase && !isUpperCase(term)) { + return null; // no need for camel-case matcher for lower case query + } + var pattern = ""; + var upperCase = []; + term.trim().split(/\s+/).forEach(function(w, index, array) { + var tokens = w.split(/(?=[A-Z,.()<>?[\/])/); + for (var i = 0; i < tokens.length; i++) { + var s = tokens[i]; + // ',' and '?' are the only delimiters commonly followed by space in java signatures + pattern += "(" + $.ui.autocomplete.escapeRegex(s).replace(/[,?]/g, "$&\\s*?") + ")"; + upperCase.push(false); + var isWordToken = /\w$/.test(s); + if (isWordToken) { + if (i === tokens.length - 1 && index < array.length - 1) { + // space in query string matches all delimiters + pattern += "(.*?)"; + upperCase.push(isUpperCase(s[0])); + } else { + if (!camelCase && isUpperCase(s) && s.length === 1) { + pattern += "()"; + } else { + pattern += "([a-z0-9$<>?[\\]]*?)"; + } + upperCase.push(isUpperCase(s[0])); + } + } else { + pattern += "()"; + upperCase.push(false); + } + } + }); + var re = new RegExp(pattern, "gi"); + re.upperCase = upperCase; + return re; +} +function findMatch(matcher, input, startOfName, endOfName) { + var from = startOfName; + matcher.lastIndex = from; + var match = matcher.exec(input); + // Expand search area until we get a valid result or reach the beginning of the string + while (!match || match.index + match[0].length < startOfName || endOfName < match.index) { + if (from === 0) { + return NO_MATCH; + } + from = input.lastIndexOf(".", from - 2) + 1; + matcher.lastIndex = from; + match = matcher.exec(input); + } + var boundaries = []; + var matchEnd = match.index + match[0].length; + var score = 5; + var start = match.index; + var prevEnd = -1; + for (var i = 1; i < match.length; i += 2) { + var isUpper = isUpperCase(input[start]); + var isMatcherUpper = matcher.upperCase[i]; + // capturing groups come in pairs, match and non-match + boundaries.push(start, start + match[i].length); + // make sure groups are anchored on a left word boundary + var prevChar = input[start - 1] || ""; + var nextChar = input[start + 1] || ""; + if (start !== 0 && !/[\W_]/.test(prevChar) && !/[\W_]/.test(input[start])) { + if (isUpper && (isLowerCase(prevChar) || isLowerCase(nextChar))) { + score -= 0.1; + } else if (isMatcherUpper && start === prevEnd) { + score -= isUpper ? 0.1 : 1.0; + } else { + return NO_MATCH; + } + } + prevEnd = start + match[i].length; + start += match[i].length + match[i + 1].length; + + // lower score for parts of the name that are missing + if (match[i + 1] && prevEnd < endOfName) { + score -= rateNoise(match[i + 1]); + } + } + // lower score if a type name contains unmatched camel-case parts + if (input[matchEnd - 1] !== "." && endOfName > matchEnd) + score -= rateNoise(input.slice(matchEnd, endOfName)); + score -= rateNoise(input.slice(0, Math.max(startOfName, match.index))); + + if (score <= 0) { + return NO_MATCH; + } + return { + input: input, + score: score, + boundaries: boundaries + }; +} +function isUpperCase(s) { + return s !== s.toLowerCase(); +} +function isLowerCase(s) { + return s !== s.toUpperCase(); +} +function rateNoise(str) { + return (str.match(/([.(])/g) || []).length / 5 + + (str.match(/([A-Z]+)/g) || []).length / 10 + + str.length / 20; +} +function doSearch(request, response) { + var term = request.term.trim(); + var maxResults = request.maxResults || MAX_RESULTS; + if (term.length === 0) { + return this.close(); + } + var matcher = { + plainMatcher: createMatcher(term, false), + camelCaseMatcher: createMatcher(term, true) + } + var indexLoaded = indexFilesLoaded(); + + function getPrefix(item, category) { + switch (category) { + case "packages": + return checkUnnamed(item.m, "/"); + case "types": + return checkUnnamed(item.p, "."); + case "members": + return checkUnnamed(item.p, ".") + item.c + "."; + default: + return ""; + } + } + function useQualifiedName(category) { + switch (category) { + case "packages": + return /[\s/]/.test(term); + case "types": + case "members": + return /[\s.]/.test(term); + default: + return false; + } + } + function searchIndex(indexArray, category) { + var matches = []; + if (!indexArray) { + if (!indexLoaded) { + matches.push({ l: messages.loading, category: category }); + } + return matches; + } + $.each(indexArray, function (i, item) { + var prefix = getPrefix(item, category); + var simpleName = item.l; + var qualifiedName = prefix + simpleName; + var useQualified = useQualifiedName(category); + var input = useQualified ? qualifiedName : simpleName; + var startOfName = useQualified ? prefix.length : 0; + var endOfName = category === "members" && input.indexOf("(", startOfName) > -1 + ? input.indexOf("(", startOfName) : input.length; + var m = findMatch(matcher.plainMatcher, input, startOfName, endOfName); + if (m === NO_MATCH && matcher.camelCaseMatcher) { + m = findMatch(matcher.camelCaseMatcher, input, startOfName, endOfName); + } + if (m !== NO_MATCH) { + m.indexItem = item; + m.prefix = prefix; + m.category = category; + if (!useQualified) { + m.input = qualifiedName; + m.boundaries = m.boundaries.map(function(b) { + return b + prefix.length; + }); + } + matches.push(m); + } + return true; + }); + return matches.sort(function(e1, e2) { + return e2.score - e1.score; + }).slice(0, maxResults); + } + + var result = searchIndex(moduleSearchIndex, "modules") + .concat(searchIndex(packageSearchIndex, "packages")) + .concat(searchIndex(typeSearchIndex, "types")) + .concat(searchIndex(memberSearchIndex, "members")) + .concat(searchIndex(tagSearchIndex, "searchTags")); + + if (!indexLoaded) { + updateSearchResults = function() { + doSearch(request, response); + } + } else { + updateSearchResults = function() {}; + } + response(result); +} +// JQuery search menu implementation +$.widget("custom.catcomplete", $.ui.autocomplete, { + _create: function() { + this._super(); + this.widget().menu("option", "items", "> .result-item"); + // workaround for search result scrolling + this.menu._scrollIntoView = function _scrollIntoView( item ) { + var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight; + if ( this._hasScroll() ) { + borderTop = parseFloat( $.css( this.activeMenu[ 0 ], "borderTopWidth" ) ) || 0; + paddingTop = parseFloat( $.css( this.activeMenu[ 0 ], "paddingTop" ) ) || 0; + offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop; + scroll = this.activeMenu.scrollTop(); + elementHeight = this.activeMenu.height() - 26; + itemHeight = item.outerHeight(); + + if ( offset < 0 ) { + this.activeMenu.scrollTop( scroll + offset ); + } else if ( offset + itemHeight > elementHeight ) { + this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight ); + } + } + }; + }, + _renderMenu: function(ul, items) { + var currentCategory = ""; + var widget = this; + widget.menu.bindings = $(); + $.each(items, function(index, item) { + if (item.category && item.category !== currentCategory) { + ul.append("
  • " + categories[item.category] + "
  • "); + currentCategory = item.category; + } + var li = widget._renderItemData(ul, item); + if (item.category) { + li.attr("aria-label", categories[item.category] + " : " + item.l); + } else { + li.attr("aria-label", item.l); + } + li.attr("class", "result-item"); + }); + ul.append(""); + }, + _renderItem: function(ul, item) { + var li = $("
  • ").appendTo(ul); + var div = $("
    ").appendTo(li); + var label = item.l + ? item.l + : getHighlightedText(item.input, item.boundaries, 0, item.input.length); + var idx = item.indexItem; + if (item.category === "searchTags" && idx && idx.h) { + if (idx.d) { + div.html(label + " (" + idx.h + ")
    " + + idx.d + "
    "); + } else { + div.html(label + " (" + idx.h + ")"); + } + } else { + div.html(label); + } + return li; + } +}); +$(function() { + var expanded = false; + var windowWidth; + function collapse() { + if (expanded) { + $("div#navbar-top").removeAttr("style"); + $("button#navbar-toggle-button") + .removeClass("expanded") + .attr("aria-expanded", "false"); + expanded = false; + } + } + $("button#navbar-toggle-button").click(function (e) { + if (expanded) { + collapse(); + } else { + var navbar = $("div#navbar-top"); + navbar.height(navbar.prop("scrollHeight")); + $("button#navbar-toggle-button") + .addClass("expanded") + .attr("aria-expanded", "true"); + expanded = true; + windowWidth = window.innerWidth; + } + }); + $("ul.sub-nav-list-small li a").click(collapse); + $("input#search-input").focus(collapse); + $("main").click(collapse); + $("section[id] > :header, :header[id], :header:has(a[id])").each(function(idx, el) { + // Create anchor links for headers with an associated id attribute + var hdr = $(el); + var id = hdr.attr("id") || hdr.parent("section").attr("id") || hdr.children("a").attr("id"); + if (id) { + hdr.append(" " + messages.linkIcon +""); + } + }); + $(window).on("orientationchange", collapse).on("resize", function(e) { + if (expanded && windowWidth !== window.innerWidth) collapse(); + }); + var search = $("#search-input"); + var reset = $("#reset-button"); + search.catcomplete({ + minLength: 1, + delay: 200, + source: doSearch, + response: function(event, ui) { + if (!ui.content.length) { + ui.content.push({ l: messages.noResult }); + } else { + $("#search-input").empty(); + } + }, + autoFocus: true, + focus: function(event, ui) { + return false; + }, + position: { + collision: "flip" + }, + select: function(event, ui) { + if (ui.item.indexItem) { + var url = getURL(ui.item.indexItem, ui.item.category); + window.location.href = pathtoroot + url; + $("#search-input").focus(); + } + } + }); + search.val(''); + search.prop("disabled", false); + reset.prop("disabled", false); + reset.click(function() { + search.val('').focus(); + }); + search.focus(); +}); diff --git a/docs/apidocs/serialized-form.html b/docs/apidocs/serialized-form.html new file mode 100644 index 0000000..dbabf34 --- /dev/null +++ b/docs/apidocs/serialized-form.html @@ -0,0 +1,87 @@ + + + + +Serialisierte Form (CloudflareDNS-java 0.1.0-SNAPSHOT API) + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Serialisierte Form

    +
    + +
    +
    +
    + +
    +
    +
    + + diff --git a/docs/apidocs/stylesheet.css b/docs/apidocs/stylesheet.css new file mode 100644 index 0000000..f71489f --- /dev/null +++ b/docs/apidocs/stylesheet.css @@ -0,0 +1,1272 @@ +/* + * Javadoc style sheet + */ + +@import url('resources/fonts/dejavu.css'); + +/* + * These CSS custom properties (variables) define the core color and font + * properties used in this stylesheet. + */ +:root { + /* body, block and code fonts */ + --body-font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; + --block-font-family: 'DejaVu Serif', Georgia, "Times New Roman", Times, serif; + --code-font-family: 'DejaVu Sans Mono', monospace; + /* Base font sizes for body and code elements */ + --body-font-size: 14px; + --code-font-size: 14px; + /* Text colors for body and block elements */ + --body-text-color: #353833; + --block-text-color: #474747; + /* Background colors for various structural elements */ + --body-background-color: #ffffff; + --section-background-color: #f8f8f8; + --detail-background-color: #ffffff; + /* Colors for navigation bar and table captions */ + --navbar-background-color: #4D7A97; + --navbar-text-color: #ffffff; + /* Background color for subnavigation and various headers */ + --subnav-background-color: #dee3e9; + /* Background and text colors for selected tabs and navigation items */ + --selected-background-color: #f8981d; + --selected-text-color: #253441; + --selected-link-color: #1f389c; + /* Background colors for generated tables */ + --even-row-color: #ffffff; + --odd-row-color: #eeeeef; + /* Text color for page title */ + --title-color: #2c4557; + /* Text colors for links */ + --link-color: #4A6782; + --link-color-active: #bb7a2a; + /* Snippet colors */ + --snippet-background-color: #ebecee; + --snippet-text-color: var(--block-text-color); + --snippet-highlight-color: #f7c590; + /* Border colors for structural elements and user defined tables */ + --border-color: #ededed; + --table-border-color: #000000; + /* Search input colors */ + --search-input-background-color: #ffffff; + --search-input-text-color: #000000; + --search-input-placeholder-color: #909090; + /* Highlight color for active search tag target */ + --search-tag-highlight-color: #ffff00; + /* Adjustments for icon and active background colors of copy-to-clipboard buttons */ + --copy-icon-brightness: 100%; + --copy-button-background-color-active: rgba(168, 168, 176, 0.3); + /* Colors for invalid tag notifications */ + --invalid-tag-background-color: #ffe6e6; + --invalid-tag-text-color: #000000; +} +/* + * Styles for individual HTML elements. + * + * These are styles that are specific to individual HTML elements. Changing them affects the style of a particular + * HTML element throughout the page. + */ +body { + background-color:var(--body-background-color); + color:var(--body-text-color); + font-family:var(--body-font-family); + font-size:var(--body-font-size); + margin:0; + padding:0; + height:100%; + width:100%; +} +iframe { + margin:0; + padding:0; + height:100%; + width:100%; + overflow-y:scroll; + border:none; +} +a:link, a:visited { + text-decoration:none; + color:var(--link-color); +} +a[href]:hover, a[href]:focus { + text-decoration:none; + color:var(--link-color-active); +} +pre { + font-family:var(--code-font-family); + font-size:1em; +} +h1 { + font-size:1.428em; +} +h2 { + font-size:1.285em; +} +h3 { + font-size:1.14em; +} +h4 { + font-size:1.072em; +} +h5 { + font-size:1.001em; +} +h6 { + font-size:0.93em; +} +/* Disable font boosting for selected elements */ +h1, h2, h3, h4, h5, h6, div.member-signature { + max-height: 1000em; +} +ul { + list-style-type:disc; +} +code, tt { + font-family:var(--code-font-family); +} +:not(h1, h2, h3, h4, h5, h6) > code, +:not(h1, h2, h3, h4, h5, h6) > tt { + font-size:var(--code-font-size); + padding-top:4px; + margin-top:8px; + line-height:1.4em; +} +dt code { + font-family:var(--code-font-family); + font-size:1em; + padding-top:4px; +} +.summary-table dt code { + font-family:var(--code-font-family); + font-size:1em; + vertical-align:top; + padding-top:4px; +} +sup { + font-size:8px; +} +button { + font-family: var(--body-font-family); + font-size: 1em; +} +/* + * Styles for HTML generated by javadoc. + * + * These are style classes that are used by the standard doclet to generate HTML documentation. + */ + +/* + * Styles for document title and copyright. + */ +.about-language { + float:right; + padding:0 21px 8px 8px; + font-size:0.915em; + margin-top:-9px; + height:2.9em; +} +.legal-copy { + margin-left:.5em; +} +/* + * Styles for navigation bar. + */ +@media screen { + div.flex-box { + position:fixed; + display:flex; + flex-direction:column; + height: 100%; + width: 100%; + } + header.flex-header { + flex: 0 0 auto; + } + div.flex-content { + flex: 1 1 auto; + overflow-y: auto; + } +} +.top-nav { + background-color:var(--navbar-background-color); + color:var(--navbar-text-color); + float:left; + width:100%; + clear:right; + min-height:2.8em; + padding:10px 0 0 0; + overflow:hidden; + font-size:0.857em; +} +button#navbar-toggle-button { + display:none; +} +ul.sub-nav-list-small { + display: none; +} +.sub-nav { + background-color:var(--subnav-background-color); + float:left; + width:100%; + overflow:hidden; + font-size:0.857em; +} +.sub-nav div { + clear:left; + float:left; + padding:6px; + text-transform:uppercase; +} +.sub-nav .sub-nav-list { + padding-top:4px; +} +ul.nav-list { + display:block; + margin:0 25px 0 0; + padding:0; +} +ul.sub-nav-list { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.nav-list li { + list-style:none; + float:left; + padding: 5px 6px; + text-transform:uppercase; +} +.sub-nav .nav-list-search { + float:right; + margin:0; + padding:6px; + clear:none; + text-align:right; + position:relative; +} +ul.sub-nav-list li { + list-style:none; + float:left; +} +.top-nav a:link, .top-nav a:active, .top-nav a:visited { + color:var(--navbar-text-color); + text-decoration:none; + text-transform:uppercase; +} +.top-nav a:hover { + color:var(--link-color-active); +} +.nav-bar-cell1-rev { + background-color:var(--selected-background-color); + color:var(--selected-text-color); + margin: auto 5px; +} +.skip-nav { + position:absolute; + top:auto; + left:-9999px; + overflow:hidden; +} +/* + * Hide navigation links and search box in print layout + */ +@media print { + ul.nav-list, div.sub-nav { + display:none; + } +} +/* + * Styles for page header. + */ +.title { + color:var(--title-color); + margin:10px 0; +} +.sub-title { + margin:5px 0 0 0; +} +ul.contents-list { + margin: 0 0 15px 0; + padding: 0; + list-style: none; +} +ul.contents-list li { + font-size:0.93em; +} +/* + * Styles for headings. + */ +body.class-declaration-page .summary h2, +body.class-declaration-page .details h2, +body.class-use-page h2, +body.module-declaration-page .block-list h2 { + font-style: italic; + padding:0; + margin:15px 0; +} +body.class-declaration-page .summary h3, +body.class-declaration-page .details h3, +body.class-declaration-page .summary .inherited-list h2 { + background-color:var(--subnav-background-color); + border:1px solid var(--border-color); + margin:0 0 6px -8px; + padding:7px 5px; +} +/* + * Styles for page layout containers. + */ +main { + clear:both; + padding:10px 20px; + position:relative; +} +dl.notes > dt { + font-family: var(--body-font-family); + font-size:0.856em; + font-weight:bold; + margin:10px 0 0 0; + color:var(--body-text-color); +} +dl.notes > dd { + margin:5px 10px 10px 0; + font-size:1em; + font-family:var(--block-font-family) +} +dl.name-value > dt { + margin-left:1px; + font-size:1.1em; + display:inline; + font-weight:bold; +} +dl.name-value > dd { + margin:0 0 0 1px; + font-size:1.1em; + display:inline; +} +/* + * Styles for lists. + */ +li.circle { + list-style:circle; +} +ul.horizontal li { + display:inline; + font-size:0.9em; +} +div.inheritance { + margin:0; + padding:0; +} +div.inheritance div.inheritance { + margin-left:2em; +} +ul.block-list, +ul.details-list, +ul.member-list, +ul.summary-list { + margin:10px 0 10px 0; + padding:0; +} +ul.block-list > li, +ul.details-list > li, +ul.member-list > li, +ul.summary-list > li { + list-style:none; + margin-bottom:15px; + line-height:1.4; +} +ul.ref-list { + padding:0; + margin:0; +} +ul.ref-list > li { + list-style:none; +} +.summary-table dl, .summary-table dl dt, .summary-table dl dd { + margin-top:0; + margin-bottom:1px; +} +ul.tag-list, ul.tag-list-long { + padding-left: 0; + list-style: none; +} +ul.tag-list li { + display: inline; +} +ul.tag-list li:not(:last-child):after, +ul.tag-list-long li:not(:last-child):after +{ + content: ", "; + white-space: pre-wrap; +} +ul.preview-feature-list { + list-style: none; + margin:0; + padding:0.1em; + line-height: 1.6em; +} +/* + * Styles for tables. + */ +.summary-table, .details-table { + width:100%; + border-spacing:0; + border:1px solid var(--border-color); + border-top:0; + padding:0; +} +.caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:var(--selected-text-color); + clear:none; + overflow:hidden; + padding: 10px 0 0 1px; + margin:0; +} +.caption a:link, .caption a:visited { + color:var(--selected-link-color); +} +.caption a:hover, +.caption a:active { + color:var(--navbar-text-color); +} +.caption span { + font-weight:bold; + white-space:nowrap; + padding:5px 12px 7px 12px; + display:inline-block; + float:left; + background-color:var(--selected-background-color); + border: none; + height:16px; +} +div.table-tabs { + padding:10px 0 0 1px; + margin:10px 0 0 0; +} +div.table-tabs > button { + border: none; + cursor: pointer; + padding: 5px 12px 7px 12px; + font-weight: bold; + margin-right: 8px; +} +div.table-tabs > .active-table-tab { + background: var(--selected-background-color); + color: var(--selected-text-color); +} +div.table-tabs > button.table-tab { + background: var(--navbar-background-color); + color: var(--navbar-text-color); +} +.two-column-search-results { + display: grid; + grid-template-columns: minmax(400px, max-content) minmax(400px, auto); +} +div.checkboxes { + line-height: 2em; +} +div.checkboxes > span { + margin-left: 10px; +} +div.checkboxes > label { + margin-left: 8px; + white-space: nowrap; +} +div.checkboxes > label > input { + margin: 0 2px; +} +.two-column-summary { + display: grid; + grid-template-columns: minmax(25%, max-content) minmax(25%, auto); +} +.three-column-summary { + display: grid; + grid-template-columns: minmax(15%, max-content) minmax(20%, max-content) minmax(20%, auto); +} +.three-column-release-summary { + display: grid; + grid-template-columns: minmax(40%, max-content) minmax(10%, max-content) minmax(40%, auto); +} +.four-column-summary { + display: grid; + grid-template-columns: minmax(10%, max-content) minmax(15%, max-content) minmax(15%, max-content) minmax(15%, auto); +} +@media screen and (max-width: 1000px) { + .four-column-summary { + display: grid; + grid-template-columns: minmax(15%, max-content) minmax(15%, auto); + } +} +@media screen and (max-width: 800px) { + .two-column-search-results { + display: grid; + grid-template-columns: minmax(40%, max-content) minmax(40%, auto); + } + .three-column-summary { + display: grid; + grid-template-columns: minmax(10%, max-content) minmax(25%, auto); + } + .three-column-release-summary { + display: grid; + grid-template-columns: minmax(70%, max-content) minmax(30%, max-content) + } + .three-column-summary .col-last, + .three-column-release-summary .col-last{ + grid-column-end: span 2; + } +} +@media screen and (max-width: 600px) { + .two-column-summary { + display: grid; + grid-template-columns: 1fr; + } +} +.summary-table > div, .details-table > div { + text-align:left; + padding: 8px 3px 3px 7px; + overflow-x: auto; + scrollbar-width: thin; +} +.col-first, .col-second, .col-last, .col-constructor-name, .col-summary-item-name { + vertical-align:top; + padding-right:0; + padding-top:8px; + padding-bottom:3px; +} +.table-header { + background:var(--subnav-background-color); + font-weight: bold; +} +/* Sortable table columns */ +.table-header[onclick] { + cursor: pointer; +} +.table-header[onclick]::after { + content:""; + display:inline-block; + background-image:url('data:image/svg+xml; utf8, \ + \ + '); + background-size:100% 100%; + width:9px; + height:14px; + margin-left:4px; + margin-bottom:-3px; +} +.table-header[onclick].sort-asc::after { + background-image:url('data:image/svg+xml; utf8, \ + \ + \ + '); + +} +.table-header[onclick].sort-desc::after { + background-image:url('data:image/svg+xml; utf8, \ + \ + \ + '); +} +.col-first, .col-first { + font-size:0.93em; +} +.col-second, .col-second, .col-last, .col-constructor-name, .col-summary-item-name, .col-last { + font-size:0.93em; +} +.col-first, .col-second, .col-constructor-name { + vertical-align:top; + overflow: auto; +} +.col-last { + white-space:normal; +} +.col-first a:link, .col-first a:visited, +.col-second a:link, .col-second a:visited, +.col-first a:link, .col-first a:visited, +.col-second a:link, .col-second a:visited, +.col-constructor-name a:link, .col-constructor-name a:visited, +.col-summary-item-name a:link, .col-summary-item-name a:visited { + font-weight:bold; +} +.even-row-color, .even-row-color .table-header { + background-color:var(--even-row-color); +} +.odd-row-color, .odd-row-color .table-header { + background-color:var(--odd-row-color); +} +/* + * Styles for contents. + */ +div.block { + font-size:var(--body-font-size); + font-family:var(--block-font-family); +} +.col-last div { + padding-top:0; +} +.col-last a { + padding-bottom:3px; +} +.module-signature, +.package-signature, +.type-signature, +.member-signature { + font-family:var(--code-font-family); + font-size:1em; + margin:14px 0; + white-space: pre-wrap; +} +.module-signature, +.package-signature, +.type-signature { + margin-top: 0; +} +.member-signature .type-parameters-long, +.member-signature .parameters, +.member-signature .exceptions { + display: inline-block; + vertical-align: top; + white-space: pre; +} +.member-signature .type-parameters { + white-space: normal; +} +/* + * Styles for formatting effect. + */ +.source-line-no { + /* Color of line numbers in source pages can be set via custom property below */ + color:var(--source-linenumber-color, green); + padding:0 30px 0 0; +} +.block { + display:block; + margin:0 10px 5px 0; + color:var(--block-text-color); +} +.deprecated-label, .description-from-type-label, .implementation-label, .member-name-link, +.module-label-in-package, .module-label-in-type, .package-label-in-type, +.package-hierarchy-label, .type-name-label, .type-name-link, .search-tag-link, .preview-label { + font-weight:bold; +} +.deprecation-comment, .help-footnote, .preview-comment { + font-style:italic; +} +.deprecation-block { + font-size:1em; + font-family:var(--block-font-family); + border-style:solid; + border-width:thin; + border-radius:10px; + padding:10px; + margin-bottom:10px; + margin-right:10px; + display:inline-block; +} +.preview-block { + font-size:1em; + font-family:var(--block-font-family); + border-style:solid; + border-width:thin; + border-radius:10px; + padding:10px; + margin-bottom:10px; + margin-right:10px; + display:inline-block; +} +div.block div.deprecation-comment { + font-style:normal; +} +details.invalid-tag, span.invalid-tag { + font-size:1em; + font-family:var(--block-font-family); + color: var(--invalid-tag-text-color); + background: var(--invalid-tag-background-color); + border: thin solid var(--table-border-color); + border-radius:2px; + padding: 2px 4px; + display:inline-block; +} +details summary { + cursor: pointer; +} +/* + * Styles specific to HTML5 elements. + */ +main, nav, header, footer, section { + display:block; +} +/* + * Styles for javadoc search. + */ +.ui-state-active { + /* Overrides the color of selection used in jQuery UI */ + background: var(--selected-background-color); + border: 1px solid var(--selected-background-color); + color: var(--selected-text-color); +} +.ui-autocomplete-category { + font-weight:bold; + font-size:15px; + padding:7px 0 7px 3px; + background-color:var(--navbar-background-color); + color:var(--navbar-text-color); +} +.ui-autocomplete { + max-height:85%; + max-width:65%; + overflow-y:auto; + overflow-x:auto; + scrollbar-width: thin; + white-space:nowrap; + box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); +} +ul.ui-autocomplete { + position:fixed; + z-index:1; + background-color: var(--body-background-color); +} +ul.ui-autocomplete li { + float:left; + clear:both; + min-width:100%; +} +ul.ui-autocomplete li.ui-static-link { + position:sticky; + bottom:0; + left:0; + background: var(--subnav-background-color); + padding: 5px 0; + font-family: var(--body-font-family); + font-size: 0.93em; + font-weight: bolder; + z-index: 2; +} +li.ui-static-link a, li.ui-static-link a:visited { + text-decoration:none; + color:var(--link-color); + float:right; + margin-right:20px; +} +.ui-autocomplete .result-item { + font-size: inherit; +} +.ui-autocomplete .result-highlight { + font-weight:bold; +} +#search-input, #page-search-input { + background-image:url('resources/glass.png'); + background-size:13px; + background-repeat:no-repeat; + background-position:2px 3px; + background-color: var(--search-input-background-color); + color: var(--search-input-text-color); + border-color: var(--border-color); + padding-left:20px; + width: 250px; + margin: 0; +} +#search-input { + margin-left: 4px; +} +#reset-button { + background-color: transparent; + background-image:url('resources/x.png'); + background-repeat:no-repeat; + background-size:contain; + border:0; + border-radius:0; + width:12px; + height:12px; + position:absolute; + right:12px; + top:10px; + font-size:0; +} +::placeholder { + color:var(--search-input-placeholder-color); + opacity: 1; +} +.search-tag-desc-result { + font-style:italic; + font-size:11px; +} +.search-tag-holder-result { + font-style:italic; + font-size:12px; +} +.search-tag-result:target { + background-color:var(--search-tag-highlight-color); +} +details.page-search-details { + display: inline-block; +} +div#result-container { + font-size: 1em; +} +div#result-container a.search-result-link { + padding: 0; + margin: 4px 0; + width: 100%; +} +#result-container .result-highlight { + font-weight:bolder; +} +.page-search-info { + background-color: var(--subnav-background-color); + border-radius: 3px; + border: 0 solid var(--border-color); + padding: 0 8px; + overflow: hidden; + height: 0; + transition: all 0.2s ease; +} +div.table-tabs > button.table-tab { + background: var(--navbar-background-color); + color: var(--navbar-text-color); +} +.page-search-header { + padding: 5px 12px 7px 12px; + font-weight: bold; + margin-right: 3px; + background-color:var(--navbar-background-color); + color:var(--navbar-text-color); + display: inline-block; +} +button.page-search-header { + border: none; + cursor: pointer; +} +span#page-search-link { + text-decoration: underline; +} +.module-graph span, .sealed-graph span { + display:none; + position:absolute; +} +.module-graph:hover span, .sealed-graph:hover span { + display:block; + margin: -100px 0 0 100px; + z-index: 1; +} +.inherited-list { + margin: 10px 0 10px 0; +} +section.class-description { + line-height: 1.4; +} +.summary section[class$="-summary"], .details section[class$="-details"], +.class-uses .detail, .serialized-class-details { + padding: 0 20px 5px 10px; + border: 1px solid var(--border-color); + background-color: var(--section-background-color); +} +.inherited-list, section[class$="-details"] .detail { + padding:0 0 5px 8px; + background-color:var(--detail-background-color); + border:none; +} +.vertical-separator { + padding: 0 5px; +} +ul.help-section-list { + margin: 0; +} +ul.help-subtoc > li { + display: inline-block; + padding-right: 5px; + font-size: smaller; +} +ul.help-subtoc > li::before { + content: "\2022" ; + padding-right:2px; +} +.help-note { + font-style: italic; +} +/* + * Indicator icon for external links. + */ +main a[href*="://"]::after { + content:""; + display:inline-block; + background-image:url('data:image/svg+xml; utf8, \ + \ + \ + '); + background-size:100% 100%; + width:7px; + height:7px; + margin-left:2px; + margin-bottom:4px; +} +main a[href*="://"]:hover::after, +main a[href*="://"]:focus::after { + background-image:url('data:image/svg+xml; utf8, \ + \ + \ + '); +} +/* + * Styles for header/section anchor links + */ +a.anchor-link { + opacity: 0; + transition: opacity 0.1s; +} +:hover > a.anchor-link { + opacity: 80%; +} +a.anchor-link:hover, +a.anchor-link:focus-visible, +a.anchor-link.visible { + opacity: 100%; +} +a.anchor-link > img { + width: 0.9em; + height: 0.9em; +} +/* + * Styles for copy-to-clipboard buttons + */ +button.copy { + opacity: 70%; + border: none; + border-radius: 3px; + position: relative; + background:none; + transition: opacity 0.3s; + cursor: pointer; +} +:hover > button.copy { + opacity: 80%; +} +button.copy:hover, +button.copy:active, +button.copy:focus-visible, +button.copy.visible { + opacity: 100%; +} +button.copy img { + position: relative; + background: none; + filter: brightness(var(--copy-icon-brightness)); +} +button.copy:active { + background-color: var(--copy-button-background-color-active); +} +button.copy span { + color: var(--body-text-color); + position: relative; + top: -0.1em; + transition: all 0.1s; + font-size: 0.76rem; + line-height: 1.2em; + opacity: 0; +} +button.copy:hover span, +button.copy:focus-visible span, +button.copy.visible span { + opacity: 100%; +} +/* search page copy button */ +button#page-search-copy { + margin-left: 0.4em; + padding:0.3em; + top:0.13em; +} +button#page-search-copy img { + width: 1.2em; + height: 1.2em; + padding: 0.01em 0; + top: 0.15em; +} +button#page-search-copy span { + color: var(--body-text-color); + line-height: 1.2em; + padding: 0.2em; + top: -0.18em; +} +div.page-search-info:hover button#page-search-copy span { + opacity: 100%; +} +/* snippet copy button */ +button.snippet-copy { + position: absolute; + top: 6px; + right: 6px; + height: 1.7em; + padding: 2px; +} +button.snippet-copy img { + width: 18px; + height: 18px; + padding: 0.05em 0; +} +button.snippet-copy span { + line-height: 1.2em; + padding: 0.2em; + position: relative; + top: -0.5em; +} +div.snippet-container:hover button.snippet-copy span { + opacity: 100%; +} +/* + * Styles for user-provided tables. + * + * borderless: + * No borders, vertical margins, styled caption. + * This style is provided for use with existing doc comments. + * In general, borderless tables should not be used for layout purposes. + * + * plain: + * Plain borders around table and cells, vertical margins, styled caption. + * Best for small tables or for complex tables for tables with cells that span + * rows and columns, when the "striped" style does not work well. + * + * striped: + * Borders around the table and vertical borders between cells, striped rows, + * vertical margins, styled caption. + * Best for tables that have a header row, and a body containing a series of simple rows. + */ + +table.borderless, +table.plain, +table.striped { + margin-top: 10px; + margin-bottom: 10px; +} +table.borderless > caption, +table.plain > caption, +table.striped > caption { + font-weight: bold; + font-size: smaller; +} +table.borderless th, table.borderless td, +table.plain th, table.plain td, +table.striped th, table.striped td { + padding: 2px 5px; +} +table.borderless, +table.borderless > thead > tr > th, table.borderless > tbody > tr > th, table.borderless > tr > th, +table.borderless > thead > tr > td, table.borderless > tbody > tr > td, table.borderless > tr > td { + border: none; +} +table.borderless > thead > tr, table.borderless > tbody > tr, table.borderless > tr { + background-color: transparent; +} +table.plain { + border-collapse: collapse; + border: 1px solid var(--table-border-color); +} +table.plain > thead > tr, table.plain > tbody tr, table.plain > tr { + background-color: transparent; +} +table.plain > thead > tr > th, table.plain > tbody > tr > th, table.plain > tr > th, +table.plain > thead > tr > td, table.plain > tbody > tr > td, table.plain > tr > td { + border: 1px solid var(--table-border-color); +} +table.striped { + border-collapse: collapse; + border: 1px solid var(--table-border-color); +} +table.striped > thead { + background-color: var(--subnav-background-color); +} +table.striped > thead > tr > th, table.striped > thead > tr > td { + border: 1px solid var(--table-border-color); +} +table.striped > tbody > tr:nth-child(even) { + background-color: var(--odd-row-color) +} +table.striped > tbody > tr:nth-child(odd) { + background-color: var(--even-row-color) +} +table.striped > tbody > tr > th, table.striped > tbody > tr > td { + border-left: 1px solid var(--table-border-color); + border-right: 1px solid var(--table-border-color); +} +table.striped > tbody > tr > th { + font-weight: normal; +} +/** + * Tweak style for small screens. + */ +@media screen and (max-width: 920px) { + header.flex-header { + max-height: 100vh; + overflow-y: auto; + } + div#navbar-top { + height: 2.8em; + transition: height 0.35s ease; + } + ul.nav-list { + display: block; + width: 40%; + float:left; + clear: left; + margin: 10px 0 0 0; + padding: 0; + } + ul.nav-list li { + float: none; + padding: 6px; + margin-left: 10px; + margin-top: 2px; + } + ul.sub-nav-list-small { + display:block; + height: 100%; + width: 50%; + float: right; + clear: right; + background-color: var(--subnav-background-color); + color: var(--body-text-color); + margin: 6px 0 0 0; + padding: 0; + } + ul.sub-nav-list-small ul { + padding-left: 20px; + } + ul.sub-nav-list-small a:link, ul.sub-nav-list-small a:visited { + color:var(--link-color); + } + ul.sub-nav-list-small a:hover { + color:var(--link-color-active); + } + ul.sub-nav-list-small li { + list-style:none; + float:none; + padding: 6px; + margin-top: 1px; + text-transform:uppercase; + } + ul.sub-nav-list-small > li { + margin-left: 10px; + } + ul.sub-nav-list-small li p { + margin: 5px 0; + } + div#navbar-sub-list { + display: none; + } + .top-nav a:link, .top-nav a:active, .top-nav a:visited { + display: block; + } + button#navbar-toggle-button { + width: 3.4em; + height: 2.8em; + background-color: transparent; + display: block; + float: left; + border: 0; + margin: 0 10px; + cursor: pointer; + font-size: 10px; + } + button#navbar-toggle-button .nav-bar-toggle-icon { + display: block; + width: 24px; + height: 3px; + margin: 1px 0 4px 0; + border-radius: 2px; + transition: all 0.1s; + background-color: var(--navbar-text-color); + } + button#navbar-toggle-button.expanded span.nav-bar-toggle-icon:nth-child(1) { + transform: rotate(45deg); + transform-origin: 10% 10%; + width: 26px; + } + button#navbar-toggle-button.expanded span.nav-bar-toggle-icon:nth-child(2) { + opacity: 0; + } + button#navbar-toggle-button.expanded span.nav-bar-toggle-icon:nth-child(3) { + transform: rotate(-45deg); + transform-origin: 10% 90%; + width: 26px; + } +} +@media screen and (max-width: 800px) { + .about-language { + padding-right: 16px; + } + ul.nav-list li { + margin-left: 5px; + } + ul.sub-nav-list-small > li { + margin-left: 5px; + } + main { + padding: 10px; + } + .summary section[class$="-summary"], .details section[class$="-details"], + .class-uses .detail, .serialized-class-details { + padding: 0 8px 5px 8px; + } + body { + -webkit-text-size-adjust: none; + } +} +@media screen and (max-width: 400px) { + .about-language { + font-size: 10px; + padding-right: 12px; + } +} +@media screen and (max-width: 400px) { + .nav-list-search { + width: 94%; + } + #search-input, #page-search-input { + width: 70%; + } +} +@media screen and (max-width: 320px) { + .nav-list-search > label { + display: none; + } + .nav-list-search { + width: 90%; + } + #search-input, #page-search-input { + width: 80%; + } +} + +pre.snippet { + background-color: var(--snippet-background-color); + color: var(--snippet-text-color); + padding: 10px; + margin: 12px 0; + overflow: auto; + white-space: pre; +} +div.snippet-container { + position: relative; +} +@media screen and (max-width: 800px) { + pre.snippet { + padding-top: 26px; + } + button.snippet-copy { + top: 4px; + right: 4px; + } +} +pre.snippet .italic { + font-style: italic; +} +pre.snippet .bold { + font-weight: bold; +} +pre.snippet .highlighted { + background-color: var(--snippet-highlight-color); + border-radius: 10%; +} diff --git a/docs/apidocs/tag-search-index.js b/docs/apidocs/tag-search-index.js new file mode 100644 index 0000000..d9152cb --- /dev/null +++ b/docs/apidocs/tag-search-index.js @@ -0,0 +1 @@ +tagSearchIndex = [{"l":"Serialisierte Form","h":"","u":"serialized-form.html"}];updateSearchResults(); \ No newline at end of file diff --git a/docs/apidocs/type-search-index.js b/docs/apidocs/type-search-index.js new file mode 100644 index 0000000..b79e37d --- /dev/null +++ b/docs/apidocs/type-search-index.js @@ -0,0 +1 @@ +typeSearchIndex = [{"p":"codes.thischwa.cf.model","l":"AbstractEntity"},{"p":"codes.thischwa.cf.model","l":"AbstractMultipleResponse"},{"p":"codes.thischwa.cf.model","l":"AbstractResponse"},{"p":"codes.thischwa.cf.model","l":"AbstractSingleResponse"},{"l":"Alle Klassen und Schnittstellen","u":"allclasses-index.html"},{"p":"codes.thischwa.cf","l":"CfDnsClient"},{"p":"codes.thischwa.cf","l":"CfRequest"},{"p":"codes.thischwa.cf","l":"CloudflareApiException"},{"p":"codes.thischwa.cf","l":"CloudflareNotFoundException"},{"p":"codes.thischwa.cf.model","l":"PagingRequest"},{"p":"codes.thischwa.cf.model","l":"RecordEntity"},{"p":"codes.thischwa.cf.model","l":"RecordMultipleResponse"},{"p":"codes.thischwa.cf.model","l":"RecordSingleResponse"},{"p":"codes.thischwa.cf.model","l":"RecordType"},{"p":"codes.thischwa.cf.model","l":"ResponseEntity"},{"p":"codes.thischwa.cf.model","l":"ResultInfo"},{"p":"codes.thischwa.cf.model","l":"ZoneEntity"},{"p":"codes.thischwa.cf.model","l":"ZoneMultipleResponse"}];updateSearchResults(); \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..c62154b --- /dev/null +++ b/pom.xml @@ -0,0 +1,164 @@ + + + 4.0.0 + + codes.thischwa + cloudflaredns + 0.1.0-SNAPSHOT + CloudflareDNS-java + 2025 + jar + + + https://github.com/th-schwarz/CloudflareDNS-java/issues + GitHub Issues + + + + scm:git:git@github.com:th-schwarz/CloudflareDNS-java + scm:git:git@github.com:th-schwarz/CloudflareDNS-java + HEAD + + + + 17 + UTF-8 + ${file.encoding} + ${file.encoding} + + + 10.21.3 + 3.6.0 + ${project.basedir}/src/checkstyle/google_custom_checks.xml + false + warning + false + true + false + + + 2.18.2 + 5.4.2 + 1.18.36 + 1.5.12 + 5.11.4 + + + + + org.apache.httpcomponents.client5 + httpclient5 + ${httpclient5.version} + + + org.projectlombok + lombok + ${lombok.version} + provided + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + ${jackson.version} + + + ch.qos.logback + logback-classic + ${logback-classic.version} + + + org.jetbrains + annotations + 24.0.0 + compile + + + + org.junit.jupiter + junit-jupiter + ${junit5.version} + test + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.13.0 + + ${java.version} + ${java.version} + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.4.1 + + false + ${java.version} + ${project.basedir}/docs + + + + + javadoc + + package + + + + + + org.apache.maven.plugins + maven-release-plugin + 3.1.1 + + v@{project.version} + + + + + + maven-deploy-plugin + 3.1.3 + + true + + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + ${checkstyle.plugin.version} + + + checkstyle-validate + validate + + check + + + + + + com.puppycrawl.tools + checkstyle + ${checkstyle.version} + + + + + + \ No newline at end of file diff --git a/src/checkstyle/google_custom_checks.xml b/src/checkstyle/google_custom_checks.xml new file mode 100644 index 0000000..811b768 --- /dev/null +++ b/src/checkstyle/google_custom_checks.xml @@ -0,0 +1,440 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/codes/thischwa/cf/CfBasicHttpClient.java b/src/main/java/codes/thischwa/cf/CfBasicHttpClient.java new file mode 100644 index 0000000..7b4bb43 --- /dev/null +++ b/src/main/java/codes/thischwa/cf/CfBasicHttpClient.java @@ -0,0 +1,163 @@ +package codes.thischwa.cf; + +import codes.thischwa.cf.model.AbstractEntity; +import codes.thischwa.cf.model.AbstractResponse; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.PropertyNamingStrategies; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import java.nio.charset.StandardCharsets; +import lombok.extern.slf4j.Slf4j; +import org.apache.hc.client5.http.classic.methods.HttpDelete; +import org.apache.hc.client5.http.classic.methods.HttpGet; +import org.apache.hc.client5.http.classic.methods.HttpPatch; +import org.apache.hc.client5.http.classic.methods.HttpPost; +import org.apache.hc.client5.http.classic.methods.HttpPut; +import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; +import org.apache.hc.client5.http.impl.classic.HttpClients; +import org.apache.hc.core5.http.ClassicHttpRequest; +import org.apache.hc.core5.http.ClassicHttpResponse; +import org.apache.hc.core5.http.ContentType; +import org.apache.hc.core5.http.HttpHeaders; +import org.apache.hc.core5.http.io.entity.EntityUtils; +import org.apache.hc.core5.http.io.entity.StringEntity; +import org.apache.hc.core5.http.message.BasicClassicHttpRequest; + +/** + * Abstract base class for creating HTTP clients to interact with the Cloudflare API. Provides + * methods for handling GET and POST requests and includes utilities for constructing HTTP clients, + * managing authentication, and handling JSON serialization. + */ +@Slf4j +abstract class CfBasicHttpClient { + private final String baseUrl; + private final String authEmail; + private final String authKey; + private final String authToken; + + private final ObjectMapper objectMapper; + + CfBasicHttpClient(String baseUrl, String authEmail, String authKey, String authToken) { + this.baseUrl = baseUrl; + this.authEmail = authEmail; + this.authKey = authKey; + this.authToken = authToken; + this.objectMapper = initObjectMapper(); + } + + private ObjectMapper initObjectMapper() { + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.registerModule(new JavaTimeModule()); + objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + objectMapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE); + return objectMapper; + } + + private CloseableHttpClient createHttpClient() { + return HttpClients.custom() + .addRequestInterceptorFirst( + (request, context, execChain) -> { + request.addHeader(HttpHeaders.ACCEPT_CHARSET, "UTF-8"); + request.addHeader(HttpHeaders.ACCEPT_ENCODING, "gzip"); + request.addHeader(HttpHeaders.ACCEPT, ContentType.APPLICATION_JSON.getMimeType()); + request.addHeader( + HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON.getMimeType()); + request.addHeader("X-Auth-Email", authEmail); + request.addHeader("X-Auth-Key", authKey); + request.addHeader("X-Auth-Token", authToken); + }) + .build(); + } + + private T executeRequest( + ClassicHttpRequest request, Class responseType) throws CloudflareApiException { + String logUri = null; + try (CloseableHttpClient client = createHttpClient()) { + ResultWrapper result = + client.execute( + request, + (ClassicHttpResponse response) -> + new ResultWrapper( + response.getCode(), + EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8))); + + logUri = request.getRequestUri(); + if (result.statusCode >= 200 && result.statusCode < 300) { + return objectMapper.readValue(result.responseBody, responseType); + } else { + log.error( + "{} request failed for URL {}: Status {}", + request.getMethod(), + request.getUri(), + result.statusCode); + throw new CloudflareApiException( + request.getMethod() + " request failed with status code: " + result.statusCode); + } + } catch (JsonProcessingException e) { + log.error("JSON parsing error for request to {}", logUri, e); + throw new CloudflareApiException("Error processing JSON response", e); + } catch (Exception e) { + log.error("Error during request execution", e); + throw new CloudflareApiException("Request failed", e); + } + } + + /** Sends a GET request to the given endpoint and maps the response. */ + protected T getRequest(String endpoint, Class responseType) + throws CloudflareApiException { + HttpGet request = new HttpGet(buildUrl(endpoint)); + return executeRequest(request, responseType); + } + + /** Sends a DELETE request to the given endpoint and maps the response. */ + protected T deleteRequest(String endpoint, Class responseType) + throws CloudflareApiException { + HttpDelete request = new HttpDelete(buildUrl(endpoint)); + return executeRequest(request, responseType); + } + + /** Sends a POST request with a payload to the given endpoint and maps the response. */ + protected T postRequest( + String endpoint, R requestPayload, Class responseType) throws CloudflareApiException { + HttpPost request = new HttpPost(buildUrl(endpoint)); + setRequestPayload(request, requestPayload); + return executeRequest(request, responseType); + } + + /** Sends a PUT request with a payload to the given endpoint and maps the response. */ + protected T putRequest( + String endpoint, R requestPayload, Class responseType) throws CloudflareApiException { + HttpPut request = new HttpPut(buildUrl(endpoint)); + setRequestPayload(request, requestPayload); + return executeRequest(request, responseType); + } + + /** Sends a PATCH request with a payload to the given endpoint and maps the response. */ + protected T patchRequest( + String endpoint, R requestPayload, Class responseType) throws CloudflareApiException { + HttpPatch request = new HttpPatch(buildUrl(endpoint)); + setRequestPayload(request, requestPayload); + return executeRequest(request, responseType); + } + + /** Sets the JSON payload for a request. */ + private void setRequestPayload( + BasicClassicHttpRequest request, R requestPayload) throws CloudflareApiException { + try { + request.setEntity( + new StringEntity( + objectMapper.writeValueAsString(requestPayload), ContentType.APPLICATION_JSON)); + } catch (JsonProcessingException e) { + throw new CloudflareApiException("Error serializing JSON payload", e); + } + } + + private String buildUrl(String endpoint) { + return baseUrl + endpoint; + } + + private record ResultWrapper(int statusCode, String responseBody) {} +} diff --git a/src/main/java/codes/thischwa/cf/CfDnsClient.java b/src/main/java/codes/thischwa/cf/CfDnsClient.java new file mode 100644 index 0000000..2cef80f --- /dev/null +++ b/src/main/java/codes/thischwa/cf/CfDnsClient.java @@ -0,0 +1,307 @@ +package codes.thischwa.cf; + +import codes.thischwa.cf.model.AbstractResponse; +import codes.thischwa.cf.model.PagingRequest; +import codes.thischwa.cf.model.RecordEntity; +import codes.thischwa.cf.model.RecordMultipleResponse; +import codes.thischwa.cf.model.RecordSingleResponse; +import codes.thischwa.cf.model.RecordType; +import codes.thischwa.cf.model.ZoneEntity; +import codes.thischwa.cf.model.ZoneMultipleResponse; +import java.util.List; +import java.util.stream.Collectors; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; + +/** + * CfDnsClient is a client interface to interact with Cloudflare DNS service. It allows managing DNS + * records and zones within the Cloudflare system, including creating, updating, retrieving, and + * deleting DNS records. + * + *

    Example: + *

    
    + * // Create a new CfDnsClient instance
    + * CfDnsClient client = new CfDnsClient(
    + *     "email@example.com",
    + *     "yourApiKey",
    + *     "yourApiToken"
    + * );
    + *
    + * // Retrieve a zone
    + * ZoneEntity zone = cfDnsClient.zoneInfo("example.com");
    + * System.out.println("Zone ID: " + zone.getId());
    + *
    + * // Retrieve records of a zone
    + * List records = cfDnsClient.sldListAll(zone, "sld");
    + * records.forEach(record ->
    + *     System.out.println("Record Type: " + record.getType() + ", Value: " + record.getContent())
    + * );
    + * 
    + */ +@Setter +@Slf4j +public class CfDnsClient extends CfBasicHttpClient { + private static final String DEFAULT_BASEURL = "https://api.cloudflare.com/client/v4"; + + private boolean emptyResultThrowsException; + + /** + * Constructs a CfDnsClient instance for interacting with the Cloudflare DNS API. + * + * @param authEmail The email address associated with the Cloudflare account, used for + * authentication. + * @param authKey The API key of the Cloudflare account, used as part of the authentication + * process. + * @param authToken The API token for accessing specific resources within the Cloudflare account. + */ + public CfDnsClient(String authEmail, String authKey, String authToken) { + this(DEFAULT_BASEURL, authEmail, authKey, authToken); + } + + /** + * Constructs a CfDnsClient instance for interacting with the Cloudflare DNS API. + * + * @param baseUrl The base URL of the Cloudflare API to be used for requests. + * @param authEmail The email address associated with the Cloudflare account, used for + * authentication. + * @param authKey The API key of the Cloudflare account, used as part of the authentication + * process. + * @param authToken The API token for accessing specific resources within the Cloudflare account. + */ + public CfDnsClient(String baseUrl, String authEmail, String authKey, String authToken) { + this(true, baseUrl, authEmail, authKey, authToken); + } + + /** + * Constructs a new instance of {@code CfDnsClient}, which facilitates interactions with the + * Cloudflare DNS API. + * + * @param emptyResultThrowsException Specifies if an exception should be thrown when the API + * response is empty. Default is true. + * @param baseUrl The base URL for the Cloudflare API endpoint. + * @param authEmail The email associated with the Cloudflare account for authentication. + * @param authKey The API key for authenticating the client with Cloudflare services. + * @param authToken The authentication token used for authorized access to Cloudflare API. + */ + public CfDnsClient( + boolean emptyResultThrowsException, + String baseUrl, + String authEmail, + String authKey, + String authToken) { + super(baseUrl, authEmail, authKey, authToken); + this.emptyResultThrowsException = emptyResultThrowsException; + } + + /** + * Retrieves a list of all zones from the Cloudflare API.
    + * This method sends a GET request to the Cloudflare API endpoint for listing zones, processes the + * response, and returns the resulting list of ZoneEntity objects. + * + * @return A list of ZoneEntity objects representing the zones retrieved from the Cloudflare API. + * @throws CloudflareApiException If an error occurs during the API request or response handling. + */ + public List zoneListAll() throws CloudflareApiException { + return zoneListAll(PagingRequest.defaultPaging()); + } + + /** + * Retrieves a list of all zones from the Cloudflare API.
    + * This method sends a GET request to the Cloudflare API endpoint for listing zones, processes the + * response, and returns the resulting list of ZoneEntity objects. + * + * @return A list of ZoneEntity objects representing the zones retrieved from the Cloudflare API. + * @throws CloudflareApiException If an error occurs during the API request or response handling. + */ + public List zoneListAll(PagingRequest pagingRequest) throws CloudflareApiException { + String endpoint = pagingRequest.addQueryString(CfRequest.ZONE_LIST.buildPath()); + ZoneMultipleResponse response = getRequest(endpoint, ZoneMultipleResponse.class); + checkResponse(response); + return response.getResult(); + } + + /** + * Retrieves detailed information about a specific zone by its name. + * + * @param name The name of the zone to retrieve information for. + * @return A {@link ZoneEntity} object that contains details of the specified zone. + * @throws CloudflareApiException If an error occurs while making the API request or processing + * the response. + */ + public ZoneEntity zoneInfo(String name) throws CloudflareApiException { + String endpoint = CfRequest.ZONE_INFO.buildPath(name); + ZoneMultipleResponse response = getRequest(endpoint, ZoneMultipleResponse.class); + checkResponse(response, true); + return response.getResult().get(0); + } + + /** + * Retrieves all record entities for a specific second-level domain (SLD) within a given DNS zone. + * + * @param zone The DNS zone entity for which the SLD records are to be fetched. + * @param sld The second-level domain name for which the records are retrieved. + * @return A list of {@code RecordEntity} objects representing the DNS records associated with the + * provided SLD. + * @throws CloudflareApiException If an error occurs while interacting with the Cloudflare API. + */ + public List sldListAll(ZoneEntity zone, String sld) throws CloudflareApiException { + return sldListAll(zone, sld, PagingRequest.defaultPaging()); + } + + /** + * Retrieves all record entities for a specific second-level domain (SLD) within a given DNS zone. + * + * @param zone The DNS zone entity for which the SLD records are to be fetched. + * @param sld The second-level domain name for which the records are retrieved. + * @param pagingRequest The paging request. + * @return A list of {@code RecordEntity} objects representing the DNS records associated with the + * provided SLD. + * @throws CloudflareApiException If an error occurs while interacting with the Cloudflare API. + */ + public List sldListAll(ZoneEntity zone, String sld, PagingRequest pagingRequest) + throws CloudflareApiException { + String fqdn = sld + "." + zone.getName(); + String endpoint = + pagingRequest.addQueryString(CfRequest.RECORD_INFO_NAME.buildPath(zone.getId(), fqdn)); + RecordMultipleResponse resp = getRequest(endpoint, RecordMultipleResponse.class); + checkResponse(resp); + return resp.getResult(); + } + + /** + * Retrieves detailed information about a specific second-level domain (SLD) record for a given + * zone and record type from the Cloudflare API. + * + * @param zone the zone entity that contains information about the DNS zone + * @param sld the second-level domain (SLD) for which the record information is requested + * @param type the type of DNS record (e.g., A, AAAA, CNAME) being queried + * @return the record entity containing detailed information about the requested SLD and record + * type + * @throws CloudflareApiException if an error occurs during interaction with the Cloudflare API + */ + public RecordEntity sldInfo(ZoneEntity zone, String sld, RecordType type) + throws CloudflareApiException { + String fqdn = sld + "." + zone.getName(); + String endpoint = CfRequest.RECORD_INFO_NAME_TYPE.buildPath(zone.getId(), fqdn, type); + RecordMultipleResponse resp = getRequest(endpoint, RecordMultipleResponse.class); + checkResponse(resp, true); + return resp.getResult().get(0); + } + + /** + * Creates a new DNS record in the specified zone using the Cloudflare API. + * + * @param zone The zone entity where the record will be created. Contains details such as zone ID. + * @param rec The record entity representing the DNS record to be created, including its + * attributes. + * @return The created record entity as returned by the Cloudflare API. + * @throws CloudflareApiException If an error occurs while interacting with the Cloudflare API. + */ + public RecordEntity recordCreate(ZoneEntity zone, RecordEntity rec) + throws CloudflareApiException { + String endpoint = CfRequest.RECORD_CREATE.buildPath(zone.getId()); + RecordSingleResponse resp = postRequest(endpoint, rec, RecordSingleResponse.class); + checkResponse(resp); + return resp.getResult(); + } + + /** + * Deletes a DNS record of the specified type within a given zone on the Cloudflare API. + * + * @param zone The zone entity that specifies the zone in which the record exists. + * @param rec The record entity that represents the DNS record to be deleted. + * @return {@code true} if the DNS record was successfully deleted; {@code false} otherwise. + * @throws CloudflareApiException if there is an issue during the API communication or the request + * fails for any reason. + */ + public boolean recordDelete(ZoneEntity zone, RecordEntity rec) throws CloudflareApiException { + boolean changed = recordDelete(zone, rec.getId()); + if (changed) { + log.info("Record {} of the type {} successful deleted.", rec.getName(), rec.getType()); + } else { + log.warn("Record {} of the type {} was not deleted.", rec.getName(), rec.getType()); + } + return changed; + } + + /** + * Deletes a DNS record of the specified type within a given zone on the Cloudflare API. + * + * @param zone The zone entity that specifies the zone in which the record exists. + * @param id The record entity that represents the DNS record to be deleted. + * @return {@code true} if the DNS record was successfully deleted; {@code false} otherwise. + * @throws CloudflareApiException if there is an issue during the API communication or the request + * fails for any reason. + */ + public boolean recordDelete(ZoneEntity zone, String id) throws CloudflareApiException { + String endpoint = CfRequest.RECORD_DELETE.buildPath(zone.getId(), id); + RecordSingleResponse resp = deleteRequest(endpoint, RecordSingleResponse.class); + checkResponse(resp); + return resp.getResult().getId().equals(id); + } + + /** + * Updates an existing DNS record in a specified Cloudflare zone. + * + * @param zone the zone entity containing the ID of the target zone + * @param rec the record entity containing the ID of the DNS record to be updated and its updated + * data + * @return the updated record entity as returned by the Cloudflare API + * @throws CloudflareApiException if an error occurs while interacting with the Cloudflare API + */ + public RecordEntity recordUpdate(ZoneEntity zone, RecordEntity rec) + throws CloudflareApiException { + // reset all dates, it causes an API issue + rec.setModifiedOn(null); + rec.setCreatedOn(null); + String endpoint = CfRequest.RECORD_UPDATE.buildPath(zone.getId(), rec.getId()); + RecordSingleResponse resp = patchRequest(endpoint, rec, RecordSingleResponse.class); + checkResponse(resp); + return resp.getResult(); + } + + /** + * Attempts to delete a DNS record of a specific type for a given zone and second-level domain + * (SLD), if it exists. + * + * @param zone The zone in which the DNS record resides. It provides information about the domain. + * @param sld The second-level domain (SLD) of the fully qualified domain name (FQDN) for which + * the record is being deleted. + * @param type The type of the DNS record to be deleted (e.g., A, CNAME, TXT). + * @throws CloudflareApiException If an error occurs while interacting with the Cloudflare API. + */ + public void recordDeleteTypeIfExists(ZoneEntity zone, String sld, RecordType type) + throws CloudflareApiException { + String fqdn = sld + "." + zone.getName(); + try { + RecordEntity rec = sldInfo(zone, sld, type); + recordDelete(zone, rec); + log.debug("Record {} of type {} successful deleted.", fqdn, type); + } catch (CloudflareNotFoundException e) { + log.debug("Record {} of type {} does not exist.", fqdn, type); + } + } + + private void checkResponse(AbstractResponse resp) throws CloudflareApiException { + checkResponse(resp, false); + } + + private void checkResponse(AbstractResponse resp, boolean singleResultExpected) + throws CloudflareApiException { + if (!resp.isSuccess()) { + String errors = + resp.getErrors().stream().map(Object::toString).collect(Collectors.joining(", ")); + throw new CloudflareApiException("Error in response: " + errors); + } + + if (resp instanceof RecordMultipleResponse respMulti) { + if (singleResultExpected && respMulti.getResultInfo().getTotalCount() > 1) { + throw new CloudflareApiException( + "Unexpected result count: " + respMulti.getResultInfo().getTotalCount()); + } + if (emptyResultThrowsException && respMulti.getResultInfo().getTotalCount() == 0) { + throw new CloudflareNotFoundException("No result found"); + } + } + } +} diff --git a/src/main/java/codes/thischwa/cf/CfRequest.java b/src/main/java/codes/thischwa/cf/CfRequest.java new file mode 100644 index 0000000..69aafee --- /dev/null +++ b/src/main/java/codes/thischwa/cf/CfRequest.java @@ -0,0 +1,48 @@ +package codes.thischwa.cf; + +import lombok.Getter; + +/** + * Enum CfRequest encapsulates various API endpoint paths for managing DNS zones and records in a + * cohesive and reusable manner. Each enum constant represents a specific API request path. + */ +@Getter +public enum CfRequest { + + // for handling zones + ZONE_LIST("/zones"), + ZONE_INFO("/zones?name=%s"), + + // for handling records + RECORD_CREATE("/zones/%s/dns_records"), + RECORD_INFO_NAME("/zones/%s/dns_records?name=%s"), + RECORD_INFO_NAME_TYPE("/zones/%s/dns_records?name=%s&type=%s"), + RECORD_UPDATE("/zones/%s/dns_records/%s"), + RECORD_DELETE("/zones/%s/dns_records/%s"); + + private static final char varIdentification = '%'; + private final String path; + + CfRequest(String path) { + this.path = path; + } + + /** + * Constructs the complete API endpoint path by formatting the base path with the provided + * arguments. + * + * @param vars the arguments to format the path string with; these are typically specific + * identifiers or parameters required by the API endpoint. + * @return the fully constructed API endpoint path as a string. + */ + String buildPath(Object... vars) { + long varCount = path.chars().filter(c -> c == varIdentification).count(); + if (varCount != vars.length) { + throw new IllegalArgumentException( + String.format( + "The number of variables (%d) does not match the number of parameters (%d) in the path string: %s", + vars.length, varCount, path)); + } + return String.format(path, vars); + } +} diff --git a/src/main/java/codes/thischwa/cf/CloudflareApiException.java b/src/main/java/codes/thischwa/cf/CloudflareApiException.java new file mode 100644 index 0000000..96bb579 --- /dev/null +++ b/src/main/java/codes/thischwa/cf/CloudflareApiException.java @@ -0,0 +1,40 @@ +package codes.thischwa.cf; + +import java.io.Serial; + +/** + * Represents a custom exception for errors encountered while interacting with the Cloudflare API. + */ +public class CloudflareApiException extends Exception { + + @Serial private static final long serialVersionUID = 1L; + + /** + * Constructs a new CloudflareApiException with the specified detail message. + * + * @param message the detail message, which provides more information about the exception. + */ + public CloudflareApiException(String message) { + super(message); + } + + /** + * Constructs a new CloudflareApiException with the specified detail message and cause. + * + * @param message the detail message, which provides additional context or information about the exception. + * @param cause the cause of this exception, which is the underlying throwable that triggered this exception. + */ + public CloudflareApiException(String message, Throwable cause) { + super(message, cause); + } + + /** + * Constructs a new CloudflareApiException with the specified cause. + * + * @param cause the cause of this exception, which is the underlying throwable + * that triggered this exception. + */ + public CloudflareApiException(Throwable cause) { + super(cause); + } +} diff --git a/src/main/java/codes/thischwa/cf/CloudflareNotFoundException.java b/src/main/java/codes/thischwa/cf/CloudflareNotFoundException.java new file mode 100644 index 0000000..f6f7f66 --- /dev/null +++ b/src/main/java/codes/thischwa/cf/CloudflareNotFoundException.java @@ -0,0 +1,42 @@ +package codes.thischwa.cf; + +/** + * This exception is thrown to indicate that a requested resource was not found during interaction + * with the Cloudflare API. + * + *

    It extends {@link CloudflareApiException} to provide specific errors related to situations + * where Cloudflare responds with a "not found" operation. + */ +public class CloudflareNotFoundException extends CloudflareApiException { + + /** + * Constructs a new CloudflareNotFoundException with the specified detail message. + * + * @param message the detail message, which provides additional context about the "not found" error + * encountered during interaction with the Cloudflare API. + */ + public CloudflareNotFoundException(String message) { + super(message); + } + + /** + * Constructs a new CloudflareNotFoundException with the specified detail message and cause. + * + * @param message the detail message, which provides additional context about the "not found" error + * encountered during interaction with the Cloudflare API. + * @param cause the cause of this exception, which is the underlying throwable that triggered this exception. + */ + public CloudflareNotFoundException(String message, Throwable cause) { + super(message, cause); + } + + /** + * Constructs a new CloudflareNotFoundException with the specified cause. + * + * @param cause the cause of this exception, which is the underlying throwable + * that triggered this exception. + */ + public CloudflareNotFoundException(Throwable cause) { + super(cause); + } +} diff --git a/src/main/java/codes/thischwa/cf/model/AbstractEntity.java b/src/main/java/codes/thischwa/cf/model/AbstractEntity.java new file mode 100644 index 0000000..68857de --- /dev/null +++ b/src/main/java/codes/thischwa/cf/model/AbstractEntity.java @@ -0,0 +1,18 @@ +package codes.thischwa.cf.model; + +import lombok.Data; + +/** + * Represents a base abstract entity class for modeling domain objects with a unique identifier. + * + *

    This class provides a fundamental contract for entities by implementing the {@link + * ResponseEntity} interface. The primary attribute of this class is the `id` field, which serves as + * a unique identifier for all derived entities. + * + *

    Commonly extended by other entity classes to maintain a consistent entity structure across the + * domain models. This encourages code reusability and consistency within the system. + */ +@Data +public class AbstractEntity implements ResponseEntity { + private String id; +} diff --git a/src/main/java/codes/thischwa/cf/model/AbstractMultipleResponse.java b/src/main/java/codes/thischwa/cf/model/AbstractMultipleResponse.java new file mode 100644 index 0000000..5fdfa1a --- /dev/null +++ b/src/main/java/codes/thischwa/cf/model/AbstractMultipleResponse.java @@ -0,0 +1,31 @@ +package codes.thischwa.cf.model; + +import java.util.List; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * Abstract base class for response models that contain multiple result entries. + * + *

    This class is designed to handle API responses where multiple entities are part of the result + * set, such as paginated or batched data. It extends {@link AbstractResponse} to include additional + * attributes specific to multi-entity responses. + * + *

    Attributes: + * + *

      + *
    • `resultInfo`: Provides metadata about the result set, such as pagination details like page + * number, total count, number of results per page, etc. + *
    • `result`: A list of entities representing the main body of the response. The type of + * entities in the result list is determined by the generic parameter {@code T}, which must + * extend {@link ResponseEntity}. + *
    + * + *

    Subclasses can be created by specifying the entity type that the response should handle. + */ +@EqualsAndHashCode(callSuper = true) +@Data +public abstract class AbstractMultipleResponse extends AbstractResponse { + private ResultInfo resultInfo; + private List result; +} diff --git a/src/main/java/codes/thischwa/cf/model/AbstractResponse.java b/src/main/java/codes/thischwa/cf/model/AbstractResponse.java new file mode 100644 index 0000000..0efe60f --- /dev/null +++ b/src/main/java/codes/thischwa/cf/model/AbstractResponse.java @@ -0,0 +1,28 @@ +package codes.thischwa.cf.model; + +import java.util.List; +import lombok.Data; + +/** + * Abstract base class for API response models. + * + *

    This class encapsulates common attributes used to represent the result of an API request. It + * can be extended to define more specific response structures. + * + *

    Attributes: + * + *

      + *
    1. success: Indicates whether the API request was successful. + *
    2. errors: A list of error messages, if any, returned by the API. + *
    3. messages: A list of informational or status messages accompanying the response. + *
    + * + *

    This structure is designed for consistency and ease of extending response models in + * applications that require uniform response structures. + */ +@Data +public abstract class AbstractResponse { + private boolean success; + private List errors; + private List messages; +} diff --git a/src/main/java/codes/thischwa/cf/model/AbstractSingleResponse.java b/src/main/java/codes/thischwa/cf/model/AbstractSingleResponse.java new file mode 100644 index 0000000..ca638f1 --- /dev/null +++ b/src/main/java/codes/thischwa/cf/model/AbstractSingleResponse.java @@ -0,0 +1,24 @@ +package codes.thischwa.cf.model; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * Represents a base abstract response model for handling single response entities within an API + * response. + * + *

    This class extends {@code AbstractResponse}, inheriting common response attributes such as + * success status, error messages, and informational messages. It introduces a single generic type + * parameter {@code } which extends {@code ResponseEntity}, enforcing type consistency for the + * result attribute. + * + *

    Primary Attribute: {@code result}: Represents the single entity result of the response. This + * is a generic type that ensures flexibility and adaptability for different entity models. + * + * @param The type of the response entity that extends {@code ResponseEntity}. + */ +@EqualsAndHashCode(callSuper = true) +@Data +public abstract class AbstractSingleResponse extends AbstractResponse { + private T result; +} diff --git a/src/main/java/codes/thischwa/cf/model/PagingRequest.java b/src/main/java/codes/thischwa/cf/model/PagingRequest.java new file mode 100644 index 0000000..28c270d --- /dev/null +++ b/src/main/java/codes/thischwa/cf/model/PagingRequest.java @@ -0,0 +1,77 @@ +package codes.thischwa.cf.model; + +import java.util.Map; +import lombok.Data; + +/** + * Represents a request model for paginated data. + * + *

    This class encapsulates the page number and the number of items per page for a paginated + * request, along with utility methods for constructing and retrieving pagination parameters. + * + *

    Key functionalities: + * + *

      + *
    • Creating a {@code PagingRequest} instance with specific pagination values using the {@code + * of} method. + *
    • Creating a default {@code PagingRequest} with predefined pagination values. + *
    • Retrieving pagination parameters as a key-value map. + *
    • Generating a query string representation for the pagination parameters. + *
    + */ +@Data +public class PagingRequest { + private int page; + private int perPage; + + PagingRequest(int page, int perPage) { + this.page = page; + this.perPage = perPage; + } + + /** + * Creates a new {@code PagingRequest} instance with the specified page number and items per page. + * + * @param page the page number to be requested + * @param perPage the number of items to be included per page + * @return a new {@code PagingRequest} instance with the provided parameters + */ + public static PagingRequest of(int page, int perPage) { + return new PagingRequest(page, perPage); + } + + /** + * Creates a default {@code PagingRequest} instance with a page number set to 1 and a high number + * of items per page (5,000,000) to accommodate large dataset requests. + * + * @return a default {@code PagingRequest} instance with predefined pagination parameters + */ + public static PagingRequest defaultPaging() { + return new PagingRequest(1, 5000000); + } + + /** + * Retrieves the pagination parameters in a key-value map format. + * + * @return a map containing the pagination parameters, where the key "page" indicates the current + * page number and the key "perPage" indicates the number of items per page. + */ + public Map getPagingParams() { + return Map.of("page", String.valueOf(page), "perPage", String.valueOf(perPage)); + } + + /** + * Appends a query string with pagination parameters (page and perPage) to the provided endpoint. + * + * @param endpoint the base URL or API endpoint to which the query string will be appended + * @return the complete URL with the appended query string for pagination + */ + public String addQueryString(String endpoint) { + return endpoint + queryString(endpoint.contains("?")); + } + + private String queryString(boolean add) { + String qs = "page=" + page + "&perPage=" + perPage; + return add ? "&" + qs : "?" + qs; + } +} diff --git a/src/main/java/codes/thischwa/cf/model/RecordEntity.java b/src/main/java/codes/thischwa/cf/model/RecordEntity.java new file mode 100644 index 0000000..148328c --- /dev/null +++ b/src/main/java/codes/thischwa/cf/model/RecordEntity.java @@ -0,0 +1,59 @@ +package codes.thischwa.cf.model; + +import java.time.LocalDateTime; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.jetbrains.annotations.Nullable; + +/** + * Represents a DNS record entity within a specific zone. + * + *

    Attributes defined in this class include: + * + *

      + *
    • DNS record type such as "A" or "CNAME". + *
    • Name of the DNS record. + *
    • Content of the DNS record, such as an IP address. + *
    • Flags indicating whether the record is proxiable or proxied. + *
    • TTL (Time-To-Live) for the DNS record. + *
    • A locked status to indicate immutability of the record. + *
    • Zone-specific metadata including zone ID and name. + *
    • Timestamps for creation and modification. + *
    + * + *

    Provides a static factory method {@code build} for creating a DNS record with specific + * attributes. + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class RecordEntity extends AbstractEntity { + private String type; + private String name; + private String content; + private Boolean proxiable; + private Boolean proxied; + private Integer ttl; + private Boolean locked; + @Nullable private String zoneId; + @Nullable private String zoneName; + @Nullable private LocalDateTime modifiedOn; + @Nullable private LocalDateTime createdOn; + + /** + * Builds and returns a {@link RecordEntity} instance with the specified attributes. + * + * @param name the name of the DNS record + * @param type the {@link RecordType} of the DNS record + * @param ttl the time-to-live (TTL) value for the DNS record + * @param ip the content of the DNS record, typically an IP address + * @return a {@link RecordEntity} populated with the provided attributes + */ + public static RecordEntity build(String name, RecordType type, Integer ttl, String ip) { + RecordEntity rec = new RecordEntity(); + rec.setName(name); + rec.setType(type.getType()); + rec.setTtl(ttl); + rec.setContent(ip); + return rec; + } +} diff --git a/src/main/java/codes/thischwa/cf/model/RecordMultipleResponse.java b/src/main/java/codes/thischwa/cf/model/RecordMultipleResponse.java new file mode 100644 index 0000000..89f7df7 --- /dev/null +++ b/src/main/java/codes/thischwa/cf/model/RecordMultipleResponse.java @@ -0,0 +1,4 @@ +package codes.thischwa.cf.model; + +/** Represents the API response of the Cloudflare API containing multiple DNS record entities. */ +public class RecordMultipleResponse extends AbstractMultipleResponse {} diff --git a/src/main/java/codes/thischwa/cf/model/RecordSingleResponse.java b/src/main/java/codes/thischwa/cf/model/RecordSingleResponse.java new file mode 100644 index 0000000..a45f6fe --- /dev/null +++ b/src/main/java/codes/thischwa/cf/model/RecordSingleResponse.java @@ -0,0 +1,4 @@ +package codes.thischwa.cf.model; + +/** Represents the API response of the Cloudflare API containing a single DNS record entity. */ +public class RecordSingleResponse extends AbstractSingleResponse {} diff --git a/src/main/java/codes/thischwa/cf/model/RecordType.java b/src/main/java/codes/thischwa/cf/model/RecordType.java new file mode 100644 index 0000000..8653fce --- /dev/null +++ b/src/main/java/codes/thischwa/cf/model/RecordType.java @@ -0,0 +1,46 @@ +package codes.thischwa.cf.model; + +import lombok.Getter; + +/** + * Enum representing various DNS record types. + * + *

    Each constant in this enum corresponds to a specific DNS record type, such as "A", "AAAA", + * "CNAME", or "TXT". This enum provides a means to standardize the representation of these record + * types throughout the application while allowing easy retrieval of their string representation. + */ +@Getter +public enum RecordType { + A("A"), + AAAA("AAAA"), + CAA("CAA"), + CERT("CERT"), + CNAME("CNAME"), + DNSKEY("DNSKEY"), + DS("DS"), + HTTPS("HTTPS"), + LOC("LOC"), + MX("MX"), + NAPTR("NAPTR"), + NS("NS"), + OPENPGPKEY("OPENPGPKEY"), + PTR("PTR"), + SMIMEA("SMIMEA"), + SRV("SRV"), + SSHFP("SSHFP"), + SVCB("SVCB"), + TLSA("TLSA"), + TXT("TXT"), + URI("URI"); + + private final String type; + + RecordType(String type) { + this.type = type; + } + + @Override + public String toString() { + return getType(); + } +} diff --git a/src/main/java/codes/thischwa/cf/model/ResponseEntity.java b/src/main/java/codes/thischwa/cf/model/ResponseEntity.java new file mode 100644 index 0000000..86581f9 --- /dev/null +++ b/src/main/java/codes/thischwa/cf/model/ResponseEntity.java @@ -0,0 +1,17 @@ +package codes.thischwa.cf.model; + +/** + * Represents a contract for entities that have a unique identifier. + * + *

    This interface is primarily used as a common abstraction for domain objects that require a + * unique identifier, enabling type consistency and code reusability. + */ +public interface ResponseEntity { + + /** + * Retrieves the unique identifier of the entity. + * + * @return the unique identifier as a String + */ + String getId(); +} diff --git a/src/main/java/codes/thischwa/cf/model/ResultInfo.java b/src/main/java/codes/thischwa/cf/model/ResultInfo.java new file mode 100644 index 0000000..15227eb --- /dev/null +++ b/src/main/java/codes/thischwa/cf/model/ResultInfo.java @@ -0,0 +1,26 @@ +package codes.thischwa.cf.model; + +import lombok.Data; + +/** + * Represents metadata for paginated results. + * + *

    This class contains information about the current page, page size, total pages, and result + * counts, which can be utilized in managing and navigating through paginated data. + * + *

      + *
    • page: The current page number. + *
    • perPage: The number of results per page. + *
    • totalPages: The total number of pages available. + *
    • count: The number of results on the current page. + *
    • totalCount: The total number of results across all pages. + *
    + */ +@Data +public class ResultInfo { + private int page; + private int perPage; + private int totalPages; + private int count; + private int totalCount; +} diff --git a/src/main/java/codes/thischwa/cf/model/ZoneEntity.java b/src/main/java/codes/thischwa/cf/model/ZoneEntity.java new file mode 100644 index 0000000..af9cf1b --- /dev/null +++ b/src/main/java/codes/thischwa/cf/model/ZoneEntity.java @@ -0,0 +1,40 @@ +package codes.thischwa.cf.model; + +import java.time.LocalDateTime; +import java.util.Set; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * Represents a DNS zone entity in the Cloudflare DNS system.
    + * + *

    This class encapsulates all relevant data and metadata associated with a zone, including but + * not limited to the following attributes: + * + *

      + *
    • Zone name. + *
    • Development mode status. + *
    • Active and original name servers linked to the zone. + *
    • Timestamps indicating when the zone was created, modified, or activated. + *
    • Current operational status of the zone (e.g., active, inactive). + *
    • Boolean flag indicating whether the zone is paused. + *
    • Zone type, representing the nature of the DNS zone (e.g., full, partial). + *
    + * + *

    This class extends {@link AbstractEntity} to inherit basic entity properties and to provide a + * consistent interface across domain models. + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class ZoneEntity extends AbstractEntity { + private String name; + private Integer developmentMode; + private Set nameServers; + private Set originalNameServers; + private LocalDateTime createdOn; + private LocalDateTime modifiedOn; + private LocalDateTime activatedOn; + private String status; + private Boolean paused; + private String type; +} diff --git a/src/main/java/codes/thischwa/cf/model/ZoneMultipleResponse.java b/src/main/java/codes/thischwa/cf/model/ZoneMultipleResponse.java new file mode 100644 index 0000000..c2b77ae --- /dev/null +++ b/src/main/java/codes/thischwa/cf/model/ZoneMultipleResponse.java @@ -0,0 +1,4 @@ +package codes.thischwa.cf.model; + +/** Represents a response model that contains multiple {@link ZoneEntity} instances. */ +public class ZoneMultipleResponse extends AbstractMultipleResponse {} diff --git a/src/main/java/codes/thischwa/cf/model/package-info.java b/src/main/java/codes/thischwa/cf/model/package-info.java new file mode 100644 index 0000000..c9a9fe9 --- /dev/null +++ b/src/main/java/codes/thischwa/cf/model/package-info.java @@ -0,0 +1,2 @@ +/** The model of CloudflareDNS-java. */ +package codes.thischwa.cf.model; diff --git a/src/main/java/codes/thischwa/cf/package-info.java b/src/main/java/codes/thischwa/cf/package-info.java new file mode 100644 index 0000000..b92339a --- /dev/null +++ b/src/main/java/codes/thischwa/cf/package-info.java @@ -0,0 +1,2 @@ +/** The base package of CloudflareDNS-java. */ +package codes.thischwa.cf; diff --git a/src/test/java/codes/thischwa/cf/CfClientTest.java b/src/test/java/codes/thischwa/cf/CfClientTest.java new file mode 100644 index 0000000..3373b6e --- /dev/null +++ b/src/test/java/codes/thischwa/cf/CfClientTest.java @@ -0,0 +1,93 @@ +package codes.thischwa.cf; + +import static org.junit.jupiter.api.Assertions.*; + +import codes.thischwa.cf.model.RecordEntity; +import codes.thischwa.cf.model.RecordType; +import codes.thischwa.cf.model.ZoneEntity; + +import java.time.LocalDate; +import java.util.List; +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Test; + +// TODO: #testDns should be clean-up it's test data +@Slf4j +public class CfClientTest { + + private static final String zoneStr = "mein-d-ns.de"; + private static final String sldStr = "devsld"; + private static int ttl = 60; + + private final String email = System.getenv("API_EMAIL"); + private final String apiKey = System.getenv("API_KEY"); + private final String apiToken = System.getenv("API_TOKEN"); + + private final CfDnsClient client = new CfDnsClient(email, apiKey, apiToken); + + @Test + void testList() throws Exception { + List zList = client.zoneListAll(); + assertEquals(1, zList.size()); + + List rList = client.sldListAll(zList.get(0), "test"); + assertFalse(rList.isEmpty()); + + assertThrows( + CloudflareNotFoundException.class, () -> client.sldListAll(zList.get(0), "notexisting")); + + client.setEmptyResultThrowsException(false); + rList = client.sldListAll(zList.get(0), "notexisting"); + assertTrue(rList.isEmpty()); + client.setEmptyResultThrowsException(true); + } + + @Test + void testDns() throws Exception { + ZoneEntity z = client.zoneInfo(zoneStr); + assertEquals("0a83dd6e7f8c46039f2517bbded8115e", z.getId()); + assertEquals("mein-d-ns.de", z.getName()); + assertEquals("active", z.getStatus()); + assertEquals(2, z.getNameServers().size()); + assertTrue(z.getNameServers().contains("sergi.ns.cloudflare.com")); + assertEquals(4, z.getOriginalNameServers().size()); + assertTrue(z.getOriginalNameServers().contains("a.ns14.net")); + assertNotNull(z.getActivatedOn()); + assertNotNull(z.getModifiedOn()); + assertNotNull(z.getCreatedOn()); + assertEquals(LocalDate.of(2025, 1, 20), z.getCreatedOn().toLocalDate()); + + RecordEntity r = client.sldInfo(z, "test", RecordType.A); + assertEquals("b345fec8769a2980811a8ff901b4e158", r.getId()); + assertEquals("test.mein-d-ns.de", r.getName()); + assertEquals("A", r.getType()); + assertEquals("129.0.0.3", r.getContent()); + + RecordEntity createdRe1 = + client.recordCreate( + z, RecordEntity.build(sldStr + "." + zoneStr, RecordType.A, ttl, "130.0.0.3")); + r = client.sldInfo(z, sldStr, RecordType.A); + assertEquals("130.0.0.3", r.getContent()); + RecordEntity createdRe2 = + client.recordCreate( + z, + RecordEntity.build( + sldStr + "." + zoneStr, RecordType.AAAA, ttl, "2a0a:4cc0:c0:2e4::1")); + r = client.sldInfo(z, sldStr, RecordType.AAAA); + assertEquals("2a0a:4cc0:c0:2e4::1", r.getContent()); + + createdRe2.setContent("2a0a:4cc0:c0:2e4::2"); + client.recordUpdate(z, createdRe2); + r = client.sldInfo(z, sldStr, RecordType.AAAA); + assertEquals("2a0a:4cc0:c0:2e4::2", r.getContent()); + + r = client.sldInfo(z, sldStr, RecordType.A); + assertEquals("130.0.0.3", r.getContent()); + assertTrue(client.recordDelete(z, createdRe2)); + assertThrows( + CloudflareNotFoundException.class, () -> client.sldInfo(z, sldStr, RecordType.AAAA)); + + client.recordDeleteTypeIfExists(z, sldStr, RecordType.A); + assertThrows(CloudflareNotFoundException.class, () -> client.sldInfo(z, sldStr, RecordType.A)); + } +} diff --git a/src/test/java/codes/thischwa/cf/CfRequestTest.java b/src/test/java/codes/thischwa/cf/CfRequestTest.java new file mode 100644 index 0000000..6d886c4 --- /dev/null +++ b/src/test/java/codes/thischwa/cf/CfRequestTest.java @@ -0,0 +1,59 @@ +package codes.thischwa.cf; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import codes.thischwa.cf.model.RecordType; +import org.junit.jupiter.api.Test; + +public class CfRequestTest { + + @Test + public void testBuildPathWithSingleVariable() { + String result = CfRequest.RECORD_CREATE.buildPath("zone123"); + assertEquals("/zones/zone123/dns_records", result); + } + + @Test + public void testBuildPathWithMultipleVariables() { + String result = CfRequest.RECORD_UPDATE.buildPath("zone123", "record456"); + assertEquals("/zones/zone123/dns_records/record456", result); + } + + @Test + public void testBuildPathWithoutVariables() { + String result = CfRequest.ZONE_LIST.buildPath(); + assertEquals("/zones", result); + } + + @Test + public void testBuildRecordInfoName() { + String result = CfRequest.RECORD_INFO_NAME.buildPath("zone123", "sub.domain.com"); + assertEquals("/zones/zone123/dns_records?name=sub.domain.com", result); + } + + @Test + public void testBuildRecordDelete() { + String result = CfRequest.RECORD_DELETE.buildPath("zone123", "record789"); + assertEquals("/zones/zone123/dns_records/record789", result); + } + + @Test + public void testBuildZoneInfo() { + String result = CfRequest.ZONE_INFO.buildPath("zone123"); + assertEquals("/zones?name=zone123", result); + } + + @Test + public void testBuildRecordInfo() { + String result = CfRequest.RECORD_INFO_NAME_TYPE.buildPath("zone123", "sld.domain.com", RecordType.A); + assertEquals("/zones/zone123/dns_records?name=sld.domain.com&type=A", result); + } + + @Test + public void testBuildPathInvalidArguments() { + assertThrows( + IllegalArgumentException.class, + () -> CfRequest.RECORD_INFO_NAME_TYPE.buildPath("zone123", "sld.domain.com")); + } +} diff --git a/src/test/java/codes/thischwa/cf/model/PagingRequestTest.java b/src/test/java/codes/thischwa/cf/model/PagingRequestTest.java new file mode 100644 index 0000000..8c6512f --- /dev/null +++ b/src/test/java/codes/thischwa/cf/model/PagingRequestTest.java @@ -0,0 +1,21 @@ +package codes.thischwa.cf.model; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +public class PagingRequestTest { + + @Test + public void testBuildPath() { + String result = PagingRequest.defaultPaging().addQueryString("/zones"); + assertEquals("/zones?page=1&perPage=5000000", result); + } + + @Test + public void testBuildPathAdditional() { + String result = new PagingRequest( 10, 100).addQueryString("/zones?foo=bar"); + assertEquals("/zones?foo=bar&page=10&perPage=100", result); + } + +} diff --git a/src/test/resources/logback.xml b/src/test/resources/logback.xml new file mode 100644 index 0000000..b251d0f --- /dev/null +++ b/src/test/resources/logback.xml @@ -0,0 +1,14 @@ + + + + + + %d{HH:mm:ss.SSS} [%t] %-5level %logger{50} - %msg%n + + + + + + + \ No newline at end of file