package org.dcache.webadmin.view.pages.poolgroupview; import org.apache.wicket.AttributeModifier; import org.apache.wicket.MarkupContainer; import org.apache.wicket.markup.head.IHeaderResponse; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.link.Link; import org.apache.wicket.markup.html.list.ListItem; import org.apache.wicket.markup.html.list.ListView; import org.apache.wicket.markup.html.panel.FeedbackPanel; import org.apache.wicket.markup.html.panel.Fragment; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.PropertyModel; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Collections; import java.util.List; import org.dcache.webadmin.controller.exceptions.PoolGroupServiceException; import org.dcache.webadmin.view.beans.CellServicesBean; import org.dcache.webadmin.view.beans.PoolGroupBean; import org.dcache.webadmin.view.beans.PoolSpaceBean; import org.dcache.webadmin.view.pages.basepage.SortableBasePage; import org.dcache.webadmin.view.panels.cellservices.CellServicesPanel; import org.dcache.webadmin.view.panels.layout.LayoutHeaderPanel; import org.dcache.webadmin.view.panels.layout.LayoutItemPanel; import org.dcache.webadmin.view.panels.poolQueuesPanel.PoolQueuesPanel; import org.dcache.webadmin.view.panels.poollist.PoolListPanel; import org.dcache.webadmin.view.util.EvenOddListView; /** * * @author jans */ public class PoolGroupView extends SortableBasePage { private static final long serialVersionUID = 5336661788688627752L; private String SPECIAL_POOLGROUP_HEADER = "specialPoolGroup.header"; private String _selectedGroupName; private String _selectedGroup = getStringResource(SPECIAL_POOLGROUP_HEADER); private PoolListPanel _poolListPanel = new PoolListPanel( "specialPoolGroupPanel", new PropertyModel<List<PoolSpaceBean>>( this, "poolSpaces"), false); private PoolQueuesPanel _poolQueuesPanel = new PoolQueuesPanel( "specialPoolGroupPanel", new PropertyModel<PoolGroupBean>( this, "currentPoolGroup")); private CellServicesPanel _cellServicesPanel = new CellServicesPanel( "specialPoolGroupPanel", new PropertyModel<List<CellServicesBean>>( this, "cellStatuses")); private Panel _shownPanel = _poolListPanel; private static final Logger _log = LoggerFactory.getLogger(PoolGroupView.class); public PoolGroupView() { addMarkup(); } protected void renderHeadInternal(IHeaderResponse response) { super.renderHeadInternal(response); addFilterSelectScript("group", response); addFilterSelectScript("cells", response); addFilterSelectScript("space", response); addFilterSelectScript("queues", response); } private void addMarkup() { Form poolGroups = new Form<Void>("poolGroupsForm"); poolGroups.add(new FeedbackPanel("feedback")); poolGroups.add(new LayoutHeaderPanel("layoutHeaderPanel")); poolGroups.add(createListview()); poolGroups.add(new Label("specialPoolGroupHeader", new PropertyModel<String>(this, "_selectedGroup"))); poolGroups.add(new NavigationFragment("miniNavigationFragment", poolGroups)); poolGroups.add(_shownPanel); add(poolGroups); } private ListView<PoolGroupBean> createListview() { return new EvenOddListView<PoolGroupBean>( "poolGroupView", new PropertyModel<List<PoolGroupBean>>( this, "poolGroups")) { private static final long serialVersionUID = -6804519816869455339L; @Override protected void populateItem(ListItem<PoolGroupBean> item) { final PoolGroupBean poolGroup = item.getModelObject(); item.add(createLink(poolGroup)); item.add(new Label("totalSpace", Long.valueOf( poolGroup.getTotalSpace()).toString())); item.add(new Label("freeSpace", Long.valueOf( poolGroup.getFreeSpace()).toString())); item.add(new Label("preciousSpace", Long.valueOf( poolGroup.getPreciousSpace()).toString())); item.add(new LayoutItemPanel("layoutItemPanel", poolGroup.getPercentagePrecious(), poolGroup.getPercentagePinned(), poolGroup.getPercentageRemovable(), poolGroup.getPercentageFree())); } private Link createLink(final PoolGroupBean poolGroup) { Link link = new Link("nameLink") { private static final long serialVersionUID = 2933617955512853344L; @Override public void onClick() { _selectedGroupName = poolGroup.getName(); _selectedGroup = getStringResource(SPECIAL_POOLGROUP_HEADER) + " " + _selectedGroupName; configure(); } }; link.add(new Label("nameMessage", poolGroup.getName())); return link; } }; } 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(); } public List<CellServicesBean> getCellStatuses() { PoolGroupBean current = getCurrentPoolGroup(); if (current == null) return null; return current.getCellStatuses(); } public List<PoolGroupBean> getPoolGroups() { try { _log.debug("getPoolGroupsAction called"); return getWebadminApplication().getPoolGroupService().getPoolGroups(); } catch (PoolGroupServiceException ex) { this.error(getStringResource("error.getPoolgroupsFailed") + ex.getMessage()); _log.debug("getPoolGroupsAction failed {}", ex.getMessage()); return Collections.emptyList(); } } private class NavigationFragment extends Fragment { private static final long serialVersionUID = 1195233312236755493L; private Link _link1; private Link _link2; private Link _link3; private final String ACTIVE_ATTRIBUTE = "active"; public NavigationFragment(String id, MarkupContainer container) { super(id, "navigationFragment", container); _link1 = addLink("cellViewLink", "cellViewMessage", _cellServicesPanel); _link2 = addLink("spaceUsageLink", "spaceUsageMessage", _poolListPanel); addClassAttribute(_link2, ACTIVE_ATTRIBUTE); _link3 = addLink("moverViewLink", "moverViewMessage", _poolQueuesPanel); } private Link addLink(String linkId, String MessageId, final Panel panelToShow) { Link link = new Link(linkId) { private static final long serialVersionUID = -4399379029407167570L; @Override public void onClick() { removeActiveAttributes(); _shownPanel.replaceWith(panelToShow); _shownPanel = panelToShow; addClassAttribute(this, ACTIVE_ATTRIBUTE); } }; link.add(new Label(MessageId, getStringResource(MessageId))); add(link); return link; } private void removeActiveAttributes() { addClassAttribute(_link1, ""); addClassAttribute(_link2, ""); addClassAttribute(_link3, ""); } private void addClassAttribute(WebMarkupContainer container, String value) { container.add(new AttributeModifier("class", value)); } } }