blob: 710a567583aee644f413a69a1d90d605c58ca3f1 [file] [log] [blame]
/*
* Copyright 2016-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.tetopology.management.impl;
import java.util.List;
import java.util.Map;
import org.apache.commons.collections.MapUtils;
import org.onosproject.tetopology.management.api.KeyId;
import org.onosproject.tetopology.management.api.Network;
import org.onosproject.tetopology.management.api.TeTopologyKey;
import org.onosproject.tetopology.management.api.link.NetworkLink;
import org.onosproject.tetopology.management.api.link.NetworkLinkKey;
import org.onosproject.tetopology.management.api.node.NetworkNode;
import org.onosproject.tetopology.management.api.node.NetworkNodeKey;
import com.google.common.base.MoreObjects;
import com.google.common.base.Objects;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
/**
* Network representation in store.
*/
public class InternalNetwork {
private TeTopologyKey teTopologyKey;
private List<KeyId> supportingNetworkIds;
private boolean serverProvided;
private List<NetworkNodeKey> nodeIds;
private List<NetworkLinkKey> linkIds;
private boolean childUpdate = false;
/**
* Creates an instance of InternalNetwork.
*
* @param network the Network object
*/
public InternalNetwork(Network network) {
this.supportingNetworkIds = network
.supportingNetworkIds() == null ? null
: Lists.newArrayList(network
.supportingNetworkIds());
this.serverProvided = network.isServerProvided();
// NetworkNodeKey
if (MapUtils.isNotEmpty(network.nodes())) {
this.nodeIds = Lists.newArrayList();
for (Map.Entry<KeyId, NetworkNode> entry : network.nodes().entrySet()) {
this.nodeIds.add(new NetworkNodeKey(network.networkId(), entry.getKey()));
}
}
// NetworkLinkKey
if (MapUtils.isNotEmpty(network.links())) {
this.linkIds = Lists.newArrayList();
for (Map.Entry<KeyId, NetworkLink> entry : network.links().entrySet()) {
this.linkIds.add(new NetworkLinkKey(network.networkId(), entry.getKey()));
}
}
}
/**
* Creates a default instance of InternalNetwork.
*/
public InternalNetwork() {
}
/**
* Returns the supporting network Ids.
*
* @return the supportingNetworkIds
*/
public List<KeyId> supportingNetworkIds() {
if (supportingNetworkIds == null) {
return null;
}
return ImmutableList.copyOf(supportingNetworkIds);
}
/**
* Returns if the network topology is provided by a server or is
* configured by a client.
*
* @return true if the network is provided by a server; false otherwise
*/
public boolean serverProvided() {
return serverProvided;
}
/**
* @param serverProvided the serverProvided to set
*/
public void setServerProvided(boolean serverProvided) {
this.serverProvided = serverProvided;
}
/**
* Returns the list of node Ids in the network.
*
* @return the nodeIds
*/
public List<NetworkNodeKey> nodeIds() {
return nodeIds;
}
/**
* Returns the TE topology key for the network.
*
* @return the teTopologyKey
*/
public TeTopologyKey teTopologyKey() {
return teTopologyKey;
}
/**
* Sets the TE topology key for the network.
*
* @param teTopologyKey the teTopologyKey to set
*/
public void setTeTopologyKey(TeTopologyKey teTopologyKey) {
this.teTopologyKey = teTopologyKey;
}
/**
* Set the list of node Ids in the network.
*
* @param nodeIds the nodeIds to set
*/
public void setNodeIds(List<NetworkNodeKey> nodeIds) {
this.nodeIds = nodeIds;
}
/**
* Returns the list of link Ids in the network.
*
* @return the linkIds
*/
public List<NetworkLinkKey> linkIds() {
return linkIds;
}
/**
* Set the list of link Ids in the network.
*
* @param linkIds the linkIds to set
*/
public void setLinkIds(List<NetworkLinkKey> linkIds) {
this.linkIds = linkIds;
}
/**
* Returns the flag if the data was updated by child change.
*
* @return value of childUpdate
*/
public boolean childUpdate() {
return childUpdate;
}
/**
* Sets the flag if the data was updated by child change.
*
* @param childUpdate the childUpdate value to set
*/
public void setChildUpdate(boolean childUpdate) {
this.childUpdate = childUpdate;
}
@Override
public int hashCode() {
return Objects.hashCode(teTopologyKey, nodeIds, linkIds,
supportingNetworkIds, serverProvided);
}
@Override
public boolean equals(Object object) {
if (this == object) {
return true;
}
if (object instanceof InternalNetwork) {
InternalNetwork that = (InternalNetwork) object;
return Objects.equal(this.teTopologyKey, that.teTopologyKey) &&
Objects.equal(this.nodeIds, that.nodeIds) &&
Objects.equal(this.linkIds, that.linkIds) &&
Objects.equal(this.supportingNetworkIds, that.supportingNetworkIds) &&
Objects.equal(this.serverProvided, that.serverProvided);
}
return false;
}
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("teTopologyKey", teTopologyKey)
.add("nodeIds", nodeIds)
.add("linkIds", linkIds)
.add("supportingNetworkIds", supportingNetworkIds)
.add("serverProvided", serverProvided)
.add("childUpdate", childUpdate)
.toString();
}
}