/**
* Copyright (C) 2015 Orange
* 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.francetelecom.clara.cloud.presentation.admin;
import com.francetelecom.clara.cloud.presentation.common.PageTemplate;
import com.francetelecom.clara.cloud.presentation.tools.WicketSession;
import com.francetelecom.clara.cloud.scalability.helper.PaasStats;
import org.apache.wicket.extensions.ajax.markup.html.repeater.data.table.AjaxFallbackDefaultDataTable;
import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.basic.MultiLineLabel;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.StringResourceModel;
import org.slf4j.LoggerFactory;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* StatsTablePanel
* Class that hold admin stats table
* Last update : $LastChangedDate$
* Last author : $Author$
* Sample usage : see ManageStatisticsImplTest
* @version : $Revision$
*/
public class StatsTablePanel extends Panel {
private static final long serialVersionUID = 527385503166750788L;
private static final transient org.slf4j.Logger logger = LoggerFactory.getLogger(StatsTablePanel.class);
AjaxFallbackDefaultDataTable<PaasStats, String> dataTable;
public StatsTablePanel(String id) {
super(id);
initTable();
}
private StringResourceModel getStringResourceModel(String key) {
// BVA fix Localizer warning : cf. https://issues.apache.org/jira/browse/WICKET-990
return new StringResourceModel(key, this, null);
}
private void initTable(){
final
List<IColumn<PaasStats, String>> columns = new ArrayList<IColumn<PaasStats, String>>();
/*
PropertyColumn creationDateColumn
= new PropertyColumn<PaasStats>(
getStringResourceModel("portal.stats.table.header.date"), "creationDateString");
*/
AbstractColumn<PaasStats, String> psDate
= new AbstractColumn<PaasStats, String>(
getStringResourceModel("portal.stats.table.header.date")) {
private static final long serialVersionUID = 6259234503151995554L;
public void populateItem(Item<ICellPopulator<PaasStats>> cellItem, String componentId,
IModel<PaasStats> rowModel)
{
PaasStats ps = rowModel.getObject();
SimpleDateFormat sdf = new SimpleDateFormat();
sdf.applyPattern(getString("portal.stats.date.format"));
cellItem.add(new Label(componentId, sdf.format(ps.getCreationDate())));
}
@Override
public String getCssClass() {
return "width1500";
}
};
columns.add(psDate);
columns.add(new PropertyColumn<PaasStats, String>(
getStringResourceModel("portal.stats.table.header.name"), "shortName")
);
/*
columns.add(new PropertyColumn<PaasStats>(
getStringResourceModel("portal.stats.table.header.details"), "htmlDetails")
);
*/
AbstractColumn<PaasStats, String> psDetails
= new AbstractColumn<PaasStats, String>(
getStringResourceModel("portal.stats.table.header.details")) {
private static final long serialVersionUID = 5359675125271261783L;
public void populateItem(Item<ICellPopulator<PaasStats>> cellItem, String componentId,
IModel<PaasStats> rowModel)
{
PaasStats ps = rowModel.getObject();
cellItem.add(new MultiLineLabel(componentId, ps.getDetails()));
}
};
columns.add(psDetails);
StatsProvider statsProv = new StatsProvider();
statsProv.setSort("creationTime", SortOrder.ASCENDING);
dataTable = new AjaxFallbackDefaultDataTable<PaasStats, String>("dataTable",columns,statsProv, PageTemplate.ROWS_PER_PAGE);
// wait and see if needed // dataTable.add(new AjaxSelfUpdatingTimerBehavior(Duration.seconds(10)));
add(dataTable);
}
class StatsProvider extends SortableDataProvider<PaasStats, String> {
private static final long serialVersionUID = -607185222587506578L;
@Override
public Iterator<PaasStats> iterator(long first, long count) {
WicketSession ws = (WicketSession)getSession();
return ws.getStats().iterator();
}
@Override
public long size() {
WicketSession ws = (WicketSession)getSession();
return ws.getStats().size();
}
@Override
public IModel<PaasStats> model(PaasStats object) {
final Long sid = object.getCreationTime();
return new LoadableDetachableModel<PaasStats>() {
private static final long serialVersionUID = -3639867974705106409L;
@Override
protected PaasStats load() {
WicketSession ws = (WicketSession)getSession();
return ws.getStatById(sid);
}
};
}
}
}