/* * * Copyright (C) 2007-2015 Licensed to the Comunes Association (CA) under * one or more contributor license agreements (see COPYRIGHT for details). * The CA licenses this file to you under the GNU Affero General Public * License version 3, (the "License"); you may not use this file except in * compliance with the License. This file is part of kune. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * */ package cc.kune.core.client.state.impl; import java.util.Collection; import java.util.List; import cc.kune.common.client.utils.WindowUtils; import cc.kune.core.client.cookies.CookiesManager; import cc.kune.core.client.events.AppStartEvent; import cc.kune.core.client.events.AppStartEvent.AppStartHandler; import cc.kune.core.client.events.UserSignInEvent; import cc.kune.core.client.events.UserSignInEvent.UserSignInHandler; import cc.kune.core.client.events.UserSignInOrSignOutEvent; import cc.kune.core.client.events.UserSignInOrSignOutEvent.UserSignInOrSignOutHandler; import cc.kune.core.client.events.UserSignOutEvent; import cc.kune.core.client.events.UserSignOutEvent.UserSignOutHandler; import cc.kune.core.client.events.WaveSessionAvailableEvent; import cc.kune.core.client.state.Session; import cc.kune.core.shared.SessionConstants; import cc.kune.core.shared.domain.utils.StateToken; import cc.kune.core.shared.dto.I18nCountryDTO; import cc.kune.core.shared.dto.I18nLanguageDTO; import cc.kune.core.shared.dto.I18nLanguageSimpleDTO; import cc.kune.core.shared.dto.InitDataDTO; import cc.kune.core.shared.dto.LicenseDTO; import cc.kune.core.shared.dto.StateAbstractDTO; import cc.kune.core.shared.dto.StateContainerDTO; import cc.kune.core.shared.dto.StateContentDTO; import cc.kune.core.shared.dto.ToolSimpleDTO; import cc.kune.core.shared.dto.UserInfoDTO; import cc.kune.core.shared.dto.UserSimpleDTO; import com.google.gwt.core.client.GWT; import com.google.inject.Inject; import com.google.web.bindery.event.shared.EventBus; import com.google.web.bindery.event.shared.HandlerRegistration; /** * The Class SessionDefault. * * @author danigb@gmail.com * @author vjrj@ourproject.org (Vicente J. Ruiz Jurado) */ public class SessionDefault implements Session { private final CookiesManager cookieManager; private Object[][] countriesArray; private I18nLanguageDTO currentLanguage; private StateAbstractDTO currentState; private UserInfoDTO currentUserInfo; private final EventBus eventBus; private InitDataDTO initData; private Boolean isDev; private boolean isEmbedded = false; /** The languages array. */ private Object[][] languagesArray; private Object[][] timezonesArray; private String userHash; /** * Instantiates a new session default. * * @param cookieManager * the cookie manager * @param userServiceProvider * the user service provider * @param eventBus * the event bus */ @Inject public SessionDefault(final CookiesManager cookieManager, final EventBus eventBus) { this.cookieManager = cookieManager; this.eventBus = eventBus; this.userHash = cookieManager.getAuthCookie(); this.userHash = userHash == null || userHash.equals("null") ? null : userHash; languagesArray = null; } @Override public StateContainerDTO getContainerState() { return (StateContainerDTO) currentState; } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#getContentState() */ @Override public StateContentDTO getContentState() { return (StateContentDTO) currentState; } @Override public List<I18nCountryDTO> getCountries() { return initData.getCountries(); } @Override public Object[][] getCountriesArray() { if (countriesArray == null) { countriesArray = mapCountries(); } return countriesArray; } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#getCurrentCCversion() */ @Override public String getCurrentCCversion() { return initData.getCurrentCCversion(); } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#getCurrentGroupShortName() */ @Override public String getCurrentGroupShortName() { return currentState == null ? null : currentState.getStateToken().getGroup(); } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#getCurrentLanguage() */ @Override public I18nLanguageDTO getCurrentLanguage() { return currentLanguage; } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#getCurrentState() */ @Override public StateAbstractDTO getCurrentState() { return currentState; } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#getCurrentStateToken() */ @Override public StateToken getCurrentStateToken() { return currentState == null ? null : currentState.getStateToken(); } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#getCurrentUser() */ @Override public UserSimpleDTO getCurrentUser() { return currentUserInfo == null ? null : currentUserInfo.getUser(); } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#getCurrentUserInfo() */ @Override public UserInfoDTO getCurrentUserInfo() { return currentUserInfo; } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#getDefLicense() */ @Override public LicenseDTO getDefLicense() { return initData.getDefaultLicense(); } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#getFullTranslatedLanguages() */ @Override public List<I18nLanguageSimpleDTO> getFullTranslatedLanguages() { return initData.getFullTranslatedLanguages(); } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#getGalleryPermittedExtensions() */ @Override public String getGalleryPermittedExtensions() { return initData.getGalleryPermittedExtensions(); } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#getGroupTools() */ @Override public Collection<ToolSimpleDTO> getGroupTools() { return initData.getGroupTools(); } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#getImgCropsize() */ @Override public int getImgCropsize() { return initData.getImgCropsize(); } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#getImgIconsize() */ @Override public int getImgIconsize() { return initData.getImgIconsize(); } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#getImgResizewidth() */ @Override public int getImgResizewidth() { return initData.getImgResizewidth(); } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#getImgThumbsize() */ @Override public int getImgThumbsize() { return initData.getImgThumbsize(); } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#getInitData() */ @Override public InitDataDTO getInitData() { return initData; } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#getLanguages() */ @Override public List<I18nLanguageSimpleDTO> getLanguages() { return initData.getLanguages(); } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#getLanguagesArray() */ @Override public Object[][] getLanguagesArray() { if (languagesArray == null) { languagesArray = mapLangs(); } return languagesArray; } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#getLicenses() */ @Override public List<LicenseDTO> getLicenses() { return initData.getLicenses(); } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#getShowDeletedContent() */ @Override public boolean getShowDeletedContent() { return currentUserInfo == null ? false : currentUserInfo.getShowDeletedContent(); } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#getSiteUrl() */ @Override public String getSiteUrl() { final String baseURL = GWT.getModuleBaseURL(); return baseURL.substring(0, baseURL.lastIndexOf("/" + GWT.getModuleName())); } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#getTimezones() */ @Override public Object[][] getTimezones() { if (timezonesArray == null) { mapTimezones(); } return timezonesArray; } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#getUserHash() */ @Override public String getUserHash() { return userHash; } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#getUserTools() */ @Override public Collection<ToolSimpleDTO> getUserTools() { return initData.getUserTools(); } /* * (non-Javadoc) * * @see * cc.kune.core.client.state.Session#inSameToken(cc.kune.core.shared.domain * .utils.StateToken) */ @Override public boolean inSameToken(final StateToken token) { return getCurrentStateToken().equals(token); } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#isCurrentStateAContent() */ @Override public boolean isCurrentStateAContent() { return currentState instanceof StateContentDTO; } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#isCurrentStateAGroup() */ @Override public boolean isCurrentStateAGroup() { return currentState == null ? false : !currentState.getGroup().isPersonal(); } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#isCurrentStateAPerson() */ @Override public boolean isCurrentStateAPerson() { return currentState == null ? false : currentState.getGroup().isPersonal(); } @Override public boolean isEmbedded() { return isEmbedded; } @Override public boolean isGuiInDevelopment() { if (isDev == null) { final String isDevParam = WindowUtils.getParameter(SessionConstants.DEVELOPMENT); final boolean inDevUrlParam = isDevParam == null ? false : Boolean.valueOf(isDevParam); // Server can force to show UI devel Features via MBean / properties isDev = initData.getShowInDevelFeatures() || inDevUrlParam; } return isDev; } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#isInCurrentUserSpace() */ @Override public boolean isInCurrentUserSpace() { if (!isLogged()) { return false; } final StateToken currentStateToken = getCurrentStateToken(); if (currentStateToken != null && currentStateToken.getGroup().equals(getCurrentUser().getShortName())) { return true; } return false; } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#isLogged() */ @Override public boolean isLogged() { return userHash != null; } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#isNewbie() */ @Override public boolean isNewbie() { return currentUserInfo != null ? currentUserInfo.getSignInCount() <= SessionConstants.MIN_SIGN_IN_FOR_NEWBIES : true; } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#isNotLogged() */ @Override public boolean isNotLogged() { return !isLogged(); } /** * Map countries. * * @return the object[][] */ private Object[][] mapCountries() { assert initData != null; final Object[][] objs = new Object[initData.getCountries().size()][1]; int i = 0; for (final I18nCountryDTO country : initData.getCountries()) { final Object[] obj = new Object[] { country.getCode(), country.getEnglishName() }; objs[i++] = obj; } return objs; } /** * Map langs. * * @return the object[][] */ private Object[][] mapLangs() { assert initData != null; final Object[][] objs = new Object[initData.getLanguages().size()][1]; int i = 0; for (final I18nLanguageSimpleDTO language : initData.getLanguages()) { final Object[] obj = new Object[] { language.getCode(), language.getEnglishName() }; objs[i++] = obj; } return objs; } /** * Map timezones. */ private void mapTimezones() { assert initData != null; timezonesArray = new Object[initData.getTimezones().length][1]; for (int i = 0; i < getTimezones().length; i++) { final Object[] obj = new Object[] { initData.getTimezones()[i] }; timezonesArray[i] = obj; } } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#onAppStart(boolean, * cc.kune.core.client.events.AppStartEvent.AppStartHandler) */ @Override public HandlerRegistration onAppStart(final boolean fireNow, final AppStartHandler handler) { final HandlerRegistration handlerReg = eventBus.addHandler(AppStartEvent.getType(), handler); if (fireNow && initData != null) { handler.onAppStart(new AppStartEvent(initData)); } return handlerReg; } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#onUserSignIn(boolean, * cc.kune.core.client.events.UserSignInEvent.UserSignInHandler) */ @Override public HandlerRegistration onUserSignIn(final boolean fireNow, final UserSignInHandler handler) { final HandlerRegistration handlerReg = eventBus.addHandler(UserSignInEvent.getType(), handler); if (fireNow && isLogged() && currentUserInfo != null) { handler.onUserSignIn(new UserSignInEvent(currentUserInfo)); } return handlerReg; } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#onUserSignInOrSignOut(boolean, * cc.kune * .core.client.events.UserSignInOrSignOutEvent.UserSignInOrSignOutHandler) */ @Override public HandlerRegistration onUserSignInOrSignOut(final boolean fireNow, final UserSignInOrSignOutHandler handler) { final HandlerRegistration handlerReg = eventBus.addHandler(UserSignInOrSignOutEvent.getType(), handler); if (fireNow) { handler.onUserSignInOrSignOut(new UserSignInOrSignOutEvent(isLogged())); } return handlerReg; } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#onUserSignOut(boolean, * cc.kune.core.client.events.UserSignOutEvent.UserSignOutHandler) */ @Override public HandlerRegistration onUserSignOut(final boolean fireNow, final UserSignOutHandler handler) { final HandlerRegistration handlerReg = eventBus.addHandler(UserSignOutEvent.getType(), handler); if (fireNow && isNotLogged()) { handler.onUserSignOut(new UserSignOutEvent()); } return handlerReg; } /* * (non-Javadoc) * * @see * cc.kune.core.client.state.Session#refreshCurrentUserInfo(cc.kune.core.shared * .dto.UserInfoDTO) */ @Override public void refreshCurrentUserInfo(final UserInfoDTO currentUserInfo) { this.currentUserInfo = currentUserInfo; } /* * (non-Javadoc) * * @see * cc.kune.core.client.state.Session#setCurrentLanguage(cc.kune.core.shared * .dto.I18nLanguageDTO) */ @Override public void setCurrentLanguage(final I18nLanguageDTO currentLanguage) { this.currentLanguage = currentLanguage; } /* * (non-Javadoc) * * @see * cc.kune.core.client.state.Session#setCurrentState(cc.kune.core.shared.dto * .StateAbstractDTO) */ @Override public void setCurrentState(final StateAbstractDTO currentState) { this.currentState = currentState; } /* * (non-Javadoc) * * @see * cc.kune.core.client.state.Session#setCurrentUserInfo(cc.kune.core.shared * .dto.UserInfoDTO, java.lang.String) */ @Override public void setCurrentUserInfo(final UserInfoDTO currentUserInfo, final String password) { this.currentUserInfo = currentUserInfo; if (currentUserInfo != null) { // First of all, prepare wave panel eventBus.fireEvent(new WaveSessionAvailableEvent(currentUserInfo)); // Later the rest eventBus.fireEvent(new UserSignInEvent(this.currentUserInfo)); } else { eventBus.fireEvent(new UserSignOutEvent()); } eventBus.fireEvent(new UserSignInOrSignOutEvent(isLogged())); } @Override public void setEmbedded(final boolean isEmbedded) { this.isEmbedded = isEmbedded; } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#setInitData(cc.kune.core.shared.dto. * InitDataDTO) */ @Override public void setInitData(final InitDataDTO initData) { this.initData = initData; } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#setUserHash(java.lang.String) */ @Override public void setUserHash(final String userHash) { this.userHash = userHash; } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#signOut() */ @Override public void signOut() { cookieManager.removeAuthCookie(); setUserHash(null); setCurrentUserInfo(null, null); } /* * (non-Javadoc) * * @see cc.kune.core.client.state.Session#userIsJoiningGroups() */ @Override public boolean userIsJoiningGroups() { return currentUserInfo.getGroupsIsAdmin().size() + currentUserInfo.getGroupsIsCollab().size() > 0; } }