| package net.onrc.onos.api.flowmanager; |
| |
| import static com.google.common.base.Preconditions.checkNotNull; |
| |
| import java.util.List; |
| |
| import net.onrc.onos.api.batchoperation.BatchOperationTarget; |
| import net.onrc.onos.core.matchaction.MatchActionId; |
| import net.onrc.onos.core.matchaction.MatchActionOperations; |
| import net.onrc.onos.core.matchaction.MatchActionOperationsId; |
| import net.onrc.onos.core.matchaction.match.Match; |
| import net.onrc.onos.core.util.IdGenerator; |
| |
| /** |
| * An abstract class to define flow object which is managed by |
| * FlowManagerModule. |
| */ |
| public abstract class Flow implements BatchOperationTarget { |
| private final FlowId id; |
| |
| /** |
| * Default constructor for Kryo deserialization. |
| */ |
| @Deprecated |
| protected Flow() { |
| id = null; |
| } |
| |
| /** |
| * Creates Flow object using specified ID. |
| * |
| * @param id the ID to be assigned |
| */ |
| public Flow(FlowId id) { |
| this.id = checkNotNull(id); |
| } |
| |
| /** |
| * Gets ID for this flow object. |
| * |
| * @return ID for this object |
| */ |
| public FlowId getId() { |
| return id; |
| } |
| |
| /** |
| * Gets traffic filter for this flow object. |
| * |
| * @return a traffic filter for this flow object |
| */ |
| public abstract Match getMatch(); |
| |
| /** |
| * Compiles this object to MatchAction operations. |
| * <p> |
| * This method is called by FlowManagerModule to create MatchAction |
| * operations. |
| * |
| * @param op {@link FlowBatchOperation}'s operator to be used for compiling |
| * this object |
| * @param maIdGenerator ID generator to be used for generating MatchAction |
| * objects. |
| * @param maoIdGenerator ID generator to be used for generating |
| * {@link MatchActionOperations} objects. |
| * @return a list of {@link MatchActionOperations} objects to realize this |
| * flow |
| */ |
| public abstract List<MatchActionOperations> compile( |
| FlowBatchOperation.Operator op, |
| IdGenerator<MatchActionId> maIdGenerator, |
| IdGenerator<MatchActionOperationsId> maoIdGenerator); |
| |
| /** |
| * Generates a hash code using the FlowId. |
| * |
| * @return hashcode |
| */ |
| @Override |
| public int hashCode() { |
| return (id == null) ? 0 : id.hashCode(); |
| } |
| |
| /** |
| * Compares two flow objects by type (class) and FlowId. |
| * |
| * @param obj other Flow object |
| * @return true if equal, false otherwise |
| */ |
| @Override |
| public boolean equals(Object obj) { |
| if (this == obj) { |
| return true; |
| } |
| if (!(obj instanceof Flow)) { |
| return false; |
| } |
| Flow other = (Flow) obj; |
| if (id == null) { |
| if (other.id != null) { |
| return false; |
| } |
| } else if (!id.equals(other.id)) { |
| return false; |
| } |
| return true; |
| } |
| } |