package angularBeans.demoApp.ngbeans;
import java.util.HashSet;
import java.util.Set;
import javax.enterprise.event.Event;
import javax.inject.Inject;
import angularBeans.api.AngularBean;
import angularBeans.api.NGModel;
import angularBeans.api.http.Put;
import angularBeans.context.NGSessionScoped;
import angularBeans.demoApp.domain.ClassRoom;
import angularBeans.demoApp.domain.NotificationMessage;
import angularBeans.demoApp.domain.User;
import angularBeans.demoApp.service.VirtualClassService;
import angularBeans.realtime.RealTime;
import angularBeans.realtime.RealTimeClient;
import angularBeans.util.ModelQuery;
import angularBeans.util.ModelQueryFactory;
@NGSessionScoped
@AngularBean
public class ClassRoomsService {
@Inject
VirtualClassService virtualClassService;
@Inject
Event<NotificationMessage> notificationsBus;
@Inject
@AngularBean
AuthenticationService authenticationService;
@Inject
ModelQuery modelQuery;
@Inject
ModelQueryFactory modelQueryFactory;
@Inject
RealTimeClient client;
// public void tata(@Observes @DataReceivedEvent DataReceived event) {
// System.out.println("RECEIVED: " + event.getData());
//
// }
@NGModel
public Set<ClassRoom> getClassRooms() {
return virtualClassService.getClassRoomsMap().keySet();
}
public Set<User> getUsers(ClassRoom classRoom) {
return virtualClassService.getClassRoomsMap().get(classRoom);
}
// @NGPostConstruct
public void init() {
// modelQueryFactory.get(ClassRoomsService.class).setProperty("classRooms",
// getClassRooms());
}
@Put
public String join(ClassRoom classRoom) {
// singleClassRoomsCtrl.setActualClassRoom(classRoom);
User user = authenticationService.getConnectedUser();
if (!virtualClassService.getClassRoomsMap().get(classRoom)
.contains(user))
{
virtualClassService.getClassRoomsMap().get(classRoom).add(user);
NotificationMessage notificationMessage = new NotificationMessage(
"info", "new Member", user.getPseudo()
+ " has joined the class " + classRoom.getName()
+ " !", true);
notificationsBus.fire(notificationMessage);
ModelQuery query = modelQueryFactory.get(
SingleClassRoomService.class).pushTo("users", user);
client.broadcast(query, true);
// or #1
// client.broadcast( "joinEvent",
//
// new RealTimeMessage()
// .set("user", user)
// .set("classRoom", classRoom)
//
// ,true);
}
return "/classRoom";
}
@RealTime
public void addClassRoom(String classRoomName) {
ClassRoom classRoom = new ClassRoom();
classRoom.setName(classRoomName);
virtualClassService.getClassRoomsMap().put(classRoom,
new HashSet<User>());
client.broadcast(modelQuery.pushTo("classRooms", classRoom), false);
}
}