package org.jtheque.films.controllers.impl;
/*
* Copyright JTheque (Baptiste Wicht)
*
* 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.
*/
import org.jtheque.core.managers.Managers;
import org.jtheque.core.managers.log.ILoggingManager;
import org.jtheque.core.managers.resource.IResourceManager;
import org.jtheque.core.managers.view.able.IViewManager;
import org.jtheque.films.controllers.able.IFilmController;
import org.jtheque.films.persistence.od.able.Film;
import org.jtheque.films.services.able.IFilmsService;
import org.jtheque.films.utils.Constants;
import org.jtheque.films.view.able.IFilmView;
import org.jtheque.films.view.impl.models.able.IFilmsModel;
import org.jtheque.primary.controller.able.ControllerState;
import org.jtheque.primary.controller.impl.PrincipalController;
import org.jtheque.utils.DesktopMail;
import org.jtheque.utils.DesktopUtils;
import org.jtheque.utils.StringUtils;
import org.jtheque.utils.io.CopyException;
import org.jtheque.utils.io.FileUtils;
import org.jtheque.utils.io.SimpleFilter;
import org.jtheque.utils.print.PrintUtils;
import javax.annotation.Resource;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
/**
* A film controller implementation.
*
* @author Baptiste Wicht
*/
public final class FilmController extends PrincipalController<Film> implements IFilmController {
@Resource
private IFilmsService filmService;
@Resource
private IFilmView filmView;
private final SimpleFilter imagesFilter = new SimpleFilter("Images(*.jpg,*.png)", ".jpg,.png,.gif");
public FilmController(ControllerState viewState, ControllerState modifyState,
ControllerState newObjectState, ControllerState autoAddState) {
super(viewState, modifyState, newObjectState, autoAddState);
}
@Override
public void mouseClicked(MouseEvent event) {
if (event.getClickCount() == 2 && filmView.isEnabled()) {
String image = Managers.getManager(IViewManager.class).chooseFile(imagesFilter);
if (StringUtils.isNotEmpty(image)) {
String extension = image.substring(image.lastIndexOf('.'));
String destination = Constants.Files.MINIATURE_FOLDER + '/' +
getViewModel().getCurrentFilm().getTitle() + extension;
try {
FileUtils.copy(image, destination);
} catch (CopyException e1) {
Managers.getManager(ILoggingManager.class).getLogger(getClass()).error(e1);
}
BufferedImage bufferedImage = Managers.getManager(IResourceManager.class).getImage(image, Constants.MINIATURE_WIDTH);
filmView.setImageOfPanel(bufferedImage);
filmView.refresh();
}
}
}
@Override
public IFilmsModel getViewModel() {
return (IFilmsModel) filmView.getModel();
}
@Override
public void save() {
save(filmView.fillFilmFormBean());
}
@Override
public void sendCurrentFilmByMail() {
DesktopMail mail = new DesktopMail();
mail.setSubject("Fiche du film : " + getViewModel().getCurrentFilm().getTitle());
mail.setBody(filmService.generateEmail(getViewModel().getCurrentFilm()));
DesktopUtils.mail(mail);
}
@Override
public void printCurrentFilm() {
PrintUtils.printString(filmService.generateFilmDescriptionForPrinting(getViewModel().getCurrentFilm()));
}
@Override
public void mouseEntered(MouseEvent e) {
//Nothing to be done
}
@Override
public void mouseExited(MouseEvent e) {
//Nothing to be done
}
@Override
public void mousePressed(MouseEvent e) {
//Nothing to be done
}
@Override
public void mouseReleased(MouseEvent e) {
//Nothing to be done
}
@Override
public IFilmView getView() {
return filmView;
}
@Override
public String getDataType() {
return IFilmsService.DATA_TYPE;
}
}