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:[email protected]">Guillaume</a> 018 */ 019package org.nuxeo.ecm.webapp.collections; 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}