Sho SHIMIZU
Committed by Gerrit Code Review

Change the APIs to instantiate Resource and ResourceId

Now, DiscreteResource/DiscreteResourceId is provided by DiscreteFactory.
Similarly, ContinuousResource/ContinuousResourceId is provided by
ContinuousFactory. These factory instances can be obtained by static
factory method such as Resource.discrete(...) or Resource.continuous(...).

Change-Id: Ic94f7336c0e1f74cf2dddcac899de300362aff3e
Showing 22 changed files with 364 additions and 174 deletions
......@@ -106,7 +106,7 @@ public class AllocationsCommand extends AbstractShellCommand {
// TODO: Current design cannot deal with sub-resources
// (e.g., TX/RX under Port)
Resource resource = Resource.discrete(did, num);
Resource resource = Resource.discrete(did, num).resource();
if (lambda) {
//print("Lambda resources:");
Collection<ResourceAllocation> allocations
......
......@@ -89,11 +89,11 @@ public class ResourcesCommand extends AbstractShellCommand {
DeviceId deviceId = deviceId(deviceIdStr);
PortNumber portNumber = PortNumber.fromString(portNumberStr);
printResource(Resource.discrete(deviceId, portNumber), 0);
printResource(Resource.discrete(deviceId, portNumber).resource(), 0);
} else if (deviceIdStr != null) {
DeviceId deviceId = deviceId(deviceIdStr);
printResource(Resource.discrete(deviceId), 0);
printResource(Resource.discrete(deviceId).resource(), 0);
} else {
printResource(Resource.ROOT, 0);
}
......
......@@ -74,7 +74,7 @@ public class TestAllocateResource extends AbstractShellCommand {
ResourceConsumer consumer = IntentId.valueOf(nIntendId);
Resource resource = discrete(did, portNum,
createLambda(Integer.parseInt(lambda)));
createLambda(Integer.parseInt(lambda))).resource();
Optional<ResourceAllocation> allocate = resourceService.allocate(consumer, resource);
if (allocate.isPresent()) {
......
/*
* Copyright 2016 Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.net.newresource;
import com.google.common.annotations.Beta;
/**
* Factory class for continuous-type resource related instances.
*/
@Beta
public final class ContinuousFactory {
private final ContinuousResourceId id;
/**
* Creates an instance with the specified resource ID.
*
* @param id resource ID that is associated with the resource related instances
* which will be created from this instance
*/
ContinuousFactory(ContinuousResourceId id) {
this.id = id;
}
/**
* Returns the resource ID for continuous-type.
*
* @return continuous-type resource ID
*/
public ContinuousResourceId id() {
return id;
}
/**
* Returns the resource for continuous-type specified by the given value.
*
* @param volume volume of the returned resource
* @return continuous-type resource
*/
public ContinuousResource resource(double volume) {
return new ContinuousResource(id(), volume);
}
}
......@@ -98,7 +98,7 @@ public final class ContinuousResource implements Resource {
@Override
public Optional<DiscreteResource> parent() {
return id.parent().map(DiscreteResource::new);
return id.parent().map(x -> Resource.discrete(x).resource());
}
@Override
......
......@@ -21,8 +21,6 @@ import com.google.common.collect.ImmutableList;
import java.util.Objects;
import java.util.Optional;
import static com.google.common.base.Preconditions.checkNotNull;
/**
* ResourceId for {@link ContinuousResource}
*
......@@ -36,11 +34,6 @@ public final class ContinuousResourceId extends ResourceId {
// for printing purpose only (used in toString() implementation)
private final String name;
ContinuousResourceId(ImmutableList<Object> components, String name) {
this.components = components;
this.name = checkNotNull(name);
}
ContinuousResourceId(ImmutableList.Builder<Object> parentComponents, Class<?> last) {
this.components = parentComponents.add(last.getCanonicalName()).build();
this.name = last.getSimpleName();
......
/*
* Copyright 2016 Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.net.newresource;
import com.google.common.annotations.Beta;
/**
* Factory class for discrete-type resource related instances.
*/
@Beta
public final class DiscreteFactory {
private final DiscreteResourceId id;
/**
* Create an instance with the specified resource ID.
*
* @param id resource ID that is associated with the resource related instances
* which will be created from this instance
*/
DiscreteFactory(DiscreteResourceId id) {
this.id = id;
}
/**
* Returns the resource ID for discrete-type.
*
* @return discrete-type resource ID
*/
public DiscreteResourceId id() {
return id;
}
/**
* Returns the resource for discrete-type.
*
* @return discrete-type resource
*/
public DiscreteResource resource() {
return new DiscreteResource(id);
}
}
......@@ -40,7 +40,7 @@ public final class DiscreteResource implements Resource {
this.id = id;
}
protected DiscreteResource() {
DiscreteResource() {
this.id = ResourceId.ROOT;
}
......@@ -80,17 +80,17 @@ public final class DiscreteResource implements Resource {
public DiscreteResource child(Object child) {
checkArgument(!(child instanceof Class<?>));
return new DiscreteResource(id.child(child));
return Resource.discrete(id.child(child)).resource();
}
@Override
public ContinuousResource child(Class<?> child, double value) {
return new ContinuousResource(id.child(child), value);
return Resource.continuous(id.child(child)).resource(value);
}
@Override
public Optional<DiscreteResource> parent() {
return id.parent().map(DiscreteResource::new);
return id.parent().map(x -> Resource.discrete(x).resource());
}
@Override
......
......@@ -50,17 +50,14 @@ public final class DiscreteResourceId extends ResourceId {
public DiscreteResourceId child(Object child) {
checkArgument(!(child instanceof Class<?>));
return new DiscreteResourceId(ImmutableList.builder()
.addAll(components)
.add(child)
.build());
return Resource.discrete(this, child).id();
}
@Override
public ContinuousResourceId child(Class<?> child) {
checkNotNull(child);
return new ContinuousResourceId(ImmutableList.builder().addAll(components), child);
return Resource.continuous(this, child).id();
}
@Override
......
......@@ -16,14 +16,16 @@
package org.onosproject.net.newresource;
import com.google.common.annotations.Beta;
import com.google.common.collect.ImmutableList;
import org.onosproject.net.DeviceId;
import org.onosproject.net.PortNumber;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
/**
* An object that represent a resource in a network.
......@@ -46,65 +48,6 @@ public interface Resource {
DiscreteResource ROOT = new DiscreteResource();
static DiscreteResource discrete(DeviceId device) {
return new DiscreteResource(ResourceId.discrete(device));
}
/**
* Creates an resource path which represents a discrete-type resource from the specified components.
*
* @param device device ID which is the first component of the path
* @param components following components of the path. The order represents hierarchical structure of the resource.
* @return resource path instance
*/
static DiscreteResource discrete(DeviceId device, Object... components) {
return new DiscreteResource(ResourceId.discrete(device, components));
}
/**
* Creates an resource path which represents a discrete-type resource from the specified components.
*
* @param device device ID which is the first component of the path
* @param port port number which is the second component of the path
* @param components following components of the path. The order represents hierarchical structure of the resource.
* @return resource path instance
*/
static DiscreteResource discrete(DeviceId device, PortNumber port, Object... components) {
return new DiscreteResource(ResourceId.discrete(device, port, components));
}
/**
* Creates an resource path which represents a continuous-type resource from the specified components.
*
* @param value amount of the resource
* @param device device ID which is the first component of the path
* @param components following components of the path. The order represents hierarchical structure of the resource.
* The last element of this list must be an {@link Class} instance. Otherwise, this method throws
* an IllegalArgumentException.
* @return resource path instance
*/
static ContinuousResource continuous(double value, DeviceId device, Object... components) {
checkArgument(components.length > 0,
"Length of components must be greater thant 0, but " + components.length);
return new ContinuousResource(ResourceId.continuous(device, components), value);
}
/**
* Creates an resource path which represents a continuous-type resource from the specified components.
*
* @param value amount of the resource
* @param device device ID which is the first component of the path.
* @param port port number which is the second component of the path.
* @param components following components of the path. The order represents hierarchical structure of the resource.
* The last element of this list must be an {@link Class} instance. Otherwise, this method throws
* an IllegalArgumentException.
* @return resource path instance
*/
static ContinuousResource continuous(double value, DeviceId device, PortNumber port, Object... components) {
return new ContinuousResource(ResourceId.continuous(device, port, components), value);
}
/**
* Returns the components of this resource path.
*
......@@ -163,4 +106,189 @@ public interface Resource {
* @return the ID of this resource path
*/
ResourceId id();
/**
* Create a factory for discrete-type with the specified resource ID.
*
* @param id resource ID
* @return {@link DiscreteFactory}
*/
static DiscreteFactory discrete(DiscreteResourceId id) {
checkNotNull(id);
return new DiscreteFactory(id);
}
/**
* Creates a factory for discrete-type with the specified parent ID and child.
*
* @param parent ID of the parent
* @param child child
* @return {@link DiscreteFactory}
*/
static DiscreteFactory discrete(DiscreteResourceId parent, Object child) {
checkNotNull(parent);
checkNotNull(child);
checkArgument(!(child instanceof Class<?>));
return new DiscreteFactory(new DiscreteResourceId(ImmutableList.builder()
.addAll(parent.components())
.add(child)
.build()));
}
/**
* Create a factory for discrete-type with the specified device ID.
*
* @param device device ID
* @return {@link DiscreteFactory}
*/
static DiscreteFactory discrete(DeviceId device) {
checkNotNull(device);
return new DiscreteFactory(new DiscreteResourceId(ImmutableList.of(device)));
}
/**
* Create a factory for discrete-type with the specified device ID and components.
*
* @param device device ID
* @param components resource ID components other than the device ID
* @return {@link DiscreteFactory}
*/
static DiscreteFactory discrete(DeviceId device, Object... components) {
checkNotNull(device);
checkNotNull(components);
return new DiscreteFactory(new DiscreteResourceId(ImmutableList.builder()
.add(device)
.add(components)
.build()));
}
/**
* Create a factory for discrete-type with the specified device ID, port number and components.
*
* @param device device ID
* @param port port number
* @param components resource ID components other than the device ID and port number
* @return {@link DiscreteFactory}
*/
static DiscreteFactory discrete(DeviceId device, PortNumber port, Object... components) {
checkNotNull(device);
checkNotNull(port);
checkNotNull(components);
return new DiscreteFactory(new DiscreteResourceId(ImmutableList.builder()
.add(device)
.add(port)
.add(components)
.build()));
}
/**
* Create a factory for continuous-type with the specified resource ID.
*
* @param id resource ID
* @return {@link ContinuousFactory}
*/
static ContinuousFactory continuous(ContinuousResourceId id) {
checkNotNull(id);
return new ContinuousFactory(id);
}
/**
* Creates a factory for continuous-type wit the specified parent ID and child.
*
* @param parent ID of the parent
* @param child child
* @return {@link ContinuousFactory}
*/
static ContinuousFactory continuous(DiscreteResourceId parent, Class<?> child) {
checkNotNull(parent);
checkNotNull(child);
return new ContinuousFactory(new ContinuousResourceId(ImmutableList.builder()
.addAll(parent.components()), child));
}
/**
* Create a factory for continuous-type with the specified device ID and type.
*
* @param device device ID
* @param cls type of resource the returned factory will create
* @return {@link ContinuousFactory}
*/
static ContinuousFactory continuous(DeviceId device, Class<?> cls) {
checkNotNull(device);
checkNotNull(cls);
return new ContinuousFactory(new ContinuousResourceId(ImmutableList.builder().add(device), cls));
}
/**
* Create a factory for continuous-type with the specified device ID and components.
* The last element of the components must be a {@link Class} instance. Otherwise,
* an {@link IllegalArgumentException} is thrown.
*
* @param device device ID
* @param components resource ID components other than the device ID.
* @return {@link ContinuousFactory}
*/
static ContinuousFactory continuous(DeviceId device, Object... components) {
checkNotNull(device);
checkNotNull(components);
checkArgument(components.length > 1);
Object last = components[components.length - 1];
checkArgument(last instanceof Class<?>);
return new ContinuousFactory(new ContinuousResourceId(ImmutableList.builder()
.add(device)
.add(Arrays.copyOfRange(components, 0, components.length - 1)), (Class<?>) last));
}
/**
* Create a factory for continuous-type with the specified device ID, port number and type.
*
* @param device device ID
* @param port port number
* @param cls type of resource the returned factory will create
* @return {@link ContinuousFactory}
*/
static ContinuousFactory continuous(DeviceId device, PortNumber port, Class<?> cls) {
checkNotNull(device);
checkNotNull(port);
checkNotNull(cls);
return new ContinuousFactory(new ContinuousResourceId(ImmutableList.builder()
.add(device)
.add(port), cls));
}
/**
* Create a factory for continuous-type with the specified device ID and components.
* The last element of the components must be a {@link Class} instance. Otherwise,
* an {@link IllegalArgumentException} is thrown.
*
* @param device device ID
* @param port port number
* @param components resource ID components other than the device ID and port number.
* @return {@link ContinuousFactory}
*/
static ContinuousFactory continuous(DeviceId device, PortNumber port, Object... components) {
checkNotNull(device);
checkNotNull(port);
checkNotNull(components);
checkArgument(components.length > 1);
Object last = components[components.length - 1];
checkArgument(last instanceof Class<?>);
return new ContinuousFactory(new ContinuousResourceId(ImmutableList.builder()
.add(device)
.add(port)
.add(Arrays.copyOfRange(components, 0, components.length - 1)), (Class<?>) last));
}
}
......
......@@ -16,15 +16,9 @@
package org.onosproject.net.newresource;
import com.google.common.annotations.Beta;
import com.google.common.collect.ImmutableList;
import org.onosproject.net.DeviceId;
import org.onosproject.net.PortNumber;
import java.util.Arrays;
import java.util.Optional;
import static com.google.common.base.Preconditions.checkArgument;
/**
* Represents identifier of resource.
* This class is exposed to public, but intended to use only in ResourceStore implementations.
......@@ -33,40 +27,6 @@ import static com.google.common.base.Preconditions.checkArgument;
public abstract class ResourceId {
static final DiscreteResourceId ROOT = new DiscreteResourceId();
static DiscreteResourceId discrete(DeviceId device, Object... components) {
return new DiscreteResourceId(ImmutableList.builder()
.add(device)
.add(components)
.build());
}
static DiscreteResourceId discrete(DeviceId device, PortNumber port, Object... components) {
return new DiscreteResourceId(ImmutableList.builder()
.add(device)
.add(port)
.add(components)
.build());
}
static ContinuousResourceId continuous(DeviceId device, Object... components) {
Object last = components[components.length - 1];
checkArgument(last instanceof Class<?>);
return new ContinuousResourceId(ImmutableList.builder()
.add(device)
.add(Arrays.copyOfRange(components, 0, components.length - 1)), (Class<?>) last);
}
static ContinuousResourceId continuous(DeviceId device, PortNumber port, Object... components) {
Object last = components[components.length - 1];
checkArgument(last instanceof Class<?>);
return new ContinuousResourceId(ImmutableList.builder()
.add(device)
.add(port)
.add(Arrays.copyOfRange(components, 0, components.length - 1)), (Class<?>) last);
}
/**
* Returns the parent resource ID of this instance.
*
......
......@@ -32,9 +32,9 @@ public class ResourceAllocationTest {
@Test
public void testEquals() {
ResourceAllocation alloc1 = new ResourceAllocation(Resource.discrete(D1, P1, VLAN1), IID1);
ResourceAllocation sameAsAlloc1 = new ResourceAllocation(Resource.discrete(D1, P1, VLAN1), IID1);
ResourceAllocation alloc2 = new ResourceAllocation(Resource.discrete(D2, P1, VLAN1), IID1);
ResourceAllocation alloc1 = new ResourceAllocation(Resource.discrete(D1, P1, VLAN1).resource(), IID1);
ResourceAllocation sameAsAlloc1 = new ResourceAllocation(Resource.discrete(D1, P1, VLAN1).resource(), IID1);
ResourceAllocation alloc2 = new ResourceAllocation(Resource.discrete(D2, P1, VLAN1).resource(), IID1);
new EqualsTester()
.addEqualityGroup(alloc1, sameAsAlloc1)
......
......@@ -32,20 +32,20 @@ public class ResourceIdTest {
@Test
public void testDiscreteToString() {
ResourceId resource = ResourceId.discrete(D1, P1);
ResourceId resource = Resource.discrete(D1, P1).id();
assertThat(resource.toString(), is(Arrays.asList(D1, P1).toString()));
}
@Test
public void testContinuousToString() {
ResourceId resource = ResourceId.continuous(D1, P1, Bandwidth.class);
ResourceId resource = Resource.continuous(D1, P1, Bandwidth.class).id();
assertThat(resource.toString(), is(Arrays.asList(D1, P1, Bandwidth.class.getSimpleName()).toString()));
}
@Test(expected = IllegalArgumentException.class)
public void testInitWithNonClassInstance() {
ResourceId.continuous(D1, P1, BW1);
Resource.continuous(D1, P1, BW1).id();
}
}
......
......@@ -39,11 +39,11 @@ public class ResourceTest {
@Test
public void testEquals() {
Resource resource1 = Resource.discrete(D1, P1, VLAN1);
Resource sameAsResource1 = Resource.discrete(D1, P1, VLAN1);
Resource resource2 = Resource.discrete(D2, P1, VLAN1);
Resource resource3 = Resource.continuous(BW1.bps(), D1, P1, Bandwidth.class);
Resource sameAsResource3 = Resource.continuous(BW1.bps(), D1, P1, Bandwidth.class);
Resource resource1 = Resource.discrete(D1, P1, VLAN1).resource();
Resource sameAsResource1 = Resource.discrete(D1, P1, VLAN1).resource();
Resource resource2 = Resource.discrete(D2, P1, VLAN1).resource();
Resource resource3 = Resource.continuous(D1, P1, Bandwidth.class).resource(BW1.bps());
Resource sameAsResource3 = Resource.continuous(D1, P1, Bandwidth.class).resource(BW1.bps());
new EqualsTester()
.addEqualityGroup(resource1, sameAsResource1)
......@@ -54,7 +54,7 @@ public class ResourceTest {
@Test
public void testComponents() {
Resource port = Resource.discrete(D1, P1);
Resource port = Resource.discrete(D1, P1).resource();
assertThat(port.components(), contains(D1, P1));
}
......@@ -64,9 +64,9 @@ public class ResourceTest {
ResourceId id1 = Resource.discrete(D1, P1, VLAN1).id();
ResourceId sameAsId1 = Resource.discrete(D1, P1, VLAN1).id();
ResourceId id2 = Resource.discrete(D2, P1, VLAN1).id();
ResourceId id3 = Resource.continuous(BW1.bps(), D1, P1, Bandwidth.class).id();
ResourceId id3 = Resource.continuous(D1, P1, Bandwidth.class).resource(BW1.bps()).id();
// intentionally set a different value
ResourceId sameAsId3 = Resource.continuous(BW2.bps(), D1, P1, Bandwidth.class).id();
ResourceId sameAsId3 = Resource.continuous(D1, P1, Bandwidth.class).resource(BW2.bps()).id();
new EqualsTester()
.addEqualityGroup(id1, sameAsId1)
......@@ -76,30 +76,30 @@ public class ResourceTest {
@Test
public void testChild() {
Resource r1 = Resource.discrete(D1).child(P1);
Resource sameAsR2 = Resource.discrete(D1, P1);
Resource r1 = Resource.discrete(D1).resource().child(P1);
Resource sameAsR2 = Resource.discrete(D1, P1).resource();
assertThat(r1, is(sameAsR2));
}
@Test
public void testThereIsParent() {
Resource resource = Resource.discrete(D1, P1, VLAN1);
Resource parent = Resource.discrete(D1, P1);
Resource resource = Resource.discrete(D1, P1, VLAN1).resource();
Resource parent = Resource.discrete(D1, P1).resource();
assertThat(resource.parent(), is(Optional.of(parent)));
}
@Test
public void testNoParent() {
Resource resource = Resource.discrete(D1);
Resource resource = Resource.discrete(D1).resource();
assertThat(resource.parent(), is(Optional.of(Resource.ROOT)));
}
@Test
public void testBase() {
Resource resource = Resource.discrete(D1);
Resource resource = Resource.discrete(D1).resource();
DeviceId child = (DeviceId) resource.last();
assertThat(child, is(D1));
......@@ -107,7 +107,7 @@ public class ResourceTest {
@Test
public void testVolumeOfDiscrete() {
Resource resource = Resource.discrete(D1);
Resource resource = Resource.discrete(D1).resource();
DeviceId volume = resource.volume();
assertThat(volume, is(D1));
......@@ -115,7 +115,7 @@ public class ResourceTest {
@Test
public void testVolumeOfContinuous() {
Resource resource = Resource.continuous(BW1.bps(), D1, P1, Bandwidth.class);
Resource resource = Resource.continuous(D1, P1, Bandwidth.class).resource(BW1.bps());
double volume = resource.volume();
assertThat(volume, is(BW1.bps()));
......
......@@ -125,8 +125,10 @@ public class MplsPathIntentCompiler implements IntentCompiler<MplsPathIntent> {
// TODO: introduce the concept of Tx and Rx resources of a port
Set<Resource> resources = labels.entrySet().stream()
.flatMap(x -> Stream.of(
Resource.discrete(x.getKey().src().deviceId(), x.getKey().src().port(), x.getValue()),
Resource.discrete(x.getKey().src().deviceId(), x.getKey().src().port(), x.getValue())
.resource(),
Resource.discrete(x.getKey().dst().deviceId(), x.getKey().dst().port(), x.getValue())
.resource()
))
.collect(Collectors.toSet());
List<org.onosproject.net.newresource.ResourceAllocation> allocations =
......@@ -154,7 +156,7 @@ public class MplsPathIntentCompiler implements IntentCompiler<MplsPathIntent> {
}
private Set<MplsLabel> findMplsLabel(ConnectPoint cp) {
return resourceService.getAvailableResources(Resource.discrete(cp.deviceId(), cp.port())).stream()
return resourceService.getAvailableResources(Resource.discrete(cp.deviceId(), cp.port()).resource()).stream()
.filter(x -> x.last() instanceof MplsLabel)
.map(x -> (MplsLabel) x.last())
.collect(Collectors.toSet());
......
......@@ -160,8 +160,8 @@ public class OpticalCircuitIntentCompiler implements IntentCompiler<OpticalCircu
log.debug("Compiling optical circuit intent between {} and {}", src, dst);
// Reserve OduClt ports
Resource srcPortResource = Resource.discrete(src.deviceId(), src.port());
Resource dstPortResource = Resource.discrete(dst.deviceId(), dst.port());
Resource srcPortResource = Resource.discrete(src.deviceId(), src.port()).resource();
Resource dstPortResource = Resource.discrete(dst.deviceId(), dst.port()).resource();
List<ResourceAllocation> allocation = resourceService.allocate(intent.id(), srcPortResource, dstPortResource);
if (allocation.isEmpty()) {
throw new IntentCompilationException("Unable to reserve ports for intent " + intent);
......@@ -312,7 +312,7 @@ public class OpticalCircuitIntentCompiler implements IntentCompiler<OpticalCircu
if (ochCP != null) {
OchPort ochPort = (OchPort) deviceService.getPort(ochCP.deviceId(), ochCP.port());
Optional<IntentId> intentId =
resourceService.getResourceAllocations(Resource.discrete(ochCP.deviceId(), ochCP.port()))
resourceService.getResourceAllocations(Resource.discrete(ochCP.deviceId(), ochCP.port()).resource())
.stream()
.map(ResourceAllocation::consumer)
.filter(x -> x instanceof IntentId)
......@@ -333,7 +333,8 @@ public class OpticalCircuitIntentCompiler implements IntentCompiler<OpticalCircu
}
Optional<IntentId> intentId =
resourceService.getResourceAllocations(Resource.discrete(oduPort.deviceId(), port.number()))
resourceService.getResourceAllocations(
Resource.discrete(oduPort.deviceId(), port.number()).resource())
.stream()
.map(ResourceAllocation::consumer)
.filter(x -> x instanceof IntentId)
......
......@@ -109,8 +109,8 @@ public class OpticalConnectivityIntentCompiler implements IntentCompiler<Optical
log.debug("Compiling optical connectivity intent between {} and {}", src, dst);
// Reserve OCh ports
Resource srcPortResource = Resource.discrete(src.deviceId(), src.port());
Resource dstPortResource = Resource.discrete(dst.deviceId(), dst.port());
Resource srcPortResource = Resource.discrete(src.deviceId(), src.port()).resource();
Resource dstPortResource = Resource.discrete(dst.deviceId(), dst.port()).resource();
List<org.onosproject.net.newresource.ResourceAllocation> allocation =
resourceService.allocate(intent.id(), srcPortResource, dstPortResource);
if (allocation.isEmpty()) {
......@@ -184,8 +184,8 @@ public class OpticalConnectivityIntentCompiler implements IntentCompiler<Optical
List<OchSignal> minLambda = findFirstLambda(lambdas, slotCount());
List<Resource> lambdaResources = path.links().stream()
.flatMap(x -> Stream.of(
Resource.discrete(x.src().deviceId(), x.src().port()),
Resource.discrete(x.dst().deviceId(), x.dst().port())
Resource.discrete(x.src().deviceId(), x.src().port()).resource(),
Resource.discrete(x.dst().deviceId(), x.dst().port()).resource()
))
.flatMap(x -> minLambda.stream().map(l -> x.child(l)))
.collect(Collectors.toList());
......@@ -214,8 +214,8 @@ public class OpticalConnectivityIntentCompiler implements IntentCompiler<Optical
private Set<OchSignal> findCommonLambdasOverLinks(List<Link> links) {
return links.stream()
.flatMap(x -> Stream.of(
Resource.discrete(x.src().deviceId(), x.src().port()),
Resource.discrete(x.dst().deviceId(), x.dst().port())
Resource.discrete(x.src().deviceId(), x.src().port()).resource(),
Resource.discrete(x.dst().deviceId(), x.dst().port()).resource()
))
.map(resourceService::getAvailableResources)
.map(x -> Iterables.filter(x, r -> r.last() instanceof OchSignal))
......
......@@ -252,8 +252,10 @@ public class PathIntentCompiler implements IntentCompiler<PathIntent> {
//same VLANID is used for both directions
Set<Resource> resources = vlanIds.entrySet().stream()
.flatMap(x -> Stream.of(
Resource.discrete(x.getKey().src().deviceId(), x.getKey().src().port(), x.getValue()),
Resource.discrete(x.getKey().src().deviceId(), x.getKey().src().port(), x.getValue())
.resource(),
Resource.discrete(x.getKey().dst().deviceId(), x.getKey().dst().port(), x.getValue())
.resource()
))
.collect(Collectors.toSet());
List<org.onosproject.net.newresource.ResourceAllocation> allocations =
......@@ -280,7 +282,7 @@ public class PathIntentCompiler implements IntentCompiler<PathIntent> {
}
private Set<VlanId> findVlanId(ConnectPoint cp) {
return resourceService.getAvailableResources(Resource.discrete(cp.deviceId(), cp.port())).stream()
return resourceService.getAvailableResources(Resource.discrete(cp.deviceId(), cp.port()).resource()).stream()
.filter(x -> x.last() instanceof VlanId)
.map(x -> (VlanId) x.last())
.collect(Collectors.toSet());
......
......@@ -118,15 +118,15 @@ final class ResourceDeviceListener implements DeviceListener {
}
private void registerDeviceResource(Device device) {
executor.submit(() -> adminService.registerResources(Resource.discrete(device.id())));
executor.submit(() -> adminService.registerResources(Resource.discrete(device.id()).resource()));
}
private void unregisterDeviceResource(Device device) {
executor.submit(() -> adminService.unregisterResources(Resource.discrete(device.id())));
executor.submit(() -> adminService.unregisterResources(Resource.discrete(device.id()).resource()));
}
private void registerPortResource(Device device, Port port) {
Resource portPath = Resource.discrete(device.id(), port.number());
Resource portPath = Resource.discrete(device.id(), port.number()).resource();
executor.submit(() -> {
adminService.registerResources(portPath);
......@@ -174,7 +174,7 @@ final class ResourceDeviceListener implements DeviceListener {
}
private void unregisterPortResource(Device device, Port port) {
Resource resource = Resource.discrete(device.id(), port.number());
Resource resource = Resource.discrete(device.id(), port.number()).resource();
executor.submit(() -> adminService.unregisterResources(resource));
}
......
......@@ -93,9 +93,9 @@ final class ResourceNetworkConfigListener implements NetworkConfigListener {
switch (event.type()) {
case CONFIG_ADDED:
if (!adminService.registerResources(continuous(bwCapacity.capacity().bps(),
cp.deviceId(),
cp.port(), Bandwidth.class))) {
if (!adminService.registerResources(continuous(cp.deviceId(),
cp.port(), Bandwidth.class)
.resource(bwCapacity.capacity().bps()))) {
log.info("Failed to register Bandwidth for {}, attempting update", cp);
// Bandwidth based on port speed, was probably already registered.
......@@ -115,10 +115,9 @@ final class ResourceNetworkConfigListener implements NetworkConfigListener {
case CONFIG_REMOVED:
// FIXME Following should be an update to the value based on port speed
if (!adminService.unregisterResources(continuous(0,
cp.deviceId(),
if (!adminService.unregisterResources(continuous(cp.deviceId(),
cp.port(),
Bandwidth.class))) {
Bandwidth.class).resource(0))) {
log.warn("Failed to unregister Bandwidth for {}", cp);
}
break;
......@@ -148,13 +147,12 @@ final class ResourceNetworkConfigListener implements NetworkConfigListener {
// but both unregisterResources(..) and registerResources(..)
// returns true (success)
if (!adminService.unregisterResources(continuous(0, cp.deviceId(), cp.port(), Bandwidth.class))) {
if (!adminService.unregisterResources(continuous(cp.deviceId(), cp.port(), Bandwidth.class).resource(0))) {
log.warn("unregisterResources for {} failed", cp);
}
return adminService.registerResources(continuous(bwCapacity.capacity().bps(),
cp.deviceId(),
return adminService.registerResources(continuous(cp.deviceId(),
cp.port(),
Bandwidth.class));
Bandwidth.class).resource(bwCapacity.capacity().bps()));
}
}
......
......@@ -232,7 +232,7 @@ public class ObjectiveTrackerTest {
@Test
public void testResourceEvent() throws Exception {
ResourceEvent event = new ResourceEvent(RESOURCE_ADDED,
Resource.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(1)));
Resource.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(1)).resource());
resourceListener.event(event);
assertThat(
......
......@@ -388,7 +388,7 @@ public class KryoSerializerTest {
@Test
public void testResource() {
testSerializedEquals(Resource.discrete(DID1, P1, VLAN1));
testSerializedEquals(Resource.discrete(DID1, P1, VLAN1).resource());
}
@Test
......@@ -399,7 +399,7 @@ public class KryoSerializerTest {
@Test
public void testResourceAllocation() {
testSerializedEquals(new org.onosproject.net.newresource.ResourceAllocation(
Resource.discrete(DID1, P1, VLAN1),
Resource.discrete(DID1, P1, VLAN1).resource(),
IntentId.valueOf(30)));
}
......