/**
* $URL: https://source.sakaiproject.org/svn/sitestats/trunk/sitestats-tool/src/java/org/sakaiproject/sitestats/tool/wicket/pages/ServerWidePage.java $
* $Id: ServerWidePage.java 105078 2012-02-24 23:00:38Z ottenhoff@longsight.com $
*
* Copyright (c) 2006-2009 The Sakai Foundation
*
* Licensed under the Educational Community 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.opensource.org/licenses/ECL-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 org.sakaiproject.sitestats.tool.wicket.pages;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
import org.apache.wicket.PageParameters;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxLink;
import org.apache.wicket.markup.html.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.model.CompoundPropertyModel;
import org.apache.wicket.model.Model;
import org.sakaiproject.sitestats.api.StatsManager;
import org.sakaiproject.sitestats.tool.facade.Locator;
import org.sakaiproject.sitestats.tool.wicket.components.AdminMenu;
import org.sakaiproject.sitestats.tool.wicket.components.AjaxLazyLoadImage;
import org.sakaiproject.sitestats.tool.wicket.models.ServerWideModel;
/**
* @author Nuno Fernandes
*/
public class ServerWidePage extends BasePage {
private static final long serialVersionUID = 1L;
// UI Components
private Label reportTitle = null;
private Label reportDescription = null;
private AjaxLazyLoadImage reportChart = null;
private Label reportNotes = null;
private WebMarkupContainer selectors = null;
private ServerWideModel report = null;
private String siteId = null;
private int selectedWidth = 0;
private int selectedHeight = 0;
private List<Component> links = new ArrayList<Component>();
private Map<Component,Component> labels = new HashMap<Component,Component>();
public ServerWidePage() {
this(null);
}
public ServerWidePage(PageParameters params) {
siteId = Locator.getFacade().getToolManager().getCurrentPlacement().getContext();
boolean allowed = Locator.getFacade().getStatsAuthz().isUserAbleToViewSiteStatsAdmin(siteId);
if(allowed) {
renderBody();
}else{
redirectToInterceptPage(new NotAuthorizedPage());
}
}
@Override
public void renderHead(IHeaderResponse response) {
super.renderHead(response);
response.renderJavascriptReference(JQUERYSCRIPT);
}
private void renderBody() {
add(new AdminMenu("menu"));
// model
report = new ServerWideModel();
setDefaultModel(new CompoundPropertyModel(this));
Form form = new Form("serverWideReportForm");
add(form);
// title, description & notes
reportTitle = new Label("report.reportTitle");
reportTitle.setOutputMarkupId(true);
form.add(reportTitle);
reportDescription = new Label("report.reportDescription");
reportDescription.setOutputMarkupId(true);
form.add(reportDescription);
reportNotes = new Label("report.reportNotes");
reportNotes.setOutputMarkupId(true);
form.add(reportNotes);
// chart
reportChart = new AjaxLazyLoadImage("reportChart", getPage()) {
@Override
public byte[] getImageData() {
return getChartImage(selectedWidth, selectedHeight);
}
@Override
public byte[] getImageData(int width, int height) {
return getChartImage(width, height);
}
};
reportChart.setOutputMarkupId(true);
reportChart.setAutoDetermineChartSizeByAjax(".chartContainer");
form.add(reportChart);
// selectors
selectors = new WebMarkupContainer("selectors");
selectors.setOutputMarkupId(true);
form.add(selectors);
makeSelectorLink("reportMonthlyLogin", StatsManager.MONTHLY_LOGIN_REPORT);
makeSelectorLink("reportWeeklyLogin", StatsManager.WEEKLY_LOGIN_REPORT);
makeSelectorLink("reportDailyLogin", StatsManager.DAILY_LOGIN_REPORT);
makeSelectorLink("reportRegularUsers", StatsManager.REGULAR_USERS_REPORT);
makeSelectorLink("reportHourlyUsage", StatsManager.HOURLY_USAGE_REPORT);
makeSelectorLink("reportTopActivities", StatsManager.TOP_ACTIVITIES_REPORT);
makeSelectorLink("reportTool", StatsManager.TOOL_REPORT);
}
public void setReport(ServerWideModel report) {
this.report = report;
}
public ServerWideModel getReport() {
return report;
}
private byte[] getChartImage(int width, int height) {
int _width = (width <= 0) ? 350 : width;
int _height = (height <= 0) ? 200: height;
return Locator.getFacade().getServerWideReportManager().generateReportChart(
report.getSelectedView(), _width, _height
);
}
@SuppressWarnings("serial")
private void makeSelectorLink(final String id, final String view) {
IndicatingAjaxLink link = new IndicatingAjaxLink(id) {
@Override
public void onClick(AjaxRequestTarget target) {
// select view
report.setSelectedView(view);
// make title, description & notes visible
reportTitle.add(new AttributeModifier("style", true, new Model("display: block")));
reportDescription.add(new AttributeModifier("style", true, new Model("display: block")));
reportNotes.add(new AttributeModifier("style", true, new Model("display: block")));
reportChart.renderImage(target, true);
// toggle selectors link state
for(Component lbl : labels.values()) {
lbl.setVisible(false);
}
for(Component lnk : links) {
lnk.setVisible(true);
}
this.setVisible(false);
labels.get(this).setVisible(true);
// mark component for rendering
target.addComponent(selectors);
target.addComponent(reportTitle);
target.addComponent(reportDescription);
target.addComponent(reportNotes);
target.appendJavascript("setMainFrameHeightNoScroll( window.name, 650 )");
}
};
link.setVisible(true);
links.add(link);
selectors.add(link);
makeSelectorLabel(link, id + "Lbl");
}
private void makeSelectorLabel(final Component link, final String id) {
WebMarkupContainer label = new WebMarkupContainer(id);
label.setVisible(false);
labels.put(link, label);
selectors.add(label);
}
}