TopMenu: Extract MenuItem in its own class and client package

This is a preparation change for replacing of AccountGeneralPreferences
entity with git backend. GET and PUT REST handlers for user preferences
accept and return MyMenu instances and store/read them to/from the git
backend. This is why this class wasn't added to
AccountGeneralPreferences that represents db backend. Now, that we are
moving all preferences to git backend it makes sense to keep all
attributes in one class. This location is the client package in
gerrit-extension project, as they must be part of GWT modulde.

Change-Id: I5b879c4fa690efa31976b5d65a31adbcc3f7a37c
diff --git a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/client/MenuItem.java b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/client/MenuItem.java
new file mode 100644
index 0000000..25377a5
--- /dev/null
+++ b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/client/MenuItem.java
@@ -0,0 +1,42 @@
+// Copyright (C) 2015 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.gerrit.extensions.client;
+
+public class MenuItem {
+  public final String url;
+  public final String name;
+  public final String target;
+  public final String id;
+
+  // Needed for GWT
+  public MenuItem() {
+    this(null, null, null, null);
+  }
+
+  public MenuItem(String name, String url) {
+    this(name, url, "_blank");
+  }
+
+  public MenuItem(String name, String url, String target) {
+    this(name, url, target, null);
+  }
+
+  public MenuItem(String name, String url, String target, String id) {
+    this.url = url;
+    this.name = name;
+    this.target = target;
+    this.id = id;
+  }
+}
diff --git a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/webui/TopMenu.java b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/webui/TopMenu.java
index ead7c31..bc41813 100644
--- a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/webui/TopMenu.java
+++ b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/webui/TopMenu.java
@@ -16,6 +16,7 @@
 
 import com.google.gerrit.extensions.annotations.ExtensionPoint;
 import com.google.gerrit.extensions.client.GerritTopMenu;
+import com.google.gerrit.extensions.client.MenuItem;
 
 import java.util.List;
 
@@ -35,27 +36,5 @@
     }
   }
 
-  public class MenuItem {
-    public final String url;
-    public final String name;
-    public final String target;
-    public final String id;
-
-    public MenuItem(String name, String url) {
-      this(name, url, "_blank");
-    }
-
-    public MenuItem(String name, String url, String target) {
-      this(name, url, target, null);
-    }
-
-    public MenuItem(String name, String url, String target, String id) {
-      this.url = url;
-      this.name = name;
-      this.target = target;
-      this.id = id;
-    }
-  }
-
   List<MenuEntry> getEntries();
 }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/account/GetPreferences.java b/gerrit-server/src/main/java/com/google/gerrit/server/account/GetPreferences.java
index 1ab8928..be743a4 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/account/GetPreferences.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/account/GetPreferences.java
@@ -15,10 +15,10 @@
 package com.google.gerrit.server.account;
 
 import com.google.common.base.Strings;
+import com.google.gerrit.extensions.client.MenuItem;
 import com.google.gerrit.extensions.restapi.AuthException;
 import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
 import com.google.gerrit.extensions.restapi.RestReadView;
-import com.google.gerrit.extensions.webui.TopMenu;
 import com.google.gerrit.reviewdb.client.Account;
 import com.google.gerrit.reviewdb.client.AccountGeneralPreferences;
 import com.google.gerrit.reviewdb.client.AccountGeneralPreferences.DateFormat;
@@ -114,7 +114,7 @@
     ReviewCategoryStrategy reviewCategoryStrategy;
     DiffView diffView;
     EmailStrategy emailStrategy;
