package su.mauser.service;
import java.util.ArrayList;
import java.util.List;
import org.json.JSONObject;
import spark.QueryParamsMap;
import su.mauser.dao.DAOHelper;
import su.mauser.utils.DifferentUtils;
import su.mauser.view.ActorsPageView;
import su.mauser.view.ActorsView;
import com.mongodb.DB;
import com.mongodb.DBObject;
/**
* Сервис актёров
*
* @author sibiev
*
*/
public class ActorsPageServiceImpl extends DAOHelper
{
public ActorsPageServiceImpl(DB db)
{
super(db);
}
/**
* Полный список актёров
*
* @return Полный список актёров, отсортированных по фамилии
*/
public ActorsPageView getActorsPageView()
{
List<DBObject> actors = actorDao.getSortedFullCollection("lname");
return getView(actors);
}
/**
*
* Получить полный список актёров для установки в фильмы.
*
* @return Список имен актеров с ключами в виде <code>_id</code>.
*/
// public Map<String, String> getActorsNames()
// {
// List<DBObject> actors = dao.getActorNames();
//
// // Полученные данные перевести в мапу
// DifferentUtils utils = new DifferentUtils();
// return utils.getActorsMap(actors);
// }
/**
* Страница актёров
*
* @param actors
* список актёров
* @return
*/
private ActorsPageView getView(List<DBObject> actors)
{
ActorsPageView actorsPageView = new ActorsPageView();
List<ActorsView> actorsViews = new ArrayList<ActorsView>();
int nn = 1;
for (DBObject actor : actors)
{
ActorsView actorsView = new ActorsView();
actorsView.setOid(actor.get("_id").toString());
logger.debug("Actor _id: {}", actorsView.getOid());
actorsView.setNn(nn);
actorsView.setName(actor.get("name").toString());
logger.debug("Actor name: {}", actorsView.getName());
actorsView.setLname(actor.get("lname").toString());
logger.debug("Actor last name: {}", actorsView.getLname());
actorsView.setSname("");
if (actor.get("sname") != null)
{
actorsView.setSname(actor.get("sname").toString());
logger.debug("Actor last name: {}", actorsView.getSname());
}
actorsView.setBdate("");
if (actor.get("bdate") != null)
{
actorsView.setBdate(actor.get("bdate").toString());
logger.debug("Actor birth date: {}", actorsView.getBdate());
}
actorsView.setDdate("");
if (actor.get("ddate") != null)
{
actorsView.setDdate(actor.get("ddate").toString());
logger.debug("Actor death date: {}", actorsView.getDdate());
}
actorsView.setBplace("");
if (actor.get("bplace") != null)
{
actorsView.setBplace(actor.get("bplace").toString());
logger.debug("Actor birth place: {}", actorsView.getBplace());
}
actorsView.setDplace("");
if (actor.get("dplace") != null)
{
actorsView.setDplace(actor.get("dplace").toString());
logger.debug("Actor death place: {}", actorsView.getDplace());
}
actorsView.setInfo("");
if (actor.get("info") != null)
{
actorsView.setInfo(actor.get("info").toString());
logger.debug("Info: {}", actorsView.getInfo());
}
actorsViews.add(actorsView);
nn++;
}
actorsPageView.setActorsView(actorsViews);
return actorsPageView;
}
/**
* Изменение данных актёра
*
* @param queryMap
* данные для изменения
*
*/
public void setDatabaseValues(QueryParamsMap queryMap)
{
actorDao.setActorValues(queryMap);
}
/**
* Удаление актёра
*
* @param queryMap
*/
public void removeActor(QueryParamsMap queryMap)
{
actorDao.removeActor(queryMap);
}
/**
* Получить список всех актеров в виде списка JSON-объектов. Возвращается
* <code>_id</code>, ФИО.
*
* @return Список всех актеров в виде списка JSON-объектов.
*/
public List<JSONObject> getActors()
{
// TODO Нужно вернуть сразу с флагом выбранных. Для этого двумя запросами сначала тянем выбранных, потом невыбранных.
List<DBObject> actors = actorDao.getActorNames();
List<JSONObject> result = new ArrayList<JSONObject>();
for (DBObject actor : actors)
{
JSONObject item = new JSONObject();
item.put("id", actor.get("_id").toString());
item.put("name", DifferentUtils.getActorNameString(actor));
result.add(item);
}
return result;
}
}