/*
* @(#)SystemInfoPage.java
*
* Copyright 2012 Instituto Superior Tecnico
* Founding Authors: Pedro Santos
*
* https://fenix-ashes.ist.utl.pt/
*
* This file is part of the Bennu-Vadin Integration Module.
*
* The Bennu-Vadin Integration Module is free software: you can
* redistribute it and/or modify it under the terms of the GNU Lesser General
* Public License as published by the Free Software Foundation, either version
* 3 of the License, or (at your option) any later version.
*
* The Bennu-Vadin Module 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with the Bennu-Vadin Module. If not, see .
*
*/
package module.vaadin.ui;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.Enumeration;
import java.util.Map;
import javax.servlet.http.HttpSession;
import pt.ist.bennu.core.applicationTier.Authenticate.UserView;
import pt.ist.bennu.core.domain.RoleType;
import pt.ist.bennu.core.domain.groups.Role;
import pt.ist.vaadinframework.annotation.EmbeddedComponent;
import pt.ist.vaadinframework.ui.EmbeddedComponentContainer;
import com.vaadin.terminal.gwt.server.WebApplicationContext;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.Label;
import com.vaadin.ui.VerticalLayout;
@EmbeddedComponent(path = "sysinfo")
/**
*
* @author Pedro Santos
*
*/
public class SystemInfoPage extends VerticalLayout implements EmbeddedComponentContainer {
public SystemInfoPage() {
setSpacing(true);
final Label status = new Label((String) null, Label.CONTENT_PREFORMATTED);
addComponent(status);
Button serialize = new Button("serialize session", new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
try {
StringBuilder result = new StringBuilder();
HttpSession session = ((WebApplicationContext) getApplication().getContext()).getHttpSession();
for (Enumeration att = session.getAttributeNames(); att.hasMoreElements();) {
String key = (String) att.nextElement();
ByteArrayOutputStream array = new ByteArrayOutputStream();
ObjectOutputStream stream = new ObjectOutputStream(array);
stream.writeObject(session.getAttribute(key));
result.append(key + ":" + array.size() + " bytes\n");
}
status.setValue(result.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
});
addComponent(serialize);
}
@Override
public boolean isAllowedToOpen(Map arguments) {
return UserView.getCurrentUser() != null && Role.getRole(RoleType.MANAGER).isMember(UserView.getCurrentUser());
}
@Override
public void setArguments(Map arguments) {
}
}