/* * 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.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; } } }