package org.mobicents.ipbx.session; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import javax.faces.application.FacesMessage; import javax.faces.context.FacesContext; import javax.persistence.EntityManager; import org.jboss.seam.annotations.In; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Transactional; import org.mobicents.ipbx.entity.Binding; import org.mobicents.ipbx.entity.Registration; import org.mobicents.ipbx.entity.User; import org.mobicents.ipbx.session.call.model.CallParticipant; import org.mobicents.ipbx.session.call.model.CallParticipantManager; import org.mobicents.ipbx.session.call.model.Conference; import org.mobicents.ipbx.session.call.model.CurrentWorkspaceState; @Name("registrationAction") @Transactional public class RegistrationAction { @In(required=false) User user; @In DataLoader dataLoader; @In(required=false) CurrentWorkspaceState currentWorkspaceState; @In(create=true) CallAction callAction; @In EntityManager entityManager; private String registrationUri; public String getRegistrationUri() { return registrationUri; } public void setRegistrationUri(String registrationUri) { this.registrationUri = registrationUri; } public void addRegistration() { if(user == null) return; try { User u = entityManager.find(User.class, user.getId()); Registration registration = new Registration(); registration.setUri(registrationUri); registration.setUser(u); if(u.getRegistrations() == null) { u.setRegistrations(new HashSet<Registration>()); } u.getRegistrations().add(registration); entityManager.persist(registration); //user = entityManager.merge(u); dataLoader.refreshRegistrations(); entityManager.flush(); FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Added new registration.")); } catch (Exception e) { FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Error. Try Again!")); e.printStackTrace(); } } public List<Binding> getBindings(Registration registration) { LinkedList<Binding> bindings = new LinkedList<Binding>(); Iterator<Binding> i = registration.getBindings().iterator(); while(i.hasNext()) { bindings.add(i.next()); } return bindings; } public void select(Registration reg) { try { entityManager.merge(reg); entityManager.flush(); } catch (Exception e) {} if(reg.isSelected()) { // We have selected a new active phone! // If we are currently in a call, make a new call to the selected location Conference conf = currentWorkspaceState.getConference(); if(conf != null && conf.getParticipants().length>0) { String[] callableUris = reg.getCallableUris(); for(String uri: callableUris) { callAction.establishCallToRegisteredPhone(uri); } } } else { // If have deselected an active phone. Kill the connection to that phone. for(String uri: reg.getCallableUris()) { CallParticipant cp = CallParticipantManager.instance().getCallParticipant(uri); if(cp != null) { currentWorkspaceState.endCall(cp, true, false); } } } } public void remove(Registration reg) { try { entityManager.remove(reg); } catch (Exception e) {} } }