/////////////////////////////////////////////////////////////////////////////
//
// 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.util.Date;
import java.util.List;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.projectforge.access.AccessChecker;
import org.projectforge.access.AccessException;
import org.projectforge.common.DateHelper;
import org.projectforge.continuousdb.UpdateEntry;
import org.projectforge.database.DatabaseUpdateDO;
import org.projectforge.database.MyDatabaseUpdateDao;
import org.projectforge.database.MyDatabaseUpdater;
import org.projectforge.excel.ExportSheet;
import org.projectforge.excel.ExportWorkbook;
import org.projectforge.user.Login;
import org.projectforge.user.PFUserContext;
import org.projectforge.user.ProjectForgeGroup;
import org.projectforge.web.wicket.AbstractSecuredPage;
import org.projectforge.web.wicket.DownloadUtils;
import org.projectforge.web.wicket.components.ContentMenuEntryPanel;
public class SystemUpdatePage extends AbstractSecuredPage
{
private static final long serialVersionUID = -7624191773850329338L;
@SpringBean(name = "myDatabaseUpdater")
MyDatabaseUpdater myDatabaseUpdater;
private final SystemUpdateForm form;
@SuppressWarnings("serial")
public SystemUpdatePage(final PageParameters parameters)
{
super(parameters);
form = new SystemUpdateForm(this);
body.add(form);
form.init();
final ContentMenuEntryPanel menu = new ContentMenuEntryPanel(getNewContentMenuChildId(), new Link<Void>(ContentMenuEntryPanel.LINK_ID) {
@Override
public void onClick()
{
checkAdminUser();
final MyDatabaseUpdateDao databaseUpdateDao = myDatabaseUpdater.getDatabaseUpdateDao();
final List<DatabaseUpdateDO> updateEntries = databaseUpdateDao.getUpdateHistory();
final ExportWorkbook workbook = new ExportWorkbook();
final ExportSheet sheet = workbook.addSheet("Update history");
sheet.getContentProvider().setColWidths(new int[] { 20, 10, 20, 15, 50, 20});
sheet.getContentProvider().putFormat(java.sql.Timestamp.class, "YYYY-MM-DD hh:mm:ss");
sheet.setPropertyNames(new String[] { "regionId", "versionString", "updateDate", "executedBy.username", "description",
"executionResult"});
sheet.addRow().setValues("region id", "version", "update date", "executed by", "description", "execution result");
sheet.addRows(updateEntries);
final String filename = "ProjectForge-UpdateHistory_" + DateHelper.getDateAsFilenameSuffix(new Date()) + ".xls";
final byte[] xls = workbook.getAsByteArray();
DownloadUtils.setDownloadTarget(xls, filename);
};
}, getString("system.update.downloadUpdateHistoryAsXls"));
addContentMenuEntry(menu);
}
/**
* @see org.projectforge.web.wicket.AbstractUnsecureBasePage#onBeforeRender()
*/
@Override
protected void onBeforeRender()
{
super.onBeforeRender();
refresh();
}
protected void update(final UpdateEntry updateEntry)
{
checkAdminUser();
accessChecker.checkRestrictedOrDemoUser();
myDatabaseUpdater.getSystemUpdater().update(updateEntry);
updateEntry.afterUpdate();
refresh();
}
protected void refresh()
{
checkAdminUser();
myDatabaseUpdater.getSystemUpdater().runAllPreChecks();
form.updateEntryRows();
}
private void checkAdminUser()
{
if (Login.getInstance().isAdminUser(PFUserContext.getUser()) == false) {
throw new AccessException(AccessChecker.I18N_KEY_VIOLATION_USER_NOT_MEMBER_OF, ProjectForgeGroup.ADMIN_GROUP.getKey());
}
}
@Override
protected String getTitle()
{
return getString("system.update.title");
}
}