001/*
002 * (C) Copyright 2014 Nuxeo SA (http://nuxeo.com/) and contributors.
003 *
004 * All rights reserved. This program and the accompanying materials
005 * are made available under the terms of the GNU Lesser General Public License
006 * (LGPL) version 2.1 which accompanies this distribution, and is available at
007 * http://www.gnu.org/licenses/lgpl-2.1.html
008 *
009 * This library is distributed in the hope that it will be useful,
010 * but WITHOUT ANY WARRANTY; without even the implied warranty of
011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012 * Lesser General Public License for more details.
013 *
014 * Contributors:
015 *     <a href="mailto:grenard@nuxeo.com">Guillaume</a>
016 */
017package org.nuxeo.ecm.collections.jsf.actions;
018
019import org.jboss.seam.Component;
020import org.jboss.seam.ScopeType;
021import org.jboss.seam.annotations.Factory;
022import org.jboss.seam.annotations.Name;
023import org.jboss.seam.annotations.Scope;
024import org.jboss.seam.annotations.intercept.BypassInterceptors;
025import org.jboss.seam.core.Events;
026import org.jboss.seam.faces.FacesMessages;
027import org.jboss.seam.international.Messages;
028import org.jboss.seam.international.StatusMessage;
029import org.nuxeo.ecm.collections.api.CollectionManager;
030import org.nuxeo.ecm.collections.api.FavoritesManager;
031import org.nuxeo.ecm.core.api.CoreSession;
032import org.nuxeo.ecm.core.api.DocumentModel;
033import org.nuxeo.ecm.platform.ui.web.api.NavigationContext;
034import org.nuxeo.ecm.webapp.helpers.EventNames;
035import org.nuxeo.runtime.api.Framework;
036
037/**
038 * @since 5.9.4
039 */
040@Name("favoritesActions")
041@Scope(ScopeType.STATELESS)
042@BypassInterceptors
043public class FavoritesActionBean {
044
045    public void addCurrentDocumentToFavorites() {
046        final NavigationContext navigationContext = (NavigationContext) Component.getInstance("navigationContext", true);
047        final DocumentModel currentDocument = navigationContext.getCurrentDocument();
048        if (currentDocument != null) {
049            final FavoritesManager favoritesManager = Framework.getLocalService(FavoritesManager.class);
050            final CoreSession session = (CoreSession) Component.getInstance("documentManager", true);
051            if (!favoritesManager.isFavorite(currentDocument, session)) {
052                favoritesManager.addToFavorites(currentDocument, session);
053
054                navigationContext.invalidateCurrentDocument();
055
056                Events.instance().raiseEvent(EventNames.DOCUMENT_CHANGED);
057
058                final FacesMessages facesMessages = (FacesMessages) Component.getInstance("facesMessages", true);
059                facesMessages.add(StatusMessage.Severity.INFO, Messages.instance().get("favorites.addedToFavorites"));
060            }
061
062        }
063    }
064
065    public boolean canCurrentDocumentBeAddedToFavorites() {
066        final NavigationContext navigationContext = (NavigationContext) Component.getInstance("navigationContext", true);
067        final DocumentModel currentDocument = navigationContext.getCurrentDocument();
068        if (currentDocument != null) {
069            final FavoritesManager favoritesManager = Framework.getLocalService(FavoritesManager.class);
070            final CollectionManager collectionManager = Framework.getLocalService(CollectionManager.class);
071            final CoreSession session = (CoreSession) Component.getInstance("documentManager", true);
072            return collectionManager.isCollectable(currentDocument)
073                    && !favoritesManager.isFavorite(currentDocument, session);
074        }
075        return false;
076    }
077
078    public boolean canCurrentDocumentBeRemovedFromFavorites() {
079        final NavigationContext navigationContext = (NavigationContext) Component.getInstance("navigationContext", true);
080        final DocumentModel currentDocument = navigationContext.getCurrentDocument();
081        if (currentDocument != null) {
082            final FavoritesManager favoritesManager = Framework.getLocalService(FavoritesManager.class);
083            final CoreSession session = (CoreSession) Component.getInstance("documentManager", true);
084            return favoritesManager.isFavorite(currentDocument, session);
085        }
086        return false;
087    }
088
089    @Factory(value = "currentUserFavorites", scope = ScopeType.SESSION)
090    public DocumentModel getCurrentFavorites() {
091        FavoritesManager favoritesManager = Framework.getLocalService(FavoritesManager.class);
092        final NavigationContext navigationContext = (NavigationContext) Component.getInstance("navigationContext", true);
093        final CoreSession session = (CoreSession) Component.getInstance("documentManager", true);
094        return favoritesManager.getFavorites(navigationContext.getCurrentDomain(), session);
095    }
096
097    public void removeCurrentDocumentFromFavorites() {
098        final NavigationContext navigationContext = (NavigationContext) Component.getInstance("navigationContext", true);
099        final DocumentModel currentDocument = navigationContext.getCurrentDocument();
100        if (currentDocument != null) {
101            final FavoritesManager favoritesManager = Framework.getLocalService(FavoritesManager.class);
102            final CoreSession session = (CoreSession) Component.getInstance("documentManager", true);
103            if (favoritesManager.isFavorite(currentDocument, session)) {
104                favoritesManager.removeFromFavorites(currentDocument, session);
105
106                navigationContext.invalidateCurrentDocument();
107
108                Events.instance().raiseEvent(EventNames.DOCUMENT_CHANGED);
109
110                final FacesMessages facesMessages = (FacesMessages) Component.getInstance("facesMessages", true);
111                facesMessages.add(StatusMessage.Severity.INFO,
112                        Messages.instance().get("favorites.removedFromFavorites"));
113            }
114
115        }
116    }
117
118}