blob: c82dc947104bf3def345298364c263f19758132b [file] [log] [blame]
/*
* Copyright 2017-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.ofagent.impl;
import com.google.common.base.MoreObjects;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
import org.onosproject.incubator.net.virtual.NetworkId;
import org.onosproject.ofagent.api.OFAgent;
import org.onosproject.ofagent.api.OFController;
import java.util.Objects;
import java.util.Set;
import static com.google.common.base.Preconditions.checkNotNull;
/**
* Implementation of OpenFlow agent.
*/
public final class DefaultOFAgent implements OFAgent {
private final NetworkId networkId;
private final Set<OFController> controllers;
private final State state;
private DefaultOFAgent(NetworkId networkId,
Set<OFController> controllers,
State state) {
this.networkId = networkId;
this.controllers = controllers;
this.state = state;
}
@Override
public NetworkId networkId() {
return networkId;
}
@Override
public Set<OFController> controllers() {
return controllers;
}
@Override
public State state() {
return state;
}
@Override
public int hashCode() {
return Objects.hash(networkId);
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj instanceof DefaultOFAgent) {
DefaultOFAgent that = (DefaultOFAgent) obj;
if (Objects.equals(networkId, that.networkId)) {
return true;
}
}
return false;
}
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("networkId", this.networkId)
.add("controllers", this.controllers)
.add("state", this.state)
.toString();
}
/**
* Returns new builder instance.
*
* @return default ofagent builder
*/
public static Builder builder() {
return new Builder();
}
public static final class Builder implements OFAgent.Builder {
private NetworkId networkId;
private Set<OFController> controllers = Sets.newHashSet();
private State state;
private Builder() {
}
@Override
public OFAgent build() {
checkNotNull(networkId, "Network ID cannot be null");
checkNotNull(state, "State cannot be null");
controllers = controllers == null ? ImmutableSet.of() : controllers;
return new DefaultOFAgent(networkId, controllers, state);
}
@Override
public Builder from(OFAgent ofAgent) {
this.networkId = ofAgent.networkId();
this.controllers = Sets.newHashSet(ofAgent.controllers());
this.state = ofAgent.state();
return this;
}
@Override
public Builder networkId(NetworkId networkId) {
this.networkId = networkId;
return this;
}
@Override
public Builder controllers(Set<OFController> controllers) {
this.controllers = controllers;
return this;
}
@Override
public OFAgent.Builder addController(OFController controller) {
this.controllers.add(controller);
return this;
}
@Override
public OFAgent.Builder deleteController(OFController controller) {
this.controllers.remove(controller);
return this;
}
@Override
public Builder state(State state) {
this.state = state;
return this;
}
}
}