/* * Copyright 2017-present Open Networking Laboratory * * 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.vpls.api; import com.google.common.base.MoreObjects; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; import org.onosproject.incubator.net.intf.Interface; import org.onosproject.net.EncapsulationType; import java.util.Collection; import java.util.Objects; import java.util.Set; import static java.util.Objects.*; /** * Class stores a VPLS information. */ public final class VplsData { /** * States of a VPLS. */ public enum VplsState { UPDATING, ADDING, REMOVING, ADDED, REMOVED, FAILED } private String name; private Set<Interface> interfaces; private EncapsulationType encapsulationType; private VplsState state; /** * Constructs a VPLS data by given name and encapsulation type. * * @param name the given name * @param encapType the encapsulation type */ private VplsData(String name, EncapsulationType encapType) { this.name = name; this.encapsulationType = encapType; this.interfaces = Sets.newHashSet(); this.state = VplsState.ADDING; } /** * Creates a VPLS data by given name. * The encapsulation type of the VPLS will be NONE. * * @param name the given name * @return the VPLS data */ public static VplsData of(String name) { requireNonNull(name); return new VplsData(name, EncapsulationType.NONE); } /** * Creates a VPLS data by given name and encapsulation type. * * @param name the given name * @param encapType the encapsulation type * @return the VPLS data */ public static VplsData of(String name, EncapsulationType encapType) { requireNonNull(name); if (encapType == null) { return new VplsData(name, EncapsulationType.NONE); } else { return new VplsData(name, encapType); } } /** * Creates a copy of VPLS data. * * @param vplsData the VPLS data * @return the copy of the VPLS data */ public static VplsData of(VplsData vplsData) { requireNonNull(vplsData); VplsData vplsDataCopy = new VplsData(vplsData.name(), vplsData.encapsulationType()); vplsDataCopy.addInterfaces(vplsData.interfaces()); return vplsData; } /** * Gets name of the VPLS. * * @return the name of the VPLS */ public String name() { return name; } public Set<Interface> interfaces() { return ImmutableSet.copyOf(interfaces); } public EncapsulationType encapsulationType() { return encapsulationType; } public void addInterfaces(Collection<Interface> interfaces) { requireNonNull(interfaces); this.interfaces.addAll(interfaces); } public void addInterface(Interface iface) { requireNonNull(iface); this.interfaces.add(iface); } public void removeInterfaces(Collection<Interface> interfaces) { requireNonNull(interfaces); this.interfaces.removeAll(interfaces); } public void removeInterface(Interface iface) { requireNonNull(iface); this.interfaces.remove(iface); } public void encapsulationType(EncapsulationType encapType) { this.encapsulationType = encapType; } public VplsState state() { return state; } public void state(VplsState state) { this.state = state; } @Override public String toString() { return MoreObjects.toStringHelper(getClass()) .add("name", name) .add("interfaces", interfaces) .add("encap type", encapsulationType) .add("state", state) .toString(); } @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (!(obj instanceof VplsData)) { return false; } VplsData other = (VplsData) obj; return Objects.equals(other.name, this.name) && Objects.equals(other.interfaces, this.interfaces) && Objects.equals(other.encapsulationType, this.encapsulationType); } @Override public int hashCode() { return hash(name, interfaces, encapsulationType); } }