Committed by
Gerrit Code Review
ONOS-1597 - add an optional appId to CLI commands that create intents
Change-Id: Iaf14f1a98f617eb025dab1b16542d68184082ceb
Showing
3 changed files
with
87 additions
and
0 deletions
| 1 | +/* | ||
| 2 | + * Copyright 2015 Open Networking Laboratory | ||
| 3 | + * | ||
| 4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| 5 | + * you may not use this file except in compliance with the License. | ||
| 6 | + * You may obtain a copy of the License at | ||
| 7 | + * | ||
| 8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
| 9 | + * | ||
| 10 | + * Unless required by applicable law or agreed to in writing, software | ||
| 11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
| 12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| 13 | + * See the License for the specific language governing permissions and | ||
| 14 | + * limitations under the License. | ||
| 15 | + */ | ||
| 16 | +package org.onosproject.cli.app; | ||
| 17 | + | ||
| 18 | +import java.util.Iterator; | ||
| 19 | +import java.util.List; | ||
| 20 | +import java.util.Spliterator; | ||
| 21 | +import java.util.Spliterators; | ||
| 22 | +import java.util.stream.StreamSupport; | ||
| 23 | + | ||
| 24 | +import org.onosproject.app.ApplicationService; | ||
| 25 | +import org.onosproject.cli.AbstractChoicesCompleter; | ||
| 26 | +import org.onosproject.core.Application; | ||
| 27 | + | ||
| 28 | +import static java.util.stream.Collectors.toList; | ||
| 29 | +import static org.onosproject.app.ApplicationState.INSTALLED; | ||
| 30 | +import static org.onosproject.cli.AbstractShellCommand.get; | ||
| 31 | + | ||
| 32 | +/** | ||
| 33 | + * All installed application name completer. | ||
| 34 | + */ | ||
| 35 | +public class AllApplicationNamesCompleter extends AbstractChoicesCompleter { | ||
| 36 | + @Override | ||
| 37 | + public List<String> choices() { | ||
| 38 | + | ||
| 39 | + // Fetch the service and return the list of app names | ||
| 40 | + ApplicationService service = get(ApplicationService.class); | ||
| 41 | + Iterator<Application> it = service.getApplications().iterator(); | ||
| 42 | + | ||
| 43 | + // Filter the list of apps, selecting only the installed ones. | ||
| 44 | + // Add each app name to the list of choices. | ||
| 45 | + return | ||
| 46 | + StreamSupport.stream( | ||
| 47 | + Spliterators.spliteratorUnknownSize(it, Spliterator.ORDERED), false) | ||
| 48 | + .filter(app -> service.getState(app.id()) == INSTALLED) | ||
| 49 | + .map(app -> app.id().name()) | ||
| 50 | + .collect(toList()); | ||
| 51 | + | ||
| 52 | + } | ||
| 53 | + | ||
| 54 | +} |
| ... | @@ -23,6 +23,8 @@ import java.util.List; | ... | @@ -23,6 +23,8 @@ import java.util.List; |
| 23 | 23 | ||
| 24 | import org.apache.karaf.shell.commands.Option; | 24 | import org.apache.karaf.shell.commands.Option; |
| 25 | import org.onosproject.cli.AbstractShellCommand; | 25 | import org.onosproject.cli.AbstractShellCommand; |
| 26 | +import org.onosproject.core.ApplicationId; | ||
| 27 | +import org.onosproject.core.CoreService; | ||
| 26 | import org.onosproject.net.Link; | 28 | import org.onosproject.net.Link; |
| 27 | import org.onosproject.net.flow.DefaultTrafficSelector; | 29 | import org.onosproject.net.flow.DefaultTrafficSelector; |
| 28 | import org.onosproject.net.flow.DefaultTrafficTreatment; | 30 | import org.onosproject.net.flow.DefaultTrafficTreatment; |
| ... | @@ -84,6 +86,10 @@ public abstract class ConnectivityIntentCommand extends AbstractShellCommand { | ... | @@ -84,6 +86,10 @@ public abstract class ConnectivityIntentCommand extends AbstractShellCommand { |
| 84 | required = false, multiValued = false) | 86 | required = false, multiValued = false) |
| 85 | private boolean lambda = false; | 87 | private boolean lambda = false; |
| 86 | 88 | ||
| 89 | + @Option(name = "-a", aliases = "--appId", description = "Application Id", | ||
| 90 | + required = false, multiValued = false) | ||
| 91 | + private String appId = null; | ||
| 92 | + | ||
| 87 | @Option(name = "-k", aliases = "--key", description = "Intent Key", | 93 | @Option(name = "-k", aliases = "--key", description = "Intent Key", |
| 88 | required = false, multiValued = false) | 94 | required = false, multiValued = false) |
| 89 | private String intentKey = null; | 95 | private String intentKey = null; |
| ... | @@ -229,6 +235,18 @@ public abstract class ConnectivityIntentCommand extends AbstractShellCommand { | ... | @@ -229,6 +235,18 @@ public abstract class ConnectivityIntentCommand extends AbstractShellCommand { |
| 229 | return constraints; | 235 | return constraints; |
| 230 | } | 236 | } |
| 231 | 237 | ||
| 238 | + @Override | ||
| 239 | + protected ApplicationId appId() { | ||
| 240 | + ApplicationId appIdForIntent; | ||
| 241 | + if (appId == null) { | ||
| 242 | + appIdForIntent = super.appId(); | ||
| 243 | + } else { | ||
| 244 | + CoreService service = get(CoreService.class); | ||
| 245 | + appIdForIntent = service.getAppId(appId); | ||
| 246 | + } | ||
| 247 | + return appIdForIntent; | ||
| 248 | + } | ||
| 249 | + | ||
| 232 | /** | 250 | /** |
| 233 | * Creates a key for an intent based on command line arguments. If a key | 251 | * Creates a key for an intent based on command line arguments. If a key |
| 234 | * has been specified, it is returned. If no key is specified, null | 252 | * has been specified, it is returned. If no key is specified, null |
| ... | @@ -238,6 +256,8 @@ public abstract class ConnectivityIntentCommand extends AbstractShellCommand { | ... | @@ -238,6 +256,8 @@ public abstract class ConnectivityIntentCommand extends AbstractShellCommand { |
| 238 | */ | 256 | */ |
| 239 | protected Key key() { | 257 | protected Key key() { |
| 240 | Key key = null; | 258 | Key key = null; |
| 259 | + ApplicationId appIdForIntent; | ||
| 260 | + | ||
| 241 | if (intentKey != null) { | 261 | if (intentKey != null) { |
| 242 | key = Key.of(intentKey, appId()); | 262 | key = Key.of(intentKey, appId()); |
| 243 | } | 263 | } | ... | ... |
| ... | @@ -151,6 +151,9 @@ | ... | @@ -151,6 +151,9 @@ |
| 151 | <ref component-id="hostIdCompleter"/> | 151 | <ref component-id="hostIdCompleter"/> |
| 152 | <null/> | 152 | <null/> |
| 153 | </completers> | 153 | </completers> |
| 154 | + <optional-completers> | ||
| 155 | + <entry key="-a" value-ref="allAppNameCompleter"/> | ||
| 156 | + </optional-completers> | ||
| 154 | </command> | 157 | </command> |
| 155 | <command> | 158 | <command> |
| 156 | <action class="org.onosproject.cli.net.AddPointToPointIntentCommand"/> | 159 | <action class="org.onosproject.cli.net.AddPointToPointIntentCommand"/> |
| ... | @@ -162,6 +165,7 @@ | ... | @@ -162,6 +165,7 @@ |
| 162 | <optional-completers> | 165 | <optional-completers> |
| 163 | <entry key="-t" value-ref="ethTypeCompleter"/> | 166 | <entry key="-t" value-ref="ethTypeCompleter"/> |
| 164 | <entry key="--ipProto" value-ref="ipProtocolCompleter"/> | 167 | <entry key="--ipProto" value-ref="ipProtocolCompleter"/> |
| 168 | + <entry key="-a" value-ref="allAppNameCompleter"/> | ||
| 165 | </optional-completers> | 169 | </optional-completers> |
| 166 | </command> | 170 | </command> |
| 167 | <command> | 171 | <command> |
| ... | @@ -171,6 +175,9 @@ | ... | @@ -171,6 +175,9 @@ |
| 171 | <ref component-id="connectPointCompleter"/> | 175 | <ref component-id="connectPointCompleter"/> |
| 172 | <null/> | 176 | <null/> |
| 173 | </completers> | 177 | </completers> |
| 178 | + <optional-completers> | ||
| 179 | + <entry key="-a" value-ref="allAppNameCompleter"/> | ||
| 180 | + </optional-completers> | ||
| 174 | </command> | 181 | </command> |
| 175 | <command> | 182 | <command> |
| 176 | <action class="org.onosproject.cli.net.GetStatistics"/> | 183 | <action class="org.onosproject.cli.net.GetStatistics"/> |
| ... | @@ -186,6 +193,7 @@ | ... | @@ -186,6 +193,7 @@ |
| 186 | <optional-completers> | 193 | <optional-completers> |
| 187 | <entry key="-t" value-ref="ethTypeCompleter"/> | 194 | <entry key="-t" value-ref="ethTypeCompleter"/> |
| 188 | <entry key="--ipProto" value-ref="ipProtocolCompleter"/> | 195 | <entry key="--ipProto" value-ref="ipProtocolCompleter"/> |
| 196 | + <entry key="-a" value-ref="allAppNameCompleter"/> | ||
| 189 | </optional-completers> | 197 | </optional-completers> |
| 190 | </command> | 198 | </command> |
| 191 | <command> | 199 | <command> |
| ... | @@ -196,6 +204,7 @@ | ... | @@ -196,6 +204,7 @@ |
| 196 | <optional-completers> | 204 | <optional-completers> |
| 197 | <entry key="-t" value-ref="ethTypeCompleter"/> | 205 | <entry key="-t" value-ref="ethTypeCompleter"/> |
| 198 | <entry key="--ipProto" value-ref="ipProtocolCompleter"/> | 206 | <entry key="--ipProto" value-ref="ipProtocolCompleter"/> |
| 207 | + <entry key="-a" value-ref="allAppNameCompleter"/> | ||
| 199 | </optional-completers> | 208 | </optional-completers> |
| 200 | </command> | 209 | </command> |
| 201 | <command> | 210 | <command> |
| ... | @@ -317,11 +326,15 @@ | ... | @@ -317,11 +326,15 @@ |
| 317 | <ref component-id="connectPointCompleter"/> | 326 | <ref component-id="connectPointCompleter"/> |
| 318 | <null/> | 327 | <null/> |
| 319 | </completers> | 328 | </completers> |
| 329 | + <optional-completers> | ||
| 330 | + <entry key="-a" value-ref="allAppNameCompleter"/> | ||
| 331 | + </optional-completers> | ||
| 320 | </command> | 332 | </command> |
| 321 | </command-bundle> | 333 | </command-bundle> |
| 322 | 334 | ||
| 323 | <bean id="appCommandCompleter" class="org.onosproject.cli.app.ApplicationCommandCompleter"/> | 335 | <bean id="appCommandCompleter" class="org.onosproject.cli.app.ApplicationCommandCompleter"/> |
| 324 | <bean id="appNameCompleter" class="org.onosproject.cli.app.ApplicationNameCompleter"/> | 336 | <bean id="appNameCompleter" class="org.onosproject.cli.app.ApplicationNameCompleter"/> |
| 337 | + <bean id="allAppNameCompleter" class="org.onosproject.cli.app.AllApplicationNamesCompleter"/> | ||
| 325 | <bean id="appIdWithIntentNameCompleter" class="org.onosproject.cli.app.ApplicationIdWithIntentNameCompleter"/> | 338 | <bean id="appIdWithIntentNameCompleter" class="org.onosproject.cli.app.ApplicationIdWithIntentNameCompleter"/> |
| 326 | <bean id="cfgCommandCompleter" class="org.onosproject.cli.cfg.ComponentConfigCommandCompleter"/> | 339 | <bean id="cfgCommandCompleter" class="org.onosproject.cli.cfg.ComponentConfigCommandCompleter"/> |
| 327 | <bean id="componentNameCompleter" class="org.onosproject.cli.cfg.ComponentNameCompleter"/> | 340 | <bean id="componentNameCompleter" class="org.onosproject.cli.cfg.ComponentNameCompleter"/> | ... | ... |
-
Please register or login to post a comment