package org.jtheque.films.services.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.language.ILanguageManager;
import org.jtheque.core.managers.persistence.able.DataListener;
import org.jtheque.films.persistence.dao.able.IDaoFilms;
import org.jtheque.films.persistence.od.able.Film;
import org.jtheque.films.services.able.IFilmsService;
import org.jtheque.films.services.able.INotesService;
import org.jtheque.films.services.able.IRealizersService;
import org.jtheque.films.services.impl.utils.VideoFile;
import org.jtheque.primary.od.able.Person;
import org.jtheque.primary.od.able.SimpleData;
import org.jtheque.primary.services.able.ISimpleDataService;
import org.jtheque.utils.StringUtils;
import org.jtheque.utils.print.PrintUtils;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Collection;
/**
* The implementation of the films service.
*
* @author Baptiste Wicht
*/
public final class FilmsService implements IFilmsService {
@Resource
private IDaoFilms daoFilms;
@Resource
private INotesService notesService;
@Resource
private IRealizersService realizersService;
@Resource
private ISimpleDataService kindsService;
@Resource
private ISimpleDataService typesService;
@Resource
private ISimpleDataService languagesService;
@Override
@Transactional
public void create(Film film) {
daoFilms.create(film);
}
@Override
@Transactional
public void save(Film film) {
daoFilms.save(film);
}
@Override
@Transactional
public boolean delete(Film film) {
return daoFilms.delete(film);
}
@Override
@Transactional
public void createAll(Collection<Film> films) {
daoFilms.createAll(films);
}
@Override
public boolean isNoFilms() {
return daoFilms.getFilms().size() <= 0;
}
@Override
public Collection<Film> getFilms() {
return daoFilms.getFilms();
}
@Override
public void addDataListener(DataListener listener) {
daoFilms.addDataListener(listener);
}
@Override
public Collection<Film> getDatas() {
return daoFilms.getFilms();
}
@Override
public Film getDefaultFilm() {
Film emptyFilm = getEmptyFilm();
emptyFilm.setTitle(Managers.getManager(ILanguageManager.class).getMessage("generic.view.actions.new"));
emptyFilm.setNote(notesService.getDefaultNote());
emptyFilm.setTheRealizer(realizersService.getDefaultRealizer());
emptyFilm.addKind(kindsService.getDefaultSimpleData());
emptyFilm.setTheType(typesService.getDefaultSimpleData());
emptyFilm.setTheLanguage(languagesService.getDefaultSimpleData());
return emptyFilm;
}
@Override
public void printListOfFilms() {
Collection<String> list = new ArrayList<String>(25);
list.add("List of films");
for (Film f : daoFilms.getFilms()) {
list.add(f.getDisplayableText());
}
PrintUtils.printArrayString(list);
}
@Override
public String generateEmail(Film film) {
return generateFilmDescription(film);
}
/**
* Create a string description for a film.
*
* @param film The film to generate the description for.
*
* @return The string description of the film.
*/
private static String generateFilmDescription(Film film) {
StringBuilder builder = new StringBuilder(250);
builder.append("Hi, \n\n i'm sending the informations about a film that can interest you : \n");
builder.append("Title : ").append(film.getTitle());
builder.append("\nKind : ");
for (SimpleData kind : film.getKinds()) {
builder.append("\n - ").append(kind.getDisplayableText());
}
builder.append("\nRealizer : ").append(film.getTheRealizer());
builder.append("\nYear : ").append(film.getYear());
builder.append("\nActors : ");
for (Person actor : film.getActors()) {
builder.append("\n - ").append(actor.getDisplayableText());
}
return builder.toString();
}
@Override
public String generateFilmDescriptionForPrinting(Film film) {
return generateFilmDescription(film);
}
@Override
public Collection<VideoFile> getVideoFiles() {
Collection<VideoFile> videoFiles = new ArrayList<VideoFile>(10);
for (Film film : daoFilms.getFilms()) {
if (!StringUtils.isEmpty(film.getFilePath())) {
String path;
if (film.getFilePath().contains("/")) {
path = film.getFilePath().substring(film.getFilePath().lastIndexOf('/') + 1);
} else if (film.getFilePath().contains("\\")) {
path = film.getFilePath().substring(film.getFilePath().lastIndexOf('\\') + 1);
} else {
path = film.getFilePath();
}
videoFiles.add(new VideoFile(path, film));
}
}
return videoFiles;
}
@Override
@Transactional
public void clearAll() {
daoFilms.clearAll();
}
@Override
public String getDataType() {
return DATA_TYPE;
}
@Override
public Film getEmptyFilm() {
return daoFilms.createFilm();
}
}