Ray Milkey
Committed by Gerrit Code Review

Implement builders for optical intents

Change-Id: Ide728a943eb0ec3d3ba995f63c016e7d52bff65c
......@@ -286,12 +286,16 @@ public class OpticalPathProvisioner {
break;
}
Intent opticalIntent = new OpticalConnectivityIntent(appId,
srcWdmPoint,
dstWdmPoint);
Intent opticalIntent2 = new OpticalConnectivityIntent(appId,
dstWdmPoint,
srcWdmPoint);
Intent opticalIntent = OpticalConnectivityIntent.builder()
.appId(appId)
.src(srcWdmPoint)
.dst(dstWdmPoint)
.build();
Intent opticalIntent2 = OpticalConnectivityIntent.builder()
.appId(appId)
.src(dstWdmPoint)
.dst(srcWdmPoint)
.build();
log.info("Creating optical intent from {} to {}", srcWdmPoint, dstWdmPoint);
log.info("Creating optical intent from {} to {}", dstWdmPoint, srcWdmPoint);
connectionList.add(opticalIntent);
......
......@@ -56,7 +56,12 @@ public class AddOpticalIntentCommand extends ConnectivityIntentCommand {
PortNumber egressPortNumber = portNumber(getPortNumber(egressDeviceString));
ConnectPoint egress = new ConnectPoint(egressDeviceId, egressPortNumber);
Intent intent = new OpticalConnectivityIntent(appId(), key(), ingress, egress);
Intent intent = OpticalConnectivityIntent.builder()
.appId(appId())
.key(key())
.src(ingress)
.dst(egress)
.build();
service.submit(intent);
print("Optical intent submitted:\n%s", intent.toString());
}
......
......@@ -15,10 +15,12 @@
*/
package org.onosproject.net.intent;
import java.util.Collections;
import org.onosproject.core.ApplicationId;
import org.onosproject.net.ConnectPoint;
import java.util.Collections;
import static com.google.common.base.Preconditions.checkNotNull;
/**
* An optical layer intent for connectivity from one transponder port to another
......@@ -33,34 +35,92 @@ public final class OpticalConnectivityIntent extends Intent {
* connection points.
*
* @param appId application identification
* @param key intent key
* @param src the source transponder port
* @param dst the destination transponder port
*/
public OpticalConnectivityIntent(ApplicationId appId,
ConnectPoint src, ConnectPoint dst) {
this(appId, null, src, dst);
protected OpticalConnectivityIntent(ApplicationId appId,
Key key,
ConnectPoint src,
ConnectPoint dst,
int priority) {
super(appId, key, Collections.emptyList(), priority);
this.src = checkNotNull(src);
this.dst = checkNotNull(dst);
}
/**
* Creates an optical connectivity intent between the specified
* connection points.
* Returns a new optical connectivity intent builder.
*
* @param appId application identification
* @param key intent key
* @param src the source transponder port
* @param dst the destination transponder port
* @return host to host intent builder
*/
public OpticalConnectivityIntent(ApplicationId appId,
Key key,
ConnectPoint src, ConnectPoint dst) {
super(appId, key, Collections.emptyList(), DEFAULT_INTENT_PRIORITY);
this.src = src;
this.dst = dst;
public static Builder builder() {
return new Builder();
}
/**
* Builder for optical connectivity intents.
*/
public static class Builder extends Intent.Builder {
private ConnectPoint src;
private ConnectPoint dst;
@Override
public Builder appId(ApplicationId appId) {
return (Builder) super.appId(appId);
}
@Override
public Builder key(Key key) {
return (Builder) super.key(key);
}
@Override
public Builder priority(int priority) {
return (Builder) super.priority(priority);
}
/**
* Sets the source for the intent that will be built.
*
* @param src source to use for built intent
* @return this builder
*/
public Builder src(ConnectPoint src) {
this.src = src;
return this;
}
/**
* Sets the destination for the intent that will be built.
*
* @param dst dest to use for built intent
* @return this builder
*/
public Builder dst(ConnectPoint dst) {
this.dst = dst;
return this;
}
/**
* Builds an optical connectivity intent from the accumulated parameters.
*
* @return point to point intent
*/
public OpticalConnectivityIntent build() {
return new OpticalConnectivityIntent(
appId,
key,
src,
dst,
priority
);
}
}
/**
* Constructor for serializer.
*/
protected OpticalConnectivityIntent() {
......
......@@ -15,14 +15,15 @@
*/
package org.onosproject.net.intent;
import com.google.common.base.MoreObjects;
import com.google.common.collect.ImmutableSet;
import java.util.Collection;
import org.onosproject.core.ApplicationId;
import org.onosproject.net.ConnectPoint;
import org.onosproject.net.Link;
import org.onosproject.net.Path;
import java.util.Collection;
import com.google.common.base.MoreObjects;
import com.google.common.collect.ImmutableSet;
import static com.google.common.base.Preconditions.checkNotNull;
......@@ -33,12 +34,16 @@ public final class OpticalPathIntent extends Intent {
private final Path path;
public OpticalPathIntent(ApplicationId appId,
ConnectPoint src,
ConnectPoint dst,
Path path) {
super(appId, null, ImmutableSet.copyOf(path.links()),
Intent.DEFAULT_INTENT_PRIORITY);
private OpticalPathIntent(ApplicationId appId,
Key key,
ConnectPoint src,
ConnectPoint dst,
Path path,
int priority) {
super(appId,
key,
ImmutableSet.copyOf(path.links()),
priority);
this.src = checkNotNull(src);
this.dst = checkNotNull(dst);
this.path = checkNotNull(path);
......@@ -50,6 +55,92 @@ public final class OpticalPathIntent extends Intent {
this.path = null;
}
/**
* Returns a new optical connectivity intent builder.
*
* @return host to host intent builder
*/
public static Builder builder() {
return new Builder();
}
/**
* Builder for optical path intents.
*/
public static class Builder extends Intent.Builder {
private ConnectPoint src;
private ConnectPoint dst;
private Path path;
Key key;
@Override
public Builder appId(ApplicationId appId) {
return (Builder) super.appId(appId);
}
@Override
public Builder key(Key key) {
return (Builder) super.key(key);
}
@Override
public Builder priority(int priority) {
return (Builder) super.priority(priority);
}
/**
* Sets the source for the intent that will be built.
*
* @param src source to use for built intent
* @return this builder
*/
public Builder src(ConnectPoint src) {
this.src = src;
return this;
}
/**
* Sets the destination for the intent that will be built.
*
* @param dst dest to use for built intent
* @return this builder
*/
public Builder dst(ConnectPoint dst) {
this.dst = dst;
return this;
}
/**
* Sets the path for the intent that will be built.
*
* @param path path to use for built intent
* @return this builder
*/
public Builder path(Path path) {
this.path = path;
return this;
}
/**
* Builds an optical path intent from the accumulated parameters.
*
* @return optical path intent
*/
public OpticalPathIntent build() {
return new OpticalPathIntent(
appId,
key,
src,
dst,
path,
priority
);
}
}
public ConnectPoint src() {
return src;
}
......
......@@ -15,7 +15,9 @@
*/
package org.onosproject.net.intent.impl.compiler;
import com.google.common.collect.ImmutableList;
import java.util.List;
import java.util.Set;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
......@@ -36,8 +38,7 @@ import org.onosproject.net.topology.Topology;
import org.onosproject.net.topology.TopologyEdge;
import org.onosproject.net.topology.TopologyService;
import java.util.List;
import java.util.Set;
import com.google.common.collect.ImmutableList;
/**
* An intent compiler for {@link org.onosproject.net.intent.OpticalConnectivityIntent}.
......@@ -67,10 +68,12 @@ public class OpticalConnectivityIntentCompiler implements IntentCompiler<Optical
Set<LinkResourceAllocations> resources) {
// TODO: compute multiple paths using the K-shortest path algorithm
Path path = calculateOpticalPath(intent.getSrc(), intent.getDst());
Intent newIntent = new OpticalPathIntent(intent.appId(),
intent.getSrc(),
intent.getDst(),
path);
Intent newIntent = OpticalPathIntent.builder()
.appId(intent.appId())
.src(intent.getSrc())
.dst(intent.getDst())
.path(path)
.build();
return ImmutableList.of(newIntent);
}
......
......@@ -57,10 +57,11 @@ public class OpticalPathIntentInstallerTest extends IntentInstallerTest {
new IntentInstallerTest.MockIntentManager(OpticalPathIntent.class);
installer.resourceService = new IntentTestsMocks.MockResourceService();
intent = new OpticalPathIntent(APP_ID,
d1p1,
d3p1,
new DefaultPath(PID, links, hops));
intent = OpticalPathIntent.builder().appId(APP_ID)
.src(d1p1)
.dst(d3p1)
.path(new DefaultPath(PID, links, hops))
.build();
}
/**
......