| /**************************************************************************** |
| * Copyright (c) 2004 Composent, Inc. and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Composent, Inc. - initial API and implementation |
| *****************************************************************************/ |
| |
| package org.eclipse.ecf.telephony.call; |
| |
| import java.io.ObjectStreamException; |
| import java.io.Serializable; |
| |
| /** |
| * Type-safe enumeration class to represent call session state information. See |
| * {@link ICallSession#getState()}. |
| */ |
| public class CallSessionState implements Serializable { |
| protected static final long serialVersionUID = -3223811084140684042L; |
| protected static final String UNPLACED_NAME = "unplaced"; //$NON-NLS-1$ |
| protected static final String REDIRECTED_NAME = "redirected"; //$NON-NLS-1$ |
| protected static final String ROUTING_NAME = "routing"; //$NON-NLS-1$ |
| protected static final String PREPENDING_NAME = "prepending"; //$NON-NLS-1$ |
| protected static final String FAILED_NAME = "failed"; //$NON-NLS-1$ |
| protected static final String PENDING_NAME = "pending"; //$NON-NLS-1$ |
| protected static final String ACTIVE_NAME = "active"; //$NON-NLS-1$ |
| protected static final String ONHOLD_NAME = "onhold"; //$NON-NLS-1$ |
| protected static final String FINISHED_NAME = "finished"; //$NON-NLS-1$ |
| protected static final String MISSED_NAME = "missed"; //$NON-NLS-1$ |
| protected static final String REFUSED_NAME = "refused"; //$NON-NLS-1$ |
| protected static final String BUSY_NAME = "busy"; //$NON-NLS-1$ |
| protected static final String CANCELLED_NAME = "cancelled"; //$NON-NLS-1$ |
| protected static final String UNKNOWN_NAME = "unknown";//$NON-NLS-1$ |
| protected static final String ERROR_NAME = "error"; //$NON-NLS-1$ |
| |
| private final transient String name; |
| |
| protected CallSessionState(String name) { |
| this.name = name; |
| } |
| |
| public static CallSessionState fromString(String state) { |
| if (state == null) |
| return null; |
| |
| if (state.equals(UNPLACED_NAME)) |
| return UNPLACED; |
| if (state.equals(REDIRECTED_NAME)) |
| return REDIRECTED; |
| else if (state.equals(ROUTING_NAME)) |
| return ROUTING; |
| else if (state.equals(PREPENDING_NAME)) |
| return PREPENDING; |
| else if (state.equals(FAILED_NAME)) |
| return FAILED; |
| else if (state.equals(PENDING_NAME)) |
| return PENDING; |
| else if (state.equals(ACTIVE_NAME)) |
| return ACTIVE; |
| else if (state.equals(ONHOLD_NAME)) |
| return ONHOLD; |
| else if (state.equals(FINISHED_NAME)) |
| return FINISHED; |
| else if (state.equals(MISSED_NAME)) |
| return MISSED; |
| else if (state.equals(REFUSED_NAME)) |
| return REFUSED; |
| else if (state.equals(BUSY_NAME)) |
| return BUSY; |
| else if (state.equals(CANCELLED_NAME)) |
| return CANCELLED; |
| else if (state.equals(ERROR_NAME)) |
| return ERROR; |
| else |
| return UNKNOWN; |
| } |
| |
| /** |
| * For calls where the request has not yet been sent to the target receiver. |
| */ |
| public static final CallSessionState UNPLACED = new CallSessionState(UNPLACED_NAME); |
| /** |
| * For calls that have been redirected to a new target receiver. |
| */ |
| public static final CallSessionState REDIRECTED = new CallSessionState(REDIRECTED_NAME); |
| /** |
| * For calls where the routing is in progress, and the target has not yet |
| * received the request. |
| */ |
| public static final CallSessionState ROUTING = new CallSessionState(ROUTING_NAME); |
| /** |
| * To indicate that the call request has not yet been delivered to the |
| * receiver (which results in a PENDING state), but has completed routing. |
| */ |
| public static final CallSessionState PREPENDING = new CallSessionState(PREPENDING_NAME); |
| /** |
| * For calls where the call has failed, either due to network error, sender |
| * and/or receiver going offline, or some other failure to deliver or answer |
| * a call request. |
| */ |
| public static final CallSessionState FAILED = new CallSessionState(FAILED_NAME); |
| /** |
| * For a call where the request has been received, and the receiver has not |
| * yet responded to the request. Also known as 'ringing'. |
| */ |
| public static final CallSessionState PENDING = new CallSessionState(PENDING_NAME); |
| /** |
| * For calls where the call has been successfully answered and the parties |
| * are speaking. |
| */ |
| public static final CallSessionState ACTIVE = new CallSessionState(ACTIVE_NAME); |
| /** |
| * For calls that have been put on hold by one of the two parties. |
| */ |
| public static final CallSessionState ONHOLD = new CallSessionState(ONHOLD_NAME); |
| /** |
| * To indicate that the call (previously ACTIVE) is now finished. This state |
| * can be reached by either partie(s) ending the call in a normal manner |
| * (e.g. hangup). |
| */ |
| public static final CallSessionState FINISHED = new CallSessionState(FINISHED_NAME); |
| /** |
| * To indicate that a call request has been missed (the receiver did not |
| * answer in time). |
| */ |
| public static final CallSessionState MISSED = new CallSessionState(MISSED_NAME); |
| /** |
| * To indicate that a call request has been explicitly refused by the |
| * receiver. |
| */ |
| public static final CallSessionState REFUSED = new CallSessionState(REFUSED_NAME); |
| /** |
| * For calls where the receiver of the call request is busy and not able to |
| * answer the call. |
| */ |
| public static final CallSessionState BUSY = new CallSessionState(BUSY_NAME); |
| /** |
| * For calls where the initial requester has cancelled the call request. |
| */ |
| public static final CallSessionState CANCELLED = new CallSessionState(CANCELLED_NAME); |
| /** |
| * For calls where the state is not known. |
| */ |
| public static final CallSessionState UNKNOWN = new CallSessionState(UNKNOWN_NAME); |
| /** |
| * For calls where there has been an error, resulting in loss of connection. |
| */ |
| public static final CallSessionState ERROR = new CallSessionState(ERROR_NAME); |
| |
| public String toString() { |
| return name; |
| } |
| |
| // This is to make sure that subclasses don't screw up these methods |
| public final boolean equals(Object that) { |
| return super.equals(that); |
| } |
| |
| public final int hashCode() { |
| return super.hashCode(); |
| } |
| |
| // For serialization |
| private static int nextOrdinal = 0; |
| private final int ordinal = nextOrdinal++; |
| private static final CallSessionState[] VALUES = {UNPLACED, REDIRECTED, ROUTING, PREPENDING, FAILED, PENDING, ACTIVE, ONHOLD, FINISHED, MISSED, REFUSED, BUSY, CANCELLED, UNKNOWN, ERROR}; |
| |
| /** |
| * @return Object |
| * @throws ObjectStreamException not thrown by this implementation. |
| */ |
| Object readResolve() throws ObjectStreamException { |
| return VALUES[ordinal]; |
| } |
| } |