Sho SHIMIZU
Committed by Gerrit Code Review

Add a method to get resource type name: simpleTypeName()

last() is removed as the new method takes over its role

Change-Id: Id3737529787da5d5bb513355cdbc443f2b7b17e2
...@@ -115,7 +115,7 @@ public class ResourcesCommand extends AbstractShellCommand { ...@@ -115,7 +115,7 @@ public class ResourcesCommand extends AbstractShellCommand {
115 print("ROOT"); 115 print("ROOT");
116 } else { 116 } else {
117 if (resource instanceof ContinuousResource) { 117 if (resource instanceof ContinuousResource) {
118 - String s = ((String) resource.last()); 118 + String s = resource.simpleTypeName();
119 String simpleName = s.substring(s.lastIndexOf('.') + 1); 119 String simpleName = s.substring(s.lastIndexOf('.') + 1);
120 print("%s%s: %f", Strings.repeat(" ", level), 120 print("%s%s: %f", Strings.repeat(" ", level),
121 simpleName, 121 simpleName,
...@@ -126,7 +126,7 @@ public class ResourcesCommand extends AbstractShellCommand { ...@@ -126,7 +126,7 @@ public class ResourcesCommand extends AbstractShellCommand {
126 // Continuous resource is terminal node, stop here 126 // Continuous resource is terminal node, stop here
127 return; 127 return;
128 } else { 128 } else {
129 - String resourceName = resource.last().getClass().getSimpleName(); 129 + String resourceName = resource.simpleTypeName();
130 130
131 String toString = String.valueOf(resource.valueAs(Object.class).orElse("")); 131 String toString = String.valueOf(resource.valueAs(Object.class).orElse(""));
132 if (toString.startsWith(resourceName)) { 132 if (toString.startsWith(resourceName)) {
...@@ -161,7 +161,7 @@ public class ResourcesCommand extends AbstractShellCommand { ...@@ -161,7 +161,7 @@ public class ResourcesCommand extends AbstractShellCommand {
161 nonAggregatable.add(r); 161 nonAggregatable.add(r);
162 } else if (Iterables.any(aggregatableTypes, r::isTypeOf)) { 162 } else if (Iterables.any(aggregatableTypes, r::isTypeOf)) {
163 // aggregatable & terminal node 163 // aggregatable & terminal node
164 - String className = r.last().getClass().getSimpleName(); 164 + String className = r.simpleTypeName();
165 aggregatables.put(className, r); 165 aggregatables.put(className, r);
166 } else { 166 } else {
167 nonAggregatable.add(r); 167 nonAggregatable.add(r);
...@@ -216,8 +216,7 @@ public class ResourcesCommand extends AbstractShellCommand { ...@@ -216,8 +216,7 @@ public class ResourcesCommand extends AbstractShellCommand {
216 216
217 String resourceName; 217 String resourceName;
218 if (resource instanceof ContinuousResource) { 218 if (resource instanceof ContinuousResource) {
219 - String s = (String) resource.last(); 219 + resourceName = resource.simpleTypeName();
220 - resourceName = s.substring(s.lastIndexOf('.') + 1);
221 } else if (resource instanceof DiscreteResource) { 220 } else if (resource instanceof DiscreteResource) {
222 // TODO This distributed store access incurs overhead. 221 // TODO This distributed store access incurs overhead.
223 // This should be merged with the one in printResource() 222 // This should be merged with the one in printResource()
...@@ -225,7 +224,7 @@ public class ResourcesCommand extends AbstractShellCommand { ...@@ -225,7 +224,7 @@ public class ResourcesCommand extends AbstractShellCommand {
225 // resource which has children should be printed 224 // resource which has children should be printed
226 return true; 225 return true;
227 } 226 }
228 - resourceName = resource.last().getClass().getSimpleName(); 227 + resourceName = resource.simpleTypeName();
229 } else { 228 } else {
230 log.warn("Unexpected resource class: {}", resource.getClass().getSimpleName()); 229 log.warn("Unexpected resource class: {}", resource.getClass().getSimpleName());
231 return false; 230 return false;
......
...@@ -49,6 +49,11 @@ public final class ContinuousResource implements Resource { ...@@ -49,6 +49,11 @@ public final class ContinuousResource implements Resource {
49 } 49 }
50 50
51 @Override 51 @Override
52 + public String simpleTypeName() {
53 + return id.simpleTypeName();
54 + }
55 +
56 + @Override
52 public boolean isTypeOf(Class<?> type) { 57 public boolean isTypeOf(Class<?> type) {
53 checkNotNull(type); 58 checkNotNull(type);
54 59
...@@ -98,14 +103,6 @@ public final class ContinuousResource implements Resource { ...@@ -98,14 +103,6 @@ public final class ContinuousResource implements Resource {
98 } 103 }
99 104
100 @Override 105 @Override
101 - public Object last() {
102 - if (id.components().isEmpty()) {
103 - return null;
104 - }
105 - return id.components().get(id.components().size() - 1);
106 - }
107 -
108 - @Override
109 public DiscreteResource child(Object child) { 106 public DiscreteResource child(Object child) {
110 throw new UnsupportedOperationException(); 107 throw new UnsupportedOperationException();
111 } 108 }
......
...@@ -47,6 +47,11 @@ public final class ContinuousResourceId extends ResourceId { ...@@ -47,6 +47,11 @@ public final class ContinuousResourceId extends ResourceId {
47 return components; 47 return components;
48 } 48 }
49 49
50 + @Override
51 + String simpleTypeName() {
52 + return name;
53 + }
54 +
50 /** 55 /**
51 * {@inheritDoc} 56 * {@inheritDoc}
52 * 57 *
......
...@@ -46,6 +46,11 @@ public final class DiscreteResource implements Resource { ...@@ -46,6 +46,11 @@ public final class DiscreteResource implements Resource {
46 } 46 }
47 47
48 @Override 48 @Override
49 + public String simpleTypeName() {
50 + return id.simpleTypeName();
51 + }
52 +
53 + @Override
49 public boolean isTypeOf(Class<?> type) { 54 public boolean isTypeOf(Class<?> type) {
50 checkNotNull(type); 55 checkNotNull(type);
51 56
...@@ -80,14 +85,6 @@ public final class DiscreteResource implements Resource { ...@@ -80,14 +85,6 @@ public final class DiscreteResource implements Resource {
80 return Optional.of(value); 85 return Optional.of(value);
81 } 86 }
82 87
83 - @Override
84 - public Object last() {
85 - if (id.components().isEmpty()) {
86 - return null;
87 - }
88 - return id.components().get(id.components().size() - 1);
89 - }
90 -
91 private boolean isRoot() { 88 private boolean isRoot() {
92 return id.equals(ResourceId.ROOT); 89 return id.equals(ResourceId.ROOT);
93 } 90 }
......
...@@ -45,6 +45,15 @@ public final class DiscreteResourceId extends ResourceId { ...@@ -45,6 +45,15 @@ public final class DiscreteResourceId extends ResourceId {
45 } 45 }
46 46
47 @Override 47 @Override
48 + String simpleTypeName() {
49 + if (components.isEmpty()) {
50 + return "Root";
51 + }
52 +
53 + return components.get(components.size() - 1).getClass().getSimpleName();
54 + }
55 +
56 + @Override
48 public DiscreteResourceId child(Object child) { 57 public DiscreteResourceId child(Object child) {
49 checkArgument(!(child instanceof Class<?>)); 58 checkArgument(!(child instanceof Class<?>));
50 59
......
...@@ -48,6 +48,17 @@ public interface Resource { ...@@ -48,6 +48,17 @@ public interface Resource {
48 ResourceId id(); 48 ResourceId id();
49 49
50 /** 50 /**
51 + * Returns the simple type name of this resource.
52 + *
53 + * Example:<br>
54 + * Resource: DeviceId:1/PortNumber:1/VlanId:200<br>
55 + * Simple type name: VlanId<br>
56 + *
57 + * @return the simple type name of this resource
58 + */
59 + String simpleTypeName();
60 +
61 + /**
51 * Checks if the type of this instance is the specified type. 62 * Checks if the type of this instance is the specified type.
52 * 63 *
53 * @param type type of resource to be checked 64 * @param type type of resource to be checked
...@@ -75,14 +86,6 @@ public interface Resource { ...@@ -75,14 +86,6 @@ public interface Resource {
75 <T> Optional<T> valueAs(Class<T> type); 86 <T> Optional<T> valueAs(Class<T> type);
76 87
77 /** 88 /**
78 - * Returns the last component of this instance.
79 - *
80 - * @return the last component of this instance.
81 - * The return value is equal to the last object of {@code components()}.
82 - */
83 - Object last();
84 -
85 - /**
86 * Returns the parent resource of this instance. 89 * Returns the parent resource of this instance.
87 * E.g. if this resource is Link:1/VLAN ID:100, the return value is the resource for Link:1. 90 * E.g. if this resource is Link:1/VLAN ID:100, the return value is the resource for Link:1.
88 * 91 *
......
...@@ -29,6 +29,8 @@ public abstract class ResourceId { ...@@ -29,6 +29,8 @@ public abstract class ResourceId {
29 29
30 abstract ImmutableList<Object> components(); 30 abstract ImmutableList<Object> components();
31 31
32 + abstract String simpleTypeName();
33 +
32 /** 34 /**
33 * Returns the parent resource ID of this instance. 35 * Returns the parent resource ID of this instance.
34 * 36 *
......
...@@ -21,6 +21,9 @@ import org.onlab.util.Bandwidth; ...@@ -21,6 +21,9 @@ import org.onlab.util.Bandwidth;
21 import org.onosproject.net.DeviceId; 21 import org.onosproject.net.DeviceId;
22 import org.onosproject.net.PortNumber; 22 import org.onosproject.net.PortNumber;
23 23
24 +import static org.hamcrest.Matchers.is;
25 +import static org.junit.Assert.assertThat;
26 +
24 /** 27 /**
25 * Unit test for ContinuousResourceId. 28 * Unit test for ContinuousResourceId.
26 */ 29 */
...@@ -42,4 +45,11 @@ public class ContinuousResourceIdTest { ...@@ -42,4 +45,11 @@ public class ContinuousResourceIdTest {
42 new EqualsTester() 45 new EqualsTester()
43 .addEqualityGroup(id1, sameAsId1); 46 .addEqualityGroup(id1, sameAsId1);
44 } 47 }
48 +
49 + @Test
50 + public void testSimpleTypeName() {
51 + ContinuousResourceId id1 = Resources.continuous(D1, P1, Bandwidth.class).resource(BW1.bps()).id();
52 +
53 + assertThat(id1.simpleTypeName(), is("Bandwidth"));
54 + }
45 } 55 }
......
...@@ -21,6 +21,9 @@ import org.onlab.packet.VlanId; ...@@ -21,6 +21,9 @@ import org.onlab.packet.VlanId;
21 import org.onosproject.net.DeviceId; 21 import org.onosproject.net.DeviceId;
22 import org.onosproject.net.PortNumber; 22 import org.onosproject.net.PortNumber;
23 23
24 +import static org.hamcrest.Matchers.is;
25 +import static org.junit.Assert.assertThat;
26 +
24 /** 27 /**
25 * Unit test for DiscreteResourceId. 28 * Unit test for DiscreteResourceId.
26 */ 29 */
...@@ -41,4 +44,15 @@ public class DiscreteResourceIdTest { ...@@ -41,4 +44,15 @@ public class DiscreteResourceIdTest {
41 .addEqualityGroup(id1, sameAsId1) 44 .addEqualityGroup(id1, sameAsId1)
42 .addEqualityGroup(id2); 45 .addEqualityGroup(id2);
43 } 46 }
47 +
48 + @Test
49 + public void testSimpleTypeName() {
50 + DiscreteResourceId id = Resources.discrete(D1, P1, VLAN1).id();
51 + assertThat(id.simpleTypeName(), is("VlanId"));
52 + }
53 +
54 + @Test
55 + public void testSimpleTypeNameOfRoot() {
56 + assertThat(ResourceId.ROOT.simpleTypeName(), is("Root"));
57 + }
44 } 58 }
......
...@@ -91,14 +91,6 @@ public class DiscreteResourceTest { ...@@ -91,14 +91,6 @@ public class DiscreteResourceTest {
91 } 91 }
92 92
93 @Test 93 @Test
94 - public void testBase() {
95 - DiscreteResource resource = Resources.discrete(D1).resource();
96 -
97 - DeviceId child = (DeviceId) resource.last();
98 - assertThat(child, is(D1));
99 - }
100 -
101 - @Test
102 public void testValueAs() { 94 public void testValueAs() {
103 DiscreteResource resource = Resources.discrete(D1).resource(); 95 DiscreteResource resource = Resources.discrete(D1).resource();
104 96
......