/////////////////////////////////////////////////////////////////////////////
//
// Project ProjectForge Community Edition
// www.projectforge.org
//
// Copyright (C) 2001-2014 Kai Reinhard (k.reinhard@micromata.de)
//
// ProjectForge is dual-licensed.
//
// This community edition is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as published
// by the Free Software Foundation; version 3 of the License.
//
// This community edition is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
// Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, see http://www.gnu.org/licenses/.
//
/////////////////////////////////////////////////////////////////////////////
package org.projectforge.web.admin;
import java.io.Serializable;
import java.util.Date;
import org.apache.commons.lang.StringUtils;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.projectforge.AppVersion;
import org.projectforge.common.DateHelper;
import org.projectforge.user.PFUserContext;
import org.projectforge.web.wicket.AbstractStandardForm;
import org.projectforge.web.wicket.WicketApplication;
import org.projectforge.web.wicket.WicketUtils;
import org.projectforge.web.wicket.bootstrap.GridSize;
import org.projectforge.web.wicket.components.DatePanel;
import org.projectforge.web.wicket.components.MaxLengthTextArea;
import org.projectforge.web.wicket.components.MinMaxNumberField;
import org.projectforge.web.wicket.components.SingleButtonPanel;
import org.projectforge.web.wicket.flowlayout.DivPanel;
import org.projectforge.web.wicket.flowlayout.DivTextPanel;
import org.projectforge.web.wicket.flowlayout.FieldsetPanel;
import org.projectforge.web.wicket.flowlayout.InputPanel;
import org.projectforge.web.wicket.flowlayout.TextAreaPanel;
public class AdminForm extends AbstractStandardForm<AdminForm, AdminPage>
{
private static final long serialVersionUID = -2450673501083584299L;
protected Integer reindexNewestNEntries = 1000;
protected Date reindexFromDate;
protected String logEntries;
protected String formattedLogEntries;
protected String alertMessage;
protected DatePanel reindexFromDatePanel;
public AdminForm(final AdminPage parentPage)
{
super(parentPage);
}
@Override
@SuppressWarnings("serial")
protected void init()
{
super.init();
gridBuilder.newSplitPanel(GridSize.COL50);
gridBuilder.newFormHeading(getString("system.admin.group.title.alertMessage"));
{
final FieldsetPanel fs = gridBuilder.newFieldset(getString("system.admin.group.title.alertMessage"));
alertMessage = WicketApplication.getAlertMessage();
fs.add(new MaxLengthTextArea(TextAreaPanel.WICKET_ID, new PropertyModel<String>(this, "alertMessage"), 1000)).setAutogrow();
}
{
final FieldsetPanel fs = gridBuilder.newFieldset("").suppressLabelForWarning();
fs.add(new MyButtonPanel(fs.newChildId(), "setAlertMessage") {
@Override
public void onSubmit()
{
parentPage.setAlertMessage();
}
}.getButtonPanel());
fs.add(new MyButtonPanel(fs.newChildId(), "clearAlertMessage") {
@Override
public void onSubmit()
{
parentPage.clearAlertMessage();
}
/**
* @see org.projectforge.web.admin.AdminForm.MyButtonPanel#isVisible()
*/
@Override
public boolean isVisible()
{
return StringUtils.isNotBlank(alertMessage);
}
}.getButtonPanel());
}
{
final FieldsetPanel fs = gridBuilder.newFieldset(getString("system.admin.alertMessage.copyAndPaste.title")).suppressLabelForWarning();
fs.add(new DivTextPanel(fs.newChildId(), PFUserContext.getLocalizedMessage("system.admin.alertMessage.copyAndPaste.text",
AppVersion.NUMBER)));
}
gridBuilder.newSplitPanel(GridSize.COL50);
{
final FieldsetPanel fs = gridBuilder.newFieldset(getString("system.admin.reindex.newestEntries"),
getString("system.admin.reindex.newestEntries.subtitle"));
fs.add(new MinMaxNumberField<Integer>(InputPanel.WICKET_ID, new PropertyModel<Integer>(this, "reindexNewestNEntries"), 0,
Integer.MAX_VALUE));
fs.addHelpIcon(getString("system.admin.reindex.newestEntries.tooltip"));
}
{
final FieldsetPanel fs = gridBuilder.newFieldset(getString("system.admin.reindex.fromDate"));
final DatePanel datePanel = new DatePanel(fs.newChildId(), new PropertyModel<Date>(this, "reindexFromDate"));
fs.add(datePanel);
fs.addHelpIcon(new Model<String>() {
@Override
public String getObject()
{
return getString("system.admin.reindex.fromDate.tooltip")
+ (reindexFromDate != null ? " (" + DateHelper.formatAsUTC(reindexFromDate) + ")" : "");
}
});
fs.add(new MyButtonPanel(fs.newChildId(), "reindex") {
@Override
public void onSubmit()
{
parentPage.reindex();
}
}.getButtonPanel());
}
gridBuilder.newGridPanel();
{
final FieldsetPanel fs = gridBuilder.newFieldset(getString("system.admin.group.title.misc.logEntries"));
final MaxLengthTextArea logEntries = new MaxLengthTextArea(TextAreaPanel.WICKET_ID, new PropertyModel<String>(this, "logEntries"),
10000);
logEntries.add(AttributeModifier.append("style", "width: 100%; height: 20em;"));
fs.add(logEntries);
fs.addHelpIcon(getString("system.admin.button.formatLogEntries.textarea.tooltip"));
}
{
final FieldsetPanel fs = gridBuilder.newFieldset("").suppressLabelForWarning();
fs.add(new MyButtonPanel(fs.newChildId(), "formatLogEntries") {
@Override
public void onSubmit()
{
parentPage.formatLogEntries();
}
}.getButtonPanel());
}
gridBuilder.newGridPanel();
final DivPanel section = gridBuilder.getPanel();
final DivTextPanel logMessages = new DivTextPanel(section.newChildId(), new Model<String>() {
@Override
public String getObject()
{
return formattedLogEntries;
}
});
logMessages.getLabel().setEscapeModelStrings(false);
section.add(logMessages);
}
private abstract class MyButtonPanel implements Serializable
{
private static final long serialVersionUID = -7100891342667728950L;
private final Button button;
private final SingleButtonPanel buttonPanel;
@SuppressWarnings("serial")
private MyButtonPanel(final String id, final String i18nKey)
{
button = new Button(SingleButtonPanel.WICKET_ID, new Model<String>()) {
@Override
public final void onSubmit()
{
MyButtonPanel.this.onSubmit();
}
/**
* @see org.apache.wicket.Component#isVisible()
*/
@Override
public boolean isVisible()
{
return MyButtonPanel.this.isVisible();
}
};
buttonPanel = new SingleButtonPanel(id, button, getString("system.admin.button." + i18nKey), SingleButtonPanel.NORMAL);
WicketUtils.addTooltip(button, getString("system.admin.button." + i18nKey + ".tooltip"));
}
public SingleButtonPanel getButtonPanel()
{
return buttonPanel;
}
public abstract void onSubmit();
public boolean isVisible()
{
return true;
}
}
}