Add a method to get resource type name: simpleTypeName()
last() is removed as the new method takes over its role
Change-Id: Id3737529787da5d5bb513355cdbc443f2b7b17e2
diff --git a/cli/src/main/java/org/onosproject/cli/net/ResourcesCommand.java b/cli/src/main/java/org/onosproject/cli/net/ResourcesCommand.java
index 49a56c5..a5f6730 100644
--- a/cli/src/main/java/org/onosproject/cli/net/ResourcesCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/ResourcesCommand.java
@@ -115,7 +115,7 @@
print("ROOT");
} else {
if (resource instanceof ContinuousResource) {
- String s = ((String) resource.last());
+ String s = resource.simpleTypeName();
String simpleName = s.substring(s.lastIndexOf('.') + 1);
print("%s%s: %f", Strings.repeat(" ", level),
simpleName,
@@ -126,7 +126,7 @@
// Continuous resource is terminal node, stop here
return;
} else {
- String resourceName = resource.last().getClass().getSimpleName();
+ String resourceName = resource.simpleTypeName();
String toString = String.valueOf(resource.valueAs(Object.class).orElse(""));
if (toString.startsWith(resourceName)) {
@@ -161,7 +161,7 @@
nonAggregatable.add(r);
} else if (Iterables.any(aggregatableTypes, r::isTypeOf)) {
// aggregatable & terminal node
- String className = r.last().getClass().getSimpleName();
+ String className = r.simpleTypeName();
aggregatables.put(className, r);
} else {
nonAggregatable.add(r);
@@ -216,8 +216,7 @@
String resourceName;
if (resource instanceof ContinuousResource) {
- String s = (String) resource.last();
- resourceName = s.substring(s.lastIndexOf('.') + 1);
+ resourceName = resource.simpleTypeName();
} else if (resource instanceof DiscreteResource) {
// TODO This distributed store access incurs overhead.
// This should be merged with the one in printResource()
@@ -225,7 +224,7 @@
// resource which has children should be printed
return true;
}
- resourceName = resource.last().getClass().getSimpleName();
+ resourceName = resource.simpleTypeName();
} else {
log.warn("Unexpected resource class: {}", resource.getClass().getSimpleName());
return false;
diff --git a/core/api/src/main/java/org/onosproject/net/newresource/ContinuousResource.java b/core/api/src/main/java/org/onosproject/net/newresource/ContinuousResource.java
index 00221ae..33e25c5 100644
--- a/core/api/src/main/java/org/onosproject/net/newresource/ContinuousResource.java
+++ b/core/api/src/main/java/org/onosproject/net/newresource/ContinuousResource.java
@@ -49,6 +49,11 @@
}
@Override
+ public String simpleTypeName() {
+ return id.simpleTypeName();
+ }
+
+ @Override
public boolean isTypeOf(Class<?> type) {
checkNotNull(type);
@@ -98,14 +103,6 @@
}
@Override
- public Object last() {
- if (id.components().isEmpty()) {
- return null;
- }
- return id.components().get(id.components().size() - 1);
- }
-
- @Override
public DiscreteResource child(Object child) {
throw new UnsupportedOperationException();
}
diff --git a/core/api/src/main/java/org/onosproject/net/newresource/ContinuousResourceId.java b/core/api/src/main/java/org/onosproject/net/newresource/ContinuousResourceId.java
index 4c8f466..8a042c8 100644
--- a/core/api/src/main/java/org/onosproject/net/newresource/ContinuousResourceId.java
+++ b/core/api/src/main/java/org/onosproject/net/newresource/ContinuousResourceId.java
@@ -47,6 +47,11 @@
return components;
}
+ @Override
+ String simpleTypeName() {
+ return name;
+ }
+
/**
* {@inheritDoc}
*
diff --git a/core/api/src/main/java/org/onosproject/net/newresource/DiscreteResource.java b/core/api/src/main/java/org/onosproject/net/newresource/DiscreteResource.java
index beb564a..cc3b30a 100644
--- a/core/api/src/main/java/org/onosproject/net/newresource/DiscreteResource.java
+++ b/core/api/src/main/java/org/onosproject/net/newresource/DiscreteResource.java
@@ -46,6 +46,11 @@
}
@Override
+ public String simpleTypeName() {
+ return id.simpleTypeName();
+ }
+
+ @Override
public boolean isTypeOf(Class<?> type) {
checkNotNull(type);
@@ -80,14 +85,6 @@
return Optional.of(value);
}
- @Override
- public Object last() {
- if (id.components().isEmpty()) {
- return null;
- }
- return id.components().get(id.components().size() - 1);
- }
-
private boolean isRoot() {
return id.equals(ResourceId.ROOT);
}
diff --git a/core/api/src/main/java/org/onosproject/net/newresource/DiscreteResourceId.java b/core/api/src/main/java/org/onosproject/net/newresource/DiscreteResourceId.java
index 0e38f5e..70e0119 100644
--- a/core/api/src/main/java/org/onosproject/net/newresource/DiscreteResourceId.java
+++ b/core/api/src/main/java/org/onosproject/net/newresource/DiscreteResourceId.java
@@ -45,6 +45,15 @@
}
@Override
+ String simpleTypeName() {
+ if (components.isEmpty()) {
+ return "Root";
+ }
+
+ return components.get(components.size() - 1).getClass().getSimpleName();
+ }
+
+ @Override
public DiscreteResourceId child(Object child) {
checkArgument(!(child instanceof Class<?>));
diff --git a/core/api/src/main/java/org/onosproject/net/newresource/Resource.java b/core/api/src/main/java/org/onosproject/net/newresource/Resource.java
index 5572592..1548717 100644
--- a/core/api/src/main/java/org/onosproject/net/newresource/Resource.java
+++ b/core/api/src/main/java/org/onosproject/net/newresource/Resource.java
@@ -48,6 +48,17 @@
ResourceId id();
/**
+ * Returns the simple type name of this resource.
+ *
+ * Example:<br>
+ * Resource: DeviceId:1/PortNumber:1/VlanId:200<br>
+ * Simple type name: VlanId<br>
+ *
+ * @return the simple type name of this resource
+ */
+ String simpleTypeName();
+
+ /**
* Checks if the type of this instance is the specified type.
*
* @param type type of resource to be checked
@@ -75,14 +86,6 @@
<T> Optional<T> valueAs(Class<T> type);
/**
- * Returns the last component of this instance.
- *
- * @return the last component of this instance.
- * The return value is equal to the last object of {@code components()}.
- */
- Object last();
-
- /**
* Returns the parent resource of this instance.
* E.g. if this resource is Link:1/VLAN ID:100, the return value is the resource for Link:1.
*
diff --git a/core/api/src/main/java/org/onosproject/net/newresource/ResourceId.java b/core/api/src/main/java/org/onosproject/net/newresource/ResourceId.java
index 8fcccb7..002dc87 100644
--- a/core/api/src/main/java/org/onosproject/net/newresource/ResourceId.java
+++ b/core/api/src/main/java/org/onosproject/net/newresource/ResourceId.java
@@ -29,6 +29,8 @@
abstract ImmutableList<Object> components();
+ abstract String simpleTypeName();
+
/**
* Returns the parent resource ID of this instance.
*
diff --git a/core/api/src/test/java/org/onosproject/net/newresource/ContinuousResourceIdTest.java b/core/api/src/test/java/org/onosproject/net/newresource/ContinuousResourceIdTest.java
index cf6e0e8..1e79f81 100644
--- a/core/api/src/test/java/org/onosproject/net/newresource/ContinuousResourceIdTest.java
+++ b/core/api/src/test/java/org/onosproject/net/newresource/ContinuousResourceIdTest.java
@@ -21,6 +21,9 @@
import org.onosproject.net.DeviceId;
import org.onosproject.net.PortNumber;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
/**
* Unit test for ContinuousResourceId.
*/
@@ -42,4 +45,11 @@
new EqualsTester()
.addEqualityGroup(id1, sameAsId1);
}
+
+ @Test
+ public void testSimpleTypeName() {
+ ContinuousResourceId id1 = Resources.continuous(D1, P1, Bandwidth.class).resource(BW1.bps()).id();
+
+ assertThat(id1.simpleTypeName(), is("Bandwidth"));
+ }
}
diff --git a/core/api/src/test/java/org/onosproject/net/newresource/DiscreteResourceIdTest.java b/core/api/src/test/java/org/onosproject/net/newresource/DiscreteResourceIdTest.java
index 6178150..aeb950d 100644
--- a/core/api/src/test/java/org/onosproject/net/newresource/DiscreteResourceIdTest.java
+++ b/core/api/src/test/java/org/onosproject/net/newresource/DiscreteResourceIdTest.java
@@ -21,6 +21,9 @@
import org.onosproject.net.DeviceId;
import org.onosproject.net.PortNumber;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
/**
* Unit test for DiscreteResourceId.
*/
@@ -41,4 +44,15 @@
.addEqualityGroup(id1, sameAsId1)
.addEqualityGroup(id2);
}
+
+ @Test
+ public void testSimpleTypeName() {
+ DiscreteResourceId id = Resources.discrete(D1, P1, VLAN1).id();
+ assertThat(id.simpleTypeName(), is("VlanId"));
+ }
+
+ @Test
+ public void testSimpleTypeNameOfRoot() {
+ assertThat(ResourceId.ROOT.simpleTypeName(), is("Root"));
+ }
}
diff --git a/core/api/src/test/java/org/onosproject/net/newresource/DiscreteResourceTest.java b/core/api/src/test/java/org/onosproject/net/newresource/DiscreteResourceTest.java
index 7333ef7..0001c70 100644
--- a/core/api/src/test/java/org/onosproject/net/newresource/DiscreteResourceTest.java
+++ b/core/api/src/test/java/org/onosproject/net/newresource/DiscreteResourceTest.java
@@ -91,14 +91,6 @@
}
@Test
- public void testBase() {
- DiscreteResource resource = Resources.discrete(D1).resource();
-
- DeviceId child = (DeviceId) resource.last();
- assertThat(child, is(D1));
- }
-
- @Test
public void testValueAs() {
DiscreteResource resource = Resources.discrete(D1).resource();