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.vm;
  
  import java.io.Serializable;
  import java.net.URI;
  
  import org.apache.cloudstack.api.InternalIdentity;
  import org.apache.cloudstack.utils.reflectiontostringbuilderutils.ReflectionToStringBuilderUtils;
  
  import com.cloud.network.Network;
  import com.cloud.network.Networks.AddressFormat;
  import com.cloud.network.Networks.BroadcastDomainType;
  import com.cloud.network.Networks.Mode;
  import com.cloud.network.Networks.TrafficType;
  import com.cloud.vm.Nic.ReservationStrategy;
  
  public class NicProfile implements InternalIdentity, Serializable {
      private static final long serialVersionUID = 4997005771736090304L;
  
      long id;
      long networkId;
      long vmId;
      String reservationId;
      Integer deviceId;
  
      String name;
      String uuid;
  
      String macAddress;
      BroadcastDomainType broadcastType;
      Mode mode;
      AddressFormat format;
      TrafficType trafficType;
      URI isolationUri;
      URI broadcastUri;
      ReservationStrategy strategy;
      boolean defaultNic;
      Integer networkRate;
      boolean isSecurityGroupEnabled;
  
      Integer orderIndex;
  
      // IPv4
      String iPv4Address;
      String iPv4Netmask;
      String iPv4Gateway;
      String iPv4Dns1;
      String iPv4Dns2;
      String requestedIPv4;
      boolean ipv4AllocationRaceCheck;
  
      // IPv6
      String iPv6Address;
      String iPv6Gateway;
      String iPv6Cidr;
      String iPv6Dns1;
      String iPv6Dns2;
      String requestedIPv6;
      Integer mtu;
  
      //
      // CONSTRUCTORS
      //
  
      public NicProfile() {
      }
  
      public NicProfile(Nic nic, Network network, URI broadcastUri, URI isolationUri, Integer networkRate, boolean isSecurityGroupEnabled, String name) {
          id = nic.getId();
          networkId = network.getId();
          mode = network.getMode();
          broadcastType = network.getBroadcastDomainType();
          trafficType = network.getTrafficType();
          format = nic.getAddressFormat();
  
          iPv4Address = nic.getIPv4Address();
          iPv4Netmask = nic.getIPv4Netmask();
          iPv4Gateway = nic.getIPv4Gateway();
  
          iPv6Address = nic.getIPv6Address();
          iPv6Gateway = nic.getIPv6Gateway();
          iPv6Cidr = nic.getIPv6Cidr();
  
          macAddress = nic.getMacAddress();
          reservationId = nic.getReservationId();
          strategy = nic.getReservationStrategy();
          deviceId = nic.getDeviceId();
          defaultNic = nic.isDefaultNic();
          this.broadcastUri = broadcastUri;
          this.isolationUri = isolationUri;
  
          this.isSecurityGroupEnabled = isSecurityGroupEnabled;
          vmId = nic.getInstanceId();
          this.name = name;
          uuid = nic.getUuid();
  
          if (networkRate != null) {
              this.networkRate = networkRate;
          }
      }
  
      public NicProfile(String requestedIPv4, String requestedIPv6) {
          this.requestedIPv4 = requestedIPv4;
          this.requestedIPv6 = requestedIPv6;
      }
  
      public NicProfile(String requestedIPv4, String requestedIPv6, String requestedMacAddress) {
          this(requestedIPv4, requestedIPv6);
          this.macAddress = requestedMacAddress;
      }
  
      public NicProfile(ReservationStrategy strategy, String iPv4Address, String macAddress, String iPv4gateway, String iPv4netmask) {
          format = AddressFormat.Ip4;
          this.iPv4Address = iPv4Address;
          this.iPv4Gateway = iPv4gateway;
          this.iPv4Netmask = iPv4netmask;
          this.macAddress = macAddress;
          this.strategy = strategy;
      }
  
      //
      // GET & SET GENERAL
      //
  
      @Override
      public long getId() {
          return id;
      }
  
      public void setId(long id) {
          this.id = id;
      }
  
      public long getNetworkId() {
          return networkId;
      }
  
      public void setNetworkId(long networkId){
          this.networkId = networkId;
      }
  
      public long getVirtualMachineId() {
          return vmId;
      }
  
      public void setVirtualMachineId(long virtualMachineId) {
          this.vmId = virtualMachineId;
      }
  
      public String getReservationId() {
          return reservationId;
      }
  
      public void setReservationId(String reservationId) {
          this.reservationId = reservationId;
      }
  
      public Integer getDeviceId() {
          return deviceId;
      }
  
      public void setDeviceId(int deviceId) {
          this.deviceId = deviceId;
      }
  
      public void setDeviceId(Integer deviceId) {
          this.deviceId = deviceId;
      }
  
      public String getName() {
          return name;
      }
  
      public void setName(String name) {
          this.name = name;
      }
  
      public String getUuid() {
          return uuid;
      }
  
      public void setUuid(String uuid) {
          this.uuid = uuid;
      }
  
      public String getMacAddress() {
          return macAddress;
      }
  
      public void setMacAddress(String macAddress) {
          this.macAddress = macAddress;
      }
  
      public BroadcastDomainType getBroadcastType() {
          return broadcastType;
      }
  
      public void setBroadcastType(BroadcastDomainType broadcastType) {
          this.broadcastType = broadcastType;
      }
  
      public Mode getMode() {
          return mode;
      }
  
      public void setMode(Mode mode) {
          this.mode = mode;
      }
  
      public AddressFormat getFormat() {
          return format;
      }
  
      public void setFormat(AddressFormat format) {
          this.format = format;
      }
  
      public TrafficType getTrafficType() {
          return trafficType;
      }
  
      public void setTrafficType(TrafficType trafficType) {
          this.trafficType = trafficType;
      }
  
      public URI getIsolationUri() {
          return isolationUri;
      }
  
      public void setIsolationUri(URI isolationUri) {
          this.isolationUri = isolationUri;
      }
  
      public URI getBroadCastUri() {
          return broadcastUri;
      }
  
      public void setBroadcastUri(URI broadcastUri) {
          this.broadcastUri = broadcastUri;
      }
  
      public ReservationStrategy getReservationStrategy() {
          return strategy;
      }
  
      public void setReservationStrategy(ReservationStrategy strategy) {
          this.strategy = strategy;
      }
  
      public boolean isDefaultNic() {
          return defaultNic;
      }
  
      public void setDefaultNic(boolean defaultNic) {
          this.defaultNic = defaultNic;
      }
  
      public Integer getNetworkRate() {
          return networkRate;
      }
  
      public void setNetworkRate(Integer networkRate) {
          this.networkRate = networkRate;
      }
  
      public boolean isSecurityGroupEnabled() {
          return isSecurityGroupEnabled;
      }
  
      public void setSecurityGroupEnabled(boolean enabled) {
          isSecurityGroupEnabled = enabled;
      }
  
      //
      // GET & SET IPv4
      //
  
      public String getIPv4Address() {
          return iPv4Address;
      }
  
      public void setIPv4Address(String ipv4Address) {
          this.iPv4Address = ipv4Address;
      }
  
      public String getIPv4Netmask() {
          return iPv4Netmask;
      }
  
      public void setIPv4Netmask(String ipv4Netmask) {
          this.iPv4Netmask = ipv4Netmask;
      }
  
      public String getIPv4Gateway() {
          return iPv4Gateway;
      }
  
      public void setIPv4Gateway(String ipv4Gateway) {
          this.iPv4Gateway = ipv4Gateway;
      }
  
      public String getIPv4Dns1() {
          return iPv4Dns1;
      }
  
      public void setIPv4Dns1(String ipv4Dns1) {
          this.iPv4Dns1 = ipv4Dns1;
      }
  
      public String getIPv4Dns2() {
          return iPv4Dns2;
      }
  
      public void setIPv4Dns2(String ipv4Dns2) {
          this.iPv4Dns2 = ipv4Dns2;
      }
  
      public String getRequestedIPv4() {
          return requestedIPv4;
      }
  
      public void setRequestedIPv4(String requestedIPv4) {
          this.requestedIPv4 = requestedIPv4;
      }
  
      //
      // GET & SET IPv6
      //
  
      public String getIPv6Address() {
          return iPv6Address;
      }
  
      public void setIPv6Address(String ipv6Address) {
          this.iPv6Address = ipv6Address;
      }
  
      public String getIPv6Gateway() {
          return iPv6Gateway;
      }
  
      public void setIPv6Gateway(String ipv6Gateway) {
          this.iPv6Gateway = ipv6Gateway;
      }
  
      public String getIPv6Cidr() {
          return iPv6Cidr;
      }
  
      public void setIPv6Cidr(String ipv6Cidr) {
          this.iPv6Cidr = ipv6Cidr;
      }
  
      public String getIPv6Dns1() {
          return iPv6Dns1;
      }
  
      public void setIPv6Dns1(String ipv6Dns1) {
          this.iPv6Dns1 = ipv6Dns1;
      }
  
      public String getIPv6Dns2() {
          return iPv6Dns2;
      }
  
      public void setIPv6Dns2(String ipv6Dns2) {
          this.iPv6Dns2 = ipv6Dns2;
      }
  
      public String getRequestedIPv6() {
          return requestedIPv6;
      }
  
      public void setRequestedIPv6(String requestedIPv6) {
          this.requestedIPv6 = requestedIPv6;
      }
  
      public Integer getOrderIndex() {
          return orderIndex;
      }
  
      public void setOrderIndex(Integer orderIndex) {
          this.orderIndex = orderIndex;
      }
  
      public Integer getMtu() {
          return mtu;
      }
  
      public void setMtu(Integer mtu) {
          this.mtu = mtu;
      }
  
      public boolean getIpv4AllocationRaceCheck() {
          return this.ipv4AllocationRaceCheck;
      }
  
      public void setIpv4AllocationRaceCheck(boolean ipv4AllocationRaceCheck) {
          this.ipv4AllocationRaceCheck = ipv4AllocationRaceCheck;
      }
  
      //
      // OTHER METHODS
      //
  
      public void deallocate() {
          mode = null;
          format = null;
          broadcastType = null;
          trafficType = null;
  
          iPv4Address = null;
          iPv4Netmask = null;
          iPv4Gateway = null;
          iPv4Dns1 = null;
          iPv4Dns2 = null;
  
          iPv6Address = null;
          iPv6Gateway = null;
          iPv6Cidr = null;
          iPv6Dns1 = null;
          iPv6Dns2 = null;
  
          macAddress = null;
          reservationId = null;
          strategy = null;
          deviceId = null;
          broadcastUri = null;
          isolationUri = null;
  
          orderIndex = null;
          mtu = null;
  
      }
  
      @Override
      public String toString() {
          return String.format("NicProfile %s",
                  ReflectionToStringBuilderUtils.reflectOnlySelectedFields(
                          this, "id", "uuid", "vmId", "deviceId",
                          "broadcastUri", "reservationId", "iPv4Address"));
      }
  }
  