package no.niths.services.location;
import java.util.ArrayList;
import java.util.List;
import no.niths.application.rest.helper.Status;
import no.niths.common.helpers.LazyFixer;
import no.niths.common.helpers.MessageProvider;
import no.niths.common.helpers.ValidationHelper;
import no.niths.domain.location.Room;
import no.niths.domain.signaling.AccessField;
import no.niths.infrastructure.interfaces.GenericRepository;
import no.niths.infrastructure.location.interfaces.RoomRepository;
import no.niths.infrastructure.signaling.interfaces.AccessFieldRepository;
import no.niths.services.AbstractGenericService;
import no.niths.services.location.interfaces.RoomService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* Service Class for Room
*
* <p>
* Inherits the basic CRUD actions and has methods
* for addAccessField, removeAccessField,
* and getRoom
* </p>
*/
@Service
public class RoomServiceImpl extends AbstractGenericService<Room> implements
RoomService {
private Logger logger = LoggerFactory.getLogger(RoomServiceImpl.class);
LazyFixer<Room> lazyFixer = new LazyFixer<Room>();
@Autowired
private RoomRepository repo;
@Autowired
private AccessFieldRepository afRepo;
@Override
public List<Room> getAll(Room domain) {
List<Room> rooms = repo.getAll(domain);
lazyFixer.fetchChildren(rooms);
return rooms;
}
@Override
public Room getById(long id) {
Room room = repo.getById(id);
List<Room> roomList = new ArrayList<Room>();
roomList.add(room);
lazyFixer.fetchChildren(roomList);
return roomList.get(0);
}
/**
* {@inheritDoc}
*/
@Override
public void addAccessField(long roomId, long accessFieldId) {
Room room = validate(repo.getById(roomId), Room.class);
checkIfObjectIsInCollection(room.getAccessFields(), accessFieldId, AccessField.class);
AccessField accessField = afRepo.getById(accessFieldId);
ValidationHelper.isObjectNull(accessField, AccessField.class);
room.getAccessFields().add(accessField);
logger.debug(MessageProvider.buildStatusMsg(AccessField.class,
Status.UPDATED));
}
/**
* {@inheritDoc}
*/
@Override
public void removeAccessField(long roomId, long accessFieldId) {
Room room = validate(repo.getById(roomId), Room.class);
checkIfIsRemoved(room.getAccessFields().remove(new AccessField(accessFieldId)),
AccessField.class);
}
@Override
public GenericRepository<Room> getRepository() {
return repo;
}
/**
* {@inheritDoc}
*/
@Override
public Room getRoom(AccessField accessField) {
System.err.println("checking room.................................");
List<Room> rooms = repo.getAll(null);
for (Room room : rooms) {
for (AccessField innerAccessField : room.getAccessFields()) {
if (accessField.isWithinRanges(innerAccessField)) {
System.err.println("================");
System.err.println(room.getRoomName());
System.err.println("================");
}
}
}
return null;
}
}