/**************************************************************************** * 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]; } }