All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jclouds.openstack.poppy.v1.domain.Origin Maven / Gradle / Ivy

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.jclouds.openstack.poppy.v1.domain;

import java.util.List;

import org.jclouds.javax.annotation.Nullable;
import org.jclouds.json.SerializedNames;

import com.google.auto.value.AutoValue;
import com.google.common.collect.ImmutableList;

/**
 * Representation of an OpenStack Poppy Origin.
 */
@AutoValue
public abstract class Origin {
   /**
    * @see Builder#hostHeaderType(HostHeaderType)
    */
   public abstract HostHeaderType getHostHeaderType();
   
   /**
    * @see Builder#hostHeaderValue(String)
    */
   @Nullable public abstract String getHostHeaderValue();
   
   /**
    * @see Builder#origin(String)
    */
   public abstract String getOrigin();

   /**
    * @see Builder#port(Integer)
    */
   @Nullable public abstract Integer getPort();

   /**
    * @see Builder#sslEnabled(Boolean)
    */
   @Nullable public abstract Boolean getSslEnabled();

   /**
    * @see Builder#rules(List)
    */
   @Nullable public abstract List getRules();

   @SerializedNames({ "hostheadertype", "hostheadervalue", "origin", "port", "ssl", "rules" })
   private static Origin create(HostHeaderType hostHeaderType, String hostHeaderValue, String origin, int port, boolean sslEnabled, List rules) {
      return builder().hostHeaderType(hostHeaderType).hostHeaderValue(hostHeaderValue).origin(origin).port(port).sslEnabled(sslEnabled)
            .rules(rules).build();
   }

   public static Builder builder() {
      return new AutoValue_Origin.Builder();
   }
   public Builder toBuilder() {
      return builder()
            .hostHeaderType(getHostHeaderType())
            .hostHeaderValue(getHostHeaderValue())
            .origin(getOrigin())
            .port(getPort())
            .sslEnabled(getSslEnabled())
            .rules(getRules());
   }

   public static final class Builder {
      private HostHeaderType hostHeaderType;
      private String hostHeaderValue;
      private String origin;
      private Integer port;
      private Boolean sslEnabled;
      private List rules;
      Builder() {
      }
      Builder(Origin source) {
         hostHeaderType(source.getHostHeaderType());
         hostHeaderValue(source.getHostHeaderValue());
         origin(source.getOrigin());
         port(source.getPort());
         sslEnabled(source.getSslEnabled());
         rules(source.getRules());
      }

      /**
       * Required.
       * @param hostHeaderType Specifies the type of Host header type to use. "origin" will set the value of
       *                       Host header type to the origin URL, "domain" will set the value of Host header
       *                       type to the domain URL, "custom" will set the value of Host header type to the
       *                       value of {@link #hostHeaderValue}.
       * @return The Origin builder.
       */
      public Origin.Builder hostHeaderType(HostHeaderType hostHeaderType) {
         this.hostHeaderType = hostHeaderType;
         return this;
      }
      
      /**
       * Optional.
       * @param hostHeaderValue Specifies the value of Host header to use when type is set to "custom".
       * @return The Origin builder.
       */
      public Origin.Builder hostHeaderValue(String hostHeaderValue) {
         this.hostHeaderValue = hostHeaderValue;
         return this;
      }
      
      /**
       * Required.
       * @param origin Specifies the URL or IP address from which to pull origin content. The minimum length for
       *               origin is 3. The maximum length is 253.
       * @return The Origin builder.
       */
      public Origin.Builder origin(String origin) {
         this.origin = origin;
         return this;
      }

      /**
       * Optional.
       * @param port Specifies the port used to access the origin. The default is port 80. Note: Rackspace CDN cannot
       *             be used with custom ports. Services are required to run on HTTP (80) and HTTPS (443) for the
       *             origin servers.
       * @return The Origin builder.
       */
      public Origin.Builder port(Integer port) {
         this.port = port;
         return this;
      }

      /**
       * Optional.
       * @param sslEnabled Uses HTTPS to access the origin. The default is false.
       * @return The Origin builder.
       */
      public Origin.Builder sslEnabled(Boolean sslEnabled) {
         this.sslEnabled = sslEnabled;
         return this;
      }

      /**
       * Required.
       * @param rules Specifies a collection of rules that define the conditions when this origin should be accessed.
       *              If there is more than one origin, the rules parameter is required.
       * @return The Origin builder.
       */
      public Origin.Builder rules(List rules) {
         this.rules = rules;
         return this;
      }

      public Origin build() {
         String missing = "";
         if (hostHeaderType == null) {
            missing += " hostHeaderType";
         }
         else {
            if (HostHeaderType.CUSTOM.equals(hostHeaderType) && hostHeaderValue == null) {
               missing += " hostHeaderValue";
            }
         }
         if (origin == null) {
            missing += " origin";
         }
         if (!missing.isEmpty()) {
            throw new IllegalStateException("Missing required properties:" + missing);
         }
         Origin result = new AutoValue_Origin(
               this.hostHeaderType,
               this.hostHeaderValue,
               this.origin,
               this.port,
               this.sslEnabled,
               rules != null ? ImmutableList.copyOf(this.rules) : null);
         return result;
      }
   }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy