Thomas Vachuska

Enhanced toString for intents for consistency.

Removed ID block allocator stuff.
...@@ -18,7 +18,8 @@ public class IntentsListCommand extends AbstractShellCommand { ...@@ -18,7 +18,8 @@ public class IntentsListCommand extends AbstractShellCommand {
18 IntentService service = get(IntentService.class); 18 IntentService service = get(IntentService.class);
19 for (Intent intent : service.getIntents()) { 19 for (Intent intent : service.getIntents()) {
20 IntentState state = service.getIntentState(intent.id()); 20 IntentState state = service.getIntentState(intent.id());
21 - print("%s %s %s", intent.id(), state, intent); 21 + print("id=%s, state=%s, appId=%s, %s",
22 + intent.id(), state, intent.appId().name(), intent);
22 } 23 }
23 } 24 }
24 25
......
...@@ -73,7 +73,12 @@ public abstract class ConnectivityIntent extends Intent { ...@@ -73,7 +73,12 @@ public abstract class ConnectivityIntent extends Intent {
73 return treatment; 73 return treatment;
74 } 74 }
75 75
76 - 76 + /**
77 + * Produces a collection of network resources from the given links.
78 + *
79 + * @param links collection of links
80 + * @return collection of link resources
81 + */
77 protected static Collection<NetworkResource> resources(Collection<Link> links) { 82 protected static Collection<NetworkResource> resources(Collection<Link> links) {
78 return ImmutableSet.<NetworkResource>copyOf(links); 83 return ImmutableSet.<NetworkResource>copyOf(links);
79 } 84 }
......
...@@ -66,6 +66,7 @@ public final class HostToHostIntent extends ConnectivityIntent { ...@@ -66,6 +66,7 @@ public final class HostToHostIntent extends ConnectivityIntent {
66 public String toString() { 66 public String toString() {
67 return MoreObjects.toStringHelper(getClass()) 67 return MoreObjects.toStringHelper(getClass())
68 .add("id", id()) 68 .add("id", id())
69 + .add("appId", appId())
69 .add("selector", selector()) 70 .add("selector", selector())
70 .add("treatment", treatment()) 71 .add("treatment", treatment())
71 .add("one", one) 72 .add("one", one)
......
1 -package org.onlab.onos.net.intent;
2 -
3 -/**
4 - * A generalized interface for ID generation
5 - * <p/>
6 - * {@link #getNewId()} generates a globally unique ID instance on
7 - * each invocation.
8 - *
9 - * @param <T> the type of ID
10 - */
11 -@Deprecated
12 -public interface IdGenerator<T> {
13 - /**
14 - * Returns a globally unique ID instance.
15 - *
16 - * @return globally unique ID instance
17 - */
18 - T getNewId();
19 -}
...@@ -78,8 +78,9 @@ public final class LinkCollectionIntent extends ConnectivityIntent { ...@@ -78,8 +78,9 @@ public final class LinkCollectionIntent extends ConnectivityIntent {
78 public String toString() { 78 public String toString() {
79 return MoreObjects.toStringHelper(getClass()) 79 return MoreObjects.toStringHelper(getClass())
80 .add("id", id()) 80 .add("id", id())
81 - .add("match", selector()) 81 + .add("appId", appId())
82 - .add("action", treatment()) 82 + .add("selector", selector())
83 + .add("treatment", treatment())
83 .add("links", links()) 84 .add("links", links())
84 .add("egress", egressPoint()) 85 .add("egress", egressPoint())
85 .toString(); 86 .toString();
......
...@@ -81,10 +81,11 @@ public final class MultiPointToSinglePointIntent extends ConnectivityIntent { ...@@ -81,10 +81,11 @@ public final class MultiPointToSinglePointIntent extends ConnectivityIntent {
81 public String toString() { 81 public String toString() {
82 return MoreObjects.toStringHelper(getClass()) 82 return MoreObjects.toStringHelper(getClass())
83 .add("id", id()) 83 .add("id", id())
84 - .add("match", selector()) 84 + .add("appId", appId())
85 - .add("action", treatment()) 85 + .add("selector", selector())
86 - .add("ingressPoints", ingressPoints()) 86 + .add("treatment", treatment())
87 - .add("egressPoint", egressPoint()) 87 + .add("ingress", ingressPoints())
88 + .add("egress", egressPoint())
88 .toString(); 89 .toString();
89 } 90 }
90 } 91 }
......
...@@ -56,8 +56,9 @@ public class PathIntent extends ConnectivityIntent { ...@@ -56,8 +56,9 @@ public class PathIntent extends ConnectivityIntent {
56 public String toString() { 56 public String toString() {
57 return MoreObjects.toStringHelper(getClass()) 57 return MoreObjects.toStringHelper(getClass())
58 .add("id", id()) 58 .add("id", id())
59 - .add("match", selector()) 59 + .add("appId", appId())
60 - .add("action", treatment()) 60 + .add("selector", selector())
61 + .add("treatment", treatment())
61 .add("path", path) 62 .add("path", path)
62 .toString(); 63 .toString();
63 } 64 }
......
...@@ -69,10 +69,11 @@ public class PointToPointIntent extends ConnectivityIntent { ...@@ -69,10 +69,11 @@ public class PointToPointIntent extends ConnectivityIntent {
69 public String toString() { 69 public String toString() {
70 return MoreObjects.toStringHelper(getClass()) 70 return MoreObjects.toStringHelper(getClass())
71 .add("id", id()) 71 .add("id", id())
72 - .add("match", selector()) 72 + .add("appId", appId())
73 - .add("action", treatment()) 73 + .add("selector", selector())
74 - .add("ingressPoint", ingressPoint) 74 + .add("treatment", treatment())
75 - .add("egressPoints", egressPoint) 75 + .add("ingress", ingressPoint)
76 + .add("egress", egressPoint)
76 .toString(); 77 .toString();
77 } 78 }
78 79
......
...@@ -77,10 +77,11 @@ public class SinglePointToMultiPointIntent extends ConnectivityIntent { ...@@ -77,10 +77,11 @@ public class SinglePointToMultiPointIntent extends ConnectivityIntent {
77 public String toString() { 77 public String toString() {
78 return MoreObjects.toStringHelper(getClass()) 78 return MoreObjects.toStringHelper(getClass())
79 .add("id", id()) 79 .add("id", id())
80 - .add("match", selector()) 80 + .add("appId", appId())
81 - .add("action", treatment()) 81 + .add("selector", selector())
82 - .add("ingressPoint", ingressPoint) 82 + .add("treatment", treatment())
83 - .add("egressPort", egressPoints) 83 + .add("ingress", ingressPoint)
84 + .add("egress", egressPoints)
84 .toString(); 85 .toString();
85 } 86 }
86 87
......
1 -package org.onlab.onos.net.intent;
2 -
3 -/**
4 - * This interface is for generator of IntentId. It is defined only for
5 - * testing purpose to keep type safety on mock creation.
6 - *
7 - * <p>
8 - * {@link #getNewId()} generates a globally unique {@link IntentId} instance
9 - * on each invocation. Application developers should not generate IntentId
10 - * by themselves. Instead use an implementation of this interface.
11 - * </p>
12 - */
13 -public interface IntentIdGenerator extends IdGenerator<IntentId> {
14 -}
1 -package org.onlab.onos.net.intent.impl;
2 -
3 -import org.onlab.onos.net.intent.IdGenerator;
4 -
5 -/**
6 - * Base class of {@link IdGenerator} implementations which use {@link IdBlockAllocator} as
7 - * backend.
8 - *
9 - * @param <T> the type of ID
10 - */
11 -public abstract class AbstractBlockAllocatorBasedIdGenerator<T> implements IdGenerator<T> {
12 - protected final IdBlockAllocator allocator;
13 - protected IdBlock idBlock;
14 -
15 - /**
16 - * Constructs an ID generator which use {@link IdBlockAllocator} as backend.
17 - *
18 - * @param allocator
19 - */
20 - protected AbstractBlockAllocatorBasedIdGenerator(IdBlockAllocator allocator) {
21 - this.allocator = allocator;
22 - this.idBlock = allocator.allocateUniqueIdBlock();
23 - }
24 -
25 - @Override
26 - public synchronized T getNewId() {
27 - try {
28 - return convertFrom(idBlock.getNextId());
29 - } catch (UnavailableIdException e) {
30 - idBlock = allocator.allocateUniqueIdBlock();
31 - return convertFrom(idBlock.getNextId());
32 - }
33 - }
34 -
35 - /**
36 - * Returns an ID instance of {@code T} type from the long value.
37 - *
38 - * @param value original long value
39 - * @return ID instance
40 - */
41 - protected abstract T convertFrom(long value);
42 -}
1 -package org.onlab.onos.net.intent.impl;
2 -
3 -public class DummyIdBlockAllocator implements IdBlockAllocator {
4 - private long blockTop;
5 - private static final long BLOCK_SIZE = 0x1000000L;
6 -
7 - /**
8 - * Returns a block of IDs which are unique and unused.
9 - * Range of IDs is fixed size and is assigned incrementally as this method
10 - * called.
11 - *
12 - * @return an IdBlock containing a set of unique IDs
13 - */
14 - @Override
15 - public IdBlock allocateUniqueIdBlock() {
16 - synchronized (this) {
17 - long blockHead = blockTop;
18 - long blockTail = blockTop + BLOCK_SIZE;
19 -
20 - IdBlock block = new IdBlock(blockHead, BLOCK_SIZE);
21 - blockTop = blockTail;
22 -
23 - return block;
24 - }
25 - }
26 -
27 - @Override
28 - public IdBlock allocateUniqueIdBlock(long range) {
29 - throw new UnsupportedOperationException("Not supported yet");
30 - }
31 -}
1 -package org.onlab.onos.net.intent.impl;
2 -
3 -import static com.google.common.base.Preconditions.checkArgument;
4 -
5 -import java.util.Objects;
6 -import java.util.concurrent.atomic.AtomicLong;
7 -
8 -import com.google.common.base.MoreObjects;
9 -
10 -/**
11 - * A class representing an ID space.
12 - */
13 -public final class IdBlock {
14 - private final long start;
15 - private final long size;
16 -
17 - private final AtomicLong currentId;
18 -
19 - /**
20 - * Constructs a new ID block with the specified size and initial value.
21 - *
22 - * @param start initial value of the block
23 - * @param size size of the block
24 - * @throws IllegalArgumentException if the size is less than or equal to 0
25 - */
26 - public IdBlock(long start, long size) {
27 - checkArgument(size > 0, "size should be more than 0, but %s", size);
28 -
29 - this.start = start;
30 - this.size = size;
31 -
32 - this.currentId = new AtomicLong(start);
33 - }
34 -
35 - // TODO: consider if this method is needed or not
36 - /**
37 - * Returns the initial value.
38 - *
39 - * @return initial value
40 - */
41 - public long getStart() {
42 - return start;
43 - }
44 -
45 - // TODO: consider if this method is needed or not
46 - /**
47 - * Returns the last value.
48 - *
49 - * @return last value
50 - */
51 - public long getEnd() {
52 - return start + size - 1;
53 - }
54 -
55 - /**
56 - * Returns the block size.
57 - *
58 - * @return block size
59 - */
60 - public long getSize() {
61 - return size;
62 - }
63 -
64 - /**
65 - * Returns the next ID in the block.
66 - *
67 - * @return next ID
68 - * @throws UnavailableIdException if there is no available ID in the block.
69 - */
70 - public long getNextId() {
71 - final long id = currentId.getAndIncrement();
72 - if (id > getEnd()) {
73 - throw new UnavailableIdException(String.format(
74 - "used all IDs in allocated space (size: %d, end: %d, current: %d)",
75 - size, getEnd(), id
76 - ));
77 - }
78 -
79 - return id;
80 - }
81 -
82 - // TODO: Do we really need equals and hashCode? Should it contain currentId?
83 - @Override
84 - public boolean equals(Object o) {
85 - if (this == o) {
86 - return true;
87 - }
88 - if (o == null || getClass() != o.getClass()) {
89 - return false;
90 - }
91 -
92 - IdBlock that = (IdBlock) o;
93 - return Objects.equals(this.start, that.start)
94 - && Objects.equals(this.size, that.size)
95 - && Objects.equals(this.currentId.get(), that.currentId.get());
96 - }
97 -
98 - @Override
99 - public int hashCode() {
100 - return Objects.hash(start, size, currentId);
101 - }
102 -
103 - @Override
104 - public String toString() {
105 - return MoreObjects.toStringHelper(getClass())
106 - .add("start", start)
107 - .add("size", size)
108 - .add("currentId", currentId)
109 - .toString();
110 - }
111 -}
1 -package org.onlab.onos.net.intent.impl;
2 -
3 -/**
4 - * An interface that gives unique ID spaces.
5 - */
6 -public interface IdBlockAllocator {
7 - /**
8 - * Allocates a unique Id Block.
9 - *
10 - * @return Id Block.
11 - */
12 - IdBlock allocateUniqueIdBlock();
13 -
14 - /**
15 - * Allocates next unique id and retrieve a new range of ids if needed.
16 - *
17 - * @param range range to use for the identifier
18 - * @return Id Block.
19 - */
20 - IdBlock allocateUniqueIdBlock(long range);
21 -}