Make owners requirements explicit

Amend the notification on the change-screen making explicit
what is needed from who.

Example:
Needs Code-Review from owners
John Doe owns MyClass.java

Change-Id: Iafbb251d59779c9f081b0ee0f75b6a4cc4081faa
diff --git a/owners/src/main/java/gerrit_owners/PRED_file_owners_2.java b/owners/src/main/java/gerrit_owners/PRED_file_owners_2.java
index f62c446..6fd2459 100644
--- a/owners/src/main/java/gerrit_owners/PRED_file_owners_2.java
+++ b/owners/src/main/java/gerrit_owners/PRED_file_owners_2.java
@@ -34,6 +34,7 @@
 
 import java.io.File;
 import java.util.Map;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 /**
@@ -84,11 +85,12 @@
   public Term createFormattedList(Prolog engine, Term key) {
     String path = key.toString();
     PathOwners owners = OwnersStoredValues.PATH_OWNERS.get(engine);
-    String userNames =
-        iteratorStream(owners.getFileOwners().get(path).iterator())
-            .map(id -> getFullNameFromId(engine, id))
-            .collect(Collectors.joining(" "));
-    return SymbolTerm.create((new File(path)).getName()+" "+userNames);
+    Set<String> ownersNames =
+        iteratorStream(owners.getFileOwners().get(path).iterator()).map(
+            id -> getFullNameFromId(engine, id)).collect(Collectors.toSet());
+    String ownVerb = ownersNames.size() > 1 ? " own " : " owns ";
+    String userNames = ownersNames.stream().collect(Collectors.joining(", "));
+    return SymbolTerm.create(userNames + ownVerb + (new File(path)).getName());
   }
 
   private static IdentifiedUser.GenericFactory userFactory(Prolog engine) {
diff --git a/owners/src/main/prolog/gerrit_owners.pl b/owners/src/main/prolog/gerrit_owners.pl
index 89c0aec..8bec1fa 100644
--- a/owners/src/main/prolog/gerrit_owners.pl
+++ b/owners/src/main/prolog/gerrit_owners.pl
@@ -8,7 +8,7 @@
 add_owner_approval(In, Out) :-
   owner_path(Path),
   \+ owner_approved(Path),
-  Out = [label('Owner-Approval', need(_)) | In],
+  Out = [label('Code-Review from owners', need(_)) | In],
   !.
 
 add_owner_approval(In, Out) :- In = Out.
@@ -16,7 +16,7 @@
 add_owner_approval(Users, In, Out) :-
   owner_path(Path),
   \+ owner_approved(Users, Path),
-  Out = [label('Owner-Approval', need(_)) | In],
+  Out = [label('Code-Review from owners', need(_)) | In],
   !.
 
 add_owner_approval(_, In, Out) :- In = Out.
@@ -38,20 +38,20 @@
 findall_match_file_user(FileAndUser) :-
     matcher_path(F),
     findall(US,code_review_user(US),Approvers),
-    gerrit_owners:matcher_needed(Approvers,F,FileAndUser).
+    matcher_needed(Approvers,F,FileAndUser).
 
 code_review_user(U) :-
     gerrit:commit_label(label('Code-Review', 2), user(U)).
 
 % this loops over all the paths and if for any
 % we have some labels generated then add a single
-% Owner-Approval need to block submit button
+% Owner-Code-Review need to block submit button
 add_match_owner_approval(In,Out) :-
     matcher_path(P),
     findall(US,code_review_user(US),Approvers),
     matcher_needed(Approvers,P,W),
     \+ W == [],
-    Out = [label('Owner-Approval', need(_)) | In], !.
+    Out = [label('Code-Review from owners', need(_)) | In], !.
 
 add_match_owner_approval(In,Out) :- Out = In.