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.agent.api;
  
  import com.google.gson.Gson;
  import com.google.gson.GsonBuilder;
  
  /**
   * This command represents logical view of VM's connectivity in VPC.
   */
  public class OvsVpcRoutingPolicyConfigCommand extends Command {
  
      VpcConfig vpcConfig =null;
      long hostId;
      String bridgeName;
      long sequenceNumber;
      String schemaVersion;
  
      public static class AclItem {
          int number;
          String uuid;
          String action;
          String direction;
          String sourcePortStart;
          String sourcePortEnd;
          String protocol;
          String[] sourceCidrs;
          public AclItem(int number, String uuid, String action, String direction, String sourcePortStart,
                         String sourcePortEnd, String protocol, String[] sourceCidrs) {
              this.number = number;
              this.uuid =uuid;
              this.action = action;
              this.direction = direction;
              this.sourceCidrs = sourceCidrs;
              this.sourcePortStart = sourcePortStart;
              this.sourcePortEnd = sourcePortEnd;
              this.protocol = protocol;
          }
      }
  
      public static class Acl {
          String id;
          AclItem[] aclItems;
          public Acl(String uuid, AclItem[] aclItems) {
              this.id = uuid;
              this.aclItems = aclItems;
          }
      }
  
      public static class Tier {
          String id;
          String cidr;
          String aclId;
          public Tier(String uuid, String cidr, String aclId) {
              this.id = uuid;
              this.cidr = cidr;
              this.aclId = aclId;
          }
      }
  
      public class Vpc {
          String cidr;
          String id;
          Acl[] acls;
          Tier[] tiers;
          public Vpc(String id, String cidr, Acl[] acls, Tier[] tiers) {
              this.id = id;
              this.cidr = cidr;
              this.acls = acls;
              this.tiers = tiers;
          }
      }
  
      public static class VpcConfig {
          Vpc vpc;
          public VpcConfig(Vpc vpc) {
              this.vpc = vpc;
          }
      }
  
      public OvsVpcRoutingPolicyConfigCommand(String id, String cidr, Acl[] acls, Tier[] tiers) {
          Vpc vpc = new Vpc(id, cidr, acls, tiers);
          vpcConfig = new VpcConfig(vpc);
      }
  
      public String getVpcConfigInJson() {
          Gson gson = new GsonBuilder().create();
          return gson.toJson(vpcConfig).toLowerCase();
      }
  
      public void setHostId(long hostId) {
          this.hostId = hostId;
      }
  
      public long getHostId() {
          return hostId;
      }
  
      public String getBridgeName() {
          return bridgeName;
      }
  
      public void setBridgeName(String bridgeName) {
          this.bridgeName = bridgeName;
      }
  
      @Override
      public boolean executeInSequence() {
          return false;
      }
  
      public long getSequenceNumber() {
          return sequenceNumber;
      }
  
      public void setSequenceNumber(long sequenceNumber) {
          this.sequenceNumber = sequenceNumber;
      }
  }
  