| /* |
| * Copyright 2015-present Open Networking Foundation |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package org.onosproject.ui.topo; |
| |
| import java.util.Collections; |
| import java.util.Set; |
| import java.util.TreeSet; |
| |
| import static com.google.common.base.Preconditions.checkNotNull; |
| |
| /** |
| * Denotes the highlighting to be applied to a link. |
| * {@link Flavor} is a closed set of NO-, PRIMARY-, or SECONDARY- highlighting. |
| * {@link Mod} is an open ended set of additional modifications (CSS classes) |
| * that may also be applied. |
| * Note that {@link #MOD_OPTICAL} and {@link #MOD_ANIMATED} are pre-defined mods. |
| * Label text may be set, which will also be displayed on the link. |
| */ |
| public class LinkHighlight extends AbstractHighlight { |
| |
| private static final String PLAIN = "plain"; |
| private static final String PRIMARY = "primary"; |
| private static final String SECONDARY = "secondary"; |
| private static final String EMPTY = ""; |
| private static final String SPACE = " "; |
| |
| private final Flavor flavor; |
| private final Set<Mod> mods = new TreeSet<>(); |
| private String label = EMPTY; |
| |
| /** |
| * Constructs a link highlight entity. |
| * |
| * @param linkId the link identifier |
| * @param flavor the highlight flavor |
| */ |
| public LinkHighlight(String linkId, Flavor flavor) { |
| super(TopoElementType.LINK, linkId); |
| this.flavor = checkNotNull(flavor); |
| } |
| |
| /** |
| * Adds a highlighting modification to this link highlight. |
| * |
| * @param mod mod to be added |
| * @return self, for chaining |
| */ |
| public LinkHighlight addMod(Mod mod) { |
| mods.add(checkNotNull(mod)); |
| return this; |
| } |
| |
| /** |
| * Adds a label to be displayed on the link. |
| * |
| * @param label the label text |
| * @return self, for chaining |
| */ |
| public LinkHighlight setLabel(String label) { |
| this.label = label == null ? EMPTY : label; |
| return this; |
| } |
| |
| /** |
| * Returns the highlight flavor. |
| * |
| * @return highlight flavor |
| */ |
| public Flavor flavor() { |
| return flavor; |
| } |
| |
| /** |
| * Returns the highlight modifications. |
| * |
| * @return highlight modifications |
| */ |
| public Set<Mod> mods() { |
| return Collections.unmodifiableSet(mods); |
| } |
| |
| /** |
| * Generates the CSS classes string from the {@link #flavor} and |
| * any optional {@link #mods}. |
| * |
| * @return CSS classes string |
| */ |
| public String cssClasses() { |
| StringBuilder sb = new StringBuilder(flavor.toString()); |
| mods.forEach(m -> sb.append(SPACE).append(m)); |
| return sb.toString(); |
| } |
| |
| /** |
| * Returns the label text. |
| * |
| * @return label text |
| */ |
| public String label() { |
| return label; |
| } |
| |
| /** |
| * Link highlighting flavor. |
| */ |
| public enum Flavor { |
| NO_HIGHLIGHT(PLAIN), |
| PRIMARY_HIGHLIGHT(PRIMARY), |
| SECONDARY_HIGHLIGHT(SECONDARY); |
| |
| private String cssName; |
| |
| Flavor(String s) { |
| cssName = s; |
| } |
| |
| @Override |
| public String toString() { |
| return cssName; |
| } |
| } |
| |
| /** |
| * Denotes a link to be tagged as an optical link. |
| */ |
| public static final Mod MOD_OPTICAL = new Mod("optical"); |
| |
| /** |
| * Denotes a link to be tagged with animated traffic ("marching ants"). |
| */ |
| public static final Mod MOD_ANIMATED = new Mod("animated"); |
| } |