/*
* (C) Copyright 2014 Nuxeo SA (http://nuxeo.com/) and others.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* Contributors:
* <a href="mailto:grenard@nuxeo.com">Guillaume</a>
*/
package org.nuxeo.ecm.collections.jsf.actions;
import org.jboss.seam.Component;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Factory;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.intercept.BypassInterceptors;
import org.jboss.seam.core.Events;
import org.jboss.seam.faces.FacesMessages;
import org.jboss.seam.international.Messages;
import org.jboss.seam.international.StatusMessage;
import org.nuxeo.ecm.collections.api.CollectionManager;
import org.nuxeo.ecm.collections.api.FavoritesManager;
import org.nuxeo.ecm.core.api.CoreSession;
import org.nuxeo.ecm.core.api.DocumentModel;
import org.nuxeo.ecm.platform.ui.web.api.NavigationContext;
import org.nuxeo.ecm.webapp.helpers.EventNames;
import org.nuxeo.runtime.api.Framework;
/**
* @since 5.9.4
*/
@Name("favoritesActions")
@Scope(ScopeType.STATELESS)
@BypassInterceptors
public class FavoritesActionBean {
public void addCurrentDocumentToFavorites() {
final NavigationContext navigationContext = (NavigationContext) Component.getInstance("navigationContext", true);
final DocumentModel currentDocument = navigationContext.getCurrentDocument();
if (currentDocument != null) {
final FavoritesManager favoritesManager = Framework.getLocalService(FavoritesManager.class);
final CoreSession session = (CoreSession) Component.getInstance("documentManager", true);
if (!favoritesManager.isFavorite(currentDocument, session)) {
favoritesManager.addToFavorites(currentDocument, session);
navigationContext.invalidateCurrentDocument();
Events.instance().raiseEvent(EventNames.DOCUMENT_CHANGED);
final FacesMessages facesMessages = (FacesMessages) Component.getInstance("facesMessages", true);
facesMessages.add(StatusMessage.Severity.INFO, Messages.instance().get("favorites.addedToFavorites"));
}
}
}
public boolean canCurrentDocumentBeAddedToFavorites() {
final NavigationContext navigationContext = (NavigationContext) Component.getInstance("navigationContext", true);
final DocumentModel currentDocument = navigationContext.getCurrentDocument();
if (currentDocument != null) {
final FavoritesManager favoritesManager = Framework.getLocalService(FavoritesManager.class);
final CollectionManager collectionManager = Framework.getLocalService(CollectionManager.class);
final CoreSession session = (CoreSession) Component.getInstance("documentManager", true);
return collectionManager.isCollectable(currentDocument)
&& !favoritesManager.isFavorite(currentDocument, session);
}
return false;
}
public boolean canCurrentDocumentBeRemovedFromFavorites() {
final NavigationContext navigationContext = (NavigationContext) Component.getInstance("navigationContext", true);
final DocumentModel currentDocument = navigationContext.getCurrentDocument();
if (currentDocument != null) {
final FavoritesManager favoritesManager = Framework.getLocalService(FavoritesManager.class);
final CoreSession session = (CoreSession) Component.getInstance("documentManager", true);
return favoritesManager.isFavorite(currentDocument, session);
}
return false;
}
@Factory(value = "currentUserFavorites", scope = ScopeType.SESSION)
public DocumentModel getCurrentFavorites() {
FavoritesManager favoritesManager = Framework.getLocalService(FavoritesManager.class);
final NavigationContext navigationContext = (NavigationContext) Component.getInstance("navigationContext", true);
final CoreSession session = (CoreSession) Component.getInstance("documentManager", true);
return favoritesManager.getFavorites(navigationContext.getCurrentDomain(), session);
}
public void removeCurrentDocumentFromFavorites() {
final NavigationContext navigationContext = (NavigationContext) Component.getInstance("navigationContext", true);
final DocumentModel currentDocument = navigationContext.getCurrentDocument();
if (currentDocument != null) {
final FavoritesManager favoritesManager = Framework.getLocalService(FavoritesManager.class);
final CoreSession session = (CoreSession) Component.getInstance("documentManager", true);
if (favoritesManager.isFavorite(currentDocument, session)) {
favoritesManager.removeFromFavorites(currentDocument, session);
navigationContext.invalidateCurrentDocument();
Events.instance().raiseEvent(EventNames.DOCUMENT_CHANGED);
final FacesMessages facesMessages = (FacesMessages) Component.getInstance("facesMessages", true);
facesMessages.add(StatusMessage.Severity.INFO,
Messages.instance().get("favorites.removedFromFavorites"));
}
}
}
}