blob: e1e67c547483fbb338a4a2a59cd53f6c3ff538e7 [file] [log] [blame]
Jonathan Hart23701d12014-04-03 10:45:48 -07001package net.onrc.onos.core.util;
Pavlin Radoslavov204b2862013-07-12 14:15:36 -07002
3import org.codehaus.jackson.annotate.JsonProperty;
4
5/**
6 * The class representing the Flow Path flags.
7 */
8public class FlowPathFlags {
9 private long flags;
10
11 // Discard the first-hop Flow Entry
Ray Milkey269ffb92014-04-03 14:43:30 -070012 public static final long DISCARD_FIRST_HOP_ENTRY = (1 << 0);
Pavlin Radoslavov204b2862013-07-12 14:15:36 -070013
14 // Keep only the first-hop Flow Entry
pingping-linba5c52f2014-02-11 16:52:01 -080015 public static final long KEEP_ONLY_FIRST_HOP_ENTRY = (1 << 1);
Pavlin Radoslavov204b2862013-07-12 14:15:36 -070016
17 /**
18 * Default constructor.
19 */
20 public FlowPathFlags() {
Ray Milkey269ffb92014-04-03 14:43:30 -070021 this.flags = 0;
Pavlin Radoslavov204b2862013-07-12 14:15:36 -070022 }
23
24 /**
25 * Constructor for given flags.
26 *
27 * @param flags the flags value to set.
28 */
29 public FlowPathFlags(long flags) {
Ray Milkey269ffb92014-04-03 14:43:30 -070030 this.flags = flags;
Pavlin Radoslavov204b2862013-07-12 14:15:36 -070031 }
32
33 /**
34 * Constructor for given flags as a string.
Ray Milkey269ffb92014-04-03 14:43:30 -070035 * <p/>
Pavlin Radoslavov204b2862013-07-12 14:15:36 -070036 * The string value should contain the name of each flags to set. E.g.:
Ray Milkey269ffb92014-04-03 14:43:30 -070037 * "DISCARD_FIRST_HOP_ENTRY,KEEP_ONLY_FIRST_HOP_ENTRY"
38 *
Pavlin Radoslavov204b2862013-07-12 14:15:36 -070039 * @param flagsStr the string value of the flags to set.
40 */
41 public FlowPathFlags(String flagsStr) {
Ray Milkey269ffb92014-04-03 14:43:30 -070042 this.setFlagsStr(flagsStr);
Pavlin Radoslavov204b2862013-07-12 14:15:36 -070043 }
44
45 /**
46 * Get the flags.
47 *
48 * @return the flags.
49 */
50 @JsonProperty("flags")
Ray Milkey269ffb92014-04-03 14:43:30 -070051 public long flags() {
52 return flags;
53 }
Pavlin Radoslavov204b2862013-07-12 14:15:36 -070054
55 /**
56 * Set the flags.
57 *
58 * @param flags the flags value to set.
59 */
60 @JsonProperty("flags")
61 public void setFlags(long flags) {
Ray Milkey269ffb92014-04-03 14:43:30 -070062 this.flags = flags;
Pavlin Radoslavov204b2862013-07-12 14:15:36 -070063 }
64
65 /**
66 * Set the flags as a string.
Ray Milkey269ffb92014-04-03 14:43:30 -070067 * <p/>
Pavlin Radoslavov204b2862013-07-12 14:15:36 -070068 * The string value should contain the name of each flags to set. E.g.:
Ray Milkey269ffb92014-04-03 14:43:30 -070069 * "DISCARD_FIRST_HOP_ENTRY,KEEP_ONLY_FIRST_HOP_ENTRY"
70 *
Pavlin Radoslavov204b2862013-07-12 14:15:36 -070071 * @param flagsStr the string value of the flags to set.
72 */
73 @JsonProperty("flagsStr")
74 public void setFlagsStr(String flagsStr) {
Ray Milkey269ffb92014-04-03 14:43:30 -070075 this.flags = 0L;
Pavlin Radoslavov204b2862013-07-12 14:15:36 -070076
Ray Milkey269ffb92014-04-03 14:43:30 -070077 // Test all flags
78 if (flagsStr.contains("DISCARD_FIRST_HOP_ENTRY"))
79 this.flags |= DISCARD_FIRST_HOP_ENTRY;
80 if (flagsStr.contains("KEEP_ONLY_FIRST_HOP_ENTRY"))
81 this.flags |= KEEP_ONLY_FIRST_HOP_ENTRY;
Pavlin Radoslavov204b2862013-07-12 14:15:36 -070082 }
83
84 /**
85 * Test whether the DISCARD_FIRST_HOP_ENTRY flag is set.
86 *
87 * @return true if the DISCARD_FIRST_HOP_ENTRY flag is set,
88 * otherwise false.
89 */
90 public boolean isDiscardFirstHopEntry() {
Ray Milkey269ffb92014-04-03 14:43:30 -070091 return ((flags & DISCARD_FIRST_HOP_ENTRY) != 0);
Pavlin Radoslavov204b2862013-07-12 14:15:36 -070092 }
93
94 /**
95 * Test whether the KEEP_ONLY_FIRST_HOP_ENTRY flag is set.
96 *
97 * @return true if the KEEP_ONLY_FIRST_HOP_ENTRY flag is set,
98 * otherwise false.
99 */
100 public boolean isKeepOnlyFirstHopEntry() {
Ray Milkey269ffb92014-04-03 14:43:30 -0700101 return ((flags & KEEP_ONLY_FIRST_HOP_ENTRY) != 0);
Pavlin Radoslavov204b2862013-07-12 14:15:36 -0700102 }
103
104 /**
105 * Convert the Flow Path Flags to a string.
Ray Milkey269ffb92014-04-03 14:43:30 -0700106 * <p/>
Pavlin Radoslavov204b2862013-07-12 14:15:36 -0700107 * The string has the following form:
Ray Milkey269ffb92014-04-03 14:43:30 -0700108 * [flags=DISCARD_FIRST_HOP_ENTRY,KEEP_ONLY_FIRST_HOP_ENTRY]
Pavlin Radoslavov204b2862013-07-12 14:15:36 -0700109 *
110 * @return the Flow Path flags as a string.
111 */
Pavlin Radoslavov426d5162013-12-11 12:46:58 -0800112 @Override
Pavlin Radoslavov204b2862013-07-12 14:15:36 -0700113 public String toString() {
Ray Milkey269ffb92014-04-03 14:43:30 -0700114 String flagsStr = null;
115 String ret = "[flags=";
Pavlin Radoslavov204b2862013-07-12 14:15:36 -0700116
Ray Milkey269ffb92014-04-03 14:43:30 -0700117 // Test all flags
118 if ((this.flags & DISCARD_FIRST_HOP_ENTRY) != 0) {
119 flagsStr += "DISCARD_FIRST_HOP_ENTRY";
120 }
121 if ((this.flags & KEEP_ONLY_FIRST_HOP_ENTRY) != 0) {
122 if (flagsStr != null)
123 flagsStr += ",";
124 flagsStr += "KEEP_ONLY_FIRST_HOP_ENTRY";
125 }
126 if (flagsStr != null)
127 ret += flagsStr;
128 ret += "]";
Pavlin Radoslavov204b2862013-07-12 14:15:36 -0700129
Ray Milkey269ffb92014-04-03 14:43:30 -0700130 return ret;
Pavlin Radoslavov204b2862013-07-12 14:15:36 -0700131 }
pingping-linba5c52f2014-02-11 16:52:01 -0800132
Pavlin Radoslavov204b2862013-07-12 14:15:36 -0700133}