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.network.nicira;
  
  import org.apache.commons.lang.builder.EqualsBuilder;
  import org.apache.commons.lang.builder.HashCodeBuilder;
  
  @SuppressWarnings("serial")
  public class AclRule extends AccessRule {
  
      public static final String ETHERTYPE_ARP = "ARP";
  
      /**
       * @TODO Convert this String into Enum and check the JSON communication still works
       */
      protected String action;
  
      protected String sourceIpPrefix;
  
      protected String destinationIpPrefix;
  
      protected String sourceMacAddress;
  
      protected String destinationMacAddress;
  
      protected Integer sourcePortRangeMin;
  
      protected Integer destinationPortRangeMin;
  
      protected Integer sourcePortRangeMax;
  
      protected Integer destinationPortRangeMax;
  
      protected Integer icmpProtocolCode;
  
      protected Integer icmpProtocolType;
  
      protected int order;
  
  
      /**
       * Default constructor
       */
      public AclRule() {
      }
  
      /**
       * Fully parameterized constructor
       */
      public AclRule(String ethertype, int protocol, String action, String sourceMacAddress,
              String destinationMacAddress, String sourceIpPrefix, String destinationIpPrefix,
              Integer sourcePortRangeMin, Integer sourcePortRangeMax,
              Integer destinationPortRangeMin, Integer destinationPortRangeMax,
              int order, Integer icmpProtocolCode, Integer icmpProtocolType) {
          this.ethertype = ethertype;
          this.protocol = protocol;
          this.action = action;
          this.sourceMacAddress = sourceMacAddress;
          this.destinationMacAddress = destinationMacAddress;
          this.sourceIpPrefix = sourceIpPrefix;
          this.destinationIpPrefix = destinationIpPrefix;
          this.sourcePortRangeMin = sourcePortRangeMin;
          this.sourcePortRangeMax = sourcePortRangeMax;
          this.destinationPortRangeMin = destinationPortRangeMin;
          this.destinationPortRangeMax = destinationPortRangeMax;
          this.order = order;
          this.icmpProtocolCode = icmpProtocolCode;
          this.icmpProtocolType = icmpProtocolType;
      }
  
  
      public String getAction() {
          return action;
      }
  
      public void setAction(String action) {
          this.action = action;
      }
  
      public String getSourceIpPrefix() {
          return sourceIpPrefix;
      }
  
      public void setSourceIpPrefix(String sourceIpPrefix) {
          this.sourceIpPrefix = sourceIpPrefix;
      }
  
      public String getDestinationIpPrefix() {
          return destinationIpPrefix;
      }
  
      public void setDestinationIpPrefix(String destinationIpPrefix) {
          this.destinationIpPrefix = destinationIpPrefix;
      }
  
      public String getSourceMacAddress() {
          return sourceMacAddress;
      }
  
      public void setSourceMacAddress(String sourceMacAddress) {
          this.sourceMacAddress = sourceMacAddress;
      }
  
      public String getDestinationMacAddress() {
          return destinationMacAddress;
      }
  
      public void setDestinationMacAddress(String destinationMacAddress) {
          this.destinationMacAddress = destinationMacAddress;
      }
  
      public Integer getSourcePortRangeMin() {
          return sourcePortRangeMin;
      }
  
      public void setSourcePortRangeMin(Integer sourcePortRangeMin) {
          this.sourcePortRangeMin = sourcePortRangeMin;
      }
  
      public Integer getDestinationPortRangeMin() {
          return destinationPortRangeMin;
      }
  
      public void setDestinationPortRangeMin(Integer destinationPortRangeMin) {
          this.destinationPortRangeMin = destinationPortRangeMin;
      }
  
      public Integer getSourcePortRangeMax() {
          return sourcePortRangeMax;
      }
  
      public void setSourcePortRangeMax(Integer sourcePortRangeMax) {
          this.sourcePortRangeMax = sourcePortRangeMax;
      }
  
      public Integer getDestinationPortRangeMax() {
          return destinationPortRangeMax;
      }
  
      public void setDestinationPortRangeMax(Integer destinationPortRangeMax) {
          this.destinationPortRangeMax = destinationPortRangeMax;
      }
  
      public Integer getIcmpProtocolCode() {
          return icmpProtocolCode;
      }
  
      public void setIcmpProtocolCode(Integer icmpProtocolCode) {
          this.icmpProtocolCode = icmpProtocolCode;
      }
  
      public Integer getIcmpProtocolType() {
          return icmpProtocolType;
      }
  
      public void setIcmpProtocolType(Integer icmpProtocolType) {
          this.icmpProtocolType = icmpProtocolType;
      }
  
      public int getOrder() {
          return order;
      }
  
      public void setOrder(int order) {
          this.order = order;
      }
  
      @Override
      public int hashCode() {
          return new HashCodeBuilder(17, 31)
              .append(ethertype).append(protocol)
              .toHashCode();
      }
  
      @Override
      public boolean equals(Object obj) {
          if (obj == null) {
              return false;
          }
          if (obj == this) {
              return true;
          }
          if (!(obj instanceof AclRule)) {
              return false;
          }
          AclRule another = (AclRule) obj;
          return new EqualsBuilder()
                  .append(ethertype, another.ethertype)
                  .append(protocol, another.protocol)
                  .isEquals();
      }
  }
  