Fix for bug ONOS-897:

Add support for specifying flow entry priority.
Now the default priority is 32768 (same as NOX)

The priority can be specified by add_flow.py script with the
"priority <flowPriority>" keyword.

Conflicts:

	src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowDatabaseOperation.java
	src/main/java/net/onrc/onos/ofcontroller/flowprogrammer/FlowPusher.java
	src/test/java/net/onrc/onos/ofcontroller/core/INetMapTopologyObjectsIFlowEntryTest.java
	src/test/java/net/onrc/onos/ofcontroller/core/INetMapTopologyObjectsIFlowPathTest.java
	src/test/java/net/onrc/onos/ofcontroller/core/internal/TestableGraphDBOperation.java
	src/test/java/net/onrc/onos/ofcontroller/util/FlowPathTest.java

NOTE: The conflicts in file FlowDatabaseOperation.java and FlowPusher.java
have been resolved by hand.
The rest of the conflicts are because of missing test files and have been
ignored.

Change-Id: Ia8291fa321d250675850942ea6763f3770af711f

Fix the formatting of the help string.

Change-Id: I95f4c64d6960f7d66db3821210277fc91c2239e1
diff --git a/web/add_flow.py b/web/add_flow.py
index 6ff250a..3066936 100755
--- a/web/add_flow.py
+++ b/web/add_flow.py
@@ -129,12 +129,13 @@
   my_dst_port = my_args[5]
 
   #
-  # Extract the "flowPathFlags", "idleTimeout", "hardTimeout",
+  # Extract the "flowPathFlags", "idleTimeout", "hardTimeout", "priority",
   # "match" and "action" arguments.
   #
   flowPathFlags = 0L
   idleTimeout = 0
   hardTimeout = 0
+  priority = 32768
   match = {}
   matchInPortEnabled = True		# NOTE: Enabled by default
   actions = []
@@ -162,6 +163,8 @@
      idleTimeout = arg2
     elif arg1 == "hardTimeout":
      hardTimeout = arg2
+    elif arg1 == "priority":
+     priority = arg2
     elif arg1 == "matchInPort":
       # Just mark whether inPort matching is enabled
       matchInPortEnabled = arg2 in ['True', 'true']
@@ -319,6 +322,7 @@
     'flowPathFlags' : flowPathFlags,
     'idleTimeout' : idleTimeout,
     'hardTimeout' : hardTimeout,
+    'priority' : priority,
     'match' : match,
     'matchInPortEnabled' : matchInPortEnabled,
     'actions' : actions,
@@ -345,6 +349,7 @@
   myFlowPathFlags = parsed_args['flowPathFlags']
   myIdleTimeout = parsed_args['idleTimeout']
   myHardTimeout = parsed_args['hardTimeout']
+  myPriority = parsed_args['priority']
   match = parsed_args['match']
   matchInPortEnabled = parsed_args['matchInPortEnabled']
   actions = parsed_args['actions']
@@ -369,6 +374,7 @@
   flow_path['flowPathFlags'] = flowPathFlags
   flow_path['idleTimeout'] = myIdleTimeout
   flow_path['hardTimeout'] = myHardTimeout
+  flow_path['priority'] = myPriority
 
   if (len(match) > 0):
     flow_path['flowEntryMatch'] = copy.deepcopy(match)
@@ -499,7 +505,7 @@
 
 
 if __name__ == "__main__":
-  usage_msg = "Usage: %s [Flags] <flow-id> <installer-id> <src-dpid> <src-port> <dest-dpid> <dest-port> [Flow Path Flags] [Match Conditions] [Actions]\n" % (sys.argv[0])
+  usage_msg = "Usage: %s [Flags] <flow-id> <installer-id> <src-dpid> <src-port> <dest-dpid> <dest-port> [Flow Attributes] [Match Conditions] [Actions]\n" % (sys.argv[0])
   usage_msg = usage_msg + "\n"
   usage_msg = usage_msg + "    <flow-id>             The Flow ID, or -1 if it should be assigned by ONOS\n"
   usage_msg = usage_msg + "\n"
@@ -512,16 +518,18 @@
   usage_msg = usage_msg + "        -f <filename>     Read the flow(s) to install from a file\n"
   usage_msg = usage_msg + "                          File format: one line per flow starting with <flow-id>\n"
   usage_msg = usage_msg + "\n"
-  usage_msg = usage_msg + "    Flow Path Flags:\n"
+  usage_msg = usage_msg + "    Flow Attributes:\n"
   usage_msg = usage_msg + "        flowPathFlags <Flags> (flag names separated by ',')\n"
-  usage_msg = usage_msg + "\n"
-  usage_msg = usage_msg + "        Known flags:\n"
+  usage_msg = usage_msg + "            Known flags:\n"
   usage_msg = usage_msg + "            DISCARD_FIRST_HOP_ENTRY    : Discard the first-hop flow entry\n"
   usage_msg = usage_msg + "            KEEP_ONLY_FIRST_HOP_ENTRY  : Keep only the first-hop flow entry\n"
   usage_msg = usage_msg + "\n"
-  usage_msg = usage_msg + "    Timeouts (in seconds in the [0, 65535] interval):\n"
-  usage_msg = usage_msg + "        idleTimeout <idleTimeoutInSeconds> (default to 0: no timeout)\n"
-  usage_msg = usage_msg + "        hardTimeout <hardTimeoutInSeconds> (default to 0: no timeout)\n"
+  usage_msg = usage_msg + "        idleTimeout <idleTimeoutInSeconds> (in the [0, 65535] interval;\n"
+  usage_msg = usage_msg + "                                            default to 0: no timeout)\n"
+  usage_msg = usage_msg + "        hardTimeout <hardTimeoutInSeconds> (in the [0, 65535] interval;\n"
+  usage_msg = usage_msg + "                                            default to 0: no timeout)\n"
+  usage_msg = usage_msg + "\n"
+  usage_msg = usage_msg + "        priority <flowPriority> (in the [0, 65535] interval; default to 32768)\n"
   usage_msg = usage_msg + "\n"
   usage_msg = usage_msg + "    Match Conditions:\n"
   usage_msg = usage_msg + "        matchInPort <True|False> (default to True)\n"