blob: eba6e32661d8358693a78b4a7603f45725a38ea2 [file] [log] [blame]
Toshio Koidead17d5e2014-02-11 11:36:02 -08001package net.onrc.onos.intent;
2
Toshio Koided48166c2014-02-21 19:18:06 -08003import java.util.LinkedList;
4
5import com.esotericsoftware.kryo.serializers.FieldSerializer.Optional;
6
Toshio Koidead17d5e2014-02-11 11:36:02 -08007/**
8 * @author Toshio Koide (t-koide@onlab.us)
9 */
Toshio Koided9fa2a82014-02-19 17:35:18 -080010public class Intent {
Nick Karanatsios88948d32014-02-18 15:14:30 -080011 public enum IntentState {
Toshio Koideb609b3b2014-02-14 18:25:52 -080012 CREATED,
13 INST_REQ,
14 INST_NACK,
15 INST_ACK,
16 DEL_REQ,
17 DEL_PENDING,
18 DEL_ACK,
Toshio Koidea10c0372014-02-20 17:28:10 -080019 REROUTE_REQ,
Toshio Koide0e4d8d22014-02-14 10:56:10 -080020 }
Toshio Koideb609b3b2014-02-14 18:25:52 -080021
Toshio Koidea10c0372014-02-20 17:28:10 -080022 private String id;
23 private IntentState state = IntentState.CREATED;
Toshio Koide565d6dd2014-03-27 11:22:25 -070024 private boolean pathFrozen = false;
Toshio Koide0e4d8d22014-02-14 10:56:10 -080025
Toshio Koided48166c2014-02-21 19:18:06 -080026 @Optional(value="logs")
27 private LinkedList<String> logs = new LinkedList<>();
28
Toshio Koide0e4d8d22014-02-14 10:56:10 -080029 /**
30 * Default constructor for Kryo deserialization
31 */
Toshio Koidec406e792014-02-14 16:52:42 -080032 protected Intent() {
Toshio Koided48166c2014-02-21 19:18:06 -080033 logs.add(String.format("created, time:%d", System.nanoTime())); // for measurement
Toshio Koide0e4d8d22014-02-14 10:56:10 -080034 }
Toshio Koide13986d12014-02-11 20:25:32 -080035
36 public Intent(String id) {
Toshio Koided48166c2014-02-21 19:18:06 -080037 logs.add(String.format("created, time:%d", System.nanoTime())); // for measurement
Toshio Koide13986d12014-02-11 20:25:32 -080038 this.id = id;
39 }
40
Toshio Koideb609b3b2014-02-14 18:25:52 -080041 public Intent(String id, IntentState state) {
Toshio Koided48166c2014-02-21 19:18:06 -080042 logs.add(String.format("created, time:%d", System.nanoTime())); // for measurement
43 setState(state);
Toshio Koideb609b3b2014-02-14 18:25:52 -080044 this.id = id;
Toshio Koideb609b3b2014-02-14 18:25:52 -080045 }
46
Toshio Koide13986d12014-02-11 20:25:32 -080047 public String getId() {
48 return id;
49 }
Toshio Koideb609b3b2014-02-14 18:25:52 -080050
Toshio Koide0e4d8d22014-02-14 10:56:10 -080051 public IntentState getState() {
52 return state;
53 }
Toshio Koideb609b3b2014-02-14 18:25:52 -080054
Toshio Koide0e4d8d22014-02-14 10:56:10 -080055 public IntentState setState(IntentState newState) {
Toshio Koided48166c2014-02-21 19:18:06 -080056 logs.add(String.format("setState, oldState:%s, newState:%s, time:%d",
57 state, newState, System.nanoTime())); // for measurement
Toshio Koide6ed9f532014-02-25 13:29:31 -080058 if (logs.size() > 20) { // TODO this size should be configurable
59 logs.removeFirst();
60 }
Toshio Koide0e4d8d22014-02-14 10:56:10 -080061 IntentState oldState = state;
62 state = newState;
63 return oldState;
64 }
Toshio Koide4f308732014-02-18 15:19:48 -080065
Toshio Koide565d6dd2014-03-27 11:22:25 -070066 public boolean isPathFrozen() {
67 return pathFrozen;
68 }
69
70 public void setPathFrozen(boolean isFrozen) {
71 pathFrozen = isFrozen;
72 }
73
Toshio Koided48166c2014-02-21 19:18:06 -080074 public LinkedList<String> getLogs() {
75 return logs;
76 }
77
Toshio Koide13986d12014-02-11 20:25:32 -080078 @Override
79 public int hashCode() {
Toshio Koidea10c0372014-02-20 17:28:10 -080080 return (id == null) ? 0 : id.hashCode();
81 }
82
83 @Override
84 public boolean equals(Object obj) {
85 if (this == obj)
86 return true;
87 if ((obj == null) || (getClass() != obj.getClass()))
88 return false;
89 Intent other = (Intent) obj;
90 if (id == null) {
91 if (other.id != null)
92 return false;
93 } else if (!id.equals(other.id))
94 return false;
95 return true;
Toshio Koide13986d12014-02-11 20:25:32 -080096 }
Toshio Koided9fa2a82014-02-19 17:35:18 -080097
Toshio Koide0c9106d2014-02-19 15:26:38 -080098 @Override
99 public String toString() {
100 return id.toString() + ", " + state.toString();
101 }
Toshio Koidead17d5e2014-02-11 11:36:02 -0800102}