--- /dev/null
+
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.forwardingrulesmanager;
+
+import org.apache.commons.lang3.builder.EqualsBuilder;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import org.opendaylight.controller.sal.core.ContainerFlow;
+import org.opendaylight.controller.sal.core.Node;
+
+/**
+ * The flow database object representing the flow entry to install on
+ * the network node. It contains the original flow entry FRM was
+ * requested to install, the container flow with which that entry had
+ * to be merged and the resultant merged flow entry, which is the
+ * one that was eventually installed on the network node
+ *
+ * Note: If the container flow is null, the install entry will be a clone
+ * of the original entry
+ *
+ */
+public class FlowEntryInstall {
+ private FlowEntry original;
+ private ContainerFlow cFlow;
+ private FlowEntry install;
+ transient private boolean deletePending;
+
+ public FlowEntryInstall(FlowEntry original, ContainerFlow cFlow) {
+ this.original = original;
+ this.cFlow = cFlow;
+ this.install = (cFlow == null) ? original.clone() : original
+ .mergeWith(cFlow);
+ deletePending = false;
+ }
+
+ @Override
+ public int hashCode() {
+ return HashCodeBuilder.reflectionHashCode(this);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ return EqualsBuilder.reflectionEquals(this, obj);
+ }
+
+ public String getFlowName() {
+ return original.getFlowName();
+ }
+
+ public String getGroupName() {
+ return original.getGroupName();
+ }
+
+ public Node getNode() {
+ return original.getNode();
+ }
+
+ public boolean equalsByNodeAndName(Node node, String flowName) {
+ return original.equalsByNodeAndName(node, flowName);
+ }
+
+ public FlowEntry getOriginal() {
+ return original;
+ }
+
+ public ContainerFlow getContainerFlow() {
+ return cFlow;
+ }
+
+ public FlowEntry getInstall() {
+ return install;
+ }
+
+ public boolean isDeletePending() {
+ return deletePending;
+ }
+
+ public void toBeDeleted() {
+ this.deletePending = true;
+ }
+
+ @Override
+ public String toString() {
+ return "[Install = " + install + " Original: " + original + " cFlow: "
+ + cFlow + "]";
+ }
+}