d4c8cd1b56e71fd92a428db7a290f99dea1d5c00
[controller.git] / opendaylight / sal / api / src / main / java / org / opendaylight / controller / sal / core / Capabilities.java
1
2 /*
3  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
4  *
5  * This program and the accompanying materials are made available under the
6  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
7  * and is available at http://www.eclipse.org/legal/epl-v10.html
8  */
9
10 package org.opendaylight.controller.sal.core;
11
12 import javax.xml.bind.annotation.XmlElement;
13 import javax.xml.bind.annotation.XmlRootElement;
14
15 import org.apache.commons.lang3.builder.EqualsBuilder;
16 import org.apache.commons.lang3.builder.HashCodeBuilder;
17
18 /**
19  * @file   Capabilities.java
20  *
21  * @brief  Class representing capabilities
22  *
23  * Describes supported capabilities
24  */
25 @XmlRootElement
26 public class Capabilities extends Property {
27         private static final long serialVersionUID = 1L;
28     @XmlElement
29     private int capabilitiesValue;
30     
31     public enum CapabilitiesType { 
32         FLOW_STATS_CAPABILITY(1<<0),
33         TABLE_STATS_CAPABILITY(1<<1),
34         PORT_STATS_CAPABILITY(1<<2),
35         STP_CAPABILITY(1<<3),
36         RSVD_CAPABILITY(1<<4),
37         IP_REASSEM_CAPABILITY(1<<5),
38         QUEUE_STATS_CAPABILITY(1<<6),
39         ARP_MATCH_IP_CAPABILITY(1<<7);
40         private final int ct;
41         CapabilitiesType(int val) {
42                 this.ct = val;
43         }
44         public int getValue() {
45                 return ct;
46         }
47     }
48    
49     public static final String CapabilitiesPropName = "capabilities";
50     /**
51      * Construct a Capabilities property
52      *
53      * @param capabilities the Capabilities value
54      * @return Constructed object
55      */
56     public Capabilities(int capabilities) {
57         super(CapabilitiesPropName);
58         this.capabilitiesValue = capabilities;
59     }
60
61     /*
62      * Private constructor used for JAXB mapping
63      */
64     private Capabilities() {
65         super(CapabilitiesPropName);
66         this.capabilitiesValue = 0;
67     }
68
69     public Capabilities clone() {
70         return new Capabilities(this.capabilitiesValue);
71     }
72
73     public int getValue() {
74         return this.capabilitiesValue;
75     }
76     
77     @Override
78     public int hashCode() {
79         return HashCodeBuilder.reflectionHashCode(this);
80     }
81
82     @Override
83     public boolean equals(Object obj) {
84         return EqualsBuilder.reflectionEquals(this, obj);
85     }
86
87     @Override
88     public String toString() {
89         return "Capabilities[" + capabilitiesValue + "]";
90     }
91 }