/**
* $URL: https://source.sakaiproject.org/svn/sitestats/trunk/sitestats-tool/src/java/org/sakaiproject/sitestats/tool/wicket/pages/PreferencesPage.java $
* $Id: PreferencesPage.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.Iterator;
import java.util.List;
import org.apache.wicket.PageParameters;
import org.apache.wicket.behavior.SimpleAttributeModifier;
import org.apache.wicket.markup.html.IHeaderResponse;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.CheckBox;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.IChoiceRenderer;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.ResourceModel;
import org.sakaiproject.sitestats.api.PrefsData;
import org.sakaiproject.sitestats.api.StatsManager;
import org.sakaiproject.sitestats.api.Util;
import org.sakaiproject.sitestats.api.event.ToolInfo;
import org.sakaiproject.sitestats.api.parser.EventParserTip;
import org.sakaiproject.sitestats.tool.facade.Locator;
import org.sakaiproject.sitestats.tool.wicket.components.CSSFeedbackPanel;
import org.sakaiproject.sitestats.tool.wicket.components.EventRegistryTree;
import org.sakaiproject.sitestats.tool.wicket.components.Menus;
/**
* @author Nuno Fernandes
*/
public class PreferencesPage extends BasePage {
private static final long serialVersionUID = 1L;
private String realSiteId;
private String siteId;
// UI
private FeedbackPanel feedback = null;
private List<String> chartTransparencyChoices = null;
private EventRegistryTree eventRegistryTree = null;
// Model
private PrefsData prefsdata = null;
public PreferencesPage() {
this(null);
}
public PreferencesPage(PageParameters pageParameters) {
realSiteId = Locator.getFacade().getToolManager().getCurrentPlacement().getContext();
if(pageParameters != null) {
siteId = pageParameters.getString("siteId");
}
if(siteId == null){
siteId = realSiteId;
}
boolean allowed = Locator.getFacade().getStatsAuthz().isUserAbleToViewSiteStats(siteId);
if(allowed) {
setDefaultModel(new CompoundPropertyModel(this));
renderBody();
}else{
setResponsePage(NotAuthorizedPage.class);
}
}
@Override
public void renderHead(IHeaderResponse response) {
super.renderHead(response);
response.renderJavascriptReference(JQUERYSCRIPT);
response.renderOnDomReadyJavascript("toggleCheckboxAll();");
}
@SuppressWarnings("serial")
private void renderBody() {
add(new Menus("menu", siteId));
Form form = new Form("prefsForm");
form.setOutputMarkupId(true);
form.setMarkupId("prefsForm");
add(form);
feedback = new CSSFeedbackPanel("messages");
form.add(feedback);
// Section: General
CheckBox listToolEventsOnlyAvailableInSite = new CheckBox("listToolEventsOnlyAvailableInSite");
form.add(listToolEventsOnlyAvailableInSite);
// Section: Chart
WebMarkupContainer chartPrefs = new WebMarkupContainer("chartPrefs");
boolean chartPrefsVisible = Locator.getFacade().getStatsManager().isEnableSiteVisits() || Locator.getFacade().getStatsManager().isEnableSiteActivity();
chartPrefs.setVisible(chartPrefsVisible);
form.add(chartPrefs);
//CheckBox chartIn3D = new CheckBox("chartIn3D");
//chartPrefs.add(chartIn3D);
CheckBox itemLabelsVisible = new CheckBox("itemLabelsVisible");
chartPrefs.add(itemLabelsVisible);
chartTransparencyChoices = new ArrayList<String>();
for(int i=100; i>=10; i-=10) {
chartTransparencyChoices.add(Integer.toString(i));
}
DropDownChoice chartTransparency = new DropDownChoice("chartTransparency", chartTransparencyChoices, new IChoiceRenderer() {
public Object getDisplayValue(Object object) {
return (String) object + "%";
}
public String getIdValue(Object object, int index) {
return (String) object;
}
});
chartPrefs.add(chartTransparency);
// Section: Activity Definition
CheckBox useAllTools = new CheckBox("useAllTools");
useAllTools.add(new SimpleAttributeModifier("onclick", "toggleCheckboxAll();"));
useAllTools.setOutputMarkupId(true);
useAllTools.setMarkupId("useAllTools");
form.add(useAllTools);
eventRegistryTree = new EventRegistryTree("eventRegistryTree", getPrefsdata().getToolEventsDef()) {
@Override
public boolean isToolSuported(final ToolInfo toolInfo) {
if(Locator.getFacade().getStatsManager().isEventContextSupported()){
return true;
}else{
List<ToolInfo> siteTools = Locator.getFacade().getEventRegistryService().getEventRegistry(siteId, getPrefsdata().isListToolEventsOnlyAvailableInSite());
Iterator<ToolInfo> i = siteTools.iterator();
while (i.hasNext()){
ToolInfo t = i.next();
if(t.getToolId().equals(toolInfo.getToolId())){
EventParserTip parserTip = t.getEventParserTip();
if(parserTip != null && parserTip.getFor().equals(StatsManager.PARSERTIP_FOR_CONTEXTID)){
return true;
}
}
}
}
return false;
}
};
form.add(eventRegistryTree);
// Bottom Buttons
Button update = new Button("update") {
@Override
public void onSubmit() {
savePreferences();
prefsdata = null;
super.onSubmit();
}
};
update.setDefaultFormProcessing(true);
form.add(update);
Button cancel = new Button("cancel") {
@Override
public void onSubmit() {
prefsdata = null;
super.onSubmit();
}
};
cancel.setDefaultFormProcessing(false);
form.add(cancel);
}
private PrefsData getPrefsdata() {
if(prefsdata == null) {
prefsdata = Locator.getFacade().getStatsManager().getPreferences(siteId, true);
}
return prefsdata;
}
private void savePreferences() {
if(isUseAllTools()) {
getPrefsdata().setToolEventsDef(Locator.getFacade().getEventRegistryService().getEventRegistry(siteId, isListToolEventsOnlyAvailableInSite()));
}else{
getPrefsdata().setToolEventsDef((List<ToolInfo>) eventRegistryTree.getEventRegistry());
}
boolean opOk = Locator.getFacade().getStatsManager().setPreferences(siteId, getPrefsdata());
if(opOk){
info((String) new ResourceModel("prefs_updated").getObject());
}else{
error((String) new ResourceModel("prefs_not_updated").getObject());
}
}
public void setListToolEventsOnlyAvailableInSite(boolean listToolEventsOnlyAvailableInSite) {
prefsdata.setListToolEventsOnlyAvailableInSite(listToolEventsOnlyAvailableInSite);
}
public boolean isListToolEventsOnlyAvailableInSite() {
return getPrefsdata().isListToolEventsOnlyAvailableInSite();
}
public void setChartIn3D(boolean chartIn3D) {
prefsdata.setChartIn3D(chartIn3D);
}
public boolean isChartIn3D() {
return getPrefsdata().isChartIn3D();
}
public void setUseAllTools(boolean useAllTools) {
prefsdata.setUseAllTools(useAllTools);
}
public boolean isUseAllTools() {
return getPrefsdata().isUseAllTools();
}
public void setItemLabelsVisible(boolean itemLabelsVisible) {
prefsdata.setItemLabelsVisible(itemLabelsVisible);
}
public boolean isItemLabelsVisible() {
return getPrefsdata().isItemLabelsVisible();
}
public void setChartTransparency(String value) {
float converted = (float) Util.round(Double.parseDouble(value)/100,1);
getPrefsdata().setChartTransparency(converted);
}
public String getChartTransparency() {
return Integer.toString((int) Util.round(getPrefsdata().getChartTransparency()*100,0) );
}
}