Use Stream API instead of for loop
Change-Id: Ic5ce334a6d3891d2d43d1e5bb573e59efd0a9461
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/OpticalConnectivityIntentCompiler.java b/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/OpticalConnectivityIntentCompiler.java
index 4b7b1db..a1c4d10 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/OpticalConnectivityIntentCompiler.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/OpticalConnectivityIntentCompiler.java
@@ -17,6 +17,7 @@
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
@@ -56,6 +57,8 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import java.util.Map;
+import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -158,27 +161,25 @@
return ImmutableList.of(createIntent(intent, firstPath, lambda));
}
- // Use first path that can be successfully reserved
- for (Path path : paths) {
- // find common lambda on path
- // a list of OchSignal indicates consecutive OchSignals
- List<OchSignal> lambda = findFirstAvailableOch(path);
- if (lambda.isEmpty()) {
- continue;
- }
- List<Resource> lambdaResources = convertToResources(path.links(), lambda);
- if (!lambdaResources.stream().allMatch(resourceService::isAvailable)) {
- continue;
- }
- resources.addAll(lambdaResources);
+ // remaining cases
+ // Use first path that the required resources are available
+ Optional<Map.Entry<Path, List<OchSignal>>> found = paths.stream()
+ .map(path -> Maps.immutableEntry(path, findFirstAvailableOch(path)))
+ .filter(entry -> !entry.getValue().isEmpty())
+ .filter(entry -> convertToResources(entry.getKey().links(),
+ entry.getValue()).stream().allMatch(resourceService::isAvailable))
+ .findFirst();
+
+ if (found.isPresent()) {
+ resources.addAll(convertToResources(found.get().getKey().links(), found.get().getValue()));
allocateResources(intent, resources);
- OchSignal ochSignal = OchSignal.toFixedGrid(lambda, ChannelSpacing.CHL_50GHZ);
- return ImmutableList.of(createIntent(intent, path, ochSignal));
+ OchSignal ochSignal = OchSignal.toFixedGrid(found.get().getValue(), ChannelSpacing.CHL_50GHZ);
+ return ImmutableList.of(createIntent(intent, found.get().getKey(), ochSignal));
+ } else {
+ throw new IntentCompilationException("Unable to find suitable lightpath for intent " + intent);
}
-
- throw new IntentCompilationException("Unable to find suitable lightpath for intent " + intent);
}
private Intent createIntent(OpticalConnectivityIntent parentIntent, Path path, OchSignal lambda) {