Android Open Source - SanDisk-HQME-SDK Protocol Manager






From Project

Back to project page SanDisk-HQME-SDK.

License

The source code is released under:

Apache License

If you think the Android project SanDisk-HQME-SDK listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/** 
* This reference code is an implementation of the IEEE P2200 standard.  It is not
* a contribution to the IEEE P2200 standard.
* /*  w w  w. j av a2 s .  c  o  m*/
* Copyright (c) 2011 SanDisk Corporation.  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 com.hqme.cm.core;

import com.hqme.cm.util.CmClientUtil;

import java.net.URISyntaxException;
import java.util.LinkedList;
import java.util.List;

/**
 * Protocol Manager handles registration and lifetime management of various
 * ProtocolHandlers.
 * 
 * Implementation Note: Currently Uri is a required field for selection of 
 * the ProtocolHandler and MIME type is not used.
 * 
 * Future implementations of the ProtocolManager will select a ProtocolHandler based on
 * both the MIME type and, if-defined, the Uri of the Request.                 
 */
public class ProtocolManager {

    private static ProtocolManager mSingleProtocolManager = null;
    private List<ProtocolPlugin> mPlugins = new LinkedList<ProtocolPlugin>();
    
    private ProtocolManager() {
        
    }
    
    /** Get Singleton instance of protocol manager.
     * 
     * @return ProtocolManager instance.
     */
    public static ProtocolManager getInstance() {
        if (mSingleProtocolManager == null)
        {
            mSingleProtocolManager = new ProtocolManager();
        
            // Register default plugins:
            mSingleProtocolManager.registerPlugin(new ProtocolPluginHttp());
        }
        
        return mSingleProtocolManager;
    }
    
    public boolean registerPlugin(ProtocolPlugin pm) {
        if (mPlugins.contains(pm))
            return false;
        
        return mPlugins.add(pm);
    }
    
    public boolean unregisterPlugin(ProtocolPlugin pm) {
        return mPlugins.remove(pm);
    }
    
    /**
     * Based on URI searches all registered ProtocolHandlers and returns the one
     * that can handle these type of URIs.
     * 
     * @param URI Source URI for the operation.
     * @return A ProtocolHandler instance that can handle this type of URIs.
     *         Instance is not initialized with the URI.
     * @throws ProtocolException Thrown if an unrecoverable error occurs.
     */
    public ProtocolHandler getProtocolHandler(String URI) throws ProtocolException {
        final String tag_LogLocal = "ProtocolManager_getProtocolHandler";
        String scheme = getUriScheme(URI);
        
        CmClientUtil.debugLog(getClass(), tag_LogLocal, "%s", "Scheme [ " + scheme +" ] for URI = [ " + URI + " ].");
        
        if (scheme == null)
            throw new ProtocolException(ProtocolException.ProtocolError.ERR_UNSUPPORTED_PROTOCOL, "Scheme is NULL.");
        
        for(ProtocolPlugin plugin: mPlugins) {
            if (plugin.canHandleProtocol(scheme))
                return plugin.getNewProtocolHandler();
        }
        
        throw new ProtocolException(ProtocolException.ProtocolError.ERR_UNSUPPORTED_PROTOCOL, "Not supported by registered plugins.");
    }

    /** Returns protocol scheme as a String.
     * 
     * @param URI   source URI
     * @return      lower case scheme String. null on error.
     */
    private String getUriScheme(String URI) {
        String scheme = null;
        try {
            java.net.URI uri = new java.net.URI(URI);
            scheme =  uri.getScheme();
        } catch (URISyntaxException fault) {
            // Ignore exception.
        }
        
        if (scheme != null)
            scheme = scheme.toLowerCase();
        
        return scheme;
    }
}




Java Source Code List

com.hqme.cm.Account.java
com.hqme.cm.EventsNotify.java
com.hqme.cm.HqmeError.java
com.hqme.cm.OriginACL.java
com.hqme.cm.Permission.java
com.hqme.cm.Property.java
com.hqme.cm.QueueRequestState.java
com.hqme.cm.ReqEvents.java
com.hqme.cm.VSDEvent.java
com.hqme.cm.VSDFunctionGroups.java
com.hqme.cm.VSDProperties.java
com.hqme.cm.cache.PlaybackTokens.java
com.hqme.cm.cache.StreamingServer.java
com.hqme.cm.cache.UntenCacheService.java
com.hqme.cm.cache.UntenMedia.java
com.hqme.cm.core.CmApplication.java
com.hqme.cm.core.DeviceDescription.java
com.hqme.cm.core.HQMEProvider.java
com.hqme.cm.core.HQME.java
com.hqme.cm.core.Package.java
com.hqme.cm.core.Policy.java
com.hqme.cm.core.ProtocolException.java
com.hqme.cm.core.ProtocolHandlerInputStream.java
com.hqme.cm.core.ProtocolHandler.java
com.hqme.cm.core.ProtocolManager.java
com.hqme.cm.core.ProtocolPluginHttp.java
com.hqme.cm.core.ProtocolPlugin.java
com.hqme.cm.core.QueueRequestObject.java
com.hqme.cm.core.QueueRequestProperties.java
com.hqme.cm.core.RULE_AVAILABLE_SPACE.java
com.hqme.cm.core.RULE_BANDWIDTH_LIMIT.java
com.hqme.cm.core.RULE_CHARGING_STATE.java
com.hqme.cm.core.RULE_CONNECTION_TYPE.java
com.hqme.cm.core.RULE_DOWNLOAD_LIMIT.java
com.hqme.cm.core.RULE_EXPIRE.java
com.hqme.cm.core.RULE_FREE_SPACE.java
com.hqme.cm.core.RULE_FUNCTIONGROUPS.java
com.hqme.cm.core.RULE_MANDATORY_TIME.java
com.hqme.cm.core.RULE_MAX_SIZE.java
com.hqme.cm.core.RULE_POWER_LEVEL.java
com.hqme.cm.core.RULE_PRIORITY.java
com.hqme.cm.core.RULE_ROAMING.java
com.hqme.cm.core.RULE_SCHEDULE.java
com.hqme.cm.core.RULE_TIME.java
com.hqme.cm.core.Record.java
com.hqme.cm.core.RuleBase.java
com.hqme.cm.core.RuleCollection.java
com.hqme.cm.core.Rule.java
com.hqme.cm.core.StorageManager.java
com.hqme.cm.core.WorkOrderManager.java
com.hqme.cm.core.WorkOrder.java
com.hqme.cm.core.policyParser.Expression.java
com.hqme.cm.core.policyParser.HqmePolicyException.java
com.hqme.cm.core.policyParser.LogicalExpression.java
com.hqme.cm.core.policyParser.NegateExpression.java
com.hqme.cm.core.policyParser.Operator.java
com.hqme.cm.core.policyParser.PolicyElementParser.java
com.hqme.cm.core.policyParser.PolicyExpression.java
com.hqme.cm.core.policyParser.Precedence.java
com.hqme.cm.core.policyParser.Token.java
com.hqme.cm.core.policyParser.Tokenizer.java
com.hqme.cm.sample.HqmeClientActivity.java
com.hqme.cm.sample.HqmeClientReceiver.java
com.hqme.cm.util.CmClientUtil.java
com.hqme.cm.util.CmDate.java
com.hqme.cm.util.CmNumber.java
com.hqme.cm.util.CmProperties.java
com.hqme.cm.util.CmUri.java