content: // 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 com.cloud.region.ha;
  
  import org.apache.cloudstack.acl.ControlledEntity;
  import org.apache.cloudstack.api.Identity;
  import org.apache.cloudstack.api.InternalIdentity;
  
  /**
   * GlobalLoadBalancerRule defines a global (multi zone) load balancing configuration.
   */
  public interface GlobalLoadBalancerRule extends Identity, InternalIdentity, ControlledEntity {
  
      enum Algorithm {
  
          RoundRobin, LeastConn, Proximity;
  
          public static boolean isValidAlgorithm(String algorithm) {
              if (RoundRobin.name().equalsIgnoreCase(algorithm) || LeastConn.name().equalsIgnoreCase(algorithm) || Proximity.name().equalsIgnoreCase(algorithm)) {
                  return true;
              }
              return false;
          }
      }
  
      enum Persistence {
  
          sourceip;
  
          public static boolean isValidPersistence(String persistence) {
              if (sourceip.name().equalsIgnoreCase(persistence)) {
                  return true;
              }
              return false;
          }
      }
  
      enum ServiceType {
          tcp, udp, http;
          public static boolean isValidServiceType(String serviceType) {
              if (tcp.name().equalsIgnoreCase(serviceType) ||
                  udp.name().equalsIgnoreCase(serviceType) ||
                  http.name().equalsIgnoreCase(serviceType)) {
                  return true;
              }
              return false;
          }
      }
  
      enum State {
          Staged, Add, Active, Revoke
      }
  
      public String getName();
  
      public String getDescription();
  
      public String getGslbDomain();
  
      public String getAlgorithm();
  
      public String getPersistence();
  
      public int getRegion();
  
      @Override
      public long getAccountId();
  
      public State getState();
  
      public String getServiceType();
  }
  