Renamed the intent package

net.onrc.onos.intent.* => net.onrc.onos.core.intent.*

Change-Id: Id61f79ed52acf3b91af4ebad2515ac5b7d6dc5e1
diff --git a/src/main/java/net/onrc/onos/core/intent/FlowEntry.java b/src/main/java/net/onrc/onos/core/intent/FlowEntry.java
new file mode 100644
index 0000000..7c9c696
--- /dev/null
+++ b/src/main/java/net/onrc/onos/core/intent/FlowEntry.java
@@ -0,0 +1,89 @@
+package net.onrc.onos.core.intent;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import net.floodlightcontroller.util.MACAddress;
+import net.onrc.onos.core.intent.IntentOperation.Operator;
+import net.onrc.onos.ofcontroller.util.Dpid;
+import net.onrc.onos.ofcontroller.util.FlowEntryActions;
+import net.onrc.onos.ofcontroller.util.FlowEntryId;
+import net.onrc.onos.ofcontroller.util.FlowEntryUserState;
+
+/**
+ * 
+ * @author Brian O'Connor <bocon@onlab.us>
+ *
+ */
+
+public class FlowEntry {
+	protected long sw;
+	protected Match match;
+	protected Set<Action> actions;
+	protected Operator operator;
+	
+	public FlowEntry(long sw, long srcPort, long dstPort, 
+			 MACAddress srcMac, MACAddress dstMac,
+			 Operator operator) {
+		this.sw = sw;
+		this.match = new Match(sw, srcPort, srcMac, dstMac);
+		this.actions = new HashSet<Action>();
+		this.actions.add(new ForwardAction(dstPort));
+		this.operator = operator;
+	}
+	
+	public String toString() {
+		return match + "->" + actions;
+	}
+	
+	public long getSwitch() {
+	    return sw;
+	}
+	
+	public Operator getOperator() {
+	    return operator;
+	}
+	
+	public void setOperator(Operator op) {
+	    operator = op;
+	}
+	
+	public net.onrc.onos.ofcontroller.util.FlowEntry getFlowEntry() {
+		net.onrc.onos.ofcontroller.util.FlowEntry entry = new net.onrc.onos.ofcontroller.util.FlowEntry();
+		entry.setDpid(new Dpid(sw));
+		entry.setFlowEntryId(new FlowEntryId(hashCode())); // naive, but useful for now
+		entry.setFlowEntryMatch(match.getFlowEntryMatch());
+		FlowEntryActions flowEntryActions = new FlowEntryActions();
+		for(Action action : actions) {
+		    flowEntryActions.addAction(action.getFlowEntryAction());
+		}
+		entry.setFlowEntryActions(flowEntryActions);
+		switch(operator) {
+		case ADD:
+		    entry.setFlowEntryUserState(FlowEntryUserState.FE_USER_MODIFY);
+		    break;
+		case REMOVE:
+		    entry.setFlowEntryUserState(FlowEntryUserState.FE_USER_DELETE);
+		    break;
+		default:
+		    break;
+		}
+		return entry;
+	}
+	
+	
+	public int hashCode() {
+	    return match.hashCode();
+	}
+	
+	public boolean equals(Object o) {
+	    if(!(o instanceof FlowEntry)) {
+		return false;
+	    }
+	    FlowEntry other = (FlowEntry) o;
+	    // Note: we should not consider the operator for this comparison
+	    return this.match.equals(other.match) 
+		&& this.actions.containsAll(other.actions)
+		&& other.actions.containsAll(this.actions);
+	}
+}