/*
 *   
 *
 * Copyright  1990-2006 Sun Microsystems, Inc. All Rights Reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
 * 
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License version
 * 2 only, as published by the Free Software Foundation. 
 * 
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License version 2 for more details (a copy is
 * included at /legal/license.txt). 
 * 
 * You should have received a copy of the GNU General Public License
 * version 2 along with this work; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA 
 * 
 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
 * Clara, CA 95054 or visit www.sun.com if you need additional
 * information or have any questions. 
 */

package com.sun.tck.wma;

import com.sun.tck.wma.Connector;
import com.sun.tck.wma.MessageConnection;
import com.sun.tck.wma.cbs.CBSMessageConnection;
import com.sun.tck.wma.sms.SMSMessageConnection;
// #ifdef ENABLE_JSR_205
import com.sun.tck.wma.mms.MMSMessageConnection;
// #endif ENABLE_JSR_205

import java.io.IOException;

/**
 * A factory class for creating new MessageConnection objects.
 */
public class MessageConnector implements Connector {

    /** The URL scheme for the SMS protocol. */
    private final String SMS_SCHEME = "sms:";

    /** The URL scheme for the CBS protocol. */
    private final String CBS_SCHEME = "cbs:";

    // #ifdef ENABLE_JSR_205
    /** The URL scheme for the MMS protocol. */
    private final String MMS_SCHEME = "mms:";
    // #endif ENABLE_JSR_205

    /**
     * Creates and opens a MessageConnection for a particular scheme.
     *
     * @param url    The URL for the connection.
     * @return       A new MessageConnection object.
     *
     * @exception IllegalArgumentException if a parameter is invalid.
     * @exception ConnectionNotFoundException if the requested connection
     *   cannot be made, or the protocol type does not exist.
     * @exception IOException  if some other kind of I/O error occurs.
     * @exception SecurityException if a requested protocol handler is not
     *             permitted
     */
    public MessageConnection open(String url) throws IOException {

        String urlFragment = null;

        if (url.startsWith(SMS_SCHEME)) {

            /* Create and open a SMS connection. */
            SMSMessageConnection handler = new SMSMessageConnection();
            urlFragment = url.substring(SMS_SCHEME.length());
            handler.openPrim(urlFragment);
            return handler;

        } else if (url.startsWith(CBS_SCHEME)) {

            /* Create and open a CBS connection. */
            CBSMessageConnection handler = new CBSMessageConnection();
            urlFragment = url.substring(CBS_SCHEME.length());
            handler.openPrim(urlFragment);
            return handler;
    // #ifdef ENABLE_JSR_205

        } else if (url.startsWith(MMS_SCHEME)) {

            /* Create and open a MMS connection. */
            MMSMessageConnection handler = new MMSMessageConnection();
            urlFragment = url.substring(MMS_SCHEME.length());
            handler.openPrim(urlFragment);
            return handler;
    // #endif ENABLE_JSR_205

        }

        throw new IllegalArgumentException("Unknown protocol: " + url);
    }

}


