/*
* JBoss, Home of Professional Open Source
* Copyright 2013, Red Hat, Inc. and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.richfaces.photoalbum.manager;
import java.io.Serializable;
import java.util.List;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.event.Observes;
import javax.enterprise.inject.Any;
import javax.inject.Inject;
import javax.inject.Named;
import org.richfaces.photoalbum.model.Album;
import org.richfaces.photoalbum.model.Event;
import org.richfaces.photoalbum.model.Image;
import org.richfaces.photoalbum.model.MetaTag;
import org.richfaces.photoalbum.model.Shelf;
import org.richfaces.photoalbum.model.User;
import org.richfaces.photoalbum.model.event.EventType;
import org.richfaces.photoalbum.model.event.EventTypeQualifier;
import org.richfaces.photoalbum.model.event.Events;
import org.richfaces.photoalbum.model.event.NavEvent;
import org.richfaces.photoalbum.model.event.SimpleEvent;
/**
* This class represent 'M' in MVC pattern. It is storage to application flow related data such as selectedAlbum, image,
* mainArea to preview etc..
*
* @author Andrey Markhel
*/
@Named
@ApplicationScoped
public class Model implements Serializable {
private static final long serialVersionUID = -1767281809514660171L;
private Image selectedImage;
private Album selectedAlbum;
private User selectedUser;
private Shelf selectedShelf;
private MetaTag selectedTag;
private Event selectedEvent;
private NavigationEnum mainArea = NavigationEnum.ANONYM;
private List<Image> images;
@Inject
@Any
javax.enterprise.event.Event<SimpleEvent> event;
@Inject
MetaTag metatag;
/**
* This method invoked after the almost user actions, to prepare properly data to show in the UI.
*
* @param mainArea - next Area to show(determined in controller)
* @param selectedUser - user, that was selected(determined in controller)
* @param selectedShelf - shelf, that was selected(determined in controller)
* @param selectedAlbum - album, that was selected(determined in controller)
* @param selectedImage - image, that was selected(determined in controller)
* @param images - list of images, to show during slideshow process(determined in controller)
*/
public void resetModel(NavigationEnum mainArea, User selectedUser, Shelf selectedShelf, Album selectedAlbum,
Image selectedImage, List<Image> images) {
if (this.mainArea != null && this.mainArea.equals(NavigationEnum.FILE_UPLOAD)) {
event.select(new EventTypeQualifier(Events.CLEAR_FILE_UPLOAD_EVENT)).fire(new SimpleEvent());
}
this.setSelectedAlbum(selectedAlbum);
this.setSelectedImage(selectedImage);
this.setSelectedShelf(selectedShelf);
this.setSelectedUser(selectedUser);
// this.setMainArea(mainArea);
this.mainArea = mainArea;
this.images = images;
}
public void resetModel(NavigationEnum mainArea, User selectedUser, Shelf selectedShelf, Album selectedAlbum,
Image selectedImage, List<Image> images, Event selectedEvent) {
resetModel(mainArea, selectedUser, selectedShelf, selectedAlbum, selectedImage, images);
this.selectedEvent = selectedEvent;
}
/**
* This method observes <code> Constants.UPDATE_MAIN_AREA_EVENT </code>event and invoked after the user actions, that not
* change model, but change area to preview
*
* @param mainArea - next Area to show
*
*/
public void setMainArea(@Observes @EventType(Events.UPDATE_MAIN_AREA_EVENT) NavEvent ne) {
if (this.mainArea != null && this.mainArea.equals(NavigationEnum.FILE_UPLOAD)) {
event.select(new EventTypeQualifier(Events.CLEAR_FILE_UPLOAD_EVENT)).fire(new SimpleEvent());
}
this.mainArea = ne.getNav();
}
/**
* This method observes <code> Constants.UPDATE_SELECTED_TAG_EVENT </code>event and invoked after the user click on any
* metatag.
*
* @param selectedTag - clicked tag
*
*/
public void setSelectedTag(MetaTag tag) {
this.selectedTag = tag;
}
public void observeSelectedTag(@Observes @EventType(Events.UPDATE_SELECTED_TAG_EVENT) SimpleEvent se) {
this.selectedTag = metatag;
}
public NavigationEnum getMainArea() {
return mainArea;
}
public Image getSelectedImage() {
return selectedImage;
}
private void setSelectedImage(Image selectedImage) {
this.selectedImage = selectedImage;
}
public Album getSelectedAlbum() {
return selectedAlbum;
}
public void setSelectedAlbum(Album selectedAlbum) {
this.selectedAlbum = selectedAlbum;
}
public User getSelectedUser() {
return selectedUser;
}
private void setSelectedUser(User selectedUser) {
this.selectedUser = selectedUser;
}
public Shelf getSelectedShelf() {
return selectedShelf;
}
private void setSelectedShelf(Shelf selectedShelf) {
this.selectedShelf = selectedShelf;
}
public MetaTag getSelectedTag() {
return selectedTag;
}
public List<Image> getImages() {
return images;
}
public void setImages(List<Image> images) {
this.images = images;
}
public Event getSelectedEvent() {
return selectedEvent;
}
public void setSelectedEvent(Event selectedEvent) {
this.selectedEvent = selectedEvent;
}
}