Skip to content

Commit

Permalink
dcache-webadmin: fix page update
Browse files Browse the repository at this point in the history
This patch addresses several RT tickets stemming from the same problem, one which has already been corrected for the CellServices page (see http://rb.dcache.org/r/5807).

This has to do with the way Wicket PropertyModels were provided for pages which maintain lists which need to be updated through the service layer.  In most of these cases, the list was set in the constructor but was never updated during page/form refresh.  The changes adopted here follow the same general pattern of replacing the field accessed by the model with a getter method which also takes care of calling the service to update the collection in question.

A separate patch will be needed for 2.6.

Testing:

Junit tests rerun.  Redeployed and checked updating by enabling/disabling pools.

RELEASE NOTES:
Fixes an issue with some of the tables in the webadmin service which were not refreshing.  Update correctly occurs now on reload, resubmission of the form through link clicking.

Target: master
Patch: http://rb.dcache.org/r/6080
Require-notes: yes
Require-book: no
Bug: http://rt.dcache.org/Ticket/Display.html?id=7929
Bug: http://rt.dcache.org/Ticket/Display.html?id=7964
Bug: http://rt.dcache.org/Ticket/Display.html?id=7983
Acked-by: Gerd
Acked-by: Tigran
  • Loading branch information
alrossi committed Oct 22, 2013
1 parent 681a67a commit 2d2b78e
Show file tree
Hide file tree
Showing 11 changed files with 131 additions and 101 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,11 @@ public void changePoolMode(List<PoolSpaceBean> pools, PoolV2Mode poolMode,
} catch (DAOException ex) {
throw new PoolSpaceServiceException(ex);
}
for (PoolSpaceBean pool: pools) {
if (poolIds.contains(pool.getName())) {
pool.setPoolMode(poolMode);
}
}
}

private Set<String> getSelectedIds(List<PoolSpaceBean> pools) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
package org.dcache.webadmin.view.pages.activetransfers;

import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.markup.head.OnLoadHeaderItem;
import org.apache.wicket.markup.head.StringHeaderItem;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.PropertyModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Collections;
import java.util.List;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.markup.head.OnLoadHeaderItem;
import org.apache.wicket.markup.head.StringHeaderItem;

import org.dcache.webadmin.controller.ActiveTransfersService;
import org.dcache.webadmin.controller.exceptions.ActiveTransfersServiceException;
Expand All @@ -26,7 +27,6 @@ public class ActiveTransfers extends BasePage {

private static final Logger _log = LoggerFactory.getLogger(ActiveTransfers.class);
private static final long serialVersionUID = -1360523434922193867L;
private List<SelectableWrapper<ActiveTransfersBean>> _activeTransfers;

public ActiveTransfers() {
Form activeTransfersForm = new Form("activeTransfersForm");
Expand All @@ -36,22 +36,22 @@ public ActiveTransfers() {
activeTransfersForm.add(button);
getActiveTransfers();
activeTransfersForm.add(new ActiveTransfersPanel("activeTransfersPanel",
new PropertyModel(this, "_activeTransfers")));
new PropertyModel(this, "activeTransfers")));
add(activeTransfersForm);
}

private ActiveTransfersService getActiveTransfersService() {
return getWebadminApplication().getActiveTransfersService();
}

