Add a project admin screen to show the projects you own
Signed-off-by: Shawn O. Pearce <sop@google.com>
This commit is contained in:
@@ -30,6 +30,8 @@
|
|||||||
class='com.google.gerrit.server.GroupAdminServiceSrv'/>
|
class='com.google.gerrit.server.GroupAdminServiceSrv'/>
|
||||||
<servlet path='/rpc/PatchDetailService'
|
<servlet path='/rpc/PatchDetailService'
|
||||||
class='com.google.gerrit.server.PatchDetailServiceSrv'/>
|
class='com.google.gerrit.server.PatchDetailServiceSrv'/>
|
||||||
|
<servlet path='/rpc/ProjectAdminService'
|
||||||
|
class='com.google.gerrit.server.ProjectAdminServiceSrv'/>
|
||||||
<servlet path='/rpc/SuggestService'
|
<servlet path='/rpc/SuggestService'
|
||||||
class='com.google.gerrit.server.SuggestServiceSrv'/>
|
class='com.google.gerrit.server.SuggestServiceSrv'/>
|
||||||
<servlet path='/rpc/SystemInfoService'
|
<servlet path='/rpc/SystemInfoService'
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import com.google.gerrit.client.account.AccountSettings;
|
|||||||
import com.google.gerrit.client.account.NewAgreementScreen;
|
import com.google.gerrit.client.account.NewAgreementScreen;
|
||||||
import com.google.gerrit.client.admin.AccountGroupScreen;
|
import com.google.gerrit.client.admin.AccountGroupScreen;
|
||||||
import com.google.gerrit.client.admin.GroupListScreen;
|
import com.google.gerrit.client.admin.GroupListScreen;
|
||||||
|
import com.google.gerrit.client.admin.ProjectListScreen;
|
||||||
import com.google.gerrit.client.changes.AccountDashboardScreen;
|
import com.google.gerrit.client.changes.AccountDashboardScreen;
|
||||||
import com.google.gerrit.client.changes.ChangeScreen;
|
import com.google.gerrit.client.changes.ChangeScreen;
|
||||||
import com.google.gerrit.client.changes.MineStarredScreen;
|
import com.google.gerrit.client.changes.MineStarredScreen;
|
||||||
@@ -29,6 +30,7 @@ import com.google.gerrit.client.reviewdb.Account;
|
|||||||
import com.google.gerrit.client.reviewdb.AccountGroup;
|
import com.google.gerrit.client.reviewdb.AccountGroup;
|
||||||
import com.google.gerrit.client.reviewdb.Change;
|
import com.google.gerrit.client.reviewdb.Change;
|
||||||
import com.google.gerrit.client.reviewdb.Patch;
|
import com.google.gerrit.client.reviewdb.Patch;
|
||||||
|
import com.google.gerrit.client.reviewdb.Project;
|
||||||
import com.google.gerrit.client.rpc.RpcUtil;
|
import com.google.gerrit.client.rpc.RpcUtil;
|
||||||
import com.google.gerrit.client.ui.Screen;
|
import com.google.gerrit.client.ui.Screen;
|
||||||
import com.google.gwt.core.client.GWT;
|
import com.google.gwt.core.client.GWT;
|
||||||
@@ -86,6 +88,10 @@ public class Link implements HistoryListener {
|
|||||||
return "admin,group," + id.toString();
|
return "admin,group," + id.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String toProjectAdmin(final Project.Id id) {
|
||||||
|
return "admin,project," + id.toString();
|
||||||
|
}
|
||||||
|
|
||||||
public void onHistoryChanged(final String token) {
|
public void onHistoryChanged(final String token) {
|
||||||
Screen s;
|
Screen s;
|
||||||
try {
|
try {
|
||||||
@@ -150,6 +156,10 @@ public class Link implements HistoryListener {
|
|||||||
if (ADMIN_GROUPS.equals(token)) {
|
if (ADMIN_GROUPS.equals(token)) {
|
||||||
return new GroupListScreen();
|
return new GroupListScreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ADMIN_PROJECTS.equals(token)) {
|
||||||
|
return new ProjectListScreen();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -37,4 +37,5 @@ public interface AdminConstants extends Constants {
|
|||||||
String columnGroupDescription();
|
String columnGroupDescription();
|
||||||
|
|
||||||
String groupListTitle();
|
String groupListTitle();
|
||||||
|
String projectListTitle();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,3 +18,4 @@ columnGroupName = Name
|
|||||||
columnGroupDescription = Description
|
columnGroupDescription = Description
|
||||||
|
|
||||||
groupListTitle = Groups
|
groupListTitle = Groups
|
||||||
|
projectListTitle = Projects
|
||||||
|
|||||||
@@ -0,0 +1,39 @@
|
|||||||
|
// Copyright 2008 Google Inc.
|
||||||
|
//
|
||||||
|
// 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.reviewdb.Project;
|
||||||
|
import com.google.gerrit.client.rpc.SignInRequired;
|
||||||
|
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||||
|
import com.google.gwtjsonrpc.client.RemoteJsonService;
|
||||||
|
import com.google.gwtjsonrpc.client.VoidResult;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface ProjectAdminService extends RemoteJsonService {
|
||||||
|
@SignInRequired
|
||||||
|
void ownedProjects(AsyncCallback<List<Project>> callback);
|
||||||
|
|
||||||
|
@SignInRequired
|
||||||
|
void projectDetail(Project.Id projectId, AsyncCallback<ProjectDetail> callback);
|
||||||
|
|
||||||
|
@SignInRequired
|
||||||
|
void changeProjectDescription(Project.Id projectId, String description,
|
||||||
|
AsyncCallback<VoidResult> callback);
|
||||||
|
|
||||||
|
@SignInRequired
|
||||||
|
void changeProjectOwner(Project.Id projectId, String newOwnerName,
|
||||||
|
AsyncCallback<VoidResult> callback);
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
// Copyright 2008 Google Inc.
|
||||||
|
//
|
||||||
|
// 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.reviewdb.AccountGroup;
|
||||||
|
import com.google.gerrit.client.reviewdb.Project;
|
||||||
|
import com.google.gerrit.client.reviewdb.ReviewDb;
|
||||||
|
import com.google.gwtorm.client.OrmException;
|
||||||
|
|
||||||
|
public class ProjectDetail {
|
||||||
|
protected Project project;
|
||||||
|
protected AccountGroup ownerGroup;
|
||||||
|
|
||||||
|
public ProjectDetail() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void load(final ReviewDb db, final Project g) throws OrmException {
|
||||||
|
project = g;
|
||||||
|
ownerGroup = db.accountGroups().get(project.getOwnerGroupId());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,122 @@
|
|||||||
|
// Copyright 2008 Google Inc.
|
||||||
|
//
|
||||||
|
// 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.Link;
|
||||||
|
import com.google.gerrit.client.reviewdb.Project;
|
||||||
|
import com.google.gerrit.client.rpc.GerritCallback;
|
||||||
|
import com.google.gerrit.client.ui.AccountScreen;
|
||||||
|
import com.google.gerrit.client.ui.FancyFlexTable;
|
||||||
|
import com.google.gwt.user.client.History;
|
||||||
|
import com.google.gwt.user.client.ui.Hyperlink;
|
||||||
|
import com.google.gwt.user.client.ui.Label;
|
||||||
|
import com.google.gwt.user.client.ui.SourcesTableEvents;
|
||||||
|
import com.google.gwt.user.client.ui.TableListener;
|
||||||
|
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||||
|
import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class ProjectListScreen extends AccountScreen {
|
||||||
|
private ProjectTable projects;
|
||||||
|
|
||||||
|
public ProjectListScreen() {
|
||||||
|
super(Util.C.projectListTitle());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getScreenCacheToken() {
|
||||||
|
return getClass();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoad() {
|
||||||
|
if (projects == null) {
|
||||||
|
initUI();
|
||||||
|
}
|
||||||
|
|
||||||
|
Util.PROJECT_SVC.ownedProjects(new GerritCallback<List<Project>>() {
|
||||||
|
public void onSuccess(final List<Project> result) {
|
||||||
|
if (isAttached()) {
|
||||||
|
projects.display(result);
|
||||||
|
projects.finishDisplay(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initUI() {
|
||||||
|
projects = new ProjectTable();
|
||||||
|
projects.setSavePointerId(Link.ADMIN_PROJECTS);
|
||||||
|
add(projects);
|
||||||
|
|
||||||
|
final VerticalPanel fp = new VerticalPanel();
|
||||||
|
fp.setStyleName("gerrit-AddSshKeyPanel");
|
||||||
|
final Label hdr = new Label(Util.C.headingCreateGroup());
|
||||||
|
hdr.setStyleName("gerrit-SmallHeading");
|
||||||
|
fp.add(hdr);
|
||||||
|
}
|
||||||
|
|
||||||
|
private class ProjectTable extends FancyFlexTable<Project> {
|
||||||
|
ProjectTable() {
|
||||||
|
table.setText(0, 1, Util.C.columnGroupName());
|
||||||
|
table.setText(0, 2, Util.C.columnGroupDescription());
|
||||||
|
table.addTableListener(new TableListener() {
|
||||||
|
public void onCellClicked(SourcesTableEvents sender, int row, int cell) {
|
||||||
|
if (cell != 1 && getRowItem(row) != null) {
|
||||||
|
movePointerTo(row);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
final FlexCellFormatter fmt = table.getFlexCellFormatter();
|
||||||
|
fmt.addStyleName(0, 1, S_DATA_HEADER);
|
||||||
|
fmt.addStyleName(0, 2, S_DATA_HEADER);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Object getRowItemKey(final Project item) {
|
||||||
|
return item.getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onOpenItem(final Project item) {
|
||||||
|
History.newItem(Link.toProjectAdmin(item.getId()));
|
||||||
|
}
|
||||||
|
|
||||||
|
void display(final List<Project> result) {
|
||||||
|
while (1 < table.getRowCount())
|
||||||
|
table.removeRow(table.getRowCount() - 1);
|
||||||
|
|
||||||
|
for (final Project k : result) {
|
||||||
|
final int row = table.getRowCount();
|
||||||
|
table.insertRow(row);
|
||||||
|
populate(row, k);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void populate(final int row, final Project k) {
|
||||||
|
table.setWidget(row, 1, new Hyperlink(k.getName(), Link.toProjectAdmin(k
|
||||||
|
.getId())));
|
||||||
|
table.setText(row, 2, k.getDescription());
|
||||||
|
|
||||||
|
final FlexCellFormatter fmt = table.getFlexCellFormatter();
|
||||||
|
fmt.addStyleName(row, 1, S_DATA_CELL);
|
||||||
|
fmt.addStyleName(row, 2, S_DATA_CELL);
|
||||||
|
|
||||||
|
setRowItem(row, k);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -21,9 +21,13 @@ public class Util {
|
|||||||
public static final AdminConstants C = GWT.create(AdminConstants.class);
|
public static final AdminConstants C = GWT.create(AdminConstants.class);
|
||||||
public static final AdminMessages M = GWT.create(AdminMessages.class);
|
public static final AdminMessages M = GWT.create(AdminMessages.class);
|
||||||
public static final GroupAdminService GROUP_SVC;
|
public static final GroupAdminService GROUP_SVC;
|
||||||
|
public static final ProjectAdminService PROJECT_SVC;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
GROUP_SVC = GWT.create(GroupAdminService.class);
|
GROUP_SVC = GWT.create(GroupAdminService.class);
|
||||||
JsonUtil.bind(GROUP_SVC, "rpc/GroupAdminService");
|
JsonUtil.bind(GROUP_SVC, "rpc/GroupAdminService");
|
||||||
|
|
||||||
|
PROJECT_SVC = GWT.create(ProjectAdminService.class);
|
||||||
|
JsonUtil.bind(PROJECT_SVC, "rpc/ProjectAdminService");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,6 +31,9 @@ public interface ProjectAccess extends Access<Project, Project.NameKey> {
|
|||||||
@Query("ORDER BY name")
|
@Query("ORDER BY name")
|
||||||
ResultSet<Project> all() throws OrmException;
|
ResultSet<Project> all() throws OrmException;
|
||||||
|
|
||||||
|
@Query("WHERE ownerGroupId = ?")
|
||||||
|
ResultSet<Project> ownedByGroup(AccountGroup.Id groupId) throws OrmException;
|
||||||
|
|
||||||
@Query("WHERE name.name >= ? AND name.name <= ? ORDER BY name LIMIT ?")
|
@Query("WHERE name.name >= ? AND name.name <= ? ORDER BY name LIMIT ?")
|
||||||
ResultSet<Project> suggestByName(String nameA, String nameB, int limit)
|
ResultSet<Project> suggestByName(String nameA, String nameB, int limit)
|
||||||
throws OrmException;
|
throws OrmException;
|
||||||
|
|||||||
@@ -0,0 +1,151 @@
|
|||||||
|
// Copyright 2008 Google Inc.
|
||||||
|
//
|
||||||
|
// 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.server;
|
||||||
|
|
||||||
|
import com.google.gerrit.client.admin.ProjectAdminService;
|
||||||
|
import com.google.gerrit.client.admin.ProjectDetail;
|
||||||
|
import com.google.gerrit.client.reviewdb.AccountGroup;
|
||||||
|
import com.google.gerrit.client.reviewdb.AccountGroupMember;
|
||||||
|
import com.google.gerrit.client.reviewdb.Project;
|
||||||
|
import com.google.gerrit.client.reviewdb.ReviewDb;
|
||||||
|
import com.google.gerrit.client.rpc.BaseServiceImplementation;
|
||||||
|
import com.google.gerrit.client.rpc.NoSuchEntityException;
|
||||||
|
import com.google.gerrit.client.rpc.RpcUtil;
|
||||||
|
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||||
|
import com.google.gwtjsonrpc.client.VoidResult;
|
||||||
|
import com.google.gwtorm.client.OrmException;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class ProjectAdminServiceImpl extends BaseServiceImplementation
|
||||||
|
implements ProjectAdminService {
|
||||||
|
private final AccountGroup.Id adminId;
|
||||||
|
|
||||||
|
public ProjectAdminServiceImpl(final GerritServer server) {
|
||||||
|
super(server.getDatabase());
|
||||||
|
adminId = server.getAdminGroupId();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ownedProjects(final AsyncCallback<List<Project>> callback) {
|
||||||
|
run(callback, new Action<List<Project>>() {
|
||||||
|
public List<Project> run(ReviewDb db) throws OrmException {
|
||||||
|
final List<Project> result;
|
||||||
|
if (amAdmin(db)) {
|
||||||
|
result = db.projects().all().toList();
|
||||||
|
} else {
|
||||||
|
result = myOwnedProjects(db);
|
||||||
|
Collections.sort(result, new Comparator<Project>() {
|
||||||
|
public int compare(final Project a, final Project b) {
|
||||||
|
return a.getName().compareTo(b.getName());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void projectDetail(final Project.Id projectId,
|
||||||
|
final AsyncCallback<ProjectDetail> callback) {
|
||||||
|
run(callback, new Action<ProjectDetail>() {
|
||||||
|
public ProjectDetail run(ReviewDb db) throws OrmException, Failure {
|
||||||
|
assertAmProjectOwner(db, projectId);
|
||||||
|
final Project proj = db.projects().get(projectId);
|
||||||
|
if (proj == null) {
|
||||||
|
throw new Failure(new NoSuchEntityException());
|
||||||
|
}
|
||||||
|
|
||||||
|
final ProjectDetail d = new ProjectDetail();
|
||||||
|
d.load(db, proj);
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void changeProjectDescription(final Project.Id projectId,
|
||||||
|
final String description, final AsyncCallback<VoidResult> callback) {
|
||||||
|
run(callback, new Action<VoidResult>() {
|
||||||
|
public VoidResult run(final ReviewDb db) throws OrmException, Failure {
|
||||||
|
assertAmProjectOwner(db, projectId);
|
||||||
|
final Project proj = db.projects().get(projectId);
|
||||||
|
if (proj == null) {
|
||||||
|
throw new Failure(new NoSuchEntityException());
|
||||||
|
}
|
||||||
|
proj.setDescription(description);
|
||||||
|
db.projects().update(Collections.singleton(proj));
|
||||||
|
return VoidResult.INSTANCE;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void changeProjectOwner(final Project.Id projectId,
|
||||||
|
final String newOwnerName, final AsyncCallback<VoidResult> callback) {
|
||||||
|
run(callback, new Action<VoidResult>() {
|
||||||
|
public VoidResult run(final ReviewDb db) throws OrmException, Failure {
|
||||||
|
assertAmProjectOwner(db, projectId);
|
||||||
|
final Project project = db.projects().get(projectId);
|
||||||
|
if (project == null) {
|
||||||
|
throw new Failure(new NoSuchEntityException());
|
||||||
|
}
|
||||||
|
|
||||||
|
final AccountGroup owner =
|
||||||
|
db.accountGroups().get(new AccountGroup.NameKey(newOwnerName));
|
||||||
|
if (owner == null) {
|
||||||
|
throw new Failure(new NoSuchEntityException());
|
||||||
|
}
|
||||||
|
|
||||||
|
project.setOwnerGroupId(owner.getId());
|
||||||
|
db.projects().update(Collections.singleton(project));
|
||||||
|
return VoidResult.INSTANCE;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean amInGroup(final ReviewDb db,
|
||||||
|
final AccountGroup.Id groupId) throws OrmException {
|
||||||
|
return db.accountGroupMembers().get(
|
||||||
|
new AccountGroupMember.Key(RpcUtil.getAccountId(), groupId)) != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean amAdmin(final ReviewDb db) throws OrmException {
|
||||||
|
return adminId != null && amInGroup(db, adminId);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void assertAmProjectOwner(final ReviewDb db,
|
||||||
|
final Project.Id projectId) throws OrmException, Failure {
|
||||||
|
final Project project = db.projects().get(projectId);
|
||||||
|
if (project == null) {
|
||||||
|
throw new Failure(new NoSuchEntityException());
|
||||||
|
}
|
||||||
|
if (!amInGroup(db, project.getOwnerGroupId()) && !amAdmin(db)) {
|
||||||
|
throw new Failure(new NoSuchEntityException());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static List<Project> myOwnedProjects(final ReviewDb db)
|
||||||
|
throws OrmException {
|
||||||
|
final List<Project> own = new ArrayList<Project>();
|
||||||
|
for (final AccountGroupMember m : db.accountGroupMembers().byAccount(
|
||||||
|
RpcUtil.getAccountId()).toList()) {
|
||||||
|
for (final Project g : db.projects().ownedByGroup(m.getAccountGroupId())) {
|
||||||
|
own.add(g);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return own;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
// Copyright 2008 Google Inc.
|
||||||
|
//
|
||||||
|
// 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.server;
|
||||||
|
|
||||||
|
|
||||||
|
/** Publishes {@link ProjectAdminServiceImpl} over JSON. */
|
||||||
|
public class ProjectAdminServiceSrv extends GerritJsonServlet {
|
||||||
|
@Override
|
||||||
|
protected Object createServiceHandle() throws Exception {
|
||||||
|
return new ProjectAdminServiceImpl(GerritServer.getInstance());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -122,6 +122,16 @@
|
|||||||
<servlet-mapping>
|
<servlet-mapping>
|
||||||
<servlet-name>PatchDetailService</servlet-name>
|
<servlet-name>PatchDetailService</servlet-name>
|
||||||
<url-pattern>/rpc/PatchDetailService</url-pattern>
|
<url-pattern>/rpc/PatchDetailService</url-pattern>
|
||||||
|
|
||||||
|
<servlet>
|
||||||
|
<servlet-name>ProjectAdminService</servlet-name>
|
||||||
|
<servlet-class>com.google.gerrit.server.ProjectAdminServiceSrv</servlet-class>
|
||||||
|
<load-on-startup>1</load-on-startup>
|
||||||
|
</servlet>
|
||||||
|
<servlet-mapping>
|
||||||
|
<servlet-name>ProjectAdminService</servlet-name>
|
||||||
|
<url-pattern>/rpc/ProjectAdminService</url-pattern>
|
||||||
|
</servlet-mapping>
|
||||||
</servlet-mapping>
|
</servlet-mapping>
|
||||||
|
|
||||||
<servlet>
|
<servlet>
|
||||||
|
|||||||
Reference in New Issue
Block a user