001/*
002 * (C) Copyright 2014 Nuxeo SA (http://nuxeo.com/) and others.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *     http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 *
016 * Contributors:
017 *     <a href="mailto:grenard@nuxeo.com">Guillaume</a>
018 */
019package org.nuxeo.ecm.collections.jsf.actions;
020
021import org.jboss.seam.Component;
022import org.jboss.seam.ScopeType;
023import org.jboss.seam.annotations.Factory;
024import org.jboss.seam.annotations.Name;
025import org.jboss.seam.annotations.Scope;
026import org.jboss.seam.annotations.intercept.BypassInterceptors;
027import org.jboss.seam.core.Events;
028import org.jboss.seam.faces.FacesMessages;
029import org.jboss.seam.international.Messages;
030import org.jboss.seam.international.StatusMessage;
031import org.nuxeo.ecm.collections.api.CollectionManager;
032import org.nuxeo.ecm.collections.api.FavoritesManager;
033import org.nuxeo.ecm.core.api.CoreSession;
034import org.nuxeo.ecm.core.api.DocumentModel;
035import org.nuxeo.ecm.platform.ui.web.api.NavigationContext;
036import org.nuxeo.ecm.webapp.helpers.EventNames;
037import org.nuxeo.runtime.api.Framework;
038
039/**
040 * @since 5.9.4
041 */
042@Name("favoritesActions")
043@Scope(ScopeType.STATELESS)
044@BypassInterceptors
045public class FavoritesActionBean {
046
047    public void addCurrentDocumentToFavorites() {
048        final NavigationContext navigationContext = (NavigationContext) Component.getInstance("navigationContext", true);
049        final DocumentModel currentDocument = navigationContext.getCurrentDocument();
050        if (currentDocument != null) {
051            final FavoritesManager favoritesManager = Framework.getService(FavoritesManager.class);
052            final CoreSession session = (CoreSession) Component.getInstance("documentManager", true);
053            if (!favoritesManager.isFavorite(currentDocument, session)) {
054                favoritesManager.addToFavorites(currentDocument, session);
055
056                navigationContext.invalidateCurrentDocument();
057
058                Events.instance().raiseEvent(EventNames.DOCUMENT_CHANGED);
059
060                final FacesMessages facesMessages = (FacesMessages) Component.getInstance("facesMessages", true);
061                facesMessages.add(StatusMessage.Severity.INFO, Messages.instance().get("favorites.addedToFavorites"));
062            }
063
064        }
065    }
066
067    public boolean canCurrentDocumentBeAddedToFavorites() {
068        final NavigationContext navigationContext = (NavigationContext) Component.getInstance("navigationContext", true);
069        final DocumentModel currentDocument = navigationContext.getCurrentDocument();
070        if (currentDocument != null) {
071            final FavoritesManager favoritesManager = Framework.getService(FavoritesManager.class);
072            final CollectionManager collectionManager = Framework.getService(CollectionManager.class);
073            final CoreSession session = (CoreSession) Component.getInstance("documentManager", true);
074            return collectionManager.isCollectable(currentDocument)
075                    && !favoritesManager.isFavorite(currentDocument, session);
076        }
077        return false;
078    }
079
080    public boolean canCurrentDocumentBeRemovedFromFavorites() {
081        final NavigationContext navigationContext = (NavigationContext) Component.getInstance("navigationContext", true);
082        final DocumentModel currentDocument = navigationContext.getCurrentDocument();
083        if (currentDocument != null) {
084            final FavoritesManager favoritesManager = Framework.getService(FavoritesManager.class);
085            final CoreSession session = (CoreSession) Component.getInstance("documentManager", true);
086            return favoritesManager.isFavorite(currentDocument, session);
087        }
088        return false;
089    }
090
091    @Factory(value = "currentUserFavorites", scope = ScopeType.SESSION)
092    public DocumentModel getCurrentFavorites() {
093        FavoritesManager favoritesManager = Framework.getService(FavoritesManager.class);
094        final NavigationContext navigationContext = (NavigationContext) Component.getInstance("navigationContext", true);
095        final CoreSession session = (CoreSession) Component.getInstance("documentManager", true);
096        return favoritesManager.getFavorites(navigationContext.getCurrentDomain(), session);
097    }
098
099    public void removeCurrentDocumentFromFavorites() {
100        final NavigationContext navigationContext = (NavigationContext) Component.getInstance("navigationContext", true);
101        final DocumentModel currentDocument = navigationContext.getCurrentDocument();
102        if (currentDocument != null) {
103            final FavoritesManager favoritesManager = Framework.getService(FavoritesManager.class);
104            final CoreSession session = (CoreSession) Component.getInstance("documentManager", true);
105            if (favoritesManager.isFavorite(currentDocument, session)) {
106                favoritesManager.removeFromFavorites(currentDocument, session);
107
108                navigationContext.invalidateCurrentDocument();
109
110                Events.instance().raiseEvent(EventNames.DOCUMENT_CHANGED);
111
112                final FacesMessages facesMessages = (FacesMessages) Component.getInstance("facesMessages", true);
113                facesMessages.add(StatusMessage.Severity.INFO,
114                        Messages.instance().get("favorites.removedFromFavorites"));
115            }
116
117        }
118    }
119
120}