GUI -- deleting experimental code for topo refactoring.
Change-Id: I3984f2f4a29496259877bf045c4cc8f46d78c033
Showing
17 changed files
with
4 additions
and
962 deletions
This diff is collapsed. Click to expand it.
... | @@ -211,10 +211,6 @@ public class TopologyViewMessageHandler extends TopologyViewMessageHandlerBase { | ... | @@ -211,10 +211,6 @@ public class TopologyViewMessageHandler extends TopologyViewMessageHandlerBase { |
211 | 211 | ||
212 | // ================================================================== | 212 | // ================================================================== |
213 | 213 | ||
214 | - /** | ||
215 | - * @deprecated in Cardinal Release | ||
216 | - */ | ||
217 | - @Deprecated | ||
218 | private final class TopoStart extends RequestHandler { | 214 | private final class TopoStart extends RequestHandler { |
219 | private TopoStart() { | 215 | private TopoStart() { |
220 | super(TOPO_START); | 216 | super(TOPO_START); |
... | @@ -230,10 +226,6 @@ public class TopologyViewMessageHandler extends TopologyViewMessageHandlerBase { | ... | @@ -230,10 +226,6 @@ public class TopologyViewMessageHandler extends TopologyViewMessageHandlerBase { |
230 | } | 226 | } |
231 | } | 227 | } |
232 | 228 | ||
233 | - /** | ||
234 | - * @deprecated in Cardinal Release | ||
235 | - */ | ||
236 | - @Deprecated | ||
237 | private final class TopoHeartbeat extends RequestHandler { | 229 | private final class TopoHeartbeat extends RequestHandler { |
238 | private TopoHeartbeat() { | 230 | private TopoHeartbeat() { |
239 | super(TOPO_HEARTBEAT); | 231 | super(TOPO_HEARTBEAT); |
... | @@ -258,10 +250,6 @@ public class TopologyViewMessageHandler extends TopologyViewMessageHandlerBase { | ... | @@ -258,10 +250,6 @@ public class TopologyViewMessageHandler extends TopologyViewMessageHandlerBase { |
258 | } | 250 | } |
259 | } | 251 | } |
260 | 252 | ||
261 | - /** | ||
262 | - * @deprecated in Cardinal Release | ||
263 | - */ | ||
264 | - @Deprecated | ||
265 | private final class TopoStop extends RequestHandler { | 253 | private final class TopoStop extends RequestHandler { |
266 | private TopoStop() { | 254 | private TopoStop() { |
267 | super(TOPO_STOP); | 255 | super(TOPO_STOP); |
... | @@ -274,10 +262,6 @@ public class TopologyViewMessageHandler extends TopologyViewMessageHandlerBase { | ... | @@ -274,10 +262,6 @@ public class TopologyViewMessageHandler extends TopologyViewMessageHandlerBase { |
274 | } | 262 | } |
275 | } | 263 | } |
276 | 264 | ||
277 | - /** | ||
278 | - * @deprecated in Cardinal Release | ||
279 | - */ | ||
280 | - @Deprecated | ||
281 | private final class ReqSummary extends RequestHandler { | 265 | private final class ReqSummary extends RequestHandler { |
282 | private ReqSummary() { | 266 | private ReqSummary() { |
283 | super(REQ_SUMMARY); | 267 | super(REQ_SUMMARY); | ... | ... |
... | @@ -110,10 +110,7 @@ import static org.onosproject.ui.impl.TopologyViewMessageHandlerBase.StatsType.P | ... | @@ -110,10 +110,7 @@ import static org.onosproject.ui.impl.TopologyViewMessageHandlerBase.StatsType.P |
110 | 110 | ||
111 | /** | 111 | /** |
112 | * Facility for creating messages bound for the topology viewer. | 112 | * Facility for creating messages bound for the topology viewer. |
113 | - * | ||
114 | - * @deprecated in Cardinal Release | ||
115 | */ | 113 | */ |
116 | -@Deprecated | ||
117 | public abstract class TopologyViewMessageHandlerBase extends UiMessageHandler { | 114 | public abstract class TopologyViewMessageHandlerBase extends UiMessageHandler { |
118 | 115 | ||
119 | protected static final Logger log = | 116 | protected static final Logger log = |
... | @@ -943,6 +940,7 @@ public abstract class TopologyViewMessageHandlerBase extends UiMessageHandler { | ... | @@ -943,6 +940,7 @@ public abstract class TopologyViewMessageHandlerBase extends UiMessageHandler { |
943 | } | 940 | } |
944 | 941 | ||
945 | // Auxiliary key/value carrier. | 942 | // Auxiliary key/value carrier. |
943 | + @Deprecated | ||
946 | static class Prop { | 944 | static class Prop { |
947 | public final String key; | 945 | public final String key; |
948 | public final String value; | 946 | public final String value; |
... | @@ -954,12 +952,14 @@ public abstract class TopologyViewMessageHandlerBase extends UiMessageHandler { | ... | @@ -954,12 +952,14 @@ public abstract class TopologyViewMessageHandlerBase extends UiMessageHandler { |
954 | } | 952 | } |
955 | 953 | ||
956 | // Auxiliary properties separator | 954 | // Auxiliary properties separator |
955 | + @Deprecated | ||
957 | static class Separator extends Prop { | 956 | static class Separator extends Prop { |
958 | protected Separator() { | 957 | protected Separator() { |
959 | super("-", ""); | 958 | super("-", ""); |
960 | } | 959 | } |
961 | } | 960 | } |
962 | 961 | ||
962 | + // TODO: move this to traffic overlay component | ||
963 | // Auxiliary carrier of data for requesting traffic message. | 963 | // Auxiliary carrier of data for requesting traffic message. |
964 | static class TrafficClass { | 964 | static class TrafficClass { |
965 | public final boolean showTraffic; | 965 | public final boolean showTraffic; | ... | ... |
... | @@ -33,8 +33,6 @@ import org.onosproject.ui.UiMessageHandlerFactory; | ... | @@ -33,8 +33,6 @@ import org.onosproject.ui.UiMessageHandlerFactory; |
33 | import org.onosproject.ui.UiTopoOverlayFactory; | 33 | import org.onosproject.ui.UiTopoOverlayFactory; |
34 | import org.onosproject.ui.UiView; | 34 | import org.onosproject.ui.UiView; |
35 | import org.onosproject.ui.UiViewHidden; | 35 | import org.onosproject.ui.UiViewHidden; |
36 | -import org.onosproject.ui.impl.topo.OverlayService; | ||
37 | -import org.onosproject.ui.impl.topo.overlay.SummaryGenerator; | ||
38 | import org.slf4j.Logger; | 36 | import org.slf4j.Logger; |
39 | import org.slf4j.LoggerFactory; | 37 | import org.slf4j.LoggerFactory; |
40 | 38 | ||
... | @@ -52,8 +50,7 @@ import static org.onosproject.ui.UiView.Category.PLATFORM; | ... | @@ -52,8 +50,7 @@ import static org.onosproject.ui.UiView.Category.PLATFORM; |
52 | */ | 50 | */ |
53 | @Component(immediate = true) | 51 | @Component(immediate = true) |
54 | @Service | 52 | @Service |
55 | -public class UiExtensionManager | 53 | +public class UiExtensionManager implements UiExtensionService, SpriteService { |
56 | - implements UiExtensionService, SpriteService, OverlayService { | ||
57 | 54 | ||
58 | private static final ClassLoader CL = | 55 | private static final ClassLoader CL = |
59 | UiExtensionManager.class.getClassLoader(); | 56 | UiExtensionManager.class.getClassLoader(); |
... | @@ -70,9 +67,6 @@ public class UiExtensionManager | ... | @@ -70,9 +67,6 @@ public class UiExtensionManager |
70 | // Core views & core extension | 67 | // Core views & core extension |
71 | private final UiExtension core = createCoreExtension(); | 68 | private final UiExtension core = createCoreExtension(); |
72 | 69 | ||
73 | - // Topology Message Handler | ||
74 | - private final AltTopoViewMessageHandler topoHandler = | ||
75 | - new AltTopoViewMessageHandler(); | ||
76 | 70 | ||
77 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | 71 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) |
78 | protected MastershipService mastershipService; | 72 | protected MastershipService mastershipService; |
... | @@ -96,7 +90,6 @@ public class UiExtensionManager | ... | @@ -96,7 +90,6 @@ public class UiExtensionManager |
96 | UiMessageHandlerFactory messageHandlerFactory = | 90 | UiMessageHandlerFactory messageHandlerFactory = |
97 | () -> ImmutableList.of( | 91 | () -> ImmutableList.of( |
98 | new TopologyViewMessageHandler(), | 92 | new TopologyViewMessageHandler(), |
99 | -// topoHandler, | ||
100 | new DeviceViewMessageHandler(), | 93 | new DeviceViewMessageHandler(), |
101 | new LinkViewMessageHandler(), | 94 | new LinkViewMessageHandler(), |
102 | new HostViewMessageHandler(), | 95 | new HostViewMessageHandler(), |
... | @@ -182,18 +175,4 @@ public class UiExtensionManager | ... | @@ -182,18 +175,4 @@ public class UiExtensionManager |
182 | return sprites.get(name); | 175 | return sprites.get(name); |
183 | } | 176 | } |
184 | 177 | ||
185 | - | ||
186 | - // ===================================================================== | ||
187 | - // Topology Overlay API -- pass through to topology message handler | ||
188 | - | ||
189 | - // NOTE: while WIP, comment out calls to topoHandler (for checked in code) | ||
190 | - @Override | ||
191 | - public void addSummaryGenerator(String overlayId, SummaryGenerator generator) { | ||
192 | - topoHandler.addSummaryGenerator(overlayId, generator); | ||
193 | - } | ||
194 | - | ||
195 | - @Override | ||
196 | - public void removeSummaryGenerator(String overlayId) { | ||
197 | - topoHandler.removeSummaryGenerator(overlayId); | ||
198 | - } | ||
199 | } | 178 | } | ... | ... |
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 | - */ | ||
17 | - | ||
18 | -package org.onosproject.ui.impl.topo; | ||
19 | - | ||
20 | -import com.fasterxml.jackson.databind.node.ObjectNode; | ||
21 | - | ||
22 | -import java.util.Map; | ||
23 | -import java.util.concurrent.ConcurrentHashMap; | ||
24 | - | ||
25 | -/** | ||
26 | - * A database of meta information stored for topology objects. | ||
27 | - */ | ||
28 | -// package private | ||
29 | -class MetaDb { | ||
30 | - | ||
31 | - private static Map<String, ObjectNode> metaCache = new ConcurrentHashMap<>(); | ||
32 | - | ||
33 | - /** | ||
34 | - * Adds meta UI information about the specified object to the given payload. | ||
35 | - * | ||
36 | - * @param id object identifier | ||
37 | - * @param payload payload to which the info should be added | ||
38 | - */ | ||
39 | - public void addMetaUi(String id, ObjectNode payload) { | ||
40 | - ObjectNode meta = metaCache.get(id); | ||
41 | - if (meta != null) { | ||
42 | - payload.set("metaUi", meta); | ||
43 | - } | ||
44 | - } | ||
45 | -} |
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 | - */ | ||
17 | - | ||
18 | -package org.onosproject.ui.impl.topo; | ||
19 | - | ||
20 | -import org.onosproject.event.ListenerRegistry; | ||
21 | -import org.slf4j.Logger; | ||
22 | - | ||
23 | -import java.util.HashSet; | ||
24 | -import java.util.Set; | ||
25 | - | ||
26 | -import static org.slf4j.LoggerFactory.getLogger; | ||
27 | - | ||
28 | -/** | ||
29 | - * A listener registry that automatically prunes listeners that have not | ||
30 | - * been sending heartbeat messages to assure us they are really listening. | ||
31 | - */ | ||
32 | -// package private | ||
33 | -class ModelListenerRegistry | ||
34 | - extends ListenerRegistry<TopoUiEvent, TopoUiListener> { | ||
35 | - | ||
36 | - private final Logger log = getLogger(getClass()); | ||
37 | - | ||
38 | - private final Set<TopoUiListener> zombies = new HashSet<>(); | ||
39 | - | ||
40 | - @Override | ||
41 | - public void process(TopoUiEvent event) { | ||
42 | - zombies.clear(); | ||
43 | - for (TopoUiListener listener : listeners) { | ||
44 | - try { | ||
45 | - if (listener.isAwake()) { | ||
46 | - listener.event(event); | ||
47 | - } else { | ||
48 | - zombies.add(listener); | ||
49 | - } | ||
50 | - } catch (Exception error) { | ||
51 | - reportProblem(event, error); | ||
52 | - } | ||
53 | - } | ||
54 | - | ||
55 | - // clean up zombie listeners | ||
56 | - for (TopoUiListener z : zombies) { | ||
57 | - log.debug("Removing zombie model listener: {}", z); | ||
58 | - removeListener(z); | ||
59 | - } | ||
60 | - } | ||
61 | - | ||
62 | -} |
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 | - */ | ||
17 | - | ||
18 | -package org.onosproject.ui.impl.topo; | ||
19 | - | ||
20 | -import org.onosproject.ui.impl.topo.overlay.SummaryGenerator; | ||
21 | - | ||
22 | -/** | ||
23 | - * Provides the API for external agents to inject topology overlay behavior. | ||
24 | - */ | ||
25 | -// TODO: move to core-api module | ||
26 | -public interface OverlayService { | ||
27 | - | ||
28 | - /** | ||
29 | - * Registers a custom summary generator for the specified overlay. | ||
30 | - * | ||
31 | - * @param overlayId overlay identifier | ||
32 | - * @param generator generator to register | ||
33 | - */ | ||
34 | - void addSummaryGenerator(String overlayId, SummaryGenerator generator); | ||
35 | - | ||
36 | - /** | ||
37 | - * Unregisters the generator associated with the specified overlay. | ||
38 | - * | ||
39 | - * @param overlayId overlay identifier | ||
40 | - */ | ||
41 | - void removeSummaryGenerator(String overlayId); | ||
42 | -} |
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 | - */ | ||
17 | - | ||
18 | -package org.onosproject.ui.impl.topo; | ||
19 | - | ||
20 | -/** | ||
21 | - * Provides basic summary data for the topology. | ||
22 | - */ | ||
23 | -// TODO: review -- move to core-api module? | ||
24 | -public interface SummaryData { | ||
25 | - | ||
26 | - /** | ||
27 | - * Returns the number of devices. | ||
28 | - * | ||
29 | - * @return number of devices | ||
30 | - */ | ||
31 | - int deviceCount(); | ||
32 | - | ||
33 | - /** | ||
34 | - * Returns the number of links. | ||
35 | - * | ||
36 | - * @return number of links | ||
37 | - */ | ||
38 | - int linkCount(); | ||
39 | - | ||
40 | - /** | ||
41 | - * Returns the number of hosts. | ||
42 | - * | ||
43 | - * @return number of hosts | ||
44 | - */ | ||
45 | - int hostCount(); | ||
46 | - | ||
47 | - /** | ||
48 | - * Returns the number of clusters (topology SCCs). | ||
49 | - * | ||
50 | - * @return number of clusters | ||
51 | - */ | ||
52 | - int clusterCount(); | ||
53 | - | ||
54 | - /** | ||
55 | - * Returns the number of intents in the system. | ||
56 | - * | ||
57 | - * @return number of intents | ||
58 | - */ | ||
59 | - long intentCount(); | ||
60 | - | ||
61 | - /** | ||
62 | - * Returns the number of flow rules in the system. | ||
63 | - * | ||
64 | - * @return number of flow rules | ||
65 | - */ | ||
66 | - int flowRuleCount(); | ||
67 | - | ||
68 | -} |
This diff is collapsed. Click to expand it.
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 | - */ | ||
17 | - | ||
18 | -package org.onosproject.ui.impl.topo; | ||
19 | - | ||
20 | -import com.fasterxml.jackson.databind.node.ObjectNode; | ||
21 | -import org.onosproject.event.AbstractEvent; | ||
22 | - | ||
23 | -/** | ||
24 | - * Describes Topology UI Model events. | ||
25 | - */ | ||
26 | -public class TopoUiEvent extends AbstractEvent<TopoUiEvent.Type, ObjectNode> { | ||
27 | - | ||
28 | - /** | ||
29 | - * Type of Topology UI Model events. | ||
30 | - */ | ||
31 | - public enum Type { | ||
32 | - // notification events | ||
33 | - SUMMARY_UPDATE, | ||
34 | - | ||
35 | - // unsolicited topology events | ||
36 | - INSTANCE_ADDED, | ||
37 | - INSTANCE_REMOVED, | ||
38 | - DEVICE_ADDED, | ||
39 | - DEVICE_UPDATED, | ||
40 | - DEVICE_REMOVED, | ||
41 | - LINK_ADDED, | ||
42 | - LINK_UPDATED, | ||
43 | - LINK_REMOVED, | ||
44 | - HOST_ADDED, | ||
45 | - HOST_UPDATED, | ||
46 | - HOST_REMOVED | ||
47 | - } | ||
48 | - | ||
49 | - | ||
50 | - protected TopoUiEvent(Type type, ObjectNode subject) { | ||
51 | - super(type, subject); | ||
52 | - } | ||
53 | - | ||
54 | - protected TopoUiEvent(Type type, ObjectNode subject, long time) { | ||
55 | - super(type, subject, time); | ||
56 | - } | ||
57 | - | ||
58 | -} |
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 | - */ | ||
17 | - | ||
18 | -package org.onosproject.ui.impl.topo; | ||
19 | - | ||
20 | -import org.onosproject.event.EventListener; | ||
21 | - | ||
22 | -/** | ||
23 | - * Defines a listener of Topology UI Model events. | ||
24 | - */ | ||
25 | -public interface TopoUiListener extends EventListener<TopoUiEvent> { | ||
26 | - | ||
27 | - /** | ||
28 | - * Returns true if the listener really is listening. | ||
29 | - * | ||
30 | - * @return true if awake | ||
31 | - */ | ||
32 | - boolean isAwake(); | ||
33 | -} |
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 | - */ | ||
17 | - | ||
18 | -package org.onosproject.ui.impl.topo; | ||
19 | - | ||
20 | -import com.fasterxml.jackson.databind.node.ObjectNode; | ||
21 | -import org.apache.felix.scr.annotations.Activate; | ||
22 | -import org.apache.felix.scr.annotations.Component; | ||
23 | -import org.apache.felix.scr.annotations.Deactivate; | ||
24 | -import org.apache.felix.scr.annotations.Reference; | ||
25 | -import org.apache.felix.scr.annotations.ReferenceCardinality; | ||
26 | -import org.apache.felix.scr.annotations.Service; | ||
27 | -import org.onosproject.cluster.ClusterEvent; | ||
28 | -import org.onosproject.cluster.ClusterService; | ||
29 | -import org.onosproject.cluster.ControllerNode; | ||
30 | -import org.onosproject.event.EventDeliveryService; | ||
31 | -import org.onosproject.mastership.MastershipService; | ||
32 | -import org.onosproject.net.Device; | ||
33 | -import org.onosproject.net.Host; | ||
34 | -import org.onosproject.net.Link; | ||
35 | -import org.onosproject.net.device.DeviceEvent; | ||
36 | -import org.onosproject.net.device.DeviceService; | ||
37 | -import org.onosproject.net.flow.FlowRuleService; | ||
38 | -import org.onosproject.net.host.HostEvent; | ||
39 | -import org.onosproject.net.host.HostService; | ||
40 | -import org.onosproject.net.intent.IntentService; | ||
41 | -import org.onosproject.net.link.LinkEvent; | ||
42 | -import org.onosproject.net.link.LinkService; | ||
43 | -import org.onosproject.net.topology.Topology; | ||
44 | -import org.onosproject.net.topology.TopologyService; | ||
45 | -import org.slf4j.Logger; | ||
46 | -import org.slf4j.LoggerFactory; | ||
47 | - | ||
48 | -import java.util.ArrayList; | ||
49 | -import java.util.Collections; | ||
50 | -import java.util.Comparator; | ||
51 | -import java.util.List; | ||
52 | -import java.util.Timer; | ||
53 | -import java.util.TimerTask; | ||
54 | - | ||
55 | -import static org.onosproject.cluster.ClusterEvent.Type.INSTANCE_ADDED; | ||
56 | -import static org.onosproject.net.device.DeviceEvent.Type.DEVICE_ADDED; | ||
57 | -import static org.onosproject.net.host.HostEvent.Type.HOST_ADDED; | ||
58 | -import static org.onosproject.net.link.LinkEvent.Type.LINK_ADDED; | ||
59 | -import static org.onosproject.ui.impl.topo.TopoUiEvent.Type.SUMMARY_UPDATE; | ||
60 | - | ||
61 | - | ||
62 | -/** | ||
63 | - * Maintains a UI-centric model of the topology, as inferred from interactions | ||
64 | - * with the different (device, host, link, ...) services. Will serve up this | ||
65 | - * model to anyone who cares to {@link TopoUiListener listen}. | ||
66 | - */ | ||
67 | -@Component(immediate = true) | ||
68 | -@Service | ||
69 | -public class TopoUiModelManager implements TopoUiModelService { | ||
70 | - | ||
71 | - // TODO: put back to 30,000 ms for production | ||
72 | - private static final long SUMMARY_PERIOD = 15_000; | ||
73 | - | ||
74 | - private final Logger log = LoggerFactory.getLogger(getClass()); | ||
75 | - | ||
76 | - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
77 | - protected ClusterService clusterService; | ||
78 | - | ||
79 | - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
80 | - protected DeviceService deviceService; | ||
81 | - | ||
82 | - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
83 | - protected LinkService linkService; | ||
84 | - | ||
85 | - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
86 | - protected HostService hostService; | ||
87 | - | ||
88 | - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
89 | - protected MastershipService mastershipService; | ||
90 | - | ||
91 | - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
92 | - protected IntentService intentService; | ||
93 | - | ||
94 | - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
95 | - protected FlowRuleService flowRuleService; | ||
96 | - | ||
97 | - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
98 | - protected TopologyService topologyService; | ||
99 | - | ||
100 | - | ||
101 | - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
102 | - protected EventDeliveryService eventDispatcher; | ||
103 | - | ||
104 | - | ||
105 | - private final ModelListenerRegistry listenerRegistry = | ||
106 | - new ModelListenerRegistry(); | ||
107 | - | ||
108 | - private final TopoMessageFactory messageFactory = new TopoMessageFactory(); | ||
109 | - private final MetaDb metaDb = new MetaDb(); | ||
110 | - | ||
111 | - private final Timer timer = new Timer("topology-view"); | ||
112 | - | ||
113 | - private TimerTask summaryTask = null; | ||
114 | - private boolean summaryRunning = false; | ||
115 | - | ||
116 | - | ||
117 | - @Activate | ||
118 | - public void activate() { | ||
119 | - eventDispatcher.addSink(TopoUiEvent.class, listenerRegistry); | ||
120 | - messageFactory.injectServices( | ||
121 | - metaDb, | ||
122 | - clusterService, | ||
123 | - deviceService, | ||
124 | - linkService, | ||
125 | - hostService, | ||
126 | - mastershipService | ||
127 | - // TODO: others?? | ||
128 | - ); | ||
129 | - log.info("Started"); | ||
130 | - } | ||
131 | - | ||
132 | - @Deactivate | ||
133 | - public void deactivate() { | ||
134 | - eventDispatcher.removeSink(TopoUiEvent.class); | ||
135 | - log.info("Stopped"); | ||
136 | - } | ||
137 | - | ||
138 | - | ||
139 | - @Override | ||
140 | - public void addListener(TopoUiListener listener) { | ||
141 | - listenerRegistry.addListener(listener); | ||
142 | - } | ||
143 | - | ||
144 | - @Override | ||
145 | - public void removeListener(TopoUiListener listener) { | ||
146 | - listenerRegistry.removeListener(listener); | ||
147 | - } | ||
148 | - | ||
149 | - @Override | ||
150 | - public List<ObjectNode> getInitialState() { | ||
151 | - List<ObjectNode> results = new ArrayList<>(); | ||
152 | - addInstances(results); | ||
153 | - addDevices(results); | ||
154 | - addLinks(results); | ||
155 | - addHosts(results); | ||
156 | - return results; | ||
157 | - } | ||
158 | - | ||
159 | - @Override | ||
160 | - public synchronized void startSummaryMonitoring() { | ||
161 | - // first, cancel previous task if not canceled already | ||
162 | - stopSummaryMonitoring(); | ||
163 | - | ||
164 | - // create and start a summary task, to execute with no delay, and | ||
165 | - // every SUMMARY_PERIOD milliseconds thereafter. | ||
166 | - summaryTask = new TimerTask() { | ||
167 | - @Override | ||
168 | - public void run() { | ||
169 | - if (summaryRunning) { | ||
170 | - post(new TopoUiEvent(SUMMARY_UPDATE, null)); | ||
171 | - } | ||
172 | - } | ||
173 | - }; | ||
174 | - | ||
175 | - timer.schedule(summaryTask, 0, SUMMARY_PERIOD); | ||
176 | - summaryRunning = true; | ||
177 | - } | ||
178 | - | ||
179 | - @Override | ||
180 | - public synchronized void stopSummaryMonitoring() { | ||
181 | - if (summaryTask != null) { | ||
182 | - summaryTask.cancel(); | ||
183 | - summaryTask = null; | ||
184 | - } | ||
185 | - summaryRunning = false; | ||
186 | - } | ||
187 | - | ||
188 | - @Override | ||
189 | - public SummaryData getSummaryData() { | ||
190 | - return new SummaryDataImpl(); | ||
191 | - } | ||
192 | - | ||
193 | - // ===================================================================== | ||
194 | - | ||
195 | - private final class SummaryDataImpl implements SummaryData { | ||
196 | - private final Topology topology = topologyService.currentTopology(); | ||
197 | - | ||
198 | - @Override | ||
199 | - public int deviceCount() { | ||
200 | - return topology.deviceCount(); | ||
201 | - } | ||
202 | - | ||
203 | - @Override | ||
204 | - public int linkCount() { | ||
205 | - return topology.linkCount(); | ||
206 | - } | ||
207 | - | ||
208 | - @Override | ||
209 | - public int hostCount() { | ||
210 | - return hostService.getHostCount(); | ||
211 | - } | ||
212 | - | ||
213 | - @Override | ||
214 | - public int clusterCount() { | ||
215 | - return topology.clusterCount(); | ||
216 | - } | ||
217 | - | ||
218 | - @Override | ||
219 | - public long intentCount() { | ||
220 | - return intentService.getIntentCount(); | ||
221 | - } | ||
222 | - | ||
223 | - @Override | ||
224 | - public int flowRuleCount() { | ||
225 | - return flowRuleService.getFlowRuleCount(); | ||
226 | - } | ||
227 | - } | ||
228 | - | ||
229 | - // ===================================================================== | ||
230 | - | ||
231 | - private static final Comparator<? super ControllerNode> NODE_COMPARATOR = | ||
232 | - (o1, o2) -> o1.id().toString().compareTo(o2.id().toString()); | ||
233 | - | ||
234 | - // ===================================================================== | ||
235 | - | ||
236 | - private void addInstances(List<ObjectNode> results) { | ||
237 | - List<ControllerNode> nodes = new ArrayList<>(clusterService.getNodes()); | ||
238 | - Collections.sort(nodes, NODE_COMPARATOR); | ||
239 | - for (ControllerNode node : nodes) { | ||
240 | - ClusterEvent ev = new ClusterEvent(INSTANCE_ADDED, node); | ||
241 | - results.add(messageFactory.instanceMessage(ev)); | ||
242 | - } | ||
243 | - } | ||
244 | - | ||
245 | - private void addDevices(List<ObjectNode> results) { | ||
246 | - // Send optical first, others later -- for layered rendering | ||
247 | - List<DeviceEvent> deferred = new ArrayList<>(); | ||
248 | - | ||
249 | - for (Device device : deviceService.getDevices()) { | ||
250 | - DeviceEvent ev = new DeviceEvent(DEVICE_ADDED, device); | ||
251 | - if (device.type() == Device.Type.ROADM) { | ||
252 | - results.add(messageFactory.deviceMessage(ev)); | ||
253 | - } else { | ||
254 | - deferred.add(ev); | ||
255 | - } | ||
256 | - } | ||
257 | - | ||
258 | - for (DeviceEvent ev : deferred) { | ||
259 | - results.add(messageFactory.deviceMessage(ev)); | ||
260 | - } | ||
261 | - } | ||
262 | - | ||
263 | - private void addLinks(List<ObjectNode> results) { | ||
264 | - // Send optical first, others later -- for layered rendering | ||
265 | - List<LinkEvent> deferred = new ArrayList<>(); | ||
266 | - | ||
267 | - for (Link link : linkService.getLinks()) { | ||
268 | - LinkEvent ev = new LinkEvent(LINK_ADDED, link); | ||
269 | - if (link.type() == Link.Type.OPTICAL) { | ||
270 | - results.add(messageFactory.linkMessage(ev)); | ||
271 | - } else { | ||
272 | - deferred.add(ev); | ||
273 | - } | ||
274 | - } | ||
275 | - | ||
276 | - for (LinkEvent ev : deferred) { | ||
277 | - results.add(messageFactory.linkMessage(ev)); | ||
278 | - } | ||
279 | - } | ||
280 | - | ||
281 | - private void addHosts(List<ObjectNode> results) { | ||
282 | - for (Host host : hostService.getHosts()) { | ||
283 | - HostEvent ev = new HostEvent(HOST_ADDED, host); | ||
284 | - results.add(messageFactory.hostMessage(ev)); | ||
285 | - } | ||
286 | - } | ||
287 | - | ||
288 | - // ===================================================================== | ||
289 | - | ||
290 | - private void post(TopoUiEvent event) { | ||
291 | - if (event != null) { | ||
292 | - eventDispatcher.post(event); | ||
293 | - } | ||
294 | - } | ||
295 | - | ||
296 | - // NOTE: session-independent state only | ||
297 | - // private inner classes to listen to device/host/link events | ||
298 | - // TODO.. | ||
299 | -} |
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 | - */ | ||
17 | - | ||
18 | -package org.onosproject.ui.impl.topo; | ||
19 | - | ||
20 | -import com.fasterxml.jackson.databind.node.ObjectNode; | ||
21 | - | ||
22 | -import java.util.List; | ||
23 | - | ||
24 | -/**t | ||
25 | - * Defines the API for the Topology UI Model. | ||
26 | - */ | ||
27 | -public interface TopoUiModelService { | ||
28 | - | ||
29 | - /** | ||
30 | - * Registers the specified listener for Topology UI Model events. | ||
31 | - * | ||
32 | - * @param listener the listener | ||
33 | - */ | ||
34 | - void addListener(TopoUiListener listener); | ||
35 | - | ||
36 | - /** | ||
37 | - * Unregister the specified listener. | ||
38 | - * | ||
39 | - * @param listener the listener | ||
40 | - */ | ||
41 | - void removeListener(TopoUiListener listener); | ||
42 | - | ||
43 | - | ||
44 | - /** | ||
45 | - * Returns events describing the current state of the model. | ||
46 | - * <p> | ||
47 | - * These will be in the form of "addInstance", "addDevice", "addLink", | ||
48 | - * and "addHost" events, as appropriate. | ||
49 | - * | ||
50 | - * @return initial state messages | ||
51 | - */ | ||
52 | - List<ObjectNode> getInitialState(); | ||
53 | - | ||
54 | - /** | ||
55 | - * Starts the summary monitoring process. | ||
56 | - * <p> | ||
57 | - * Sends a "showSummary" message now, and schedules a task to send | ||
58 | - * updates whenever the data changes. | ||
59 | - */ | ||
60 | - void startSummaryMonitoring(); | ||
61 | - | ||
62 | - /** | ||
63 | - * Cancels the task that sends summary updates. | ||
64 | - */ | ||
65 | - void stopSummaryMonitoring(); | ||
66 | - | ||
67 | - /** | ||
68 | - * Returns base data about the topology. | ||
69 | - * | ||
70 | - * @return summary data | ||
71 | - */ | ||
72 | - SummaryData getSummaryData(); | ||
73 | -} |
web/gui/src/main/java/org/onosproject/ui/impl/topo/overlay/AbstractSummaryGenerator.java
deleted
100644 → 0
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 | - */ | ||
17 | - | ||
18 | -package org.onosproject.ui.impl.topo.overlay; | ||
19 | - | ||
20 | -import com.fasterxml.jackson.databind.ObjectMapper; | ||
21 | -import com.fasterxml.jackson.databind.node.ArrayNode; | ||
22 | -import com.fasterxml.jackson.databind.node.ObjectNode; | ||
23 | - | ||
24 | -import java.text.DecimalFormat; | ||
25 | -import java.util.ArrayList; | ||
26 | -import java.util.List; | ||
27 | - | ||
28 | -/** | ||
29 | - * Base implementation of a {@link SummaryGenerator}. Provides convenience | ||
30 | - * methods for compiling a list of properties to be displayed in the summary | ||
31 | - * panel on the UI. | ||
32 | - */ | ||
33 | -public abstract class AbstractSummaryGenerator implements SummaryGenerator { | ||
34 | - private static final String NUMBER_FORMAT = "#,###"; | ||
35 | - private static final DecimalFormat DF = new DecimalFormat(NUMBER_FORMAT); | ||
36 | - private static final ObjectMapper MAPPER = new ObjectMapper(); | ||
37 | - | ||
38 | - private final List<Prop> props = new ArrayList<>(); | ||
39 | - private String iconId; | ||
40 | - private String title; | ||
41 | - | ||
42 | - /** | ||
43 | - * Constructs a summary generator without specifying the icon ID or title. | ||
44 | - * It is expected that the title (and optionally the icon ID) will be set | ||
45 | - * later via {@link #title(String)} (and {@link #iconId(String)}), before | ||
46 | - * {@link #buildObjectNode()} is invoked to generate the message payload. | ||
47 | - */ | ||
48 | - public AbstractSummaryGenerator() { | ||
49 | - } | ||
50 | - | ||
51 | - /** | ||
52 | - * Constructs a summary generator that uses the specified iconId ID and | ||
53 | - * title in its generated output. | ||
54 | - * | ||
55 | - * @param iconId iconId ID | ||
56 | - * @param title title | ||
57 | - */ | ||
58 | - public AbstractSummaryGenerator(String iconId, String title) { | ||
59 | - this.iconId = iconId; | ||
60 | - this.title = title; | ||
61 | - } | ||
62 | - | ||
63 | - /** | ||
64 | - * Subclasses need to provide an implementation. | ||
65 | - * | ||
66 | - * @return the summary payload | ||
67 | - */ | ||
68 | - @Override | ||
69 | - public abstract ObjectNode generateSummary(); | ||
70 | - | ||
71 | - /** | ||
72 | - * Formats the given number into a string, using comma separator. | ||
73 | - * | ||
74 | - * @param number the number | ||
75 | - * @return formatted as a string | ||
76 | - */ | ||
77 | - protected String format(Number number) { | ||
78 | - return DF.format(number); | ||
79 | - } | ||
80 | - | ||
81 | - /** | ||
82 | - * Sets the iconId ID to use. | ||
83 | - * | ||
84 | - * @param iconId iconId ID | ||
85 | - */ | ||
86 | - protected void iconId(String iconId) { | ||
87 | - this.iconId = iconId; | ||
88 | - } | ||
89 | - | ||
90 | - /** | ||
91 | - * Sets the summary panel title. | ||
92 | - * | ||
93 | - * @param title the title | ||
94 | - */ | ||
95 | - protected void title(String title) { | ||
96 | - this.title = title; | ||
97 | - } | ||
98 | - | ||
99 | - /** | ||
100 | - * Clears out the cache of properties. | ||
101 | - */ | ||
102 | - protected void clearProps() { | ||
103 | - props.clear(); | ||
104 | - } | ||
105 | - | ||
106 | - /** | ||
107 | - * Adds a property to the summary. Note that the value is converted to | ||
108 | - * a string by invoking the <code>toString()</code> method on it. | ||
109 | - * | ||
110 | - * @param label the label | ||
111 | - * @param value the value | ||
112 | - */ | ||
113 | - protected void prop(String label, Object value) { | ||
114 | - props.add(new Prop(label, value)); | ||
115 | - } | ||
116 | - | ||
117 | - /** | ||
118 | - * Adds a separator to the summary; when rendered on the client, a visible | ||
119 | - * break between properties. | ||
120 | - */ | ||
121 | - protected void separator() { | ||
122 | - props.add(new Prop("-", "")); | ||
123 | - } | ||
124 | - | ||
125 | - /** | ||
126 | - * Builds an object node from the current state of the summary generator. | ||
127 | - * | ||
128 | - * @return summary payload as JSON object node | ||
129 | - */ | ||
130 | - protected ObjectNode buildObjectNode() { | ||
131 | - ObjectNode result = MAPPER.createObjectNode(); | ||
132 | - // NOTE: "id" and "type" are currently used for title and iconID | ||
133 | - // so that this structure can be "re-used" with detail panel payloads | ||
134 | - result.put("id", title).put("type", iconId); | ||
135 | - | ||
136 | - ObjectNode pnode = MAPPER.createObjectNode(); | ||
137 | - ArrayNode porder = MAPPER.createArrayNode(); | ||
138 | - | ||
139 | - for (Prop p : props) { | ||
140 | - porder.add(p.label); | ||
141 | - pnode.put(p.label, p.value); | ||
142 | - } | ||
143 | - result.set("propOrder", porder); | ||
144 | - result.set("props", pnode); | ||
145 | - | ||
146 | - return result; | ||
147 | - } | ||
148 | - | ||
149 | - // =================================================================== | ||
150 | - | ||
151 | - /** | ||
152 | - * Abstraction of a property, that is, a label-value pair. | ||
153 | - */ | ||
154 | - private static class Prop { | ||
155 | - private final String label; | ||
156 | - private final String value; | ||
157 | - | ||
158 | - public Prop(String label, Object value) { | ||
159 | - this.label = label; | ||
160 | - this.value = value.toString(); | ||
161 | - } | ||
162 | - } | ||
163 | -} |
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 | - */ | ||
17 | - | ||
18 | -package org.onosproject.ui.impl.topo.overlay; | ||
19 | - | ||
20 | -import com.fasterxml.jackson.databind.node.ObjectNode; | ||
21 | - | ||
22 | -/** | ||
23 | - * May be called upon to generate the summary messages for the topology view | ||
24 | - * in the GUI. | ||
25 | - * <p> | ||
26 | - * It is assumed that if a custom summary generator is installed on the server | ||
27 | - * (as part of a topology overlay), a peer custom summary message handler will | ||
28 | - * be installed on the client side to handle the messages thus generated. | ||
29 | - */ | ||
30 | -public interface SummaryGenerator { | ||
31 | - /** | ||
32 | - * Generates the payload for the "showSummary" message. | ||
33 | - * | ||
34 | - * @return the message payload | ||
35 | - */ | ||
36 | - ObjectNode generateSummary(); | ||
37 | -} |
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 | - | ||
17 | -/** | ||
18 | - * Base abstractions and utilities for creating topology view overlays; experimental. | ||
19 | - */ | ||
20 | -package org.onosproject.ui.impl.topo.overlay; | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
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 | - | ||
17 | -/** | ||
18 | - * Topology view server-side model service with ability for apps to overlay | ||
19 | - * their own functionality and information; experimental. | ||
20 | - */ | ||
21 | -package org.onosproject.ui.impl.topo; | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
-
Please register or login to post a comment