private void getActiveTransfers() {
public List<SelectableWrapper<ActiveTransfersBean>> getActiveTransfers() {
try {
_log.debug("getActiveTransfers called");
_activeTransfers = getActiveTransfersService().getActiveTransferBeans();
return getActiveTransfersService().getActiveTransferBeans();
} catch (ActiveTransfersServiceException ex) {
this.error(getStringResource("error.getActiveTransfersFailed") + ex.getMessage());
_log.debug("getActiveTransfers failed {}", ex.getMessage());
_activeTransfers = null;
return Collections.emptyList();
}
}

Expand All @@ -67,7 +67,7 @@ public SubmitButton(String id) {
public void onSubmit() {
try {
_log.debug("Kill Movers submitted");
getActiveTransfersService().killTransfers(_activeTransfers);
getActiveTransfersService().killTransfers(getActiveTransfers());
} catch (ActiveTransfersServiceException e) {
_log.info("couldn't kill some movers - jobIds: {}",
e.getMessage());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

Expand All @@ -37,24 +36,23 @@ public class CellAdmin extends BasePage implements AuthenticatedWebPage {
private static final String EMPTY_STRING = "";
private static final Logger _log = LoggerFactory.getLogger(CellAdmin.class);
private static final long serialVersionUID = -61395248592530110L;
private Map<String, List<String>> _domainMap = new HashMap<>();
private String _selectedDomain;
private String _selectedCell;
private String _command = "";
private String _lastCommand = "";
private String _response = "";

public CellAdmin() {
initDomainMap();
addMarkup();
}

private void initDomainMap() {
private Map<String, List<String>> getDomainMap() {
try {
_domainMap = getCellAdminService().getDomainMap();
return getCellAdminService().getDomainMap();
} catch (CellAdminServiceException e) {
error(getStringResource("error.noCells"));
_log.error("could not retrieve cells: {}", e.getMessage());
return Collections.emptyMap();
}
}

Expand Down Expand Up @@ -156,7 +154,7 @@ private class DomainsModel extends AbstractReadOnlyModel<List<String>> {

@Override
public List<String> getObject() {
List<String> domains = new ArrayList<>(_domainMap.keySet());
List<String> domains = new ArrayList<>(getDomainMap().keySet());
Collections.sort(domains);
return domains;
}
Expand All @@ -168,7 +166,7 @@ private class CellsModel extends AbstractReadOnlyModel<List<String>> {

@Override
public List<String> getObject() {
List<String> cells = _domainMap.get(_selectedDomain);
List<String> cells = getDomainMap().get(_selectedDomain);
if (cells == null) {
cells = Collections.emptyList();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.dcache.webadmin.controller.PoolAdminService;
Expand All @@ -40,13 +40,11 @@ public class PoolAdmin extends BasePage implements AuthenticatedWebPage {
public static final int RESPONSE_CUTOFF_INDEX_MULTIPLE_POOLS = 120;
private static final Logger _log = LoggerFactory.getLogger(PoolAdmin.class);
private static final long serialVersionUID = -3790266074783564167L;
private List<PoolAdminBean> _poolGroups = new ArrayList<>();
private PoolAdminBean _currentPoolGroup;
private String _command = "";
private String _lastCommand = "";

public PoolAdmin() {
getPoolGroupsAction();
addMarkup();
}

Expand Down Expand Up @@ -117,12 +115,13 @@ private boolean isAtLeastOneSelected() {
return oneIsSelected;
}

private void getPoolGroupsAction() {
public List<PoolAdminBean> getPoolGroups() {
try {
_poolGroups = getPoolAdminService().getPoolGroups();
return getPoolAdminService().getPoolGroups();
} catch (PoolAdminServiceException e) {
error(getStringResource("error.noPoolGroups"));
_log.error("could not retrieve Pool Groups: {}", e.getMessage());
return Collections.emptyList();
}
}

Expand All @@ -133,7 +132,7 @@ private PoolAdminService getPoolAdminService() {
private ListView<PoolAdminBean> buildPoolGroupView(String id) {
return new ListView<PoolAdminBean>(
id, new PropertyModel<List<PoolAdminBean>>(
this, "_poolGroups")) {
this, "poolGroups")) {

private static final long serialVersionUID = 6196065833753259467L;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Collections;
import java.util.List;

import org.dcache.webadmin.controller.PoolGroupService;
import org.dcache.webadmin.controller.exceptions.PoolGroupServiceException;
import org.dcache.webadmin.view.beans.CellServicesBean;
import org.dcache.webadmin.view.beans.PoolGroupBean;
Expand All @@ -38,24 +38,22 @@ public class PoolGroupView extends BasePage {

private static final long serialVersionUID = 5336661788688627752L;
private String SPECIAL_POOLGROUP_HEADER = "specialPoolGroup.header";
private List<PoolGroupBean> _poolGroups;
private PoolGroupBean _currentPoolGroup;
private String _selectedGroupName;
private String _selectedGroup = getStringResource(SPECIAL_POOLGROUP_HEADER);
private PoolListPanel _poolListPanel = new PoolListPanel(
"specialPoolGroupPanel", new PropertyModel<List<PoolSpaceBean>>(
this, "_currentPoolGroup._poolSpaces"), false);
this, "poolSpaces"), false);
private PoolQueuesPanel _poolQueuesPanel = new PoolQueuesPanel(
"specialPoolGroupPanel", new PropertyModel<PoolGroupBean>(
this, "_currentPoolGroup"));
this, "currentPoolGroup"));
private CellServicesPanel _cellServicesPanel = new CellServicesPanel(
"specialPoolGroupPanel", new PropertyModel<List<CellServicesBean>>(
this, "_currentPoolGroup._cellStatuses"));
this, "cellStatuses"));
private Panel _shownPanel = _poolListPanel;
private static final Logger _log = LoggerFactory.getLogger(PoolGroupView.class);

public PoolGroupView() {
addMarkup();
getPoolGroupsAction();
}

private void addMarkup() {
Expand All @@ -73,7 +71,7 @@ private void addMarkup() {
private ListView<PoolGroupBean> createListview() {
return new EvenOddListView<PoolGroupBean>(
"poolGroupView", new PropertyModel<List<PoolGroupBean>>(
this, "_poolGroups")) {
this, "poolGroups")) {

private static final long serialVersionUID = -6804519816869455339L;

Expand Down Expand Up @@ -101,9 +99,11 @@ private Link createLink(final PoolGroupBean poolGroup) {

@Override
public void onClick() {
_selectedGroup = getStringResource(
SPECIAL_POOLGROUP_HEADER) + " " + poolGroup.getName();
_currentPoolGroup = poolGroup;
_selectedGroupName = poolGroup.getName();
_selectedGroup
= getStringResource(SPECIAL_POOLGROUP_HEADER)
+ " " + _selectedGroupName;
configure();
}
};
link.add(new Label("nameMessage", poolGroup.getName()));
Expand All @@ -112,25 +112,39 @@ public void onClick() {
};
}

private PoolGroupService getPoolGroupService() {
return getWebadminApplication().getPoolGroupService();
public PoolGroupBean getCurrentPoolGroup() {
List<PoolGroupBean> groups = getPoolGroups();
for (PoolGroupBean group : groups) {
if (group.getName().equals(_selectedGroupName)) {
return group;
}
}
return null;
}

public List<PoolSpaceBean> getPoolSpaces() {
PoolGroupBean current = getCurrentPoolGroup();
if (current == null) return null;
return current.getPoolSpaces();
}

private void getPoolGroupsAction() {
public List<CellServicesBean> getCellStatuses() {
PoolGroupBean current = getCurrentPoolGroup();
if (current == null) return null;
return current.getCellStatuses();
}

public List<PoolGroupBean> getPoolGroups() {
try {
_log.debug("getPoolGroupsAction called");
setPoolGroups(getPoolGroupService().getPoolGroups());
return getWebadminApplication().getPoolGroupService().getPoolGroups();
} catch (PoolGroupServiceException ex) {
this.error(getStringResource("error.getPoolgroupsFailed") + ex.getMessage());
_log.debug("getPoolGroupsAction failed {}", ex.getMessage());
setPoolGroups(null);
return Collections.emptyList();
}
}

private void setPoolGroups(List<PoolGroupBean> poolGroups) {
_poolGroups = poolGroups;
}

private class NavigationFragment extends Fragment {

private static final long serialVersionUID = 1195233312236755493L;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
package org.dcache.webadmin.view.pages.poollist;

import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.markup.head.OnLoadHeaderItem;
import org.apache.wicket.markup.head.StringHeaderItem;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.ChoiceRenderer;
import org.apache.wicket.markup.html.form.DropDownChoice;
Expand All @@ -12,20 +16,18 @@
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import diskCacheV111.pools.PoolV2Mode;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.markup.head.OnLoadHeaderItem;
import org.apache.wicket.markup.head.StringHeaderItem;

import org.dcache.webadmin.controller.PoolSpaceService;
import org.dcache.webadmin.controller.exceptions.PoolSpaceServiceException;
import org.dcache.webadmin.view.beans.PoolSpaceBean;
import org.dcache.webadmin.view.beans.SelectOption;
import org.dcache.webadmin.view.pages.basepage.BasePage;
import org.dcache.webadmin.view.panels.poollist.PoolListPanel;
import org.dcache.webadmin.view.util.EvenOddListView;
import org.dcache.webadmin.view.util.Role;

/**
Expand All @@ -38,15 +40,17 @@ public class PoolList extends BasePage {
private static final long serialVersionUID = -3519762401458479856L;
private List<PoolSpaceBean> _poolBeans;
private SelectOption _selectedOption;
private final EvenOddListView view;
private static final Logger _log = LoggerFactory.getLogger(PoolList.class);

public PoolList() {
Form poolUsageForm = new PoolUsageForm("poolUsageForm");
poolUsageForm.add(createPoolModeDropDown("mode"));
poolUsageForm.add(new FeedbackPanel("feedback"));
getPoolsAction();
getPoolSpaceBeans();
PoolListPanel poolListPanel = new PoolListPanel("poolListPanel",
new PropertyModel(this, "_poolBeans"), true);
view = poolListPanel.getView();
poolUsageForm.add(poolListPanel);
add(poolUsageForm);
}
Expand Down Expand Up @@ -81,14 +85,14 @@ private PoolSpaceService getPoolSpaceService() {
return getWebadminApplication().getPoolSpaceService();
}

private void getPoolsAction() {
private void getPoolSpaceBeans() {
try {
_log.debug("getPoolListAction called");
this._poolBeans = getPoolSpaceService().getPoolBeans();
_poolBeans = getPoolSpaceService().getPoolBeans();
} catch (PoolSpaceServiceException ex) {
this.error(getStringResource("error.getPoolsFailed") + ex.getMessage());
_log.debug("getPoolListAction failed {}", ex.getMessage());
this._poolBeans = null;
_poolBeans = null;
}
}

Expand All @@ -113,7 +117,7 @@ protected void onSubmit() {
PoolV2Mode poolMode = new PoolV2Mode(_selectedOption.getKey());
getPoolSpaceService().changePoolMode(_poolBeans, poolMode,
getWebadminSession().getUserName());
getPoolsAction();
view.render();
} catch (PoolSpaceServiceException ex) {
_log.error("something went wrong with enable/disable");
this.error(getStringResource("error.changePoolModeFailed") + ex.getMessage());
Expand Down
Loading

0 comments on commit 2d2b78e

Please sign in to comment.