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.html.form.Button; import org.apache.wicket.markup.html.form.ChoiceRenderer; import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.panel.FeedbackPanel; import org.apache.wicket.model.PropertyModel; import org.apache.wicket.model.StringResourceModel; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.List; import diskCacheV111.pools.PoolV2Mode; 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.pages.basepage.SortableBasePage; import org.dcache.webadmin.view.panels.poollist.PoolListPanel; import org.dcache.webadmin.view.panels.selectall.SelectAllPanel; import org.dcache.webadmin.view.util.Role; /** * The PoolUsage Webpage * @author jans */ public class PoolList extends SortableBasePage { private static final int DEFAULT_DROP_DOWN_CHOICE = 0; private static final long serialVersionUID = -3519762401458479856L; private List<PoolSpaceBean> _poolBeans; private SelectOption _selectedOption; private static final Logger _log = LoggerFactory.getLogger(PoolList.class); private class PoolSpaceTableSelectAll extends SelectAllPanel { private static final long serialVersionUID = -1886067539481596863L; public PoolSpaceTableSelectAll(String id, Button submit) { super(id, "space", submit); } @Override protected void setSubmitCalled() { submitFormCalled = true; } @Override protected void setSelectionForAll(Boolean selected) { for (PoolSpaceBean bean : _poolBeans) { if (!isHidden(bean)) { bean.setSelected(selected); } } } } /* * necessary so that submit uses the current list instance */ private boolean submitFormCalled = false; public PoolList() { Form poolUsageForm = new PoolUsageForm("poolUsageForm"); poolUsageForm.add(createPoolModeDropDown("mode")); poolUsageForm.add(new FeedbackPanel("feedback")); fetchPoolSpaceBeans(); PoolListPanel poolListPanel = new PoolListPanel("poolListPanel", new PropertyModel(this, "_poolBeans"), true); poolListPanel.setPoolListPage(this); poolUsageForm.add(poolListPanel); add(poolUsageForm); } /** * See the {@link PoolListPanel} for why this must be used instead of * {@link BasePage#refresh()} here. */ public List<PoolSpaceBean> getListViewList() { if (!submitFormCalled) { fetchPoolSpaceBeans(); } submitFormCalled = false; return _poolBeans; } protected void renderHeadInternal(IHeaderResponse response) { super.renderHeadInternal(response); addFilterSelectScript("space", response); } private DropDownChoice<SelectOption> createPoolModeDropDown(String id) { List<SelectOption> dropDownChoices = getDropDownModes(); DropDownChoice<SelectOption> dropDownChoice = new DropDownChoice<>(id, new PropertyModel<SelectOption>(this, "_selectedOption"), dropDownChoices, new ChoiceRenderer<SelectOption>("value")); setDefaultChoice(dropDownChoices); MetaDataRoleAuthorizationStrategy.authorize(dropDownChoice, RENDER, Role.ADMIN); return dropDownChoice; } private void setDefaultChoice(List<SelectOption> dropDownChoices) { _selectedOption = dropDownChoices.get(DEFAULT_DROP_DOWN_CHOICE); } private List<SelectOption> getDropDownModes() { List<SelectOption> list = new ArrayList<>(3); list.add(new SelectOption(PoolV2Mode.ENABLED, new StringResourceModel( "mode.ENABLED", this, null).getString())); list.add(new SelectOption(PoolV2Mode.DISABLED_STRICT, new StringResourceModel( "mode.DISABLED_STRICT", this, null).getString())); list.add(new SelectOption(PoolV2Mode.DISABLED_RDONLY, new StringResourceModel( "mode.DISABLED_RDONLY", this, null).getString())); return list; } private PoolSpaceService getPoolSpaceService() { return getWebadminApplication().getPoolSpaceService(); } private void fetchPoolSpaceBeans() { try { _log.debug("getPoolListAction called"); _poolBeans = getPoolSpaceService().getPoolBeans(); } catch (PoolSpaceServiceException ex) { this.error(getStringResource("error.getPoolsFailed") + ex.getMessage()); _log.debug("getPoolListAction failed {}", ex.getMessage()); _poolBeans = null; } } private class PoolUsageForm extends Form { private static final long serialVersionUID = -6416804759275113231L; public PoolUsageForm(String id) { super(id); Button submit = new Button("submit"); this.add(new PoolSpaceTableSelectAll("selectAllPanel", submit)); } @Override protected void onSubmit() { submitFormCalled = true; _log.debug("button pressed"); if (_poolBeans != null && _selectedOption != null) { try { _log.debug("selected: {}", _selectedOption.getValue()); PoolV2Mode poolMode = new PoolV2Mode(_selectedOption.getKey()); getPoolSpaceService().changePoolMode(_poolBeans, poolMode, getWebadminSession().getUserName()); } catch (PoolSpaceServiceException ex) { _log.error("something went wrong with enable/disable"); this.error(getStringResource("error.changePoolModeFailed") + ex.getMessage()); } } } } }