/* * Copyright 2008-2010 the original author or authors. * * 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. */ package es.alvsanand.webpage.web.beans.admin; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.Serializable; import java.net.FileNameMap; import java.net.URLConnection; import java.util.ArrayList; import java.util.List; import javax.faces.application.FacesMessage; import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import org.apache.commons.lang.StringUtils; import org.primefaces.event.FileUploadEvent; import es.alvsanand.webpage.AlvsanandException; import es.alvsanand.webpage.common.FacesUtils; import es.alvsanand.webpage.common.Globals; import es.alvsanand.webpage.common.Logger; import es.alvsanand.webpage.common.MessageResources; import es.alvsanand.webpage.common.photo.Album; import es.alvsanand.webpage.common.photo.Photo; import es.alvsanand.webpage.services.admin.ImageAdminService; import es.alvsanand.webpage.services.admin.ImageAdminServiceImpl; @SessionScoped @ManagedBean(name = "imageBean") public class ImageBean implements Serializable { /** * */ private static final long serialVersionUID = 5993666590870210230L; private transient static final Logger logger = new Logger(ImageBean.class); private transient static final String LIST_ALBUMS_VIEW_ID = "pretty:listAlbums"; private transient static final String LIST_PHOTOS_VIEW_ID = "/xhtml/secured/admin/images/listPhoto.xhtml"; private transient ImageAdminService imageAdminService; private String photoId; private String photoTitle; private String photoDescription; private String albumId; private String albumTitle; private String albumDescription; private List<Album> albums; private List<Photo> photos; private byte[] photoData; private String photoMediaType; private boolean galleryAlbum; public ImageBean() { } public ImageAdminService getImageAdminService() { if (imageAdminService == null) { imageAdminService = new ImageAdminServiceImpl(); } return imageAdminService; } public String getPhotoId() { return photoId; } public void setPhotoId(String photoId) { this.photoId = photoId; } public String getPhotoTitle() { return photoTitle; } public void setPhotoTitle(String photoTitle) { this.photoTitle = photoTitle; } public String getPhotoDescription() { return photoDescription; } public void setPhotoDescription(String photoDescription) { this.photoDescription = photoDescription; } public String getAlbumId() { return albumId; } public void setAlbumId(String albumId) { this.albumId = albumId; } public String getAlbumTitle() { return albumTitle; } public void setAlbumTitle(String albumTitle) { this.albumTitle = albumTitle; } public String getAlbumDescription() { return albumDescription; } public void setAlbumDescription(String albumDescription) { this.albumDescription = albumDescription; } public List<Album> getAlbums() { return albums; } public void setAlbums(List<Album> albums) { this.albums = albums; } public List<Photo> getPhotos() { return photos; } public void setPhotos(List<Photo> photos) { this.photos = photos; } public byte[] getPhotoData() { return photoData; } public void setPhotoData(byte[] photoData) { this.photoData = photoData; } public String getPhotoMediaType() { return photoMediaType; } public void setPhotoMediaType(String photoMediaType) { this.photoMediaType = photoMediaType; } public boolean isGalleryAlbum() { return galleryAlbum; } public void setGalleryAlbum(boolean galleryAlbum) { this.galleryAlbum = galleryAlbum; } // JSF methods public void loadAlbums() throws AlvsanandException { logger.info("Launched AlbumBean.loadAlbums"); albums = getImageAdminService().getAlbums(); photos = null; albumId = null; albumTitle = null; albumDescription = null; galleryAlbum = false; photoId = null; photoTitle = null; photoDescription = null; photoData = null; photoMediaType = null; } public void newAlbum() throws AlvsanandException { logger.info("Launched AlbumBean.newAlbum"); albumId = null; albumTitle = null; albumDescription = null; galleryAlbum = false; } public void editAlbum() throws AlvsanandException { logger.info("Launched AlbumBean.editAlbum[" + albumId + "]"); Album _album = new Album(); _album.setId(albumId); Album album = getImageAdminService().getAlbum(_album); if(album.getDescription()!=null && album.getDescription().indexOf(Globals.GALLERY_ALBUM_MEDIA_KEYWORD)==0){ albumDescription = album.getDescription().substring(Globals.GALLERY_ALBUM_MEDIA_KEYWORD.length()); galleryAlbum = true; } else{ albumDescription = album.getDescription(); galleryAlbum = false; } albumTitle = album.getTitle(); } public String deleteAlbum() throws AlvsanandException { logger.info("Launched AlbumBean.deleteAlbum[" + albumId + "]"); Album album = new Album(); album.setId(albumId); getImageAdminService().deleteAlbum(album); return LIST_ALBUMS_VIEW_ID; } public void addAlbum() throws AlvsanandException { logger.info("Launched AlbumBean.addAlbum[" + albumTitle + "]"); Album album = new Album(); album.setTitle(albumTitle); album.setId(albumId); if(galleryAlbum){ album.setDescription(Globals.GALLERY_ALBUM_MEDIA_KEYWORD + albumDescription); } else{ album.setDescription(albumDescription); } getImageAdminService().addAlbum(album); loadAlbums(); } public void updateAlbum() throws AlvsanandException { logger.info("Launched AlbumBean.updateAlbum[" + albumTitle + "]"); Album album = new Album(); album.setId(albumId); album.setTitle(albumTitle); if(galleryAlbum){ album.setDescription(Globals.GALLERY_ALBUM_MEDIA_KEYWORD + albumDescription); } else{ album.setDescription(albumDescription); } getImageAdminService().updateAlbum(album); loadAlbums(); } public String loadPhotos() throws AlvsanandException { logger.info("Launched PhotoBean.loadPhotos"); Album album = new Album(); album.setId(albumId); photos = getImageAdminService().getPhotos(album); albumTitle = album.getTitle(); photoId = null; photoTitle = null; photoDescription = null; photoData = null; photoMediaType = null; return LIST_PHOTOS_VIEW_ID; } public void loadPhotosWithoutView() throws AlvsanandException { logger.info("Launched PhotoBean.loadPhotos"); Album album = new Album(); album.setId(albumId); photos = getImageAdminService().getPhotos(album); albumTitle = album.getTitle(); photoId = null; photoTitle = null; photoDescription = null; photoData = null; photoMediaType = null; } public void newPhoto() throws AlvsanandException { logger.info("Launched PhotoBean.newPhoto"); photoId = null; photoTitle = null; photoDescription = null; photoData = null; photoMediaType = null; } public void editPhoto() throws AlvsanandException { logger.info("Launched PhotoBean.editPhoto[" + photoId + "]"); Photo _photo = new Photo(); _photo.setId(photoId); _photo.setAlbumId(albumId); Photo photo = getImageAdminService().getPhoto(_photo); photoDescription = photo.getDescription(); photoTitle = photo.getTitle(); photoData = null; photoMediaType = null; } public String deletePhoto() throws AlvsanandException { logger.info("Launched PhotoBean.deletePhoto[" + photoId + "]"); Photo _photo = new Photo(); _photo.setId(photoId); _photo.setAlbumId(albumId); Photo photo = getImageAdminService().getPhoto(_photo); getImageAdminService().deletePhoto(photo); return LIST_PHOTOS_VIEW_ID; } public void addPhoto() throws AlvsanandException { logger.info("Launched PhotoBean.addPhoto[" + photoTitle + "]"); if(photoData==null){ FacesMessage message = new FacesMessage(); message.setDetail(MessageResources.getMessage(MessageResources.ERROR_RESOURCE_BUNDLE_NAME, "error.admin.image.fileUpload.detail", null)); message.setSummary(MessageResources.getMessage(MessageResources.ERROR_RESOURCE_BUNDLE_NAME, "error.admin.image.fileUpload.summary", null)); message.setSeverity(FacesMessage.SEVERITY_ERROR); FacesContext.getCurrentInstance().addMessage(null, message); return; } Photo photo = new Photo(); photo.setTitle(photoTitle); photo.setDescription(photoDescription); photo.setAlbumId(albumId); getImageAdminService().addPhoto(photo, photoData, photoMediaType); loadPhotos(); } public void updatePhoto() throws AlvsanandException { logger.info("Launched PhotoBean.updatePhoto[" + photoTitle + "]"); Photo photo = new Photo(); photo.setId(photoId); photo.setAlbumId(albumId); photo.setTitle(photoTitle); photo.setDescription(photoDescription); photo.setAlbumId(albumId); getImageAdminService().updatePhoto(photo); loadPhotos(); } public void handleFileUpload(FileUploadEvent fileUploadEvent) { logger.info("Uploaded: {" + fileUploadEvent.getFile().getFileName() + "}"); FacesContext context = FacesContext.getCurrentInstance(); UIComponent fileUploadComponent = FacesUtils.findComponent(context.getViewRoot(), "fileUpload"); InputStream inputStream = null; try { inputStream = fileUploadEvent.getFile().getInputstream(); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); byte[] buf = new byte[1024]; int length; while ((length = inputStream.read(buf)) > 0) { outputStream.write(buf, 0, length); } inputStream.close(); photoData = outputStream.toByteArray(); outputStream.close(); FileNameMap fileNameMap = URLConnection.getFileNameMap(); photoMediaType = fileNameMap.getContentTypeFor(fileUploadEvent.getFile().getFileName()); FacesMessage message = new FacesMessage(); message.setDetail(MessageResources.getMessage(MessageResources.ADMIN_RESOURCE_BUNDLE_NAME, "admin.uploadedFile.message.detail", null)); message.setSummary(MessageResources.getMessage(MessageResources.ADMIN_RESOURCE_BUNDLE_NAME, "admin.uploadedFile.message.summary", null)); message.setSeverity(FacesMessage.SEVERITY_INFO); FacesContext.getCurrentInstance().addMessage(null, message); } catch (IOException ioException) { FacesMessage message = new FacesMessage(); message.setDetail(MessageResources.getMessage(MessageResources.ERROR_RESOURCE_BUNDLE_NAME, "error.form.validation.loadArticleBulkUpload.badFile.detail", null)); message.setSummary(MessageResources.getMessage(MessageResources.ERROR_RESOURCE_BUNDLE_NAME, "error.form.validation.loadArticleBulkUpload.badFile.summary", null)); message.setSeverity(FacesMessage.SEVERITY_ERROR); FacesContext.getCurrentInstance().addMessage(fileUploadComponent.getClientId(context), message); return; } catch (Exception exception) { logger.error("Error uploading file:", exception); return; } } public boolean getCouldUpdateImage(){ if(StringUtils.isNotEmpty(this.getPhotoId())){ return true; } return false; } public boolean getCouldAddImage(){ if(StringUtils.isEmpty(this.getPhotoId()) && photoData != null){ return true; } return false; } public List<?> getEntries(){ if(getPhotos()!=null){ return getPhotos(); } else{ return getAlbumsForArticles(); } } public List<Album> getAlbumsForArticles() { List<Album> albums = new ArrayList<Album>(); if(this.albums!=null){ for(Album album: this.albums){ if(album.getDescription()!=null && album.getDescription().indexOf(Globals.GALLERY_ALBUM_MEDIA_KEYWORD)!=0){ albums.add(album); } } } return albums; } }