/*
*
* 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;
import cc.kune.common.client.shortcuts.GlobalShortcuts;
import cc.kune.common.client.ui.KuneWindowUtils;
import cc.kune.common.shared.i18n.I18nTranslationService;
import cc.kune.common.shared.utils.TextUtils;
import cc.kune.core.client.auth.AnonUsersManager;
import cc.kune.core.client.auth.EmailNotVerifiedReminder;
import cc.kune.core.client.auth.Register;
import cc.kune.core.client.auth.SignIn;
import cc.kune.core.client.events.AppStartEvent;
import cc.kune.core.client.events.AppStartEvent.AppStartHandler;
import cc.kune.core.client.groups.newgroup.NewGroup;
import cc.kune.core.client.init.WebSocketChecker;
import cc.kune.core.client.invitation.InvitationClientManager;
import cc.kune.core.client.invitation.SiteInvitationBtn;
import cc.kune.core.client.resources.CoreMessages;
import cc.kune.core.client.sitebar.AboutKuneDialog;
import cc.kune.core.client.sitebar.SiteUserOptionsPresenter;
import cc.kune.core.client.sitebar.auth.AskForPasswordResetPanel;
import cc.kune.core.client.sitebar.auth.PasswordResetPanel;
import cc.kune.core.client.sitebar.auth.VerifyEmailClientManager;
import cc.kune.core.client.sitebar.spaces.Space;
import cc.kune.core.client.sitebar.spaces.SpaceSelectEvent;
import cc.kune.core.client.sitebar.spaces.SpaceSelectorPresenter;
import cc.kune.core.client.sn.GroupSNPresenter;
import cc.kune.core.client.sn.UserSNPresenter;
import cc.kune.core.client.sn.actions.registry.GroupSNConfActions;
import cc.kune.core.client.sn.actions.registry.UserSNConfActions;
import cc.kune.core.client.state.HistoryTokenAuthNotNeededCallback;
import cc.kune.core.client.state.HistoryTokenMustBeAuthCallback;
import cc.kune.core.client.state.HistoryWrapper;
import cc.kune.core.client.state.LinkInterceptor;
import cc.kune.core.client.state.Session;
import cc.kune.core.client.state.SiteTokenListeners;
import cc.kune.core.client.state.SiteTokens;
import cc.kune.core.client.sub.SubtitlesManager;
import cc.kune.gspace.client.options.GroupOptions;
import cc.kune.gspace.client.options.UserOptions;
import cc.kune.gspace.client.viewers.TutorialViewer;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import com.google.web.bindery.event.shared.EventBus;
import com.google.inject.Inject;
import com.google.inject.Provider;
// TODO: Auto-generated Javadoc
/**
* The Class CoreParts.
*
* @author vjrj@ourproject.org (Vicente J. Ruiz Jurado)
*/
public class CoreParts {
/**
* Instantiates a new core parts.
*
* @param session
* the session
* @param groupMembersPresenter
* the group members presenter
* @param buddiesAndParticipationPresenter
* the buddies and participation presenter
* @param groupMembersConfActions
* the group members conf actions
* @param userSNConfActions
* the user sn conf actions
* @param anonUsers
* the anon users
* @param userOptions
* the user options
* @param spaceSelector
* the space selector
* @param tokenListener
* the token listener
* @param signIn
* the sign in
* @param register
* the register
* @param aboutKuneDialog
* the about kune dialog
* @param newGroup
* the new group
* @param subProvider
* the sub provider
* @param eventBus
* the event bus
* @param verifyManager
* the verify manager
* @param userOptionsDialog
* the user options dialog
* @param groupOptionsDialog
* the group options dialog
* @param passReset
* the pass reset
* @param askForPass
* the ask for pass
* @param shortcuts
* the shortcuts
* @param i18n
* the i18n
* @param tutorialViewer
* the tutorial viewer
* @param websocketChecker
* the websocket checker
* @param emailNotVerifiedReminder
* the email not verified reminder
* @param siteInvitation
* the site invitation
* @param invitationManager
* the invitation manager
*/
@Inject
public CoreParts(final Session session, final Provider<GroupSNPresenter> groupMembersPresenter,
final Provider<UserSNPresenter> buddiesAndParticipationPresenter,
final Provider<GroupSNConfActions> groupMembersConfActions,
final Provider<UserSNConfActions> userSNConfActions, final Provider<AnonUsersManager> anonUsers,
final Provider<SiteUserOptionsPresenter> userOptions,
final Provider<SpaceSelectorPresenter> spaceSelector, final SiteTokenListeners tokenListener,
final Provider<SignIn> signIn, final Provider<Register> register,
final Provider<AboutKuneDialog> aboutKuneDialog, final Provider<NewGroup> newGroup,
final Provider<SubtitlesManager> subProvider, final EventBus eventBus,
final Provider<VerifyEmailClientManager> verifyManager,
final Provider<UserOptions> userOptionsDialog, final Provider<GroupOptions> groupOptionsDialog,
final Provider<PasswordResetPanel> passReset, final Provider<AskForPasswordResetPanel> askForPass,
final GlobalShortcuts shortcuts, final I18nTranslationService i18n,
final Provider<TutorialViewer> tutorialViewer, final Provider<WebSocketChecker> websocketChecker,
final Provider<EmailNotVerifiedReminder> emailNotVerifiedReminder,
final Provider<SiteInvitationBtn> siteInvitation, final InvitationClientManager invitationManager,
final Provider<LinkInterceptor> linkInterceptor, final HistoryWrapper history) {
session.onAppStart(true, new AppStartHandler() {
@Override
public void onAppStart(final AppStartEvent event) {
groupMembersConfActions.get();
userSNConfActions.get();
groupMembersPresenter.get();
buddiesAndParticipationPresenter.get();
userOptions.get();
anonUsers.get();
spaceSelector.get();
tutorialViewer.get();
emailNotVerifiedReminder.get();
websocketChecker.get();
siteInvitation.get();
linkInterceptor.get();
}
});
tokenListener.put(SiteTokens.SIGN_IN, new HistoryTokenAuthNotNeededCallback() {
@Override
public void onHistoryToken(final String token) {
Scheduler.get().scheduleFinally(new ScheduledCommand() {
@Override
public void execute() {
if (session.isLogged()) {
// We are logged, then redirect:
if (token != null && token.matches(TextUtils.URL_REGEXP)) {
// Redirect to other website
KuneWindowUtils.open(token);
} else {
history.newItem(token, true);
}
} else {
signIn.get().showSignInDialog(token);
}
}
});
}
});
tokenListener.put(SiteTokens.ABOUT_KUNE, new HistoryTokenAuthNotNeededCallback() {
@Override
public void onHistoryToken(final String token) {
// FIXME, something to come back
aboutKuneDialog.get().showCentered();
}
});
tokenListener.put(SiteTokens.REGISTER, new HistoryTokenAuthNotNeededCallback() {
@Override
public void onHistoryToken(final String token) {
register.get().doRegister(token);
}
});
tokenListener.put(SiteTokens.TUTORIAL, new HistoryTokenAuthNotNeededCallback() {
@Override
public void onHistoryToken(final String token) {
// Do nothing (move SMD part here, but depends of getContent callback)
}
});
tokenListener.put(SiteTokens.NEW_GROUP,
new HistoryTokenMustBeAuthCallback(i18n.t(CoreMessages.REGISTER_TO_CREATE_A_GROUP)) {
@Override
public void onHistoryToken(final String token) {
Scheduler.get().scheduleFinally(new ScheduledCommand() {
@Override
public void execute() {
newGroup.get().doNewGroup();
}
});
}
});
tokenListener.put(SiteTokens.SUBTITLES, new HistoryTokenAuthNotNeededCallback() {
@Override
public void onHistoryToken(final String token) {
subProvider.get().show(token);
}
});
tokenListener.put(SiteTokens.HOME, new HistoryTokenAuthNotNeededCallback() {
@Override
public void onHistoryToken(final String token) {
SpaceSelectEvent.fire(eventBus, Space.homeSpace);
}
});
tokenListener.put(SiteTokens.WAVE_INBOX,
new HistoryTokenMustBeAuthCallback(i18n.t(CoreMessages.SIGN_IN_TO_ACCESS_INBOX)) {
@Override
public void onHistoryToken(final String token) {
SpaceSelectEvent.fire(eventBus, Space.userSpace);
}
});
tokenListener.put(SiteTokens.PREFS, new HistoryTokenMustBeAuthCallback("") {
@Override
public void onHistoryToken(final String token) {
Scheduler.get().scheduleFinally(new ScheduledCommand() {
@Override
public void execute() {
SpaceSelectEvent.fire(eventBus, Space.groupSpace);
userOptionsDialog.get().show();
}
});
}
});
tokenListener.put(SiteTokens.GROUP_PREFS, new HistoryTokenMustBeAuthCallback("") {
@Override
public void onHistoryToken(final String token) {
Scheduler.get().scheduleFinally(new ScheduledCommand() {
@Override
public void execute() {
groupOptionsDialog.get().show(token);
}
});
}
});
tokenListener.put(SiteTokens.RESET_PASSWD, new HistoryTokenAuthNotNeededCallback() {
@Override
public void onHistoryToken(final String token) {
Scheduler.get().scheduleFinally(new ScheduledCommand() {
@Override
public void execute() {
if (!session.isLogged()) {
askForPass.get().show();
}
}
});
}
});
tokenListener.put(SiteTokens.ASK_RESET_PASSWD, new HistoryTokenAuthNotNeededCallback() {
@Override
public void onHistoryToken(final String token) {
Scheduler.get().scheduleFinally(new ScheduledCommand() {
@Override
public void execute() {
if (!session.isLogged()) {
askForPass.get().show();
}
}
});
}
});
tokenListener.put(SiteTokens.RESET_PASSWD, new HistoryTokenAuthNotNeededCallback() {
@Override
public void onHistoryToken(final String token) {
if (!session.isLogged()) {
passReset.get().setPasswordHash(token);
passReset.get().show();
}
}
});
tokenListener.put(SiteTokens.INVITATION, new HistoryTokenAuthNotNeededCallback() {
@Override
public void onHistoryToken(final String token) {
invitationManager.process(token);
}
});
verifyManager.get();
}
}