/** * $RCSfile: ,v $ * $Revision: $ * $Date: $ * * Copyright (C) 2004-2011 Jive Software. All rights reserved. * * 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. */ package net.java.sipmack.softphone.gui; import java.util.ArrayList; import java.util.List; import net.java.sipmack.common.AlertManager; import net.java.sipmack.common.Log; import net.java.sipmack.sip.Call; import net.java.sipmack.sip.Interlocutor; import net.java.sipmack.sip.InterlocutorUI; import net.java.sipmack.softphone.listeners.InterlocutorListener; import net.java.sipmack.events.UserActionListener; /** * The <code>GuiManager</code> class that Manage all the actions and Events of * User Interface. * * @author Thiago Rocha Camargo (thiago@jivesoftware.com) * @version 1.0, 20/07/2006 */ public class GuiManager implements GuiCallback, DefaultGuiManager { private List<InterlocutorUI> interlocutors = new ArrayList<InterlocutorUI>(); private AlertManager alertManager = new AlertManager(); public List<UserActionListener> actionHandlers = new ArrayList<UserActionListener>(); public List<InterlocutorListener> interlocutorListeners = new ArrayList<InterlocutorListener>(); private boolean autoAnswer = false; /** * Constructor of the class. Instantiate DTMFSounds and create the GUI */ public GuiManager() { } /** * Loads the config form SIPConfig class */ public void loadConfig() { } /** * Sets the actionListener * * @param ual UserActionListener that will handle actions */ public void addUserActionListener(UserActionListener ual) { actionHandlers.add(ual); } /** * Adds an InterlocutorListener * * @param interlocutorListener */ public void addInterlocutorListener(InterlocutorListener interlocutorListener) { interlocutorListeners.add(interlocutorListener); } /** * Removes an InterlocutorListener * * @param interlocutorListener */ public void removeInterlocutorListener(InterlocutorListener interlocutorListener) { interlocutorListeners.remove(interlocutorListener); } /** * Add a new interlocutor * * @param interlocutors InterlocutorUI to be added. */ public synchronized void addInterlocutor(InterlocutorUI interlocutors) { interlocutors.setCallback(this); this.interlocutors.add(interlocutors); for (InterlocutorListener interlocutorListener : interlocutorListeners) { interlocutorListener.interlocutorAdded(interlocutors); } } /** * Update the interlocutor * * @param interlocutorUI To be updated */ public void update(InterlocutorUI interlocutorUI) { } /** * Returns the current interlocutors * * @return List<InterlocutorUI> */ public List<InterlocutorUI> getInterlocutors() { return interlocutors; } /** * Counts the current interlocutors number */ public int countInterlocutors() { return interlocutors.size(); } /** * Remove an interlocutor * * @param interlocutorUI To be removed */ public synchronized void remove(InterlocutorUI interlocutorUI) { interlocutors.remove(interlocutorUI); for (InterlocutorListener interlocutorListener : interlocutorListeners) interlocutorListener.interlocutorRemoved(interlocutorUI); } /** * Start to play a wav. * * @param alertResourceName The wav to be played */ public void startAlert(String alertResourceName) { try { alertManager.startAlert(alertResourceName); } catch (Throwable ex) { // OK, no one cares really } } /** * Stop to play a wav. * * @param alertResourceName The wav to be stop */ public void stopAlert(String alertResourceName) { try { alertManager.stopAlert(alertResourceName); } catch (Throwable ex) { // OK, no one cares really } } /** * Stop all waves. */ public void stopAllAlerts() { try { alertManager.stopAllAlerts(); } catch (Throwable ex) { // OK, no one cares really } } /** * Answer the current ringing call */ public boolean answer() { if (interlocutors.size() < 1) { Log.debug("answer", "No interlocutors"); return false; } boolean found = false; for (InterlocutorUI interlocutor : interlocutors) { Interlocutor inter = (Interlocutor) interlocutor; if (!inter.getCall().isIncoming() || !inter.getCall().getState().equals(Call.ALERTING)) continue; found = true; for (UserActionListener ual : actionHandlers) { ual.handleAnswerRequest(inter); } } Log.debug("answer", "Answered"); return found; } /** * Hold all current calls. In fact it holds all medias depending of the * server. */ public void holdAll() { if (interlocutors.size() < 1) { Log.debug("hold", "No interlocutors"); return; } for (InterlocutorUI interlocutor : interlocutors) { boolean mic = interlocutor.onHoldMic(), cam = interlocutor.onHoldCam(); for (UserActionListener ual : actionHandlers) { ual.handleHold(interlocutor, !mic, cam); } } } /** * Hold current call of associated interlocutor. In fact it holds all medias depending of the * server. * * @param interlocutor interlocutor that will be holded */ public void hold(InterlocutorUI interlocutor) { boolean mic = interlocutor.onHoldMic(), cam = interlocutor.onHoldCam(); for (UserActionListener ual : actionHandlers) { ual.handleHold(interlocutor, !mic, cam); } } /** * Mute all current calls. */ public void muteAll(boolean mic) { if (interlocutors.size() < 1) { Log.debug("mute", "No interlocutors"); return; } for (InterlocutorUI interlocutor : interlocutors) { for (UserActionListener ual : actionHandlers) { ual.handleMute(interlocutor, mic); } } } /** * Mute the current call associated with the informed interlocutor. * * @param interlocutor * @param mic */ public void mute(InterlocutorUI interlocutor, boolean mic) { for (UserActionListener ual : actionHandlers) { ual.handleMute(interlocutor, mic); } } /** * Send a DTMF Tone to all current calls * * @param digit DTMF digit to be sent */ public void sendDTMF(String digit) { if (interlocutors.size() < 1) { Log.debug("sendDTMF", "No interlocutors"); return; } int selectedRow = 0; Interlocutor inter = (Interlocutor) interlocutors.get(selectedRow); for (UserActionListener ual : actionHandlers) { ual.handleDTMF(inter, digit); } } /** * Dial a number * * @param callee Number to be called */ public void dial(String callee) { for (UserActionListener ual : actionHandlers) { ual.handleDialRequest(callee); } } /** * Hangup the current call */ public boolean hangupAll() { if (interlocutors.size() < 1) { Log.debug("hangup", "No interlocutors"); return false; } Interlocutor inter; for (int i = 0; i < interlocutors.size(); i++) { inter = (Interlocutor) interlocutors.get(i); for (UserActionListener ual : actionHandlers) { ual.handleHangupRequest(inter); } } return true; } /** * Hangup the call associated with the informed InterlocutorUI * * @param interlocutorUI * @return */ public boolean hangup(InterlocutorUI interlocutorUI) { boolean result = true; for (UserActionListener ual : actionHandlers) { result = ual.handleHangupRequest((Interlocutor) interlocutorUI) ? result ? true : false : false; } return result; } /** * Set the autoAnswer option * * @param value The value to be set */ public void setAutoAnswer(boolean value) { autoAnswer = value; } /** * Get the autoAnswer option * * @return The value */ public boolean getAutoAnswer() { return autoAnswer; } }