-    List<TopMenu.MenuItem> my;
+    List<MenuItem> my;
     Map<String, String> urlAliases;
 
     public PreferenceInfo(AccountGeneralPreferences p,
@@ -151,26 +151,26 @@
         }
       }
       if (my.isEmpty()) {
-        my.add(new TopMenu.MenuItem("Changes", "#/dashboard/self", null));
-        my.add(new TopMenu.MenuItem("Drafts", "#/q/owner:self+is:draft", null));
-        my.add(new TopMenu.MenuItem("Draft Comments", "#/q/has:draft", null));
-        my.add(new TopMenu.MenuItem("Edits", "#/q/has:edit", null));
-        my.add(new TopMenu.MenuItem("Watched Changes", "#/q/is:watched+is:open", null));
-        my.add(new TopMenu.MenuItem("Starred Changes", "#/q/is:starred", null));
-        my.add(new TopMenu.MenuItem("Groups", "#/groups/self", null));
+        my.add(new MenuItem("Changes", "#/dashboard/self", null));
+        my.add(new MenuItem("Drafts", "#/q/owner:self+is:draft", null));
+        my.add(new MenuItem("Draft Comments", "#/q/has:draft", null));
+        my.add(new MenuItem("Edits", "#/q/has:edit", null));
+        my.add(new MenuItem("Watched Changes", "#/q/is:watched+is:open", null));
+        my.add(new MenuItem("Starred Changes", "#/q/is:starred", null));
+        my.add(new MenuItem("Groups", "#/groups/self", null));
       }
 
       urlAliases = urlAliases(v);
     }
 
-    private List<TopMenu.MenuItem> my(VersionedAccountPreferences v) {
-      List<TopMenu.MenuItem> my = new ArrayList<>();
+    private List<MenuItem> my(VersionedAccountPreferences v) {
+      List<MenuItem> my = new ArrayList<>();
       Config cfg = v.getConfig();
       for (String subsection : cfg.getSubsections(UserConfigSections.MY)) {
         String url = my(cfg, subsection, KEY_URL, "#/");
         String target = my(cfg, subsection, KEY_TARGET,
             url.startsWith("#") ? null : "_blank");
-        my.add(new TopMenu.MenuItem(
+        my.add(new MenuItem(
             subsection, url, target,
             my(cfg, subsection, KEY_ID, null)));
       }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/account/SetPreferences.java b/gerrit-server/src/main/java/com/google/gerrit/server/account/SetPreferences.java
index 51c54ac..5d83c13 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/account/SetPreferences.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/account/SetPreferences.java
@@ -22,13 +22,13 @@
 import static com.google.gerrit.server.account.GetPreferences.URL_ALIAS;
 
 import com.google.common.base.Strings;
+import com.google.gerrit.extensions.client.MenuItem;
 import com.google.gerrit.extensions.config.DownloadScheme;
 import com.google.gerrit.extensions.registration.DynamicMap;
 import com.google.gerrit.extensions.restapi.AuthException;
 import com.google.gerrit.extensions.restapi.BadRequestException;
 import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
 import com.google.gerrit.extensions.restapi.RestModifyView;
-import com.google.gerrit.extensions.webui.TopMenu;
 import com.google.gerrit.reviewdb.client.Account;
 import com.google.gerrit.reviewdb.client.AccountGeneralPreferences;
 import com.google.gerrit.reviewdb.client.AccountGeneralPreferences.DateFormat;
@@ -74,7 +74,7 @@
     public ReviewCategoryStrategy reviewCategoryStrategy;
     public DiffView diffView;
     public EmailStrategy emailStrategy;
-    public List<TopMenu.MenuItem> my;
+    public List<MenuItem> my;
     public Map<String, String> urlAliases;
   }
 
@@ -188,11 +188,11 @@
   }
 
   public static void storeMyMenus(VersionedAccountPreferences prefs,
-      List<TopMenu.MenuItem> my) {
+      List<MenuItem> my) {
     Config cfg = prefs.getConfig();
     if (my != null) {
       unsetSection(cfg, UserConfigSections.MY);
-      for (TopMenu.MenuItem item : my) {
+      for (MenuItem item : my) {
         set(cfg, item.name, KEY_URL, item.url);
         set(cfg, item.name, KEY_TARGET, item.target);
         set(cfg, item.name, KEY_ID, item.id);