/**
* Copyright 2010 the original author or authors.
*
* This file is part of Zksample2. http://zksample2.sourceforge.net/
*
* Zksample2 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, either version 3 of the License, or
* (at your option) any later version.
*
* Zksample2 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 Zksample2. If not, see <http://www.gnu.org/licenses/gpl.html>.
*/
package de.forsthaus;
import java.io.Serializable;
import java.util.Collection;
import java.util.HashSet;
import java.util.Properties;
import java.util.Set;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.context.SecurityContextHolder;
import org.zkoss.spring.SpringUtil;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zul.Window;
import de.forsthaus.backend.model.Office;
/**
* Workspace for the user. One workspace per userSession. <br>
* <br>
* Every logged in user have his own workspace. <br>
* Here are stored several properties for the user. <br>
* <br>
* 1. Access the rights that the user have. <br>
* 2. The office for that the user are logged in. <br>
*
* @author bbruhns
* @author Stephan Gerth
*
*/
public class UserWorkspace implements Serializable, DisposableBean {
private static final long serialVersionUID = -3936210543827830197L;
private final static Logger logger = Logger.getLogger(UserWorkspace.class);
static private Authentication getAuthentication() {
return SecurityContextHolder.getContext().getAuthentication();
}
/**
* Get a logged-in users WorkSpace which holds all necessary vars. <br>
*
* @return the users WorkSpace
* @deprecated Sollte gegen Spring getauscht werden also Konfiguriert und
* nicht über diese Methode!
*/
@Deprecated
public static UserWorkspace getInstance() {
return SpringUtil.getBean("userWorkspace", UserWorkspace.class);
}
private String userLanguage;
private String browserType;
/**
* Indicates that as mainMenu the TreeMenu is used, otherwise BarMenu.
*
* true = init.
*/
private boolean treeMenu = true;
/**
* difference in the height between TreeMenu and BarMenu.
*/
private final int menuOffset = 32;
/**
* Not used yet.
*/
private Office office;
private Set<String> grantedAuthoritySet = null;
/**
* Default Constructor
*/
public UserWorkspace() {
if (logger.isDebugEnabled()) {
logger.debug("create new UserWorkspace [" + this + "]");
}
// speed up the ModalDialogs while disabling the animation
Window.setDefaultActionOnShow("");
}
/**
* Logout with the spring-security logout action-URL.<br>
* Therefore we make a sendRedirect() to the logout uri we <br>
* have configured in the spring-config.br>
*/
public void doLogout() {
destroy();
/* ++++++ Kills the Http session ++++++ */
// HttpSession s = (HttpSession)
// Sessions.getCurrent().getNativeSession();
// s.invalidate();
/* ++++++ Kills the zk session +++++ */
// Sessions.getCurrent().invalidate();
Executions.sendRedirect("/j_spring_logout");
}
/**
* Copied the grantedAuthorities to a Set of strings <br>
* for a faster searching in it.
*
* @return String set of GrantedAuthorities (rightNames)
*/
private Set<String> getGrantedAuthoritySet() {
if (this.grantedAuthoritySet == null) {
final Collection<GrantedAuthority> list = (Collection<GrantedAuthority>)getAuthentication().getAuthorities();
this.grantedAuthoritySet = new HashSet<String>(list.size());
for (final GrantedAuthority grantedAuthority : list) {
this.grantedAuthoritySet.add(grantedAuthority.getAuthority());
}
}
return this.grantedAuthoritySet;
}
/**
* Checks if a right is in the <b>granted rights</b> that the logged in user
* have. <br>
*
* @param rightName
* @return true, if the right is in the granted user rights.<br>
* false, if the right is not granted to the user.<br>
*/
public boolean isAllowed(String rightName) {
return getGrantedAuthoritySet().contains(rightName);
}
public Properties getUserLanguageProperty() {
// // TODO only for testing. we must get the language from
// // the users table filed
// userLanguageProperty =
// ApplicationWorkspace.getInstance().getPropEnglish();
// userLanguageProperty =
// ApplicationWorkspace.getInstance().getPropGerman();
//
// return userLanguageProperty;
return null;
}
@Override
public void destroy() {
this.grantedAuthoritySet = null;
SecurityContextHolder.clearContext();
if (logger.isDebugEnabled()) {
logger.debug("destroy Workspace [" + this + "]");
}
}
// +++++++++++++++++++++++++++++++++++++++++++++++++ //
// ++++++++++++++++ Setter/Getter ++++++++++++++++++ //
// +++++++++++++++++++++++++++++++++++++++++++++++++ //
public void setOffice(Office office) {
this.office = office;
}
public Office getOffice() {
return this.office;
}
public void setUserLanguage(String userLanguage) {
this.userLanguage = userLanguage;
}
public String getUserLanguage() {
return this.userLanguage;
}
public void setBrowserType(String browserType) {
this.browserType = browserType;
}
public String getBrowserType() {
return this.browserType;
}
public int getMenuOffset() {
int result = 0;
if (isTreeMenu())
result = 0;
else
result = menuOffset;
return result;
}
public void setTreeMenu(boolean treeMenu) {
this.treeMenu = treeMenu;
}
public boolean isTreeMenu() {
return treeMenu;
}
}