blob: 337cd1c738d876359b7c08f4315a044bbc3f1bae [file] [log] [blame]
Jian Lifdbc0fc2016-02-12 12:58:48 -08001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2016-present Open Networking Foundation
Jian Lifdbc0fc2016-02-12 12:58:48 -08003 *
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 */
16package org.onosproject.cpman.cli;
17
18import com.google.common.collect.ImmutableSet;
19import com.google.common.collect.Sets;
Ray Milkey86ad7bb2018-09-27 12:32:28 -070020import org.apache.karaf.shell.api.action.lifecycle.Service;
21import org.apache.karaf.shell.api.console.CommandLine;
22import org.apache.karaf.shell.api.console.Session;
23import org.apache.karaf.shell.support.completers.StringsCompleter;
Jian Lifdbc0fc2016-02-12 12:58:48 -080024import org.onosproject.cli.AbstractCompleter;
25import org.onosproject.cli.AbstractShellCommand;
Jian Li89eeccd2016-05-06 02:10:33 -070026import org.onosproject.cluster.NodeId;
Jian Lifdbc0fc2016-02-12 12:58:48 -080027import org.onosproject.cpman.ControlPlaneMonitorService;
28import org.onosproject.cpman.ControlResource;
29import org.slf4j.Logger;
30import org.slf4j.LoggerFactory;
31
32import java.util.List;
33import java.util.Set;
34import java.util.SortedSet;
35
36/**
37 * Resource name completer.
38 */
Ray Milkey86ad7bb2018-09-27 12:32:28 -070039@Service
Jian Lifdbc0fc2016-02-12 12:58:48 -080040public class ResourceNameCompleter extends AbstractCompleter {
41
42 private final Logger log = LoggerFactory.getLogger(getClass());
43
44 private static final String NETWORK = "network";
45 private static final String DISK = "disk";
46 private static final String CONTROL_MESSAGE = "control_message";
Jian Li89eeccd2016-05-06 02:10:33 -070047 private final Set<String> resourceTypes = ImmutableSet.of(NETWORK, DISK, CONTROL_MESSAGE);
Jian Lifdbc0fc2016-02-12 12:58:48 -080048 private static final String INVALID_MSG = "Invalid type name";
49
50
51 @Override
Ray Milkey86ad7bb2018-09-27 12:32:28 -070052 public int complete(Session session, CommandLine commandLine, List<String> candidates) {
Jian Lifdbc0fc2016-02-12 12:58:48 -080053 // delegate string completer
54 StringsCompleter delegate = new StringsCompleter();
55
56 // Resource type is the second argument.
Ray Milkey86ad7bb2018-09-27 12:32:28 -070057 String nodeId = commandLine.getArguments()[1];
58 String type = commandLine.getArguments()[2];
Jian Lifdbc0fc2016-02-12 12:58:48 -080059
60 if (resourceTypes.contains(type)) {
61 ControlPlaneMonitorService monitorService =
62 AbstractShellCommand.get(ControlPlaneMonitorService.class);
63
64 Set<String> set = Sets.newHashSet();
65 switch (type) {
66 case NETWORK:
Jian Li89eeccd2016-05-06 02:10:33 -070067 set = monitorService.availableResourcesSync(NodeId.nodeId(nodeId),
68 ControlResource.Type.NETWORK);
Jian Lifdbc0fc2016-02-12 12:58:48 -080069 break;
70 case DISK:
Jian Li89eeccd2016-05-06 02:10:33 -070071 set = monitorService.availableResourcesSync(NodeId.nodeId(nodeId),
72 ControlResource.Type.DISK);
Jian Lifdbc0fc2016-02-12 12:58:48 -080073 break;
74 case CONTROL_MESSAGE:
Jian Li89eeccd2016-05-06 02:10:33 -070075 set = monitorService.availableResourcesSync(NodeId.nodeId(nodeId),
76 ControlResource.Type.CONTROL_MESSAGE);
Jian Lifdbc0fc2016-02-12 12:58:48 -080077 break;
78 default:
79 log.warn(INVALID_MSG);
80 break;
81 }
82
83 SortedSet<String> strings = delegate.getStrings();
84
Jian Lib1548ee2016-05-11 09:49:57 -070085 if (!set.isEmpty()) {
Jian Li89eeccd2016-05-06 02:10:33 -070086 set.forEach(strings::add);
Jian Lifdbc0fc2016-02-12 12:58:48 -080087 }
88 }
89
Ray Milkey86ad7bb2018-09-27 12:32:28 -070090 return delegate.complete(session, commandLine, candidates);
Jian Lifdbc0fc2016-02-12 12:58:48 -080091 }
92}