Projects UI: Factor common code out to PaginatedProjectScreen
Change-Id: Ic2615fb996bb29fb77f0337143baa5f56d7e3efe
This commit is contained in:
		@@ -0,0 +1,76 @@
 | 
			
		||||
// 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.client.admin;
 | 
			
		||||
 | 
			
		||||
import com.google.gerrit.client.Gerrit;
 | 
			
		||||
import com.google.gerrit.client.ui.Hyperlink;
 | 
			
		||||
import com.google.gerrit.reviewdb.client.Project;
 | 
			
		||||
import com.google.gwt.http.client.URL;
 | 
			
		||||
 | 
			
		||||
abstract class PaginatedProjectScreen extends ProjectScreen {
 | 
			
		||||
  protected int pageSize;
 | 
			
		||||
  protected String match;
 | 
			
		||||
  protected int start;
 | 
			
		||||
 | 
			
		||||
  PaginatedProjectScreen(Project.NameKey toShow) {
 | 
			
		||||
    super(toShow);
 | 
			
		||||
    pageSize = Gerrit.getUserPreferences().changesPerPage();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  protected void parseToken(String token) {
 | 
			
		||||
    for (String kvPair : token.split("[,;&/?]")) {
 | 
			
		||||
      String[] kv = kvPair.split("=", 2);
 | 
			
		||||
      if (kv.length != 2 || kv[0].isEmpty()) {
 | 
			
		||||
        continue;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if ("filter".equals(kv[0])) {
 | 
			
		||||
        match = URL.decodeQueryString(kv[1]);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if ("skip".equals(kv[0])
 | 
			
		||||
          && URL.decodeQueryString(kv[1]).matches("^[\\d]+")) {
 | 
			
		||||
        start = Integer.parseInt(URL.decodeQueryString(kv[1]));
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  protected void parseToken() {
 | 
			
		||||
    parseToken(getToken());
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  protected String getTokenForScreen(String filter, int skip) {
 | 
			
		||||
    String token = getScreenToken();
 | 
			
		||||
    if (filter != null && !filter.isEmpty()) {
 | 
			
		||||
      token += "?filter=" + URL.encodeQueryString(filter);
 | 
			
		||||
    }
 | 
			
		||||
    if (skip > 0) {
 | 
			
		||||
      if (token.contains("?filter=")) {
 | 
			
		||||
        token += ",";
 | 
			
		||||
      } else {
 | 
			
		||||
        token += "?";
 | 
			
		||||
      }
 | 
			
		||||
      token += "skip=" + skip;
 | 
			
		||||
    }
 | 
			
		||||
    return token;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  protected abstract String getScreenToken();
 | 
			
		||||
 | 
			
		||||
  protected void setupNavigationLink(Hyperlink link, String filter, int skip) {
 | 
			
		||||
    link.setTargetHistoryToken(getTokenForScreen(filter, skip));
 | 
			
		||||
    link.setVisible(true);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -53,7 +53,6 @@ import com.google.gwt.event.dom.client.KeyUpEvent;
 | 
			
		||||
import com.google.gwt.event.dom.client.KeyUpHandler;
 | 
			
		||||
import com.google.gwt.event.logical.shared.ValueChangeEvent;
 | 
			
		||||
import com.google.gwt.event.logical.shared.ValueChangeHandler;
 | 
			
		||||
import com.google.gwt.http.client.URL;
 | 
			
		||||
import com.google.gwt.user.client.ui.Anchor;
 | 
			
		||||
import com.google.gwt.user.client.ui.Button;
 | 
			
		||||
import com.google.gwt.user.client.ui.CheckBox;
 | 
			
		||||
@@ -74,7 +73,7 @@ import java.util.HashSet;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
public class ProjectBranchesScreen extends ProjectScreen {
 | 
			
		||||
public class ProjectBranchesScreen extends PaginatedProjectScreen {
 | 
			
		||||
  private Hyperlink prev;
 | 
			
		||||
  private Hyperlink next;
 | 
			
		||||
  private BranchesTable branchTable;
 | 
			
		||||
@@ -83,56 +82,16 @@ public class ProjectBranchesScreen extends ProjectScreen {
 | 
			
		||||
  private HintTextBox nameTxtBox;
 | 
			
		||||
  private HintTextBox irevTxtBox;
 | 
			
		||||
  private FlowPanel addPanel;
 | 
			
		||||
  private int pageSize;
 | 
			
		||||
  private int start;
 | 
			
		||||
  private NpTextBox filterTxt;
 | 
			
		||||
  private String match;
 | 
			
		||||
  private Query query;
 | 
			
		||||
 | 
			
		||||
  public ProjectBranchesScreen(final Project.NameKey toShow) {
 | 
			
		||||
    super(toShow);
 | 
			
		||||
    pageSize = Gerrit.getUserPreferences().changesPerPage();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private void parseToken() {
 | 
			
		||||
    String token = getToken();
 | 
			
		||||
 | 
			
		||||
    for (String kvPair : token.split("[,;&/?]")) {
 | 
			
		||||
      String[] kv = kvPair.split("=", 2);
 | 
			
		||||
      if (kv.length != 2 || kv[0].isEmpty()) {
 | 
			
		||||
        continue;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if ("filter".equals(kv[0])) {
 | 
			
		||||
        match = URL.decodeQueryString(kv[1]);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if ("skip".equals(kv[0])
 | 
			
		||||
          && URL.decodeQueryString(kv[1]).matches("^[\\d]+")) {
 | 
			
		||||
        start = Integer.parseInt(URL.decodeQueryString(kv[1]));
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private void setupNavigationLink(Hyperlink link, String filter, int skip) {
 | 
			
		||||
    link.setTargetHistoryToken(getTokenForScreen(filter, skip));
 | 
			
		||||
    link.setVisible(true);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private String getTokenForScreen(String filter, int skip) {
 | 
			
		||||
    String token = PageLinks.toProjectBranches(getProjectKey());
 | 
			
		||||
    if (filter != null && !filter.isEmpty()) {
 | 
			
		||||
      token += "?filter=" + URL.encodeQueryString(filter);
 | 
			
		||||
    }
 | 
			
		||||
    if (skip > 0) {
 | 
			
		||||
      if (token.contains("?filter=")) {
 | 
			
		||||
        token += ",";
 | 
			
		||||
      } else {
 | 
			
		||||
        token += "?";
 | 
			
		||||
      }
 | 
			
		||||
      token += "skip=" + skip;
 | 
			
		||||
    }
 | 
			
		||||
    return token;
 | 
			
		||||
  @Override
 | 
			
		||||
  public String getScreenToken() {
 | 
			
		||||
    return PageLinks.toProjectBranches(getProjectKey());
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Override
 | 
			
		||||
 
 | 
			
		||||
@@ -28,12 +28,10 @@ import com.google.gerrit.client.ui.HighlightingInlineHyperlink;
 | 
			
		||||
import com.google.gerrit.client.ui.Hyperlink;
 | 
			
		||||
import com.google.gerrit.client.ui.ProjectSearchLink;
 | 
			
		||||
import com.google.gerrit.client.ui.ProjectsTable;
 | 
			
		||||
import com.google.gerrit.client.ui.Screen;
 | 
			
		||||
import com.google.gerrit.common.PageLinks;
 | 
			
		||||
import com.google.gwt.event.dom.client.KeyCodes;
 | 
			
		||||
import com.google.gwt.event.dom.client.KeyUpEvent;
 | 
			
		||||
import com.google.gwt.event.dom.client.KeyUpHandler;
 | 
			
		||||
import com.google.gwt.http.client.URL;
 | 
			
		||||
import com.google.gwt.user.client.History;
 | 
			
		||||
import com.google.gwt.user.client.ui.Anchor;
 | 
			
		||||
import com.google.gwt.user.client.ui.FlowPanel;
 | 
			
		||||
@@ -44,37 +42,21 @@ import com.google.gwtexpui.globalkey.client.NpTextBox;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
public class ProjectListScreen extends Screen {
 | 
			
		||||
public class ProjectListScreen extends PaginatedProjectScreen {
 | 
			
		||||
  private Hyperlink prev;
 | 
			
		||||
  private Hyperlink next;
 | 
			
		||||
  private ProjectsTable projects;
 | 
			
		||||
  private NpTextBox filterTxt;
 | 
			
		||||
  private int pageSize;
 | 
			
		||||
 | 
			
		||||
  private String match = "";
 | 
			
		||||
  private int start;
 | 
			
		||||
  private Query query;
 | 
			
		||||
 | 
			
		||||
  public ProjectListScreen() {
 | 
			
		||||
    pageSize = Gerrit.getUserPreferences().changesPerPage();
 | 
			
		||||
    super(null);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public ProjectListScreen(String params) {
 | 
			
		||||
    this();
 | 
			
		||||
    for (String kvPair : params.split("[,;&]")) {
 | 
			
		||||
      String[] kv = kvPair.split("=", 2);
 | 
			
		||||
      if (kv.length != 2 || kv[0].isEmpty()) {
 | 
			
		||||
        continue;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if ("filter".equals(kv[0])) {
 | 
			
		||||
        match = URL.decodeQueryString(kv[1]);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if ("skip".equals(kv[0]) && URL.decodeQueryString(kv[1]).matches("^[\\d]+")) {
 | 
			
		||||
        start = Integer.parseInt(URL.decodeQueryString(kv[1]));
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    parseToken(params);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Override
 | 
			
		||||
@@ -83,25 +65,9 @@ public class ProjectListScreen extends Screen {
 | 
			
		||||
    query = new Query(match).start(start).run();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private void setupNavigationLink(Hyperlink link, String filter, int skip) {
 | 
			
		||||
    link.setTargetHistoryToken(getTokenForScreen(filter, skip));
 | 
			
		||||
    link.setVisible(true);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private String getTokenForScreen(String filter, int skip) {
 | 
			
		||||
    String token = ADMIN_PROJECTS;
 | 
			
		||||
    if (filter != null && !filter.isEmpty()) {
 | 
			
		||||
      token += "?filter=" + URL.encodeQueryString(filter);
 | 
			
		||||
    }
 | 
			
		||||
    if (skip > 0) {
 | 
			
		||||
      if (token.contains("?filter=")) {
 | 
			
		||||
        token += ",";
 | 
			
		||||
      } else {
 | 
			
		||||
        token += "?";
 | 
			
		||||
      }
 | 
			
		||||
      token += "skip=" + skip;
 | 
			
		||||
    }
 | 
			
		||||
    return token;
 | 
			
		||||
  @Override
 | 
			
		||||
  public String getScreenToken() {
 | 
			
		||||
    return ADMIN_PROJECTS;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Override
 | 
			
		||||
 
 | 
			
		||||
@@ -47,7 +47,9 @@ public abstract class ProjectScreen extends Screen {
 | 
			
		||||
  @Override
 | 
			
		||||
  protected void onInitUI() {
 | 
			
		||||
    super.onInitUI();
 | 
			
		||||
    setPageTitle(Util.M.project(name.get()));
 | 
			
		||||
    if (name != null) {
 | 
			
		||||
      setPageTitle(Util.M.project(name.get()));
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Override
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user