package org.dcache.webadmin.view.pages.poolselectionsetup.panels.simulatediorequest;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextField;
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.Fragment;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.markup.repeater.data.GridView;
import org.apache.wicket.markup.repeater.data.IDataProvider;
import org.apache.wicket.markup.repeater.data.ListDataProvider;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.dcache.webadmin.controller.exceptions.PoolSelectionSetupServiceException;
import org.dcache.webadmin.view.WebAdminInterface;
import org.dcache.webadmin.view.pages.poolselectionsetup.PoolSelectionSetup;
import org.dcache.webadmin.view.pages.poolselectionsetup.beans.IORequest;
import org.dcache.webadmin.view.pages.poolselectionsetup.beans.MatchBean;
import org.dcache.webadmin.view.panels.basepanel.BasePanel;
/**
*
* @author jans
*/
public class SimulatedIORequestPanel extends BasePanel {
private static final String EMPTY_STRING = "";
private static final Logger _log = LoggerFactory.getLogger(SimulatedIORequestPanel.class);
private static final long serialVersionUID = 4415717034917037746L;
private IoDirections _ioDirection = IoDirections.READ;
private String _linkGroup = "none";
private String _store = "*";
private String _dCache = "*";
private String _net = "*";
private String _protocol = "DCap/3";
private List<MatchBean> _matches = Collections.emptyList();
private PoolSelectionSetup _motherPage;
public SimulatedIORequestPanel(String id, PoolSelectionSetup motherPage) {
super(id);
_motherPage = motherPage;
Form form = new Form("simulatediorequestpanelForm");
form.add(new SubmitButton("submit"));
TextField linkGroupInput = new TextField("linkgroup",
new PropertyModel(this, "_linkGroup"));
form.add(linkGroupInput);
DropDownChoice<IoDirections> ioDirection = new DropDownChoice<>("iodirection",
new PropertyModel<IoDirections>(this, "_ioDirection"),
new IoDirectionsModel());
form.add(ioDirection);
TextField storeInput = new TextField("store",
new PropertyModel(this, "_store"));
form.add(storeInput);
TextField dCacheInput = new TextField("dcache",
new PropertyModel(this, "_dCache"));
form.add(dCacheInput);
TextField netInput = new TextField("net",
new PropertyModel(this, "_net"));
form.add(netInput);
TextField protocolInput = new TextField("protocol",
new PropertyModel(this, "_protocol"));
form.add(protocolInput);
ListView<MatchBean> matchView = new ListView<MatchBean>("matches",
new PropertyModel<List<MatchBean>>(this, "_matches")) {
private static final long serialVersionUID = 4873863555497361648L;
@Override
protected void populateItem(ListItem<MatchBean> item) {
MatchFragment matchFragment = new MatchFragment(
"levelFragment", item.getModel(),
item.getIndex());
item.add(matchFragment);
}
};
form.add(matchView);
add(form);
}
private class IoDirectionsModel extends AbstractReadOnlyModel<List<IoDirections>> {
private static final long serialVersionUID = 1826526610558013386L;
@Override
public List<IoDirections> getObject() {
return Arrays.asList(IoDirections.values());
}
}
private class MatchFragment extends Fragment {
private static final int POOLS_PER_ROW = 8;
private static final long serialVersionUID = 9138958292080879576L;
public MatchFragment(String id, IModel<MatchBean> model, int level) {
super(id, "matchFragment", SimulatedIORequestPanel.this);
String matchLevel;
if (model.getObject().getTag() == null) {
matchLevel = String.valueOf(level);
} else {
matchLevel = model.getObject().getTag() + String.valueOf(level);
}
add(new Label("matchLevel", matchLevel));
List<String> pools = model.getObject().getPoolList();
IDataProvider<String> dataProvider =
new ListDataProvider<>(pools);
GridView<String> grid = new GridView<String>("pools",
dataProvider) {
private static final long serialVersionUID = -712827131026118042L;
@Override
protected void populateEmptyItem(Item<String> item) {
Link link = new Link("link") {
private static final long serialVersionUID = -8118543568666543834L;
@Override
public void onClick() {
// do nothing is on purpose - just an empty column
}
};
link.add(new Label("name", EMPTY_STRING));
item.add(link);
}
@Override
protected void populateItem(final Item<String> item) {
Link link = _motherPage.getLinkToPool("link", item.getModelObject());
link.add(new Label("name", item.getModelObject()));
item.add(link);
}
};
grid.setColumns(Math.min(POOLS_PER_ROW, pools.size() > 0 ? pools.size() : 1));
add(grid);
}
}
private class SubmitButton extends Button {
private static final long serialVersionUID = 6917004473319676628L;
public SubmitButton(String id) {
super(id);
}
@Override
public void onSubmit() {
IORequest request = new IORequest(_ioDirection, _store, _dCache,
_net, _protocol, _linkGroup);
try {
_matches = ((WebAdminInterface) getApplication()).getPoolSelectionSetupService().
getMatchForIORequest(request);
} catch (PoolSelectionSetupServiceException ex) {
error("Match failed: " + ex.getCause().getMessage());
}
}
}
}