Jonathan Hart
Committed by Ray Milkey

DefaultTrafficTreatment: Build all-instructions list at creation time

so that we don't have to join the two lists each time we want to see all instructions

Change-Id: I7f1ad252776abcb6768372eeaabfa661bdded36c
...@@ -41,6 +41,7 @@ public final class DefaultTrafficTreatment implements TrafficTreatment { ...@@ -41,6 +41,7 @@ public final class DefaultTrafficTreatment implements TrafficTreatment {
41 41
42 private final List<Instruction> immediate; 42 private final List<Instruction> immediate;
43 private final List<Instruction> deferred; 43 private final List<Instruction> deferred;
44 + private final List<Instruction> all;
44 private final Instructions.TableTypeTransition table; 45 private final Instructions.TableTypeTransition table;
45 46
46 private final boolean hasClear; 47 private final boolean hasClear;
...@@ -51,21 +52,31 @@ public final class DefaultTrafficTreatment implements TrafficTreatment { ...@@ -51,21 +52,31 @@ public final class DefaultTrafficTreatment implements TrafficTreatment {
51 /** 52 /**
52 * Creates a new traffic treatment from the specified list of instructions. 53 * Creates a new traffic treatment from the specified list of instructions.
53 * 54 *
54 - * @param instructions treatment instructions 55 + * @param immediate immediate instructions
55 */ 56 */
56 - private DefaultTrafficTreatment(List<Instruction> instructions) { 57 + private DefaultTrafficTreatment(List<Instruction> immediate) {
57 - this.immediate = ImmutableList.copyOf(checkNotNull(instructions)); 58 + this.immediate = ImmutableList.copyOf(checkNotNull(immediate));
58 this.deferred = ImmutableList.of(); 59 this.deferred = ImmutableList.of();
60 + this.all = this.immediate;
59 this.hasClear = false; 61 this.hasClear = false;
60 this.table = null; 62 this.table = null;
61 } 63 }
62 64
65 + /**
66 + * Creates a new traffic treatment from the specified list of instructions.
67 + *
68 + * @param deferred deferred instructions
69 + * @param immediate immediate instructions
70 + * @param table table transition instruction
71 + * @param clear instruction to clear the deferred actions list
72 + */
63 private DefaultTrafficTreatment(List<Instruction> deferred, 73 private DefaultTrafficTreatment(List<Instruction> deferred,
64 List<Instruction> immediate, 74 List<Instruction> immediate,
65 Instructions.TableTypeTransition table, 75 Instructions.TableTypeTransition table,
66 boolean clear) { 76 boolean clear) {
67 this.immediate = ImmutableList.copyOf(checkNotNull(immediate)); 77 this.immediate = ImmutableList.copyOf(checkNotNull(immediate));
68 this.deferred = ImmutableList.copyOf(checkNotNull(deferred)); 78 this.deferred = ImmutableList.copyOf(checkNotNull(deferred));
79 + this.all = ListUtils.union(this.immediate, this.deferred);
69 this.table = table; 80 this.table = table;
70 this.hasClear = clear; 81 this.hasClear = clear;
71 82
...@@ -83,7 +94,7 @@ public final class DefaultTrafficTreatment implements TrafficTreatment { ...@@ -83,7 +94,7 @@ public final class DefaultTrafficTreatment implements TrafficTreatment {
83 94
84 @Override 95 @Override
85 public List<Instruction> allInstructions() { 96 public List<Instruction> allInstructions() {
86 - return ListUtils.union(immediate, deferred); 97 + return all;
87 } 98 }
88 99
89 @Override 100 @Override
...@@ -92,7 +103,7 @@ public final class DefaultTrafficTreatment implements TrafficTreatment { ...@@ -92,7 +103,7 @@ public final class DefaultTrafficTreatment implements TrafficTreatment {
92 } 103 }
93 104
94 @Override 105 @Override
95 - public Boolean clearedDeferred() { 106 + public boolean clearedDeferred() {
96 return hasClear; 107 return hasClear;
97 } 108 }
98 109
...@@ -162,8 +173,6 @@ public final class DefaultTrafficTreatment implements TrafficTreatment { ...@@ -162,8 +173,6 @@ public final class DefaultTrafficTreatment implements TrafficTreatment {
162 */ 173 */
163 public static final class Builder implements TrafficTreatment.Builder { 174 public static final class Builder implements TrafficTreatment.Builder {
164 175
165 - boolean drop = false;
166 -
167 boolean clear = false; 176 boolean clear = false;
168 177
169 Instructions.TableTypeTransition table; 178 Instructions.TableTypeTransition table;
...@@ -179,11 +188,14 @@ public final class DefaultTrafficTreatment implements TrafficTreatment { ...@@ -179,11 +188,14 @@ public final class DefaultTrafficTreatment implements TrafficTreatment {
179 } 188 }
180 189
181 // Creates a new builder based off an existing treatment 190 // Creates a new builder based off an existing treatment
182 - //FIXME only works for immediate instruction sets.
183 private Builder(TrafficTreatment treatment) { 191 private Builder(TrafficTreatment treatment) {
184 - for (Instruction instruction : treatment.immediate()) { 192 + deferred();
185 - add(instruction); 193 + treatment.deferred().forEach(i -> add(i));
186 - } 194 +
195 + immediate();
196 + treatment.immediate().forEach(i -> add(i));
197 +
198 + clear = treatment.clearedDeferred();
187 } 199 }
188 200
189 @Override 201 @Override
......
...@@ -64,7 +64,7 @@ public interface TrafficTreatment { ...@@ -64,7 +64,7 @@ public interface TrafficTreatment {
64 * by the device. 64 * by the device.
65 * @return a boolean 65 * @return a boolean
66 */ 66 */
67 - Boolean clearedDeferred(); 67 + boolean clearedDeferred();
68 68
69 /** 69 /**
70 * Builder of traffic treatment entities. 70 * Builder of traffic treatment entities.
......
...@@ -54,7 +54,6 @@ import org.onosproject.net.topology.PathService; ...@@ -54,7 +54,6 @@ import org.onosproject.net.topology.PathService;
54 import org.onosproject.net.topology.TopologyVertex; 54 import org.onosproject.net.topology.TopologyVertex;
55 import org.onosproject.store.Timestamp; 55 import org.onosproject.store.Timestamp;
56 56
57 -import java.util.ArrayList;
58 import java.util.Arrays; 57 import java.util.Arrays;
59 import java.util.Collection; 58 import java.util.Collection;
60 import java.util.Collections; 59 import java.util.Collections;
...@@ -94,17 +93,17 @@ public class IntentTestsMocks { ...@@ -94,17 +93,17 @@ public class IntentTestsMocks {
94 public static class MockTreatment implements TrafficTreatment { 93 public static class MockTreatment implements TrafficTreatment {
95 @Override 94 @Override
96 public List<Instruction> deferred() { 95 public List<Instruction> deferred() {
97 - return null; 96 + return Collections.emptyList();
98 } 97 }
99 98
100 @Override 99 @Override
101 public List<Instruction> immediate() { 100 public List<Instruction> immediate() {
102 - return new ArrayList<>(); 101 + return Collections.emptyList();
103 } 102 }
104 103
105 @Override 104 @Override
106 public List<Instruction> allInstructions() { 105 public List<Instruction> allInstructions() {
107 - return null; 106 + return Collections.emptyList();
108 } 107 }
109 108
110 @Override 109 @Override
...@@ -113,8 +112,8 @@ public class IntentTestsMocks { ...@@ -113,8 +112,8 @@ public class IntentTestsMocks {
113 } 112 }
114 113
115 @Override 114 @Override
116 - public Boolean clearedDeferred() { 115 + public boolean clearedDeferred() {
117 - return null; 116 + return false;
118 } 117 }
119 } 118 }
120 119
......
...@@ -577,8 +577,8 @@ public class FlowRuleManagerTest { ...@@ -577,8 +577,8 @@ public class FlowRuleManagerTest {
577 } 577 }
578 578
579 @Override 579 @Override
580 - public Boolean clearedDeferred() { 580 + public boolean clearedDeferred() {
581 - return null; 581 + return false;
582 } 582 }
583 583
584 @Override 584 @Override
......